On this page |
hou.SopNode.geometryを通じてSOPにジオメトリを求めた場合、それの読み取り専用の参照が取得されます。 SOPが再クックされると、それに相当するGeometryオブジェクトは、そのSOPの新しいジオメトリに更新されます。 SOPを削除した後にGeometryオブジェクトにアクセスすると、hou.ObjectWasDeletedの例外が発生します。 ジオメトリの修正を試みるメソッドをコールすると、それらのメソッドは、hou.GeometryPermissionErrorの例外を引き起こします。
Note
hou.Geometryオブジェクトのメソッドがコールされる度に、Houdiniはまず最初に大元のジオメトリのハンドルの取得を試みます。 SOPノードの読み込み専用のジオメトリ参照を扱う時、その読み込み専用のジオメトリ参照を変数に割り当てた後でそのSOPノードのクックが失敗した場合、 その変数を使用したメソッドのコールはhou.InvalidGeometry例外を投げます。 この例外を受け取った場合でも、その読み込み専用のジオメトリ参照は'有効'になっているので、そのSOPノードのエラーが解決したら、あなたのコードでこの例外を処理してさらにエラーが出ないようにしている限り、その変数を使用したメソッドはアクセス可能になります。 hou.Geometry.isValidを参照してください。
SOPが再クックされた時にジオメトリを更新させたくないのであれば、hou.Geometry.freezeをコールします。 フリーズは、SOPが再クックされても変わらない他のGeometryオブジェクトを返します。 フリーズしたGeometryにアクセスした方が若干高速です。 その理由は、Houdiniがアクセスする度にSOPノードを探す必要がないからです。 そのため、速度が重要な処理に対してはフリーズしたジオメトリを使用した方が良いです。
Pythonを使用してSOPを記述している場合、そのジオメトリは読み-書きのアクセスを持ち、フリーズされます。 Python定義のSOPを作成するには、 File ▸ New Operator Type… を選択して、 Code タブにPythonコードを配置します。
最後にhou.Geometryのインスタンスを作成することで、読み-書きのアクセス権を持った新しいフリーズジオメトリを割り当てることができます。
ジオメトリの修正 ¶
Houdini18以降、他のHOMメソッドに渡されたクッキング外のジオメトリを修正するには、その修正カウンターを増分させるだけでなく、該当する適切なデータIDを増分させる必要があります。 これは、特に、このジオメトリをhou.SopVerb.executeなどに渡して処理させる場合に、そのメソッドがデータIDの最適化を使用するので重要です。 データIDを上げる最も簡単な方法は、hou.Geometry.incrementAllDataIdsをコールすることです。 しかし、以下にリストした具体的なメソッドを使用することで、最高のパフォーマンスを得ることができます: hou.Geometry.incrementDataIdsForAddOrRemove, hou.Geometry.incrementPrimitiveIntrinsicsDataId, hou.Geometry.incrementTopologyDataId, hou.Attrib.incrementDataId, hou.PointGroup.incrementDataId, hou.PrimGroup.incrementDataId, hou.EdgeGroup.incrementDataId, hou.VertexGroup.incrementDataId, hou.Geometry.incrementModificationCounter.
Python SOP内でジオメトリを修正すると、ジオメトリ変更カウンターだけでなく、すべてのデータIDも自動的に増分されます。
データIDの自動増分を無効にするには、hou.SopNode.setManagesAttribDataIdsをTrue
でコールします。
ジオメトリ変更カウンターの増分を無効にすることはできず、SOPノードがクックされる度に常に増分しなければならないことに注意してください。
どうすべきか迷っているなら、hou.SopNode.managesAttribDataIdsをデフォルトのFalse
のままにするのが良いでしょう。
そうしないと、ジオメトリに変更が起きた時に、出力ジオメトリを使用する側(例えば、ビューポート)で更新に失敗してしまう危険性があります。
メソッド ¶
__init__(src_geo=None, clone_data_ids=False)
src_geo
がNone
の場合は空っぽの新しいGeometry
を、そうでない場合はsrc_geo
のディープコピーで新しいGeometry
を返します。
src_geo
がNone
でない場合、clone_data_ids
にはその新しいコピーに同じデータIDを持たせるかどうかを指定します。
True
の場合、これは、アトリビュートデータIDが同じジオメトリオブジェクトからコピーされたものなのかどうかに関係なく、そのアトリビュートデータIDのみを調べてデータをキャッシュ化するといった最適化を有効にするのに役立ちます。
False
の場合、新しいコピーのデータIDは固有になります。
isValid()
hou.Geometryオブジェクトが有効なジオメトリを参照しているかどうかをチェックします。
SOPノードの読み込み専用ジオメトリ参照をhou.Geometryに割り当てた後に、そのSOPノードがクックに失敗した場合、これはFalse
にしかなりません。
'フリーズ'したジオメトリに対しては常にTrue
を返します。hou.Geometry.freezeも参照してください。
アトリビュート ¶
findPointAttrib(name)
→ hou.Attrib or None
nameによってPointアトリビュートを探します。 それに該当するhou.Attribオブジェクトを返します。そのnameのアトリビュートが存在しなかった場合は、Noneが返されます。
ポイントポジションアトリビュートの名前はP
で、そのサイズが3つのfloatであることを覚えておいてください。
また、ポイントウェイトアトリビュートの名前はPw
で、そのサイズが1つのfloatです。
P
は必ず存在しますが、Pw
は存在するとは限りません。
サンプルは、hou.Point.attribValueを参照してください。
findPrimAttrib(name)
→ hou.Attrib or None
nameによってPrimitiveアトリビュートを探します。 それに該当するhou.Attribオブジェクトを返します。そのnameのアトリビュートが存在しなかった場合は、Noneが返されます。
findVertexAttrib(name)
→ hou.Attrib or None
nameによってVertexアトリビュートを探します。 それに該当するhou.Attribオブジェクトを返します。そのnameのアトリビュートが存在しなかった場合は、Noneが返されます。
findGlobalAttrib(name)
→ hou.Attrib or None
nameによってGlobal(通称Detail)アトリビュートを探します。 それに該当するhou.Attribオブジェクトを返します。そのnameのアトリビュートが存在しなかった場合は、Noneが返されます。
pointAttribs(include_private=False)
→ tuple
of hou.Attrib
Pointアトリビュートすべてのタプルを返します。
include_private
プライベートアトリビュートも含まれます。
ポイントポジションアトリビュートの名前はP
で、そのサイズが3つのfloatであることを覚えておいてください。
また、ポイントウェイトアトリビュートの名前はPw
で、そのサイズが1つのfloatです。
P
は必ず存在しますが、Pw
は存在するとは限りません。
primAttribs(include_private=False)
→ tuple
of hou.Attrib
Primitiveアトリビュートすべてのタプルを返します。
include_private
プライベートアトリビュートも含まれます。
vertexAttribs(include_private=False)
→ tuple
of hou.Attrib
Vertexアトリビュートすべてのタプルを返します。
include_private
プライベートアトリビュートも含まれます。
globalAttribs(include_private=False)
→ tuple
of hou.Attrib
Global(通称Detail)アトリビュートすべてのタプルを返します。
include_private
プライベートアトリビュートも含まれます。
addAttrib(type, name, default_value, transform_as_normal=False, create_local_variable=True)
→ hou.Attrib
新しくPoint,Primitive,Vertex,Global(通称Detail)アトリビュートを作成します。 新しく作成されたアトリビュートを記述したhou.Attribオブジェクトを返します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
type
新しいアトリビュートをPoint,Primitive,Vertex,Globalのアトリビュートのどれにするのか指定するためのhou.attribType値。
name
新しいアトリビュートの名前。ジオメトリ内の各アトリビュートは、必ず固有の名前でなければなりません。
default_value
このアトリビュートのデフォルト値。アトリビュートが作成されると、すべての既存要素(例えば、プリミティブやポイント)にこの値が格納されます。 さらに、後で追加した要素も、この値を使用します。
この値は、アトリビュートのデータタイプも決定します。
以下のPythonタイプのどれかを使用することができます:
-
int
-
float
-
str
-
int
のシーケンス(ジェネレータ,イテレータ,リスト,タプル) -
float
のシーケンス -
str
のシーケンス -
dict
-
dict
のシーケンス
デフォルト値は、整数または浮動小数点のシーケンスで、そのシーケンスサイズがアトリビュートのサイズを決めます。 シーケンスでない場合は、アトリビュートのサイズは1です。
文字列アトリビュートはデフォルト値をサポートしておらず、この値はタイプの決定のためだけに使用されます。
transform_as_normal
このパラメータは、デフォルト値が3つのfloatのシーケンスの時のみTrue
に設定することができます。
そのようなアトリビュートに対してHoudiniがジオメトリのトランスフォーム(移動、回転など)を行なっても、そのアトリビュート値は修正されません。
Houdiniがジオメトリをトランスフォームさせた時にアトリビュートをベクトル(例えば法線ベクトル)としてトランスフォームさせたい場合は、このパラメータをTrue
に設定します。
create_local_variable
True
の場合、Houdiniは、このアトリビュートに対して、パラメータエクスプレッションで使用できるローカル変数を作成します。
ローカル変数の名前は、アトリビュートの名前をすべて大文字にした名前です。
アトリビュート名からローカル変数へのマッピングは、"varmap"
という特殊なGlobalアトリビュートに格納されます。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
この名前のアトリビュートが既に存在した場合は、hou.OperationFailedを引き起こします あなたがC++ Houdini Development Kit (HDK)に詳しいのであれば、Houdiniは同じ名前でタイプが異なるアトリビュートをサポートすることができることを知っていることでしょう。 しかし、ほとんどのSOPは、同じ名前のアトリビュートを区別することができず、同じ名前の複数のアトリビュートは使用するべきではありません。 このため、このメソッドを使用して、そのようなアトリビュートを作成することができません。
transform_as_normalがTrue
でデフォルト値が3つのfloatのシーケンスでない場合は、hou.OperationFailedを引き起こします。
# "population"という名前のサイズが1の整数Pointアトリビュートを作成し、 # アトリビュート値が0, 5, 10, 15, 20の5つのポイントを作成します。 # このコードは、Python SOP内から動作しますが、Pythonシェルからは動作しません。 geo = hou.pwd().geometry() population_attrib = geo.addAttrib(hou.attribType.Point, "population", 0) for i in range(5): point = geo.createPoint() point.setPosition((i, 0, 0)) point.setAttribValue(population_attrib, i * 5)
以下のサンプルでは、既存アトリビュートをコピーする方法を説明しています:
def copyAttrib(attrib, new_name): return attrib.geometry().addAttrib( attrib.type(), new_name, attrib.defaultValue(), attrib.isTransformedAsNormal())
create_local_variable
がTrue
の場合、この関数は、以下のコードと同じことを実行します:
def addLocalVariable(geo, attrib_name): '''ジオメトリアトリビュートを作成し、それのローカル変数を追加します。''' # 変数マッピングは、varmapアトリビュートの文字列テーブルに保存されます。 # このテーブルは、varmapの現行値と異なります。 # varmapの現行値は、そのテーブル内のエントリーを参照するだけです。そのため、テーブル内にエントリーが存在するためには # 単にvarmapの値を設定すればいいだけです。 map_value = "%s -> %s" % (attrib_name, attrib_name.upper()) if geo.findGlobalAttrib("varmap") is None: geo.addAttrib(hou.attribType.Global, "varmap", "") geo.setGlobalAttribValue("varmap", map_value)
関連項目:
addArrayAttrib(type, name, data_type, tuple_size=1)
→ hou.Attrib
新しいPoint,Primitive,Vertex,Global(別名Detail)配列アトリビュートを作成します。 これは、新しく作成されたアトリビュートを表現したhou.Attribオブジェクトを返します。 通常では、Python定義のSOPのコードから、このメソッドをコールします。
type
新しいアトリビュートをPoint,Primitive,Vertex,Globalのどのアトリビュートにするのかを指定したhou.attribType値。
name
新しいアトリビュートの名前。ジオメトリ内の各アトリビュートは固有名でなければなりません。
data_type
新しいアトリビュートをint,float,stringのどのアトリビュートにするのかを指定したhou.attribData値。
tuple_size
新しいアトリビュートのタプルサイズ。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
この名前のアトリビュートが既に存在していれば、hou.OperationFailedを引き起こします。 あなたがC++ Houdini Development Kit (HDK)に詳しいのであれば、Houdiniがタイプの違う同じ名前のアトリビュートに対応していることを知っていることでしょう。 しかし、ほとんどのSOPは、同じ名前のアトリビュートを区別することができないので、同じ名前の複数アトリビュートは混乱します。 そのため、このメソッドでは、同じ名前のアトリビュートを作成できないようにしています。
attribValue(name_or_attrib)
→ int
, float
, str
, tuple
or dict
特定のアトリビュートのGlobal(通称Detail)アトリビュート値を返します。 アトリビュートは、nameまたはhou.Attribオブジェクトで指定することができます。
この名前のアトリビュートが存在しなかった場合は、hou.OperationFailedを引き起こします。
floatAttribValue(name_or_attrib)
→ float
特定の浮動小数点アトリビュートのGlobal(通称Detail)アトリビュート値を返します。 アトリビュートは、nameまたはhou.Attribオブジェクトで指定することができます。
この名前のアトリビュートが存在しなかった場合や、サイズが1のfloatでなかった場合は、hou.OperationFailedを引き起こします。
たいていの場合、アトリビュート値にアクセスするには、hou.Geometry.attribValueを使用します。 Houdiniは、このメソッドを内部的に使用してattribValueを実装しています。
floatListAttribValue(name_or_attrib)
→ tuple
of float
特定の浮動小数点アトリビュートのGlobal(通称Detail)アトリビュート値を返します。 アトリビュートは、nameまたはhou.Attribオブジェクトで指定することができます。 戻り値は、floatのリストです。
アトリビュートのサイズが1の時でも、このメソッドをコールするのは有効です。 この場合、1個の要素を持つリストが返されます。
関連項目:
intAttribValue(name_or_attrib)
→ int
特定の整数アトリビュートのGlobal(通称Detail)アトリビュート値を返します。 アトリビュートは、nameまたはhou.Attribオブジェクトで指定することができます。 詳細は、hou.Geometry.floatAttribValueを参照してください。
intListAttribValue(name_or_attrib)
→ tuple
of int
特定の整数アトリビュートのGlobal(通称Detail)アトリビュート値を返します。 アトリビュートは、nameまたはhou.Attribオブジェクトで指定することができます。 戻り値は、intのリストです。 詳細は、hou.Geometry.floatListAttribValueを参照してください。
stringAttribValue(name_or_attrib)
→ str
特定の文字列アトリビュートのGlobal(通称Detail)アトリビュート値を返します。 アトリビュートは、nameまたはhou.Attribオブジェクトで指定することができます。 詳細は、hou.Geometry.floatAttribValueを参照してください。
stringListAttribValue(name_or_attrib)
→ tuple
of str
特定の文字列アトリビュートのGlobal(通称Detail)アトリビュート値を返します。 アトリビュートは、nameまたはhou.Attribオブジェクトで指定することができます。 戻り値は、stringのリストです。 詳細は、hou.Geometry.floatListAttribValueを参照してください。
dictAttribValue(name_or_attrib)
→ dict
特定の辞書アトリビュートのGlobal(通称Detail)アトリビュート値を返します。 このアトリビュートには、名前またはhou.Attribオブジェクトを指定することができます。 詳細は、hou.Geometry.floatAttribValueを参照してください。
dictListAttribValue(name_or_attrib)
→ tuple
of str
特定の辞書アトリビュートのGlobal(通称Detail)アトリビュート値をを返します。 このアトリビュートには、名前またはhou.Attribオブジェクトを指定することができます。 この戻り値は辞書のタプルです。
アトリビュートのサイズが1の時でもこのメソッドをコールするのは有効です。 その場合、1個のエレメントを含んだタプルが返されます。 詳細は、hou.Geometry.floatAttribValueを参照してください。
setGlobalAttribValue(name_or_attrib, attrib_value)
Global(通称Detail)アトリビュート値を設定します。 アトリビュートは、nameまたはhou.Attribオブジェクトで指定することができます。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
このアトリビュートが配列アトリビュートの場合、そのアトリビュートのタプルサイズで割り切れる長さの値シーケンスをattrib_value
に渡す必要があります。
必要なサイズでタプルを満たさないシーケンスの後の値は破棄されます。
この名前のアトリビュートが存在しなかった場合や、アトリビュートのデータタイプが与えられた値に合致しなかった場合は、hou.OperationFailedを引き起こします。 アトリビュートのサイズが2以上の場合、アトリビュート値は必ず整数/浮動小数点のシーケンスでなければならず、シーケンスのサイズはアトリビュートのサイズと同じでなければなりません。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
# このコードは、Python SOP内から動作しますが、Pythonシェルからは動作しません。 geo = hou.pwd().geometry() geo.addAttrib(hou.attribType.Global, "author", "") geo.addAttrib(hou.attribType.Global, "version", (0, 0, 0)) geo.setGlobalAttribValue("author", "Joe") geo.setGlobalAttribValue("version", (1, 0, 7))
以下はグローバル配列アトリビュートに値を設定するサンプルです:
geo = hou.pwd().geometry() geo.addArrayAttrib( hou.attribType.Global, "data", hou.attribData.Float, tuple_size=3) # これは、グローバルアトリビュートの値に # [(1.0, 2.0, 3.0), (4.0, 5.0, 6.0)]を設定します。 geo.setGlobalAttribValue("data", [1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
関連項目:
attributeCaptureRegions()
→ tuple
of str
このジオメトリのキャプチャー領域のパスを表現した文字列のタプルを返します。 このキャプチャー領域は、ジオメトリのキャプチャーアトリビュートから識別されます。
関連項目:
attributeCaptureObjectPaths()
→ tuple
of str
このジオメトリのキャプチャーオブジェクトのパスを表現した文字列のタプルを返します。 このキャプチャーオブジェクトは、このジオメトリを取り込むために使用されるオブジェクトであり、そのジオメトリのキャプチャーアトリビュートから識別されます。 スケルトンのルートパスは、このキャプチャーオブジェクトのパスの先頭に追加され、それらのオブジェクトノードは以下のコードによって取得します:
# このコードは、Python SOP内から動作しますが、Pythonシェルからは動作しません。 geo = hou.pwd().geometry() nodes = [hou.node(x) for x in geo.attributeCaptureObjectPaths()]
関連項目:
attribType()
→ hou.attribType列挙値
列挙値hou.attribType.Globalを返します。 ポイント、プリミティブ、頂点、ジオメトリは、それらのアトリビュートを照会するための同じメソッドのセットをサポートしており、このメソッドは、その1つです。
関連項目:
renamePointAttrib(old_name, new_name)
指定した古い名前のPointアトリビュートを新しい名前に変更します。 このメソッドは、通常ではPython定義のSOPのジオメトリが書き込み可能な時に、そのSOP内からコールします。
読み込み専用のジオメトリに対してコールするとGeometryPermissionError
を引き起こします。
old_name
またはnew_name
がNoneの場合はTypeError
を引き起こします。
古い名前のPointアトリビュートが存在しなければOperationFailed
を引き起こします。
新しい名前のPointアトリビュートが既に存在すればOperationFailed
を引き起こします。
renamePrimAttrib(old_name, new_name)
指定した古い名前のPrimitiveアトリビュートを新しい名前に変更します。 このメソッドは、通常ではPython定義のSOPのジオメトリが書き込み可能な時に、そのSOP内からコールします。
読み込み専用のジオメトリに対してコールするとGeometryPermissionError
を引き起こします。
old_name
またはnew_name
がNoneの場合はTypeError
を引き起こします。
古い名前のPrimitiveアトリビュートが存在しなければOperationFailed
を引き起こします。
新しい名前のPrimitiveアトリビュートが既に存在すればOperationFailed
を引き起こします。
renameVertexAttrib(old_name, new_name)
指定した古い名前のVertexアトリビュートを新しい名前に変更します。 このメソッドは、通常ではPython定義のSOPのジオメトリが書き込み可能な時に、そのSOP内からコールします。
読み込み専用のジオメトリに対してコールするとGeometryPermissionError
を引き起こします。
old_name
またはnew_name
がNoneの場合はTypeError
を引き起こします。
古い名前のVertexアトリビュートが存在しなければOperationFailed
を引き起こします。
新しい名前のVertexアトリビュートが既に存在すればOperationFailed
を引き起こします。
renameGlobalAttrib(old_name, new_name)
指定した古い名前のDetailアトリビュートを新しい名前に変更します。 このメソッドは、通常ではPython定義のSOPのジオメトリが書き込み可能な時に、そのSOP内からコールします。
読み込み専用のジオメトリに対してコールするとGeometryPermissionError
を引き起こします。
old_name
またはnew_name
がNoneの場合はTypeError
を引き起こします。
古い名前のDetailアトリビュートが存在しなければOperationFailed
を引き起こします。
新しい名前のDetailアトリビュートが既に存在すればOperationFailed
を引き起こします。
generateAttribMenu(attrib_type=None, data_type=None, min_size=1, max_size=-1, array_type=True, scalar_type=True, case_sensitive=True, pattern="*", decode_tokens=False)
→ tuple
of str
ジオメトリのアトリビュートをリストするパラメータメニュー用のトークンとラベルを生成します。
attrib_type
Point/Primitive/Vertex/Detailアトリビュートのどれをリストするかどうかを指定したhou.attribType値。
None
の値を指定すると、すべてのタイプのアトリビュートがリストされます。
data_type
指定したhou.attribDataデータタイプのアトリビュートのみが包含されるようにアトリビュートリストをフィルタリングします。
値にNone
を指定すると、すべてのデータタイプのアトリビュートがリストされます。
min_size
このサイズ以上のアトリビュートのみを包含します。
max_size
min_size
より大きい場合、このサイズ以下のアトリビュートのみを包含します。
array_type
配列アトリビュートを包含するかどうかを指定します。
scalar_type
配列データを含んでいないアトリビュートを包含するかどうかを指定します。
case_sensitive
メニューラベルを大文字小文字の区別して生成するかどうかを指定します。
これはpattern
を大文字小文字の区別をするかどうかも制御します。
pattern
包含したいアトリビュート名のパターンを指定します。
decode_tokens
有効にすると、メニュートークンには、実際のアトリビュート名ではなく、デコードされたアトリビュート名が格納されます。 これは、デコードされたアトリビュート名のマッチングに対応したパラメータで役に立ちます。
copyAttrib(attrib)
他のジオメトリからアトリビュート(hou.Attrib)をコピーします。
正しいコンテキスト内で同じ名前のアトリビュートが必ず現行ジオメトリ上に存在している必要があります。
失敗するとOperationFailed
が引き起こされ、そのエラーの状況の詳細が示されます。
copyAttribs(attribs)
他のジオメトリからアトリビュート(hou.Attrib)のリストをコピーします。
正しいコンテキスト内で同じ名前のアトリビュートが必ず現行ジオメトリ上に存在している必要があります。
失敗するとOperationFailed
が引き起こされ、そのエラーの状況の詳細が示されます。
Intrinsics(組み込み) ¶
intrinsicValue(intrinsic_name)
→ int
, float
, str
, or tuple
“intrinsic”の値を取得します。これは、頻繁に計算がされており、memoryusage
, pointcount
, pointattributes
などのジオメトリの値です。
指定したIntrinsic名が存在しなかった場合は、OperationFailed
を引き起こします。
Geometry Spreadsheetを使えば、ユーザインターフェースでそれらの値を確認することもできます。
Houdiniでは、プリミティブに“intrinsic”値があり、この値は直接アトリビュートインターフェースからアクセスすることができません。
ほとんどのIntrinsic値は、measuredarea
のように計算されていますが、いくつかのIntrinsic値はsetIntrinsicValue methodで書き込むことができます。
例えば、球のプリミティブは、その定義の一部としてトランスフォームマトリックスを持ちます。
intrinsicNames methodを使えば、利用可能なIntrinsic値の名前のリストを取得することができます。 異なるジオメトリタイプには、異なるIntrinsic値が利用可能です。
bounds
などの境界ボックス系Intrinsic値は、(xmin, xmax, ymin, ymax, zmin, zmax)の順番で返されます。
intrinsicNames()
→ tuple
of str
このジオメトリで利用可能なIntrincis値を意味した文字列のタプルを返します。 異なるジオメトリタイプには、異なるIntrinsic値が利用可能です。 intrinsicValueやsetIntrinsicValueを使用することで、その値を取得または設定することができます。
詳細は、intrinsicValueメソッドを参照してください。
intrinsicValueDict()
→ dict
of str
to value
Intrinsicの名前とその値をマッピングした辞書を返します。
setIntrinsicValue(intrinsic_name, value)
いくつかの“intrinsic”値は修正可能です。
例えば、トランスフォームを意味する16個のfloatのタプルをsetIntrinsicValue
に渡すことで、球プリミティブの内部サイズと回転(トランスフォーム)を変更することができます。
Intrinsicが書き込み不可だったり、渡した値を受け入れなかった場合、または指定したIntrinsic名が存在しなかった場合は、Error
を引き起こします。
Note
ジオメトリを直接修正すると、ジオメトリの親ノードがロックされます。
詳細は、intrinsicValue methodを参照してください。
intrinsicReadOnly(intrinsic_name)
→ bool
intrinsicSize(intrinsic_name)
→ int
preferredPrecision()
→ int
ジオメトリの優先される計算精度を返します。 これを使用することで、作成するアトリビュートの種類と中間計算で実行する精度を判断することができます。 返される値は、32または64です。
setPreferredPrecision(int)
ジオメトリの優先される精度を調整します。 値には、32または64のどちらかを指定してください。 ノードは、この精度をヒントにして、デフォルトのアトリビュート生成と特定の計算精度を設定します。
データ変更 ¶
vexAttribDataId()
→ tuple of int
attribdataid VEX関数がattribdataid(geo, "meta", "detail")
をコールした時に返すのと同じ整数リストを返します。
これは、このオブジェクトに変更があるかどうかの保守的なチェックとして使用可能な識別子です。
この戻り値には、hou.Geometry.modificationCounterの値が含まれます。
modificationCounter()
→ int
or long
このオブジェクトに変更があったかどうかを判断するための保守的なチェックとして使用可能なカウンターを返します。 このカウンターは、hou.Geometryオブジェクト毎に固有ではないことに注意してください。 これらの値を別のジオメトリで比較したいのであれば、代わりにhou.Geometry.vexAttribDataIdを使用してください。
incrementModificationCounter()
このオブジェクトの内容が変更されたことをマークするために変更カウンターを増分します。
incrementAllDataIds()
このジオメトリ内のアトリビュート上のすべてのデータIDを増分します。 このジオメトリ内のすべてが変更されたことをマークするのであれば、これを使用するのが一番簡単な方法です。 内部的には、これはhou.Geometry.incrementModificationCounterもコールします。
incrementDataIdsForAddOrRemove(for_points=True, for_prims=True)
ポイント/プリミティブが追加または削除されたことを示すためにデータIDを増分します。
primitiveIntrinsicsDataId()
Primitiveアトリビュート以外のプリミティブの内容を表現したデータIDを返します。 このデータIDは、プリミティブの数が変わった時でも増分することに注意してください。
incrementPrimitiveIntrinsicsDataId()
Primitiveアトリビュート以外のプリミティブの内容が変更されたことを示すためにPrimitive IntrinsicsデータIDを増分します。
topologyDataId()
ポイントがプリミティブに接続された時などのように、このジオメトリのトポロジーを表現したデータIDを返します。
incrementTopologyDataId()
このジオメトリのトポロジーが何かしらの方法で変更されたことを示すためにデータIDを増分します。
平均 ¶
pointBoundingBox(pointpattern)
→ hou.BoundingBox
ポイントパターンで指定されたポイントを含むようにサイズと位置が決められた軸平行の3D境界ボックスを返します。 このパターンが空っぽであれば、すべてのポイントが含まれます。
球などのいくつかのプリミティブは、そのポイントからはみ出します。そのはみ出し分は考慮されません。
primBoundingBox(primpattern)
→ hou.BoundingBox
プリミティブパターンで指定されたプリミティブを含むようにサイズと位置が決められた軸平行の3D境界ボックスを返します。 このパターンが空っぽであれば、すべてのプリミティブが含まれます。
球などのいくつかのプリミティブは、そのポイントからはみ出します。そのはみ出し分は考慮されます。
boundingBox(transform=None)
→ hou.BoundingBox
このジオメトリを囲むのに十分な大きさのサイズで配置された(オプションでジオメトリインスタンスをトランスフォームさせた)軸平行の3D境界ボックスを返します。
transform
ジオメトリインスタンスをトランスフォームさせるhou.Matrix4。 元のジオメトリを変更しないでください。
orientedBoundingBox()
→ hou.orientedBoundingBox
このジオメトリを囲むのに十分な大きさのサイズで配置された向きのある3D境界ボックスを返します。
orientedPointBoundingBox(pointpattern)
→ hou.OrientedBoundingBox
ポイントパターンで指定されたポイントを含むようにサイズと位置が決められた向きのある3D境界ボックスを返します。 このパターンが空っぽであれば、すべてのポイントが含まれます。
球などのいくつかのプリミティブは、そのポイントからはみ出します。そのはみ出し分は考慮されません。
orientedPrimBoundingBox(primpattern)
→ hou.OrientedBoundingBox
プリミティブパターンで指定されたプリミティブを含むようにサイズと位置が決められた向きのある3D境界ボックスを返します。 このパターンが空っぽであれば、すべてのプリミティブが含まれます。
球などのいくつかのプリミティブは、そのポイントからはみ出します。そのはみ出し分は考慮されます。
averageMinDistance(local_transform, geometry, geometry_transform)
→ float
selfのポイントセットまでの最短距離のgeometry内のすべてのポイントの平均を返します。
local_transform
このジオメトリ内のすべてのポイントに適用されるトランスフォーム。
geometry
距離の検索元のジオメトリ。
geometry_transform
geometry内のすべてのポイントに適用されるトランスフォーム。
geometryに頂点がなければ、hou.OperationFailedを引き起こします。
query_geometry = query_node.geometry() queried_geometry = queried_node.geometry() # <query_geometry>のポイントセットまでの最短距離にある # <queried_geometry>内のポイントすべての平均を返します。 query_geometry.averageMinDistance( query_node.worldTransform(), queried_geometry, queried_node.worldTransform())
averageEdgeLength()
→ float
メッシュの平均エッジ長を返します。
メッシュに何もエッジがなければ、hou.OperationFailedを引き起こします。
# 平均のエッジ長を返します。 geo.averageEdgeLength()
作成 ¶
createPoint()
→ hou.Point
(0, 0, 0)の場所に新しくポイントを作成し、それらに該当するhou.Pointオブジェクトを返します。 通常ではPython定義のSOPのコードからこのメソッドをコールします。
ジオメトリにPointアトリビュートが含まれていれば、その新しいポイントは、それらのアトリビュートのデフォルト値を受け取ります。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
サンプルとしてhou.Geometry.addAttrib, hou.Geometry.createPolygon, hou.Face.addVertexを参照してください。
createPoints(point_positions)
→ tuple
of hou.Point
指定した複数位置にそれぞれポイントを作成し、新しいhou.Pointオブジェクトのタプルを返します。 このメソッドは、通常ではPython定義のSOPのコードからコールします。
point_positions
には、hou.Vector3オブジェクトのタプルまたは3-タプルの浮動小数点のタプルを指定することができます。
例えば、point_positions
が((0, 1, 2), (1, 2, 3))
であれば、このメソッドは(0, 1, 2)と(1, 2, 3)の位置に1個ずつポイントを作成します。
ジオメトリにPointアトリビュートが含まれていれば、新しく作成されたポイントのアトリビュートにはそのデフォルト値が入ります。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。 指定したポイントポジションのどれかが3つの値(x,y,z)でない場合は、hou.InvalidSizeを引き起こします。
サンプルは、hou.Geometry.addAttrib, hou.Geometry.createPolygons, hou.Face.addVertexを参照してください。
createPolygon(is_closed=True)
→ hou.Polygon
新しいポリゴンを作成し、それに該当するhou.Polygonオブジェクトを返します。 通常ではPython定義のSOPのコードからこのメソッドをコールします。
新しく作成されたポリゴンには頂点がありません。頂点を追加するにはhou.Face.addVertexを使用します。 また、ポリゴンは、特に指定がなければデフォルトでは閉じ、指定があればポリゴンカーブになります(詳細は、hou.Face.isClosedを参照してください)。
ジオメトリにPrimitiveアトリビュートが含まれていれば、その新しいポリゴンは、それらのアトリビュートのデフォルト値を受け取ります。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
geo = hou.pwd().geometry() poly = geo.createPolygon() for position in (0,0,0), (1,0,0), (0,1,0): point = geo.createPoint() point.setPosition(position) poly.addVertex(point)
若干複雑なサンプルはhou.Face.addVertexを参照してください。
createPolygons(points, is_closed=True)
→ tuple
of hou.Polygon
指定したポイントを頂点とする一連のポリゴンを作成し、その新しいhou.Polygonオブジェクトのタプルを返します。 通常ではPython定義のSOPのコードからこのメソッドをコールします。
points
には、hou.Pointオブジェクトのタプルまたはポイント番号を意味した整数のタプルのタプルを指定することができます。
例えば、points
が((0, 1, 2), (3, 4, 5, 6))
であれば、このメソッドは、ポイント番号0,1,2を頂点とするポリゴンとポイント番号3,4,5,6を頂点とするポリゴンを作成します。
作成されたポリゴンは、特に指定がなければデフォルトでは閉じ、指定があればポリゴンカーブになります(詳細は、hou.Face.isClosedを参照してください)。
ジオメトリにPrimitiveアトリビュートが含まれていれば、新しく作成されたポリゴンのアトリビュートにはそのデフォルト値が入ります。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。 指定したポイントタプルが最低でも3つの要素でない場合は、hou.InvalidSizeを引き起こします。 ポイント番号のどれかまたはhou.Pointオブジェクトがジオメトリ内になければ、hou.InvalidInputを引き起こします。
例:
# ジオメトリ内に6つのポイントを作成します。 geo = hou.pwd().geometry() point_positions = ( (1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 1, 0), (1, 0, 1), (0, 1, 1), ) points = geo.createPoints(point_positions) # 2つのポリゴンを作成します。 # 最初のポリゴンは、ジオメトリ内の最初の3つのポイントを頂点として使用します。 # 2番目のポリゴンは、ジオメトリ内の最後の3つのポイントを頂点として使用します。 polygons = geo.createPolygons( ((points[0], points[1], points[2]), (points[3], points[4], points[5])))
createTetrahedron()
→ hou.Prim
新しい四面体を作成し、それに該当するhou.Primオブジェクトを返します。 通常ではPython定義のSOPのコードからこのメソッドをコールします。
新しく作成された四面体には4つの頂点があり、その頂点に新しいポイントが割り当てられています。 既存ポイントから四面体を構築するには、hou.Geometry.createTetrahedronInPlaceを使用します。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
createTetrahedronInPlace(p0, p1, p2, p3)
→ hou.Prim
新しい四面体を作成し、それに該当するhou.Primオブジェクトを返します。 通常ではPython定義のSOPのコードからこのメソッドをコールします。
新しく作成された四面体には4つの頂点があり、四面体に渡されたポイントを使用します。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
createHexahedron()
→ hou.Prim
新しい六面体を作成し、それに該当するhou.Primオブジェクトを返します。 通常ではPython定義のSOPのコードからこのメソッドをコールします。
新しく作成された六面体には8つの頂点があり、その頂点に新しいポイントが割り当てられています。 既存ポイントから六面体を構築するには、hou.Geometry.createHexahedronInPlaceを使用します。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
createHexahedronInPlace(p0, p1, p2, p3, p4, p5, p6, p7)
→ hou.Prim
新しい六面体を作成し、それに該当するhou.Primオブジェクトを返します。 通常ではPython定義のSOPのコードからこのメソッドをコールします。
新しく作成された六面体には8つの頂点があり、六面体に渡されたポイントを使用します。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
createNURBSCurve(num_vertices=4, is_closed=False, order=4)
→ hou.Face
指定した頂点数で新しいNURBSを作成し、それを返します。 通常ではPython定義のSOPのコードからこのメソッドをコールします。
num_vertices
カーブ内の頂点数。新しいポイントは頂点毎にジオメトリに追加され、このポイントは位置を変更しない限りは原点に配置されます。 hou.Face.addVertexを使ってもっと頂点を追加することもできます。
NURBSカーブの最小頂点数は、そのカーブの階数(次数+1)と同じです。 デフォルトの階数の4では、カーブは最低でも4つの頂点を持たなければなりません。 指定する頂点数が少なかった場合は、このメソッドはhou.OperationFailedを引き起こします。
is_closed
カーブを開くか閉じるか制御します。詳細は、hou.Face.isClosedを参照してください。 指定しなかった場合、そのカーブは開きます。 この挙動は、hou.Geometry.createPolygonと異なり、新しいポリゴンは閉じます。 hou.Face.setIsClosedを使ってポリゴンを開いたり閉じたりすることもできます。
order
カーブの階数(次数+1)を指定します。デフォルトの階数は4で、3次NURBSカーブに相当します。 最小階数の2は、カーブを直線にします。
ジオメトリにPrimitiveアトリビュートが含まれていれば、新しいカーブは、それらのアトリビュートのデフォルト値を受け取ります。
# このコードは、Python SOP内から動作しますが、Pythonシェルからは動作しません。 geo = hou.pwd().geometry() curve = geo.createNURBSCurve(10) i = 0 for vertex in curve.vertices(): vertex.point().setPosition((i, i % 3, 0)) i = i + 1
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
関連項目:
createBezierCurve(num_vertices=4, is_closed=False, order=4)
→ hou.Face
指定した頂点数で新しいBezierカーブを作成し、それを返します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
num_vertices
カーブ内の頂点数。新しいポイントは頂点毎にジオメトリに追加され、このポイントは位置を変更しない限りは原点に配置されます。 hou.Face.addVertexを使ってもっと頂点を追加することもできます。
is_closed
カーブを開くか閉じるか制御します。詳細は、hou.Face.isClosedを参照してください。 指定しなかった場合、そのカーブは開きます。 この挙動は、hou.Geometry.createPolygonと異なり、新しいポリゴンは閉じます。
order
カーブの階数(次数+1)を指定します。デフォルトの階数は4で、3次NURBSカーブに相当します。 最小階数の2は、カーブを直線にします。
開いたBezierカーブは、(order - 1) * n + 1
個の頂点がなければなりません。
このnはn>=1
です。(そのため、階数が4のカーブに有効な値は、4, 7, 10などです)。
閉じたBezierカーブは、(order - 1) * n
個の頂点がなければなりません(例えば、階数が4のカーブには3, 6, 9などの頂点数が必要です)。
この制限は、階数2のカーブには当てはまりません。
結論として、頂点数を変更する必要があるので、非線形なBezierカーブにはhou.Face.setIsClosedを使用することができません。
詳細は、hou.Geometry.createNURBSCurveを参照してください。
createNURBSSurface(rows, cols, is_closed_in_u=False, is_closed_in_v=False)
→ hou.Surface
(1, 1)のサイズで原点を中心としてXY平面にNURBSサーフェスを作成します。通常では、Python定義のSOPのコードからこのメソッドをコールします。
rows, cols
2D配列の頂点のサイズを決めて、サーフェスのコントロールポイントを定義します。 各方向の縦と横の数は、それぞれUとVの階数以上でなければなりません。
is_closed_in_u, is_closed_in_v
各UV方向でサーフェスを開くか閉じるか制御します。詳細は、hou.Surface.isClosedInUを参照してください。 指定しなかった場合のデフォルトの挙動は、開いたサーフェスを構築します。
order_u, order_v
各UV方向のサーフェスの階数を指定します。 デフォルトの階数はUVとも4で、これは3次NURBSサーフェスに相当します。 最小階数の2は、線形セグメントのサーフェス、本質的にはメッシュになります。
ジオメトリにPrimitiveアトリビュートが含まれていれば、新しいサーフェスは、それらのアトリビュートのデフォルト値を受け取ります。
hou.Geometry.transformPrimsを使えば、サーフェスを動かしたりサイズを変更することができます。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
縦と横の数が無効な場合は、hou.OperationFailedを引き起こします。
# このコードは、Python SOP内から動作しますが、Pythonシェルからは動作しません。 geo = hou.pwd().geometry() # 頂点が10x10のグリッドのサーフェスを作成します。 surf = geo.createNURBSSurface(10, 10) # 初期状態では、その中心は(0, 0, 0)で、サイズが(1, 1, 1)で、XY平面上にあります。 # これを(20, 10)にスケールして、XZ平面へ回転します。 geo.transformPrims((surf,), hou.hmath.buildScale((20, 10, 1)) * hou.hmath.buildRotateAboutAxis((1, 0, 0), 90))
関連項目:
createBezierSurface(rows, cols, is_closed_in_u=False, is_closed_in_v=False)
→ hou.Surface
(1, 1)のサイズで原点を中心としてXY平面にBezierサーフェスを作成します。通常では、Python定義のSOPのコードからこのメソッドをコールします。
rows, cols
2D配列の頂点のサイズを決めて、サーフェスのコントロールポイントを定義します。
rows
の数はv
に、columns
の数はu
に相当します。これは若干混同することがあります。
例えば、geo.createBezierSurface(9, 7, is_closed_in_u=False, is_closed_in_v=True)
は有効ですが、
geo.createBezierSurface(9, 7,is_closed_in_u=True, is_closed_in_v=False)
はhou.OperationFailedを引き起こします。
is_closed_in_u, is_closed_in_v
u
とv
の各方向でサーフェスを開くか閉じるか制御します。詳細は、hou.Surface.isClosedInUを参照してください。
order_u, order_v
各UV方向のサーフェスの階数を指定します。 デフォルトの階数はUVとも4で、これは3次NURBSサーフェスに相当します。 最小階数の2は、線形セグメントのサーフェス、本質的にはメッシュになります。
Bezierカーブと同様、Bezierサーフェスには各UV方向でポイント数の制限があります。
指定した方向に対して開く場合、その方向のポイント数は、(order - 1) * n + 1
でなければなりません。
このnはn >= 1
です。(例えば、 4, 7, 10, …)。
閉じる場合、その方向のポイント数は(order - 1) * n
でなければなりません。このnはn >= 1
です。
(例えば、階数3なら2, 4, 6, ..です)。
hou.Geometry.transformPrimsを使えば、サーフェスを動かしたりサイズを変更することができます。
ジオメトリにPrimitiveアトリビュートが含まれていれば、新しいサーフェスは、それらのアトリビュートのデフォルト値を受け取ります。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
import math # このコードは、Python SOP内から動作しますが、Pythonシェルからは動作しません。 geo = hou.pwd().geometry() # Y軸を基準にチューブ状のオブジェクトを構築します。 num_rows, num_cols = (10, 9) surf = geo.createBezierSurface(num_rows, num_cols, is_closed_in_u=True) for v_index in range(num_rows): for u_index in range(num_cols): angle = u_index * (2.0 * math.pi) / num_cols surf.vertex(u_index, v_index).point().setPosition( (math.cos(angle), v_index / float(num_cols-1), math.sin(angle)))
createMeshSurface(rows, cols, is_closed_in_u=False, is_closed_in_v=False)
→ hou.Surface
(1, 1)のサイズで原点を中心としてXY平面に四角形メッシュを作成し、それを返します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
メッシュオブジェクトは、同じ形状を定義したポリゴンセットと同じではないことに注意してください。 メッシュオブジェクトは単一プリミティブです。
詳細は、hou.Geometry.createNURBSSurfaceを参照してください。
createVolume(xres, yres, zres, bounding_box=None)
→ hou.Volume
x,y,zの解像度(またはサイズ)のボクセル配列を指定すると、ジオメトリに新しいボリュームプリミティブが追加され、それを返します。 新しいボリュームのボクセル値はすべて0です。
xres, yres, zres
1方向でのボクセル配列のサイズを指定する0より大きい整数。 この値がプラスでなかった場合は、hou.OperationFailedを引き起こします。
bounding_box
ボリュームの3Dサイズを指定するhou.BoundingBox。 このサイズはボリュームのボクセル解像度とは無関係であることを覚えておいてください。 このパラメータがNoneの場合は、Houdiniは(-1,-1,-1)から(1,1,1)までの境界ボックスを使用します。
createChannelPrim()
→ hou.ChannelPrim
新しいチャンネルプリミティブを作成してジオメトリに追加して、それを返します。 その新しいチャンネルプリミティブは空っぽのチャンネルに初期化されます。
createPacked(typename, point=None)
→ hou.PackedPrim
typename
パックプリミティブのタイプの名前を含んだ文字列。
典型的な例は、"PackedDisk"
(ディスク上のジオメトリファイル)または"AlembicRef"
(Alembicファイル)です。
利用可能なtypename
の値の完全リストを調べるには、Houdiniツールのコマンドラインでginfo -P
を実行してください。
point
詳細は、hou.PackedPrimを参照してください。
createPackedGeometry(geo, point=None)
→ hou.PackedPrim
指定した埋め込みジオメトリを使用したジオメトリパックプリミティブを作成します。
geo
PackedGeometryプリミティブの作成に使用するhou.Geometryオブジェクト。
point
詳細は、hou.PackedPrimを参照してください。
削除 ¶
deletePrims(prims, keep_points=False)
一連のプリミティブを削除します。通常では、Python定義のSOPのコードからこのメソッドをコールします。
prims
削除するhou.Primオブジェクトのリストまたはhou.PrimGroup。
keep_points
True
の場合、そのプリミティブが削除されても、そのポイントは残ります。
1つのプリミティブを削除するには、1つのプリミティブのシーケンスを渡してください。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
# 1つおきにプリミティブを削除します: prims = [p for p in geo.prims() if p.number() % 2 == 0] geo.deletePrims(prims) # 1番目のプリミティブを削除します: geo.deletePrims([geo.iterPrims()[0]])
deletePrimsOutsideBoundingBox(bbox)
指定した境界ボックスから完全に外にある境界ボックスのプリミティブを削除します。
また、削除したプリミティブと関連付けられているポイントも削除します。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
deletePoints(points)
一連のポイントを削除します。通常では、Python定義のSOPのコードからこのメソッドをコールします。
Houdiniは、そのポイントを参照している頂点を削除することに注意してください。 例えば、6つのポリゴンで構成されたボックスがあり、その各ポリゴンが4つの頂点を持っていると仮定します。 また、ボックス上の各ポイントが3つのポリゴン上の3つの頂点で共有されていると仮定します。 これらのポイントのどれかを削除すると、Houdiniは、それに相当するポリゴンからその頂点を削除し、 その結果、4つの頂点を持つ3つのポリゴンと3つの頂点を持つ3つのポリゴンが残ります。
1つのポイントを削除するには、1つのポイントのシーケンスを渡してください。
points
削除するhou.Pointオブジェクトのリストまたはhou.PointGroup。
このジオメトリが変更不可の場合は、hou.GeometryPermissionErrorを引き起こします。
グループ ¶
findPointGroup(name)
→ hou.PointGroup or None
指定した名前のPointグループを返します。そのようなグループが存在しなければNone
を返します。
pointGroups()
→ tuple
of hou.PointGroup
ジオメトリ内のすべてのPointグループのタプルを返します。
以下の関数は、ジオメトリ内のすべてのグループの名前を返します:
def pointGroupNames(geometry): return [group.name() for group in geometry.pointGroups()]
createPointGroup(name, is_ordered=False, unique_name=False)
→ hou.PointGroup
このジオメトリ内に新しいPointグループを作成します。
name
新しいグループの名前。この名前のグループが既に存在していれば、hou.OperationFailedを引き起こします。
is_ordered
新しいグループの順番を変更するかどうか。グループの並べ替えに関する詳細は、hou.PointGroupを参照してください。
unique_name
デフォルトでは、指定したグループが既に存在していれば例外が引き起こされます。 unique_nameをTrueに設定すると、代わりにそのグループ名はnameに基づいてまだ存在していない名前に変更されます。
ジオメトリからPointグループを削除するには、hou.PointGroup.destroyを使用します。
Note
グループ名は数字から始めることはできず、英数字とアンダースコアのみ含めることができます。
findPrimGroup(name)
→ hou.PrimGroup or None
指定した名前のPrimitiveグループを返します。そのようなグループが存在しなければNone
を返します。
primGroups()
→ tuple
of hou.PrimGroup
ジオメトリ内のすべてのPrimitiveグループのタプルを返します。
createPrimGroup(name, is_ordered=False, unique_name=False)
→ hou.PrimGroup
このジオメトリ内に新しいPrimitiveグループを作成します。
name
新しいグループの名前。この名前のグループが既に存在していれば、hou.OperationFailedを引き起こします。
is_ordered
新しいグループの順番を変更するかどうか。グループの並べ替えに関する詳細は、hou.PrimGroupを参照してください。
unique_name
デフォルトでは、指定したグループが既に存在していれば例外が引き起こされます。 unique_nameをTrueに設定すると、代わりにそのグループ名はnameに基づいてまだ存在していない名前に変更されます。
ジオメトリからPrimitiveグループを削除するには、hou.PrimGroup.destroyを使用します。
Note
グループ名は数字から始めることはできず、英数字とアンダースコアのみ含めることができます。
findEdgeGroup(name)
→ hou.EdgeGroup or None
name
エッジグループの名前。
指定した名前のエッジグループを返します。そのようなグループが存在しなければNone
を返します。
createEdgeGroup(name)
→ hou.EdgeGroup
このジオメトリ内に新しいエッジグループを作成します。
name
新しいグループの名前。この名前のグループが既に存在していれば、hou.OperationFailedを引き起こします。
ジオメトリからエッジグループを削除するには、hou.EdgeGroup.destroyを使用します。
findVertexGroup(name)
→ hou.VertexGroup or None
指定した名前の頂点グループを返します。そのようなグループが存在しなければNone
を返します。
vertexGroups()
→ tuple
of hou.VertexGroup
ジオメトリ内のすべての頂点グループのタプルを返します。
以下の関数は、ジオメトリ内のすべてのグループの名前を返します:
def vertexGroupNames(geometry): return [group.name() for group in geometry.vertexGroups()]
createVertexGroup(name, is_ordered=False)
→ hou.VertexGroup
このジオメトリ内に新しい頂点グループを作成します。
name
新しいグループの名前。この名前のグループが既に存在していれば、hou.OperationFailedを引き起こします。
is_ordered
新しいグループの順番を変更するかどうか。グループの並べ替えに関する詳細は、hou.VertexGroupを参照してください。
ジオメトリから頂点グループを削除するには、hou.VertexGroup.destroyを使用します。
generateGroupMenu(group_types=None, include_selection=True, include_name_attrib=True, case_sensitive=True, pattern="*", decode_tokens=False, parm=None)
→ tuple
of str
ジオメトリのグループをリストするパラメータメニュー用のトークンとラベルを生成します。
group_types
リストするグループのコンポーネントタイプを指定したhou.geometryType値(またはhou.geometryTypeのシーケンス)。
デフォルト値のNone
は、すべてのポイント/プリミティブ/エッジのグループをリストします。
include_selection
このジオメトリがSOPから指定されたら、グループメニューに現行コンポーネント選択を包含します。
include_name_attrib
name
Primitiveアトリビュートが存在すれば、グループメニューに固有名(例えば、@name=piece2
)を包含します。
case_sensitive
メニューラベルを大文字小文字の区別して生成するかどうかを指定します。
これはpattern
を大文字小文字の区別をするかどうかも制御します。
pattern
包含したいグループ名のパターンを指定します。
decode_tokens
有効にすると、メニュートークンには、実際のグループ名ではなく、デコードされたグループ名が格納されます。 これは、デコードされたグループ名のマッチングに対応したパラメータで役に立ちます。
parm
オプションで、メニューが生成されるhou.Parmを指定します。 パラメータの現行グループ文字列は、どのグループが既にオンになっているかを示すために使用されます。
フリーズ ¶
freeze(read_only=False, clone_data_ids=False)
→ hou.Geometry
特定のSOPにリンクされていない他のGeometryオブジェクトを返します。
通常では、hou.SopNode.geometryをコールすると、その結果のGeometryオブジェクトがそのSOPの参照を維持します。 それをUnfrozenと言います。 UnfrozenのGeometryオブジェクト内のポイント、プリミティブ、アトリビュートにアクセスする度に、Houdiniは、そのSOPが最後にクックしたジオメトリを使用します。 そのため、パラメータを変更したり、アニメーションするSOPに関しては時間を変更すると、そのGeometryオブジェクトは、そのSOPの新しいジオメトリに更新されます。
Python SOPを呼び出さない限り、フリーズしたGeometryオブジェクトは、特定のSOPと同様のライブの連動性を持ちません。 SOPにそのジオメトリを要求し、そのジオメトリのフリーズしたコピーを保存した場合、SOPを再クックした時、そのフリーズしたGeometryオブジェクトは更新されません。 その代わりに、フリーズしたジオメトリは、自身のポイントやプリミティブのデータのコピーを保存し、そのSOPへのその後の変更から影響を受けません。 フリーズしたGeometryオブジェクトを破壊した時、それが作成したジオメトリコピーも破壊されます。
Geometryオブジェクトのポイント、プリミティブ、アトリビュートなどへのアクセスは、フリーズしたオブジェクトを扱う時に高速になることを覚えておいてください。 速度が重要な処理では、フリーズしたGeometryで作業したいことがあるでしょう。
UnfrozenのGeometryオブジェクトに対してこのメソッドをコールすると、フリーズしたGeometryオブジェクトが返されます。 フリーズしたオブジェクトに対してこのメソッドをコールしても何の効果もなく、フリーズしたオブジェクトが返されます。
Python定義のSOPをクックして、そのSOPのジオメトリを要求するPythonコードを実行する時は、その返されたGeometryオブジェクトは書き込み可能です。 このGeometryオブジェクトを修正すると、このSOPの出力に影響を与えます。 効率を上げるために、このGeometryオブジェクトは既にフリーズされているので、そのオブジェクトにフリーズをコールしても何の効果もありません。
read_only
Trueの場合、その結果のフリーズしたジオメトリは読み込み専用になります。 読み込み専用のフリーズしたジオメトリを使用することで、複数のパックプリミティブ間で埋め込みジオメトリを共有することができます。
clone_data_ids
このメソッドの条件からジオメトリのコピーを作成させる場合、ここには、その新しいコピーに同じデータIDを持たせるかどうかを指定します。
True
の場合、これは、アトリビュートデータIDが同じジオメトリオブジェクトからコピーされたものなのかどうかに関係なく、そのアトリビュートデータIDのみを調べてデータをキャッシュ化するといった最適化を有効にするのに役立ちます。
False
の場合、新しいコピーのデータIDは固有になります。
isReadOnly()
→ bool
ジオメトリが読み込み専用ならTrueを返します。
ノード ¶
sopNode()
→ hou.SopNode
Geometryがフリーズされていない場合は、このジオメトリに相当するhou.SopNodeオブジェクトを返します。 フリーズされている場合は、Noneを返します。
フリーズしたジオメトリに関する詳細は、hou.Geometry.freezeを参照してください。
sopNodeOutputIndex()
→ int
Geometryがフリーズされていない場合は、このジオメトリが相当するSOPノードの出力のインデックスを返します。 フリーズされている場合は、-1を返します。
たいていの場合、このメソッドは、1番目の出力に相当するジオメトリを意味する0を返します。 このメソッドは、複数の出力を持つSOPノードに対しては0以外の値を返すだけです。
フリーズしたジオメトリに関する詳細は、hou.Geometry.freezeを参照してください。
ポイント ¶
points()
→ tuple
of hou.Point
ジオメトリ内のすべてのポイントのタプルを返します。
hou.Geometry.iterPointsメソッドも参照してください。
iterPoints()
→ generator of hou.Point
ジオメトリ内のすべてのポイントを通じて反復するジェネレータを返します。
hou.Geometry.pointsはジオメトリ内のすべてのポイントのタプルを割り当てて返すのに対し、 このメソッドは、要求に応じてhou.Pointオブジェクトを割り当てるジェネレータオブジェクトを返します。 このオブジェクトは、シーケンスのランダムアクセスで非常に高速です。
インデックスによって特定のポイントにアクセスして、そのジオメトリにポイントがたくさんある場合、
points()
よりもiterPoints()
を使用する方が高速です。
しかし、ジオメトリ内のすべてのポイントに対して反復する場合には、一般的にはiterPoints()
よりもpoints()
の方が高速です。
# これが望ましいです: geo.iterPoints()[23] # これよりも: geo.points()[23] # しかし、これが望ましいです: for point in geo.points(): ...ポイントを処理... # これよりも: for point in geo.iterPoints(): ...ポイントを処理...
globPoints(pattern, ordered=False)
→ tuple
of hou.Point
ポイント番号のパターンに相当するポイントのタプルを返します。
パターンフォーマットは、ポイント選択を受け取るSOPノード上のグループフィールドで使われているものと同じフォーマットです。 そのパターン内のエレメントは、スペースで区切り、それらのエレメントにはポイント番号、ポイント番号の範囲、グループ名を指定することができます。
オプションで、グループに追加された順番でポイントを返すことができます。
このメソッドは、選択したポイントセットだけに動作するPython SOPを記述する時に役に立ちます。
パターンが有効でない、または存在しないグループを参照した場合は、hou.OperationFailedを引き起こします。 空っぽのパターンは無効とみなされることに注意してください。 有効なポイントを参照していない番号は、エラーになるのではなく、単にポイントに合致しないだけです。
# 5と7のポイントを含むタプルを返します。 geo.globPoints("5 7") # 5から10までのポイントを含むタプルを返します。 geo.globPoints("5-10") # group1ポイントグループ内のポイントすべてを含むタプルを返します。 geo.globPoints("group1") # 0から98以外のポイントすべてを返します。 geo.globPoints("!0-98") # 5, 10から20までのポイントとgroup1内のポイントを返します。 geo.globPoints("5 group1 10-20")
以下のPython SOPのサンプルは、Point SOPと同じ挙動をします。
# このコードは、Python SOP内から動作しますが、Pythonシェルからは動作しません。 # Python SOPに以下のparmタプルがあると想定します: # group: 影響を与えるポイントを含んだ文字列 # t: Point SOPのpositionパラメータのような挙動をする3つのfloatのセット。 # これらのパラメータをエクスプレッション($TX, $TY, $TZ)に設定します。 geo = hou.pwd().geometry() # グループフィールドを使用して、影響を与えるポイントを決めます。グループフィールドが空っぽの場合、 # すべてのポイントに対して作用します。 pattern = hou.ch("group") if pattern == "": points = geo.points() else: points = geo.globPoints(pattern) # ポイントをループして、SOPの現行ポイントを設定します。 # そして、t parmタプルを評価するので、現行ポイントを(例えば、hscriptの$TXやPythonのpwd().curPoint()と一緒に)使用することができます。 for point in points: hou.pwd().setCurPoint(point) new_position = hou.pwd().evalParmTuple("t") point.setPosition(new_position)
point(index)
→ hou.Point
指定したインデックスのポイントを返します。
これは、hou.Geometry.pointsを使って無駄にすべてのポイントを取得することなく、特定のポイントにアクセスするための便利メソッドです。
指定したインデックスのポイントが存在しなかった場合は、Noneを返します。
nearestPoint(position, ptgroup=None, max_radius=1E18)
→ hou.Point or None
照会位置を含んだ3個のfloatのシーケンスを与えると、ジオメトリ内でその位置からmax_radius
以内にある最近接ポイントを検索します。
ptgroupが文字列グループパターンの場合、その検索は、指定されたポイントに制限されます。
ジオメトリ内に何もポイントが存在しなかった場合は、None
を返すことに注意してください。
関連項目: hou.nearestPoints
nearestPoints(position, max_points, ptgroup=None, max_radius=1E18)
→ tuple
of hou.Point
照会位置を含んだ3個のfloatのシーケンスを与えると、ジオメトリ内でその位置からmax_radius
以内にあるmax_points
個の最近接ポイントを検索します。
ptgroupが文字列グループパターンの場合、その検索は、指定されたポイントに制限されます。
ジオメトリ内に何もポイントが存在しなかった場合は、None
を返すことに注意してください。
関連項目: hou.nearestPoint
pointFloatAttribValues(name)
→ tuple
of float
すべてのポイントの指定したアトリビュートの値を含んだfloatのタプルを返します。
このメソッドは、intまたはfloatのアトリビュートでのみ動作します。
指定したアトリビュートに2つ以上の要素が含まれている場合、各ポイントは、その結果の複数値に呼応します。
例えば、Cd
がサイズ3のfloatアトリビュートで、(0.1, 0.2, 0.3), (0.5, 0.5, 0.5), (0.8, 0.7, 0.6)の3つのポイントがあれば、
その結果は、(0.1, 0.2, 0.3, 0.5, 0.5, 0.5, 0.8, 0.7, 0.6)になります。
このメソッドのコールは、hou.Point.attribValueコールですべてのポイントをループさせるよりも高速です。
アトリビュート名が無効な場合や、アトリビュートがintでもfloatでもない(例えば、文字列アトリビュートになっている)場合、このメソッドはhou.OperationFailedを引き起こします。
多くのメソッドではアトリビュートを扱うことができますが、このメソッドにはhou.Attribオブジェクトを渡すことができません。 とはいえ、hou.Attrib.nameを使用することで、Attribオブジェクトから簡単にアトリビュート名を取得することができます。
pointFloatAttribValuesAsString(name, float_type=hou.numericData.Float32)
→ str
for Python 2, bytes
for Python 3
すべてのポイントに対してfloatのアトリビュート値を意味したバイナリ文字列を返します。
このメソッドは、hou.Geometry.pointFloatAttribValuesよりも高速で、array
モジュールを使用すれば、文字列をPythonシーケンスに変換することができます。
返されるバイナリ文字列は、Python3だとbytes
オブジェクト、Python2だとstr
オブジェクトです。
詳細は、HOMバイナリデータを参照してください。
float_type
floatデータタイプ(Float16, Float32, Float64)を指定するためのhou.numericData値。
このメソッドは、以下の実装によって高速化しています:
import array def pointFloatAttribValuesAsString(self, name): return array.array("f", self.pointFloatAttribValues(name)).tostring()
このメソッドからの戻り値を以下のメソッドを使用して配列に変換することができます:
import array def pointFloatAttribValuesAsArray(geometry, name): a = array.array("f") a.fromstring(geometry.pointFloatAttribValuesAsString(name)) return a
詳細は、hou.Geometry.pointFloatAttribValuesを参照してください。
setPointFloatAttribValues(name, values)
特定のアトリビュートに対して、すべてのポイントのアトリビュート値を設定します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
name
Pointアトリビュートの名前。
values
hou.Geometry.pointFloatAttribValuesで返されるフォーマットと同じフォーマットのintまたはfloatの値のシーケンス。 詳細は、そのメソッドを参照してください。
アトリビュート名が無効な場合や、アトリビュートがintまたはfloatでない場合(例えば、文字列アトリビュート)や、値の配列が正しいサイズでない場合は、 このメソッドは、hou.OperationFailedを引き起こします。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.pointFloatAttribValuesも参照してください。
setPointFloatAttribValuesFromString(name, values, float_type=hou.numericData.Float32)
特定のアトリビュートに対して、指定したfloat_type値のシーケンスの文字列表現からすべてのポイントにアトリビュート値を設定します。 このメソッドは、hou.Geometry.setPointFloatAttribValuesよりも高速です。
このメソッドは、文字列だけでなく他のタイプも受け入れることができます。つまりバッファインターフェースに対応したPythonオブジェクトを受け取ることができます。
特に、array
とnumpy
のPythonモジュールからの配列がサポートされているので、それらの配列から文字列を構築する必要がありません。
float_type
floatデータタイプ(Float16, Float32, Float64)を指定するためのhou.numericData値。
文字列の長さがlen(self.iterPoints() * byte_size_of_float_type)
でない場合は、hou.OperationFailedを引き起こします。
詳細は、hou.Geometry.setPointFloatAttribValuesとhou.Geometry.pointFloatAttribValuesAsStringを参照してください。
以下のサンプルの関数は、array.array("f")
を受け取り、そのアトリビュート値をその内容に設定します:
def setPointFloatAttribValuesFromArray(geometry, arr): assert(arr.typecode == "f") geometry.setPointFloatAttribValuesFromString(arr))
pointIntAttribValues(name)
→ tuple
of int
すべてのポイントのアトリビュート値を含んだintのタプルを返します。
このメソッドは、intまたはfloatのアトリビュートに対してのみ動作します。 アトリビュートに2つ以上のエレメントが含まれている場合、各ポイントはその結果の複数値に相当します。 例えば、“idmap”がサイズ2のintアトリビュートで、(1, 2), (2, 3), (3, 4)の値の3つのポイントが存在すると、 その結果は、(1, 2, 2, 3, 3, 4)になります。
このメソッドのコールは、すべてのポイントをループしたり、hou.Point.attribValueをコールするよりも高速です。
アトリビュート名が無効な場合や、アトリビュートがintまたはfloatでない場合(例えば、文字列アトリビュート)は、このメソッドは、hou.OperationFailedを引き起こします。
アトリビュートを扱う他の多くのメソッドのように、hou.Attribオブジェクトをこのメソッドに渡すことが出来ないことに注意してください。 とはいえ、hou.Attrib.nameを使用すれば、簡単にAttribオブジェクトから名前を取得することができます。
pointIntAttribValuesAsString(name, int_type=hou.numericData.Int32)
→ str
for Python 2, bytes
for Python 3
すべてのポイントに対してintのアトリビュート値を意味したバイナリ文字列を返します。
このメソッドは、hou.Geometry.pointIntAttribValuesよりも高速で、array
モジュールを使用すれば、文字列をPythonシーケンスに変換することができます。
返されるバイナリ文字列は、Python3だとbytes
オブジェクト、Python2だとstr
オブジェクトです。
詳細は、HOMバイナリデータを参照してください。
int_type
intデータタイプ(Int8, Int16, Int32, Int64)を指定するためのhou.numericData値。
このメソッドは、以下の実装によって高速化しています:
import array def pointIntAttribValuesAsString(self, name): return array.array("i", self.pointIntAttribValues(name)).tostring()
このメソッドからの戻り値を以下のメソッドを使用して配列に変換することができます:
import array def pointIntAttribValuesAsArray(geometry, name): a = array.array("i") a.fromstring(geometry.pointIntAttribValuesAsString(name)) return a
詳細は、hou.Geometry.pointIntAttribValuesを参照してください。
setPointIntAttribValues(name, values)
特定のアトリビュートに対して、すべてのポイントのアトリビュート値を設定します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
name
Pointアトリビュートの名前。
values
hou.Geometry.pointIntAttribValuesで返されるフォーマットと同じフォーマットのintまたはfloatの値のシーケンス。 詳細は、そのメソッドを参照してください。
アトリビュート名が無効な場合や、アトリビュートがintまたはfloatでない場合(例えば、文字列アトリビュート)や、値の配列が正しいサイズでない場合は、 このメソッドは、hou.OperationFailedを引き起こします。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.pointIntAttribValuesも参照してください。
setPointIntAttribValuesFromString(name, values, int_type=hou.numericData.Int32)
特定のアトリビュートに対して、指定したint_type値のシーケンスの文字列表現からすべてのポイントにアトリビュート値を設定します。 このメソッドは、hou.Geometry.setPointIntAttribValuesよりも高速です。
このメソッドは、文字列だけでなく他のタイプも受け入れることができます。つまりバッファインターフェースに対応したPythonオブジェクトを受け取ることができます。
特に、array
とnumpy
のPythonモジュールからの配列がサポートされているので、それらの配列から文字列を構築する必要がありません。
int_type
intデータタイプ(Int8, Int16, Int32, Int64)を指定するためのhou.numericData値。
文字列の長さがlen(self.iterPoints() * byte_size_of_int_type)
でない場合は、hou.OperationFailedを引き起こします。
詳細は、hou.Geometry.setPointIntAttribValuesとhou.Geometry.pointIntAttribValuesAsStringを参照してください。
以下のサンプルの関数は、sizeof(signed int) == 4と仮定してarray.array("i")
を受け取り、そのアトリビュート値をその内容に設定します:
def setPointIntAttribValuesFromArray(geometry, arr): assert(arr.typecode == "i") geometry.setPointIntAttribValuesFromString(arr))
pointStringAttribValues(name)
→ tuple
of str
すべてのポイントの指定したアトリビュートの値を含んだ文字列のタプルを返します。
このメソッドは、文字列アトリビュートでのみ動作します。 指定したアトリビュートに2つ以上の要素が含まれている場合、各ポイントは、その結果の複数値に呼応します。 例えば、“strmap”がサイズ2の文字列アトリビュートで、(“apple”, “orange”), (“red”, “blue”), (“one”, “two”)の3つのポイントがあれば、 その結果は、(“apple”, “orange”, “red”, “blue”, “one”, “two”)になります。
このメソッドのコールは、hou.Point.attribValueコールですべてのポイントをループさせるよりも高速です。
アトリビュート名が無効な場合や、アトリビュートが文字列アトリビュートでない場合、このメソッドはhou.OperationFailedを引き起こします。
多くのメソッドではアトリビュートを扱うことができますが、このメソッドにはhou.Attribオブジェクトを渡すことができません。 とはいえ、hou.Attrib.nameを使用することで、Attribオブジェクトから簡単にアトリビュート名を取得することができます。
setPointStringAttribValues(name, values)
特定のアトリビュートに対して、すべてのポイントにそのアトリビュート値を設定します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
name
Pointアトリビュートの名前。
values
hou.Geometry.pointStringAttribValuesが返す形式と同じ形式の文字列値シーケンス。 詳細は、そのメソッドを参照してください。
アトリビュート名が無効だったり、アトリビュートが文字列でない、または値の配列が正しいサイズでない場合は、hou.OperationFailedを引き起こします。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.pointStringAttribValuesも参照してください。
エッジ ¶
globEdges(pattern)
→ tuple
of hou.Edge
エッジパターンに相当するエッジのタプルを返します。
パターンフォーマットは、エッジ選択を受け取るSOPノード上のグループフィールドで使われているものと同じフォーマットです。 詳細は、hou.Geometry.globPointsを参照してください。
プリミティブ ¶
nearestPrim(position)
→ (hou.Prim or None
, float
, float
, float
)
位置に関する3つのfloatのシーケンスを指定すると、その位置に最も近いプリミティブの位置を検索し、 そのプリミティブ、そのプリミティブ上のu値、そのプリミティブ上のv値、そのプリミティブまでの距離含んだタプルを返します。
ジオメトリにプリミティブがなかった場合は、戻りのタプルの1番目の値がNoneになることに注意してください。
Note
返されるUVは実際の座標なので、VEXのxyzdistに合うように単位座標に切り替えるには、hou.Prim.primuvConvertを使用します。
prims()
→ tuple
of hou.Prim
ジオメトリ内のすべてのプリミティブのタプルを返します。返されるプリミティブは、hou.Primのサブクラス(例えば、ポリゴン、ボリュームなど)です。
関連項目:
iterPrims()
→ generator of hou.Prim
ジオメトリ内のすべてのプリミティブを通じて反復するジェネレータを返します。
hou.Geometry.primsはジオメトリ内のすべてのプリミティブのタプルを割り当てて返すのに対し、 このメソッドは、要求に応じてhou.Primを生成するジェネレータオブジェクトを返します。 このオブジェクトは、シーケンスのランダムアクセスで非常に高速です。
インデックスによって特定のプリミティブにアクセスして、そのジオメトリにプリミティブがたくさんある場合、
prims()
よりもiterPrims()
を使用する方が高速です。
しかし、ジオメトリ内のすべてのプリミティブに対して反復する場合には、一般的にはiterPrims()
よりもprims()
の方が高速です。
# これが望ましいです: geo.iterPrims()[23] # これよりも: geo.prims()[23] # しかし、これが望ましいです: for prim in geo.prims(): ...プリミティブを処理... # これよりも: for prim in geo.iterPrims(): ...プリミティブを処理...
hou.Geometry.primsメソッドも参照してください。
globPrims(pattern)
→ tuple
of hou.Prim
プリミティブ番号のパターンに相当するプリミティブのタプルを返します。
パターンフォーマットは、プリミティブ選択を受け取るSOPノード上のグループフィールドで使われているものと同じフォーマットです。 詳細は、hou.Geometry.globPointsを参照してください。
prim(index)
→ hou.Prim
指定したインデックスのプリミティブを返します。
これは、hou.Geometry.primsを使って無駄にすべてのプリミティブを取得することなく、特定のプリミティブにアクセスするための便利メソッドです。
指定したインデックスのプリミティブが存在しなかった場合は、Noneを返します。
containsPrimType(type_or_name)
→ bool
ジオメトリに、最低でも1個の指定したタイプのプリミティブが含まれているかどうか返します。
type_or_name
hou.primTypeまたはプリミティブタイプの名前を含んだ文字列。
文字列値の典型的な例は、"Poly"
(ポリゴン)または"PackedAgent"
(エージェントパックプリミティブ)です。
利用可能なtypename
値の完全なリストを調べるには、Houdiniツールのコマンドラインからginfo -P
を実行してください。
countPrimType(type_or_name)
→ long
ジオメトリ内の指定したタイプのプリミティブの数を返します。
type_or_name
hou.primTypeまたはプリミティブタイプの名前を含んだ文字列。
文字列値の典型的な例は、"Poly"
(ポリゴン)または"PackedAgent"
(エージェントパックプリミティブ)です。
利用可能なtypename
値の完全なリストを調べるには、Houdiniツールのコマンドラインからginfo -P
を実行してください。
primFloatAttribValues(name)
→ tuple
of float
すべてのプリミティブのアトリビュートの値を含んだfloatのタプルを返します。
このメソッドは、intまたはfloatのアトリビュートに対してのみ動作します。
アトリビュートに2つ以上のエレメントが含まれている場合、各プリミティブはその結果の複数値に相当します。
例えば、Cd
がサイズ3のfloatアトリビュートで、(0.1, 0.2, 0.3), (0.5, 0.5, 0.5), (0.8, 0.7, 0.6)の値の3つのプリミティブが存在すると、
その結果は、(0.1, 0.2, 0.3, 0.5, 0.5, 0.5, 0.8, 0.7, 0.6)になります。
このメソッドのコールは、すべてのプリミティブをループしたり、hou.Prim.attribValueをコールするよりも高速です。
アトリビュート名が無効な場合や、アトリビュートがintまたはfloatでない場合(例えば、文字列アトリビュート)は、このメソッドは、hou.OperationFailedを引き起こします。
アトリビュートを扱う他の多くのメソッドのように、hou.Attribオブジェクトをこのメソッドに渡すことが出来ないことに注意してください。 とはいえ、hou.Attrib.nameを使用すれば、簡単にAttribオブジェクトから名前を取得することができます。
primFloatAttribValuesAsString(name)
→ str
for Python 2, bytes
for Python 3
すべてのプリミティブに対してfloatのアトリビュート値を意味したバイナリ文字列を返します。
このメソッドは、hou.Geometry.primFloatAttribValuesよりも高速で、array
モジュールを使用すれば、文字列をPythonシーケンスに変換することができます。
返されるバイナリ文字列は、Python3だとbytes
オブジェクト、Python2だとstr
オブジェクトです。
詳細は、HOMバイナリデータを参照してください。
このメソッドは、以下の実装によって高速化しています:
import array def primFloatAttribValuesAsString(self, name): return array.array("f", self.primFloatAttribValues(name)).tostring()
このメソッドからの戻り値を以下のメソッドを使用して配列に変換することができます:
import array def primFloatAttribValuesAsArray(geometry, name): a = array.array("f") a.fromstring(geometry.primFloatAttribValuesAsString(name)) return a
詳細は、hou.Geometry.primFloatAttribValuesを参照してください。
setPrimFloatAttribValues(name, values)
特定のアトリビュートに対して、すべてのプリミティブのアトリビュート値を設定します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
name
Primitiveアトリビュートの名前。
values
hou.Geometry.primFloatAttribValuesで返されるフォーマットと同じフォーマットのintまたはfloatの値のシーケンス。 詳細は、そのメソッドを参照してください。
アトリビュート名が無効な場合や、アトリビュートがintまたはfloatでない場合(例えば、文字列アトリビュート)や、値の配列が正しいサイズでない場合は、 このメソッドは、hou.OperationFailedを引き起こします。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.primFloatAttribValuesも参照してください。
setPrimFloatAttribValuesFromString(name, values, float_type=hou.numericData.Float32)
特定のアトリビュートに対して、指定したfloat_type値のシーケンスの文字列表現からすべてのプリミティブのアトリビュート値を設定します。 このメソッドは、hou.Geometry.setPrimFloatAttribValuesよりも高速です。
このメソッドは、文字列だけでなく他のタイプも受け入れることができます。つまりバッファインターフェースに対応したPythonオブジェクトを受け取ることができます。
特に、array
とnumpy
のPythonモジュールからの配列がサポートされているので、それらの配列から文字列を構築する必要がありません。
float_type
floatデータタイプ(Float16, Float32, Float64)を指定するためのhou.numericData値。
文字列の長さがlen(self.iterPrims() * byte_size_of_float_type)
でない場合は、hou.OperationFailedを引き起こします。
詳細は、hou.Geometry.setPrimFloatAttribValuesとhou.Geometry.primFloatAttribValuesAsStringを参照してください。
以下のサンプルの関数は、array.array("f")
を受け取り、そのアトリビュート値をその内容に設定します:
def setPrimFloatAttribValuesFromArray(geometry, arr): assert(arr.typecode == "f") geometry.setPrimFloatAttribValuesFromString(arr)
primIntAttribValues(name)
→ tuple
of int
すべてのプリミティブのアトリビュート値を含んだintのタプルを返します。
このメソッドは、intまたはfloatのアトリビュートに対してのみ動作します。 アトリビュートに2つ以上のエレメントが含まれている場合、各ポイントはその結果の複数値に相当します。 例えば、“idmap”がサイズ2のintアトリビュートで、(1, 2), (2, 3), (3, 4)の値の3つのプリミティブが存在すると、 その結果は、(1, 2, 2, 3, 3, 4)になります。
このメソッドのコールは、すべてのプリミティブをループしたり、hou.Prim.attribValueをコールするよりも高速です。
アトリビュート名が無効な場合や、アトリビュートがintまたはfloatでない場合(例えば、文字列アトリビュート)は、このメソッドは、hou.OperationFailedを引き起こします。
アトリビュートを扱う他の多くのメソッドのように、hou.Attribオブジェクトをこのメソッドに渡すことが出来ないことに注意してください。 とはいえ、hou.Attrib.nameを使用すれば、簡単にAttribオブジェクトから名前を取得することができます。
primIntAttribValuesAsString(name, int_type=hou.numericData.Int32)
→ str
for Python 2, bytes
for Python 3
すべてのプリミティブに対してintのアトリビュート値を意味したバイナリ文字列を返します。
このメソッドは、hou.Geometry.primFloatAttribValuesよりも高速で、array
モジュールを使用すれば、文字列をPythonシーケンスに変換することができます。
返されるバイナリ文字列は、Python3だとbytes
オブジェクト、Python2だとstr
オブジェクトです。
詳細は、HOMバイナリデータを参照してください。
int_type
intデータタイプ(Int8, Int16, Int32, Int64)を指定するためのhou.numericData値。
このメソッドは、以下の実装によって高速化しています:
import array def primIntAttribValuesAsString(self, name): return array.array("i", self.primIntAttribValues(name)).tostring()
このメソッドからの戻り値を以下のメソッドを使用して配列に変換することができます:
import array def primIntAttribValuesAsArray(geometry, name): a = array.array("i") a.fromstring(geometry.primIntAttribValuesAsString(name)) return a
詳細は、hou.Geometry.primIntAttribValuesを参照してください。
setPrimIntAttribValues(name, values)
特定のアトリビュートに対して、すべてのプリミティブのアトリビュート値を設定します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
name
Primitiveアトリビュートの名前。
values
hou.Geometry.primFloatAttribValuesで返されるフォーマットと同じフォーマットのintまたはfloatの値のシーケンス。 詳細は、そのメソッドを参照してください。
アトリビュート名が無効な場合や、アトリビュートがintまたはfloatでない場合(例えば、文字列アトリビュート)や、値の配列が正しいサイズでない場合は、 このメソッドは、hou.OperationFailedを引き起こします。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.primIntAttribValuesも参照してください。
setPrimIntAttribValuesFromString(name, values, int_type=hou.numericData.Int32)
特定のアトリビュートに対して、指定したint_type値のシーケンスの文字列表現からすべてのプリミティブにアトリビュート値を設定します。 このメソッドは、hou.Geometry.setPrimIntAttribValuesよりも高速です。
このメソッドは、文字列だけでなく他のタイプも受け入れることができます。つまりバッファインターフェースに対応したPythonオブジェクトを受け取ることができます。
特に、array
とnumpy
のPythonモジュールからの配列がサポートされているので、それらの配列から文字列を構築する必要がありません。
int_type
intデータタイプ(Int8, Int16, Int32, Int64)を指定するためのhou.numericData値。
文字列の長さがlen(self.iterPrims() * byte_size_of_int_type)
でない場合は、hou.OperationFailedを引き起こします。
詳細は、hou.Geometry.setPrimIntAttribValuesとhou.Geometry.primIntAttribValuesAsStringを参照してください。
以下のサンプルの関数は、sizeof(signed int) == 4と仮定してarray.array("i")
を受け取り、そのアトリビュート値をその内容に設定します:
def setPrimIntAttribValuesFromArray(geometry, arr): assert(arr.typecode == "i") geometry.setPrimIntAttribValuesFromString(arr)
primStringAttribValues(name)
→ tuple
of str
すべてのプリミティブの指定したアトリビュートの値を含んだ文字列のタプルを返します。
このメソッドは、文字列アトリビュートでのみ動作します。 指定したアトリビュートに2つ以上の要素が含まれている場合、各プリミティブは、その結果の複数値に呼応します。 例えば、“strmap”がサイズ2の文字列アトリビュートで、(“apple”, “orange”), (“red”, “blue”), (“one”, “two”)の3つのプリミティブがあれば、 その結果は、(“apple”, “orange”, “red”, “blue”, “one”, “two”)になります。
このメソッドのコールは、hou.Prim.attribValueコールですべてのプリミティブをループさせるよりも高速です。
アトリビュート名が無効な場合や、アトリビュートが文字列アトリビュートでない場合、このメソッドはhou.OperationFailedを引き起こします。
アトリビュートを扱う他の多くのメソッドのように、hou.Attribオブジェクトをこのメソッドに渡すことが出来ないことに注意してください。 とはいえ、hou.Attrib.nameを使用すれば、簡単にAttribオブジェクトから名前を取得することができます。
setPrimStringAttribValues(name, values)
特定のアトリビュートに対して、すべてのプリミティブにそのアトリビュート値を設定します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
name
Primitiveアトリビュートの名前。
values
hou.Geometry.primStringAttribValuesが返す形式と同じ形式の文字列値シーケンス。 詳細は、そのメソッドを参照してください。
アトリビュート名が無効だったり、アトリビュートが文字列でない、または値の配列が正しいサイズでない場合は、hou.OperationFailedを引き起こします。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.primStringAttribValuesも参照してください。
intersect(ray_origin, ray_direction, position_out, normal_out, uvw_out, pattern=None, min_hit=0.01, max_hit=1E18, tolerance=0.01)
→ int
このオブジェクト内のジオメトリと光線の交点を求めます。
Note
このメソッドは、交差に関する複数の情報を返すのではなくて、引数に渡したオブジェクトに対してその場で交差に関する情報が修正されるという点で独特なメソッドです。
# SOPノードからジオメトリを取得します。 geometry = hou.node("/obj/geo1/sphere1").geometry() # "天井"から原点にまっすぐ下に向いて光線を放射します。 origin = hou.Vector3(0, 100, 0) direction = hou.Vector3(0, -1, 0) # intersect()メソッドに渡すオブジェクトを作成します。 position = hou.Vector3() normal = hou.Vector3() uvw = hou.Vector3() # 最初の交点(存在すれば)を求めます。 did_intersect = geometry.intersect(origin, direction, position, normal, uvw)
光線がジオメトリと交差した場合は当たったプリミティブのID番号が返され、光線が当たらなかった場合は-1
を返します。
ray_origin
光線のワールド空間における開始点を表現したhou.Vector3オブジェクト。
ray_direction
光線の方向ベクトルを表現したhou.Vector3オブジェクト。
position_out
この引数にはhou.Vector3オブジェクトを渡します。このメソッドは、ワールド空間における交点を示すようにそのオブジェクトの値を変更します。
normal_out
この引数にはhou.Vector3オブジェクトを渡します。このメソッドは、サーフェスから光線に向かった法線方向を示すようにそのオブジェクトの値を変更します。
uvw_out
この引数にはhou.Vector3オブジェクトを渡します。このメソッドは、光線が当たったプリミティブのUVW位置を示すようにそのオブジェクトの値を変更します。
pattern
プリミティブグループ構文を含んだ文字列を渡すと、光線はそのパターンに合致したプリミティブにのみ交差させることができます。
min_hit
この距離よりも近い交差を無視します。
このmin_hit
引数を使って、前のヒットより若干長くmin_hit
を設定することで、光線に沿って交差する可能性のあるすべてのヒットをループさせることができます。
hit_positions = [] prev_dist = 0.01 while geometry.intersect(origin, direction, position, normal, uvw, min_hit=prev_dist): # ループを反復させる度にmin_hitを変更できるように、交点の *コピー* を格納する必要があります。 hit_positions.append(hou.Vector3(position)) prev_dist = origin.distanceTo(position) + 0.01
max_hit
この距離よりも遠い交差を無視します。
tolerance
このパラメータを使用することで、交差の精度を調整することができます。 光線がこの許容値内でジオメトリに到達すると、交差したと想定されます。 0.01の許容値(デフォルト)は厳格な交差になり、値が大きいほど交差の精度が悪くなります。
頂点 ¶
globVertices(pattern)
→ tuple
of hou.Vertex
頂点番号のパターンに相当する頂点のタプルを返します。
パターンフォーマットは、頂点選択を受け取るSOPノード上のグループフィールドで使われているものと同じフォーマットです。 詳細は、hou.Geometry.globPointsを参照してください。
vertexFloatAttribValues(name)
→ tuple
of float
すべての頂点の指定したアトリビュートの値を含んだfloatのタプルを返します。
このメソッドは、intまたはfloatのアトリビュートでのみ動作します。 指定したアトリビュートに2つ以上の要素が含まれている場合、各頂点は、その結果の複数値に呼応します。 例えば、“attrib”がサイズ3のfloatアトリビュートで、(0.1, 0.2, 0.3), (0.5, 0.5, 0.5), (0.8, 0.7, 0.6)の3つの頂点があれば、 その結果は、(0.1, 0.2, 0.3, 0.5, 0.5, 0.5, 0.8,0.7, 0.6)になります。
このメソッドのコールは、hou.Vertex.attribValueコールですべての頂点をループさせるよりも高速です。
アトリビュート名が無効な場合や、アトリビュートがintまたはfloatでない場合(例えば、文字列アトリビュート)は、このメソッドは、hou.OperationFailedを引き起こします。
アトリビュートを扱う他の多くのメソッドのように、hou.Attribオブジェクトをこのメソッドに渡すことが出来ないことに注意してください。 とはいえ、hou.Attrib.nameを使用すれば、簡単にAttribオブジェクトから名前を取得することができます。
vertexFloatAttribValuesAsString(name, float_type=hou.numericData.Float32)
→ str
for Python 2, bytes
for Python 3
すべての頂点のfloatアトリビュート値を表現したバイナリ文字列を返します。
このメソッドはhou.Geometry.vertexFloatAttribValuesよりも高速で、array
モジュールを使用することで、その文字列をPythonシーケンスに変換することができます。
返されるバイナリ文字列は、Python3だとbytes
オブジェクト、Python2だとstr
オブジェクトです。
詳細は、HOMバイナリデータを参照してください。
float_type
floatデータタイプ(Float16, Float32, Float64)を指定するためのhou.numericData値。
このメソッドは、以下の実装によって高速化しています:
import array def vertexFloatAttribValuesAsString(self, name): return array.array("f", self.vertexFloatAttribValues(name)).tostring()
このメソッドからの戻り値を以下のメソッドを使用して配列に変換することができます:
import array def vertexFloatAttribValuesAsArray(geometry, name): a = array.array("f") a.fromstring(geometry.vertexFloatAttribValuesAsString(name)) return a
詳細は、hou.Geometry.vertexFloatAttribValuesを参照してください。
setVertexFloatAttribValues(name, values)
特定のアトリビュートに対して、すべての頂点のアトリビュート値を設定します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
name
Vertexアトリビュートの名前。
values
hou.Geometry.vertexFloatAttribValuesで返されるフォーマットと同じフォーマットのintまたはfloatの値のシーケンス。 詳細は、そのメソッドを参照してください。
アトリビュート名が無効な場合や、アトリビュートがintまたはfloatでない場合(例えば、文字列アトリビュート)や、値の配列が正しいサイズでない場合は、 このメソッドは、hou.OperationFailedを引き起こします。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.vertexFloatAttribValuesも参照してください。
setVertexFloatAttribValuesFromString(name, values, float_type=hou.numericData.Float32)
特定のアトリビュートに対して、指定したfloat_type値のシーケンスの文字列表現からすべての頂点にアトリビュート値を設定します。 このメソッドは、hou.Geometry.setVertexFloatAttribValuesよりも高速です。
このメソッドは、文字列だけでなく他のタイプも受け入れることができます。つまりバッファインターフェースに対応したPythonオブジェクトを受け取ることができます。
特に、array
とnumpy
のPythonモジュールからの配列がサポートされているので、それらの配列から文字列を構築する必要がありません。
float_type
floatデータタイプ(Float16, Float32, Float64)を指定するためのhou.numericData値。
文字列の長さがlen(self.iterVertexs() * byte_size_of_float_type)
でない場合は、hou.OperationFailedを引き起こします。
詳細は、hou.Geometry.setVertexFloatAttribValuesとhou.Geometry.vertexFloatAttribValuesAsStringを参照してください。
以下のサンプルの関数は、array.array("f")
を受け取り、そのアトリビュート値をその内容に設定します:
def setVertexFloatAttribValuesFromArray(geometry, arr): assert(arr.typecode == "f") geometry.setVertexFloatAttribValuesFromString(arr))
vertexIntAttribValues(name)
→ tuple
of int
すべての頂点の指定したアトリビュートの値を含んだ整数のタプルを返します。
このメソッドは、intまたはfloatのアトリビュートでのみ動作します。 指定したアトリビュートに2つ以上の要素が含まれている場合、各頂点は、その結果の複数値に呼応します。 例えば、“idmap”がサイズ2の整数アトリビュートで、(1, 2), (2, 3), (3, 4)の3つの頂点があれば、 その結果は、(1, 2, 2, 3, 3, 4)になります。
このメソッドのコールは、hou.Vertex.attribValueコールですべての頂点をループさせるよりも高速です。
アトリビュート名が無効な場合や、アトリビュートがintまたはfloatでない場合(例えば、文字列アトリビュート)は、このメソッドは、hou.OperationFailedを引き起こします。
アトリビュートを扱う他の多くのメソッドのように、hou.Attribオブジェクトをこのメソッドに渡すことが出来ないことに注意してください。 とはいえ、hou.Attrib.nameを使用すれば、簡単にAttribオブジェクトから名前を取得することができます。
vertexIntAttribValuesAsString(name, int_type=hou.numericData.Int32)
→ str
for Python 2, bytes
for Python 3
すべての頂点の整数アトリビュート値を表現したバイナリ文字列を返します。
このメソッドはhou.Geometry.vertexIntAttribValuesよりも高速で、array
モジュールを使用することで、その文字列をPythonシーケンスに変換することができます。
返されるバイナリ文字列は、Python3だとbytes
オブジェクト、Python2だとstr
オブジェクトです。
詳細は、HOMバイナリデータを参照してください。
int_type
整数データタイプ(Int8, Int16, Int32, Int64)を指定するためのhou.numericData値。
このメソッドは、以下の実装によって高速化しています:
import array def vertexIntAttribValuesAsString(self, name): return array.array("i", self.vertexIntAttribValues(name)).tostring()
このメソッドからの戻り値を以下のメソッドを使用して配列に変換することができます:
import array def vertexIntAttribValuesAsArray(geometry, name): a = array.array("i") a.fromstring(geometry.vertexIntAttribValuesAsString(name)) return a
詳細は、hou.Geometry.vertexIntAttribValuesを参照してください。
setVertexIntAttribValues(name, values)
特定のアトリビュートに対して、すべての頂点のアトリビュート値を設定します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
name
Vertexアトリビュートの名前。
values
hou.Geometry.vertexIntAttribValuesで返されるフォーマットと同じフォーマットのintまたはfloatの値のシーケンス。 詳細は、そのメソッドを参照してください。
アトリビュート名が無効な場合や、アトリビュートがintまたはfloatでない場合(例えば、文字列アトリビュート)や、値の配列が正しいサイズでない場合は、 このメソッドは、hou.OperationFailedを引き起こします。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.vertexIntAttribValuesも参照してください。
setVertexIntAttribValuesFromString(name, values, int_type=hou.numericData.Int32)
特定のアトリビュートに対して、指定したint_type値のシーケンスの文字列表現からすべての頂点にアトリビュート値を設定します。 このメソッドは、hou.Geometry.setVertexIntAttribValuesよりも高速です。
このメソッドは、文字列だけでなく他のタイプも受け入れることができます。つまりバッファインターフェースに対応したPythonオブジェクトを受け取ることができます。
特に、array
とnumpy
のPythonモジュールからの配列がサポートされているので、それらの配列から文字列を構築する必要がありません。
int_type
整数データタイプ(Int8, Int16, Int32, Int64)を指定するためのhou.numericData値。
文字列の長さがlen(self.iterVertexs() * byte_size_of_int_type)
でない場合は、hou.OperationFailedを引き起こします。
詳細は、hou.Geometry.setVertexIntAttribValuesとhou.Geometry.vertexIntAttribValuesAsStringを参照してください。
以下のサンプルの関数は、sizeof(signed int) == 4と仮定してarray.array("i")
を受け取り、そのアトリビュート値をその内容に設定します:
def setVertexIntAttribValuesFromArray(geometry, arr): assert(arr.typecode == "i") geometry.setVertexIntAttribValuesFromString(arr))
vertexStringAttribValues(name)
→ tuple
of str
すべての頂点の指定したアトリビュートの値を含んだ文字列のタプルを返します。
このメソッドは、文字列アトリビュートでのみ動作します。 指定したアトリビュートに2つ以上の要素が含まれている場合、各頂点は、その結果の複数値に呼応します。 例えば、“strmap”がサイズ2の文字列アトリビュートで、(“apple”, “orange”), (“red”, “blue”), (“one”, “two”)の3つの頂点があれば、 その結果は、(“apple”, “orange”, “red”, “blue”, “one”, “two”)になります。
このメソッドのコールは、hou.Vertex.attribValueコールですべての頂点をループさせるよりも高速です。
アトリビュート名が無効な場合や、アトリビュートが文字列アトリビュートでない場合、このメソッドはhou.OperationFailedを引き起こします。
アトリビュートを扱う他の多くのメソッドのように、hou.Attribオブジェクトをこのメソッドに渡すことが出来ないことに注意してください。 とはいえ、hou.Attrib.nameを使用すれば、簡単にAttribオブジェクトから名前を取得することができます。
setVertexStringAttribValues(name, values)
特定のアトリビュートに対して、すべての頂点にそのアトリビュート値を設定します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
name
Vertexアトリビュートの名前。
values
hou.Geometry.vertexStringAttribValuesが返す形式と同じ形式の文字列値シーケンス。 詳細は、そのメソッドを参照してください。
アトリビュート名が無効だったり、アトリビュートが文字列でない、または値の配列が正しいサイズでない場合は、hou.OperationFailedを引き起こします。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.vertexStringAttribValuesも参照してください。
データ ¶
data()
→ bytes
bgeoフォーマットのジオメトリデータを返します。
例:
geometry = hou.node("/obj/geo1/torus1").geometry() bgeo_data = geometry.data() open("/tmp/torus.bgeo", "wb").write(bgeo_data)
load(data)
bgeoバイトをこのオブジェクトに読み込みます。
例:
torus = hou.node("/obj/geo1/torus1").geometry() bgeo_data = torus.data() geometry = hou.Geometry() geometry.load(bgeo_data)
saveToFile(file_name)
ジオメトリオブジェクトの内容をファイルに保存します。ファイルの拡張子は、使用するファイルフォーマットで決まります。
GEOio
でリストされている拡張子を含むHoudiniでサポートされているファイルフォーマット(例えば、geo, bgeo, objなど)がサポートされています。
ファイルの拡張子が認識できなかった場合、bgeoフォーマットが使用されます。
ファイルのパスが無効または権限エラーや他のI/Oエラーがあった場合は、hou.OperationFailedを引き起こします。
loadFromFile(file_name)
このジオメトリオブジェクトの内容をファイルに保存されたデータに置換します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
HoudiniのFile SOPでサポートされているファイルのタイプを指定することができます。 詳細は、hou.Geometry.saveToFileを参照してください。
ファイルが存在しない、またはファイルを読み込むことができなかった場合は、hou.OperationFailedを引き起こします。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.mergeも参照してください。
clear()
このジオメトリオブジェクトからすべてを削除します。 このメソッドをコールした後は、ジオメトリにはポイントやプリミティブがなくなります。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
merge(geometry, clone_data_ids=False, prims=None)
他のhou.Geometryオブジェクトのポイントとプリミティブをこのオブジェクトにマージします。 新しいポイントとプリミティブが、このジオメトリのポイントとプリミティブに追加されます。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
空っぽのGeometry
オブジェクトにマージする時は、clone_data_ids
には、その結果のアトリビュートに同じデータIDを持たせるかどうかを指定します。
True
の場合、これは、アトリビュートデータIDが同じジオメトリオブジェクトからコピーされたものなのかどうかに関係なく、そのアトリビュートデータIDのみを調べてデータをキャッシュ化するといった最適化を有効にするのに役立ちます。
False
の場合、コピーしたアトリビュートのデータIDは固有になります。
オプションのprimsパラメータには、マージするプリミティブのサブセットをもっと正確に指定できるようにhou.Selection
を使用します。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.loadFromFileも参照してください。
copy(geometry, clone_data_ids=False, prims=None)
他のhou.Geometryオブジェクトのポイントとプリミティブをこのオブジェクトにコピーします。 これは、アトリビュートとプリミティブの再割り当てを回避するので、clear()やmerge()よりも高速です。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
空っぽのGeometry
オブジェクトにマージする時は、clone_data_ids
には、その結果のアトリビュートに同じデータIDを持たせるかどうかを指定します。
True
の場合、これは、アトリビュートデータIDが同じジオメトリオブジェクトからコピーされたものなのかどうかに関係なく、そのアトリビュートデータIDのみを調べてデータをキャッシュ化するといった最適化を有効にするのに役立ちます。
False
の場合、コピーしたアトリビュートのデータIDは固有になります。
オプションのprimsパラメータには、コピーするプリミティブのサブセットをもっと正確に指定できるようにhou.Selection
を使用します。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
hou.Geometry.loadFromFileも参照してください。
execute(verb, inputs=[])
→ HOM_Geometry
myselfを1番目の入力としてverb.execute()を呼び出し、その結果のジオメトリを返します。 これによって、一連のVerbの呼び出しをチェーン化することができます: geo.execute(subdivide).execute(subdivide)。
オプションの入力は、ジオメトリ自体を前に追加します。
importLop(lopnode, selectionrule, purpose=None, traversal=None, path_attrib_name=None, name_attrib_name=None, strip_layers=False, frame=None)
→ hou.LopLockedStage
指定したLOPのステージからプリミティブをパックプリミティブとしてインポートします。
このメソッドで作成されたパックプリミティブがこのジオメトリオブジェクトに含まれている限り、スコープ内に保持すべきhou.LopLockedStageオブジェクトを返します。 このhou.LopLockedStageオブジェクトの削除を許可すれば、USDパックプリミティブを表示またはアンパックされなくなります。
プリミティブは、hou.LopSelectionRuleに応じて選択されます。
purpose
引数を指定した場合、そのpurpose
を持ったプリミティブのみがインポートされます。
traversal
引数を指定した場合、hou.LopSelectionRuleで指定されたプリミティブの子が、指定した走査方法で走査されます。
この引数に指定可能な値は、例えば、std:component
, std:boundables
, std:groups
です。
path_attrib_name
引数を指定した場合、その名前のアトリビュートに各LOPプリミティブのパスが格納されます。
name_attrib_name
引数を指定した場合、その名前のアトリビュートに各LOPプリミティブの名前が格納されます。
strip_layers
引数がTrue
の場合、要求したLOPノードに直接的または間接的に接続されたLayer Breakノードより上にあるレイヤーをUSDステージから除外した後に、そのステージをインポートします。
これは、Layer Breakノードを使って、(Layer Breakノードの上のステージに追加された)変更すべきでないプリミティブとは別に(そのLayer Breakノードの下に追加した)変更可能なデータを維持したい場合に役立ちます。
frame
引数を指定した場合、その指定されたサンプルでのLOPが評価されます。
None
のままにすると、代わりに現在の評価タイムサンプルが使用されます。
importUsdStage(stage, selectionrule, purpose=None, traversal=None, path_attrib_name=None, name_attrib_name=None, frame=None)
Imports primitives from a USD Stage as packed primitives.
このメソッドで作成されたパックプリミティブがこのジオメトリオブジェクトに含まれている限り、USDステージはスコープ内に保持されている必要があります。 Stageオブジェクトの破壊を許可すると、USDパックプリミティブが表示もアンパックもされないようにすることができます。
プリミティブは、hou.LopSelectionRuleに応じて選択されます。
purpose
引数を指定した場合、そのpurpose
を持つプリミティブのみが取り込まれます。
traversal
引数を指定した場合、その走査方法によって、hou.LopSelectionRuleで指定されたプリミティブの子プリミティブが走査されます。
traversal
に指定可能な値は例えば、std:component
、std:boundables
、std:groups
です。
path_attrib_name
引数を指定した場合、各LOPプリミティブのパスがその名前のアトリビュートに格納されます。
name_attrib_name
引数を指定した場合、各LOPプリミティブの名前がその名前のアトリビュートに格納されます。
frame
引数を指定した場合、指定されたサンプルでステージからタイムサンプルが抽出されます。
None
のままにすると、代わりにHoudiniの現在の評価タイムサンプルが使用されます。
トランスフォーム ¶
transform(matrix)
トランスフォームマトリックスでジオメトリをトランスフォーム(例えば、回転、スケール、移動など)します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
トランスフォームマトリックスを構築する関数に関しては、hou.hmathを参照してください。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
transformPrims(prims, matrix)
トランスフォームマトリックスでプリミティブのセットをトランスフォーム(例えば、回転、スケール、移動など)します。 通常では、Python定義のSOPのコードからこのメソッドをコールします。
prims
トランスフォームさせるhou.Primオブジェクトのリストまたはhou.PrimGroup。
matrix
トランスフォームに使用するhou.Matrix4。 トランスフォームマトリックスを構築する関数に関しては、hou.hmathを参照してください。
このジオメトリが変更不可であれば、hou.GeometryPermissionErrorを引き起こします。
import math # このコードは、Python SOP内から動作しますが、Pythonシェルからは動作しません。 def createCircle(geo, num_vertices=10): # 指定した頂点数で閉じたカーブを作成します。 curve = geo.createNURBSCurve(num_vertices) curve.setIsClosed(True) # ポイントをXZ平面上の原点を中心としたユニット円に配置します。 for i, vertex in enumerate(curve.vertices()): angle = i * (2.0 * math.pi) / num_vertices position = (math.cos(angle), 0, math.sin(angle)) vertex.point().setPosition(position) return curve # XY平面上にたくさんの円を作成し、それらの円をX軸で若干傾け、原点から移動させ、Y軸でそれぞれの円を1度ずつ回転させます。 geo = hou.pwd().geometry() num_copies = 20 for i in range(num_copies): curve = createCircle(geo) geo.transformPrims([curve], hou.hmath.buildRotateAboutAxis((1, 0, 0), 30) * hou.hmath.buildTranslate((2, 0, 0)) * hou.hmath.buildRotateAboutAxis((0, 1, 0), i * 360.0 / num_copies))
ループ ¶
primLoop(prims, loop_type)
→ tuple
of hou.Prim
primsパラメータで指定したプリミティブに繋がったパスを作成するhou.Primオブジェクトのタプルを返します。 複数のパスが返される場合は、それらがNoneの値によって単一の戻りタプルに分けられます。 ビューポート内でループ選択を実行する時に使用される同じアルゴリズムを使用してパスが生成されます。
prims
この関数が返すパスまたは繋がったプリミティブのパスを定義するhou.Primオブジェクトのリスト。 リストには、最低でも2個のプリミティブを含めなければなりません。
loop_type
返されるパスのタイプを制御します。ここにはhou.componentLoopType値のどれかを指定することができます。 hou.componentLoopType.Extendedまたはhou.componentLoopType.Closedのループタイプのどちらかを使用すれば、 入力のprimsにはNoneエントリーを含めることができません。 さらに、プリミティブの各ペアは、別のフルループを定義するために使用されるので、プリミティブの数は偶数でなければなりません。 それらの条件が満たされなかった場合は、hou.OperationFailed例外が発生します。
指定したコンポーネントからループを構築することができなかった場合は、hou.OperationFailedを引き起こします。
pointLoop(points, full_loop)
→ tuple
of hou.Point
pointsパラメータで指定したポイントに繋がったパスを作成するhou.Pointオブジェクトのタプルを返します。 複数のパスが返される場合は、それらがNoneの値によって単一の戻りタプルに分けられます。 ビューポート内でループ選択を実行する時に使用される同じアルゴリズムを使用してパスが生成されます。
points
この関数が返すパスまたは繋がったポイントのパスを定義するhou.Pointオブジェクトのリスト。 リストには、最低でも2個のポイントを含めなければなりません。
loop_type
返されるパスのタイプを制御します。ここにはhou.componentLoopType値のどれかを指定することができます。 hou.componentLoopType.Extendedまたはhou.componentLoopType.Closedのループタイプのどちらかを使用すれば、 入力のpointsにはNoneエントリーを含めることができません。 さらに、ポイントの各ペアは、別のフルループを定義するために使用されるので、ポイントの数は偶数でなければなりません。 それらの条件が満たされなかった場合は、hou.OperationFailed例外が発生します。
指定したコンポーネントからループを構築することができなかった場合は、hou.OperationFailedを引き起こします。
edgeLoop(edges, loop_type, full_loop_per_edge, force_ring, allow_ring)
→ tuple
of hou.Edge
edgesパラメータで指定したポイントに繋がったパスを作成するhou.Edgeオブジェクトのタプルを返します。 複数のパスが返される場合は、それらがNoneの値によって単一の戻りタプルに分けられます。 ビューポート内でループ選択を実行する時に使用される同じアルゴリズムを使用してパスが生成されます。
edges
この関数が返すパスまたは繋がったエッジのパスを定義するhou.Edgeオブジェクトのリスト。 リストには、ループオプションに応じて最低でも1個または2個のエッジを含めなければなりません。
loop_type
返されるパスのタイプを制御します。ここにはhou.componentLoopType値のどれかを指定することができます。 hou.componentLoopType.Extendedまたはhou.componentLoopType.Closedのループタイプのどちらかを使用すれば、 入力のedgesにはNoneエントリーを含めることができません。 それらの条件が満たされなかった場合は、hou.OperationFailed例外が発生します。
full_loop_per_edge
Trueに設定し、loop_typeをhou.componentLoopType.Extendedまたはhou.componentLoopType.Closedのループタイプに設定すれば、 各入力のエッジは、フルループまたはリングを作成するのに使用されます。 Falseに設定すると、エッジをペアで受け取るので、エッジの数は偶数でなければなりません。
force_ring
Trueに設定すると、この関数は、エッジループではなくエッジリングを返します。
allow_ring
Trueに設定すると、この関数は、指定したエッジがループよりもリングを生成する方が自然であれば(例えば、2つの垂直なエッジをポリゴングリッド上の同じ行から指定した場合)、エッジリングが返されます。 Falseに設定すると、エッジループのみが返されます。
指定したコンポーネントからループを構築することができなかった場合は、hou.OperationFailedを引き起こします。
pointNormals(points)
→ tuple
of hou.Vector3
指定したポイントのポイント法線を表現したhou.Vector3オブジェクトのタプルを返します。
points
ポイント法線を計算するhou.Pointオブジェクトのリストまたはhou.PointGroup。
選択 ¶
selection()
→ hou.Selection
このジオメトリに関係する現在のクックコンポーネント選択を返します。 これは、そのジオメトリを作成したSOPで設定されたデフォルトの選択です。
パックフォルダ ¶
extractPackedPaths(pattern)
→ tuple
of str
指定したパターンに合致したすべてのパックプリムファイルのパスを返します。 hou.Geometry.unpackFromFolderとhou.Geometry.packToFolderも参照してください。
unpackFromFolder(path)
→ hou.Geometry
指定したパスのファイルからアンパックされたジオメトリを返します。 hou.Geometry.packToFolderとhou.Geometry.extractPackedPathsも参照してください。
packToFolder(path, geometry, is_folder=False)
→ bool
指定したpath
のフォルダにgeometry
を詰め込みます。
is_folder
がTrueの場合、geometry
はパックコンテンツが含まれたフォルダとして扱われます。
成功すればTrueを返します。
指定したパスを作成できなかった場合は失敗します。
hou.Geometry.unpackFromFolderとhou.Geometry.extractPackedPathsも参照してください。
packedFolderProperties(path)
→ dict
指定したpath
のフォルダプロパティを含んだ辞書を返します。
この辞書には2個のエントリーが含まれています: “visible”キーのエントリーには、パックプリミティブが_3d_hidden_primitives
グループに含められているかどうかのブール値が入ります。“treat_as_folder”キーのエントリーには、プリミティブがパックコンテンツを含んだフォルダとして扱われているかどうかのブール値が入ります。
See also |