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 uv_trans_multi(): sel_objects = mc.ls(sl=True) if len(sel_objects) < 2: return False for t in sel_objects[1:]: mc.polyTransfer(t, vc=False, uv=True, v=False, ao=str(sel_objects[0])) return True
def importUVs(): meshes = mc.ls(selection=True) currentWorkspace = mc.workspace(fullName=True) baseDirectory = os.path.join(currentWorkspace, 'scripts') if not meshes: print 'Select at least one object to import the UVs on' else: currentFile = mc.fileDialog2(fileMode=1, startingDirectory=baseDirectory) reference = mc.file(currentFile[0], reference=True, namespace='UVTransfer') referenceNodes = mc.ls('UVTransfer:*') for node in referenceNodes: if mc.objectType(node) == 'mesh': mc.select(node, replace=True) transformNode = mc.listRelatives(parent=True)[0] for mesh in meshes: try: mc.polyTransfer(mesh, uvSets=True, alternateObject=transformNode) #mc.bakePartialHistory(mesh, prePostDeformers=True) except: print 'Object has not the same topology' break mc.file(currentFile[0], removeReference=True)
def TransferUV(self): dobj = cmds.ls(sl=1) if cmds.polyEvaluate(dobj[0], v=1) != cmds.polyEvaluate(dobj[1], v=1): dupobj = cmds.duplicate(dobj[1], rr=1) cmds.transferAttributes(dobj[0], dupobj, pos=0, nml=0, uvs=2, col=2, spa=0, sus="map1", tus="map1", sm=3, fuv=0, clb=1) cmds.delete(dupobj, ch=1) cmds.polyTransfer(dobj[1], uv=1, ao=dupobj[0]) cmds.delete(dupobj) else: cmds.polyTransfer(dobj[1], uv=1, ao=dobj[0])
def uv_transfer(self): suffix_source = self.line_edit_source.text() suffix_target = self.line_edit_target.text() list_sel = mc.ls(sl=True, long=True, dag=True) or [] list_mesh = mc.listRelatives(list_sel, shapes=True, type="mesh", fullPath=True) or [] list_mesh_source = [] list_mesh_target = [] dict_mesh = {} # {source: target} if len(list_sel) == 0: om.MGlobal.displayWarning("Please select geos!") else: # get "list_mesh_source" for i in list_mesh: # i_shape = i.split("|")[-1] i_transform = i.split("|")[-2] if suffix_source in i_transform: list_mesh_source.append(i) # get "list_mesh_target" for i in list_mesh: # i_shape = i.split("|")[-1] i_transform = i.split("|")[-2] if suffix_target in i_transform: list_mesh_target.append(i) # check if two groups of geo have some piece counts if len(list_mesh_source) != len(list_mesh_target): count_source = "sources " + str(len(list_mesh_source)) count_target = "targets " + str(len(list_mesh_target)) warning = "Two groups of geos have different numbers of pieces:" om.MGlobal.displayWarning(' '.join((warning, count_source, count_target))) else: # get "dict_mesh" for i in list_mesh_source: # i_shape = i.split("|")[-1] i_transform = i.split("|")[-2] prefix = i_transform[:-(len(suffix_source)+1)] # print prefix for j in list_mesh_target: if prefix in j: dict_mesh[i] = j for source, target in dict_mesh.items(): # do uv transfer mc.polyTransfer(target, vertices=0, vertexColor=0, uvSets=1, alternateObject=source)
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 delUVTransferAttributesNode(obj): SH = cmds.listRelatives(obj, s=True, f=True, ni=True, type='mesh') allSH = cmds.listRelatives(obj, s=True, f=True, type='mesh') orgSH = [] deformers = [] inputType = ('skinCluster', 'blendShape', 'ffd', 'wrap', 'cluster', 'nonLinear', 'sculpt', 'jiggle', 'wire', 'groupParts', 'groupId') deformerType = ('skinCluster', 'blendShape', 'ffd', 'wrap', 'cluster', 'nonLinear', 'sculpt', 'jiggle', 'wire') hist = cmds.listHistory(obj) for histIt in hist: ListNode = cmds.nodeType(histIt) if (deformerType.count(ListNode) and deformers.append(histIt)): pass for itSH in allSH: if (cmds.getAttr((itSH + '.intermediateObject')) and (cmds.listConnections(itSH, d=False) == None)): orgSH.append(itSH) if (len(SH) == 1): imputNode = cmds.listConnections((SH[0] + '.inMesh'), d=False, sh=True) if (len(imputNode) and (inputType.count(cmds.nodeType(imputNode)) != True)): if len(orgSH): mesh = cmds.createNode('mesh') for orgIt in orgSH: cmds.connectAttr((SH[0] + '.outMesh'), (mesh + '.inMesh'), f=True) cmds.refresh() cmds.disconnectAttr((SH[0] + '.outMesh'), (mesh + '.inMesh')) cmds.polyTransfer(orgIt, v=False, vc=False, uv=True, ao=mesh) transfer = cmds.listConnections(orgIt, d=False) NewOrg = cmds.listConnections((transfer[0] + '.inputPolymesh'), d=False, sh=True) cmds.delete(NewOrg) if cmds.delete(cmds.listRelatives(mesh, p=True, f=True)): pass n = True while n: inputNode = cmds.listConnections((SH[0] + '.inMesh'), d=False, sh=True) if (len(inputNode) is None): n = False break breakWhile = [] selINode = cmds.nodeType(inputNode) breakWhile.append(str(selINode)) if (inputType.count(breakWhile) == True): n = False break cmds.delete(inputNode) n = False
def transmitFileUVCmd(maPath,uvPath,logPath,openLog=False,longName=True): ''' after used 'transmitFileUVBackStage' ''' import maya.cmds as cmds # open ma file cmds.file(maPath, force=True, open=True, prompt=False,ignoreVersion=True) # reference UV filename = os.path.basename(uvPath) ns = os.path.splitext(filename)[0] refPath = cmds.file(uvPath, reference=True, ignoreVersion=True, groupLocator=True, mergeNamespacesOnClash=False, options="v=0;",namespace=ns) allReferenceMesh = cmds.ls(type="mesh",referencedNodes=True,dag=True) allRefObj = [cmds.listRelatives(m,p=True,fullPath=True)[0] for m in allReferenceMesh if not cmds.getAttr("%s.intermediateObject"%m)] namespace = cmds.referenceQuery(refPath, namespace=True) namespace = namespace.lstrip(':') # passing data for uvObj in allRefObj: obj = uvObj.replace('|%s:'%namespace,'|') # obj: "|mesh" obj = obj[1:] if not longName: obj = obj.rsplit('|',1)[0] if cmds.objExists(obj): transmit=uvObj receive=obj print [transmit,receive] # transmit uv if cmds.listRelatives(receive): # judge the object if is None cmds.polyTransfer(receive, uv=1, ch=0, ao=transmit, constructionHistory=False) # remove reference cmds.file(refPath, removeReference=True) # save cmds.file(force=True, save=True, prompt=False)
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) mc.select(craft_bon + '.f[%d:%d]' % (nf3, nf4 - 1)) mc.hyperShade(a=phiu_sai_thian) # ลบหน้าส่วนล่างที่ไม่ได้ใช้ mc.delete(craft_bon + '.f[0:%d]' % (nf1 - 1)) mc.select([craft_bon + '.e[%d]' % i for i in range(121, 166, 4)]) mc.move(0, 0.05 * r, r=1)
def transferUVs(self, objects): for obj in objects: if obj != objects[0]: cmds.polyTransfer(obj, ao=objects[0], uv=1, ch=0)
def polyTransfer(*args, **kwargs): res = cmds.polyTransfer(*args, **kwargs) if not kwargs.get('query', kwargs.get('q', False)): res = _factories.maybeConvert(res, _general.PyNode) return res
import maya.mel as mel import maya.cmds as cmds # add this to the function in zTools sel = cmds.ls(sl=True) for x in range(1, len(sel)): cmds.polyTransfer(sel[i], uv=1, ao=sel[0]) # leave only one bind pose in scene sc = cmds.ls(type="dagPose") for s in sc: cmds.delete(s) cmds.dagPose(bp=True, save=True) #stick a joint in center of verts import maya.cmds as cmds import maya.mel as mel import zTools.rig.zbw_rig as rig # convert this selection to components? sel = cmds.ls(sl=True, fl=True) jnt = cmds.joint(name="CenterJoint") pos = rig.average_point_positions(sel) cmds.xform(jnt, ws=True, t=pos) # cmds.parent(jnt, w=True)