Esempio n. 1
0
        def _mirrorAttributeBridges_(self):
            addForwardBack = self.d_kws['addForwardBack']

            if addForwardBack:
                mPlug_forwardBackDriver = cgmMeta.cgmAttr(self.mi_control,
                                                          "forwardBack",
                                                          attrType='float',
                                                          keyable=True)
                try:
                    mPlug_forwardBackDriven = cgmMeta.validateAttrArg(
                        [self.mi_control, addForwardBack])['mi_plug']
                except Exception, error:
                    raise StandardError, "push pull driver | %s" % (error)

                if self.str_mirrorSide.lower() == 'right':
                    arg_forwardBack = "%s = -%s" % (
                        mPlug_forwardBackDriven.p_combinedShortName,
                        mPlug_forwardBackDriver.p_combinedShortName)
                else:
                    arg_forwardBack = "%s = %s" % (
                        mPlug_forwardBackDriven.p_combinedShortName,
                        mPlug_forwardBackDriver.p_combinedShortName)

                mPlug_forwardBackDriven.p_locked = True
                mPlug_forwardBackDriven.p_hidden = True
                mPlug_forwardBackDriven.p_keyable = False
                NodeF.argsToNodes(arg_forwardBack).doBuild()
Esempio n. 2
0
    def test_i_range(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        mObj.tz = 5
        arg = "%s.setRangeResult = setRange(0,1,0,10,%s.tz" % (str_obj,
                                                               str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()
        log.debug(d_return['ml_outPlugs'])
        assert d_return['l_nodes'], "Should have made something"
        assert len(d_return['l_nodes']
                   ) == 1, "Only one node should be made. Found: %s" % len(
                       d_return['l_nodes'])
        assert d_return['ml_outPlugs'][0].obj.getMayaType(
        ) == 'setRange', "%s != setRange" % d_return['ml_outPlugs'][
            0].obj.getMayaType()
        plugCall = mc.listConnections("%s.setRangeResult" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        combinedName = d_return['ml_outPlugs'][0].p_combinedName
        assert str(plugCall[0]) == d_return['ml_outPlugs'][
            0].p_combinedName, "Connections don't match: %s | %s" % (
                plugCall[0], combinedName)
        assert mObj.setRangeResult == .5, "Value 1 fail"
        mObj.tz = 10
        assert mObj.setRangeResult == 1, "Value 2 fail"
Esempio n. 3
0
    def holder(self):
        mObj = cgmMeta.cgmObject(name='awesomeArgObj_loc')
        str_obj = mObj.getShortName()

        try:  #Mult inversion
            arg = "%s.inverseMultThree = 3 * -%s.tx" % (str_obj, str_obj)
            d_return = NODEFACTORY.argsToNodes(arg).doBuild()
            log.debug(d_return['ml_outPlugs'])
            assert d_return['l_nodes'], "Should have made something"
            assert len(
                d_return['l_nodes']
            ) == 2, "Only two nodes should be made. Found: %s" % len(
                d_return['l_nodes'])
            assert d_return['ml_nodes'][0].getMayaType(
            ) == 'multiplyDivide', "%s != md" % d_return['ml_nodes'][
                0].getMayaType()
            assert d_return['ml_nodes'][1].getMayaType(
            ) == 'multiplyDivide', "%s != md" % d_return['ml_nodes'][
                1].getMayaType()

            plugCall = mc.listConnections("%s.inverseMultThree" % (mObj.mNode),
                                          plugs=True,
                                          scn=True)
            assert d_return['ml_nodes'][-1].operation == 1, "Operation not 1"
            combinedName = d_return['ml_outPlugs'][-1].p_combinedName
            assert str(plugCall[0]) == d_return['ml_outPlugs'][
                -1].p_combinedName, "Connections don't match: %s | %s" % (
                    plugCall[0], combinedName)
            assert mObj.inverseMultThree == 3 * -mObj.tx, "Inversion doesn't match"

        except StandardError, error:
            log.error("test_argsToNodes>>Inversion mult 3 Failure! '%s'" %
                      (error))
            raise StandardError, error
Esempio n. 4
0
    def test_a_condition(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        arg = "%s.condResult = if %s.ty == 3:5 else 1" % (str_obj, str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()

        _ml_nodes = d_return.get('ml_nodes')
        _ml_outPlugs = d_return.get('ml_outPlugs')
        _plugCall = mc.listConnections("%s.condResult" % (mObj.mNode),
                                       plugs=True,
                                       scn=True)
        _combinedName = _ml_outPlugs[0].p_combinedName

        self.assertIsNotNone(_ml_outPlugs)
        self.assertEqual(len(_ml_outPlugs), 1)
        self.assertIsNotNone(_ml_nodes)
        self.assertEqual(len(_ml_nodes), 1)

        self.assertEqual(_ml_nodes[0].getMayaType(), 'condition')

        self.assertEqual(_ml_nodes[0].operation, 0)
        self.assertEqual(str(_plugCall[0]), _combinedName)

        mObj.ty = 3
        self.assertEqual(mObj.condResult, 5)
        mObj.ty = 1
        self.assertEqual(mObj.condResult, 1)

        return
Esempio n. 5
0
    def test_c_simpleInvsersion(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        arg = "%s.simpleInversion = -%s.tx" % (str_obj, str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()
        log.debug(d_return['ml_outPlugs'])
        assert d_return['l_nodes'], "Should have made something"
        assert len(d_return['l_nodes']
                   ) == 1, "Only one node should be made. Found: %s" % len(
                       d_return['l_nodes'])
        assert d_return['ml_outPlugs'][0].obj.getMayaType(
        ) == 'multiplyDivide', "%s != pma" % d_return['ml_outPlugs'][
            0].obj.getMayaType()
        plugCall = mc.listConnections("%s.simpleInversion" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        assert d_return['ml_nodes'][0].operation == 1, "Operation not 1"
        combinedName = d_return['ml_outPlugs'][0].p_combinedName
        assert str(plugCall[0]) == d_return['ml_outPlugs'][
            0].p_combinedName, "Connections don't match: %s | %s" % (
                plugCall[0], combinedName)
        assert mObj.simpleInversion == -mObj.tx, "Inversion doesn't match"
Esempio n. 6
0
    def test_g_sum(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        mObj.tx = 1
        mObj.ty = 2
        mObj.tz = 3
        arg = "%s.sumResult1 = %s.tx - %s.ty - %s.tz" % (str_obj, str_obj,
                                                         str_obj, str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()
        log.debug(d_return['ml_outPlugs'])
        assert d_return['l_nodes'], "Should have made something"
        assert len(d_return['l_nodes']
                   ) == 1, "Only one node should be made. Found: %s" % len(
                       d_return['l_nodes'])
        assert d_return['ml_outPlugs'][0].obj.getMayaType(
        ) == 'plusMinusAverage', "%s != pma" % d_return['ml_outPlugs'][
            0].obj.getMayaType()
        plugCall = mc.listConnections("%s.sumResult1" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        assert d_return['ml_nodes'][0].operation == 2, "Operation not 2"
        combinedName = d_return['ml_outPlugs'][0].p_combinedName
        assert str(plugCall[0]) == d_return['ml_outPlugs'][
            0].p_combinedName, "Connections don't match: %s | %s" % (
                plugCall[0], combinedName)
        assert mObj.sumResult1 == mObj.tx - mObj.ty - mObj.tz, "Sum doesn't match"
Esempio n. 7
0
    def test_e_directConnect(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        arg = "%s.directConnect = %s.ty" % (str_obj, str_obj)
        NODEFACTORY.argsToNodes(arg).doBuild()
        log.debug(
            mc.listConnections("%s.directConnect" % str_obj,
                               source=True,
                               scn=True))
        plugCall = mc.listConnections("%s.directConnect" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        assert plugCall[0] == '%s.translateY' % mObj.getShortName(), log.error(
            "Direct connect failed. Plug call:{0}".format(plugCall))
Esempio n. 8
0
        def _mirrorAttributeBridges_(self):	    		
            addForwardBack = self.d_kws['addForwardBack']

            if addForwardBack:
                mPlug_forwardBackDriver = cgmMeta.cgmAttr(self.mi_control,"forwardBack",attrType = 'float',keyable=True)
                try:
                    mPlug_forwardBackDriven = cgmMeta.validateAttrArg([self.mi_control,addForwardBack])['mi_plug']
                except Exception,error:raise StandardError,"push pull driver | %s"%(error)

                if self.str_mirrorSide.lower() == 'right':
                    arg_forwardBack = "%s = -%s"%(mPlug_forwardBackDriven.p_combinedShortName,
                                                  mPlug_forwardBackDriver.p_combinedShortName)		    
                else:
                    arg_forwardBack = "%s = %s"%(mPlug_forwardBackDriven.p_combinedShortName,
                                                 mPlug_forwardBackDriver.p_combinedShortName)

                mPlug_forwardBackDriven.p_locked = True
                mPlug_forwardBackDriven.p_hidden = True
                mPlug_forwardBackDriven.p_keyable = False		
                NodeF.argsToNodes(arg_forwardBack).doBuild()

            if self._addMirrorAttributeBridges:
                for l_bridge in self._addMirrorAttributeBridges:
                    _attrName = VALID.stringArg(l_bridge[0])
                    _attrToBridge = VALID.stringArg(l_bridge[1])
                    if not self.mi_control.hasAttr(_attrToBridge):
                        raise StandardError,"['%s' lacks the bridge attr '%s']"%(self.mi_control.p_nameShort,_attrToBridge)

                    mPlug_attrBridgeDriver = cgmMeta.cgmAttr(self.mi_control,_attrName,attrType = 'float',keyable=True)
                    try:
                        mPlug_attrBridgeDriven = cgmMeta.validateAttrArg([self.mi_control,_attrToBridge])['mi_plug']
                    except Exception,error:raise StandardError,"[validate control attribute bridge attr]{%s}"%(error)

                    if self.str_mirrorSide.lower() == 'right':
                        arg_attributeBridge = "%s = -%s"%(mPlug_attrBridgeDriven.p_combinedShortName,
                                                          mPlug_attrBridgeDriver.p_combinedShortName)		    
                    else:
                        arg_attributeBridge = "%s = %s"%(mPlug_attrBridgeDriven.p_combinedShortName,
                                                         mPlug_attrBridgeDriver.p_combinedShortName)

                    mPlug_attrBridgeDriven.p_locked = True
                    mPlug_attrBridgeDriven.p_hidden = True
                    mPlug_attrBridgeDriven.p_keyable = False		
                    NodeF.argsToNodes(arg_attributeBridge).doBuild()
        def _mirrorAttributeBridges_(self):	    		
            addForwardBack = self.d_kws['addForwardBack']

            if addForwardBack:
                mPlug_forwardBackDriver = cgmMeta.cgmAttr(self.mi_control,"forwardBack",attrType = 'float',keyable=True)
                try:
                    mPlug_forwardBackDriven = cgmMeta.validateAttrArg([self.mi_control,addForwardBack])['mi_plug']
                except Exception,error:raise StandardError,"push pull driver | %s"%(error)

                if self.str_mirrorSide.lower() == 'right':
                    arg_forwardBack = "%s = -%s"%(mPlug_forwardBackDriven.p_combinedShortName,
                                                  mPlug_forwardBackDriver.p_combinedShortName)		    
                else:
                    arg_forwardBack = "%s = %s"%(mPlug_forwardBackDriven.p_combinedShortName,
                                                 mPlug_forwardBackDriver.p_combinedShortName)

                mPlug_forwardBackDriven.p_locked = True
                mPlug_forwardBackDriven.p_hidden = True
                mPlug_forwardBackDriven.p_keyable = False		
                NodeF.argsToNodes(arg_forwardBack).doBuild()

            if self._addMirrorAttributeBridges:
                for l_bridge in self._addMirrorAttributeBridges:
                    _attrName = cgmValid.stringArg(l_bridge[0])
                    _attrToBridge = cgmValid.stringArg(l_bridge[1])
                    if not self.mi_control.hasAttr(_attrToBridge):
                        raise StandardError,"['%s' lacks the bridge attr '%s']"%(self.mi_control.p_nameShort,_attrToBridge)

                    mPlug_attrBridgeDriver = cgmMeta.cgmAttr(self.mi_control,_attrName,attrType = 'float',keyable=True)
                    try:
                        mPlug_attrBridgeDriven = cgmMeta.validateAttrArg([self.mi_control,_attrToBridge])['mi_plug']
                    except Exception,error:raise StandardError,"[validate control attribute bridge attr]{%s}"%(error)

                    if self.str_mirrorSide.lower() == 'right':
                        arg_attributeBridge = "%s = -%s"%(mPlug_attrBridgeDriven.p_combinedShortName,
                                                          mPlug_attrBridgeDriver.p_combinedShortName)		    
                    else:
                        arg_attributeBridge = "%s = %s"%(mPlug_attrBridgeDriven.p_combinedShortName,
                                                         mPlug_attrBridgeDriver.p_combinedShortName)

                    mPlug_attrBridgeDriven.p_locked = True
                    mPlug_attrBridgeDriven.p_hidden = True
                    mPlug_attrBridgeDriven.p_keyable = False		
                    NodeF.argsToNodes(arg_attributeBridge).doBuild()
Esempio n. 10
0
    def test_d_average(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        arg = "%s.sumAverage1 = 4 >< 4 >< 4" % (str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()
        assert d_return['l_nodes'], "Should have made something"
        assert len(d_return['l_nodes']
                   ) == 1, "Only one node should be made. Found: %s" % len(
                       d_return['l_nodes'])
        assert d_return['ml_outPlugs'][0].obj.getMayaType(
        ) == 'plusMinusAverage', "%s != pma" % d_return['ml_outPlugs'][
            0].obj.getMayaType()
        assert d_return['ml_nodes'][0].operation == 3, "Operation not 3"

        assert mObj.sumAverage1 == 4, "Average is wrong: 4 != %s" % mObj.sumAverage1
Esempio n. 11
0
def resize_masterShape(self, sizeBy=None, resize=False):
    try:

        _short = self.p_nameShort
        _str_func = '[{0}] resize_masterShape'.format(_short)
        log.debug("|{0}| >> ".format(_str_func) + '-' * 80)
        _sel = mc.ls(sl=True)
        _bb = False
        _bb = self.baseSize

        if resize:
            if _sel:
                _bb = TRANS.bbSize_get(_sel, False)
            #elif self.getBlockChildren():
            #    sizeBy = mc.ls(self.getBlockChildren(asMeta=False))
            #    _bb = TRANS.bbSize_get(sizeBy,False)
            self.baseSize = _bb

        log.debug("|{0}| >> _bb: {1}".format(_str_func, _bb))

        mHandleFactory = self.asHandleFactory(_short)
        mc.delete(self.getShapes())

        _average = MATH.average([_bb[0], _bb[2]])
        _size = _average * 1.5
        _offsetSize = _average * .01
        _blockScale = self.blockScale
        mFormNull = self.atUtils('stateNull_verify', 'form')
        mNoTransformNull = self.atUtils('noTransformNull_verify', 'form')

        if resize or self.controlOffset == .9999:
            self.controlOffset = _offsetSize

        #Main curve ===========================================================================
        _crv = CURVES.create_fromName(name='circle', direction='y+', size=1)
        mCrv = cgmMeta.asMeta(_crv)
        SNAP.go(mCrv.mNode, self.mNode, rotation=False)
        TRANS.scale_to_boundingBox(mCrv.mNode, [_bb[0], None, _bb[2]])

        #mDup = mCrv.doDuplicate(po=False)
        #mDup.p_position = MATH.list_add(mDup.p_position, [0,_offsetSize,0])

        RIG.shapeParent_in_place(self.mNode, _crv, False)
        #RIG.shapeParent_in_place(self.mNode,mDup.mNode,False)

        mHandleFactory.color(self.mNode, 'center', 'main', transparent=False)

        #Bounding box ==================================================================
        if self.getMessage('bbHelper'):
            self.bbHelper.delete()

        _bb_shape = CURVES.create_controlCurve(self.mNode,
                                               'cubeOpen',
                                               size=1,
                                               sizeMode='fixed')
        _bb_newSize = MATH.list_mult(self.baseSize,
                                     [_blockScale, _blockScale, _blockScale])
        TRANS.scale_to_boundingBox(_bb_shape, _bb_newSize)
        mBBShape = cgmMeta.validateObjArg(_bb_shape,
                                          'cgmObject',
                                          setClass=True)
        mBBShape.p_parent = mFormNull

        mBBShape.inheritsTransform = False
        mc.parentConstraint(self.mNode, mBBShape.mNode, maintainOffset=False)

        SNAPCALLS.snap(mBBShape.mNode,
                       self.mNode,
                       objPivot='axisBox',
                       objMode='y-')

        CORERIG.copy_pivot(mBBShape.mNode, self.mNode)
        self.doConnectOut('baseSize', "{0}.scale".format(mBBShape.mNode))
        #mHandleFactory.color(mBBShape.mNode,controlType='sub')
        mBBShape.setAttrFlags()

        mBBShape.doStore('cgmName', self)
        mBBShape.doStore('cgmType', 'bbVisualize')
        mBBShape.doName()
        mBBShape.template = True
        self.connectChildNode(mBBShape.mNode, 'bbHelper')

        #Offset visualize ==================================================================
        if self.getMessage('offsetHelper'):
            self.offsetHelper.delete()

        #Need to guess our offset size based on bounding box volume

        mShape = self.getShapes(asMeta=True)[0]
        l_return = mc.offsetCurve(mShape.mNode, distance=1, ch=True)
        #pprint.pprint(l_return)
        mHandleFactory.color(l_return[0], 'center', 'sub', transparent=False)

        mOffsetShape = cgmMeta.validateObjArg(l_return[0],
                                              'cgmObject',
                                              setClass=True)
        mOffsetShape.p_parent = mNoTransformNull
        #mOffsetShape.doSnapTo(self)
        #mc.pointConstraint(self.mNode,mOffsetShape.mNode,maintainOffset=True)
        #mc.orientConstraint(self.mNode,mOffsetShape.mNode,maintainOffset=True)
        mOffsetShape.inheritsTransform = False

        mOffsetShape.dagLock()

        _arg = '{0}.distance = -{1}.controlOffset'.format(
            l_return[1], self.mNode)
        NODEFACTORY.argsToNodes(_arg).doBuild()
        #self.doConnectOut('controlOffset',"{0}.distance".format(l_return[1]))

        mOffsetShape.doStore('cgmName', self)
        mOffsetShape.doStore('cgmType', 'offsetVisualize')
        mOffsetShape.doName()

        self.connectChildNode(mOffsetShape.mNode, 'offsetHelper')

        return
        #Offset visualize ==================================================================
        if self.getMessage('offsetHelper'):
            self.offsetHelper.delete()

        mShape = self.getShapes(asMeta=True)[0]
        l_return = mc.offsetCurve(mShape.mNode, distance=1, ch=True)
        #pprint.pprint(l_return)
        mHandleFactory.color(l_return[0], 'center', 'sub', transparent=False)

        mOffsetShape = cgmMeta.validateObjArg(l_return[0],
                                              'cgmObject',
                                              setClass=True)
        mOffsetShape.p_parent = mFormNull

        mOffsetShape.inheritsTransform = False
        mc.parentConstraint(self.mNode,
                            mOffsetShape.mNode,
                            maintainOffset=False)

        #mOffsetShape.setAttrFlags()

        _arg = '{0}.distance = -{1}.controlOffset * {1}.blockScale'.format(
            l_return[1], self.mNode)
        NODEFACTORY.argsToNodes(_arg).doBuild()
        #self.doConnectOut('controlOffset',"{0}.distance".format(l_return[1]))

        mOffsetShape.doStore('cgmName', self)
        mOffsetShape.doStore('cgmType', 'offsetVisualize')
        mOffsetShape.doName()

        self.connectChildNode(mOffsetShape.mNode, 'offsetHelper')

        return

        _crv = CURVES.create_fromName(name='squareOpen',
                                      direction='y+',
                                      size=1)
        TRANS.scale_to_boundingBox(_crv, [_bb[0], None, _bb[2]])

        mHandleFactory.color(_crv, 'center', 'sub', transparent=False)

        mCrv = cgmMeta.validateObjArg(_crv, 'cgmObject')
        l_offsetCrvs = []
        for shape in mCrv.getShapes():
            offsetShape = mc.offsetCurve(shape, distance=-_offsetSize,
                                         ch=True)[0]
            mHandleFactory.color(offsetShape,
                                 'center',
                                 'main',
                                 transparent=False)
            l_offsetCrvs.append(offsetShape)

        RIG.combineShapes(l_offsetCrvs + [_crv], True)
        SNAP.go(_crv, self.mNode)

        RIG.shapeParent_in_place(self.mNode, _crv, True)

        self.baseSize = _bb

        #Bounding box ==================================================================
        if self.getMessage('offsetVisualize'):
            self.bbVisualize.delete()

        _bb_shape = CURVES.create_controlCurve(self.mNode,
                                               'cubeOpen',
                                               size=1.0,
                                               sizeMode='fixed')
        mBBShape = cgmMeta.validateObjArg(_bb_shape,
                                          'cgmObject',
                                          setClass=True)
        mBBShape.p_parent = mFormNull

        SNAPCALLS.snap(mBBShape.mNode,
                       self.mNode,
                       objPivot='axisBox',
                       objMode='y-')

        CORERIG.copy_pivot(mBBShape.mNode, self.mNode)
        self.doConnectOut('baseSize', "{0}.scale".format(mBBShape.mNode))
        mHandleFactory.color(mBBShape.mNode, controlType='sub')
        mBBShape.setAttrFlags()

        mBBShape.doStore('cgmName', self)
        mBBShape.doStore('cgmType', 'bbVisualize')
        mBBShape.doName()

        self.connectChildNode(mBBShape.mNode, 'bbHelper')

        return True

    except Exception, err:
        cgmGEN.cgmExceptCB(Exception, err, localDat=vars())
Esempio n. 12
0
def ik_rp(self,
          mStart,
          mEnd,
          ml_ikFrame=None,
          mIKControl=None,
          mIKBaseControl=None,
          mIKHandleDriver=None,
          mRoot=None,
          mIKGroup=None,
          mIKControlEnd=None,
          ml_ikFullChain=None):
    try:
        _str_func = "ik_rp"
        log.debug("|{0}| >> {1}...".format(_str_func, _str_func) + '-' * 60)

        mRigNull = self.mRigNull
        mBlock = self.mBlock

        if not ml_ikFrame:
            ml_ikFrame = self.ml_handleTargetsCulled
        if not mIKControl:
            raise ValueError, "Must have mIKControl"

        if not mIKHandleDriver:
            raise ValueError, "Must have mIKHandleDriver"
        if not mRoot:
            raise ValueError, "Must have mRoot"

        log.debug("|{0}| >> rp setup...".format(_str_func))
        mIKMid = mRigNull.controlIKMid
        str_ikEnd = mBlock.getEnumValueString('ikEnd')
        #Measture ======================================================
        log.debug("|{0}| >> measure... ".format(_str_func) + '-' * 30)

        res_ikScale = self.UTILS.get_blockScale(
            self, '{0}_ikMeasure'.format(self.d_module['partName'], ),
            ml_ikFrame)

        mPlug_masterScale = res_ikScale[0]
        mMasterCurve = res_ikScale[1]
        mMasterCurve.p_parent = mRoot
        self.fnc_connect_toRigGutsVis(mMasterCurve)
        mMasterCurve.dagLock(True)

        #Unparent the children from the end while we set stuff up...
        log.debug("|{0}| >> end unparent ...".format(_str_func) + '-' * 30)

        ml_end_children = mEnd.getChildren(asMeta=True)
        if ml_end_children:
            for mChild in ml_end_children:
                mChild.parent = False

        #Build the IK ---------------------------------------------------------------------
        reload(IK)
        """
        if mIKControlEnd and str_ikEnd in ['tipCombo']:
            mMainIKControl = mIKControlEnd
        else:
            mMainIKControl = mIKControl
        """
        _d_ik = {
            'globalScaleAttr': mPlug_masterScale.
            p_combinedName,  #mPlug_globalScale.p_combinedName,
            'stretch': 'translate',
            'lockMid': True,
            'rpHandle': mIKMid.mNode,
            'nameSuffix': 'ik',
            'baseName': '{0}_ikRP'.format(self.d_module['partName']),
            'controlObject': mIKControl.mNode,
            'moduleInstance': self.mModule.mNode
        }

        d_ikReturn = IK.handle(mStart.mNode, mEnd.mNode, **_d_ik)
        mIKHandle = d_ikReturn['mHandle']
        ml_distHandlesNF = d_ikReturn['ml_distHandles']
        mRPHandleNF = d_ikReturn['mRPHandle']

        #>>>Parent IK handles -----------------------------------------------------------------
        log.debug("|{0}| >> parent IK stuff ...".format(_str_func) + '-' * 30)

        mIKHandle.parent = mIKHandleDriver.mNode  #handle to control
        for mObj in ml_distHandlesNF[:-1]:
            mObj.parent = mRoot
        ml_distHandlesNF[-1].parent = mIKHandleDriver.mNode  #handle to control
        ml_distHandlesNF[1].parent = mIKMid
        ml_distHandlesNF[1].t = 0, 0, 0
        ml_distHandlesNF[1].r = 0, 0, 0

        if mIKBaseControl:
            ml_distHandlesNF[0].parent = mIKBaseControl

        #>>> Fix our ik_handle twist at the end of all of the parenting
        IK.handle_fixTwist(mIKHandle,
                           self.d_orientation['str'][0])  #Fix the twist

        if mIKControlEnd:
            mIKEndDriver = mIKControlEnd
        else:
            mIKEndDriver = mIKControl

        if ml_end_children:
            for mChild in ml_end_children:
                mChild.parent = mEnd

        #mc.scaleConstraint([mIKControl.mNode],
        #                    ml_ikFrame[self.int_handleEndIdx].mNode,
        #                    maintainOffset = True)
        #if mIKBaseControl:
        #ml_ikFrame[0].parent = mRigNull.controlIKBase

        #if mIKBaseControl:
        #mc.pointConstraint(mIKBaseControl.mNode, ml_ikFrame[0].mNode,maintainOffset=True)

        #Make a spin group ===========================================================
        log.debug("|{0}| >> spin group ...".format(_str_func) + '-' * 30)

        mSpinGroup = mStart.doGroup(False, False, asMeta=True)
        mSpinGroup.doCopyNameTagsFromObject(self.mModule.mNode,
                                            ignore=['cgmName', 'cgmType'])
        mSpinGroup.addAttr('cgmName',
                           '{0}NoFlipSpin'.format(self.d_module['partName']))
        mSpinGroup.doName()
        ATTR.set(mSpinGroup.mNode, 'rotateOrder', self.d_orientation['str'])

        mSpinGroup.parent = mIKGroup
        mSpinGroup.doGroup(True, True, typeModifier='zero')
        mSpinGroupAdd = mSpinGroup.doDuplicate()

        mSpinGroupAdd.doStore('cgmTypeModifier', 'addSpin')
        mSpinGroupAdd.doName()
        mSpinGroupAdd.p_parent = mSpinGroup

        if mIKBaseControl:
            mc.pointConstraint(mIKBaseControl.mNode,
                               mSpinGroup.mNode,
                               maintainOffset=True)

        #Setup arg
        #mPlug_spin = cgmMeta.cgmAttr(mIKControl,'spin',attrType='float',keyable=True, defaultValue = 0, hidden = False)
        #mPlug_spin.doConnectOut("%s.r%s"%(mSpinGroup.mNode,_jointOrientation[0]))

        mSpinTarget = mIKControl

        if mBlock.getMayaAttr('ikRPAim'):
            mc.aimConstraint(mSpinTarget.mNode,
                             mSpinGroup.mNode,
                             maintainOffset=False,
                             aimVector=[0, 0, 1],
                             upVector=[0, 1, 0],
                             worldUpType='none')
        else:
            mc.aimConstraint(mSpinTarget.mNode,
                             mSpinGroup.mNode,
                             maintainOffset=False,
                             aimVector=[0, 0, 1],
                             upVector=[0, 1, 0],
                             worldUpObject=mSpinTarget.mNode,
                             worldUpType='objectrotation',
                             worldUpVector=self.v_twistUp)

        mPlug_spinMid = cgmMeta.cgmAttr(mSpinTarget,
                                        'spinMid',
                                        attrType='float',
                                        defaultValue=0,
                                        keyable=True,
                                        lock=False,
                                        hidden=False)

        _direction = self.d_module.get('direction') or 'center'

        if _direction.lower() == 'right':
            str_arg = "{0}.r{1} = -{2}".format(
                mSpinGroupAdd.mNode, self.d_orientation['str'][0].lower(),
                mPlug_spinMid.p_combinedShortName)
            log.debug("|{0}| >> Right knee spin: {1}".format(
                _str_func, str_arg))
            NODEFACTORY.argsToNodes(str_arg).doBuild()
        else:
            mPlug_spinMid.doConnectOut("{0}.r{1}".format(
                mSpinGroupAdd.mNode, self.d_orientation['str'][0]))

        mSpinGroup.dagLock(True)
        mSpinGroupAdd.dagLock(True)

        #>>> mBallRotationControl ==========================================================
        mIKBallRotationControl = mRigNull.getMessageAsMeta(
            'controlBallRotation')
        if mIKBallRotationControl:  # and str_ikEnd not in ['tipCombo']:
            log.debug("|{0}| >> mIKBallRotationControl...".format(_str_func) +
                      '-' * 30)

            mBallOrientGroup = cgmMeta.validateObjArg(
                mIKBallRotationControl.doGroup(True,
                                               False,
                                               asMeta=True,
                                               typeModifier='orient'),
                'cgmObject',
                setClass=True)
            ATTR.set(mBallOrientGroup.mNode, 'rotateOrder',
                     self.d_orientation['str'])

            mLocBase = mIKBallRotationControl.doCreateAt()
            mLocAim = mIKBallRotationControl.doCreateAt()

            mLocAim.doStore('cgmTypeModifier', 'extendedIK')
            mLocBase = mIKBallRotationControl.doCreateAt()

            mLocBase.doName()
            mLocAim.doName()

            mLocAim.p_parent = ml_ikFullChain[-1]
            mLocBase.p_parent = mIKBallRotationControl.masterGroup

            const = mc.orientConstraint([mLocAim.mNode, mLocBase.mNode],
                                        mBallOrientGroup.mNode,
                                        maintainOffset=True)[0]

            d_blendReturn = NODEFACTORY.createSingleBlendNetwork(
                [mIKControl.mNode, 'extendIK'],
                [mIKControl.mNode, 'resRootFollow'],
                [mIKControl.mNode, 'resFullFollow'],
                keyable=True)

            targetWeights = mc.orientConstraint(const,
                                                q=True,
                                                weightAliasList=True,
                                                maintainOffset=True)

            #Connect
            d_blendReturn['d_result1']['mi_plug'].doConnectOut(
                '%s.%s' % (const, targetWeights[0]))
            d_blendReturn['d_result2']['mi_plug'].doConnectOut(
                '%s.%s' % (const, targetWeights[1]))
            d_blendReturn['d_result1']['mi_plug'].p_hidden = True
            d_blendReturn['d_result2']['mi_plug'].p_hidden = True

            mBallOrientGroup.dagLock(True)
            mLocAim.dagLock(True)
            mLocBase.dagLock(True)

            mIKBallRotationControl.p_parent = mBallOrientGroup

            #Joint constraint -------------------------
            mIKBallRotationControl.masterGroup.p_parent = mPivotResultDriver
            mc.orientConstraint([mIKBallRotationControl.mNode],
                                ml_ikFrame[self.int_handleEndIdx].mNode,
                                maintainOffset=True)
            mc.parentConstraint([mPivotResultDriver.mNode],
                                ml_ikFrame[self.int_handleEndIdx + 1].mNode,
                                maintainOffset=True)

            ATTR.set_default(mIKControl.mNode, 'extendIK', 1.0)
            mIKControl.extendIK = 0.0

        elif str_ikEnd == 'bank':
            mc.orientConstraint([mPivotResultDriver.mNode],
                                ml_ikFrame[self.int_handleEndIdx].mNode,
                                maintainOffset=True)
        elif str_ikEnd == 'pad':
            mc.orientConstraint([mPivotResultDriver.mNode],
                                ml_ikFrame[self.int_handleEndIdx].mNode,
                                maintainOffset=True)
        else:
            mc.orientConstraint([mIKEndDriver.mNode],
                                ml_ikFrame[self.int_handleEndIdx].mNode,
                                maintainOffset=True)

        #Mid IK driver -----------------------------------------------------------------------
        log.debug("|{0}| >> mid Ik driver...".format(_str_func) + '-' * 30)

        log.debug("|{0}| >> mid IK driver.".format(_str_func))
        mMidControlDriver = mIKMid.doCreateAt()
        mMidControlDriver.addAttr(
            'cgmName', '{0}_midIK'.format(self.d_module['partName']))
        mMidControlDriver.addAttr('cgmType', 'driver')
        mMidControlDriver.doName()
        mMidControlDriver.addAttr('cgmAlias', 'midDriver')

        if mIKBaseControl:
            l_midDrivers = [mIKBaseControl.mNode]
        else:
            l_midDrivers = [mRoot.mNode]

        if str_ikEnd in ['tipCombo'] and mIKControlEnd:
            log.debug("|{0}| >> mIKControlEnd + tipCombo...".format(_str_func))
            l_midDrivers.append(mIKControl.mNode)
        else:
            l_midDrivers.append(mIKHandleDriver.mNode)

        mc.pointConstraint(l_midDrivers, mMidControlDriver.mNode)
        mMidControlDriver.parent = mSpinGroupAdd  #mIKGroup
        mIKMid.masterGroup.parent = mMidControlDriver
        mMidControlDriver.dagLock(True)

        #Mid IK trace
        log.debug("|{0}| >> midIK track Crv".format(_str_func, mIKMid))
        trackcrv, clusters = CORERIG.create_at(
            [
                mIKMid.mNode, ml_ikFrame[MATH.get_midIndex(
                    len(ml_ikFrame))].mNode
            ],  #ml_handleJoints[1]],
            'linearTrack',
            baseName='{0}_midTrack'.format(self.d_module['partName']))

        mTrackCrv = cgmMeta.asMeta(trackcrv)
        mTrackCrv.p_parent = self.mModule
        mHandleFactory = mBlock.asHandleFactory()
        mHandleFactory.color(mTrackCrv.mNode, controlType='sub')

        for s in mTrackCrv.getShapes(asMeta=True):
            s.overrideEnabled = 1
            s.overrideDisplayType = 2
        mTrackCrv.doConnectIn('visibility', "{0}.v".format(mIKGroup.mNode))

        #Full IK chain -----------------------------------------------------------------------
        if ml_ikFullChain:
            log.debug("|{0}| >> Full IK Chain...".format(_str_func))
            _d_ik = {
                'globalScaleAttr': mPlug_masterScale.
                p_combinedName,  #mPlug_globalScale.p_combinedName,
                'stretch': 'translate',
                'lockMid': False,
                'rpHandle': mIKMid.mNode,
                'baseName':
                '{0}_ikFullChain'.format(self.d_module['partName']),
                'nameSuffix': 'ikFull',
                'controlObject': mIKControl.mNode,
                'moduleInstance': self.mModule.mNode
            }

            d_ikReturn = IK.handle(ml_ikFullChain[0], ml_ikFullChain[-1],
                                   **_d_ik)
            mIKHandle = d_ikReturn['mHandle']
            ml_distHandlesNF = d_ikReturn['ml_distHandles']
            mRPHandleNF = d_ikReturn['mRPHandle']

            mIKHandle.parent = mIKControl.mNode  #handle to control
            for mObj in ml_distHandlesNF[:-1]:
                mObj.parent = mRoot
            ml_distHandlesNF[-1].parent = mIKControl.mNode  #handle to control
            #ml_distHandlesNF[1].parent = mIKMid
            #ml_distHandlesNF[1].t = 0,0,0
            #ml_distHandlesNF[1].r = 0,0,0

            #>>> Fix our ik_handle twist at the end of all of the parenting
            IK.handle_fixTwist(mIKHandle,
                               self.d_orientation['str'][0])  #Fix the twist

            #mIKControl.masterGroup.p_parent = ml_ikFullChain[-2]

        ######mc.parentConstraint([mIKControl.mNode], ml_ikFrame[-1].mNode, maintainOffset = True)

        if mIKBaseControl:
            ml_ikFrame[0].parent = mIKBaseControl
        #if mIKBaseControl:
        #mc.pointConstraint(mIKBaseControl.mNode, ml_ikFrame[0].mNode,maintainOffset=True)

    except Exception, err:
        cgmGEN.cgmExceptCB(Exception, err, localDat=vars())
rUtils.IKHandle_addSplineIKTwist(handle,False)

#>>> Playing with spline Ik twist setup
#=======================================================
#root twist mode off
#Playing with a better spline IK twist setup, ramp multiplier works
handle = 'ikHandle1'
mPlug_start = cgmMeta.cgmAttr(handle,'twistStart',attrType='float',keyable=True, hidden=False)
mPlug_end = cgmMeta.cgmAttr(handle,'twistEnd',attrType='float',keyable=True, hidden=False)
mPlug_equalizedRoll = cgmMeta.cgmAttr(handle,'twistEqualized',attrType='float',keyable=True, hidden=False)
mPlug_twist = cgmMeta.cgmAttr(handle,'twist',attrType='float',keyable=True, hidden=False)
mPlug_start.doConnectOut("%s.roll"%handle)

arg1 = "%s = %s - %s"%(mPlug_equalizedRoll.p_combinedShortName,mPlug_start.p_combinedShortName,mPlug_end.p_combinedShortName)
log.info("arg1: %s"%arg1)
NodeF.argsToNodes(arg1).doBuild()

arg2 = "%s =  %s - %s"%(mPlug_twist.p_combinedShortName,mPlug_end.p_combinedShortName,mPlug_equalizedRoll.p_combinedShortName)
log.info("arg2: %s"%arg2)
NodeF.argsToNodes(arg2).doBuild()

mPlug_twistRampMultiplier = cgmMeta.cgmAttr(handle,'twistRampMultiplier',attrType='float',keyable=True, hidden=False)
mPlug_twistRampMultiplier.doConnectOut("%s.dTwistRampMult"%handle)
#>>>Iterator
#=======================================================
#Value match mode
rUtils.matchValue_iterator(targetAttr = 'l_hip_ik_jnt.rz' , driverAttr = 'ikChain_ikH.twist', matchValue = 0)

rUtils.matchValue_iterator(drivenAttr = 'l_knee_ik_jnt.tz' , driverAttr = 'l_ankle_ik_anim.lengthUpr', maxIterations=2,matchValue = 66.991, minIn=0.1,maxIn=30.0)

#>>>ikHandle
Esempio n. 14
0
def attach_toShape(obj=None,
                   targetShape=None,
                   connectBy='parent',
                   driver=None):
    """
    :parameters:
        obj - transform to attach
        targetShape(str) - Curve, Nurbs, Mesh
        connectBy(str)
            parent - parent to track transform
            parentGroup - parent to group and have group follow
            conPoint - just point contraint
            conPointGroup - pointConstrain group
            conPointOrientGroup - point/orient constrain group
            conParentGroup - parent Constrain group
            None - just the tracker nodes
    :returns:
        resulting dat

    """
    try:
        _str_func = 'attach_toShape'
        mObj = cgmMeta.validateObjArg(obj, 'cgmObject')
        mDriver = cgmMeta.validateObjArg(driver, 'cgmObject', noneValid=True)

        targetShape = VALID.mNodeString(targetShape)
        log.debug("targetShape: {0}".format(targetShape))

        #Get our data...
        d_closest = DIST.get_closest_point_data(targetShape, mObj.mNode)

        log.debug("|{0}| >> jnt: {1} | {2}".format(_str_func, mObj.mNode,
                                                   d_closest))
        #pprint.pprint(d_closest)
        md_res = {}

        if d_closest['type'] in ['mesh', 'nurbsSurface']:
            log.debug("|{0}| >> Follicle mode...".format(_str_func))
            _shape = SHAPES.get_nonintermediate(d_closest['shape'])
            log.debug("_shape: {0}".format(_shape))

            l_follicleInfo = NODES.createFollicleOnMesh(_shape)

            i_follicleTrans = cgmMeta.asMeta(l_follicleInfo[1],
                                             'cgmObject',
                                             setClass=True)
            i_follicleShape = cgmMeta.asMeta(l_follicleInfo[0], 'cgmNode')

            #> Name...
            i_follicleTrans.doStore('cgmName', mObj)
            i_follicleTrans.doStore('cgmTypeModifier', 'surfaceTrack')
            i_follicleTrans.doName()
            _trackTransform = i_follicleTrans.mNode

            #>Set follicle value...
            if d_closest['type'] == 'mesh':
                i_follicleShape.parameterU = d_closest['parameterU']
                i_follicleShape.parameterV = d_closest['parameterV']
            else:
                i_follicleShape.parameterU = d_closest['normalizedU']
                i_follicleShape.parameterV = d_closest['normalizedV']
            _res = [i_follicleTrans.mNode, i_follicleShape.mNode]

            md_res['mFollicle'] = i_follicleTrans
            md_res['mFollicleShape'] = i_follicleShape
        else:
            log.debug("|{0}| >> Curve mode...".format(_str_func))
            #d_returnBuff = distance.returnNearestPointOnCurveInfo(obj,crv)
            _shape = SHAPES.get_nonintermediate(d_closest['shape'])
            mPOCI = cgmMeta.cgmNode(nodeType='pointOnCurveInfo')
            mc.connectAttr("%s.worldSpace" % _shape,
                           "%s.inputCurve" % mPOCI.mNode)
            mPOCI.parameter = d_closest['parameter']

            mTrack = mObj.doCreateAt()
            mTrack.doStore('cgmName', mObj)
            mTrack.doStore('cgmType', 'surfaceTrack')
            mTrack.doName()

            _trackTransform = mTrack.mNode

            mc.connectAttr("%s.position" % mPOCI.mNode,
                           "%s.t" % _trackTransform)
            mPOCI.doStore('cgmName', mObj)
            mPOCI.doName()
            _res = [mTrack.mNode, mPOCI.mNode]

        if mDriver:
            if d_closest['type'] in ['nurbsSurface']:
                mFollicle = i_follicleTrans
                mFollShape = i_follicleShape

                minU = ATTR.get(_shape, 'minValueU')
                maxU = ATTR.get(_shape, 'maxValueU')
                minV = ATTR.get(_shape, 'minValueV')
                maxV = ATTR.get(_shape, 'maxValueV')

                mDriverLoc = mDriver.doLoc()
                mc.pointConstraint(mDriver.mNode, mDriverLoc.mNode)
                #mLoc = mObj.doLoc()

                str_baseName = "{0}_to_{1}".format(mDriver.p_nameBase,
                                                   mObj.p_nameBase)
                mPlug_normalizedU = cgmMeta.cgmAttr(
                    mDriverLoc.mNode,
                    "{0}_normalizedU".format(str_baseName),
                    attrType='float',
                    hidden=False,
                    lock=False)
                mPlug_sumU = cgmMeta.cgmAttr(mDriverLoc.mNode,
                                             "{0}_sumU".format(str_baseName),
                                             attrType='float',
                                             hidden=False,
                                             lock=False)

                mPlug_normalizedV = cgmMeta.cgmAttr(
                    mDriverLoc.mNode,
                    "{0}_normalizedV".format(str_baseName),
                    attrType='float',
                    hidden=False,
                    lock=False)
                mPlug_sumV = cgmMeta.cgmAttr(mDriverLoc.mNode,
                                             "{0}_sumV".format(str_baseName),
                                             attrType='float',
                                             hidden=False,
                                             lock=False)

                #res_closest = DIST.create_closest_point_node(mLoc.mNode, mCrv_reparam.mNode,True)
                log.debug("|{0}| >> Closest info {1}".format(_str_func, _res))

                srfNode = mc.createNode('closestPointOnSurface')
                mc.connectAttr("%s.worldSpace[0]" % _shape,
                               "%s.inputSurface" % srfNode)
                mc.connectAttr("%s.translate" % mDriverLoc.mNode,
                               "%s.inPosition" % srfNode)
                #mc.connectAttr("%s.position" % srfNode, "%s.translate" % mLoc.mNode, f=True)

                #mClosestPoint =  cgmMeta.validateObjArg(srfNode,setClass=True)
                #mClosestPoint.doStore('cgmName',mObj)
                #mClosestPoint.doName()

                log.debug("|{0}| >> paramU {1}.parameterU | {2}".format(
                    _str_func, srfNode, ATTR.get(srfNode, 'parameterU')))
                log.debug("|{0}| >> paramV {1}.parameterV | {2}".format(
                    _str_func, srfNode, ATTR.get(srfNode, 'parameterV')))

                l_argBuild = []
                mPlug_uSize = cgmMeta.cgmAttr(mDriverLoc.mNode,
                                              "{0}_uSize".format(str_baseName),
                                              attrType='float',
                                              hidden=False,
                                              lock=False)
                mPlug_vSize = cgmMeta.cgmAttr(mDriverLoc.mNode,
                                              "{0}_vSize".format(str_baseName),
                                              attrType='float',
                                              hidden=False,
                                              lock=False)

                l_argBuild.append("{0} = {1} - {2}".format(
                    mPlug_vSize.p_combinedName, maxV, minV))
                l_argBuild.append("{0} = {1} - {2}".format(
                    mPlug_uSize.p_combinedName, maxU, minU))

                l_argBuild.append("{0} = {1} + {2}.parameterU".format(
                    mPlug_sumU.p_combinedName, minU, srfNode))

                l_argBuild.append("{0} = {1} / {2}".format(
                    mPlug_normalizedU.p_combinedName,
                    mPlug_sumU.p_combinedName, mPlug_uSize.p_combinedName))

                l_argBuild.append("{0} = {1} + {2}.parameterV".format(
                    mPlug_sumV.p_combinedName, minV, srfNode))

                l_argBuild.append("{0} = {1} / {2}".format(
                    mPlug_normalizedV.p_combinedName,
                    mPlug_sumV.p_combinedName, mPlug_vSize.p_combinedName))

                for arg in l_argBuild:
                    log.debug("|{0}| >> Building arg: {1}".format(
                        _str_func, arg))
                    NODEFACTORY.argsToNodes(arg).doBuild()

                ATTR.connect(mPlug_normalizedU.p_combinedShortName,
                             '{0}.parameterU'.format(mFollShape.mNode))
                ATTR.connect(mPlug_normalizedV.p_combinedShortName,
                             '{0}.parameterV'.format(mFollShape.mNode))

                md_res['mDriverLoc'] = mDriverLoc

            elif d_closest['type'] in ['curve', 'nurbsCurve']:
                mDriverLoc = mDriver.doLoc()
                mc.pointConstraint(mDriver.mNode, mDriverLoc.mNode)

                _resClosest = DIST.create_closest_point_node(
                    mDriverLoc.mNode, _shape, True)
                _loc = _resClosest[0]

                md_res['mDriverLoc'] = mDriverLoc
                md_res['mDrivenLoc'] = cgmMeta.asMeta(_loc)
                md_res['mTrack'] = mTrack

            else:
                log.warning(
                    cgmGEN.logString_msg(
                        _str_func,
                        "Shape type not currently supported for driver setup. Type: {0}"
                        .format(d_closest['type'])))

        #if connectBy is None:
        #return _res
        if connectBy == 'parent':
            mObj.p_parent = _trackTransform
        elif connectBy == 'conPoint':
            mc.pointConstraint(_trackTransform,
                               mObj.mNode,
                               maintainOffset=True)
        elif connectBy == 'conParent':
            mc.parentConstraint(_trackTransform,
                                mObj.mNode,
                                maintainOffset=True)
        elif connectBy == 'parentGroup':
            mGroup = mObj.doGroup(asMeta=True)
            #_grp = TRANS.group_me(obj,True)
            #TRANS.parent_set(_grp,_trackTransform)
            mGroup.p_parent = _trackTransform
            _res = _res + [mGroup.mNode]
        elif connectBy == 'conPointGroup':
            mLoc = mObj.doLoc()
            mLoc.p_parent = _trackTransform
            mGroup = mObj.doGroup(asMeta=True)
            mc.pointConstraint(mLoc.mNode, mGroup.mNode)
            _res = _res + [mGroup.mNode]

        elif connectBy == 'conPointOrientGroup':
            mLoc = mObj.doLoc()
            mLoc.p_parent = _trackTransform
            mGroup = mObj.doGroup(asMeta=True)

            mc.pointConstraint(mLoc.mNode, mGroup.mNode)
            mc.orientConstraint(mLoc.mNode, mGroup.mNode)
            _res = _res + [mGroup.mNode]

        elif connectBy == 'conParentGroup':
            mLoc = mObj.doLoc()
            mLoc.p_parent = _trackTransform
            mGroup = mObj.doGroup(asMeta=True)
            mc.parentConstraint(mLoc.mNode, mGroup.mNode)
            _res = _res + [mGroup.mNode]
        elif connectBy is None:
            pass
        else:
            raise NotImplementedError, "|{0}| >>invalid connectBy: {1}".format(
                _str_func, connectBy)

        if md_res:
            return _res, md_res
        return _res

        #pprint.pprint(vars())
    except Exception, err:
        cgmGEN.cgmExceptCB(Exception, err)
Esempio n. 15
0
def register(
    controlObject=None,  #(mObject - None) -- The object to use as a control
    typeModifier=None,  #(string - None) -- Tag for cgmTypeModifier for naming
    copyTransform=None,  #(mObject - None) -- Object to copy the transform of for our control object
    copyPivot=None,  #(mObject - None) -- Object to copy the pivot of for our control object
    shapeParentTo=None,  #'(mObject - None) -- Object to shape parent our control curve to to use that transform
    useShape=None,  #'(mObject - None) -- Object to use the curve shape of for our control
    setRotateOrder=None,  #'(rotateOrder - None) -- Argument for a rotate order to set
    autoLockNHide=None,  #'(bool - None) -- Try to set lock and hide
    mirrorAxis=None,  #'(string - None) -- Mirror axis to set - using red9's setup terms
    mirrorSide=None,  #'(string/int - None) -- Mirror side - using red9's setup terms
    makeMirrorable=True,  #'(bool - True) -- Setup for mirrorability (using red9) -- implied by other mirror args
    addDynParentGroup=False,  #'(False) -- Add a dynParent group setup
    addExtraGroups=False,  #'(int - False) -- Number of nested extra groups desired
    addConstraintGroup=False,  #'(bool - False) -- If a group just above the control is desired for consraining
    freezeAll=False,  #'(bool - False) -- Freeze all transforms on the control object
    noFreeze=False,
    addSpacePivots=False,  #'(int - False) -- Number of space pivots to generate and connect
    controlType=None,  #'(string - None) -- Tag for cgmType
    aim=None,  #'(string/int - None) -- aim axis to use
    up=None,  #'(string/int - None) -- up axis to use
    out=None,  #'(string/int - None) -- out axis to use
    makeAimable=None,  #'(mObject - False) -- Make object aimable -- implied by aim/up/out):
    **kws):

    _str_func = 'register'
    """
    [{'step':'validate','call':self._validate},
    {'step':'Copy Transform','call':self._copyTransform},
    {'step':'Shape Parent','call':self._shapeParent},
    {'step':'Copy Pivot','call':self._copyPivot},
    {'step':'Naming','call':self._naming},
    {'step':'Aim Setup','call':self._aimSetup},
    {'step':'Rotate Order','call':self._rotateOrder},
    {'step':'Initial Freeze','call':self._initialFreeze},
    {'step':'Groups Setup','call':self._groupsSetup},
    {'step':'Space Pivot','call':self._spacePivots},
    {'step':'Mirror Setup','call':self._mirrorSetup},	                        
    {'step':'Freeze','call':self._freeze},
    {'step':'Mirror Attribute Bridges','call':self._mirrorAttributeBridges_},	                        
    {'step':'lock N Hide','call':self._lockNHide},
    {'step':'Return build','call':self._returnBuild}]
    """
    try:
        #Validate ================================================================================================
        mi_control = cgmMeta.validateObjArg(controlObject,
                                            'cgmControl',
                                            setClass=True)

        str_mirrorAxis = VALID.stringArg(mirrorAxis, calledFrom=_str_func)
        str_mirrorSide = cgmGeneral.verify_mirrorSideArg(
            mirrorSide)  #VALID.stringArg(mirrorSide,calledFrom = _str_func)
        b_makeMirrorable = VALID.boolArg(makeMirrorable, calledFrom=_str_func)

        _addMirrorAttributeBridges = kws.get('addMirrorAttributeBridges',
                                             False)
        addForwardBack = kws.get('addForwardBack', False)

        if _addMirrorAttributeBridges:
            if type(_addMirrorAttributeBridges) not in [list, tuple]:
                raise ValueError, "[Bad addMirrorAttributeBridge arg]{arg: %s}" % _addMirrorAttributeBridge
            for i, l in enumerate(_addMirrorAttributeBridges):
                if type(l) not in [list, tuple]:
                    raise ValueError, "[Bad addMirrorAttributeBridge arg: %s]{arg: %s}" % (
                        i, l)

        # Running lists ------------------------------------------------------------------------------------------
        ml_groups = []  #Holder for groups
        ml_constraintGroups = []
        ml_spacePivots = []

        #Copy Transform ================================================================================================
        if copyTransform is not None:
            mTarget = cgmMeta.validateObjArg(copyTransform,
                                             'cgmObject',
                                             noneValid=True)
            if not mTarget:
                raise StandardError, "Failed to find suitable copyTransform object: '%s" % copyTransform

            #Need to move this to default cgmNode stuff
            mBuffer = mi_control
            i_newTransform = cgmMeta.cgmObject(
                rigging.groupMeObject(mTarget.mNode, False))
            for a in mc.listAttr(mi_control.mNode, userDefined=True):
                ATTR.copy_to(mi_control.mNode, a, i_newTransform.mNode)
            curves.parentShapeInPlace(i_newTransform.mNode,
                                      mi_control.mNode)  #Parent shape
            i_newTransform.parent = mi_control.parent  #Copy parent
            mi_control = cgmMeta.asMeta(i_newTransform,
                                        'cgmControl',
                                        setClass=True)
            mc.delete(mBuffer.mNode)

        #ShapeParent ================================================================================================
        if shapeParentTo:
            i_target = cgmMeta.validateObjArg(shapeParentTo, 'cgmObject')
            CORERIG.shapeParent_in_place(i_target.mNode, mi_control.mNode)
            i_target = cgmMeta.asMeta(i_target, 'cgmControl', setClass=True)
            #mi_control.delete()
            mi_control = i_target  #replace the control with the joint

        if useShape is not None:
            i_shape = cgmMeta.validateObjArg(useShape,
                                             cgmMeta.cgmObject,
                                             mayaType='nurbsCurve')
            curves.parentShapeInPlace(mi_control.mNode, i_shape.mNode)

        #Copy Pivot ============================================================================================
        if copyPivot is not None:
            if issubclass(type(copyPivot), cgmMeta.cgmNode):
                i_target = copyPivot
            elif mc.objExists(copyPivot):
                i_target = cgmMeta.cgmObject(copyPivot)
            else:
                raise StandardError, "Failed to find suitable copyTransform object: '%s" % copyPivot

            #Need to move this to default cgmNode stuff
            mi_control.doCopyPivot(i_target.mNode)

        #Naming ============================================================================================
        mi_control.addAttr('cgmType', 'controlAnim', lock=True)
        if typeModifier is not None:
            mi_control.addAttr('cgmTypeModifier', str(typeModifier), lock=True)
        mi_control.doName()  #mi_control.doName(nameShapes=True)

        #Rotate Order ============================================================================================
        _rotateOrder = False
        if setRotateOrder is not None:
            _rotateOrder = setRotateOrder
        elif controlType in __d_rotateOrderDefaults__.keys():
            _rotateOrder = __d_rotateOrderDefaults__[controlType]
        elif mi_control.getAttr('cgmName') in __d_rotateOrderDefaults__.keys():
            _rotateOrder = __d_rotateOrderDefaults__[mi_control.getAttr(
                'cgmName')]
        else:
            log.debug("|{0}| >> Rotate order not set on: {1}".format(
                _str_func, mi_control.p_nameShort))

        #Set it ---------------------------------------------------------------
        if _rotateOrder:
            mRotateOrder = VALID.simpleOrientation(_rotateOrder)
            #dictionary.validateRotateOrderString(_rotateOrder)

            mc.xform(mi_control.mNode, rotateOrder=mRotateOrder.p_string)

        #Initial Freeze ============================================================================================
        if freezeAll:
            mc.makeIdentity(mi_control.mNode, apply=True, t=1, r=1, s=1, n=0)

        #Groups ============================================================================================
        if addDynParentGroup or addSpacePivots or mi_control.getAttr(
                'cgmName') == 'cog' or _addMirrorAttributeBridges:
            mi_control.addAttr('________________',
                               attrType='int',
                               keyable=False,
                               hidden=False,
                               lock=True)
            ATTR.reorder(mi_control.mNode, '________________', top=True)
        #Aim Setup ============================================================================================
        if aim is not None or up is not None or makeAimable:
            mi_control._verifyAimable()

        #First our master group:
        i_masterGroup = (cgmMeta.asMeta(mi_control.doGroup(True),
                                        'cgmObject',
                                        setClass=True))
        i_masterGroup.doStore('cgmName', mi_control)
        i_masterGroup.addAttr('cgmTypeModifier', 'master', lock=True)
        i_masterGroup.doName()
        mi_control.connectChildNode(i_masterGroup, 'masterGroup', 'groupChild')

        if addDynParentGroup:
            i_dynGroup = (cgmMeta.cgmObject(mi_control.doGroup(True)))
            i_dynGroup = cgmRigMeta.cgmDynParentGroup(dynChild=mi_control,
                                                      dynGroup=i_dynGroup)
            i_dynGroup.doName()
            """
            i_zeroGroup = (cgmMeta.cgmObject(mi_control.doGroup(True)))
            i_zeroGroup.addAttr('cgmTypeModifier','zero',lock=True)
            i_zeroGroup.doName()
            mi_control.connectChildNode(i_zeroGroup,'zeroGroup','groupChild')"""

        if addExtraGroups:
            for i in range(addExtraGroups):
                i_group = (cgmMeta.asMeta(mi_control.doGroup(True),
                                          'cgmObject',
                                          setClass=True))
                if type(
                        addExtraGroups
                ) == int and addExtraGroups > 1:  #Add iterator if necessary
                    i_group.addAttr('cgmIterator', str(i + 1), lock=True)
                    i_group.doName()
                ml_groups.append(i_group)
            mi_control.msgList_connect("extraGroups", ml_groups, 'groupChild')

        if addConstraintGroup:  #ConstraintGroups
            i_constraintGroup = (cgmMeta.asMeta(mi_control.doGroup(True),
                                                'cgmObject',
                                                setClass=True))
            i_constraintGroup.addAttr('cgmTypeModifier',
                                      'constraint',
                                      lock=True)
            i_constraintGroup.doName()
            ml_constraintGroups.append(i_constraintGroup)
            mi_control.connectChildNode(i_constraintGroup, 'constraintGroup',
                                        'groupChild')

        #Space Pivot ============================================================================================
        if addSpacePivots:
            parent = mi_control.getMessage('masterGroup')[0]
            for i in range(int(addSpacePivots)):
                #i_pivot = rUtils.create_spaceLocatorForObject(mi_control.mNode,parent)
                i_pivot = SPACEPIVOTS.create(mi_control.mNode, parent)
                ml_spacePivots.append(i_pivot)
                #log.info("spacePivot created: {0}".format(i_pivot.p_nameShort))

        #Mirror Setup ============================================================================================
        if str_mirrorSide is not None or b_makeMirrorable:
            for mObj in [mi_control] + ml_spacePivots:
                mi_control._verifyMirrorable()
                l_enum = cgmMeta.cgmAttr(mi_control, 'mirrorSide').p_enum
                if str_mirrorSide in l_enum:
                    #log.debug("|{0}| >> Rotate order not set on: {1}".format(_str_func,mi_control.p_nameShort))
                    #log.debug("%s >> %s >> found in : %s"%(_str_funcCombined, "mirrorSetup", l_enum))
                    mi_control.mirrorSide = l_enum.index(str_mirrorSide)
                if str_mirrorAxis:
                    mi_control.mirrorAxis = str_mirrorAxis
            for mObj in mi_control.msgList_get('spacePivots'):
                mObj._verifyMirrorable()
                mi_control.doConnectOut('mirrorAxis',
                                        mObj.mNode + '.mirrorAxis')
                mi_control.doConnectOut('mirrorSide',
                                        mObj.mNode + '.mirrorSide')

                #cgmMeta.cgmAttr(mObj,'mirrorSide').doConnectIn(mi_control,'mirrorSide')
                #cgmMeta.cgmAttr(mi_control,'mirrorAxis').doCopyTo(mObj,connectTargetToSource = 1)
                #ATTR.connect(mObj.mNode + '.mirrorAxis',"{0}.mirrorAxis".format(mi_control.mNode))
                #ATTR.connect(mObj.mNode + 'mirrorSide',"{0}.mirrorSide".format(mi_control.mNode))

        #Freeze ============================================================================================
        if not shapeParentTo and noFreeze is not True:
            if not freezeAll:
                if mi_control.getAttr(
                        'cgmName'
                ) == 'cog' or controlType in __l_fullFreezeTypes__:
                    mc.makeIdentity(mi_control.mNode,
                                    apply=True,
                                    t=1,
                                    r=1,
                                    s=1,
                                    n=0)
                else:
                    mc.makeIdentity(mi_control.mNode,
                                    apply=True,
                                    t=1,
                                    r=0,
                                    s=1,
                                    n=0)
            else:
                mc.makeIdentity(mi_control.mNode,
                                apply=True,
                                t=1,
                                r=1,
                                s=1,
                                n=0)

        #Mirror attriubte Bridges ==========================================================================
        if addForwardBack:
            mPlug_forwardBackDriver = cgmMeta.cgmAttr(mi_control,
                                                      "forwardBack",
                                                      attrType='float',
                                                      keyable=True)
            try:
                mPlug_forwardBackDriven = cgmMeta.validateAttrArg(
                    [mi_control, addForwardBack])['mi_plug']
            except Exception, error:
                raise StandardError, "push pull driver | %s" % (error)

            if str_mirrorSide.lower() == 'right':
                arg_forwardBack = "%s = -%s" % (
                    mPlug_forwardBackDriven.p_combinedShortName,
                    mPlug_forwardBackDriver.p_combinedShortName)
            else:
                arg_forwardBack = "%s = %s" % (
                    mPlug_forwardBackDriven.p_combinedShortName,
                    mPlug_forwardBackDriver.p_combinedShortName)

            mPlug_forwardBackDriven.p_locked = True
            mPlug_forwardBackDriven.p_hidden = True
            mPlug_forwardBackDriven.p_keyable = False
            NodeF.argsToNodes(arg_forwardBack).doBuild()

        if _addMirrorAttributeBridges:
            for l_bridge in _addMirrorAttributeBridges:
                _attrName = VALID.stringArg(l_bridge[0])
                _attrToBridge = VALID.stringArg(l_bridge[1])
                if not mi_control.hasAttr(_attrToBridge):
                    raise StandardError, "['%s' lacks the bridge attr '%s']" % (
                        mi_control.p_nameShort, _attrToBridge)

                mPlug_attrBridgeDriver = cgmMeta.cgmAttr(mi_control,
                                                         _attrName,
                                                         attrType='float',
                                                         keyable=True)
                try:
                    mPlug_attrBridgeDriven = cgmMeta.validateAttrArg(
                        [mi_control, _attrToBridge])['mi_plug']
                except Exception, error:
                    raise StandardError, "[validate control attribute bridge attr]{%s}" % (
                        error)

                if str_mirrorSide.lower() == 'right':
                    arg_attributeBridge = "%s = -%s" % (
                        mPlug_attrBridgeDriven.p_combinedShortName,
                        mPlug_attrBridgeDriver.p_combinedShortName)
                else:
                    arg_attributeBridge = "%s = %s" % (
                        mPlug_attrBridgeDriven.p_combinedShortName,
                        mPlug_attrBridgeDriver.p_combinedShortName)

                mPlug_attrBridgeDriven.p_locked = True
                mPlug_attrBridgeDriven.p_hidden = True
                mPlug_attrBridgeDriven.p_keyable = False
                NodeF.argsToNodes(arg_attributeBridge).doBuild()
Esempio n. 16
0
def split_blends(driven1 = None,
                 driven2 = None,
                 sealDriver1 = None,
                 sealDriver2 = None,
                 sealDriverMid = None,
                 nameSeal1 = 'left',
                 nameSeal2 = 'right',
                 nameSealMid = 'center',
                 maxValue = 10.0,
                 inTangent = 'auto',
                 outTangent = 'auto',
                 settingsControl = None,
                 buildNetwork = True):
    """
    Split for blend data
    """
    try:
        _str_func = 'split_blends'
        d_dat = {1:{'dist1':[],
                    'dist2':[],
                    'distMid':[]},
                 2:{'dist1':[],
                    'dist2':[],
                    'distMid':[]}}
        _lock=False
        _hidden=False
        #>>> Verify ===================================================================================
        log.debug("|{0}| >> driven1 [Check]...".format(_str_func))        
        d_dat[1]['driven'] = cgmMeta.validateObjListArg(driven1,
                                                        mType = 'cgmObject',
                                                        mayaType=['joint'], noneValid = False)
        log.debug("|{0}| >> driven2 [Check]...".format(_str_func))                
        d_dat[2]['driven'] = cgmMeta.validateObjListArg(driven2,
                                                        mType = 'cgmObject',
                                                        mayaType=['joint'], noneValid = False)

        mSettings = cgmMeta.validateObjArg(settingsControl,'cgmObject')
        pprint.pprint(d_dat[1]['driven'])
        pprint.pprint(d_dat[2]['driven'])

        if buildNetwork:
            log.debug("|{0}| >> buildNetwork | building driver attrs...".format(_str_func))                            
            mPlug_sealMid = cgmMeta.cgmAttr(mSettings.mNode,
                                            'seal_{0}'.format(nameSealMid),
                                            attrType='float',
                                            minValue=0.0,
                                            maxValue = maxValue,
                                            lock=False,
                                            keyable=True)
            mPlug_seal1 = cgmMeta.cgmAttr(mSettings.mNode,
                                          'seal_{0}'.format(nameSeal1),
                                          attrType='float',
                                          minValue=0.0,
                                          maxValue = maxValue,
                                          lock=False,
                                          keyable=True)
            mPlug_seal2 = cgmMeta.cgmAttr(mSettings.mNode,
                                          'seal_{0}'.format(nameSeal2),
                                          attrType='float',
                                          minValue=0.0,
                                          maxValue = maxValue,
                                          lock=False,
                                          keyable=True)            

        pos1 = POS.get(sealDriver1)
        pos2 = POS.get(sealDriver2)
        posMid = POS.get(sealDriverMid)

        normMin = maxValue * .1
        normMax = maxValue - normMin

        for idx,dat in d_dat.iteritems():
            mDriven = dat['driven']

            d_tmp = {'dist1':{'pos':pos1,
                              'res':dat['dist1']},
                     'dist2':{'pos':pos2,
                              'res':dat['dist2']},
                     'distMid':{'pos':posMid,
                                'res':dat['distMid']},
                     }

            for mObj in mDriven:
                for n,d in d_tmp.iteritems():
                    dTmp = DIST.get_distance_between_points(d['pos'],mObj.p_position)
                    if MATH.is_float_equivalent(dTmp,0.0):
                        dTmp = 0.0
                    d['res'].append(dTmp)

            dat['dist1Norm'] = MATH.normalizeList(dat['dist1'],normMax)
            dat['dist2Norm'] = MATH.normalizeList(dat['dist2'],normMax)
            dat['distMidNorm'] = MATH.normalizeList(dat['distMid'],normMax)

            dat['dist1On'] = [v + normMin for v in dat['dist1Norm']]
            dat['dist2On'] = [v + normMin for v in dat['dist2Norm']]
            dat['distMidOn'] = [v + normMin for v in dat['distMidNorm']]
            
            if buildNetwork:
                log.debug("|{0}| >> buildNetwork | building driver attrs...".format(_str_func))
                dat['mPlugs'] = {'1':{},
                                 '2':{},
                                 'mid':{},
                                 'on':{},
                                 'off':{},
                                 'sum':{}}
                for i,mObj in enumerate(mDriven):
                    log.debug("|{0}| >> buildNetwork | On: {1}".format(_str_func,mObj) + cgmGEN._str_subLine)
                    dat['mPlugs']['1'][i] = cgmMeta.cgmAttr(mSettings,
                                                            'set{0}_idx{1}_blend{2}'.format(idx,i,'1'),
                                                            attrType='float',
                                                            keyable = False,lock=_lock,hidden=_hidden)
                    dat['mPlugs']['2'][i] = cgmMeta.cgmAttr(mSettings,
                                                            'set{0}_idx{1}_blend{2}'.format(idx,i,'2'),
                                                            attrType='float',
                                                            keyable = False,lock=_lock,hidden=_hidden)
                    dat['mPlugs']['mid'][i] = cgmMeta.cgmAttr(mSettings,
                                                              'set{0}_idx{1}_blend{2}'.format(idx,i,'mid'),
                                                              attrType='float',
                                                              keyable = False,lock=_lock,hidden=_hidden)                    
                    dat['mPlugs']['on'][i] = cgmMeta.cgmAttr(mSettings,
                                                             'set{0}_idx{1}_on'.format(idx,i),
                                                             attrType='float',
                                                             keyable = False,lock=_lock,hidden=_hidden)
                    dat['mPlugs']['off'][i] = cgmMeta.cgmAttr(mSettings,
                                                              'set{0}_idx{1}_off'.format(idx,i),
                                                              attrType='float',
                                                              keyable = False,lock=_lock,hidden=_hidden)

                    dat['mPlugs']['sum'][i] = cgmMeta.cgmAttr(mSettings,
                                                              'set{0}_idx{1}_sum'.format(idx,i),
                                                              attrType='float',
                                                              keyable = False,lock=_lock,hidden=_hidden)

                    args = []
                    args.append("{0} = {1} + {2} + {3}".format(dat['mPlugs']['sum'][i].p_combinedShortName,
                                                               dat['mPlugs']['1'][i].p_combinedShortName,
                                                               dat['mPlugs']['2'][i].p_combinedShortName,
                                                               dat['mPlugs']['mid'][i].p_combinedShortName))
                    args.append("{0} = clamp(0 , 1.0, {1}".format(dat['mPlugs']['on'][i].p_combinedShortName,
                                                                  dat['mPlugs']['sum'][i].p_combinedShortName,))
                    args.append("{0} = 1.0 - {1}".format(dat['mPlugs']['off'][i].p_combinedShortName,
                                                         dat['mPlugs']['on'][i].p_combinedShortName,))                    
                    for a in args:
                        NODEFAC.argsToNodes(a).doBuild()

                    zeroMid = 0
                    zero1 = 0
                    zero2 = 0
                    
                    """
                    1
                    'dist1Norm': [9.0, 7.202468187218439, 4.077128668939619],
                    'dist1On': [10.0, 8.20246818721844, 5.077128668939619],
                    'dist2': [2.055457665682541, 3.632951746156667, 4.537290944991008],
                    'dist2Norm': [4.077128668939596, 7.206186711809993, 9.0],
                    'dist2On': [5.077128668939596, 8.206186711809993, 10.0],
                    
                    2
                    'dist1On': [10.0, 7.77630635569009, 4.3748619466292595],
                    'dist2': [1.6982080013368184, 3.4097921203066526, 4.528739916989064],
                    'dist2Norm': [3.3748619466301477, 6.7763063556899725, 9.0],
                    'dist2On': [4.374861946630148, 7.7763063556899725, 10.0],
                    
                    """
                    

                    try:zero1 = dat['dist1On'][i+1]
                    except:zero1 = 0
                    
                    if i:
                        try:zero2 = dat['dist2On'][i-1]
                        except:zero2 = 0
                        
                    #try:zeroMid = dat['distMidOn'][i-1]
                    #except:zeroMid= 0
                        
                   #if i:
                   #     zero1 = dat['dist1On'][i-1]

                    #try:zero2 = dat['dist2On'][i+1]
                    #except:zero2 = 0
                        #zero1 = MATH.Clamp(dat['dist1On'][i-1],normMin,maxValue)
                        #zero2 = MATH.Clamp(dat['dist2On'][i-1],normMin,maxValue)

                    mc.setDrivenKeyframe(dat['mPlugs']['1'][i].p_combinedShortName,
                                         currentDriver = mPlug_seal1.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,
                                         driverValue = zero1,value = 0.0)

                    mc.setDrivenKeyframe(dat['mPlugs']['1'][i].p_combinedShortName,
                                         currentDriver = mPlug_seal1.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,                                         
                                         driverValue = dat['dist1On'][i],value = 1.0)


                    mc.setDrivenKeyframe(dat['mPlugs']['2'][i].p_combinedShortName,
                                         currentDriver = mPlug_seal2.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,                                         
                                         driverValue = zero2,value = 0.0)                    
                    mc.setDrivenKeyframe(dat['mPlugs']['2'][i].p_combinedShortName,
                                         currentDriver = mPlug_seal2.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,                                         
                                         driverValue = dat['dist2On'][i],value = 1.0)

                    last1 = dat['dist1On'][i]
                    last2 = dat['dist2On'][i]


                    mc.setDrivenKeyframe(dat['mPlugs']['mid'][i].p_combinedShortName,
                                         currentDriver = mPlug_sealMid.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,                                         
                                         driverValue = zeroMid,value = 0.0)                    
                    mc.setDrivenKeyframe(dat['mPlugs']['mid'][i].p_combinedShortName,
                                         currentDriver = mPlug_sealMid.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,                                         
                                         driverValue = dat['distMidOn'][i],value = 1.0)

        pprint.pprint(d_dat)
        #return d_dat

        for idx,dat in d_dat.iteritems():
            for plugSet,mSet in dat['mPlugs'].iteritems():
                for n,mPlug in mSet.iteritems():
                    mPlug.p_lock=True
                    mPlug.p_hidden = True

        return d_dat

    except Exception,err:
        cgmGEN.cgmExceptCB(Exception,err,msg=vars())    
Esempio n. 17
0
                                          scn=True)
            assert d_return['ml_nodes'][0].operation == 1, "Operation not 1"
            combinedName = d_return['ml_outPlugs'][0].p_combinedName
            assert str(plugCall[0]) == d_return['ml_outPlugs'][
                0].p_combinedName, "Connections don't match: %s | %s" % (
                    plugCall[0], combinedName)
            assert mObj.simpleInversion == -mObj.tx, "Inversion doesn't match"

        except StandardError, error:
            log.error("test_argsToNodes>>Simple inversion Failure! '%s'" %
                      (error))
            raise StandardError, error

        try:  #Simple Average
            arg = "%s.sumAverage1 = 4 >< 4 >< 4" % (str_obj)
            d_return = NODEFACTORY.argsToNodes(arg).doBuild()
            assert d_return['l_nodes'], "Should have made something"
            assert len(d_return['l_nodes']
                       ) == 1, "Only one node should be made. Found: %s" % len(
                           d_return['l_nodes'])
            assert d_return['ml_outPlugs'][0].obj.getMayaType(
            ) == 'plusMinusAverage', "%s != pma" % d_return['ml_outPlugs'][
                0].obj.getMayaType()
            assert d_return['ml_nodes'][0].operation == 3, "Operation not 3"

            assert mObj.sumAverage1 == 4, "Average is wrong: 4 != %s" % mObj.sumAverage1

        except StandardError, error:
            log.error("test_argsToNodes>>Simple sum Failure! '%s'" % (error))
            raise StandardError, error
Esempio n. 18
0
def build_rig(goInstance = None):
    class fncWrap(modUtils.rigStep):
	def __init__(self,goInstance = None):
	    super(fncWrap, self).__init__(goInstance)
	    self._str_funcName = 'build_rig(%s)'%self.d_kws['goInstance']._strShortName	
	    self.__dataBind__()
	    self.l_funcSteps = [{'step':'Build NOT BROKEN UP YET','call':self.build}]	
	    #=================================================================
	    
	def build(self):#================================================================================   	
		    
	    try:#>>>Get data
		orientation = self._go._jointOrientation or modules.returnSettingsData('jointOrientation')
		mi_moduleParent = False
		if self._go._mi_module.getMessage('moduleParent'):
		    mi_moduleParent = self._go._mi_module.moduleParent
		    
		mi_controlIK = self._go._i_rigNull.controlIK
		ml_controlsFK =  self._go._i_rigNull.msgList_get('controlsFK')    
		ml_rigJoints = self._go._i_rigNull.msgList_get('rigJoints')
		ml_blendJoints = self._go._i_rigNull.msgList_get('blendJoints')
		mi_settings = self._go._i_rigNull.settings
		
		log.info("mi_controlIK: %s"%mi_controlIK.getShortName())
		log.info("ml_controlsFK: %s"%[o.getShortName() for o in ml_controlsFK])
		log.info("mi_settings: %s"%mi_settings.getShortName())
		
		log.info("ml_rigJoints: %s"%[o.getShortName() for o in ml_rigJoints])
		log.info("ml_blendJoints: %s"%[o.getShortName() for o in ml_blendJoints])
		
		ml_segmentHandleChains = self._go._get_segmentHandleChains()
		ml_segmentChains = self._go._get_segmentChains()
		ml_influenceChains = self._go._get_influenceChains()	
		
		aimVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[0])
		upVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[1]) 
		
		#Build our contrain to pool
		l_constrainTargetJoints = []
		"""
		for ml_chain in ml_segmentChains:
		    l_constrainTargetJoints.extend([i_jnt.mNode for i_jnt in ml_chain[:-1]])
		l_constrainTargetJoints.extend([i_jnt.mNode for i_jnt in ml_blendJoints[-2:]])
		"""
		if not l_constrainTargetJoints:
		    l_constrainTargetJoints = [i_jnt.mNode for i_jnt in ml_blendJoints]
		    
		for i_jnt in ml_blendJoints:
		    attributes.doSetLockHideKeyableAttr(i_jnt.mNode,lock=True, visible=True, keyable=False)
		    i_jnt.radius = 0#This is how we can hide joints without hiding them since we have children we want to ride along
		    i_jnt.drawStyle = 2
		    
		for i_jnt in ml_controlsFK:
		    i_jnt.radius = 0#This is how we can hide joints without hiding them since we have children we want to ride along
		    i_jnt.drawStyle = 2		    
		    
		#Set group lockks
		for mCtrl in self._go._i_rigNull.msgList_get('controlsAll'):
		    try:mCtrl._setControlGroupLocks()	
		    except Exception,error:log.error("%s _setControlGroupLocks failed on object: %s"%(self._str_reportStart,mCtrl.p_nameShort))
	    	    
	    except Exception,error:
		log.error("finger.build_rig>> Gather data fail!")
		raise Exception,error
	    

	    #Dynamic parent groups
	    #====================================================================================
	    try:#>>>> IK
		ml_fingerDynParents = []
		#Build our dynamic groups
		"""
		1)wrist
		2)fk root
		3)...
		4)world
		"""
		if mi_moduleParent:
		    mi_blendEndJoint = mi_moduleParent.rigNull.msgList_get('blendJoints')[-1]	    
		    mi_parentRigNull = mi_moduleParent.rigNull
		    if mi_moduleParent:
			mi_parentRigNull = mi_moduleParent.rigNull
			buffer = mi_parentRigNull.msgList_get('moduleJoints')
			if buffer:
			    ml_fingerDynParents.append( buffer[-1])	
			
		ml_fingerDynParents.append( ml_controlsFK[0])	
			
		mi_spine = self._go._mi_module.modulePuppet.getModuleFromDict(moduleType= ['torso','spine'])
		if mi_spine:
		    log.info("spine found: %s"%mi_spine)	    
		    mi_spineRigNull = mi_spine.rigNull
		    ml_fingerDynParents.append( mi_spineRigNull.handleIK )	    
		    ml_fingerDynParents.append( mi_spineRigNull.cog )
		    ml_fingerDynParents.append( mi_spineRigNull.hips )	    
		    
		ml_fingerDynParents.append(self._go._i_masterControl)
		if mi_controlIK.getMessage('spacePivots'):
		    ml_fingerDynParents.extend(mi_controlIK.msgList_get('spacePivots',asMeta = True))	
		log.info("%s.build_rig>>> Dynamic parents to add: %s"%(self._go._strShortName,[i_obj.getShortName() for i_obj in ml_fingerDynParents]))
		
	    
		#Add our parents
		i_dynGroup = mi_controlIK.dynParentGroup
		log.info("Dyn group at setup: %s"%i_dynGroup)
		i_dynGroup.dynMode = 0
		
		for o in ml_fingerDynParents:
		    i_dynGroup.addDynParent(o)
		i_dynGroup.rebuild()
		
	    except Exception,error:
		log.error("finger.build_rig>> finger ik dynamic parent setup fail!")
		raise Exception,error
	    
            self._go.collect_worldDynDrivers()#...collect world dyn drivers
	
	    #Make some connections
	    #====================================================================================
	    
	    #Parent and constrain joints
	    #====================================================================================
	    ml_rigJoints[0].parent = self._go._i_deformNull.mNode#shoulder
	    #ml_rigJoints[-1].parent = self._go._i_deformNull.mNode#wrist
	
	    #For each of our rig joints, find the closest constraint target joint
	    log.info("targetJoints: %s"%l_constrainTargetJoints)
	    l_rigJoints = [i_jnt.mNode for i_jnt in ml_rigJoints]
	    for i,i_jnt in enumerate(ml_rigJoints):
		#Don't try scale constraints in here, they're not viable
		log.info("Checking: '%s'"%i_jnt.getShortName())
		attachJoint = distance.returnClosestObject(i_jnt.mNode,l_constrainTargetJoints)
		log.info("'%s'<< drives <<'%s'"%(i_jnt.getShortName(),cgmMeta.cgmNode(attachJoint).getShortName()))
		pntConstBuffer = mc.pointConstraint(attachJoint,i_jnt.mNode,maintainOffset=False,weight=1)
		orConstBuffer = mc.orientConstraint(attachJoint,i_jnt.mNode,maintainOffset=False,weight=1)
		mc.connectAttr((attachJoint+'.s'),(i_jnt.mNode+'.s'))
	     
	    #Setup finger scaling
	    #==================================================================================== 
	    #Parent deform Null to last blend parent
	    if mi_moduleParent:
		mi_blendEndJoint = mi_moduleParent.rigNull.msgList_get('blendJoints')[-1]
		mi_parentBlendPlug = cgmMeta.cgmAttr(mi_blendEndJoint,'scale')
		self._go._i_deformNull.parent = mi_blendEndJoint.mNode
	    
		#connect blend joint scale to the finger blend joints
		for i_jnt in ml_blendJoints:
		    mi_parentBlendPlug.doConnectOut("%s.scale"%i_jnt.mNode)
		    
		#intercept world scale on finger IK and add in the blend wrist scale
		mPlug_moduleMasterScale = cgmMeta.cgmAttr(self._go._i_rigNull,'masterScale',value = 1.0,defaultValue=1.0)
		mPlug_globalScale = cgmMeta.cgmAttr(self._go._i_masterControl.mNode,'scaleY')
		mPlug_globalScale.doConnectOut(mPlug_moduleMasterScale)
		NodeF.argsToNodes("%s = %s * %s.sy"%(mPlug_moduleMasterScale.p_combinedShortName,
			                             mPlug_globalScale.p_combinedShortName,
			                             mi_blendEndJoint.p_nameShort)).doBuild()
	    
	    try:#Vis Network, lock and hide
		#====================================================================================
		#Segment handles need to lock
		for ml_chain in ml_segmentHandleChains:
		    for i_obj in ml_chain:
			attributes.doSetLockHideKeyableAttr(i_obj.mNode,lock=True,
			                                    visible=False, keyable=False,
			                                    channels=['s%s'%orientation[1],
			                                              's%s'%orientation[2]])
			
		attributes.doSetLockHideKeyableAttr(mi_settings.mNode,lock=True,
		                                    visible=False, keyable=False)
		attributes.doSetLockHideKeyableAttr(ml_blendJoints[0].mNode,lock=True,
		                                    visible=True, keyable=False)
		
		for i,mCtrl in enumerate(ml_controlsFK):
		    l_attrs = ['sx','sy','sz','v']
		    if i != 0:
			l_attrs.extend(['tx','ty','tz'])
			
		    attributes.doSetLockHideKeyableAttr(mCtrl.mNode,channels=l_attrs,
		                                        lock=True, visible=False, keyable=False)
		    

		
		attributes.doSetLockHideKeyableAttr(mi_controlIK.mNode,channels=['sx','sy','sz','v'],
	                                            lock=True, visible=False, keyable=False)	    
	    except Exception,error:
		raise Exception,"Lock and hide fail! | {0}".format(error)	 
Esempio n. 19
0
                        raise StandardError, "[validate control attribute bridge attr]{%s}" % (
                            error)

                    if self.str_mirrorSide.lower() == 'right':
                        arg_attributeBridge = "%s = -%s" % (
                            mPlug_attrBridgeDriven.p_combinedShortName,
                            mPlug_attrBridgeDriver.p_combinedShortName)
                    else:
                        arg_attributeBridge = "%s = %s" % (
                            mPlug_attrBridgeDriven.p_combinedShortName,
                            mPlug_attrBridgeDriver.p_combinedShortName)

                    mPlug_attrBridgeDriven.p_locked = True
                    mPlug_attrBridgeDriven.p_hidden = True
                    mPlug_attrBridgeDriven.p_keyable = False
                    NodeF.argsToNodes(arg_attributeBridge).doBuild()

        def _lockNHide(self):
            autoLockNHide = self.d_kws['autoLockNHide']
            if autoLockNHide:
                if self.mi_control.hasAttr('cgmTypeModifier'):
                    if self.mi_control.cgmTypeModifier.lower() == 'fk':
                        attributes.doSetLockHideKeyableAttr(
                            self.mi_control.mNode,
                            channels=['tx', 'ty', 'tz', 'sx', 'sy', 'sz'])
                if self.mi_control.cgmName.lower() == 'cog':
                    attributes.doSetLockHideKeyableAttr(
                        self.mi_control.mNode, channels=['sx', 'sy', 'sz'])
                cgmMeta.cgmAttr(self.mi_control,
                                'visibility',
                                lock=True,
Esempio n. 20
0
for mObj in cgmMeta.validateObjListArg(mc.ls(sl=True)):
    mDup = mObj.doDuplicate(po=True, ic=False)
    #RIG.create_at(mObj.mNode,'joint')
    mDup.parent = mObj
    mDup.segmentScaleCompensate = 0
    mDup.doStore('cgmTypeModifier','armor')
    mDup.doName()
    mDup.setAttrFlags(['scale'],lock=False)
    #ATTR.set(mDup.mNode,'segmentScaleCompensate',0)
    

#Clean up...
#Scale driver - 
import cgm.core.classes.NodeFactory as NODEF
arg = "tongue_splineIKCurve.masterScale = head_ik_anim.sy * MasterControl_masterAnim.masterScale"
NODEF.argsToNodes(arg).doBuild()
_crvs = [u'r_uprLip_CRV_splineIKCurve',
         u'r_lwrLip_CRV_splineIKCurve',
         u'l_uprLip_CRV_splineIKCurve',
         u'l_lwrLip_CRV_splineIKCurve']
for crv in _crvs:
    arg = "{0}.masterScale = head_ik_anim.sy * MasterControl_masterAnim.masterScale".format(crv)
    NODEF.argsToNodes(arg).doBuild()
    
    
#RENAME -------------------------------------------------------------------------
#def sceneCleanBrazen():
ml_joints = cgmMeta.validateObjListArg(mc.ls(type='joint'))
for mJnt in ml_joints:
    if not mJnt.getShapes():
        if mJnt.p_nameShort.endswith('jnt'):
Esempio n. 21
0
class Test_argsToNodes(unittest.TestCase):
    def test_a_condition(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        arg = "%s.condResult = if %s.ty == 3:5 else 1" % (str_obj, str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()

        _ml_nodes = d_return.get('ml_nodes')
        _ml_outPlugs = d_return.get('ml_outPlugs')
        _plugCall = mc.listConnections("%s.condResult" % (mObj.mNode),
                                       plugs=True,
                                       scn=True)
        _combinedName = _ml_outPlugs[0].p_combinedName

        self.assertIsNotNone(_ml_outPlugs)
        self.assertEqual(len(_ml_outPlugs), 1)
        self.assertIsNotNone(_ml_nodes)
        self.assertEqual(len(_ml_nodes), 1)

        self.assertEqual(_ml_nodes[0].getMayaType(), 'condition')

        self.assertEqual(_ml_nodes[0].operation, 0)
        self.assertEqual(str(_plugCall[0]), _combinedName)

        mObj.ty = 3
        self.assertEqual(mObj.condResult, 5)
        mObj.ty = 1
        self.assertEqual(mObj.condResult, 1)

        return

    def test_b_multiInvsersion(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        arg = "%s.inverseMultThree = 3 * -%s.tx" % (str_obj, str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()
        log.debug(d_return['ml_outPlugs'])
        assert d_return['l_nodes'], "Should have made something"
        assert len(d_return['l_nodes']
                   ) == 2, "Only two nodes should be made. Found: %s" % len(
                       d_return['l_nodes'])
        assert d_return['ml_nodes'][0].getMayaType(
        ) == 'multiplyDivide', "%s != md" % d_return['ml_nodes'][
            0].getMayaType()
        assert d_return['ml_nodes'][1].getMayaType(
        ) == 'multiplyDivide', "%s != md" % d_return['ml_nodes'][
            1].getMayaType()

        plugCall = mc.listConnections("%s.inverseMultThree" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        assert d_return['ml_nodes'][-1].operation == 1, "Operation not 1"
        combinedName = d_return['ml_outPlugs'][-1].p_combinedName
        assert str(plugCall[0]) == d_return['ml_outPlugs'][
            -1].p_combinedName, "Connections don't match: %s | %s" % (
                plugCall[0], combinedName)
        assert mObj.inverseMultThree == 3 * -mObj.tx, "Inversion doesn't match"

    def test_c_simpleInvsersion(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        arg = "%s.simpleInversion = -%s.tx" % (str_obj, str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()
        log.debug(d_return['ml_outPlugs'])
        assert d_return['l_nodes'], "Should have made something"
        assert len(d_return['l_nodes']
                   ) == 1, "Only one node should be made. Found: %s" % len(
                       d_return['l_nodes'])
        assert d_return['ml_outPlugs'][0].obj.getMayaType(
        ) == 'multiplyDivide', "%s != pma" % d_return['ml_outPlugs'][
            0].obj.getMayaType()
        plugCall = mc.listConnections("%s.simpleInversion" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        assert d_return['ml_nodes'][0].operation == 1, "Operation not 1"
        combinedName = d_return['ml_outPlugs'][0].p_combinedName
        assert str(plugCall[0]) == d_return['ml_outPlugs'][
            0].p_combinedName, "Connections don't match: %s | %s" % (
                plugCall[0], combinedName)
        assert mObj.simpleInversion == -mObj.tx, "Inversion doesn't match"

    def test_d_average(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        arg = "%s.sumAverage1 = 4 >< 4 >< 4" % (str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()
        assert d_return['l_nodes'], "Should have made something"
        assert len(d_return['l_nodes']
                   ) == 1, "Only one node should be made. Found: %s" % len(
                       d_return['l_nodes'])
        assert d_return['ml_outPlugs'][0].obj.getMayaType(
        ) == 'plusMinusAverage', "%s != pma" % d_return['ml_outPlugs'][
            0].obj.getMayaType()
        assert d_return['ml_nodes'][0].operation == 3, "Operation not 3"

        assert mObj.sumAverage1 == 4, "Average is wrong: 4 != %s" % mObj.sumAverage1

    def test_e_directConnect(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        arg = "%s.directConnect = %s.ty" % (str_obj, str_obj)
        NODEFACTORY.argsToNodes(arg).doBuild()
        log.debug(
            mc.listConnections("%s.directConnect" % str_obj,
                               source=True,
                               scn=True))
        plugCall = mc.listConnections("%s.directConnect" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        assert plugCall[0] == '%s.translateY' % mObj.getShortName(), log.error(
            "Direct connect failed. Plug call:{0}".format(plugCall))

    def test_f_multiConnect(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        arg = "%s.directConnect, %s.ry = %s.ty" % (str_obj, str_obj, str_obj)
        NODEFACTORY.argsToNodes(arg).doBuild()
        log.debug(
            mc.listConnections("%s.directConnect" % str_obj,
                               source=True,
                               scn=True))
        plugCall = mc.listConnections("%s.directConnect" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        assert plugCall[0] == '%s.translateY' % mObj.getShortName(), log.error(
            "Direct connect failed: directConnect")
        plugCall = mc.listConnections("%s.rotateY" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        log.debug(plugCall)
        assert plugCall[0] == '%s.translateY' % mObj.getShortName(), log.error(
            "Direct connect failed: rotateY")

    def test_g_sum(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        mObj.tx = 1
        mObj.ty = 2
        mObj.tz = 3
        arg = "%s.sumResult1 = %s.tx - %s.ty - %s.tz" % (str_obj, str_obj,
                                                         str_obj, str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()
        log.debug(d_return['ml_outPlugs'])
        assert d_return['l_nodes'], "Should have made something"
        assert len(d_return['l_nodes']
                   ) == 1, "Only one node should be made. Found: %s" % len(
                       d_return['l_nodes'])
        assert d_return['ml_outPlugs'][0].obj.getMayaType(
        ) == 'plusMinusAverage', "%s != pma" % d_return['ml_outPlugs'][
            0].obj.getMayaType()
        plugCall = mc.listConnections("%s.sumResult1" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        assert d_return['ml_nodes'][0].operation == 2, "Operation not 2"
        combinedName = d_return['ml_outPlugs'][0].p_combinedName
        assert str(plugCall[0]) == d_return['ml_outPlugs'][
            0].p_combinedName, "Connections don't match: %s | %s" % (
                plugCall[0], combinedName)
        assert mObj.sumResult1 == mObj.tx - mObj.ty - mObj.tz, "Sum doesn't match"

    def test_h_clamp(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        mObj.tz = 3
        arg = "%s.clampResult = clamp(0,1,%s.tz" % (str_obj, str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()
        log.debug(d_return['ml_outPlugs'])
        assert d_return['l_nodes'], "Should have made something"
        assert len(d_return['l_nodes']
                   ) == 1, "Only one node should be made. Found: %s" % len(
                       d_return['l_nodes'])
        assert d_return['ml_outPlugs'][0].obj.getMayaType(
        ) == 'clamp', "%s != clamp" % d_return['ml_outPlugs'][
            0].obj.getMayaType()
        plugCall = mc.listConnections("%s.clampResult" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        combinedName = d_return['ml_outPlugs'][0].p_combinedName
        assert str(plugCall[0]) == d_return['ml_outPlugs'][
            0].p_combinedName, "Connections don't match: %s | %s" % (
                plugCall[0], combinedName)
        assert mObj.clampResult == 1, "Value 1 fail"
        mObj.tz = .5
        assert mObj.clampResult == .5, "Value 2 fail"

    def test_i_range(self):
        try:
            mObj = cgmMeta.cgmObject('argsToNodes_catch')
        except:
            mObj = cgmMeta.cgmObject(name='argsToNodes_catch')
        str_obj = mObj.p_nameShort

        mObj.tz = 5
        arg = "%s.setRangeResult = setRange(0,1,0,10,%s.tz" % (str_obj,
                                                               str_obj)
        d_return = NODEFACTORY.argsToNodes(arg).doBuild()
        log.debug(d_return['ml_outPlugs'])
        assert d_return['l_nodes'], "Should have made something"
        assert len(d_return['l_nodes']
                   ) == 1, "Only one node should be made. Found: %s" % len(
                       d_return['l_nodes'])
        assert d_return['ml_outPlugs'][0].obj.getMayaType(
        ) == 'setRange', "%s != setRange" % d_return['ml_outPlugs'][
            0].obj.getMayaType()
        plugCall = mc.listConnections("%s.setRangeResult" % (mObj.mNode),
                                      plugs=True,
                                      scn=True)
        combinedName = d_return['ml_outPlugs'][0].p_combinedName
        assert str(plugCall[0]) == d_return['ml_outPlugs'][
            0].p_combinedName, "Connections don't match: %s | %s" % (
                plugCall[0], combinedName)
        assert mObj.setRangeResult == .5, "Value 1 fail"
        mObj.tz = 10
        assert mObj.setRangeResult == 1, "Value 2 fail"

    def holder(self):
        mObj = cgmMeta.cgmObject(name='awesomeArgObj_loc')
        str_obj = mObj.getShortName()

        try:  #Mult inversion
            arg = "%s.inverseMultThree = 3 * -%s.tx" % (str_obj, str_obj)
            d_return = NODEFACTORY.argsToNodes(arg).doBuild()
            log.debug(d_return['ml_outPlugs'])
            assert d_return['l_nodes'], "Should have made something"
            assert len(
                d_return['l_nodes']
            ) == 2, "Only two nodes should be made. Found: %s" % len(
                d_return['l_nodes'])
            assert d_return['ml_nodes'][0].getMayaType(
            ) == 'multiplyDivide', "%s != md" % d_return['ml_nodes'][
                0].getMayaType()
            assert d_return['ml_nodes'][1].getMayaType(
            ) == 'multiplyDivide', "%s != md" % d_return['ml_nodes'][
                1].getMayaType()

            plugCall = mc.listConnections("%s.inverseMultThree" % (mObj.mNode),
                                          plugs=True,
                                          scn=True)
            assert d_return['ml_nodes'][-1].operation == 1, "Operation not 1"
            combinedName = d_return['ml_outPlugs'][-1].p_combinedName
            assert str(plugCall[0]) == d_return['ml_outPlugs'][
                -1].p_combinedName, "Connections don't match: %s | %s" % (
                    plugCall[0], combinedName)
            assert mObj.inverseMultThree == 3 * -mObj.tx, "Inversion doesn't match"

        except StandardError, error:
            log.error("test_argsToNodes>>Inversion mult 3 Failure! '%s'" %
                      (error))
            raise StandardError, error

        try:  #Simple inversion
            arg = "%s.simpleInversion = -%s.tx" % (str_obj, str_obj)
            d_return = NODEFACTORY.argsToNodes(arg).doBuild()
            log.debug(d_return['ml_outPlugs'])
            assert d_return['l_nodes'], "Should have made something"
            assert len(d_return['l_nodes']
                       ) == 1, "Only one node should be made. Found: %s" % len(
                           d_return['l_nodes'])
            assert d_return['ml_outPlugs'][0].obj.getMayaType(
            ) == 'multiplyDivide', "%s != pma" % d_return['ml_outPlugs'][
                0].obj.getMayaType()
            plugCall = mc.listConnections("%s.simpleInversion" % (mObj.mNode),
                                          plugs=True,
                                          scn=True)
            assert d_return['ml_nodes'][0].operation == 1, "Operation not 1"
            combinedName = d_return['ml_outPlugs'][0].p_combinedName
            assert str(plugCall[0]) == d_return['ml_outPlugs'][
                0].p_combinedName, "Connections don't match: %s | %s" % (
                    plugCall[0], combinedName)
            assert mObj.simpleInversion == -mObj.tx, "Inversion doesn't match"

        except StandardError, error:
            log.error("test_argsToNodes>>Simple inversion Failure! '%s'" %
                      (error))
            raise StandardError, error
def create(obj,parentTo = False):
    """   
    Create a spacePivot from a given object

    :parameters:
        *a(varied): - Uses validate_arg 

    :returns
        mSpacePivot(metaList)
    """ 
    _str_func = 'create'
    
    #....inital...
    i_obj = cgmMeta.validateObjArg(obj,cgmMeta.cgmObject,noneValid=False)    
    i_parent = cgmMeta.validateObjArg(parentTo,cgmMeta.cgmObject,noneValid=True)    
    bbSize = DIST.get_bb_size(i_obj.mNode)
    size = max(bbSize)

    #>>>Create #====================================================
    #CURVES.create_controlCurve(i_obj.mNode,'jack')
    i_control = cgmMeta.asMeta(CURVES.create_controlCurve(i_obj.mNode,'jack',sizeMode='guess')[0],'cgmObject',setClass=True)
    log.debug(i_control)
    try:l_color = curves.returnColorsFromCurve(i_obj.mNode)
    except Exception,error:raise Exception,"color | %s"%(error)          
    log.debug("l_color: %s"%l_color)
    curves.setColorByIndex(i_control.mNode,l_color[0])
    
    #>>>Snap and Lock
    #====================================================	
    #Snap.go(i_control,i_obj.mNode,move=True, orient = True)

    #>>>Copy Transform
    #====================================================   
    i_newTransform = i_obj.doCreateAt()

    #Need to move this to default cgmNode stuff
    mBuffer = i_control
    i_newTransform.doCopyNameTagsFromObject(i_control.mNode)
    curves.parentShapeInPlace(i_newTransform.mNode,i_control.mNode)#Parent shape
    i_newTransform.parent = mBuffer.parent#Copy parent
    i_control = i_newTransform
    mc.delete(mBuffer.mNode)
    
    #>>>Register
    #====================================================    
    #Attr
    i = ATTR.get_nextAvailableSequentialAttrIndex(i_obj.mNode,"pivot")
    str_pivotAttr = str("pivot_%s"%i)
    str_objName = str(i_obj.getShortName())
    str_pivotName = str(i_control.getShortName())
    
    #Build the network
    i_obj.addAttr(str_pivotAttr,enumName = 'off:lock:on', defaultValue = 2, value = 0, attrType = 'enum',keyable = False, hidden = False)
    i_control.overrideEnabled = 1
    d_ret = NodeF.argsToNodes("%s.overrideVisibility = if %s.%s > 0"%(str_pivotName,str_objName,str_pivotAttr)).doBuild()
    log.debug(d_ret)
    d_ret = NodeF.argsToNodes("%s.overrideDisplayType = if %s.%s == 2:0 else 2"%(str_pivotName,str_objName,str_pivotAttr)).doBuild()
    
    for shape in mc.listRelatives(i_control.mNode,shapes=True,fullPath=True):
        log.debug(shape)
        mc.connectAttr("%s.overrideVisibility"%i_control.mNode,"%s.overrideVisibility"%shape,force=True)
        mc.connectAttr("%s.overrideDisplayType"%i_control.mNode,"%s.overrideDisplayType"%shape,force=True)
    
    #Vis 
    #>>>Name stuff
    #====================================================
    cgmMeta.cgmAttr(i_control,'visibility',lock=True,hidden=True)   
    i_control = cgmMeta.validateObjArg(i_control,'cgmControl',setClass = True)
    i_control.doStore('cgmName',i_obj)
    i_control.addAttr('cgmType','controlAnim',lock=True)    
    i_control.addAttr('cgmIterator',"%s"%i,lock=True)        
    i_control.addAttr('cgmTypeModifier','spacePivot',lock=True)

    i_control.doName(nameShapes=True)

    i_control.addAttr('cgmAlias',(i_obj.getNameAlias()+'_pivot_%s'%i),lock=False)
    
    #Store on object
    #====================================================    
    i_obj.addAttr("spacePivots", attrType = 'message',lock=True)
    _l_spacePivots = i_obj.getMessage('spacePivots',True) or []
    if i_control.getLongName() not in _l_spacePivots:
        #_l_spacePivots = i_obj.getMessage('spacePivots',True)
        #_l_spacePivots.append(i_control.mNode)
        i_obj.msgList_append('spacePivots',i_control,'controlTarget')
    log.debug("spacePivots: %s"%i_obj.msgList_get('spacePivots',asMeta = True))

    #parent
    if i_parent:
        i_control.parent = i_parent.mNode
        i_constraintGroup = (cgmMeta.asMeta(i_control.doGroup(True),'cgmObject',setClass=True))
        i_constraintGroup.addAttr('cgmTypeModifier','constraint',lock=True)
        i_constraintGroup.doName()
        i_control.connectChildNode(i_constraintGroup,'constraintGroup','groupChild')	

        log.debug("constraintGroup: '%s'"%i_constraintGroup.getShortName())		

    #change to cgmControl
    i_control = cgmMeta.asMeta(i_control.mNode,'cgmControl', setClass=1)

    return i_control
Esempio n. 23
0

#>>> puppet adding controls
i_node = a.masterControl.controlSettings
str_nodeShort = str(i_node.getShortName())

d_attrKWs = {'skeleton':{'value':0,'defaultValue':0},
             'geo':{'value':1,'defaultValue':1}}

l_buildCatch = []      
i_node = a.masterControl.controlSettings
str_nodeShort = str(i_node.getShortName())
#Skeleton/geo settings
for attr in ['skeleton','geo',]:
    i_node.addAttr(attr,enumName = 'off:lock:on', defaultValue = 1, attrType = 'enum',keyable = False,hidden = False)
    NodeF.argsToNodes("%s.%sVis = if %s.%s > 0"%(str_nodeShort,attr,str_nodeShort,attr)).doBuild()
    NodeF.argsToNodes("%s.%sLock = if %s.%s == 2:0 else 2"%(str_nodeShort,attr,str_nodeShort,attr)).doBuild()

#Geotype
i_node.addAttr('geoType',enumName = 'reg:proxy', defaultValue = 0, attrType = 'enum',keyable = False,hidden = False)
for i,attr in enumerate(['reg','proxy']):
    NodeF.argsToNodes("%s.%sVis = if %s.geoType == %s:1 else 0"%(str_nodeShort,attr,str_nodeShort,i)).doBuild()    

#Divider
i_node.addAttr('________________',attrType = 'int',keyable = False,hidden = False,lock=True)

#Part
for part in ['spineRig']:
    i_node.addAttr(part,enumName = 'off:lock:on', defaultValue = 1, attrType = 'enum',keyable = False,hidden = False)
    NodeF.argsToNodes("%s.%sVis = if %s.%s > 0"%(str_nodeShort,part,str_nodeShort,part)).doBuild()
    NodeF.argsToNodes("%s.%sLock = if %s.%s == 2:0 else 2"%(str_nodeShort,part,str_nodeShort,part)).doBuild()