def plusMinusAverage(*args, **kwargs): from nodex.core import Nodex d = kwargs.pop("dimensions", None) o = kwargs.pop("operation", 1) name = kwargs.pop("name", "plusMinusAverage") output = kwargs.pop("output3D", None) # Get dimensions from input Nodex if d is None: d = max(x.dimensions() for x in args) if d > 3: raise RuntimeError("Can't use plusMinusAverage with higher dimensions than 3") # Get corresponding output attribute/length for the current dimension resultAttrs = {1: "output1D", 2: "output2D", 3: "output3D"} resultAttr = resultAttrs[d] n = pm.createNode("plusMinusAverage", name=name) n.operation.set(o) # average for i, v in enumerate(args): n_input_attr = n.attr("input{dimension}D[{index}]".format(dimension=d, index=i)) v.connect(n_input_attr) result = Nodex(n.attr(resultAttr)) if output is not None: result.connect(output) return result
def plusMinusAverage(*args, **kwargs): from nodex.core import Nodex d = kwargs.pop("dimensions", None) o = kwargs.pop("operation", 1) name = kwargs.pop("name", "plusMinusAverage") output = kwargs.pop("output3D", None) # Get dimensions from input Nodex if d is None: d = max(x.dimensions() for x in args) if d > 3: raise RuntimeError( "Can't use plusMinusAverage with higher dimensions than 3") # Get corresponding output attribute/length for the current dimension resultAttrs = {1: "output1D", 2: "output2D", 3: "output3D"} resultAttr = resultAttrs[d] n = pm.createNode("plusMinusAverage", name=name) n.operation.set(o) # average for i, v in enumerate(args): n_input_attr = n.attr("input{dimension}D[{index}]".format(dimension=d, index=i)) v.connect(n_input_attr) result = Nodex(n.attr(resultAttr)) if output is not None: result.connect(output) return result
def condition(firstTerm=None, secondTerm=None, ifTrue=None, ifFalse=None, output=None, **kwargs): from nodex.core import Nodex o = kwargs.pop("operation", 0) name = kwargs.pop("name", "condition") d = kwargs.pop("dimensions", None) output = kwargs.pop("output", None) # Ensure inputs are Nodex if firstTerm is not None and not isinstance(firstTerm, Nodex): firstTerm = Nodex(firstTerm) if secondTerm is not None and not isinstance(secondTerm, Nodex): secondTerm = Nodex(secondTerm) if ifTrue is not None and not isinstance(ifTrue, Nodex): ifTrue = Nodex(ifTrue) if ifFalse is not None and not isinstance(ifFalse, Nodex): ifFalse = Nodex(ifFalse) # Get dimensions from input Nodex if d is None: d = max(x.dimensions() for x in [firstTerm, secondTerm, ifTrue, ifFalse] if not x is None) if d > 3: raise RuntimeError("Can't use plusMinusAverage with higher dimensions than 3") suffices = ["R", "G", "B"] n = pm.createNode("condition", name=name) n.operation.set(o) # region define output attribute # Get corresponding output attribute/length for the current dimension outputAttrs = {1: "outColorR", 2: ["outColorR", "outColorG"], 3: "outColor"} outputAttr = outputAttrs[d] # use node name plus attribute to identify output so we can use it as the nodex directly if isinstance(outputAttr, list): outputAttr = ["{0}.{1}".format(n.name(), x) for x in outputAttr] else: outputAttr = "{0}.{1}".format(n.name(), outputAttr) # endregion if firstTerm is not None: firstTerm.connect(n.attr("firstTerm")) if secondTerm is not None: secondTerm.connect(n.attr("secondTerm")) if ifTrue is not None: ifTrue.connect(n.attr("colorIfTrue")) else: n.attr("colorIfTrue").set((1, 1, 1)) if ifFalse is not None: ifFalse.connect(n.attr("colorIfFalse")) else: n.attr("colorIfFalse").set((0, 0, 0)) if output is not None: ifFalse.connect(outputAttr) return Nodex(outputAttr)
def condition(firstTerm=None, secondTerm=None, ifTrue=None, ifFalse=None, output=None, **kwargs): from nodex.core import Nodex o = kwargs.pop("operation", 0) name = kwargs.pop("name", "condition") d = kwargs.pop("dimensions", None) output = kwargs.pop("output", None) # Ensure inputs are Nodex if firstTerm is not None and not isinstance(firstTerm, Nodex): firstTerm = Nodex(firstTerm) if secondTerm is not None and not isinstance(secondTerm, Nodex): secondTerm = Nodex(secondTerm) if ifTrue is not None and not isinstance(ifTrue, Nodex): ifTrue = Nodex(ifTrue) if ifFalse is not None and not isinstance(ifFalse, Nodex): ifFalse = Nodex(ifFalse) # Get dimensions from input Nodex if d is None: d = max(x.dimensions() for x in [firstTerm, secondTerm, ifTrue, ifFalse] if not x is None) if d > 3: raise RuntimeError( "Can't use plusMinusAverage with higher dimensions than 3") suffices = ["R", "G", "B"] n = pm.createNode("condition", name=name) n.operation.set(o) # region define output attribute # Get corresponding output attribute/length for the current dimension outputAttrs = { 1: "outColorR", 2: ["outColorR", "outColorG"], 3: "outColor" } outputAttr = outputAttrs[d] # use node name plus attribute to identify output so we can use it as the nodex directly if isinstance(outputAttr, list): outputAttr = ["{0}.{1}".format(n.name(), x) for x in outputAttr] else: outputAttr = "{0}.{1}".format(n.name(), outputAttr) # endregion if firstTerm is not None: firstTerm.connect(n.attr("firstTerm")) if secondTerm is not None: secondTerm.connect(n.attr("secondTerm")) if ifTrue is not None: ifTrue.connect(n.attr("colorIfTrue")) else: n.attr("colorIfTrue").set((1, 1, 1)) if ifFalse is not None: ifFalse.connect(n.attr("colorIfFalse")) else: n.attr("colorIfFalse").set((0, 0, 0)) if output is not None: ifFalse.connect(outputAttr) return Nodex(outputAttr)