Inheritance |
|
一方で、hou.Faceには、一連の頂点が格納されており、ポリゴン/NURBSのカーブであることがあります。
メソッド ¶
numCols()
頂点の2D配列の列の数を返します。
numRows()
頂点の2D配列の行の数を返します。
vertex(u_index, v_index)
頂点の2D配列から、その配列でのu(列)とv(行)のインデックスにある要素を返します。
マイナスのインデックスを指定することができます。この場合は、Houdiniは最後の頂点からインデックスを開始します。
マイナス以外のインデックスに関しては、このメソッドはsurf.vertices()[v_index * surf.numCols() + u_index]
の記述とほぼ同じです。
uやvのインデックスが無効の場合は、hou.OperationFailedを引き起こします。
# Grid SOPを使用して、3行2列のNURBSグリッドを作成します。 geo = hou.node("/obj").createNode("geo").createNode("grid").geometry() grid_node = geo.sopNode() grid_node.setDisplayFlag(True) for name, value in ("type", "nurbs"), ("rows", 5), ("cols", 4): grid_node.parm(name).set(value) # サーフェス内のすべての頂点のX位置をプリントします。 surf = geo.iterPrims()[0] for v_index in surf.numRows(): for u_index in surf.numCols(): print surf.vertex(u_index, v_index).point().position()[0], print
以下も参照:
verticesInCol(u_index)
u(つまり、列)インデックスを指定すると、その列にある頂点すべてを含んだタプルを返します。
hou.Prim.verticesも参照してください。
verticesInRow(v_index)
v(つまり、行)インデックスを指定すると、その行にある頂点すべてを含んだタプルを返します。
hou.Prim.verticesも参照してください。
addCol(after=-1)
指定したu(つまり、列)インデックスの後に頂点の列を追加します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
このメソッドは、追加された頂点毎に1個のポイントも追加します。それらの新しいポイントは、動かさない限りは原点に配置されます。
u(つまり、列)インデックスのafter
にはマイナスを指定することができます。この場合は、最後からインデックスが始まります。
デフォルトのafter
は-1です。つまり、新しい列は、最後の列の後に来ます。
after
インデックスが無効の場合は、hou.OperationFailedを引き起こします。
# このコードは、Python SOP内部から動作しますが、Pythonシェルからは動作しません。 def vertexPos(vertex): return hou.Vector3(vertex.point().position()) # NURBSサーフェスを構築します。 geo = hou.pwd().geometry() surf = geo.createNURBSSurface(10, 10) # 新しい列を追加し、それらの新しいポイント位置を、隣接するポイントの平均の位置に設定します。 surf.addCol(after=7) for v_index in range(surf.numRows()): vertex_before = surf.vertex(7, v_index) vertex_after = surf.vertex(9, v_index) surf.vertex(8, v_index).point().setPosition( (vertexPos(vertex_before) + vertexPos(vertex_after)) * 0.5)
addRow(after=-1)
指定したv(つまり、行)インデックスの後に頂点の行を追加します。 新しい頂点は、動かさない限りは原点に配置されます。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
詳細は、hou.Surface.addColを参照してください。
positionAt(u, v)
→ hou.Vector3
正規化された(つまり、0から1)uとvの値を指定すると、そのパラメトリック位置でのサーフェスの位置を返します。
サンプルは、surface_wires cookbook exampleを参照してください。
normalAt(u, v)
→ Vector3
正規化された(つまり、0から1)uとvの値を指定すると、そのパラメトリック位置でのサーフェスの位置を返します。 その法線は、その位置でのサーフェスに垂直なベクトルです。
法線ベクトルは正規化されます(つまり、単位ベクトルなので長さが1です)。
サンプルは、surface_wiresクックブックのサンプルを参照してください。
attribValueAt(attrib_or_name, u, v, du=0, dv=0)
→ int
, float
, str
or tuple
サーフェス上の正規化された(u,v)パラメータ位置でのアトリビュート値を返します。 duとdvがどちらも0なら、補間されたアトリビュート値が返されます。 それ以外の場合は、そのアトリビュート値の(偏)微分を返します。
アトリビュートがPoint/Vertexアトリビュートでない場合は、hou.OperationFailedを引き起こします。 Primitiveアトリビュート値が必要であれば、この関数ではサーフェス上のどこでも変化しないので、hou.Prim.attribValueを使用してください。
isClosedInU()
頂点の最初と最後の列が繋がっているかどうか返します。
例えば、グリッドはUとVのどちらも開いています。チューブは、UまたはVのどちらかが開いていて、片方が閉じています。 トーラスは、UとVのどちらも閉じています。
isClosedInV()
頂点の最初と最後の行が繋がっているかどうか返します。
詳細は、hou.Surface.isClosedInUを参照してください。
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関数を参照してください。