このクラスは、hou.ParmTemplateオブジェクトのグループを格納します。 空っぽのグループを作成したり、parmテンプレートのシーケンスからグループを作成したり、 デジタルアセットのパラメータ定義からグループを作成したり、特定のノードの現行パラメータレイアウトから グループを作成することができます。 同様に、アセットのパラメータまたはノードのパラメータインターフェースをパラメータグループの内容に設定することができます。
hou.HDADefinition.parmTemplateGroupを使ってアセットのparmテンプレートを取得し、 hou.HDADefinition.setParmTemplateGroupを使ってそれらのテンプレートを設定することができます。 同様に、hou.OpNode.parmTemplateGroupを使って個々のノードのパラメータ定義を取得し、 hou.OpNode.setParmTemplateGroupを使ってそのパラメータ定義を設定することができます。 ノードのパラメータインターフェースを設定した時、ノードのタイプのparmのセット内にないparmがSpareパラメータとして追加されます。 同様に、ノードのタイプ内のパラメータがグループ内に存在しなければ、それらのパラメータが自動的に最後に追加されて不可視に設定されます。 また、それらのパラメータが存在しても、そのタイプ、ラベル、ルック、命名スキームなどが異なれば、 Houdiniは、可視設定以外のそれらの留保されたパラメータにあなたが加えようとしている変更すべてを破棄します。
ParmTemplateGroupsを使用する時は、フォルダparmテンプレートとフォルダセットparmテンプレートの違いを理解するのが重要です。 フォルダセットは、直接hou.ParmTupleオブジェクトに相当します。 つまり、フォルダセット毎に1個のparmタプル(1個のparmを含んだ)があり、そのparmの値を変更することで、どのフォルダを表示させるのか変更します。 一方で、個々のフォルダは直接hou.ParmTupleオブジェクトに相当しませんが、それらのオブジェクトがHoudiniのType Propertiesで使用され、 個々のフォルダを追加して、どのパラメータをフォルダに収めるのか制御し易いです。 hou.FolderSetParmTemplateとは違い、hou.FolderParmTemplateは、そのフォルダ内にparmテンプレートのセットを格納します。 ノードまたは定義のパラメータをparmテンプレートグループの内容に設定する時、そのフォルダセットが決定され、そのセットに対するparmタプル名は、そのセットの1番目のフォルダの名前になります。 そのセット内の他のフォルダの名前は使用されません。
ParmTemplateGroupsは、フォルダセットparmテンプレートの代わりにフォルダparmテンプレートを使用します。 FolderSetParmTemplateをグループに追加しようとすると、hou.OperationFailedを引き起こします。 一方で、parmタプルにそのparmテンプレートを要求すると、フォルダセットが返されますが、決してフォルダを返しません。 以前では、フォルダパラメータテンプレートとparmテンプレートグループがなかったので、フォルダを追加するには hou.HDADefinition.addParmFolderとhou.OpNode.addSpareParmFolderのような特殊なメソッドを使用するしかありませんでした。 今ではそれらがあるので、フォルダparmテンプレートをhou.HDADefinition.addParmTupleとhou.OpNode.addSpareParmTupleに 渡すことでフォルダを作成することができます。 とはいえ、ParmTemplateGroupsを使用すると、それらのメソッドのコールよりも優先度が高いです。
フォルダparmテンプレートは、Type Propertiesダイアログが表現するようなmultiparmブロックの表現にも使用されます。 フォルダparmテンプレートのhou.folderTypeは、フォルダまたはmultiparmブロックのどれかを決定します。 パラメータインスタンスに直接相当しないフォルダparmテンプレートとは違い、multiparm parmテンプレートは、整数パラメータに相当し、これはmultiparmのインスタンスの番号を制御します。
Note
ParmTemplateGroupsは、parmテンプレートのそれら独自のコピーを格納します。 グループ内のparmテンプレートを求めると、parmテンプレートのコピーが返されます。 それらのコピーを修正しても、そのグループの内容を変更しません。 例えば、グループ内のパラメータを変更するには、単にfindをコールして、それが返したhou.ParmTemplateを修正する
だけではできません。
メソッド ¶
__init__(parm_templates=())
オプションのparmテンプレートのシーケンスから新しくグループを作成します。 Noneを渡すと、新しいグループが空っぽになります。
グループとフォルダparmテンプレートはどちらも含有parmテンプレートのシーケンスを使用して構築することができるので、 単一エクスプレッションを使用して、フォルダ内にパラメータを持ったparmテンプレートグループを構築することが可能です。 以下のサンプルは、2つのフォルダを持ったグループで、且つそれらのフォルダそれぞれにパラメータを持ったグループを作成します:
>>> group = hou.ParmTemplateGroup(( ... hou.FolderParmTemplate("folder", "Physical", ( ... hou.FloatParmTemplate("mass", "Mass", 1), ... hou.FloatParmTemplate("density", "Density", 1), ... )), ... hou.FolderParmTemplate("folder", "Divisions", ( ... hou.FloatParmTemplate("divisions", "Divisions", 3), ... hou.ToggleParmTemplate("laser", "Laser Scan", default_value=True), ... )), ... )) >>> group.entries() (<hou.FolderParmTemplate name='folder' label='Physical' folder_style=Tabs>, <hou.FolderParmTemplate name= 'folder' label='Divisions' folder_style=Tabs>) >>> group.entries()[0].parmTemplates()[0] <hou.FloatParmTemplate name='mass' label='Mass' length=1 naming_scheme=XYZW look=Regular default_value=(0,)> >>> group.entriesWithoutFolders() (<hou.FloatParmTemplate name='mass' label='Mass' length=1 naming_scheme=XYZW look=Regular default_value=(0,)>, <hou.FloatParmTemplate name='density' label='Density' length=1 naming_scheme=XYZW look=Regular default_value=(0,)>, <hou.FloatParmTemplate name='divisions' label='Divisions' length=3 naming_scheme=XYZW look=Regular default_value=(0,0,0)>, <hou.ToggleParmTemplate name='laser' label='Laser Scan' default_value=True>)
シーケンス内のparmテンプレートのどれかがhou.FolderSetParmTemplateオブジェクトであれば、hou.OperationFailedを引き起こします。
find(name)
→ hou.ParmTemplate or None
このグループ内で、指定した名前に一致したparmテンプレートを検索します。
parmテンプレートのコピーを返します。一致したものが見つからなければNone
を返します。
この関数は、このグループに格納されたparmテンプレートのコピーを返します。
コピーを修正しても、このグループ内のパラメータは影響を受けません。
以下のサンプルは、find
とreplace
のメソッドを使用して、グループ内の"pos"
parmテンプレートを修正する方法を説明しています:
>>> parm_template = group.find("pos") >>> parm_template.setLabel("Position") >>> group.replace("pos", parm_template)
既存パラメータからグループを作成した場合、同じフォルダセット内のフォルダparmテンプレートは同じ名前を共有するので、 このメソッドを使用してフォルダを検索すると、フォルダセット内の1番目のフォルダを返すことができます。 代わりにフォルダラベルでフォルダを検索するには、findFolderを使用してください。
一般的には、そのグループは、同じ名前の2つのパラメータの追加を回避しません。
この場合、この名前のパラメータを検索すると1番目のパラメータを返します。
このグループをノードまたはアセット定義のparmに設定すると、例外が起きる度に重複したパラメータの名前が変更されます。
詳細は、hou.HDADefinition.setParmTemplateGroupのrename_conflicting_parms
パラメータを参照してください。
findIndices(name_or_parm_template)
→ tuple of int
このグループ内でparmテンプレートを検索して、そのグループ内のparmのインデックスに相当する整数のタプルを返します。 一致したものが見つからなければ、空っぽのタプルを返します。
name_or_parm_template
一致検索をする時に比較するparmテンプレートの名前または他のhou.ParmTemplateオブジェクトのどれか。
parmテンプレートが見つかり、それがどのフォルダの中に含まれていない場合は、その結果のタプルは、parmテンプレートのインデックスによる単一整数を含みます。 それ以外の場合は、1番目のエントリーが、そのグループ内のフォルダのインデックスになり、最後のインデックスがフォルダ内のparmテンプレートのインデックスになります。
findIndicesForFolderも参照してください。
findFolder(label_or_labels)
→ hou.FolderParmTemplate or None
このグループ内で、指定したラベルのフォルダparmテンプレートを検索します。
hou.FolderParmTemplateのコピーを返します。フォルダが見つからなければNone
を返します。
label_or_labels
フォルダのラベルを含んだ文字列、またはフォルダとフォルダのラベルも含んだラベルを含んだ文字列のタプルのどれか。
フォルダparmテンプレートのラベルは、パラメータダイアログのインターフェースで表示されるものです。 フォルダparmテンプレートの名前は、そのフォルダがフォルダセット内の1番目のフォルダの場合にフォルダセットのparmタプルの名前を決定するために使用されます。 詳細は、このクラスのドキュメントを参照してください。
findIndicesForFolder(label_or_labels)
→ tuple of int
このグループ内で、指定したラベルのフォルダparmテンプレートを検索します。 一致したものが見つからなければ、空っぽのタプルを返します。
パラメータに関しては、findFolderを、戻り値に関しては、findIndicesを参照してください。
このメソッドはparmテンプレートを受け入れません。 とはいえ、フォルダparmテンプレートを持っていて、そのインデックスを検索したい場合は、単にフォルダparmテンプレートに対して findIndicesをコールすればいいだけです。
entryAtIndices(indices)
→ hou.ParmTemplate
整数インデックスのシーケンスを指定すると、その位置でのhou.ParmTemplateオブジェクトのコピーが返されます。 このインデックスは、findIndicesで返される形式です。
hou.ParmTemplate.findとhou.ParmTemplate.entriesのメソッドのように、 このメソッドは、このグループ内に格納されたparmテンプレートのコピーを返します。 コピーされたparmテンプレートを修正しても、このグループの内容は影響を受けません。 parmテンプレートを変更するには、replaceを使用してください。
インデックスシーケンスが空っぽの時やインデックスが無効な場合は、hou.OperationFailedを引き起こします。
このメソッドは以下のように実装されています:
def entryAtIndices(self, indices): if len(indices) == 0: raise hou.OperationFailed("Invalid indices") parm_template = self.entries()[indices[0]] # 複数のインデックスがある場合を考えて、フォルダparmテンプレートを検索しました。 for index in indices[1:]: parm_template = parm_template.parmTemplates()[index] return parm_template
containingFolder(name_or_parm_template)
→ hou.FolderParmTemplate
parmテンプレートを含んだこのグループ内のhou.FolderParmTemplateのコピーを返します。
name_or_parm_template
一致検索する時に比較するparmテンプレートの名前または他のhou.ParmTemplateオブジェクトのどれか。
パラメータがグループ内になかったり、フォルダ内になかった場合は、hou.OperationFailedを引き起こします。
containingFolderIndices(name_or_parm_template_or_indices)
→ tuple of int
指定したparmテンプレートを含んだこのグループ内のフォルダのインデックスを返します。 一致したものが見つからなければ空っぽのタプルを返します。
パラメータに関してはreplace、戻り値に関してはfindIndicesを参照してください。
パラメータがグループ内になかったり、フォルダになかった場合は、hou.OperationFailedを引き起こします。
entries()
→ tuple of hou.ParmTemplate
このグループ内のparmテンプレートのコピーを含んだタプルを返します。
フォルダはhou.FolderParmTemplateオブジェクトとして返され、各フォルダparmテンプレートは、そこにparmテンプレートを含みます。 フォルダ内のエレメントにアクセスするには、hou.FolderParmTemplate.parmTemplatesを使用してください。
以下のサンプルは、allParmTemplates
という名前の関数を作成します。
この関数は、グループ内のすべてのparmテンプレートに対して、フォルダを含んだparmテンプレートの単一シーケンスを返します:
def allParmTemplates(group_or_folder): for parm_template in group_or_folder.parmTemplates(): yield parm_template # multiparmブロック内のparmテンプレートを返したくないので、 # そのフォルダparmテンプレートが実際にフォルダ用なのか検証します。 if (parm_template.type() == hou.parmTemplateType.Folder and parm_template.isActualFolder()): for sub_parm_template in allParmTemplates(parm_template): yield sub_parm_template
parmTemplatesメソッドも参照してください。
parmTemplates()
→ tuple of hou.ParmTemplate
このメソッドは単にentriesメソッドのエイリアスです。
hou.FolderParmTemplateクラスにもparmTemplates
メソッドがあるので、これはフォルダ内のネスト化されたアイテムに対してparmテンプレートグループを検索し易くしています。
以下のサンプルは、指定したインデックスからフォルダパラメータのラベルを検索する方法を説明しています:
def folderLabels(parm_template_group, indices): container = parm_template_group result = [] for index in indices: container = container.parmTemplates()[index] result.append(container.label()) return result
entriesWithoutFolders()
→ tuple of hou.ParmTemplate
このグループ内の非フォルダparmテンプレートすべてを含んだタプルを返します。 出力は、そのグループ内の平坦化されたparmテンプレートのセットで、フォルダ内に非フォルダパラメータを含みます。
entriesのように、このメソッドは、このグループ内のparmテンプレートのコピーを返します。
この関数は、multiparmブロック内のエントリーに対してparmテンプレートを返しません。
サンプルの関数allParmTemplates
に関しては、entriesも参照してください。
replace(name_or_parm_template_or_indices, parm_template)
このグループ内のparmテンプレートを他のparmテンプレートに置換します。
name_or_parm_template_or_indices
置換されるparmテンプレートの名前、parmテンプレートのコピー、parmテンプレートと含有フォルダを識別する整数インデックスのタプルのどれか。
このメソッドは、このグループの内容を変更します。これはグループ内のparmテンプレートのコピーを保存するので、 渡されたparmテンプレートへの後の変更は、そのグループに影響を与えません。
このメソッドの使い方のシンプルなサンプルは、findメソッドを参照してください。
予約済みパラメータ(例えば、オブジェクトレベルのデジタルアセットの移動パラメータ)に対するparmテンプレートは、parmテンプレートグループ内で置換することができますが、 このグループをノードやアセット定義に保存した時、可視性と連結の設定以外の予約済みパラメータのすべての特徴がデフォルトに戻ります。
parmテンプレートが存在しなかった場合は、hou.OperationFailedを引き起こします。
insertBefore(name_or_parm_template_or_indices, parm_template)
このグループ内にparmテンプレートを既存のparmテンプレートの前に挿入します。 新しいparmテンプレートは、既存のparmテンプレートと同じフォルダに入ります。
name/parm template/indicesのパラメータに関しては、replaceを参照してください。
appendToFolderを使用すれば、エントリーを空っぽのフォルダに追加することができます。 appendを使用すれば、エントリーを空っぽのparmテンプレートグループに追加することができます。
insertAfter(name_or_parm_template_or_indices, parm_template)
このグループ内にparmテンプレートを既存のparmテンプレートの後に挿入します。 新しいparmテンプレートは、既存のparmテンプレートと同じフォルダに入ります。
name/ parm template/indicesのパラメータに関しては、replaceを参照してください。
appendToFolderを使用すれば、エントリーを空っぽのフォルダに追加することができます。 appendを使用すれば、エントリーを空っぽのparmテンプレートグループに追加することができます。
append(parm_template)
parmテンプレートを既存のparmテンプレートすべての後にフォルダの外へ追加します。
appendToFolderも参照してください。
addParmTemplate(parm_template)
このメソッドは、単にappendメソッドのエイリアスです。
hou.FolderParmTemplateにはaddParmTemplateメソッドがあるので、 このメソッドは、parmテンプレートグループとhou.FolderParmTemplateオブジェクトを均一に扱い易くしています。
appendToFolder(label_or_labels_or_parm_template_or_indices, parm_template)
parmテンプレートを既存フォルダの一番下に追加します。
単にフォルダparmテンプレートを検索して、それに対してhou.FolderParmTemplate.addParmTemplateをコールするだけでは、フォルダを求めてもdeep copyが返されるので、 フォルダに追加することができません。 コピーされたフォルダ内のparmテンプレートは、このグループ内のparmテンプレートと別になり、 そのフォルダを修正しても、そのグループは影響を受けません。 以下のサンプルを見てください:
>>> folder = group.findFolder("Transform") # "folder"が独自のparmのコピーを持ちます。 >>> folder.addParmTemplate(new_parm_template) # "folder"のparmテンプレートを更新しても、そのグループのparmテンプレートは変わりません。 >>> group.appendToFolder(folder, new_parm_template) # グループが修正されました。"folder"の内容は変わりません。
remove(name_or_parm_template_or_indices)
グループからparmテンプレートを削除します。フォルダを削除すると、そのフォルダ内のparmテンプレートもすべて削除されます。
name/parm template/indicesのパラメータに関しては、replaceを参照してください。
parmテンプレートが見つからなかった場合は、hou.OperationFailedを引き起こします。
hide(name_or_parm_template_or_indices, on)
パラメータを不可視にすることで、パラメータを非表示にします。それでもパラメータはそのグループ内に存在しますが、パラメータダイアログでは表示されません。
name/parm template/indicesのパラメータに関しては、replaceを参照してください。
このメソッドは以下のように実装することができます:
def hide(self, name_or_parm_template_or_indices, on): parm_template = self.find(name_or_parm_template_or_indices) parm_template.hide(on) self.replace(name_or_parm_template_or_indices, parm_template)
hideFolderとhou.ParmTemplate.hideも参照してください。
hideFolder(label_or_labels, on)
フォルダと、その中のパラメータすべてを非表示にします。
単一フォルダ名を含んだ文字列または文字列シーケンスを渡して、ネスト化したフォルダを識別することができます。
例えば、("Render", "Dicing")
シーケンスは、Render
フォルダのDicing
フォルダを識別します。
on
がTrue
ならフォルダが非表示に、False
なら表示されます。
以下のサンプルは、GeometryオブジェクトのTransformパラメータを非表示にします:
>>> group = geo_node.parmTemplateGroup() >>> group.hideFolder("Transform", True) >>> geo_node.setParmTemplateGroup(group)
以下のサンプルは、GeometryオブジェクトのRenderフォルダのDicingフォルダを非表示にします:
>>> group = geo_node.parmTemplateGroup() >>> group.hideFolder(("Render", "Dicing"), True) >>> geo_node.setParmTemplateGroup(group)
このメソッドは以下のように実装されています:
def hideFolder(self, label_or_labels, on): self.hide(self.findFolder(label_or_labels), on)
hideも参照してください。
isHidden(name_or_parm_template_or_indices)
→ bool
指定したパラメータ自体が非表示になっているのか、またはそのパラメータが非表示フォルダ内に配置されているのかどうか返します。
name/parm template/indicesのパラメータに関しては、replaceを参照してください。
パラメータが非表示フォルダ内にあって、そのパラメータがhiddenとしてマークされていない場合は、parmテンプレートに対してhou.ParmTemplate.isHidden
をコールするとFalse
が返されます。一方で、このメソッドはTrue
を返します。
isFolderHidden(label_or_labels)
→ bool
フォルダが非表示なのかそれとも含有フォルダのどれかが非表示なのかを返します。
フォルダが非表示フォルダ内にあって、そのフォルダがhiddenとしてマークされていない場合は、フォルダparmテンプレートに対してhou.ParmTemplate.isHidden
をコールするとFalse
が返されます。一方で、このメソッドはTrue
を返します。
単一フォルダ名を含んだ文字列または文字列シーケンスを渡して、ネスト化したフォルダを識別することができます。
例えば、("Render", "Dicing")
シーケンスは、Render
フォルダのDicing
フォルダを識別します。
on
がTrue
ならフォルダが非表示に、False
なら表示されます。
clear()
このグループからparmテンプレートすべてを削除します。
asDialogScript(rename_conflicting_parms=False, full_info=False, script_name=None, script_label=None, script_tags={})
→ str
このparmテンプレートグループに相当するダイアログスクリプトファイルの内容を含んだ文字列を返します。
Houdiniは、(デジタルアセットのDialogScript
セクション内で)デジタルアセット定義を保存した時や、ノードのパラメータレイアウトを保存した時に、
この形式でパラメータ定義を保存します。
予約済みパラメータのデフォルトの挙動では、そのパラメータの定義の変更に耐えられるように予約済みパラメータに対してbaseparm
トークンを出力します。
この挙動を変更するには、full_info=True
を使用します。
script_name
、script_label
、script_tags
のパラメータには、ダイアログスクリプトヘッダーにそれぞれname
、label
、parmtag
オプションとして保存された追加データを指定します。
script_tags
辞書では、文字列を文字列にマッピングします。
各エントリーをダイアログスクリプトに別々のparmtag
として保存します。
これらの追加ヘッダーエレメントの解釈は、このダイアログスクリプトが使用されている場所によって異なります。
このメソッドを使ってHDAのパラメータ定義を用意した場合、これらのエレメントが無視されます。
しかし、ダイアログスクリプトをレンダープロパティのソースとして使用した場合、これらの追加エレメントは、
Edit Parameter Interfaceウィンドウ内のプロパティをフィルタリングしてカテゴリ化する際に使用されます。
setToDialogScript(dialog_script)
指定したダイアログスクリプト文字列で定義されたパラメータに一致するように、このグループの内容を設定します。
ダイアログスクリプトの内容にエラーがあった場合は、hou.OperationFailedを引き起こします。
asCode(function_name=None, variable_name=None)
→ str
このグループを再生成するPythonコードを返します。
function_name
None
でない場合、返されるコードは、Python関数を作成します。
variable_name
新しく作成されるparmテンプレートグループに割り当てられる変数の名前。
sourceNode()
→ hou.OpNode or None
パラメータテンプレートグループの生成元のノードを返します。 そのグループがノードから生成されたものでなかった場合は、Noneを返します。
ソースノードが破棄されていた場合は、hou.ObjectWasDeletedを引き起こします。
sourceNodeType()
→ hou.NodeType or None
パラメータテンプレートグループの生成元のノードタイプを返します。 そのグループがノードタイプから生成されたものでなかった場合は、Noneを返します。
ソースノードタイプが破棄されていた場合は、hou.ObjectWasDeletedを引き起こします。
name()
→ str
setName
コールを介して、または、setToDialogScript
メソッドを使用したダイアログスクリプトから読み込まれたこのオブジェクトに記録されている内部名を返します。
setName(name)
このパラメータグループの内部名を設定します。
script_name
パラメータがデフォルト値のNone
のままである場合、この情報はasDialogScript
の出力に書き出されます。
label()
→ str
setLabel
コールを介して、または、setToDialogScript
メソッドを使用したダイアログスクリプトから読み込まれたこのオブジェクトに記録されているラベルを返します。
setLabel(label)
このパラメータグループのラベルを設定します。
script_label
パラメータがデフォルト値のNone
のままである場合、この情報はasDialogScript
の出力に書き出されます。