Inheritance |
|
チャンネルプリミティブは、迅速な評価をするために最適化された軽量でスタンドアローンなチャンネルです。 以下の例では、チャンネルプリミティブを構築し、そこにキーを挿入し、そのチャンネルプリミティブを評価する方法を説明しています:
# ミュート可能なジオメトリを作成します。 g = hou.Geometry() # そのジオメトリに新しいチャンネルプリミティブを追加します。 chan = g.createChannelPrim() keys = [24, 48, 72, 96] values = [0.5, 1.0, 1.5, 2.0] # 指定したフレームにキーを挿入し、値を設定します。 for i in range(len(keys)): chan.insertKey(keys[i]) chan.setKeyValue(keys[i], values[i]) # すべてのキーのスロープを平滑化します。 chan.smoothAutoSlopes() # フレーム36のチャンネルを評価します。 value = chan.eval(36)
また、チャンネルプリミティブをグローバルのチャンネルリストに追加することで、そのチャンネルプリミティブをプレイバーまたはアニメーションエディタで視覚化し編集することができます。 この例に関しては、hou.ChannelList.addGeometryChannelsを参照してください。
Methods ¶
start()
→ float
このチャンネルプリミティブの開始フレームを返します。
end()
→ float
このチャンネルプリミティブの終了フレームを返します。
length()
→ float
このチャンネルプリミティブのフレームの長さを返します。
defaultValue()
→ float
このチャンネルプリミティブのデフォルト値を返します。 この値は、チャンネルが空っぽの時に使用されます。
setDefaultValue(value: float)
このチャンネルプリミティブのデフォルト値を設定します。
eval(frame: float)
→ float
指定したフレームのチャンネルを評価し、その結果を返します。
hasKeyAtFrame(frame: float)
→ bool
チャンネルに指定したフレームのキーがあるかどうかを返します。
insertKey(frame: float, auto_slope = True)
指定したフレームのキーがまだ存在していない場合は、そのキーを挿入します。 そのフレームがチャンネルの現行範囲外である場合は、そのフレームまで範囲が延長されます。
auto_slope
は、このキーのスロープを自動または手動のどちらで設定するのか決めます。
destroyKey(frame: float)
指定したフレームのキーが存在すれば、そのキーを削除します。
keyIndex(frame: float)
→ int
指定したフレームのキーのインデックスを返します。 そのフレームにキーがない場合は-1を返します。
setKeyValue(frame: float, value: float, key_half = hou.keyHalf.InOut)
→ bool
指定したフレームにキーが存在すれば、そのキーの値を設定します。
指定したフレームにキーがない場合は、False
を返します。
key_half
には、設定するキーの側(In、Out、Both)を定義したhou.keyHalfを指定します。
ここをhou.keyHalf.In
またはhou.keyHalf.Out
に設定すると、このキーの値には不連続性が生じます。
setKeySlope(frame: float, slope: float, key_half = hou.keyHalf.InOut)
→ bool
指定したフレームにキーが存在すれば、そのキーのスロープを設定します。
指定したフレームにキーがない場合は、False
を返します。
key_half
には、設定するキーの側(In、Out、Both)を定義したhou.keyHalfを指定します。
ここをhou.keyHalf.In
またはhou.keyHalf.Out
に設定すると、このキーのスロープには不連続性が生じます。
setKeyAccel(frame: float, accel: float, key_half = hou.keyHalf.InOut)
→ bool
指定したフレームにキーが存在すれば、そのキーのアクセラレーションを設定します。
指定したフレームにキーがない場合は、False
を返します。
key_half
には、設定するキーの側(In、Out、Both)を定義したhou.keyHalfを指定します。
ここをhou.keyHalf.In
またはhou.keyHalf.Out
に設定すると、このキーのアクセラレーションには不連続性が生じます。
setKeyAutoSlope(frame: float, auto_slope: bool, key_half = hou.keyHalf.InOut)
→ bool
指定したフレームにキーが存在すれば、そのキーの自動スローププロパティを設定します。
指定したフレームにキーがない場合は、False
を返します。
key_half
には、設定するキーの側(In、Out、Both)を定義したhou.keyHalfを指定します。
ここには、hou.keyHalf.In
またはhou.keyHalf.Out
を設定します。
setSegmentType(frame: float, type)
指定したフレームのセグメントのタイプを設定します。
type
はhou.segmentTypeです。
keyFrames()
→ tuple
このチャンネル内に存在するキーのフレームの順番通りのリストを返します。
keyValues()
→ tuple
このチャンネル内の各キーの値のリスト(フレーム順)を返します。
moveKeyframes(key_indices, frame_offsets)
指定したインデックスのキーを、指定したフレーム分だけずらします。
key_indices
は、移動させるキーのインデックスを示した整数のタプルです。
frame_offsets
は、各キーに適用するフレームオフセットを示した数のタプルです。
これは、key_indices
タプルと同じ長さのタプル、または、1個のタプルのどちらかを指定してください。
1個のタプルを指定した場合、指定したすべてのキーがこのフレームオフセット分ずらされます。
smoothAutoSlopes(force: bool = False)
自動スロープフラグがTrueに設定されたすべてのキーのスロープを平滑化します。
force
をTrueに設定すると、自動スロープフラグ関係なく、すべてのキーのスロープを平滑化します。
smoothAutoSlopesForKeys(start_index, end_index = -1, force: bool = False)
指定した範囲内で自動スロープフラグがTrueに設定されているすべてのキーのスロープを平滑化します。
force
をTrueに設定すると、自動スロープフラグ関係なく、指定した範囲内のすべてのキーのスロープを平滑化します。
start_index
は、自動スロープの平滑化を開始するインデックスです。
end_index
は、自動スロープの平滑化を終了するインデックスです。
これを省略すると、start_index
のキーのみが平滑化されます。
addVertex(point)
→ hou.Vertex
このチャンネルプリミティブ内に新しい頂点を作成し、その頂点を頂点リストの最後に追加します。 通常では、このメソッドはPythonを定義するSOPのコードからコールします。
point
は、新しい頂点が属するhou.Pointオブジェクトです。
ポイントと頂点の関係に関する詳細は、hou.Vertexを参照してください。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
関連項目:
vertex(index)
self.vertices()[index]
のショートカット。おそらく、このメソッドをコールする必要はありません。
このメソッドは、最後からインデックスを指定するためのマイナスのインデックスをサポートしています。まさにself.vertices()[index]
のようなものです。
また、Pythonのインデックス操作のように、インデックスが範囲外の時は、IndexErrorを引き起こします。
Methods from hou.Prim ¶
attribValue(name_or_attrib)
→ int
, float
, str
, tuple
or dict
特定のアトリビュートに対するこのプリミティブ内に格納された値を返します。 このアトリビュートは、名前またはhou.Attribオブジェクトで指定することができます。
hou.Attribオブジェクトを使用してアトリビュート値を調べる方が、名前を使用して調べるよりも若干高速です。 ループ内でアトリビュート値を調べる時は、そのループ外でhou.Attribオブジェクトを調べて、それをこのメソッドに渡してください。
すべてのプリミティブのアトリビュート値を調べる時は、hou.Geometry.primFloatAttribValuesまたはhou.Geometry.primFloatAttribValuesAsStringをコールする方が、 ジオメトリ内のプリミティブ毎にこのメソッドをコールするよりも高速です。
この名前のアトリビュートが存在しなかった場合は、hou.OperationFailedを引き起こします。
floatAttribValue(attrib)
→ float
特定の浮動小数点アトリビュートのプリミティブアトリビュート値を返します。 このアトリビュートは、名前またはhou.Attribオブジェクトで指定することができます。
この名前のアトリビュートが存在しない、またはアトリビュートのサイズが1のfloatでなかった場合は、hou.OperationFailedを引き起こします。
ほとんどの場合では、アトリビュート値にアクセスするには、単にhou.Prim.attribValueを使用すればいいです。 Houdiniは、内部的にこのメソッドを使用してattribValueを実装しています。
floatListAttribValue(name_or_attrib)
→ tuple
of float
特定の浮動小数点アトリビュートのプリミティブアトリビュート値を返します。 このアトリビュートは、名前またはhou.Attribオブジェクトで指定することができます。 戻り値は、floatのタプルです。
アトリビュートのサイズが1の時にこのメソッドをコールするのは有効です。 この場合では、1つのエレメントを持ったタプルが返されます。
hou.Prim.attribValueも参照してください。
intAttribValue(name_or_attrib)
→ int
サイズが1の特定の整数アトリビュートのプリミティブアトリビュート値を返します。 このアトリビュートは、名前またはhou.Attribオブジェクトで指定することができます。 詳細は、hou.Point.floatAttribValueを参照してください。
intListAttribValue(name_or_attrib)
→ tuple
of int
特定の整数アトリビュートのプリミティブアトリビュート値を返します。 このアトリビュートは、名前またはhou.Attribオブジェクトで指定することができます。 戻り値は、intのタプルです。詳細は、hou.Prim.floatListAttribValueを参照してください。
stringAttribValue(name_or_attrib)
→ str
特定の文字列アトリビュートのプリミティブアトリビュート値を返します。 このアトリビュートは、名前またはhou.Attribオブジェクトで指定することができます。 詳細は、hou.Prim.floatAttribValueを参照してください。
stringListAttribValue(name_or_attrib)
→ tuple
of str
特定の文字列アトリビュートのプリミティブアトリビュート値を返します。 このアトリビュートは、名前またはhou.Attribオブジェクトで指定することができます。 戻り値は、文字列のタプルです。
アトリビュートのサイズが1の時にこのメソッドをコールするのは有効です。 この場合では、1つのエレメントを持ったタプルが返されます。
hou.Prim.attribValueも参照してください。
dictAttribValue(name_or_attrib)
→ dict
特定の辞書アトリビュートのプリミティブアトリビュート値を返します。 このアトリビュートは、名前またはhou.Attribオブジェクトで指定することができます。 詳細は、hou.Prim.floatAttribValueを参照してください。
dictListAttribValue(name_or_attrib)
→ tuple
of str
特定の辞書アトリビュートのプリミティブアトリビュート値を返します。 このアトリビュートは、名前またはhou.Attribオブジェクトで指定することができます。 戻り値は、辞書のタプルです。
アトリビュートのサイズが1の時でも、このメソッドをコールすることができます。 この場合、1つのエレメントが含まれたタプルが返されます。 詳細は、hou.Prim.floatAttribValueを参照してください。
setAttribValue(name_or_attrib, attrib_value)
このプリミティブにアトリビュート値を保存します。 このアトリビュートは、名前またはhou.Attribオブジェクトで指定することができ、ジオメトリ内の既存プリミティブアトリビュートでなければなりません。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
この名前のアトリビュートが存在しなかったり、そのアトリビュートのデータタイプが渡された値と一致しなかった場合は、hou.OperationFailedを引き起こします。 アトリビュートのサイズが2以上であれば、そのアトリビュート値は、int/floatのシーケンスでなければならず、そのシーケンスのサイズはアトリビュートのサイズと同じでなければなりません。
このジオメトリが修正不可なら、hou.GeometryPermissionErrorを引き起こします。
# "Cd"という名前のサイズが3のfloatプリミティブアトリビュートを作成し、プリミティブ毎に固有のカラーを割り当てます。 # このコードは、Python SOP内から動作しますが、Pythonシェルからは動作しません。 geo = hou.pwd().geometry() color_attrib = geo.addAttrib(hou.attribType.Prim, "Cd", (1.0, 1.0, 1.0)) num_prims = len(geo.prims()) color = hou.Color() for prim in geo.prims(): fraction = float(prim.number()) / num_prims # プリミティブ毎に、彩度と明度が同じで色相を別にします。 # アトリビュートにRGB値を保存します。 color.setHSV((fraction * 255, 1, 1)) prim.setAttribValue(color_attrib, color.rgb())
attribType()
→ hou.attribType列挙値
hou.attribType.Prim列挙値を返します。 ポイント、プリミティブ、頂点、ジオメトリは、アトリビュートを照会するのに同じメソッドをサポートしていて、このメソッドはその内の1つです。
以下も参照してください:
intrinsicValueDict()
→ dict
of str
to value
Intrinsic名とその値をマッピングした辞書を返します。
intrinsicValue(intrinsic_name)
→ int
, float
, str
, or tuple
よく計算されるプリミティブの“Intrinsic(組み込み)”の値(例えば、bounds
, measuredarea
, vertexcount
など)を取得します。
measuredarea
といったほとんどのIntrinsic値は計算任せですが、一部の値はhou.Prim.setIntrinsicValueを使って書き込み可能です。
例えば、球プリミティブは、その定義の一部であるトランスフォームマトリックスを持っています。
Geometry Spreadsheetを使うことで、ユーザインターフェースからそれらの値を閲覧することもできます。
指定したIntrinsic名が存在しなかった場合はhou.OperationFailedを引き起こします。 hou.Prim.intrinsicNamesを使うことで、利用可能なIntrinsic名のリストを取得することができます。 プリミティブのタイプが異なれば、利用可能なIntrinsic値も異なります。
bounds
やpackedbounds
などの境界ボックス系Intrinsic値は、(xmin, xmax, ymin, ymax, zmin, zmax)の順番で返されます。
intrinsicNames()
→ tuple
of str
このプリミティブで利用可能なIntrinsic名を表現した文字列のタプルを返します。 プリミティブのタイプが異なれば、利用可能なIntrinsic名も異なります。 hou.Prim.intrinsicValue/hou.Prim.setIntrinsicValueを使用することで、その値を取得したり設定することができます。
setIntrinsicValue(intrinsic_name, value)
一部の“Intrinsic”値は変更可能です。 例えば、トランスフォームを表現した9個のfloatタプルをhou.Prim.setIntrinsicValueに渡すことで、球プリミティブの内部サイズと回転(トランスフォーム)を変更することができます。 Intrinsicが書き込み不可、渡した値が正しくない、指定したIntrinsic名が存在しない場合は、hou.OperationFailedを引き起こします。
intrinsicReadOnly(intrinsic_name)
→ bool
Intrinsic(組み込み)アトリビュートが読み取り専用かどうか返し、そうでないなら、hou.Prim.setIntrinsicValueで修正することができます。
intrinsicSize(intrinsic_name)
→ int
Intrinsic値のタプルサイズを返します。
positionAtInterior(u, v, w=0.0)
→ hou.Vector3
正規化した(つまり0から1)u,v,w値を指定すると、パラメトリック位置でのプリミティブの内部位置を返します。
外周沿いの位置を照会するには、hou.Face.positionAtを使用してください。
attribValueAtInterior(attrib_or_name, u, v, w=0.0)
→ int
, float
, str
or tuple
プリミティブの内部での正規化したu,v,wのパラメトリック位置でのアトリビュート値を返します。
そのアトリビュートがポイントや頂点のアトリビュートでなかった場合は、hou.OperationFailedを引き起こします。 プリミティブアトリビュート値が必要であれば、これはサーフェスに渡って変化しないので、hou.Prim.attribValueを使用してください。
外周沿いのアトリビュートを照会するには、hou.Face.attribValueAtを使用してください。
number()
→ int
このプリミティブの番号を返します。 プリミティブ番号は0から始まって順々に番号が振られていて、hou.Geometry.primsで返されるプリミティブは、その番号で並んでいます。
type()
→ hou.primType列挙値
このプリミティブのタイプ(例えば、ポリゴン、NURBSカーブ、メタボールなど)を含んだhou.primType値を返します。
vertices()
→ generator of hou.Vertex
このプリミティブ内に含まれている頂点のシーケンスを返します。
そのプリミティブがフェース(例えば、ポリゴンやNURBSカーブ)なら、その結果は、そのフェース内の頂点の順番に相当します。 そのプリミティブがサーフェス(例えば、NURBSメッシュ)なら、そのプリミティブは頂点の2D配列を持ち、このメソッドは、その2D配列内のすべての頂点を列で並べて返します。
2D頂点配列とシーケンシャル頂点インデックス間の関係性、サーフェス内の頂点にアクセスする方法に関する詳細は、hou.Surface.vertexを参照してください。
numVertices()
→ int
len(self.vertices())
のショートカット。おそらく、このメソッドをコールする必要はありません。
points()
→ list of hou.Point
各頂点をループさせずにプリミティブのすべてのポイントを取得するショートカット。
boundingBox()
→ hou.BoundingBox
このプリミティブを囲むのに十分な大きさのサイズと位置の軸平行の3D境界ボックスを返します。
nearestToPosition(pos3)
位置を含んだ3つのfloatのシーケンスを指定すると、その位置に一番近いこのプリミティブ上の位置を検索します。 このプリミティブ上のu値、このプリミティブ上のv値、このプリミティブまでの距離を含んだタプルを返します。
Note
返されるUVは実際の座標なので、VEXのxyzdistに合うように単位座標に切り替えるには、primuvConvertを使用してください。
primuvConvert(uv, mode, tol)
2DのUV座標を指定すると、別の座標系でその位置が計算されます。
tol
引数はオプションです。
指定可能な有効なモードはprimuvconvert VEX関数を参照してください。
primuConvert(u, mode, tol)
1DのU座標を指定すると、別の座標系でその位置が計算されます。
tol
引数はオプションです。
指定可能な有効なモードはprimuvconvert VEX関数を参照してください。