diff --git a/colorbleed/plugins/maya/publish/validate_rendersettings.py b/colorbleed/plugins/maya/publish/validate_rendersettings.py index 42579727ce..49d1024290 100644 --- a/colorbleed/plugins/maya/publish/validate_rendersettings.py +++ b/colorbleed/plugins/maya/publish/validate_rendersettings.py @@ -15,12 +15,18 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): * Frame Padding must be: * default: 4 + + NOTE: + The repair function of this plugin will does not repair animation + setting of the render settings due to multiple possibilities. + """ order = colorbleed.api.ValidateContentsOrder label = "Render Settings" hosts = ["maya"] families = ["colorbleed.renderlayer"] + actions = [colorbleed.api.RepairAction] DEFAULT_PADDING = 4 RENDERER_PREFIX = {"vray": "/_/"} @@ -31,6 +37,11 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): renderer = instance.data['renderer'] layer_node = instance.data['setMembers'] + # Main check animation + animation = cmds.getAttr("defaultRenderGlobals.animation") + assert animation is True, ("Animation needs to be enabled in the " + "render settings") + # Collect the filename prefix in the renderlayer with lib.renderlayer(layer_node): @@ -43,11 +54,40 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): prefix = cmds.getAttr("{}.{}".format(node, prefix_attr)) padding = cmds.getAttr("{}.{}".format(node, padding_attr)) - fname_prefix = self.RENDERER_PREFIX.get(renderer, self.DEFAULT_PREFIX) - assert prefix == fname_prefix, ( - "Wrong file name prefix, expecting %s" % fname_prefix - ) - assert padding == self.DEFAULT_PADDING, ( - "Expecting padding of {} ( {} )".format(self.DEFAULT_PADDING, - "0"*self.DEFAULT_PADDING) - ) + anim_override = cmds.getAttr("defaultRenderGlobals.animation") + assert anim_override == animation, ( + "Animation neesd to be enabled. Use the same frame for start " + "and end to render singel frame") + + fname_prefix = self.RENDERER_PREFIX.get(renderer, + self.DEFAULT_PREFIX) + assert prefix == fname_prefix, ( + "Wrong file name prefix, expecting %s" % fname_prefix + ) + assert padding == self.DEFAULT_PADDING, ( + "Expecting padding of {} ( {} )".format( + self.DEFAULT_PADDING, "0"*self.DEFAULT_PADDING) + ) + + @classmethod + def repair(cls, instance): + + renderer = instance.data['renderer'] + layer_node = instance.data['setMembers'] + + with lib.renderlayer(layer_node): + default = lib.RENDER_ATTRS['default'] + render_attrs = lib.RENDER_ATTRS.get(renderer, default) + + # Repair prefix + node = render_attrs["node"] + prefix_attr = render_attrs["prefix"] + + fname_prefix = cls.RENDERER_PREFIX.get(renderer, cls.DEFAULT_PREFIX) + cmds.setAttr("{}.{}".format(node, prefix_attr), + fname_prefix, type="string") + + # Repair padding + padding_attr = render_attrs["padding"] + cmds.setAttr("{}.{}".format(node, padding_attr), + cls.DEFAULT_PADDING)