関数 ¶
definitionsInFile(file_path)
→ tuple
of hou.HDADefinition
HDAファイル内のデジタルアセット定義すべてを返します。 詳細は、hou.HDADefinitionを参照してください。
file_path
が有効なHDAファイルを参照していなかった場合は、hou.OperationFailedを引き起こします。
# $HOME/houdiniX.Y/hda/OPcustom.hda内のデジタルアセットで定義されているノードタイプをプリントします: >>> import os >>> my_hda_file = "%s/hda/OPcustom.hda" % hou.homeHoudiniDirectory() >>> for definition in hou.hda.definitionsInFile(my_hda_file): ... print definition.nodeTypeCategory().name() + "/" + definition.nodeTypeName() Sop/gcoggeo Sop/gCogFlatGeo Sop/gDivideAtCentroid Object/gAxle Object/gCog
installFile(file_path, oplibraries_file=None, change_oplibraries_file=True, force_use_assets=False)
HDAファイルに定義されているノードタイプすべてを現行Houdiniセッションにインストールします。 この関数は、Houdiniでの File ▸ Install Digital Asset Library… と等価です。
file_path
読み込むHDAファイル。
oplibraries_file
OPlibrariesファイルのパスまたはNone
。OPlibrariesファイルとは、起動時に読み込むHDAファイルのリストを含んだテキストファイルのことです。
Houdiniを起動すると、Houdiniパスで見つかったOPlibrariesファイルすべてを読み込み、それらのファイル内のリストのHDAファイルすべてを読み込みます。
$HOME/houdiniX.Y
,$HSITE/houdiniX.Y
, $JOB
などにOPlibrariesファイルを作成することで、特定のユーザ、スタジオ、ジョブなどに特化したライブラリを作成することができます。
このパラメータは、change_oplibraries_file
がTrue
の時のみ意味があります。
OPlibrariesは、 Asset Manager の Configuration タブ内にある Use OPlibraries files to find HDAS(OPlibrariesファイルを使用してHDAを検索) チェックボックスがオンになっている時にのみ使用されます。
None
または“Current HIP File”の場合、そのHDAファイルは、現在のHoudiniセッションにのみ読み込まれます。
そのファイル名もHIPファイルに保存されるので、同じHIPファイルを読み込むと、そのHDAファイルも自動的に読み込まれます。
“Scanned Asset Library Directories”の場合、これはInstall Digital Asset Libraryダイアログのインストールメニューエントリーと同じです。
change_oplibraries_file
oplibraries_file
がNone
でない、且つ、このパラメータがTrue
の時、
HoudiniはOPlibrariesファイルを修正して、そのHDAファイルをそこに追加します。
force_use_assets
True
の時、HDAファイル内の定義を必ず現行の定義にします。
それらの定義が現行定義にできなかった場合は、それらの定義が現行になるように優先度が付けられます。
詳細は、hou.HDADefinition.isPreferredを参照してください。
OPlibrariesファイルにHDAファイルのパスが記録されていなかった場合、Houdiniは、現在のHoudiniセッションにそれを記録します。 そのため、HIPファイルを読み込んだ時、Houdiniが参照するHDAファイルの読み込みを試みます。
uninstallFile(file_path, oplibraries_file=None, change_oplibraries_file=True)
現在のHoudiniセッションから、そのHDAファイルとそのHDAファイルが持っているノードタイプ定義すべてをアンインストールします。 ディスク上のHDAファイルとその内容は変わりません。
file_path
を"Embedded"
という特別な名前に設定することで、現行HIPファイルに組み込まれたデジタルアセットを参照することができます。
以下のサンプルは、現在のHoudiniセッションから、埋め込まれているデジタルアセット定義を削除します:
hou.hda.uninstallFile("Embedded")
oplibraries_file
がNone
でない、且つ、change_oplibraries_file
がTrue
の時、Houdiniは、指定したOPlibrariesファイルからHDAのパスを削除します。
これらのパラメータに関する詳細は、hou.hda.installFileを参照してください。
ノードタイプのすべての定義をアンインストールすると、そのノードタイプのインスタンスが不完全なアセット定義を使用していると警告が出ます。 とはいえ、それらのインスタンスは、それらのパラメータ値をSpareパラメータとして維持します。 その見つからないノードタイプを含んだHDAファイルをインストールすることで、それらのノードインスタンスが元通りになり、警告が消えます。
hou.HDADefinition.destroyも参照してください。
reloadFile(file_path)
HDAファイルの内容をリロードし、そのファイル内の更新されたデジタルアセット定義を読み込みます。
現在のHoudiniセッション外でHDAファイルが修正されていれば、この関数だけをコールすればいいです。
reloadAllFiles(rescan=True)
デジタルアセットファイルをリロードし、現行セッション内のアセット定義を更新します。
rescan
がTrueの場合、Houdiniは、hdaディレクトリに何か新しいhdaファイルがあるかチェックして、それらも読み込みます。
hou.hda.reloadFileも参照してください。
reloadNamespaceOrder()
HOUDINI_OPNAMESPACE_HIERARCHY
環境変数をチェックして、
限定されていないルート名のみがスクリプトに使用されている時、または異なるネームスペースから複数候補の選択肢の内で優先度の高いエントリーのみを表示するようにTabメニューを設定している時、
それらの時に使用するノードタイプを決定するためのノードタイプの優先順を再構築します。
loadedFiles()
→ tuple
of str
現在のHoudiniセッションに読み込まれているHDAファイルのパスのタプルを返します。
このメソッドは、ほぼ以下のように実装されています:
def loadedFiles(): '''このHoudiniセッションに読み込まれているHDAファイルのリストを返します。''' # すべてのノードタイプを検索して、そこにデジタルアセット定義があるか調べ、 # その定義を含んだHDAファイルを記録します。 result = [] for category in hou.nodeTypeCategories().values(): for node_type in category.nodeTypes().values(): definition = node_type.definition() if definition is None: continue if definition.libraryFilePath() not in result: result.append(definition.libraryFilePath()) return result
サンプルは、hou.HDADefinition.isCurrentを参照してください。
expandToDirectory(file_path, directory_path)
file_path
にあるHDAファイルの内容をdirectory_path
ディレクトリに展開します。そのディレクトリが存在しなければ、そのディレクトリが作成されます。
HDAファイルを展開すると、Houdiniは、そのファイル内の各デジタルアセット定義をそのディレクトリに格納します。
さらに、その定義内の各セクションをファイルに格納します。
展開されたファイルツリー内の各ディレクトリには、実際のファイル名またはディレクトリ名をセクション名にマッピングしたSections.List
ファイルが含まれます。
その理由は、セクション名にはディレクトリ名やファイル名で使用できない文字を含めることができるからです。
セクションに関する詳細は、hou.HDASectionを参照してください。
この関数は、簡単にHDAファイルの内容を検査して修正することができます。 hou.hda.collapseFromDirectoryも参照してください。
collapseFromDirectory(file_path, directory_path)
以前に展開されたHDAファイルを含んだディレクトリを指定すると、そのディレクトリをfile_path
で指定したHDAファイルに折りたたみます。
この関数は、hou.hda.expandToDirectoryと逆の動作をします。
renameSource(oplibraries_file, source_name=None)
OPlibrariesファイルに名前を付けます。この名前は、OPlibrariesファイルの Asset Manager のリストに表示されます。
source_name
がNone
の場合、その名前がOPlibrariesファイルから除去されます。
oplibraries_file
が存在しなければ、そのファイルが作成されます。
OPlibrariesファイルに関する詳細は、hou.hda.installFileを参照してください。
componentsFromFullNodeTypeName(node_type_name)
→ tuple
of str
フルノードタイプ名を構成するオペレータタイプ名コンポーネントのタプルを返します。 そのタプル内のコンポーネントは、以下の順番になっています: スコープネットワークタイプ、ノードタイプネームスペース、ノードタイプコア名、バージョン。
>>> # フルネームをコンポーネントに分けます >>> hou.hda.componentsFromFullNodeTypeName('MyUserNamespace::MyHDA::2.5') ('', 'MyUserNamespace', 'MyHDA', '2.5') >>> hou.hda.componentsFromFullNodeTypeName('Sop/foreach::MyCounterHDA') ('Sop/foreach', '', 'MyCounterHDA', '')
fullNodeTypeNameFromComponents(scope_node_type, name_space, name, version)
→ str
指定したコンポーネントから構築したフルノードタイプ名を返します。 それらの引数は、以下のコンポーネントを意味します: スコープネットワークタイプ、ノードタイプネームスペース、ノードタイプコア名、バージョン。
>>> # コンポーネントからノードタイプのフルネームを構成します >>> hou.hda.fullNodeTypeNameFromComponents('', 'userA', 'sphere', '') 'userA::sphere' >>> hou.hda.fullNodeTypeNameFromComponents('', 'userB', 'myHda', '2.6') 'userB::myHda::2.6' >>> hou.hda.fullNodeTypeNameFromComponents('Sop/foreach', '', 'MyCounterHDA', '') 'Sop/foreach::MyCounterHDA'
reloadHDAModule(hda_module)
hda_module
に相当するPythonModuleセクションのコードを再読み込みします。
hda_module
は、hou.HDAModuleオブジェクトでなければなりません。
例えば、このコードは'foobar'ノードのHDA定義のPythonModuleセクションのコードを再読み込みして再実行します:
hou.hda.reloadHDAModule(hou.node("/obj/foobar").hdaModule())
reloadHDAViewerStateModule(hda_module)
hda_module
に相当するViewerStateModuleセクション内のコードを再読み込みします。
hda_module
は、hou.HDAViewerStateModuleオブジェクトでなければなりません。
例えば、このコードは'foobar'ノードのHDA定義のViewerStateModuleセクションのコードを再読み込みします:
hou.hda.reloadHDAViewerStateModule(hou.node("/obj/foobar").hdaViewerStateModule())
reloadHDAViewerHandleModule(hda_module)
hda_module
に相当するViewerHandleModuleセクション内のコードを再読み込みします。
hda_module
は、hou.HDAViewerHandleModuleオブジェクトでなければなりません。
例えば、このコードは'xyz'ノードのHDA定義のViewerHandleModuleセクションのコードを再読み込みします:
hou.hda.reloadHDAViewerHandleModule(hou.node("/obj/xyz").hdaViewerHandleModule())
safeguardHDAs()
→ bool
Safeguard Operator Definitions構成オプションが有効になっていればTrueを返します。 セーフガードが有効になっていれば、デジタルアセット定義は、Houdiniセッション内で修正することができません。
setSafeguardHDAs(on)
Safeguard Operator Definitions構成オプションを有効か無効に設定します。
on
引数は、TrueまたはFalseのどちらかでなければなりません。
コールバック ¶
setStateEventCallback(hda_globals, state_name, event_name, callback)
特定のタイプのノードに対して特定のイベント(アクション)が発生する度に、指定したステートがコールするPythonコールバックを登録します。 この静的メソッドは、hda_globalsに特別な辞書を追加します。
Note
これは、hda_globals = globals()
でPython Moduleセクション内からコールしなければなりません。
def callback(): print "in callback" hou.hda.setStateEventCallback(globals(), 'objmirror', 'mirror', callback)
このコードは、オブジェクがそれに関連したPython Moduleがある時に、Mirrorシェルフツールにcallback
を呼び出させます。
State Callbacks
objmirror
isWorldSpace()
ミラーをワールド空間で実行するかどうかを示したブールを返します。
mirror(kwargs)
スケールベクトルkwargs['scale']
を使って、kwargs['node']
に対してミラーを実行します。
addEventCallback(event_types, callback)
デジタルアセットライブラリによって特定のアクション、イベントが発生した時にHoudiniがコールするPythonコールバックを登録します。
コールバックは、現行セッションでのみ保持されます。つまり、コールバックは.hip
ファイルには保存されません。
どのセッションでもコールバックを保持したいのであれば、pythonrc.py
(起動時に実行)または456.py
(ユーザが.hip
ファイルを開いた時に実行)のコード内にコールバックを追加します。
詳細は、Pythonスクリプトを追加する場所を参照してください。
event_types
Houdiniにcallback
関数をコールさせるイベントタイプを示したhou.hdaEventType列挙値のシーケンス。
callback
関数やバインドされたメソッドなどのコール可能なPythonオブジェクト。Houdiniは、event_types
のどれかのイベントタイプが発生した時にこの関数をコールします。
Houdiniは、コールバックを発動したイベントに該当するhou.hdaEventType値を含んだevent_type
キーワード引数を使って、関数をコールします。
Houdiniは、イベントタイプに応じて追加キーワード引数を渡します。
LibraryInstalled
またはLibraryUninstalled
のイベントのコールバックを例にすると、Houdiniは、インストールまたはアンインストールした.hda
ファイルのパスを含んだlibrary_path
キーワード引数を渡します。
イベントタイプ毎に渡される追加引数に関しては、hou.hdaEventTypeを参照してください。
引数リストに**kwargs
を追加することで、すべてのキーワード引数を受け入れることができるので、異なるイベントに対して同じコールバックを使用または今後の変更に対して安全性を確保することができます:
def event_callback(event_type, **kwargs): ...
Note
まったく同じコールバック関数を2回以上追加しようとしても、Houdiniは、一回のイベントの反応に対して関数を一回だけコールします。
とはいえ、同じ関数を異なるevent_types
に登録したい時にその同じ関数を“追加”するのに役立ちます。
event_types
リスト引数が空っぽの場合は、hou.OperationFailedを引き起こします。
以下は、新しいアセットをHoudiniに追加した時にコールされる関数をセットアップする例です:
def hda_event(event_type, asset_definition, **kwargs): label = asset_definition.description() library_path = asset_definition.libraryFilePath() print("New asset %s in %s" % (label, library_path)) hou.hda.addEventCallback((hou.hdaEventType.AssetCreated, ), hda_event)
hou.hda.removeEventCallbackとhou.hda.removeAllEventCallbacksも参照してください。
removeEventCallback(event_types, callback)
以前に追加したコールバックとhou.hdaEventType列挙値のシーケンスを指定すると、そのコールバックのイベントタイプのセットから、それらのイベントタイプが削除されます。 残りのイベントタイプのセットが空っぽになると、コールバックは完全に削除されます。
event_types
リスト引数が空っぽの場合は、hou.OperationFailedを引き起こします。
このコールバックが以前に追加されていなかった場合は、hou.OperationFailedを引き起こします。
詳細は、hou.hda.addEventCallbackを参照してください。
removeAllEventCallbacks()
すべてのイベントタイプからすべてのイベントコールバックを削除します。
詳細は、hou.hda.addEventCallbackを参照してください。
eventCallbacks()
→ tuple
of (tuple
of hou.hdaEventType, callback)
hou.hda.addEventCallbackコールに登録されたすべてのPythonコールバックのタプルを返します。
defaultFileExtension()
→ str
履歴に基づいて現行セッションのデフォルトのHDAファイル拡張子を返します。