def main(filename, outname, width, height): img = MayaImage(filename) verts = [] faces = [] cmds.constructionHistory(tgl='off') faceIndex = int(0) xstep = width / float(img.width) zstep = height / float(img.height) sz = -height / 2.0 h = int(img.height) w = int(img.width) for y in range(0, h - 1): sx = -width / 2.0 for x in range(0, w): pixel1 = img.getRGB(x, y) pixel2 = img.getRGB(x, y + 1) pixel3 = img.getRGB(x + 1, y) pixel4 = img.getRGB(x + 1, y + 1) verts.append((sx, float(pixel1[0]) * 0.1, sz)) verts.append((sx, float(pixel2[0]) * 0.1, sz + zstep)) verts.append((sx + xstep, float(pixel4[0]) * 0.1, sz + zstep)) verts.append((sx + xstep, float(pixel3[0]) * 0.1, sz)) sx += xstep faces.append( (faceIndex, faceIndex + 1, faceIndex + 2, faceIndex + 3)) faceIndex += 4 sz += zstep create(verts, faces) #cmds.select(all=True) cmds.file(outname, type="OBJexport", pr=True, es=True)
def freezetransform(self, *args): """Deletes the history and freezes the transformations of the selected object. Args: *args: Ignored Returns: None """ cmds.makeIdentity(apply=True, translate=1, rotate=1, scale=1, normal=0) cmds.constructionHistory(query=True, toggle=True)
def __collectNodeState(self): self._fDagPath.extendToShape() meshNodeShape = self._fDagPath.node() depNodeFn = om.MFnDependencyNode(meshNodeShape) inMeshPlug = depNodeFn.findPlug("inMesh") self._fHasHistory = inMeshPlug.isConnected() self._fHasTweaks = False tweakPlug = depNodeFn.findPlug("pnts") if not tweakPlug.isNull(): if not tweakPlug.isArray(): raise Exception( u"tweakPlug.isArray() -- tweakPlug is not an array plug") numElements = tweakPlug.numElements() for i in range(numElements): tweak = tweakPlug.elementByPhysicalIndex(i) if not float3PlugValueIsZero(tweak): self._fHasTweaks = True break self._fHasRecordHistory = cmds.constructionHistory(q=True, tgl=True)
return nodeName basicFilter = "*.*" filename = cmds.fileDialog2(caption="Please select imagefile", fileFilter=basicFilter, fm=1) img = MayaImage(str(filename[0])) verts = [] faces = [] width = 200.0 height = 200.0 cmds.constructionHistory(tgl='off') faceIndex = int(0) xstep = width / float(img.width()) zpos = -1.0 zstep = height / float(img.height()) sz = -10.0 h = img.height() w = img.width() """ -1 -1 -1 1 1 1 1 -1 """
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 getConstructionHistory(self): return cmds.constructionHistory(q=True, tgl=True)
def setConstructionHistory(self, state): cmds.constructionHistory(tgl=state)
def deleteHistory(self, *_): sels = cmds.ls(sl=True) cmds.constructionHistory(query=True, toggle=True) cmds.delete(ch=True)
The operation will temporatly dissable construction history. If you only select one object the object will be seperated then recombined TODO Handel multiple selection that need seperation Scale uvs to fill entire quadrant Work directly on UV islands (not seperating mesh) Port to Blender Replace is statments in for loop with case OPtions for tileing by n# ''' import maya.cmds as cmds import random #Dissable construction history CH = cmds.constructionHistory(q=True, tgl=True) if CH is True: cmds.constructionHistory(toggle=False) else: selection = cmds.ls(selection=True) name = selection[0] count = -1 #Handel for invalid selection SelList = len(selection) if SelList == 0: print("Error, no selection") pass else: #seporate object if combined if SelList == 1:
def readK2P(): mc.constructionHistory(toggle=False) mc.select(all=True) mc.delete() counterMin = 1; counter=counterMin; counterMax = 200; mc.playbackOptions(minTime=counterMin, maxTime=counterMax) skipCounterMin = 1; skipCounter=skipCounterMin; skipCounterMax = 6; path = "/Users/nick/Development/Maya/readxml" fileName = "mocapData1.xml" #trackPoint = ["l_foot","l_knee","l_hip","r_foot","r_knee","r_hip","l_hand","l_elbow","l_shoulder","r_hand","r_elbow","r_shoulder","torso","neck","head"] trackPoint = ["head"] scaler = 10 grav = mc.gravity() xmlFile = xd.parse(path + "/" + fileName) print("loaded: " + fileName) for t in trackPoint: joint = xmlFile.getElementsByTagName(t) jointCounter = 0; cubeName = t #mergeName = t + "Merge" for j in joint: counter=counterMin; x = scaler * float(j.getAttribute("x")) y = scaler * float(j.getAttribute("y")) z = scaler * float(j.getAttribute("z")) if(x!=0 and y!=0 and z!=0): mc.currentTime(counter) counter+=1 if(skipCounter<skipCounterMax): jointCounter+=1 mc.polyCube(name=cubeName+str(counter)) #polyCube(sx=2, sy=2, sz=2, name=cubeName+str(counter)) #polySmooth(dv=1) mc.connectDynamic(f=grav) #adds gravity mc.move(x, y, z) mc.rotate(rnd.uniform(-1 * scaler, scaler),rnd.uniform(-1 * scaler, scaler),rnd.uniform(-1 * scaler, scaler)) skipCounter+=1 else: skipCounter=skipCounterMin print("cubes made: " + str(jointCounter)) #select(all=True) #polyUnite(constructionHistory=False) #1=union, 2=difference, 3=intersection floor = mc.polyPlane(w=30,h=30) mc.rigidBody(passive=True) mc.move(0,0,0) print("...script complete.")
def cachedObjToTransform(*args): '''{'ath':'Animation/Transform/cachedObjToTransform( )', 'ath':'Dynamics/RBD', 'icon':':/transform.svg', 'usage':""" #将缓存物体bake成关键帧物体。 $fun( )""", } ''' if len(args): cachedObj = qm.checkArg(args[0], nodeType='mesh', tryToShape=True) else: cachedObj = qm.checkArg(nodeType='mesh', tryToShape=True) cmds.constructionHistory(toggle=False) #cachedObj = cmds.ls(sl=True,l=True)[0] #sepratate cachedObj minTime = int(cmds.playbackOptions(q=True, min=True)) cmds.currentTime(minTime) temp = cmds.polySeparate(cachedObj, ch=True)[0] rbdGrp = cmds.listRelatives(temp, p=True, f=True)[0] childGrp = cmds.duplicate(rbdGrp, rr=True)[0] parentList = cmds.listRelatives(rbdGrp, type='transform', f=True) childList = cmds.listRelatives(childGrp, type='transform', f=True) cmds.delete(cmds.listRelatives(childGrp, f=True), ch=True) forRemove = [] for obj in parentList: meshNode = cmds.listRelatives(obj, type='mesh', f=True) if meshNode == [] or cmds.getAttr(meshNode[0] + '.intermediateObject') == 1: forRemove.append(obj) if obj in forRemove: parentList.remove(obj) forRemove = [] for obj in childList: meshNode = cmds.listRelatives(obj, type='mesh', f=True) if meshNode == [] or cmds.getAttr(meshNode[0] + '.intermediateObject') == 1: forRemove.append(obj) if obj in forRemove: childList.remove(obj) cmds.delete(forRemove) unfreeze(childList) folGrp = cmds.group(em=True, n=rbdGrp + '_FoGrp') for papa in parentList: index = parentList.index(papa) child = childList[index] meshShape = cmds.listRelatives(papa, type='mesh', f=True)[0] faceCount = cmds.polyEvaluate(papa, f=True) - 1 if faceCount > 10: faceCount = 10 newFace = '%s.f[0:%s]' % (papa, faceCount) cmds.select(newFace) mel.eval('polySplitTextureUV') mel.eval('PolySelectConvert 4') map = cmds.ls(sl=True) cmds.polyNormalizeUV(map, normalizeType=0, preserveAspectRatio=False) cmds.polyEditUV(map, pu=.5, pv=.5, su=2, sv=2) #create follicle and set attribute folShape = cmds.createNode("follicle") folTransform = cmds.listRelatives(folShape, p=True, f=True)[0] cmds.setAttr(folTransform + '.intermediateObject', 1) cmds.setAttr(folShape + '.parameterU', .5, l=True) cmds.setAttr(folShape + '.parameterV', .5, l=True) cmds.setAttr(folShape + ".simulationMethod", 0) cmds.setAttr(folShape + ".collide", 0) cmds.setAttr(folShape + ".degree", 1) cmds.setAttr(folShape + ".sampleDensity", 0) #connection follicles cmds.connectAttr(meshShape + '.worldMatrix[0]', folShape + '.inputWorldMatrix', f=True) cmds.connectAttr(meshShape + '.outMesh', folShape + '.inputMesh', f=True) cmds.connectAttr(folShape + '.outRotate', folTransform + '.rotate', f=True) cmds.connectAttr(folShape + '.outTranslate', folTransform + '.translate', f=True) parentConNode = cmds.parentConstraint(folTransform, child, mo=True)[0] cmds.parent(folTransform, folGrp) minTime = int(cmds.playbackOptions(q=True, min=True)) maxTime = int(cmds.playbackOptions(q=True, max=True)) cmds.bakeResults(childList,simulation=True, t=(minTime,maxTime),sampleBy=1,\ disableImplicitControl=True, preserveOutsideKeys=True, sparseAnimCurveBake=False, removeBakedAttributeFromLayer=False, \ bakeOnOverrideLayer=False,at=['tx','ty','tz','rx','ry','rz']) cmds.delete([folGrp, rbdGrp]) cmds.delete(cmds.listRelatives(childGrp, f=True), ch=True) cmds.constructionHistory(toggle=True)