Skip to content

Commit

Permalink
Merge pull request #644 from ynput/bugfix/AY-5777_HDA-products-differ…
Browse files Browse the repository at this point in the history
…ent-folder-paths-same-product-name

Houdini: Publish different HDA products from different folder paths with the same product name
  • Loading branch information
antirotor authored Jun 14, 2024
2 parents b7afaea + dcdf008 commit 8e96c86
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
"""Creator plugin for creating publishable Houdini Digital Assets."""
import ayon_api

from ayon_core.pipeline import CreatorError
from ayon_core.pipeline import (
CreatorError,
get_current_project_name
)
from ayon_houdini.api import plugin
import hou

Expand Down Expand Up @@ -56,8 +59,18 @@ def create_instance_node(
raise CreatorError(
"cannot create hda from node {}".format(to_hda))

# Pick a unique type name for HDA product per folder path per project.
type_name = (
"{project_name}{folder_path}_{node_name}".format(
project_name=get_current_project_name(),
folder_path=folder_path.replace("/","_"),
node_name=node_name
)
)

hda_node = to_hda.createDigitalAsset(
name=node_name,
name=type_name,
description=node_name,
hda_file_name="$HIP/{}.hda".format(node_name)
)
hda_node.layoutChildren()
Expand Down
15 changes: 10 additions & 5 deletions server_addon/houdini/client/ayon_houdini/plugins/load/load_hda.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import os
from ayon_core.pipeline import get_representation_path
from ayon_core.pipeline.load import LoadError
from ayon_houdini.api import (
pipeline,
plugin
Expand Down Expand Up @@ -28,14 +29,18 @@ def load(self, context, name=None, namespace=None, data=None):
# Get the root node
obj = hou.node("/obj")

# Create a unique name
counter = 1
namespace = namespace or context["folder"]["name"]
formatted = "{}_{}".format(namespace, name) if namespace else name
node_name = "{0}_{1:03d}".format(formatted, counter)
node_name = "{}_{}".format(namespace, name) if namespace else name

hou.hda.installFile(file_path)
hda_node = obj.createNode(name, node_name)

# Get the type name from the HDA definition.
hda_defs = hou.hda.definitionsInFile(file_path)
if not hda_defs:
raise LoadError(f"No HDA definitions found in file: {file_path}")

type_name = hda_defs[0].nodeTypeName()
hda_node = obj.createNode(type_name, node_name)

self[:] = [hda_node]

Expand Down

0 comments on commit 8e96c86

Please sign in to comment.