def onAddRule(self, *args):

        # Obtain rule name.
        okStr = maya.stringTable['y_inputSpaceRulesUI.kColorMgtOK']
        cancelStr = maya.stringTable['y_inputSpaceRulesUI.kColorMgtCancel']

        result = cmds.promptDialog(
            title=maya.stringTable['y_inputSpaceRulesUI.kRuleDialogTitle'],
            message=maya.stringTable['y_inputSpaceRulesUI.kRuleDialogMsg'],
            button=[okStr, cancelStr],
            defaultButton=okStr,
            cancelButton=cancelStr,
            dismissString=cancelStr)

        if result != okStr:
            return

        text = cmds.promptDialog(query=True, text=True)

        # Create rule with match all pattern, 'exr' extension, and same color
        # space as default rule.
        rules = cmds.colorManagementFileRules(listRules=True)
        colorSpace = cmds.colorManagementFileRules(rules[0],
                                                   query=True,
                                                   colorSpace=True)

        cmds.colorManagementFileRules(add=text,
                                      pattern='*',
                                      extension='exr',
                                      colorSpace=colorSpace)

        self.appendRule(FilePathRule(name=text))
Beispiel #2
0
    def cmConfigChanged(self, *_, **__):
        """
        Color Management Config Changed callback slot.
        Clear the colorspace comboBox and repopulate it.
        """
        self.colorSpace_comboBox.clear()

        for cs in static_lib.COLORSPACES():
            self.colorSpace_comboBox.addItem(cs)

        defaultRule = cmds.colorManagementFileRules(lsr=True)[0]
        self.logic.defaultColorSpace = cmds.colorManagementFileRules(
            defaultRule, query=True, cs=True)
    def onDeleteRule(self, *args):

        # If selected rule is 0 (default), early out.
        if self._selectedPos == 0:
            return

        # Update data model.
        cmds.colorManagementFileRules(
            rm=self._rulesChain[self._selectedPos].name)

        del self._rulesChain[self._selectedPos]
        self._selectedPos = min(self._selectedPos, len(self._rulesChain) - 1)

        self.updateScrollList()

        self.selectRule(self._selectedPos)
Beispiel #4
0
    def _initial_scene_operations(self):
        """
        Initial scene configurations, including frame range, frame rate, and resolution
        """
        # Set file naming format to fileName.frameNumber.ext
        cmds.setAttr("defaultRenderGlobals.animation", True)
        cmds.setAttr("defaultRenderGlobals.putFrameBeforeExt", True)

        # Set color management default setting to ACEScg
        try:
            cmds.colorManagementFileRules("Default",
                                          edit=True,
                                          colorSpace="ACES - ACEScg")
        except:
            cmds.colorManagementFileRules("Default",
                                          edit=True,
                                          colorSpace="ACEScg")

        #Set view transform default setting to Rec.709
        try:
            cmds.colorManagementPrefs(edit=True,
                                      viewTransformName="Rec.709 (ACES)")
        except:
            cmds.colorManagementPrefs(edit=True,
                                      viewTransformName="sRGB (ACES)")

        # Determine current render engine
        curr_renderer = cmds.getAttr('defaultRenderGlobals.currentRenderer')

        if curr_renderer == "arnold":
            # Creates instance of Arnold's defaultSettings node, which is essential
            # for executing Arnold-specific functions without opening the menu
            from mtoa.core import createOptions
            createOptions()

            # # set file naming convention
            # cmds.setAttr("defaultRenderGlobals.imageFilePrefix", "<Scene>_<RenderLayer>/<Scene>_<RenderLayer>", type = "string")
            # set MergeAOVs to True
            cmds.setAttr('defaultArnoldDriver.mergeAOVs', 1)

        elif curr_renderer == "vray":
            cmds.setAttr("vraySettings.animType", 1)
            cmds.setAttr("vraySettings.imageFormatStr", 5)
        else:
            pass
    def onDown(self, *args):

        # Rule 0 can't be moved, and therefore rule 1 can't either.
        if self._selectedPos <= 1:
            return

        # Update data model.
        cmds.colorManagementFileRules(
            down=self._rulesChain[self._selectedPos].name)

        # Take the selected rule, move it down, and rebuild the scroll list.
        previousRule = self._rulesChain[self._selectedPos - 1]

        self._rulesChain[self._selectedPos-1] = \
            self._rulesChain[self._selectedPos]

        self._rulesChain[self._selectedPos] = previousRule

        self.updateScrollList()

        self.selectRule(self._selectedPos - 1)
    def onUp(self, *args):

        # If last rule selected, early out.
        if self._selectedPos == (len(self._rulesChain) - 1):
            return

        # Update data model.
        cmds.colorManagementFileRules(
            up=self._rulesChain[self._selectedPos].name)

        # Take the selected rule, move it up, and rebuild the scroll list.
        nextRule = self._rulesChain[self._selectedPos + 1]

        self._rulesChain[self._selectedPos+1] = \
            self._rulesChain[self._selectedPos]

        self._rulesChain[self._selectedPos] = nextRule

        self.updateScrollList()

        self.selectRule(self._selectedPos + 1)
Beispiel #7
0
def reapply():

    # Get the list of color managed nodes.
    cmNodes = cmds.colorManagementPrefs(query=True, colorManagedNodes=True)

    # Avoid warning if mental ray plugin isn't loaded.
    if cmds.pluginInfo('Mayatomr', query=True, loaded=True):
        cmNodes = cmNodes + cmds.ls(type='mentalrayIblShape')

    # Avoid warning if mtoa plugin isn't loaded.
    if cmds.pluginInfo('mtoa', query=True, loaded=True):
        cmNodes = cmNodes + cmds.ls(type='aiImage')

    # Loop over nodes: get each node's file path, evaluate rules, set
    # the color space.
    for nodeName in cmNodes:

        # If ignore file rules is set for that node, don't reapply on it.
        ignoreColorSpaceFileRules = cmds.getAttr(nodeName +
                                                 '.ignoreColorSpaceFileRules')
        if ignoreColorSpaceFileRules:
            continue

        TODO('HACK', 'Should not depend on per node type knowledge', None)

        # We should not need to know the list of file name attribute names
        # for all types of color managed nodes, as more color managed node
        # types can be added in the future.
        #
        # As of 5-Nov-2014, we know that the colorManagedNodes query
        # will return two types of nodes: image plane nodes, which have an
        # image file attribute, and file texture nodes, which have a file
        # name attribute.
        #
        # Additionally, we are relying on identical attribute naming for
        # the color space across all node types, which is very weak.
        attrList = cmds.listAttr(nodeName)
        fileAttrName = 'imageName'
        if 'imageName' in attrList:
            fileAttrName = 'imageName'
        elif 'fileTextureName' in attrList:
            fileAttrName = 'fileTextureName'
        elif 'filename' in attrList:  # aiImage
            fileAttrName = 'filename'
        else:
            fileAttrName = 'texture'

        fileName = cmds.getAttr(nodeName + '.' + fileAttrName)

        colorSpace = cmds.colorManagementFileRules(evaluate=fileName)

        cmds.setAttr(nodeName + '.colorSpace', colorSpace, type='string')
    def __init__(self, name=''):
        super(ChainRule, self).__init__(name=name)

        # Initialize our list of rules with a default rule.  This will
        # always be the last rule.  The rule list is always appended to,
        # and is placed in the scroll list in back to front (reverse
        # iteration) order.
        self._rulesChain = []
        self._rulesChain.append(DefaultRule())

        # Fill in UI with existing rules.
        rules = cmds.colorManagementFileRules(listRules=True)
        # Default rule already added, skip it.
        rules.pop(0)

        self._ocioRulesEnabled = cmds.colorManagementPrefs(query=True, cmConfigFileEnabled=True) \
                                 and cmds.colorManagementPrefs(query=True, ocioRulesEnabled=True)
        if self._ocioRulesEnabled:
            self._rulesChain.append(OpaqueRule(rules.pop(0)))
        else:
            for rule in rules:
                self._rulesChain.append(FilePathRule(rule))

        self._selectedPos = 0
 def setExtension(self, extension):
     cmds.colorManagementFileRules(self.name,
                                   edit=True,
                                   extension=extension)
 def getExtension(self):
     return cmds.colorManagementFileRules(self.name,
                                          query=True,
                                          extension=True)
 def getPattern(self):
     return cmds.colorManagementFileRules(self.name,
                                          query=True,
                                          pattern=True)
 def setPattern(self, pattern):
     cmds.colorManagementFileRules(self.name, edit=True, pattern=pattern)
 def __init__(self):
     rules = cmds.colorManagementFileRules(listRules=True)
     super(DefaultRule, self).__init__(rules[0])
 def getColorSpace(self):
     return cmds.colorManagementFileRules(self.name,
                                          query=True,
                                          colorSpace=True)
 def setColorSpace(self, colorSpace):
     cmds.colorManagementFileRules(self.name,
                                   edit=True,
                                   colorSpace=colorSpace)