🚧 solving hda publishing

This commit is contained in:
Ondrej Samohel 2022-09-09 10:39:30 +02:00
parent a1377a87d6
commit dade064eb3
No known key found for this signature in database
GPG key ID: 02376E18990A97C6
2 changed files with 21 additions and 34 deletions

View file

@ -1,28 +1,22 @@
# -*- coding: utf-8 -*-
import hou
"""Creator plugin for creating publishable Houdini Digital Assets."""
from openpype.client import (
get_asset_by_name,
get_subsets,
)
from openpype.pipeline import legacy_io
from openpype.hosts.houdini.api import lib
from openpype.hosts.houdini.api import plugin
from openpype.hosts.houdini.api import (lib, plugin)
class CreateHDA(plugin.Creator):
class CreateHDA(plugin.HoudiniCreator):
"""Publish Houdini Digital Asset file."""
name = "hda"
identifier = "hda"
label = "Houdini Digital Asset (Hda)"
family = "hda"
icon = "gears"
maintain_selection = False
def __init__(self, *args, **kwargs):
super(CreateHDA, self).__init__(*args, **kwargs)
self.data.pop("active", None)
def _check_existing(self, subset_name):
# type: (str) -> bool
"""Check if existing subset name versions already exists."""
@ -40,28 +34,34 @@ class CreateHDA(plugin.Creator):
}
return subset_name.lower() in existing_subset_names_low
def _process(self, instance):
subset_name = self.data["subset"]
# get selected nodes
out = hou.node("/obj")
self.nodes = hou.selectedNodes()
def create(self, subset_name, instance_data, pre_create_data):
import hou
if (self.options or {}).get("useSelection") and self.nodes:
# if we have `use selection` enabled and we have some
instance_data.pop("active", None)
instance = super(CreateHDA, self).create(
subset_name,
instance_data,
pre_create_data) # type: CreatedInstance
instance_node = hou.node(instance.get("instance_node"))
out = hou.node("/obj")
if self._nodes:
# if we have `use selection` enabled, and we have some
# selected nodes ...
subnet = out.collapseIntoSubnet(
self.nodes,
subnet_name="{}_subnet".format(self.name))
subnet_name="{}_subnet".format(subset_name))
subnet.moveToGoodPosition()
to_hda = subnet
else:
to_hda = out.createNode(
"subnet", node_name="{}_subnet".format(self.name))
"subnet", node_name="{}_subnet".format(subset_name))
if not to_hda.type().definition():
# if node type has not its definition, it is not user
# created hda. We test if hda can be created from the node.
if not to_hda.canCreateDigitalAsset():
raise Exception(
raise plugin.OpenPypeCreatorError(
"cannot create hda from node {}".format(to_hda))
hda_node = to_hda.createDigitalAsset(
@ -78,17 +78,4 @@ class CreateHDA(plugin.Creator):
hda_node.setName(subset_name)
# delete node created by Avalon in /out
# this needs to be addressed in future Houdini workflow refactor.
hou.node("/out/{}".format(subset_name)).destroy()
try:
lib.imprint(hda_node, self.data)
except hou.OperationFailed:
raise plugin.OpenPypeCreatorError(
("Cannot set metadata on asset. Might be that it already is "
"OpenPype asset.")
)
return hda_node

View file

@ -16,7 +16,7 @@ class ExtractHDA(openpype.api.Extractor):
def process(self, instance):
self.log.info(pformat(instance.data))
hda_node = instance.data["members"][0]
hda_node = instance.data.get("members")[0]
hda_def = hda_node.type().definition()
hda_options = hda_def.options()
hda_options.setSaveInitialParmsAndContents(True)