Beispiel #1
0
    def _buildSkeletonData(self, rootJnt):
        '''
        :param rootNode: root of the skeleton to process
        '''
        self.skeletonDict = {}
        if not rootJnt:
            log.info('skeleton rootJnt joint was not found')
            return

        fn = r9Core.FilterNode(rootJnt)
        fn.settings.nodeTypes = 'joint'
        fn.settings.incRoots = False
        skeleton = fn.ProcessFilter()

        for jnt in skeleton:
            key = r9Core.nodeNameStrip(jnt)
            self.skeletonDict[key] = {}
            self.skeletonDict[key]['attrs'] = {}
            for attr in [
                    'translateX', 'translateY', 'translateZ', 'rotateX',
                    'rotateY', 'rotateZ'
            ]:
                try:
                    self.skeletonDict[key]['attrs'][attr] = cmds.getAttr(
                        '%s.%s' % (jnt, attr))
                except:
                    log.debug('%s : attr is invalid in this instance' % attr)
Beispiel #2
0
 def matchInternalPoseObjects(self, nodes=None, fromFilter=True):
     '''
     This is a throw-away and only used in the UI to select for debugging!
     from a given poseFile return or select the internal stored objects
     '''
     InternalNodes = []
     if not fromFilter:
         #no filter, we just pass in the longName thats stored
         for key in self.poseDict.keys():
             if cmds.objExists(self.poseDict[key]['longName']):
                 InternalNodes.append(self.poseDict[key]['longName'])
             elif cmds.objExists(key):
                 InternalNodes.append(key)
             elif cmds.objExists(r9Core.nodeNameStrip(key)):
                 InternalNodes.append(r9Core.nodeNameStrip(key))
     else:
         #use the internal Poses filter and then Match against scene nodes
         if self.settings.filterIsActive():
             filterData = r9Core.FilterNode(nodes,
                                            self.settings).ProcessFilter()
             matchedPairs = self._matchNodesToPoseData(filterData)
             if matchedPairs:
                 InternalNodes = [node for _, node in matchedPairs]
     if not InternalNodes:
         raise StandardError('No Matching Nodes found!!')
     return InternalNodes
Beispiel #3
0
 def getNodes(self, nodes):
     '''
     get the nodes to process
     This is designed to allow for specific hooks to be used from user
     code stored in the pose folder itself.
     '''
     if not type(nodes) == list:
         nodes = [nodes]
     if self.useFilter:
         log.debug('getNodes - useFilter=True : no custom poseHandler')
         if self.settings.filterIsActive():
             return r9Core.FilterNode(
                 nodes, self.settings).ProcessFilter()  # main node filter
     else:
         log.debug('getNodes - useFilter=False : no custom poseHandler')
         return nodes
Beispiel #4
0
    def buildOffsetCloud(self, rootReference=None, raw=False):
        '''
        Build a point cloud up for each node in nodes
        :param nodes: list of objects to be in the cloud
        :param rootReference: the node used for the initial pivot location
        :param raw: build the cloud but DON'T snap the nodes into place - an optimisation for the PoseLoad sequence
        '''
        self.posePointRoot = cmds.ls(cmds.spaceLocator(name='posePointCloud'),
                                     l=True)[0]

        ppcShape = cmds.listRelatives(self.posePointRoot, type='shape')[0]
        cmds.setAttr("%s.localScaleZ" % ppcShape, 30)
        cmds.setAttr("%s.localScaleX" % ppcShape, 30)
        cmds.setAttr("%s.localScaleY" % ppcShape, 30)

        if self.settings:
            if self.prioritySnapOnly:
                self.settings.searchPattern = self.settings.filterPriority
            self.inputNodes = r9Core.FilterNode(self.inputNodes,
                                                self.settings).ProcessFilter()
        if self.inputNodes:
            self.inputNodes.reverse()  # for the snapping operations

        if self.mayaUpAxis == 'y':
            cmds.setAttr('%s.rotateOrder' % self.posePointRoot, 2)
        if rootReference:  # and not mesh:
            r9Anim.AnimFunctions.snap([rootReference, self.posePointRoot])
        for node in self.inputNodes:
            pnt = cmds.spaceLocator(name='pp_%s' %
                                    r9Core.nodeNameStrip(node))[0]
            if not raw:
                r9Anim.AnimFunctions.snap([node, pnt])
            cmds.parent(pnt, self.posePointRoot)
            self.posePointCloudNodes.append((pnt, node))
        cmds.select(self.posePointRoot)
        if self.mesh:
            self.shapeSwapMesh()
        return self.posePointCloudNodes