Inheritance |
|
Channel primitives are lightweight, standalone channels optimized for quick evaluation. The following example demonstrates how to construct, insert keys into, and evaluate a channel primitive:
# Create a mutable geometry g = hou.Geometry() # Add a new channel primitive to the geometry chan = g.createChannelPrim() keys = [24, 48, 72, 96] values = [0.5, 1.0, 1.5, 2.0] # Insert keys at the specified frames and set their values for i in range(len(keys)): chan.insertKey(keys[i]) chan.setKeyValue(keys[i], values[i]) # Smooth the slopes of all keys chan.smoothAutoSlopes() # Evaluate the channel at frame 36 value = chan.eval(36)
Channel primitives can also be added to the global Channel List in order to visualize and edit them on the playbar or Animation Editor. For an example of this, see hou.ChannelList.addGeometryChannels.
Methods ¶
start()
→ float
Returns the start frame of this channel primitive.
end()
→ float
Returns the end frame of this channel primitive.
length()
→ float
Returns the length in frames of this channel primitive.
defaultValue()
→ float
Returns the default value for this channel primitive, which is used when the channel is empty.
setDefaultValue(value: float)
Sets the default value for this channel primitive.
eval(frame: float)
→ float
Evaluates the channel at the given frame, returning the result.
hasKeyAtFrame(frame: float)
→ bool
Returns whether or not the channel has a key at the given frame.
insertKey(frame: float, auto_slope = True)
Inserts a key at the given frame, if there isn’t one already. If the frame is outside the channel’s current range, it will be extended accordingly.
auto_slope
determines whether slopes for this key are set automatically or manually.
destroyKey(frame: float)
Destroys a key at the given frame, if one exists.
keyIndex(frame: float)
→ int
Returns the index of the key at the given frame, or -1 if there is no key at that frame.
setKeyValue(frame: float, value: float, key_half = hou.keyHalf.InOut)
→ bool
Sets the value of the key at the given frame, if one exists.
Returns False
if no key exists at the given frame.
key_half
is a hou.keyHalf which defines the side of the key
to set (in, out, or both). Setting this to hou.keyHalf.In
or hou.keyHalf.Out
will create a discontinuity at this key.
setKeySlope(frame: float, slope: float, key_half = hou.keyHalf.InOut)
→ bool
Sets the slope of the key at the given frame.
Returns False
if no key exists at the given frame.
key_half
is a hou.keyHalf which defines the side of the key
to set (in, out, or both). Setting this to hou.keyHalf.In
or hou.keyHalf.Out
will create a discontinuity in the slope at this key.
setKeyAccel(frame: float, accel: float, key_half = hou.keyHalf.InOut)
→ bool
Sets the acceleration of the key at the given frame, if one exists.
Returns False
if no key exists at the given frame.
key_half
is a hou.keyHalf which defines the side of the key
to set (in, out, or both). Setting this to hou.keyHalf.In
or hou.keyHalf.Out
will create a discontinuity in the acceleration at this key.
setKeyAutoSlope(frame: float, auto_slope: bool, key_half = hou.keyHalf.InOut)
→ bool
Sets the auto slope property of the key at the given frame, if one exists.
Returns False
if no key exists at the given frame.
key_half
is a hou.keyHalf which defines the side of the key
to set (in, out, or both). Setting this to hou.keyHalf.In
or hou.keyHalf.Out
segmentType(frame: float)
→ hou.segmentType
Returns the type of the segment at the given frame.
setSegmentType(frame: float, type)
Sets the type of the segment at the given frame, where type
is a hou.segmentType
keyFrames()
→ tuple
Returns an ordered list of frames at which keys exist in this channel.
keyValues()
→ tuple
Returns a list of the values of each key (ordered by frame) in this channel.
moveKeyframes(key_indices, frame_offsets)
Shifts the keys at the given indices by the offsets, specified in frames.
key_indices
is a tuple of integers, each specifying an index of a key
to move.
frame_offsets
is a tuple of numbers, specifying the offset to apply to
each key. It must either be the same length as the key_indices
tuple, or
it must be an tuple of a single element, in which case all specified keys
will be shifted by the same offset.
smoothAutoSlopes(force: bool = False)
Smooths the slopes of any keys with the auto slope flag set to true. If the force parameter is set to True, smooths the slopes of all keys regardless of the auto slope flag.
smoothAutoSlopesForKeys(start_index, end_index = -1, force: bool = False)
Smooths the slopes of any keys in the given range which have the auto slope flag set to true. If the force parameter is set to True, smooths the slopes of all keys in the range regardless of the auto slope flag.
start_index
is the index at which to start smoothing auto slopes
end_index
is the index at which to stop smoothing slopes. If omitted, only
the key at the start_index
will be smoothed.
addVertex(point)
→ hou.Vertex
Create a new vertex inside this channel primitive, adding it to the end of the vertex list. You would typically call this method from the code of a Python-defined SOP.
point
is a hou.Point object that the new vertex will refer to. See
hou.Vertex for information on the relationship between points and
vertices.
Raises hou.GeometryPermissionError if this geometry is not modifiable.
See also:
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関数を参照してください。