Пример #1
0
def selectTextureBorderEdges(obj):
    sel = OpenMaya.MSelectionList()
    sel.add(obj)
    dagPath = sel.getDagPath(0)
    fnMesh = OpenMaya.MFnMesh(dagPath)
    nbUvShells, uvShellIds = fnMesh.getUvShellsIds()
    uvShells = [UVShell(i, dagPath.fullPathName()) for i in range(nbUvShells)]

    for n, i in enumerate(uvShellIds):
        uvShells[i].uvIndices.append(n)

    for i in uvShells:
        i.setPath()

    edges = []

    for s in uvShells:
        cmds.select(s.fullPathList[0], r=True)
        cmds.ConvertSelectionToUVShellBorder()
        cmds.ConvertSelectionToVertices()
        cmds.ConvertSelectionToContainedEdges()
        shellBorderEdges = cmds.ls(sl=True, fl=True, long=True)
        edges.extend(shellBorderEdges)
        cmds.select(d=True)

    return list(set(edges))
Пример #2
0
def mirrorGeo():
    # Variables and selection
    mirrorMode = cmds.radioButtonGrp('mirrorMode', q=True, sl=True)
    mDir = cmds.radioButtonGrp('mDir', q=True, sl=True)
    sel = cmds.ls(sl=True)

    # Duplication type
    if (mirrorMode == 1):
        cmds.duplicate()
    elif (mirrorMode == 2):
        cmds.instance()
    else:
        newHalf = cmds.duplicate()

    # Scaling
    if (mDir == 1):
        cmds.scale(-1, 1, 1)
    elif (mDir == 2):
        cmds.scale(1, -1, 1)
    else:
        cmds.scale(1, 1, -1)

    # Merging Copy
    if (mirrorMode == 3):
        cmds.select(sel[0], r=True)
        cmds.select(newHalf, add=True)
        cmds.polyUnite()
        cmds.ConvertSelectionToVertices()
        cmds.polyMergeVertex(d=0.001, am=1, ch=1)
        cmds.select(sel[0])
def setLow(*args):
    print "Set low.";
    global high;
    global low,low_uv
    global vtx_list;
    global low_text;
    low=[];
    vtx_list=[];
    selected = cmds.ls(sl=True,long=True) or []
    count = len(selected)  
    if count<=0:
        print "null select.";
        cmds.text(low_text,l="Low not set",edit=True)
        return;
    elif count==1:
        print "Set low ",selected[0];
        cmds.text(low_text,l=selected[0],edit=True)
    else:
        cmds.text(low_text,l=len+" selected.",edit=True)
    
    cmds.ConvertSelectionToVertices()
    for i in cmds.filterExpand( sm=31 ):
        low.append(cmds.xform(i,ws=True,q=True,t=True))    
        vtx_list.append(i)
#get lowuv        
    low_uv = getUVs()
       
    return;
Пример #4
0
 def setAverageWeight(self, vtx):
     msh = vtx.split('.')[0]
     cmds.select(vtx)
     cmds.ConvertSelectionToEdges()
     cmds.ConvertSelectionToVertices()
     neighbors = cmds.ls(sl=1, flatten=1)
     neighbors.pop(neighbors.index(vtx))
     infList = {}
     skin = self.findRelatedSkinCluster(msh)
     for vert in neighbors:
         for jnt in cmds.skinCluster(skin, q=1, wi=1):
             amt = cmds.skinPercent(skin, vert, q=1, t=jnt)
             if amt > 0.0:
                 if jnt in infList: infList[jnt].append(amt)
                 else: infList[str(jnt)] = [amt]
     for inf in infList:
         total = None
         for w in infList[inf]:
             if not total: total = w
             else: total += w
         weight = total / len(infList[inf])
         cmds.skinPercent(self.currentSkin,
                          vtx,
                          tv=[str(inf), weight],
                          nrm=1)
def getVertexWeights():
    
    sbs = []
    meshSkinCluster = None
    
    # get all selected vetices in order
    cmds.ConvertSelectionToVertices()
    verts = cmds.ls(flatten = True, orderedSelection = True)
    cmds.polyEvaluate( v=True)
    # check is any vertex 
    if len(verts) == 0:
        return cmds.error( "Please select vetices with skin weighs" )
    else:
        obj = cmds.ls(verts[0], objectsOnly = True)
        history = cmds.listHistory(obj) 
    #get mesh skin cluster
        for historyNode in history:
            if cmds.nodeType(historyNode)=="skinCluster":
                meshSkinCluster = historyNode
    #get joint list   
        for each in verts:
            #get weight values
            skinVals = cmds.skinPercent(meshSkinCluster, each, query=True, value=True)
            for v in skinVals:
                if( len(str(v)) >= 5 ):
                    sbs.append(each)
                    break
    r = len(sbs)
    if r>0:
        cmds.confirmDialog( title='PointCheck', message='Select bad point:'+str(r), button=['OK'], defaultButton='OK' )
        cmds.select(sbs)
    else:
        cmds.confirmDialog( title='PointCheck', message='No bad point!', button=['OK'], defaultButton='OK' )
Пример #6
0
    def redoIt(self):
        """ redo it """

        cmds.undoInfo(openChunk=True)
        try:
            cmds.ConvertSelectionToEdgePerimeter()
            cmds.ConvertSelectionToVertices()

            # List of pm vertex object
            vtxInOrder = self.getVerticesInOrder()

            pm.select(vtxInOrder, r=True)

            m_sel = OpenMaya.MSelectionList()
            OpenMaya.MGlobal.getActiveSelectionList(m_sel)
            dagPath = OpenMaya.MDagPath()
            components = OpenMaya.MObject()
            m_sel.getDagPath(0, dagPath, components)
            v_iter = OpenMaya.MItMeshVertex(dagPath, components)

            self.CENTER = self.getCenter(v_iter)

            fnMesh = OpenMaya.MFnMesh(dagPath)

            normalVector = self.getClosestNormal(self.CENTER, fnMesh)

            firstPoint = OpenMaya.MPoint(
                vtxInOrder[0].getPosition(space='world').x,
                vtxInOrder[0].getPosition(space='world').y,
                vtxInOrder[0].getPosition(space='world').z)

            firstVector = firstPoint - self.CENTER

            # Scale circle
            firstVector = firstVector * self.MULTIPLY

            numOfVertices = len(vtxInOrder)
            baseDegree = 360.0 / numOfVertices
            degree = 0.0 + self.ROTATION

            for i in vtxInOrder:
                nextVector = self.rotateVector(
                    degree, firstVector, normalVector)

                if self.INVERTED is True:
                    degree += -baseDegree
                else:
                    degree += baseDegree

                self.setPoint(i, nextVector, normalVector, fnMesh)
        except:
            pass
        finally:
            cmds.undoInfo(closeChunk=True)
Пример #7
0
    def rebind(self):
        components = self.components_to_rebind.text().split()
        faces = self.target_faces.text().split()
        wrap_node = self.cvwrap_combo.currentText()
        radius = self.sample_radius.value()
        # Make sure the faces are actual faces.  If they are not, convert to faces.
        cmds.select(faces)
        cmds.ConvertSelectionToFaces()
        faces = cmds.ls(sl=True)

        cmds.select(components)
        cmds.ConvertSelectionToVertices()
        cmds.select(faces, add=True)
        cmds.cvWrap(rb=wrap_node, radius=radius)
        print 'Rebounded vertices'
Пример #8
0
def fixEdgeLength(edge, targetLength):
    '''
    Single edge length correction calculus
    '''
    cmds.select(edge)
    sel = cmds.ls(sl=True, fl=True)
    cmds.ConvertSelectionToVertices()

    p = cmds.xform(sel, q=True, t=True, ws=True)
    length = math.sqrt(
        math.pow(p[0] - p[3], 2) + math.pow(p[1] - p[4], 2) +
        math.pow(p[2] - p[5], 2))
    cmds.select(sel)
    scaleLength = ((targetLength * 100) / length) / 100
    cmds.polyMoveEdge(sel, localScaleX=scaleLength)
    print 'Previous Edge Length=' + str(length) + "\tTarget length=" + str(
        targetLength) + "\tScaled " + str(scaleLength),
Пример #9
0
 def setAverageWeightFn(self):
     try:
         cmds.undoInfo(openChunk=True)
         if not self.avgOptionCHK.isChecked():
             mel.eval('weightHammerVerts;')
         else:
             sel = cmds.ls(sl=1)
             cmds.ConvertSelectionToVertices()
             newSel = cmds.ls(sl=1, flatten=1)
             for vert in newSel:
                 self.setAverageWeight(vert)
             self.clampInfluences(self.currentMesh,
                                  self.clampInfSPIN.value(),
                                  force=1)
             cmds.select(sel)
     except Exception as e:
         cmds.error('skinWrangler: ' + str(e))
     finally:
         cmds.undoInfo(closeChunk=True)
Пример #10
0
def doIt():
	cmds.ConvertSelectionToVertices()
	lsres = ls( sl = True )

	target = []
	
	for vtxs in lsres:
		for v in vtxs:
			minA = None
			minIndex = None
			ed = v.connectedEdges()

			if( ed.count() != 5 ):
				continue
			
			for index in range( ed.count() ):
				ed.setIndex(index)
				c = ed.currentItem()
				cv = getVec(c,v)
				
				se = getSideEdge( c, v )
				if( len( se ) != 2 ):
					continue

				pv = getVec(se[0],v)
				nv = getVec(se[1],v)
				
				a0 = acos( dot( cv, pv ) )
				a1 = acos( dot( cv, nv ) )
				a2 = acos( dot( pv, nv ) )
				acc = a0 + a1
				
				if( minA is None or minA > acc ):
					minA = acc
					minIndex = index
					
			if( minIndex is not None ):
				ed.setIndex( minIndex )
				target.append( ed.currentItem() )

	selectType( eg = True )
	select( cl = True )
	select( target, r = True )
Пример #11
0
def spherify(radius=10):
    def distance(p1, p2):
        return math.sqrt(((p1[0] - p2[0])**2) + ((p1[1] - p2[1])**2) +
                         ((p1[2] - p2[2])**2))

    def normalize(v):
        length = math.sqrt(v[0]**2 + v[1]**2 + v[2]**2)
        return [v[0] / length, v[1] / length, v[2] / length]

    selected = cmds.ls(sl=1, fl=1)
    #get some vertices to work with
    cmds.ConvertSelectionToVertices()
    vertices = cmds.ls(sl=1, fl=1)

    #find centroid
    centroid = [0, 0, 0]
    for i in range(0, len(vertices)):
        p = vertices[i]
        pos = cmds.pointPosition(vertices[i])
        centroid[0] += pos[0]
        centroid[1] += pos[1]
        centroid[2] += pos[2]
    centroid[0] /= len(vertices)
    centroid[1] /= len(vertices)
    centroid[2] /= len(vertices)

    #move the vertices
    for v in vertices:
        pos = cmds.pointPosition(v)
        diff = normalize(
            [pos[0] - centroid[0], pos[1] - centroid[1], pos[2] - centroid[2]])
        dist = distance(centroid, pos)
        pos = [
            centroid[0] + diff[0] * radius, centroid[1] + diff[1] * radius,
            centroid[2] + diff[2] * radius
        ]
        cmds.select(v, r=1)
        cmds.move(pos[0], pos[1], pos[2])

    cmds.select(selected, r=1)
def setHigh(*args):
    print "Set high.";
    global high,high_uv
    global high_text;
    high=[];
    selected = cmds.ls(sl=True,long=True) or []
    count = len(selected)  
    if count<=0:
        print "null select.";
        cmds.text(high_text,l="High not set",edit=True)
        return;
    elif count==1:
        print "Set high ",selected[0];
        cmds.text(high_text,l=selected[0],edit=True)
    else:
        cmds.text(high_text,l=len+" selected.",edit=True)
        
    cmds.ConvertSelectionToVertices()
    for i in cmds.filterExpand( sm=31 ):
        high.append(cmds.xform(i,ws=True,q=True,t=True))
#get highuv       
    high_uv = getUVs()
        
    return;
Пример #13
0
import pymel.core as pm
import maya.cmds as cmds

cmds.hyperShade(o="lambert1")

cmds.ConvertSelectionToVertices()

#shrink selected region to avoid border verticies
cmds.ShrinkPolygonSelectionRegion()

#list selected verticies, sl for selected, fl for ungrouped
print pm.ls(sl=True, fl=True, l=True)
Пример #14
0
def storeSide(sideAB, *args):
    cmds.ConvertSelectionToVertices()
    allSideVerts = cmds.ls(sl=True, fl=True)
    smartBridgeDict[sideAB]['all_verts'] = allSideVerts
    print(sideAB)
    print(smartBridgeDict[sideAB]['all_verts'])
Пример #15
0
def selVert(*args):
	cmds.ConvertSelectionToVertices()
Пример #16
0
def AlgPosition():
    getSl = cmds.radioButtonGrp('AlignRadio', q=True, sl=True)
    sel = cmds.ls(sl=True, fl=True)
    if len(cmds.ls(sl=True)) > 1:
        if getSl == 1:
            posX_list = []
            posY_list = []
            posZ_list = []
            if cmds.objectType(
                    cmds.ls(sl=True)[0]) == 'transform' or cmds.objectType(
                        cmds.ls(sl=True)[0]) == 'joint':
                Obj_List = cmds.ls(sl=True)
                for index in range(len(Obj_List) - 1):
                    getPos = cmds.xform(Obj_List[index],
                                        q=True,
                                        ws=True,
                                        sp=True)
                    posX_list.append(getPos[0])
                    posY_list.append(getPos[1])
                    posZ_list.append(getPos[2])
                sortX = (max(posX_list) + min(posX_list)) / 2
                sortY = (max(posY_list) + min(posY_list)) / 2
                sortZ = (max(posZ_list) + min(posZ_list)) / 2
                sortPos = (sortX, sortY, sortZ)
                cmds.xform(Obj_List[-1], ws=True, t=(sortX, sortY, sortZ))

            if cmds.objectType(cmds.ls(sl=True)[0]) == 'mesh':
                objects = []
                selObj = cmds.ls(sl=True, fl=True)
                for obj2 in selObj:
                    if cmds.objectType(
                            obj2) != 'transform' and cmds.objectType(
                                obj2) != 'joint':
                        objects.append(obj2)
                    cmds.select(objects, r=True)

                    cmds.ConvertSelectionToVertices()
                    vtxList = cmds.ls(sl=True, fl=True)
                    for index in vtxList:
                        getPos = cmds.pointPosition(index, w=True)
                        posX_list.append(getPos[0])
                        posY_list.append(getPos[1])
                        posZ_list.append(getPos[2])
                    sortX = (max(posX_list) + min(posX_list)) / 2
                    sortY = (max(posY_list) + min(posY_list)) / 2
                    sortZ = (max(posZ_list) + min(posZ_list)) / 2
                    sortPos = (sortX, sortY, sortZ)
                    cmds.xform(selObj[-1], ws=True, t=(sortX, sortY, sortZ))

            if cmds.objectType(
                    cmds.ls(sl=True)[0]) == 'nurbsCurve' or cmds.objectType(
                        cmds.ls(sl=True)[0]) == 'nurbsSurface':
                objects = []
                selObj = cmds.ls(sl=True, fl=True)
                for obj2 in selObj:
                    if cmds.objectType(
                            obj2) != 'transform' and cmds.objectType(
                                obj2) != 'joint':
                        objects.append(obj2)
                    cmds.select(objects, r=True)

                    vtxList = cmds.ls(sl=True, fl=True)
                    for index in vtxList:
                        getPos = cmds.pointPosition(index, w=True)
                        posX_list.append(getPos[0])
                        posY_list.append(getPos[1])
                        posZ_list.append(getPos[2])
                    sortX = (max(posX_list) + min(posX_list)) / 2
                    sortY = (max(posY_list) + min(posY_list)) / 2
                    sortZ = (max(posZ_list) + min(posZ_list)) / 2
                    sortPos = (sortX, sortY, sortZ)
                    cmds.xform(selObj[-1], ws=True, t=(sortX, sortY, sortZ))
            cmds.select(sel)
            if len(sel) == 2:
                if cmds.objectType(
                        cmds.ls(sl=True)[0]) == 'transform' or cmds.objectType(
                            cmds.ls(sl=True)[0]) == 'joint':
                    cmds.xform(sel[1],
                               ws=True,
                               ro=cmds.xform(sel[0], q=True, ws=True, ro=True))
            cmds.select(cl=True)

        if getSl == 2:
            posX_list = []
            posY_list = []
            posZ_list = []
            if cmds.objectType(
                    cmds.ls(sl=True)[0]) == 'transform' or cmds.objectType(
                        cmds.ls(sl=True)[0]) == 'joint':
                Obj_List = cmds.ls(sl=True)
                for index in range(len(Obj_List) - 1):
                    getPos = cmds.xform(Obj_List[index],
                                        q=True,
                                        ws=True,
                                        sp=True)
                    posX_list.append(getPos[0])
                    posY_list.append(getPos[1])
                    posZ_list.append(getPos[2])
                sortX = (max(posX_list) + min(posX_list)) / 2
                sortY = (max(posY_list) + min(posY_list)) / 2
                sortZ = (max(posZ_list) + min(posZ_list)) / 2
                sortPos = (sortX, sortY, sortZ)
                cmds.xform(Obj_List[-1], ws=True, t=(sortX, sortY, sortZ))

            if cmds.objectType(cmds.ls(sl=True)[0]) == 'mesh':
                objects = []
                selObj = cmds.ls(sl=True, fl=True)
                for obj2 in selObj:
                    if cmds.objectType(
                            obj2) != 'transform' and cmds.objectType(
                                obj2) != 'joint':
                        objects.append(obj2)
                    cmds.select(objects, r=True)

                    cmds.ConvertSelectionToVertices()
                    vtxList = cmds.ls(sl=True, fl=True)
                    for index in vtxList:
                        getPos = cmds.pointPosition(index, w=True)
                        posX_list.append(getPos[0])
                        posY_list.append(getPos[1])
                        posZ_list.append(getPos[2])
                    sortX = (max(posX_list) + min(posX_list)) / 2
                    sortY = (max(posY_list) + min(posY_list)) / 2
                    sortZ = (max(posZ_list) + min(posZ_list)) / 2
                    sortPos = (sortX, sortY, sortZ)
                    cmds.xform(selObj[-1], ws=True, t=(sortX, sortY, sortZ))

            if cmds.objectType(
                    cmds.ls(sl=True)[0]) == 'nurbsCurve' or cmds.objectType(
                        cmds.ls(sl=True)[0]) == 'nurbsSurface':
                objects = []
                selObj = cmds.ls(sl=True, fl=True)
                for obj2 in selObj:
                    if cmds.objectType(
                            obj2) != 'transform' and cmds.objectType(
                                obj2) != 'joint':
                        objects.append(obj2)
                    cmds.select(objects, r=True)

                    vtxList = cmds.ls(sl=True, fl=True)
                    for index in vtxList:
                        getPos = cmds.pointPosition(index, w=True)
                        posX_list.append(getPos[0])
                        posY_list.append(getPos[1])
                        posZ_list.append(getPos[2])
                    sortX = (max(posX_list) + min(posX_list)) / 2
                    sortY = (max(posY_list) + min(posY_list)) / 2
                    sortZ = (max(posZ_list) + min(posZ_list)) / 2
                    sortPos = (sortX, sortY, sortZ)
                    cmds.xform(selObj[-1], ws=True, t=(sortX, sortY, sortZ))
            cmds.select(cl=True)
        if getSl == 3:
            sel = cmds.ls(sl=True, fl=True)
            if cmds.selectType(pf=True, q=True) == True and len(sel) == 2:
                getNormal = cmds.polyInfo(fn=True)
                normal = (float(getNormal[0].split(':')[1].split(' ')[1]),
                          float(getNormal[0].split(':')[1].split(' ')[2]),
                          float(getNormal[0].split(':')[1].split(' ')[3]))

                M_Vec = api.MVector(normal)
                target_Vec = api.MVector(0, 0, 1)
                getRot = M_Vec.rotateTo(target_Vec)
                MQuaternion = api.MQuaternion(getRot)
                getConjugate = MQuaternion.conjugate()

                MEulerRotation = api.MQuaternion(normal[0], normal[1],
                                                 normal[2], 0)
                msel = api.MSelectionList()
                msel.add(sel[1])
                dagPath = msel.getDagPath(0)
                mfnTransform = api.MFnTransform(dagPath)
                M_Vec = api.MVector(normal)
                target_Vec = api.MVector(0, 0, 1)
                getRot = M_Vec.rotateTo(target_Vec)
                MQuaternion = api.MQuaternion(getRot)
                getConjugate = MQuaternion.conjugate()
                mfnTransform.setRotation(getConjugate, api.MSpace.kObject)

            if len(sel) == 2:
                if cmds.objectType(
                        cmds.ls(sl=True)[0]) == 'transform' or cmds.objectType(
                            cmds.ls(sl=True)[0]) == 'joint':
                    cmds.xform(sel[1],
                               ws=True,
                               ro=cmds.xform(sel[0], q=True, ws=True, ro=True))
                cmds.select(cl=True)
    cmds.select(sel[-1])
Пример #17
0
    def heyWitch_addChopShader(self, meshKey, meshObj, *args):
        if meshObj.set_label == "":
            chpClrSetTextFld = self.heyWitch_makeChopSetWin()
            if chpClrSetTextFld != "cancelset":
                greenlight = True
                meshObj.set_label = chpClrSetTextFld
        else:
            greenlight = True
            chpClrSetTextFld = meshObj.set_label

        if greenlight == True:
            chpShdrLabelPrompt = cmds.promptDialog(
                message=("Enter Label for Chop Shader"),
                button=['OK', 'Cancel'],
                defaultButton='OK',
                cancelButton='Cancel',
                dismissString='Cancel')

            if chpShdrLabelPrompt == 'OK':
                chpShdrTextFld = cmds.promptDialog(query=True, text=True)
                if chpShdrTextFld == "":
                    randomNo = random.randint(100, 999)
                    chpShdrTextFld = str(randomNo)

            selPoly = cmds.ls(sl=True, fl=True)
            chopShaderDict = deepcopy(meshObj.all_shaders)
            mtlName = 'btw_' + chpClrSetTextFld + '_' + chpShdrTextFld + "_geoChp_Mtl"
            randRed = random.uniform(0.0, 1.0)
            randGreen = random.uniform(0.0, 1.0)
            randBlue = random.uniform(0.0, 1.0)
            # cmds.shadingNode('lambert', asShader=True, name=mtlName)
            # cmds.setAttr((mtlName + ".color"), randRed, randGreen, randBlue, type='double3')
            cmds.select(selPoly)
            # cmds.hyperShade(a=mtlName)
            cmds.ConvertSelectionToVertices()
            pm.mel.polyColorPerVertex(a=1,
                                      cdo=1,
                                      rgb=(randRed, randGreen, randBlue))
            # cmds.HypershadeSelectObjectsWithMaterials()
            vertsSelected = cmds.ls(sl=True, fl=True)
            tempVertBook = {}
            sel_add_command_string = "cmds.select("
            arg_count = 0
            for x in vertsSelected:
                tempVertBook[x] = 0
                if arg_count <= 250:
                    temp_scs = sel_add_command_string + '"' + x + '", '
                    sel_add_command_string = temp_scs
                    arg_count += 1
                else:
                    temp_scs = sel_add_command_string + 'add=True)\ncmds.select('
                    sel_add_command_string = temp_scs + '"' + x + '", '
                    arg_count = 0
            temp_scs = sel_add_command_string + 'add=True)'
            sel_add_command_string = temp_scs
            single_sel_command_string = 'cmds.select(clear=True)\n' + sel_add_command_string
            chopShader = ChopShader()
            chopShader.vert_vals = deepcopy(tempVertBook)
            chopShader.set_label = chpClrSetTextFld
            chopShader.red = randRed
            chopShader.green = randGreen
            chopShader.blue = randBlue
            chopShader.short_name = chpShdrTextFld
            chopShader.single_sel_command = single_sel_command_string
            chopShader.add_to_sel_command = sel_add_command_string
            chopShaderDict[mtlName] = chopShader
            meshObj.all_shaders = deepcopy(chopShaderDict)
            cmds.select(meshKey)
            pm.mel.dR_DoCmd("modePoly")
Пример #18
0
    def heyWitch_geoChopRandomColourSet(self, utlWkshpLabel, *args):
        chpClrSetTextFld = self.heyWitch_makeChopSetWin()
        if chpClrSetTextFld != "cancelset":
            choppedBits = cmds.ls(sl=True, type='transform')
            chopShaderDict = {}
            for x in choppedBits:
                mtlName = 'btw_' + chpClrSetTextFld + '_' + x + "_Mtl"
                randRed = random.uniform(0.0, 1.0)
                randGreen = random.uniform(0.0, 1.0)
                randBlue = random.uniform(0.0, 1.0)
                cmds.shadingNode('lambert', asShader=True, name=mtlName)
                cmds.setAttr((mtlName + ".color"),
                             randRed,
                             randGreen,
                             randBlue,
                             type='double3')
                cmds.select(x)
                cmds.hyperShade(a=mtlName)
                cmds.ConvertSelectionToVertices()
                pm.mel.polyColorPerVertex(a=1,
                                          cdo=1,
                                          rgb=(randRed, randGreen, randBlue))
                chopShader = ChopShader()
                chopShader.set_label = chpClrSetTextFld
                chopShader.red = randRed
                chopShader.green = randGreen
                chopShader.blue = randBlue
                chopShader.short_name = x
                chopShaderDict[mtlName] = chopShader

            cmds.select(clear=True)
            for y in choppedBits:
                cmds.select(y, add=True)
            cmds.CombinePolygons()
            cmds.PolyMerge()
            newChopMeshName = 'chpMsh_' + chpClrSetTextFld
            newChopMeshSel = cmds.ls(sl=True, type='transform')
            cmds.rename(newChopMeshSel[0], newChopMeshName)
            self.helper.heyWitch_blankSlate(newChopMeshName)
            chopMesh = ChopMesh()
            chopMesh.set_label = chpClrSetTextFld
            chopMesh.all_shaders = deepcopy(chopShaderDict)

            for k0, v0 in chopMesh.all_shaders.items():
                tempVertBook = {}
                cmds.select(k0)
                cmds.HypershadeSelectObjectsWithMaterials()
                cmds.ConvertSelectionToVertices()
                vertsSelected = cmds.ls(sl=True, fl=True)
                cmds.delete(k0)
                for x in vertsSelected:
                    tempVertBook[x] = 0
                v0.vert_vals = deepcopy(tempVertBook)

            for chopShader in chopMesh.all_shaders.values():
                sel_add_command_string = "cmds.select("
                arg_count = 0
                for vtx in chopShader.vert_vals.keys():
                    if arg_count <= 250:
                        temp_scs = sel_add_command_string + '"' + vtx + '", '
                        sel_add_command_string = temp_scs
                        arg_count += 1
                    else:
                        temp_scs = sel_add_command_string + 'add=True)\ncmds.select('
                        sel_add_command_string = temp_scs + '"' + vtx + '", '
                        arg_count = 0
                temp_scs = sel_add_command_string + 'add=True)'
                sel_add_command_string = temp_scs
                single_sel_command_string = 'cmds.select(clear=True)\n' + sel_add_command_string
                chopShader.single_sel_command = single_sel_command_string
                chopShader.add_to_sel_command = sel_add_command_string
                cmds.select(clear=True)
            chopMesh.utl_wkshp_label = utlWkshpLabel
            cmds.parent(newChopMeshName, utlWkshpLabel + '_grp')
            storageSearch = ['spawnStorage', 'targetStorage']
            for storage in storageSearch:
                for v1 in self.global_work_space[storage].values():
                    if storage == 'spawnStorage':
                        if chopMesh.utl_wkshp_label in v1.mesh_skinning_workspace.utility_nest:
                            chopMesh.mesh_spawn_name = v1.mesh_spawn_name
                    else:
                        if chopMesh.utl_wkshp_label in v1.utility_nest:
                            chopMesh.mesh_spawn_name = v1.mesh_spawn_name
            self.global_work_space['chopMeshStorage'][
                newChopMeshName] = chopMesh
            tree_layout = self.global_work_space['miscData']['switch_layouts'][
                'msw_tree_layout']
            cmds.treeView(tree_layout,
                          edit=True,
                          addItem=(newChopMeshName, chopMesh.utl_wkshp_label),
                          cs=True)
            cmds.treeView(tree_layout,
                          edit=True,
                          selectItem=(newChopMeshName, True))
            cmds.shadingNode('lambert', asShader=True, name='btw_chop_Mtl')
            cmds.select(newChopMeshName)
            cmds.hyperShade(a='btw_chop_Mtl')
            pm.mel.dR_DoCmd("modeObject")
Пример #19
0
def makeHolebyGeo():
    cmds.polyPoke()
    cmds.ConvertSelectionToVertices()
    cmds.ShrinkPolygonSelectionRegion()
    maya.mel.eval("polyChamferVtx 1 0.25 0;")