def copyAndLayout(self): self.currentMap = cmds.optionMenuGrp(self.uvSetChoice, q=True, v=True) cmds.polyCopyUV(self.selFace, cm=True, uvi=self.currentMap, uvs=self.inputLightmap) cmds.polyMultiLayoutUV(scale=1, rotateForBestFit=2, layout=2, ps=3.2, uvs=self.inputLightmap) cmds.TextureViewWindow() #opens uv texture editor cmds.select(self.sel) #selects original objects to get out of face selection cmds.deleteUI(self.optionWindow)
def jointify(name=''): from maya.cmds import * # get mesh transforms import ezLib.transform mTrfs = ezLib.transform.get(shape='mesh') if not mTrfs: raise IOError, 'No mesh shapes found!' if not name: p = mTrfs[0].split('|')[1] if p[0:14] == 'cryExportNode_': name = p.split('_')[1] else: name = 'jointify' js = [] counts = [] for mt in mTrfs: sn = mt.split('|')[-1] # create joints at transform positions pos = xform(mt, q=1, t=1, ws=1) j = createNode('joint', n=(sn + 'joint')) xform(j, t=pos) js.append(j) # plug each channel driver into the appropriate joint for t in 'trs': for d in 'xyz': input = listConnections((mt + '.' + t + d), p=1) if input: connectAttr(input[0], (j + '.' + t + d)) # collect nr of verts - this method collects also children if any counts.append(len(ls(polyListComponentConversion(mt, tv=1), fl=1))) dupMesh = duplicate(mTrfs, renameChildren=1) dupMesh = polyUnite(dupMesh, ch=0) # check for multiple UVsets uvSets = polyUVSet(dupMesh, q=1, allUVSets=1) for i in range(1,len(uvSets)): # for each set other than the 1st: set it, copy to 1st, delete it polyUVSet(dupMesh, currentUVSet=1, uvSet=uvSets[i]) polyCopyUV(dupMesh[0] + '.map[*]', uvSetNameInput=uvSets[i], uvSetName=uvSets[0]) polyUVSet(dupMesh, uvSet=uvSets[i], delete=1) # cleanup history crap delete(dupMesh, ch=1) sc = skinCluster(js, dupMesh)[0] vtxNr = 0 for i in range(len(js)): vtxSel = dupMesh[0] + '.vtx[' + str(vtxNr) + ':' + str(vtxNr + counts[i] - 1) + ']' skinPercent(sc, vtxSel, transformValue=[js[i], 1]) vtxNr += counts[i] root = createNode('joint', n=name + 'rootjoint') setAttr(root + '.drawStyle', 2) parent(js, root) select(root, dupMesh)
def tryMakeUVSet(self, inNode, inName): sets = cmds.polyUVSet(inNode.mNode, q=True, auv=True) # We need a source UV set to copy from if sets is None: raise Exception('%s has no sets' % inNode.mNode) if inName not in sets: cmds.polyUVSet(inNode.mNode, create=True, uvSet=inName) cmds.polyCopyUV(inNode.mNode, uvi=sets[0], uvs=inName)
def Delete_UvsetApply(): renamecheckbox = cmds.checkBox('rm_cbox_UI', q=1, v=1) SelectObjects = cmds.ls(sl=1, l=1) if SelectObjects: for item in SelectObjects: firstUvSet = cmds.getAttr(item + '.uvSet[0].uvSetName') cmds.polyCopyUV(item, uvs=firstUvSet) for uvset in cmds.polyUVSet(q=1, auv=1): if uvset != firstUvSet: cmds.polyUVSet(item, d=1, uvs=uvset) if renamecheckbox: cmds.polyUVSet(e=1, rn=1, uvs=firstUvSet, nuv="map1")
def copyAndLayout(self): global preScale percentageSpace = cmds.floatSliderGrp(self.shellSpacingSlider, q=True, v=True) #get percentage space from slider self.currentMap = cmds.optionMenuGrp(self.uvSetChoice, q=True, v=True) cmds.polyCopyUV(self.selFace, cm=True, uvi=self.currentMap, uvs=self.inputLightmap) #cmds.polyMultiLayoutUV(psc=2, scale=1, rotateForBestFit=2, layout=2, ps=percentageSpace, uvs=self.inputLightmap) Default settings cmds.polyMultiLayoutUV(psc=preScale, scale=layoutScale, lm=layoutMapping, rotateForBestFit=layoutRotate, layout=shellLayout, ps=percentageSpace, uvs=self.inputLightmap) cmds.TextureViewWindow() #opens uv texture editor cmds.select(self.sel) #selects original objects to get out of face selection cmds.deleteUI(self.optionWindow) print preScale print shellLayout
def uv_sets(self, fix): """ First line. Description. """ problems = False details = False # lists all the mesh type objects objects = cmds.ls(type='mesh') objects_len = len(objects) if objects_len: for o in objects: # checks if there are more than one UV set uv_set = cmds.polyUVSet(o, q=1, auv=1) uv_set_len = len(uv_set) if not details: details = True self.details.append("UV set problems") self.details.append("\t" + str(o)) if uv_set_len > 1: if not fix: problems = True else: # deletes all the extra UV sets for current_set in uv_set: original_uv_set = cmds.polyUVSet(o, q=1, cuv=1) cmds.polyUVSet(o, cuv=1, uvs=current_set) converted_uvset = cmds.polyListComponentConversion( o + '.vtx[0]', fv=1, tuv=1) cmds.polyUVSet(o, cuv=1, uvs=original_uv_set[0]) if current_set != uv_set[0]: if converted_uvset: cmds.polyCopyUV(o, uvi=current_set, uvs=uv_set[0]) cmds.polyUVSet(o, d=1, uvs=current_set) if uv_set[0] != 'map1': cmds.polyUVSet(o, uvs=uv_set[0], rn=1, nuv='map1') if problems: if fix: self.posible_fix.append("UV sets fixed") else: self.posible_fix.append("UV sets problems") else: self.posible_fix.append("UV sets clear")
def deleteUV(self): # print(self.uvSetAll) # print(self.uvSetAll) if len(self.uvSetAll) > 1 and self.delUVFlag: # UVセットが複数あったら削除処理 cmds.polyUVSet(self.mesh, uvSet=self.uvSetAll[0], e=True, currentUVSet=True) # カレントを1に dummy = common.TemporaryReparent().main(mode="create") for var in range(1, len(self.uvSetAll)): # print(self.uvSetAll[var]) # tempUV = cmds.polyUVSet(self.mesh, q=True, allUVSets=True) # for uv in tempUV: # print(u'UV名確認用 : '+str(uv)) if self.uvSetAll[var] == self.currentSet[0]: # 親子付けしたまま親のノードを処理するとなぜかUVSet名で処理できないので退避しておく common.TemporaryReparent().main(self.mesh, dummyParent=dummy, mode="cut") # カレントUVを1番目にコピー cmds.polyCopyUV(self.mesh, uvi=self.uvSetAll[var], uvs=self.uvSetAll[0]) # 親子付けを戻す common.TemporaryReparent().main(self.mesh, dummyParent=dummy, mode="parent") if self.uvSetAll[var].split(".")[-1] in self.exclusion: print("Skip UV in Exclusion List :", self.uvSetAll[var]) continue # 最初のUVセット以外は削除 try: print("Delete UV Set : " + self.mesh + "." + self.uvSetAll[var]) cmds.polyUVSet(self.mesh, uvSet=self.uvSetAll[var], delete=True) except: print("Delete UV Set Error : " + self.mesh + "." + self.uvSetAll[var] + " is not exsist\n" + "Skip this mesh object") # ダミー削除 common.TemporaryReparent().main(dummyParent=dummy, mode="delete") # ヒストリ削除 cmds.bakePartialHistory(self.shapes, ppt=True)
def removeExtraUVSets(): from maya.cmds import polyUVSet, polyCopyUV import ezLib.transform mts = ezLib.transform.get(shape='mesh') for m in mts: uvSets = polyUVSet(m, q=1, allUVSets=1) for i in range(1,len(uvSets)): # for each set other than the 1st: set it, copy to 1st, delete it polyUVSet(m, currentUVSet=1, uvSet=uvSets[i]) polyCopyUV(m + '.map[*]', uvSetNameInput=uvSets[i], uvSetName=uvSets[0]) polyUVSet(m, uvSet=uvSets[i], delete=1) # copy vertexColorsWithoutTransferNode #obj = ls(sl=1, tr=1) #vtxs = ls(obj[0] + '.vtx[*]', fl=1) #for v in vtxs: # vtx = '.' + v.split('.')[1] # rgb = polyColorPerVertex(obj[0] + vtx, q=1, rgb=1) # a = polyColorPerVertex(obj[0] + vtx, q=1, a=1)[0] # polyColorPerVertex(obj[1] + vtx, a=a, rgb=rgb)
def createPoEmByShaderAndObjList(includeObjects, shaderList, **kwargs): '''{'del_path':'Dynamics/Particles/Emitter/createPoEmByShaderAndObjList()ONLYSE', 'icon':':/emitter.png', 'tip':'指定某些材质的面创建pointEmitter', 'usage':'\ ########## No creation new uvsets##########\\n\ objectList = cmds.ls(sl=True)\\n\ for obj in objectList:\\n\ fCount = cmds.polyEvaluate(obj,f=True)\\n\ cmds.polyProjection("%s.f[0:%s]"%(obj,fCount), ch=False, type="Planar", ibd=False, cm=False, md="x")\\n\ ##########################################\\n\ includeObjects = cmds.ls(sl=True,exactType="transform")\\n\ shaderList = cmds.ls(sl=True,mat=True)\\n\ $fun(includeObjects, shaderList, uvSetName="forEm", plannarMapping=False,mapDirectionValue="x")\\n\\n\ shaderList = cmds.ls(sl=True,mat=True)\\n\ includeObjects = cmds.listRelatives(cmds.ls(sl=True)[0],type="transform")\\n\ $fun(includeObjects, shaderList, uvSetName="forEm", plannarMapping=False,mapDirectionValue="x")' } ''' if isinstance(includeObjects, str) or isinstance(includeObjects, unicode): includeObjects = [includeObjects] if isinstance(shaderList, str) or isinstance(shaderList, unicode): shaderList = [shaderList] defalutKwargs = dict(\ uvSetName='forEm', \ plannarMapping=False,\ mapDirectionValue='x'\ ) execStr = __check_kwargs(defalutKwargs, kwargs) exec execStr print plannarMapping, uvSetName cmds.constructionHistory(toggle=False) includeObjects += cmds.listRelatives(includeObjects, type='mesh') #create ramp for emitter of textureRate if not cmds.objExists( "uvEmMap"): #and not cmds.objectType('uvEmMap')=="ramp": emitMat = cmds.shadingNode('ramp', asTexture=True, n="uvEmMap") cmds.removeMultiInstance(emitMat + '.colorEntryList[2]', b=True) cmds.setAttr(emitMat + '.interpolation', 0) cmds.setAttr(emitMat + '.colorEntryList[0].color', 0, 0, 0, type='double3') cmds.setAttr(emitMat + '.colorEntryList[1].position', 0.05) cmds.setAttr(emitMat + '.colorEntryList[1].color', 1, 1, 1, type='double3') else: emitMat = "uvEmMap" for inSideShader in shaderList: cmds.hyperShade(objects=inSideShader) faceList = cmds.ls(sl=True) cmds.select(cl=True) emitObjList, faceSet = [], [] for faceGrp in faceList: emitObj = re.split(r'\.f', faceGrp)[0] #worldarea = cmds.polyEvaluate( emitObj, wa=True ) #if emitObj not in emitObjList and worldarea>maxArea: if emitObj not in emitObjList and emitObj in includeObjects: emitObjList.append(emitObj) #print emitObj #append list to faceSet List faceSet.append([]) if emitObj in emitObjList: faceSetIndex = emitObjList.index(emitObj) #add faceGrp to faceSet[] faceSet[faceSetIndex].append(faceGrp) #create uvSet for pointEmitter and create pointEmitter for emitObj for objFaceGrp in faceSet: emitObjIndex = faceSet.index(objFaceGrp) parEmit = cmds.emitter(emitObjList[emitObjIndex], type='surf', nsp=.1, tsp=1, srn=1, n='shtterEmit##')[1] if objFaceGrp[0] != emitObjList[emitObjIndex]: #Delete uvSetName uvset if it exists temp = cmds.polyUVSet(emitObjList[emitObjIndex], q=True, allUVSets=True) if temp != None and uvSetName in temp: cmds.polyUVSet(emitObjList[emitObjIndex], delete=True, uvSet=uvSetName) #create new uvsets if plannarMapping: cmds.polyProjection(objFaceGrp, ch=False, type='Planar', ibd=False, cm=True, uvSetName=uvSetName, md=mapDirectionValue) #copy uv to uvSetName from map1 else: emitterUVSet = cmds.polyUVSet(emitObjList[emitObjIndex], create=True, uvSet=uvSetName)[0] cmds.polyCopyUV(objFaceGrp, uvi='map1', uvs=emitterUVSet, ch=False) firstUVSet = cmds.polyUVSet(emitObjList[emitObjIndex], q=True, allUVSets=True)[0] cmds.polyUVSet(emitObjList[emitObjIndex], currentUVSet=True, uvSet=firstUVSet) cmds.setAttr(parEmit + '.enableTextureRate', 1) cmds.connectAttr(emitMat + '.outColor', parEmit + '.textureRate') geoConnectNodeList = cmds.ls(cmds.listHistory( emitObjList[emitObjIndex], f=True, levels=1), exactType='geoConnector') if geoConnectNodeList != []: for geoConnectNode in geoConnectNodeList: cmds.setAttr(geoConnectNode + '.guv', uvSetName, type='string', l=True) cmds.constructionHistory(toggle=True)
def polyCopyUV(*args, **kwargs): res = cmds.polyCopyUV(*args, **kwargs) if not kwargs.get('query', kwargs.get('q', False)): res = _factories.maybeConvert(res, _general.PyNode) return res
import maya.cmds as cmds selObjList = cmds.ls(sl=True) for sel in selObjList: try: cmds.polyCopyUV( sel,uvi="UVChannel_1",uvs="map1" ,ch=1) except: pass
def copyUVsToMap1(*args): sel = cmds.ls(sl=True, fl=True) for obj in sel: cmds.polyCopyUV(obj, uvSetNameInput="", uvSetName="map1", ch=1)