def transferEnforce(self, *a): source = cmds.textField('tf_agrDJ', q=1, text=1) target = cmds.textField('tf_agrJT', q=1, text=1) bs = cmds.textField('tf_agrN', q=1, text=1) ignNum = cmds.intField('if_agrIV', q=1, value=1) su = ['', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'] # suffix ct = int(round(cmds.currentTime(query=1))) pdac = cmds.polyDuplicateAndConnect(source, renameChildren=1)[0] tn = source.split(':')[-1] + '_' + str(ct) for s in su: if cmds.objExists(tn + s) == 0: tn = tn + s break cmds.rename(pdac, tn) if bs == '': bs = cmds.blendShape(tn, target)[0] cmds.textField('tf_agrN', e=1, text=bs) else: #wc = cmds.blendShape(bs,q=1,weightCount=1) bsAttr = cmds.aliasAttr(bs, q=1) il = [] il = [ int(re.findall('\d+', bsAttr[i])[0]) for i in range(1, len(bsAttr), 2) ] cmds.blendShape(bs, e=1, target=(target, max(il) + 1, tn, 1.0)) cmds.setKeyframe(bs + '.' + tn, v=1, t=ct) cmds.setKeyframe(bs + '.' + tn, v=0, t=ct - ignNum) cmds.setKeyframe(bs + '.' + tn, v=0, t=ct + ignNum) cmds.select(tn, replace=1)
def dpCreateDeformMesh(self, *args): """ Generate a final deformable mesh from original loaded mesh. Parent old original model to Model_Grp and rename it to _Geo. Rename the new final dformable mesh as _Def_Mesh and put it inside Render_Grp. """ # store old mesh name: oldMeshName = self.origModel # generate deformMesh from origModel: self.deformMesh = cmds.polyDuplicateAndConnect(self.origModel) # rename geometries: self.origModel = cmds.rename( self.origModel, utils.extractSuffix(self.origModel) + "_Orig_Geo") self.deformMesh = cmds.rename( self.deformMesh, utils.extractSuffix(oldMeshName) + "_Def_Mesh") cmds.setAttr(self.origModel + ".visibility", 0) # parent if need: modelGrp = utils.getNodeByMessage("modelsGrp") if modelGrp: cmds.parent(self.origModel, modelGrp) renderGrp = utils.getNodeByMessage("renderGrp") if renderGrp: # avoid reparent deformMesh if already inside RenderGrp: parentList, allParentList = [], [] parentList.append(self.deformMesh) while parentList: parentList = cmds.listRelatives(parentList[0], allParents=True, type="transform") if parentList: allParentList.append(parentList[0]) if not renderGrp in allParentList: cmds.parent(self.deformMesh, renderGrp)
def duplicateAndConnect(meshList): ''' polyDuplicateAndConnect wrapper for multiple meshes @param meshList: List of polygon mesh objects to run polyDuplicateAndConnect on. @type meshList: list ''' # Initialize return value dupList = [] # Duplicate and connect for mesh in meshList: mc.select(mesh) mc.polyDuplicateAndConnect() dup = mc.ls(sl=True, l=True) dupList.append(dup[0]) # Return duplicate list return dupList
def duplicateAndConnect(meshList): """ polyDuplicateAndConnect wrapper for multiple meshes @param meshList: List of polygon mesh objects to run polyDuplicateAndConnect on. @type meshList: list """ # Initialize return value dupList = [] # Duplicate and connect for mesh in meshList: mc.select(mesh) mc.polyDuplicateAndConnect() dup = mc.ls(sl=True, l=True) dupList.append(dup[0]) # Return duplicate list return dupList
def smooth_proxy(sels=[]): sels = get_sels(sels) p_nodes = [] for sel in sels: name = sel.partition('|')[2].partition('_Geo')[0] s_shapes = cmds.listRelatives(sel, shapes=True, type='mesh') p_node = cmds.polyDuplicateAndConnect(sel, renameChildren=True) p_node = cmds.rename(p_node, '%s_SmoothProxy_Geo' % name) p_shapes = cmds.listRelatives(p_node, shapes=True, type='mesh') shapes = zip(s_shapes, p_shapes) for outMesh, inMesh in shapes: smooth = cmds.createNode('polySmoothProxy', n='%s_Smooth' % name) cmds.setAttr('%s.method' % smooth, 0) cmds.setAttr('%s.exponentialLevel' % smooth, 0) cmds.setAttr('%s.continuity' % smooth, 1) cmds.setAttr('%s.smoothUVs' % smooth, 1) cmds.setAttr('%s.keepBorder' % smooth, 1) cmds.setAttr('%s.keepHardEdge' % smooth, 0) cmds.setAttr('%s.keepMapBorders' % smooth, 1) cmds.setAttr('%s.linearLevel' % smooth, 1) cmds.setAttr('%s.divisionsPerEdge' % smooth, 1) cmds.setAttr('%s.pushStrength' % smooth, 0.1) cmds.setAttr('%s.roundness' % smooth, 1) cmds.connectAttr('%s.outMesh' % outMesh, '%s.inputPolymesh' % smooth, f=True) cmds.connectAttr('%s.output' % smooth, '%s.inMesh' % inMesh, f=True) if not cmds.objExists('SmoothProxy_Grp'): cmds.group(n='SmoothProxy_Grp', empty=True) p_nodes.extend(cmds.parent(p_node, 'SmoothProxy_Grp', r=True)) cmds.select(p_nodes, r=True) return p_nodes
def separateInfluenceMesh(baseMesh,inputMesh,setList,suffix='mesh'): ''' Separate a mesh to history driven mesh shells based on face sets @param baseMesh: Base mesh to define face sets. @type baseMesh: str @param inputMesh: Mesh to separate influence shells from. @type inputMesh: str @param setList: List of face sets to define shells. @type setList: list @param suffix: Naming suffix for separated mesh shells. @type suffix: str ''' # ========== # - Checks - # ========== # Check Mesh if not mc.objExists(baseMesh): raise Exception('Base Mesh "'+baseMesh+'" does not exist!') if not mc.objExists(inputMesh): raise Exception('Input Mesh "'+inputMesh+'" does not exist!') # Sets for faceSet in setList: for face in mc.sets(faceSet,q=True): if not mc.ls(face,o=True)[0] != baseMesh: raise Exception('Invalid item "'+face+'" in set "'+faceSet+'"') # =========================== # - Separate Mesh Face Sets - # =========================== infMeshList = [] delCompList = [] for faceSet in setList: # Get Set Prefix prefix = glTools.utils.stringUtils.stripSuffix(faceSet) # Duplicate Connected Mesh infMesh = mc.polyDuplicateAndConnect(inputMesh)[0] infMesh = mc.rename(infMesh,prefix+'_'+suffix) # Delete Unwanted Faces allFaces = mc.ls(infMesh+'.f[*]',fl=True) setFaces = mc.ls(mc.sets(faceSet,q=True),fl=True) setFaces = [i.replace(baseMesh,infMesh) for i in setFaces if i.count(baseMesh)] #meshFaces = list(set(allFaces) & set(setFaces)) # Set Intersection delFaces = list(set(allFaces) - set(setFaces)) mc.delete(delFaces) # Rename deleteComponent node delNode = mc.ls(mc.listHistory(infMesh),type='deleteComponent') if not delNode: raise Exception('Unable to determine deleteComponent from mesh "'+infMesh+'"!') delNode = mc.rename(delNode[0],prefix+'_deleteComponent') # Append to return list infMeshList.append(infMesh) delCompList.append(delNode) # ================= # - Return Result - # ================= result = {} result['influenceMesh'] = infMeshList result['deleteComponent'] = delCompList return result
def separateInfluenceMesh(baseMesh, inputMesh, setList, suffix='mesh'): """ Separate a mesh to history driven mesh shells based on face sets @param baseMesh: Base mesh to define face sets. @type baseMesh: str @param inputMesh: Mesh to separate influence shells from. @type inputMesh: str @param setList: List of face sets to define shells. @type setList: list @param suffix: Naming suffix for separated mesh shells. @type suffix: str """ # ========== # - Checks - # ========== # Check Mesh if not cmds.objExists(baseMesh): raise Exception('Base Mesh "' + baseMesh + '" does not exist!') if not cmds.objExists(inputMesh): raise Exception('Input Mesh "' + inputMesh + '" does not exist!') # Sets for faceSet in setList: for face in cmds.sets(faceSet, q=True): if not cmds.ls(face, o=True)[0] != baseMesh: raise Exception('Invalid item "' + face + '" in set "' + faceSet + '"') # =========================== # - Separate Mesh Face Sets - # =========================== infMeshList = [] delCompList = [] for faceSet in setList: # Get Set Prefix prefix = glTools.utils.stringUtils.stripSuffix(faceSet) # Duplicate Connected Mesh infMesh = cmds.polyDuplicateAndConnect(inputMesh)[0] infMesh = cmds.rename(infMesh, prefix + '_' + suffix) # Delete Unwanted Faces allFaces = cmds.ls(infMesh + '.f[*]', fl=True) setFaces = cmds.ls(cmds.sets(faceSet, q=True), fl=True) setFaces = [i.replace(baseMesh, infMesh) for i in setFaces if i.count(baseMesh)] # meshFaces = list(set(allFaces) & set(setFaces)) # Set Intersection delFaces = list(set(allFaces) - set(setFaces)) cmds.delete(delFaces) # Rename deleteComponent node delNode = cmds.ls(cmds.listHistory(infMesh), type='deleteComponent') if not delNode: raise Exception('Unable to determine deleteComponent from mesh "' + infMesh + '"!') delNode = cmds.rename(delNode[0], prefix + '_deleteComponent') # Append to return list infMeshList.append(infMesh) delCompList.append(delNode) # ================= # - Return Result - # ================= result = {} result['influenceMesh'] = infMeshList result['deleteComponent'] = delCompList return result