def createCameraUVProj(): sel = cmds.ls(sl=True) if sel: for node in sel: if cmds.polyEvaluate(node, fc=True) == 0: cmds.select(node+'.f[*]', add=True) cmds.polyProjection(cmds.ls(sl=True), ch=True, type='Planar', ibd=True, kir=True, md='c')
def mkPlanar(): mkObjListP = cmds.ls (sl = True) mkAutoListP = len(mkObjListP) mkPlanarV = cmds.textFieldGrp(mkPlanarF,query = True, text = True) for i in range (0,mkAutoListP,1): cmds.polyProjection(mkObjListP[i],type='Planar',md = mkPlanarV, ch = True,sf = True) mkAuto
def select_inside_loop(): # get selected face loop and one inner face, convert to edges get_sel = cmds.ls(os=1,fl=1) if _cmds().is_component(get_sel) == "face": mesh = cmds.ls(sl=1,fl=1,o=1) edge_from_face = cmds.ls(cmds.polyListComponentConversion(get_sel[:-1],te=1,bo=1),fl=1) # create temp uvset for uv projection current_uvset = cmds.polyUVSet(mesh,q=1,cuv=1)[0] for uvset in cmds.polyUVSet(mesh,q=1,auv=1): if uvset == "af_tmp_select_uvset": cmds.polyUVSet(mesh,delete=1,uvSet="af_tmp_select_uvset") cmds.polyUVSet(mesh,create=1,uvSet="af_tmp_select_uvset") cmds.polyUVSet(mesh,e=1,cuv=1,uvSet="af_tmp_select_uvset") else: cmds.polyUVSet(mesh,create=1,uvSet="af_tmp_select_uvset") cmds.polyUVSet(mesh,e=1,cuv=1,uvSet="af_tmp_select_uvset") cmds.polyProjection(mesh,ch=0,type="Planar",ibd=1,md="y") cmds.polyMapCut(edge_from_face,e=0) # get inner selection cmds.select(cmds.polyListComponentConversion(get_sel[-1],tuv=1),r=1) mm.eval("polySelectBorderShell 0;ConvertSelectionToFaces;") inner = cmds.ls(sl=1,fl=1) # cleanup cmds.polyUVSet(mesh,e=1,cuv=1,uvSet=current_uvset) cmds.polyUVSet(mesh,delete=1,uvSet="af_tmp_select_uvset") cmds.delete(mesh,ch=1) # select fill cmds.select((inner+get_sel[:-1]),r=1)
def mkcyclinder(): mkObjListC = cmds.ls(sl=True) mkAutoListC = len(mkObjListC) for i in range(0, mkAutoListC, 1): cmds.polyProjection(mkObjListC[i], type='Cylindrical', ch=True, sf=True)
def createCameraUVProj(): """ create a UVs projection based on the active camera """ selection = cmds.ls(sl=True) for node in selection: if cmds.polyEvaluate(node, fc=True) == 0: cmds.select(node+'.f[*]', add=True) cmds.polyProjection(cmds.ls(sl=True), ch=True, type='Planar', ibd=True, kir=True, md='c')
def mkPlanar(): mkObjListP = cmds.ls(sl=True) mkAutoListP = len(mkObjListP) mkPlanarV = cmds.textFieldGrp(mkPlanarF, query=True, text=True) for i in range(0, mkAutoListP, 1): cmds.polyProjection(mkObjListP[i], type='Planar', md=mkPlanarV, ch=True, sf=True) mkAuto
def proj(*args): selected = cmds.ls(sl=True) projDir = cmds.radioButtonGrp("projAx", q=True, sl=True) faceNum = cmds.polyEvaluate(f=True) if(projDir==1): dirVar = "x" if(projDir==2): dirVar = "y" if(projDir==3): dirVar = "z" cmds.polyProjection(selected[0] + ".f" + "[0:" + str(faceNum)+ "]", type="Planar", ibd=True, md=dirVar, ch=True)
def unwrapTerrain(sel): # unwrap planar Y cmds.polyProjection(sel+'.f[*]', ch=False, type='Planar', ibd=True, isu=1, isv=1, md='y') # apply unfoldAndRotate x times for i in range(4): unfoldAndRotate(sel)
def prepare_geo(self, original, smooth, smoothValue, projectUV, scaleUV): if smooth: print '> smooth normals...' cmds.polySoftEdge(a=smoothValue, ch=False) if projectUV: print '> project uvs...' cmds.polyProjection(original+'.f[*]', ch=False, type='Planar', ibd=True, isu=scaleUV, isv=scaleUV, md='y') cmds.select(original, r=True)
def layoutUVs(): selected = cmds.ls(selection=True) obj = selected[0] totalFaces = cmds.polyEvaluate(obj, face=True) oneThird = totalFaces / 3 startFace = 0 endFace = oneThird - 1 cmds.polyProjection(obj + '.f[' + str(startFace) + ':' + str(endFace) + ']', type="planar") startFace = oneThird endFace = (oneThird * 2) - 1 cmds.polyProjection(obj + '.f[' + str(startFace) + ':' + str(endFace) + ']', type="cylindrical") startFace = (oneThird * 2) endFace = totalFaces - 1 cmds.polyProjection(obj + '.f[' + str(startFace) + ':' + str(endFace) + ']', type="spherical")
def create_uv(target, camera_info): """ targetに対して、camera_infoの情報をもとにUVを作成する """ face_num = cmds.polyEvaluate(target, face=1) face_name = '%s.f[0:%s]' % (target, face_num) attr_value = { 'projectionCenterX': camera_info['tr'][0], 'projectionCenterY': camera_info['tr'][1], 'projectionCenterZ': camera_info['tr'][2], 'rotateX': -camera_info['ro'][0], 'rotateY': camera_info['ro'][1]+180, 'rotateZ': -camera_info['ro'][2], 'projectionHorizontalSweep': camera_info['angle_h'], 'projectionVerticalSweep': camera_info['angle_v'], 'imageScaleU': -1 } projection = cmds.polyProjection( face_name, ch=1, type='Spherical', pcx=0, pcy=0, pcz=0)[0] for attr, value in attr_value.items(): cmds.setAttr(projection + '.' + attr, value)
def layoutUV(obj, type=0): totalFaces = cmds.polyEvaluate(obj, face=True) oneThird = totalFaces / 3 if (type == 0): startFace = 0 endFace = oneThird - 1 cmds.polyProjection(obj + '.f[' + str(startFace) + ':' + str(endFace) + ']', type="planar") if (type == 1): startFace = oneThird endFace = (oneThird * 2) - 1 cmds.polyProjection(obj + '.f[' + str(startFace) + ':' + str(endFace) + ']', type="cylindrical") if (type == 2): startFace = (oneThird * 2) endFace = totalFaces - 1 cmds.polyProjection(obj + '.f[' + str(startFace) + ':' + str(endFace) + ']', type="spherical") if (type == 3): cmds.polyCylindricalProjection(obj + '.f[*]') cmds.polyMapCut( obj + '.e[17]' ) # WARNING: this does not always select a verticle edge as a cut line cmds.unfold(obj + '.map[*]', i=5000, ss=0.001, gb=0, gmb=0.5, pub=0, ps=0, oa=2, us=False)
mc.polyExtrudeEdge(sx=0, sz=0, ty=0.02 * r) mc.polyMergeVertex(d=0.001 * r) nf4 = mc.polyEvaluate(craft_bon, f=1) mc.delete(craft_bon, ch=1) # สร้างเบลนด์เชป mc.select([s.replace(craft_bon, kliao) for s in sl]) for i in range(15): mc.polyExtrudeEdge(ty=r * 0.055) mc.polyExtrudeEdge(sx=0, sz=0, ty=0.02 * r) mc.polyMergeVertex(d=0.001 * r) bs = mc.blendShape(kliao, craft_bon)[0] # สร้าง uv ให้แต่ละส่วนแยกกัน โดยจัดทำ uv ที่โหนดวัตถุเบลนด์เชป แล้วค่อยคัดลอกมาที่วัตถุหลัก at = 'pcx pcy pcz rx ry rz phs pvs'.split() ppj1 = mc.polyProjection(kliao + '.f[%d:%d]' % (nf1, nf2 - 1), t='spherical')[0] ppj2 = mc.polyProjection(kliao + '.f[%d:%d]' % (nf2, nf3 - 1), t='spherical')[0] for a, k1, k2 in zip(at, [0, 5, 0, 90, 0, 0, 130, 130], [0, -2, 0, -90, 0, 0, 160, 160]): mc.setAttr(ppj1 + '.' + a, k1) mc.setAttr(ppj2 + '.' + a, k2) mc.polyAutoProjection(kliao + '.f[%d:%d]' % (nf3, nf4 - 1), ps=0.4)[0] mc.polyTransfer(craft_bon, uv=1, ao=kliao, ch=0) mc.delete(kliao) # ใส่สีให้แต่ละหน้าต่างๆกัน mc.select(craft_bon + '.f[%d:%d]' % (nf1, nf2 - 1)) mc.hyperShade(a=phiu_nuea_nai) mc.select(craft_bon + '.f[%d:%d]' % (nf2, nf3 - 1)) mc.hyperShade(a=phiu_thian)
def mkSphere(): mkObjListS = cmds.ls (sl = True) mkAutoListS = len(mkObjListS) for i in range (0,mkAutoListS,1): cmds.polyProjection(mkObjListS[i],type='Spherical', ch = True,sf = True)
def mkcyclinder(): mkObjListC = cmds.ls (sl = True) mkAutoListC = len(mkObjListC) for i in range (0,mkAutoListC,1): cmds.polyProjection(mkObjListC[i],type='Cylindrical', ch = True,sf = True)
def mkSphere(): mkObjListS = cmds.ls(sl=True) mkAutoListS = len(mkObjListS) for i in range(0, mkAutoListS, 1): cmds.polyProjection(mkObjListS[i], type='Spherical', ch=True, sf=True)
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)