예제 #1
0
 def setTrans(obj, t, *args):
     obj = PyNode(obj)
     for axis, val in zip('xyz', t):
         try:
             obj.attr( 't' + axis ).set(val)
         except Exception:
             pass
예제 #2
0
    def switchSpace(ctl: pm.PyNode, space: str) -> bool:
        """
        Switch a control into a new space

        Args:
            ctl: A node with space switching meta data
            space: The name of the space to switch to

        Returns:
            True if the space was changed, false otherwise
        """
        meta_data = meta.getMetaData(ctl,
                                     pulse.spaces.SPACECONSTRAINT_METACLASS)
        space_data = [
            s for s in meta_data.get('spaces', []) if s['name'] == space
        ]
        if not space_data:
            return False

        space_data = space_data[0]
        index = space_data['index']

        # remember world matrix
        wm = ctl.wm.get()
        # change space
        ctl.attr('space').set(index)
        # restore world matrix
        pulse.nodes.setWorldMatrix(ctl, wm)

        return True
예제 #3
0
 def setRot(obj, r, *args):
     obj = PyNode(obj)
     for axis, val in zip('xyz', r):
         try:
             obj.attr( 'r' + axis ).set(val)
         except Exception:
             pass
예제 #4
0
    def updateToRigData(card):

        if not card.hasAttr('fossilRigData'):
            card.addAttr('fossilRigData', dt='string')
            card.fossilRigData.set('{}')
            card.addAttr('fossilRigState', dt='string')

        card = PyNode(card)  # Burp the interface, just in case

        issues = {}

        with card.rigData as rigData:
            # Update old attrs into rigData
            if card.hasAttr('nameInfo'):
                head, repeat, tail = util.parse(card.attr('nameInfo').get())
                rigData.update({
                    'nameInfo': {
                        'head': head,
                        'repeat': repeat,
                        'tail': tail
                    }
                })
                card.deleteAttr('nameInfo')

            if card.hasAttr('rigCmd'):
                rigData.update({'rigCmd': card.rigCmd.get()})
                card.deleteAttr('rigCmd')

            if card.hasAttr('suffix'):
                side = card.attr('suffix').get(
                )  # Must use attr to avoid interface's .suffix

                if side.lower() in ('l', 'left'):
                    side = 'left'
                elif side.lower() in ('r', 'right'):
                    side = 'right'
                elif side == '':
                    pass
                else:
                    issues['side conversion'] = True

                if 'side conversion' not in issues:
                    rigData.update({'mirrorCode': side})
                    card.deleteAttr('suffix')

            if card.hasAttr('rigParameters'):
                d = cardRigging.ParamInfo.toDict(card.rigParams)

                ikParams = rigData.get('ikParams', {})
                ikParams.update(d)
                rigData.update({'ikParams': ikParams})
                card.deleteAttr('rigParameters')

            # Convert some of the old rig commands to the generic version
            if rigData.get('rigCmd') == 'Arm':
                ikParams = rigData.get('ikParams', {})
                #print('ik', ikParams, 'ikParams' in rigData)
                if 'name' not in ikParams:
                    ikParams['name'] = 'Arm'
                if 'endOrient' not in ikParams:
                    ikParams['endOrient'] = 'True_Zero'

                rigData['rigCmd'] = 'IkChain'
                rigData['ikParams'] = ikParams

            elif rigData.get('rigCmd') == 'Leg':
                ikParams = rigData.get('ikParams', {})
                if 'name' not in ikParams:
                    ikParams['name'] = 'Leg'
                if 'endOrient' not in ikParams:
                    ikParams['endOrient'] = 'True_Zero_Foot'

                rigData['rigCmd'] = 'IkChain'
                rigData['ikParams'] = ikParams

            elif rigData.get('rigCmd') in ('Head', 'Neck'):
                rigData['rigCmd'] = 'TranslateChain'

            return issues