DisplacementMesh (クラス)
public final DisplacementMesh {inherits {Map-of Fraction2d}}
インポート元: CURL.GUI.STANDARD. package 内で定義されています CURL.GRAPHICS.MAP.

テクスチャの歪みに関連して使用する四角形のグリッド。

次の例では、DisplacementMesh を使って画像を歪める方法を示しています。スライダをさまざまに移動すると、歪みが適用される範囲のサイズと位置が変わります。

例: DisplacementMesh の使用
{import * from CURL.GRAPHICS.IMAGEFILTER}
{value 
    || Define the source pixmap - a black and white grid
    let pixmap:Pixmap = {Pixmap 300, 300}
    {for-pixel p:Pixel at x, y in pixmap do
        {if {floor x/10} mod 3 == 0 or {floor y/10} mod 3 == 0 then 
            set p = {Pixel.create 1, 1, 1}
        }
    }
    set pixmap = {filter-pixmap blur, pixmap, amount=20%} 
    
    || Create the meshes
    let src-mesh:DisplacementMesh = {DisplacementMesh 30, 30}
    let dst-mesh:DisplacementMesh = {DisplacementMesh 30, 30}
    {dst-mesh.twirl 90degrees}
    let out:FillPattern = {warp pixmap, dst-mesh, src-mesh}
    let fill:Fill = {Fill width = 2in, height = 2in, background = out}
    
    || The sliders for controlling the DisplacementMesh
    let sba:Scrollbar = 
        {Scrollbar
            width=2in, direction="horizontal",
            min=-360, max=360,
            blocksize=60, unitsize=10
        }
    let sbx:Scrollbar = 
        {Scrollbar
            width=2in, direction="horizontal",
            min=0, max=1, 
            blocksize=.1, unitsize=.01
        }
    let sby:Scrollbar = 
        {Scrollbar
            height=2in, direction="vertical",
            min=0, max=1, 
            blocksize=.1, unitsize=.01
        }
    let sbr:Scrollbar = 
        {Scrollbar
            width=2in, direction="horizontal",
            min=0, max=.7, 
            blocksize=.1, unitsize=.01
        }
    let eh:EventHandler =  
        {on e:Adjustment at s:Scrollbar do
            {dst-mesh.twirl 
                {sba.get-scroll-value} * 1deg,
                center = 
                    {Fraction2d 
                        {sbx.get-scroll-value},
                        {sby.get-scroll-value}
                    },
                radius = {sbr.get-scroll-value}
            }                            
            set fill.background =
                {warp pixmap, dst-mesh, src-mesh}
        }
    
    || Set the sliders initial values
    {sbx.set-scroll-value 0.5}
    {sby.set-scroll-value 0.5}
    {sbr.set-scroll-value 0.5}
    {sba.set-scroll-value 90.0}
    {sba.add-event-handler eh}
    {sbx.add-event-handler eh}
    {sby.add-event-handler eh}
    {sbr.add-event-handler eh}
    
    {VBox 
        {VBox {HBox fill, sby}, sbx},
        {HBox {text Radius}, sbr},
        {HBox {text Rotation}, sba}
    }
}        

コンストラクタ
clone-from:既存の DisplacementMesh からクローンを作成します。
コンストラクタ public {DisplacementMesh.clone-from source:DisplacementMesh}
default:規則的なグリッドを持ち、歪みマップとして使用されるメッシュを作成します。
コンストラクタ public {DisplacementMesh.default width:int, height:int}

プロパティ
プロパティ 継承 Map-of: empty-value
プロパティ 継承 MapCommon: height, max-offset, max-x, max-y, modified?, size, width

メソッド
clone:DisplacementMesh のクローンを作成します。
public sealed {DisplacementMesh.clone}:DisplacementMesh
get-corners:指定されたグリッド四角形の頂点の位置を返します。
public {DisplacementMesh.get-corners
x:int,
y:int
}:( lower-left:Fraction2d, lower-right:Fraction2d, upper-right:Fraction2d, upper-left:Fraction2d )
get-grid-corners:歪みのないグリッドにある、指定されたグリッド四角形の頂点の位置を返します。
public {DisplacementMesh.get-grid-corners
x:int,
y:int
}:( lower-left:Fraction2d, lower-right:Fraction2d, upper-right:Fraction2d, upper-left:Fraction2d )
interpolate-from:補間によってグリッド ポイントの位置を設定します。
public {DisplacementMesh.interpolate-from}:void
perturb:グリッド ポイントの位置を無作為にシフトして均一されていないグリッドを作成することにより、歪みを作成します。
public {DisplacementMesh.perturb percent:Fraction}:void
reset:規則的なグリッドを再度形成します。
public {DisplacementMesh.reset}:void
spherize:グリッドを球形の歪みに設定します。
public {DisplacementMesh.spherize
percent:Fraction,
center:Fraction2d = {Fraction2d 0.5, 0.5},
radius:double = 0.5
}:void
translate:グリッド ポイントの位置を移動します。
public {DisplacementMesh.translate delta-u:double, delta-v:double}:void
twirl:グリッドを "回転" の歪みに設定します。
public {DisplacementMesh.twirl
angle:Angle,
center:Fraction2d = {Fraction2d 0.5, 0.5},
radius:double = 0.5
}:void
メソッド 継承 Map-of: clear, copy-from, distort, embed-clone, flip-horizontal, flip-horizontal-clone, flip-vertical, flip-vertical-clone, get, get-offset, new-like-self, pad-crop-clone, rotate-180-clone, rotate-270-clone, rotate-90-clone, safe-get, safe-set, set, set-offset, shift, shift-clone, transpose-clone
メソッド 継承 MapCommon: in-bounds?, release
メソッド 継承 Object: object-describe, object-describe-for-debugging, object-serialize



コンストラクタ詳細
clone-from (コンストラクタ)
public {DisplacementMesh.clone-from source:DisplacementMesh}

既存の DisplacementMesh からクローンを作成します。

source: クローン化するオブジェクト。

説明

clone-from および clone は copy-on-write 構造を実装しています。つまり、マップ データは直ちにコピーされず、代わりに新しい DisplacementMesh が元の DisplacementMesh とデータを共有することになります。
ただし、マップの 1 つが変更される場合はデータをコピーする必要があります。マップの 1 つに書き込まれるとマップ データは実際にコピーされ、結果として変更はクローンに影響を与えません。
したがって、clone および clone-from は適正に動作します。マップをクローンしてから元のマップに書き込む場合、クローンは変更されません。ただし、copy-on-write クローンの特徴の利点により、かなり効率的に (メモリおよび速度の点で) マップを変更せずにクローンできます。


default (コンストラクタ)
public {DisplacementMesh.default width:int, height:int}

規則的なグリッドを持ち、歪みマップとして使用されるメッシュを作成します。

説明

作成されたグリッドには、その幅に関する width - 1 グリッド四角形と、高さに関する height - 1 グリッド四角形があります。
width: 幅を形成するグリッド ポイントの数。
height: 高さを形成するグリッド ポイントの数。



プロパティ詳細


メソッド詳細
clone (メソッド)
public sealed {DisplacementMesh.clone}:DisplacementMesh

DisplacementMesh のクローンを作成します。

戻り値

クローン。

オーバーライド

DisplacementMesh のサブクラスには clone-from コンストラクタが必要で、これでデータを初期化する前に super.clone-from を呼び出します。

さらに、clone メソッドを定義する必要があります。このメソッドは元のオブジェクト (clone-from コンストラクタを使用) からクローン化した新しいオブジェクトを返します。

説明

clone-from および clone は copy-on-write 構造を実装しています。つまり、マップ データは直ちにコピーされず、代わりに新しい DisplacementMesh が元の DisplacementMesh とデータを共有することになります。
ただし、マップの 1 つが変更される場合はデータをコピーする必要があります。マップの 1 つに書き込まれるとマップ データは実際にコピーされ、結果として変更はクローンに影響を与えません。
したがって、clone および clone-from は適正に動作します。マップをクローンしてから元のマップに書き込む場合、クローンは変更されません。ただし、copy-on-write クローンの特徴の利点により、かなり効率的に (メモリおよび速度の点で) マップを変更せずにクローンできます。


get-corners (メソッド)
public {DisplacementMesh.get-corners
x:int,
y:int
}:( lower-left:Fraction2d, lower-right:Fraction2d, upper-right:Fraction2d, upper-left:Fraction2d )

指定されたグリッド四角形の頂点の位置を返します。

x, y: グリッド四角形。0, 0 はグリッドの左上にあるグリッド四角形を指定します。

注意事項

歪みを変更するには、DisplacementMesh.set メソッドを使用して特定のグリッド ポイントの位置を設定します。

戻り値

グリッド四角形の 4 つの頂点の位置。次の順序で Fraction2d として返します。
  1. LowerLeft
  2. LowerRight
  3. UpperRight
  4. UpperLeft
        4 ----- 3
        |       |
        |       |
        |       |
        1 ----- 2
Fraction2d の u および v の値は、次の範囲に収める必要があります。[0.0, 1.0].


get-grid-corners (メソッド)
public {DisplacementMesh.get-grid-corners
x:int,
y:int
}:( lower-left:Fraction2d, lower-right:Fraction2d, upper-right:Fraction2d, upper-left:Fraction2d )

歪みのないグリッドにある、指定されたグリッド四角形の頂点の位置を返します。

説明

グリッドが歪められても、これらの値は変化しません。
x, y: グリッド四角形。0, 0 は歪みのないグリッドの左上にあるグリッド四角形を指定します。

戻り値

グリッド四角形の 4 つの頂点の位置。次の順序で Fraction2d として返します。
  1. LowerLeft
  2. LowerRight
  3. UpperRight
  4. UpperLeft
        4 ----- 3
        |       |
        |       |
        |       |
        1 ----- 2
Fraction2d の u および v の値は、次の範囲に収める必要があります。[0.0, 1.0].


interpolate-from (メソッド)
public {DisplacementMesh.interpolate-from}:void

補間によってグリッド ポイントの位置を設定します。

説明

2 つの DisplacementMesh オブジェクと混合係数を指定すると、interpolate-fromDisplacementMesh の各グリッド ポイントを次の式によって計算された位置に設定します。a-point*(1-blend-factor) + b-point*blend-factor 説明:

プログラミング注意事項

ab、および DisplacementMesh の幅や高さが一致しない場合、interpolate-from はエラーをスローします。


perturb (メソッド)
public {DisplacementMesh.perturb percent:Fraction}:void

グリッド ポイントの位置を無作為にシフトして均一されていないグリッドを作成することにより、歪みを作成します。

percent: 最大シフト量を表すグリッド サイズ (幅および高さ) のパーセンテージ。

注意事項

このメソッドでは、グリッド ポイントは元のグリッドの境界を超えて移動しません。

このメソッドは、グリッドをシフトする前に初期状態に戻しません。


reset (メソッド)
public {DisplacementMesh.reset}:void

規則的なグリッドを再度形成します。

説明

各グリッド ポイントの位置をリセットし、均一な間隔で配置します。各グリッド ポイントの位置は Fraction2d 値で、左上のグリッド ポイントは {Fraction2d 0.0, 0.0}、右上のグリッド ポイントは {Fraction2d 1.0, 0.0} になり、その間のグリッド ポイントは均一に間隔が空けられています。


spherize (メソッド)
public {DisplacementMesh.spherize
percent:Fraction,
center:Fraction2d = {Fraction2d 0.5, 0.5},
radius:double = 0.5
}:void

グリッドを球形の歪みに設定します。

percent: 歪みの量。有効な値は [-1.0, 1.0] の範囲に収まります。-0.95 未満の値の場合、歪みのラッピングが表れ始めることがあります。
center: 正規化された座標空間での対象領域の中心。
radius: 正規化された座標空間での対象領域の半径。

注意事項

このメソッドは、グリッドを球形に歪める前に初期状態に戻します。


translate (メソッド)
public {DisplacementMesh.translate delta-u:double, delta-v:double}:void

グリッド ポイントの位置を移動します。

delta-u, delta-v: 各グリッド ポイントを水平および垂直に移動する量。delta-u および delta-v はそれぞれ [0.0, 1.0] の範囲に収める必要があります。

移動先の新しい位置がグリッドから外れる場合、このグリッド ポイントの位置は強制的に最小または最大値になります。

注意事項

このメソッドは、グリッドを移動する前に初期状態に戻しません。


twirl (メソッド)
public {DisplacementMesh.twirl
angle:Angle,
center:Fraction2d = {Fraction2d 0.5, 0.5},
radius:double = 0.5
}:void

グリッドを "回転" の歪みに設定します。

angle: 回転する領域の中心の回転角度。
center: 正規化された座標空間での回転領域の中心。
radius: 正規化された座標空間での回転領域の半径。

注意事項

このメソッドは、グリッドを回転させる前に初期状態に戻します。