Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revisionLast revisionBoth sides next revision | ||
graphic:python:houdini [2023/01/26 09:02] – [HDA Operation (Houdini Digital Asset)] ying | graphic:python:houdini [2023/05/31 09:08] – [HDA Operation (Houdini Digital Asset)] ying | ||
---|---|---|---|
Line 116: | Line 116: | ||
#hda related files | #hda related files | ||
assettools.py | assettools.py | ||
+ | C:\Program Files\Side Effects Software\Houdini X\houdini\python3.7libs\assettools.py | ||
</ | </ | ||
* node > definition > all info related | * node > definition > all info related | ||
Line 171: | Line 172: | ||
# remove action | # remove action | ||
# os.remove(cur_path) | # os.remove(cur_path) | ||
+ | </ | ||
+ | |||
+ | How create new ... HDA works? | ||
+ | |||
+ | - menu calls <code python> | ||
+ | import hou | ||
+ | import assettools | ||
+ | |||
+ | node = kwargs[" | ||
+ | assettools.createNewVHDAFromSubnet(node) | ||
+ | </ | ||
+ | - assettools.py has function createNewVHDAFromSubnet(), | ||
+ | - dialog VHDASaveAsDialog() class show up, the Create button do the node publish | ||
+ | - setMembersFromUI | ||
+ | - namespace_author, | ||
+ | - library_file = self.getCorrectLibraryFile() | ||
+ | - tablabel = constructVHDALabel(self.tablabel, | ||
+ | - library_file_path = os.path.join(hou.text.expandString(self.library_dir), | ||
+ | - vhda_typename = constructVHDATypeName(namespace_author, | ||
+ | - continue: alert deals with lib path file contains multi- definition | ||
+ | - new asset <code python> | ||
+ | createVHDA(node, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | - version up case (a versioned copy of an existing): <code python> | ||
+ | copyToVHDAFile(node, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | - details of VHDA function (from assettolls.py) <code python> | ||
+ | def createVHDA(node, | ||
+ | hda_name | ||
+ | hda_label = label | ||
+ | hda_filename = savefile if savefile else constructVHDAFileName(namespace_author, | ||
+ | hda_savedir = savedir | ||
+ | hda_filepath = os.path.join(hda_savedir, | ||
+ | |||
+ | max_num_inputs = 0 | ||
+ | |||
+ | # If there are inputs to the node, find the largest index of the input connections and use it as the max_num_inputs | ||
+ | # This will preserve the inputs at the right indexes | ||
+ | if len(node.inputs()) > 0: | ||
+ | for connection in node.inputConnections(): | ||
+ | max_num_inputs = max(max_num_inputs, | ||
+ | max_num_inputs = max_num_inputs + 1 | ||
+ | |||
+ | vhda_node = node.createDigitalAsset( | ||
+ | name = hda_name, | ||
+ | hda_file_name = hda_filepath, | ||
+ | description = hda_label, | ||
+ | min_num_inputs = 0, | ||
+ | max_num_inputs = max_num_inputs, | ||
+ | save_as_embedded = hda_savedir == " | ||
+ | ignore_external_references=True, | ||
+ | ) | ||
+ | |||
+ | vhda_node.setName(name, | ||
+ | vhda_def = vhda_node.type().definition() | ||
+ | |||
+ | # Update and save new HDA | ||
+ | vhda_options = vhda_def.options() | ||
+ | vhda_options.setSaveInitialParmsAndContents(True) | ||
+ | # | ||
+ | |||
+ | vhda_def.setOptions(vhda_options) | ||
+ | ''' | ||
+ | setVHDASection(vhda_def, | ||
+ | False if namespace_branch == "" | ||
+ | ''' | ||
+ | setToolSubmenu(vhda_def, | ||
+ | |||
+ | vhda_def.save(hda_filepath, | ||
+ | hou.hda.installFile(hda_filepath) | ||
+ | hou.hda.reloadAllFiles(True) | ||
+ | | ||
+ | </ | ||
+ | - copyToVHDAFile <code python> | ||
+ | def copyToVHDAFile(node, | ||
+ | hda_name | ||
+ | hda_label = label | ||
+ | hda_filename = savefile if savefile else constructVHDAFileName(namespace_author, | ||
+ | hda_savedir = savedir | ||
+ | hda_filepath = os.path.join(hda_savedir, | ||
+ | tmp_filepath = os.path.join(hou.text.expandString(" | ||
+ | |||
+ | # Update and save new HDA | ||
+ | vhda_def = node.type().definition() | ||
+ | # vhda_options = vhda_def.options() | ||
+ | # vhda_options.setSaveInitialParmsAndContents(True) | ||
+ | # vhda_options.setSaveSpareParms(True) ####### TO-DO | ||
+ | |||
+ | vhda_def.save(tmp_filepath, | ||
+ | |||
+ | created_definition = hou.hda.definitionsInFile(tmp_filepath)[0] | ||
+ | # Sets the tabmenu location only if it differs from the original | ||
+ | if tabmenu: | ||
+ | setToolSubmenu(created_definition, | ||
+ | |||
+ | created_definition.copyToHDAFile(hda_filepath, | ||
+ | |||
+ | os.remove(tmp_filepath) | ||
+ | hou.hda.installFile(hda_filepath) | ||
+ | hou.hda.reloadAllFiles(True) | ||
+ | node.changeNodeType(hda_name) | ||
</ | </ | ||
====== Tutorial ====== | ====== Tutorial ====== |