Esempio n. 1
0
def copyUV(object, toAssign):
    """Copy UVs from one mesh to a list of other objects"""
    for i in toAssign:
        if not cmds.polyCompare(object, i):
            cmds.polyTransfer(object, vertices=True, vertexColor=False, uvSets=1, alternateObject=i)
        else:
            logger.error('The mesh %s do not share the same topology with %s. Skipped' % (i, object))
Esempio n. 2
0
    def createSplitShapeNode(self, sculptMesh, orgMesh, skinMesh, outMesh):
        """
		@create the split shape node
		"""
        sculptShape = self.object.getObjShape(sculptMesh)
        if mc.objectType(sculptShape) != "mesh":
            return
        orgShape = self.object.getObjShape(orgMesh)
        if mc.objectType(orgShape) != "mesh":
            return
        skinShape = self.object.getObjShape(skinMesh)
        if mc.objectType(skinShape) != "mesh":
            return
        skinNode = self.object.getObjectInputs(skinShape, "skinCluster")
        if not skinNode:
            return
        outShape = self.object.getObjShape(outMesh)
        if mc.objectType(outShape) != "mesh":
            return
        if mc.polyCompare(orgShape, sculptShape, e=True):
            return
        if mc.polyCompare(orgShape, skinShape, e=True):
            return
        if mc.polyCompare(orgShape, outShape, e=True):
            return
        splitShapeNode = mc.deformer(outMesh,
                                     type="splitShapeNode",
                                     n="%s_splitShapeNode" % outMesh)
        if not splitShapeNode:
            return
        splitShapeNode = splitShapeNode[0]
        infNames = self.skin.getSkinInfs(skinNode)
        mc.connectAttr("%s.outMesh" % orgShape, "%s.orgMesh" % splitShapeNode)
        mc.connectAttr("%s.outMesh" % sculptShape,
                       "%s.sculptMesh" % splitShapeNode)
        mc.connectAttr("%s.wtDrty" % skinNode,
                       "%s.skinWeight" % splitShapeNode)
        for i, inf in enumerate(infNames):
            mc.setAttr("%s.weightInputs[%s]" % (splitShapeNode, i), 0)
            mc.aliasAttr(inf, "%s.weightInputs[%s]" % (splitShapeNode, i))
Esempio n. 3
0
def copyUV(object, toAssign):
    """Copy UVs from one mesh to a list of other objects"""
    for i in toAssign:
        if not cmds.polyCompare(object, i):
            cmds.polyTransfer(object,
                              vertices=True,
                              vertexColor=False,
                              uvSets=1,
                              alternateObject=i)
        else:
            logger.error(
                'The mesh %s do not share the same topology with %s. Skipped' %
                (i, object))
Esempio n. 4
0
 def find_match(self, shapename=False, topology=False, uv=False, sets=True):
     # search parent ident
     if self.parent_shapes:
         for nodeP in self.parent_shapes:
             curPname = nodeP.split(':')[-1].split('|')[-1]
             self.copy_event = False
             for nodeT in self.sel_prnt_trgt_shapes()[1]:
                 curTname = nodeT.split(':')[-1].split('|')[-1]
                 if topology is True or uv is True:
                     compareId = cmds.polyCompare(nodeP, nodeT, v=1, e=1, fd=1)
                     if compareId <= 1:
                         self.found_match[nodeP] = nodeT
                         self.copy_event = True
                 elif curPname == curTname and shapename is True:
                     self.found_match[nodeP] = nodeT
                     self.copy_event = True
                 elif shapename is False and topology is False:
                     self.found_match[nodeP] = nodeT
             if not self.copy_event:
                 self.non_found_parent.append(nodeP)  # not found ident for paren shape and add to list
     # search target ident
     if self.target_shapes:  # loop for found not ident by name target shapes
         for nodeT in self.target_shapes:
             curTname = nodeT.split(':')[-1].split('|')[-1]
             self.copy_event = False
             for nodeP in self.sel_prnt_trgt_shapes()[0]:
                 curPname = nodeP.split(':')[-1].split('|')[-1]
                 if curTname == curPname and shapename is True and topology is False:
                     self.copy_event = True
                 if shapename is False and topology is True:
                     compareId = cmds.polyCompare(nodeP, nodeT, v=1, e=1, fd=1)
                     if compareId <= 1:
                         self.copy_event = True
             if not self.copy_event:
                 self.non_found_target.append(nodeT)  # not found ident for target shape and add to list
     if sets is True:
         self.create_non_found_sets()
     return self.found_match  # return sets with not fount ident shapes
    def heyWitch_cloneSkinCluster(self, cloneKey, cloneVal, *args):
        sknClstrToClonePrompt = cmds.promptDialog(
            message="Skin cluster to clone: ",
            button=['OK', 'Cancel'],
            defaultButton='OK',
            cancelButton='Cancel',
            dismissString='Cancel')

        if sknClstrToClonePrompt == 'OK':
            extSknClstr = cmds.promptDialog(query=True, text=True)
            # figure out if vertices match
            shapeToClone = cmds.skinCluster(extSknClstr, query=True, geometry=True)
            transformToClone = shapeToClone[0].replace('Shape', '')
            if cmds.objExists(transformToClone):
                tempVertBook = {}
                if cmds.polyCompare(transformToClone, cloneKey) == 0:
                    vertMatch = True
                    for k5, v5 in cloneVal.vert_vals.items():
                        extInfList = cmds.skinCluster(extSknClstr, query=True, inf=True)
                        for joint in extInfList:
                            skinVal = cmds.skinPercent(extSknClstr, (transformToClone + '.' + k5), transform=joint,
                                                       query=True)
                            tempVertBook[k5] = {joint: skinVal}
                    print('Vertices match, copying skinweights done vert to vert')
                else:
                    print('Not all vertices match, copying skinweights may not give precise results')
                    extInfList = cmds.skinCluster(extSknClstr, query=True, inf=True)
                    vertMatch = False
            else:
                print('Could not find transform node')
                extInfList = cmds.skinCluster(extSknClstr, query=True, inf=True)
                vertMatch = False
            # create bjc and bind to clone
            for k0, v0 in self.global_work_space['bindJointClustersStorage'].items():
                if v0.bind_joints_list == extInfList:
                    cmds.select(cloneKey)
                    self.bind_joint_cluster_manager.heyWitch_bindToSelectedMsh(k0, v0)
            if cmds.objExists(cloneKey + '_sknClstr'):
                print('Skincluster found')
            else:
                cmds.select(extInfList)
                self.bind_joint_cluster_manager.heyWitch_makeBindJointCluster()
                bjcList = []
                for x in extInfList:
                    if 'btw_' in x:
                        bjcList.append(x)
                    else:
                        bjcList.append('btw_' + x)
                for k1, v1 in self.global_work_space['bindJointClustersStorage'].items():
                    if v1.bind_joints_list == bjcList:
                        cmds.select(cloneKey)
                        self.bind_joint_cluster_manager.heyWitch_bindToSelectedMsh(k1, v1)
                if cmds.objExists(cloneKey + '_sknClstr'):
                    print('Skincluster found')
            # assign values to clone
            if vertMatch == True:
                cloneVal.vert_vals = deepcopy(tempVertBook)
                for k3, v3 in cloneVal.vert_vals.items():
                    for k4, v4 in v3.items():
                        if 'btw_' in k4:
                            cloneJnt = k4
                        else:
                            cloneJnt = 'btw_' + k4
                        cmds.skinPercent(cloneVal.skin_cluster, cloneKey + '.' + k3, transformValue=(cloneJnt, v4))
            elif vertMatch == False:
                cmds.select(shapeToClone[0], cloneKey)
                cmds.CopySkinWeights()