デジタルアセットは、セクションと呼ばれるいくつかの異なったデータにその内容を保存します。 各セクションには名前があり、そこには任意のサイズのデータが含まれており、そのデータはだいたいテキストです。 各セクションは、その定義内に埋め込まれたファイルのようなもので、特別な名前のセクションを使用して、ノードの内容、パラメータのリストなどを保存します。 あなた独自のデータをセクション内に格納することで、それをデジタルアセットに埋め込むことができます。
ファイルを参照するHoudiniのパラメータは、デジタルアセット内のセクションを参照することもできます。
例えば、car
というオブジェクトレベルのデジタルアセットがあり、そのセクション名が"texture.jpg"
なら
opdef:/Object/car?texture.jpg
を使用することで、そのテクスチャを参照することができます。
hou.readFile()もこのopdef:
構文をサポートしています。
ファイルをデジタルアセットセクションに移すことで、1個のHDAファイルで配布可能な自己完結型のデジタルアセットを構築することができます。
セクション名には'/'を含めることができます。
メソッド ¶
name()
→ str
このセクションの名前を返します。
セクションの名前を変更することはできませんが、以下の関数で、擬似的に名前を変更することができます:
def renameSection(section): '''セクションを削除して、新しくそのセクションを作成することで、セクションの名前を変更します。その新しいセクションを返します。''' new_section = section.definition().addSection(new_name, section.contents()) section.destroy() return new_section
contents(compressionType=hou.compressionType.NoCompression)
→ str
このセクションの内容を含んだ文字列を返します。
オプションで圧縮タイプhou.compressionTypeを指定して、その内容を解凍することができます。
圧縮タイプを指定し、その内容がそのタイプで圧縮されていなければ、hou.OperationFailedを引き起こします。
def saveSectionToFile(section, file_name): '''sectionを指定して、それをファイルに保存します。''' section_file = file(file_name, "w") section_file.write(section.contents()) section_file.close()
binaryContents(compressionType=hou.compressionType.NoCompression)
→ bytes
Only available in Python 3.
hou.HDASection.contentsと同様ですが、代わりにbytes
オブジェクトを返します。
バイナリデータが含まれたセクションに適しています。
def saveBinarySectionToFile(section, file_name): '''sectionを指定して、それをファイルに保存します。''' section_file = file(file_name, "wb") section_file.write(section.binaryContents()) section_file.close()
size()
→ int
このセクションの内容のバイト数を返します。このメソッドはlen(self.contents())
のショートカットです。
setContents(contents, compressionType=hou.compressionType.NoCompression)
このセクションの内容を、指定した文字列に設定します。セクションには、bgeoファイル、画像などのバイナリ情報を含めることができます。
オプションで圧縮タイプhou.compressionTypeを指定して、その内容を圧縮することができます。 その内容を解凍して読み込む時は、それと同じ圧縮タイプを指定しなければなりません。
Python3では、contents
にはプレーンテキストデータ用のstr
オブジェクト、バイナリデータ用のbytes
オブジェクトを指定することができます。
ディスク上のファイルからセクションを作成する方法のサンプルは、hou.HDADefinition.addSectionを参照してください。
destroy()
HDA定義からこのセクションを削除します。
hou.HDADefinition.removeSectionを使用してセクションを削除することもできます。このメソッドはself.definition().removeSection(self.name())
と等価です。
明示的に追加したセクションだけを削除してください。 デジタルアセット定義の内容を保存するためにHoudiniが使用している特別なセクションを削除しないでください。 そうしないと、Houdiniはエラーや変な副作用を生成します。
セクションを追加するには、hou.HDADefinition.addSectionを使用します。
modificationTime()
→ int
セクションが最後に修正された時刻を返します。この時刻は、time.time()
で返されるようなPOSIXタイムスタンプとして返されます。
>>> hou.nodeType(hou.cop2NodeTypeCategory(), "colorwheel").definition() <hou.HDADefinition of Cop2 colorwheel in /opt/hfs9.5/houdini/hda/OPlibCop2.hda> >>> definition = hou.nodeType(hou.cop2NodeTypeCategory(), "colorwheel").definition() >>> definition.sections().keys() ['VflCode', 'DialogScript', 'VexCode'] >>> section = definition.sections()['VflCode'] >>> section.modificationTime() 1177535169 >>> import datetime, time >>> datetime.datetime.fromtimestamp(section.modificationTime()) datetime.datetime(2007, 4, 25, 17, 6, 9) >>> time.ctime(section.modificationTime()) 'Wed Apr 25 17:06:09 2007'