Skip to content

validate_vray_translator_settings

Validate VRay Translator settings.

ValidateVRayTranslatorEnabled

Bases: MayaContextPlugin, OptionalPyblishPluginMixin

Validate VRay Translator settings for extracting vrscenes.

Source code in client/ayon_maya/plugins/publish/validate_vray_translator_settings.py
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
class ValidateVRayTranslatorEnabled(plugin.MayaContextPlugin,
                                    OptionalPyblishPluginMixin):
    """Validate VRay Translator settings for extracting vrscenes."""

    order = ValidateContentsOrder
    label = "VRay Translator Settings"
    families = ["vrayscene_layer"]
    actions = [RepairContextAction]
    optional = False

    def process(self, context):
        """Plugin entry point."""
        if not self.is_active(context.data):
            return
        # Workaround bug pyblish-base#250
        if not context_plugin_should_run(self, context):
            return

        invalid = self.get_invalid(context)
        if invalid:
            raise PublishValidationError(
                message="Found invalid VRay Translator settings",
                title=self.label
            )

    @classmethod
    def get_invalid(cls, context):
        """Get invalid instances."""
        invalid = False

        # Get vraySettings node
        vray_settings = cmds.ls(type="VRaySettingsNode")
        if not vray_settings:
            raise PublishValidationError(
                "Please ensure a VRay Settings Node is present",
                title=cls.label
            )

        node = vray_settings[0]

        if cmds.setAttr("{}.vrscene_render_on".format(node)):
            cls.log.error(
                "Render is enabled, for export it should be disabled")
            invalid = True

        if not cmds.getAttr("{}.vrscene_on".format(node)):
            cls.log.error("Export vrscene not enabled")
            invalid = True

        for instance in context:
            if "vrayscene_layer" not in instance.data.get("families"):
                continue

            if instance.data.get("vraySceneMultipleFiles"):
                if not cmds.getAttr("{}.misc_eachFrameInFile".format(node)):
                    cls.log.error("Each Frame in File not enabled")
                    invalid = True
            else:
                if cmds.getAttr("{}.misc_eachFrameInFile".format(node)):
                    cls.log.error("Each Frame in File is enabled")
                    invalid = True

        vrscene_filename = cmds.getAttr("{}.vrscene_filename".format(node))
        if vrscene_filename != "vrayscene/<Scene>/<Layer>/<Layer>":
            cls.log.error("Template for file name is wrong")
            invalid = True

        return invalid

    @classmethod
    def repair(cls, context):
        """Repair invalid settings."""
        vray_settings = cmds.ls(type="VRaySettingsNode")
        if not vray_settings:
            node = cmds.createNode("VRaySettingsNode")
        else:
            node = vray_settings[0]

        cmds.setAttr("{}.vrscene_render_on".format(node), False)
        cmds.setAttr("{}.vrscene_on".format(node), True)
        for instance in context:
            if "vrayscene" not in instance.data.get("families"):
                continue

            if instance.data.get("vraySceneMultipleFiles"):
                cmds.setAttr("{}.misc_eachFrameInFile".format(node), True)
            else:
                cmds.setAttr("{}.misc_eachFrameInFile".format(node), False)
        cmds.setAttr("{}.vrscene_filename".format(node),
                     "vrayscene/<Scene>/<Layer>/<Layer>",
                     type="string")

get_invalid(context) classmethod

Get invalid instances.

Source code in client/ayon_maya/plugins/publish/validate_vray_translator_settings.py
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
@classmethod
def get_invalid(cls, context):
    """Get invalid instances."""
    invalid = False

    # Get vraySettings node
    vray_settings = cmds.ls(type="VRaySettingsNode")
    if not vray_settings:
        raise PublishValidationError(
            "Please ensure a VRay Settings Node is present",
            title=cls.label
        )

    node = vray_settings[0]

    if cmds.setAttr("{}.vrscene_render_on".format(node)):
        cls.log.error(
            "Render is enabled, for export it should be disabled")
        invalid = True

    if not cmds.getAttr("{}.vrscene_on".format(node)):
        cls.log.error("Export vrscene not enabled")
        invalid = True

    for instance in context:
        if "vrayscene_layer" not in instance.data.get("families"):
            continue

        if instance.data.get("vraySceneMultipleFiles"):
            if not cmds.getAttr("{}.misc_eachFrameInFile".format(node)):
                cls.log.error("Each Frame in File not enabled")
                invalid = True
        else:
            if cmds.getAttr("{}.misc_eachFrameInFile".format(node)):
                cls.log.error("Each Frame in File is enabled")
                invalid = True

    vrscene_filename = cmds.getAttr("{}.vrscene_filename".format(node))
    if vrscene_filename != "vrayscene/<Scene>/<Layer>/<Layer>":
        cls.log.error("Template for file name is wrong")
        invalid = True

    return invalid

process(context)

Plugin entry point.

Source code in client/ayon_maya/plugins/publish/validate_vray_translator_settings.py
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def process(self, context):
    """Plugin entry point."""
    if not self.is_active(context.data):
        return
    # Workaround bug pyblish-base#250
    if not context_plugin_should_run(self, context):
        return

    invalid = self.get_invalid(context)
    if invalid:
        raise PublishValidationError(
            message="Found invalid VRay Translator settings",
            title=self.label
        )

repair(context) classmethod

Repair invalid settings.

Source code in client/ayon_maya/plugins/publish/validate_vray_translator_settings.py
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
@classmethod
def repair(cls, context):
    """Repair invalid settings."""
    vray_settings = cmds.ls(type="VRaySettingsNode")
    if not vray_settings:
        node = cmds.createNode("VRaySettingsNode")
    else:
        node = vray_settings[0]

    cmds.setAttr("{}.vrscene_render_on".format(node), False)
    cmds.setAttr("{}.vrscene_on".format(node), True)
    for instance in context:
        if "vrayscene" not in instance.data.get("families"):
            continue

        if instance.data.get("vraySceneMultipleFiles"):
            cmds.setAttr("{}.misc_eachFrameInFile".format(node), True)
        else:
            cmds.setAttr("{}.misc_eachFrameInFile".format(node), False)
    cmds.setAttr("{}.vrscene_filename".format(node),
                 "vrayscene/<Scene>/<Layer>/<Layer>",
                 type="string")