import maya.OpenMaya as om
sgNodeList = om.MSelectionList()
iter_temp = om.MItDependencyNodes(om.MFn.kShadingEngine)
while not iter_temp.isDone():
sgname = om.MFnDependencyNode(iter_temp.item()).name()
if (sgname != 'initialShadingGroup')and(sgname != 'initialParticleSE'):
sgNodeList.add(iter_temp.item())
iter_temp.next()
om.MGlobal.setActiveSelectionList(sgNodeList)
om.MFileIO.exportSelected('D:/shadingGroup.mb','mayaBinary')
选中a b两物体 判断是否穿插 若穿插则选出a穿入b里的点
import maya.OpenMaya as om
import maya.cmds as mc
sel = om.MSelectionList()
om.MGlobal.getActiveSelectionList(sel)
sourceObj = om.MObject()
targetObj = om.MObject()
targetObjPath = om.MDagPath()
sel.getDependNode(0,sourceObj)
sel.getDependNode(1,targetObj)
sel.getDagPath(1,targetObjPath)
sourceObjDag = om.MFnDagNode(sourceObj)
targetObjDag = om.MFnDagNode(targetObj)
sourceName = sourceObjDag.name()
sourceShape = sourceObjDag.child(0)
targetShape = targetObjDag.child(0)
sourceMesh = om.MFnMesh(sourceShape)
targetMesh = om.MFnMesh(targetObjPath)
hitFaceptr = om.MIntArray()
hitTriptr = om.MIntArray()
hitPointIdList = []
sourceIter = om.MItMeshVertex(sourceShape)
while not sourceIter.isDone():
hitPoints = om.MFloatPointArray()
vertexNormal = om.MVector()
sourceIter.getNormal(vertexNormal)
vertexNormal *= -1
vertexNormalF = om.MFloatVector(vertexNormal)
tempMPoint = om.MFloatPoint(sourceIter.position())
hitpointId = sourceIter.index()
hit = targetMesh.allIntersections(tempMPoint,vertexNormalF,None,None,True,om.MSpace.kWorld,999,True,None,True,hitPoints,None,hitFaceptr,hitTriptr,None,None)
if hit:
if contrastNum(hitPoints[0],hitPoints[1],tempMPoint):
hitPointIdList.append(hitpointId)
sourceIter.next()
if len(hitPointIdList)==0:
print '所选物体没有穿插'
else:
mc.select(cl=True)
for i in hitPointIdList:
mc.select(sourceName+'.vtx['+str(i)+']',add=True)
def contrastNum(i,j,k):
if (i.x>k.x>j.x or i.x<k.x<j.x) and (i.y>k.y>j.y or i.y<k.y<j.y) and (i.z>k.z>j.z or i.z<k.z<j.z):
return True
del hitPointIdList
sel.clear()