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))
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))
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))
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()