Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Houdini: move houdini client code - Add Settings Category #536

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 44 additions & 1 deletion server_addon/houdini/client/ayon_houdini/api/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,25 @@
import six
import hou

import pyblish.api
from ayon_core.pipeline import (
CreatorError,
LegacyCreator,
Creator as NewCreator,
CreatedInstance,
AYON_INSTANCE_ID,
AVALON_INSTANCE_ID,
load,
publish
)
from ayon_core.lib import BoolDef

from .lib import imprint, read, lsattr, add_self_publish_button


SETTINGS_CATEGORY = "houdini"


class Creator(LegacyCreator):
"""Creator plugin to create instances in Houdini

Expand Down Expand Up @@ -169,7 +176,7 @@ class HoudiniCreator(NewCreator, HoudiniCreatorBase):
settings_name = None
add_publish_button = False

settings_category = "houdini"
settings_category = SETTINGS_CATEGORY

def create(self, product_name, instance_data, pre_create_data):
try:
Expand Down Expand Up @@ -349,3 +356,39 @@ def apply_settings(self, project_settings):

for key, value in settings.items():
setattr(self, key, value)


class HoudiniLoader(load.LoaderPlugin):
"""Base class for Houdini load plugins."""

hosts = ["houdini"]
settings_category = SETTINGS_CATEGORY


class HoudiniInstancePlugin(pyblish.api.InstancePlugin):
"""Base class for Houdini instance publish plugins."""

hosts = ["houdini"]
settings_category = SETTINGS_CATEGORY


class HoudiniContextPlugin(pyblish.api.ContextPlugin):
"""Base class for Houdini context publish plugins."""

hosts = ["houdini"]
settings_category = SETTINGS_CATEGORY


class HoudiniExtractorPlugin(publish.Extractor):
"""Base class for Houdini extract plugins.

Note:
The `HoudiniExtractorPlugin` is a subclass of `publish.Extractor`,
which in turn is a subclass of `pyblish.api.InstancePlugin`.
Should there be a requirement to create an extractor that operates
as a context plugin, it would be beneficial to incorporate
the functionalities present in `publish.Extractor`.
"""

hosts = ["houdini"]
settings_category = SETTINGS_CATEGORY
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

"""

from ayon_core.pipeline import load
from ayon_houdini.api import plugin


class SetFrameRangeLoader(load.LoaderPlugin):
class SetFrameRangeLoader(plugin.HoudiniLoader):
"""Set frame range excluding pre- and post-handles"""

product_types = {
Expand Down Expand Up @@ -42,7 +42,7 @@ def load(self, context, name, namespace, data):
hou.playbar.setPlaybackRange(start, end)


class SetFrameRangeWithHandlesLoader(load.LoaderPlugin):
class SetFrameRangeWithHandlesLoader(plugin.HoudiniLoader):
"""Set frame range including pre- and post-handles"""

product_types = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import os
from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_houdini.api import pipeline


class AbcLoader(load.LoaderPlugin):
class AbcLoader(plugin.HoudiniLoader):
"""Load Alembic"""

product_types = {"model", "animation", "pointcache", "gpuCache"}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@

import os
from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_houdini.api import pipeline


class AbcArchiveLoader(load.LoaderPlugin):
class AbcArchiveLoader(plugin.HoudiniLoader):
"""Load Alembic as full geometry network hierarchy """

product_types = {"model", "animation", "pointcache", "gpuCache"}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import os
import re

from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_houdini.api import pipeline


class AssLoader(load.LoaderPlugin):
class AssLoader(plugin.HoudiniLoader):
"""Load .ass with Arnold Procedural"""

product_types = {"ass"}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
import os
import re

from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_houdini.api import pipeline


class BgeoLoader(load.LoaderPlugin):
class BgeoLoader(plugin.HoudiniLoader):
"""Load bgeo files to Houdini."""

label = "Load bgeo"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
from ayon_core.pipeline import (
load,
get_representation_path,
)
from ayon_houdini.api import pipeline
import hou
from ayon_core.pipeline import get_representation_path

from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_houdini.api.lib import (
set_camera_resolution,
get_camera_from_container
)

import hou


ARCHIVE_EXPRESSION = ('__import__("_alembic_hom_extensions")'
'.alembicGetCameraDict')
Expand Down Expand Up @@ -84,7 +83,7 @@ def transfer_non_default_values(src, dest, ignore=None):
dest_parm.setFromParm(parm)


class CameraLoader(load.LoaderPlugin):
class CameraLoader(plugin.HoudiniLoader):
"""Load camera from an Alembic file"""

product_types = {"camera"}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# -*- coding: utf-8 -*-
"""Fbx Loader for houdini. """
from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_houdini.api import pipeline


class FbxLoader(load.LoaderPlugin):
class FbxLoader(plugin.HoudiniLoader):
"""Load fbx files. """

label = "Load FBX"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import os
import re

from ayon_core.pipeline import load
from ayon_houdini.api import pipeline

import hou

from ayon_houdini.api import (
pipeline,
plugin
)


class FilePathLoader(load.LoaderPlugin):
class FilePathLoader(plugin.HoudiniLoader):
"""Load a managed filepath to a null node.

This is useful if for a particular workflow there is no existing loader
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# -*- coding: utf-8 -*-
import os
from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_houdini.api import pipeline


class HdaLoader(load.LoaderPlugin):
class HdaLoader(plugin.HoudiniLoader):
"""Load Houdini Digital Asset file."""

product_types = {"hda"}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import os
import re
import hou

from ayon_core.pipeline import (
load,
get_representation_path,
AVALON_CONTAINER_ID,
)
from ayon_houdini.api import lib, pipeline

import hou
from ayon_houdini.api import (
pipeline,
plugin,
lib
)


def get_image_avalon_container():
Expand Down Expand Up @@ -42,7 +44,7 @@ def get_image_avalon_container():
return image_container


class ImageLoader(load.LoaderPlugin):
class ImageLoader(plugin.HoudiniLoader):
"""Load images into COP2"""

product_types = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import os
import re
from ayon_core.pipeline import (
load,
get_representation_path,
)
from ayon_houdini.api import pipeline
import hou

from ayon_core.pipeline import get_representation_path
from ayon_core.pipeline.load import LoadError

import hou
from ayon_houdini.api import (
pipeline,
plugin
)


class RedshiftProxyLoader(load.LoaderPlugin):
class RedshiftProxyLoader(plugin.HoudiniLoader):
"""Load Redshift Proxy"""

product_types = {"redshiftproxy"}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from ayon_core.pipeline import (
load,
get_representation_path,
AVALON_CONTAINER_ID,
)
from ayon_houdini.api import lib
from ayon_houdini.api import (
plugin,
lib
)


class USDSublayerLoader(load.LoaderPlugin):
class USDSublayerLoader(plugin.HoudiniLoader):
"""Sublayer USD file in Solaris"""

product_types = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from ayon_core.pipeline import (
load,
get_representation_path,
AVALON_CONTAINER_ID,
)
from ayon_houdini.api import lib
from ayon_houdini.api import (
plugin,
lib
)


class USDReferenceLoader(load.LoaderPlugin):
class USDReferenceLoader(plugin.HoudiniLoader):
"""Reference USD file in Solaris"""

product_types = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import os

from ayon_core.pipeline import load
from ayon_houdini.api import pipeline
from ayon_houdini.api import (
pipeline,
plugin
)


class SopUsdImportLoader(load.LoaderPlugin):
class SopUsdImportLoader(plugin.HoudiniLoader):
"""Load USD to SOPs via `usdimport`"""

label = "Load USD to SOPs"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import os
import re

from ayon_core.pipeline import (
load,
get_representation_path,
from ayon_core.pipeline import get_representation_path
from ayon_houdini.api import (
pipeline,
plugin
)
from ayon_houdini.api import pipeline


class VdbLoader(load.LoaderPlugin):
class VdbLoader(plugin.HoudiniLoader):
"""Load VDB"""

product_types = {"vdbcache"}
Expand Down
Loading