Maya检查拓扑结构

Maya Animation菜单中Deform>Blend Shape工具的原理就是依据两个物体的拓扑结构相同。

拓扑结构相同可以决定缓存融合,BlendShape变形方面的制作流程。

  • 点数相同
  • 面数相同
  • 点与面的关系
# get model points
import pymel.core as pm
import maya.OpenMaya as om

def getGeoPoints(geo):
    geoNode = pm.PyNode(geo)
    iter = om.MItMeshVertex(geoNode.__apiobject__())

    while not iter.isDone():
        print(iter.index())
        iter.next()

if __name__ == "__main__":
    sels = pm.ls(sl=1)
    getGeoPoints(sels[0])
# set string io
from StringIO import StringIO
import pymel.core as pm
import maya.OpenMaya as om

def getGeoPoints(geo):

    pointsInfo = StringIO()
    geoNode = pm.PyNode(geo)
    iter = om.MItMeshVertex(geoNode.__apiobject__())

    while not iter.isDone():
        pointsInfo.write(str(iter.index()))
        pointsInfo.write("\n")
        # print(iter.index())
        iter.next()

    print(pointsInfo.getvalue())

if __name__ == "__main__":
    sels = pm.ls(sl=1)
    getGeoPoints(sels[0])
# get face id
from StringIO import StringIO
import pymel.core as pm
import maya.OpenMaya as om

def getGeoPoints(geo):

    pointsInfo = StringIO()
    geoNode = pm.PyNode(geo)
    faceID = om.MIntArray()
    iter = om.MItMeshVertex(geoNode.__apiobject__())

    while not iter.isDone():
        iter.getConnectedFaces(faceID)
        pointsInfo.write(str(iter.index()))
        pointsInfo.write(" ")
        pointsInfo.write(" ".join([str(i) for i in faceID]))
        pointsInfo.write("\n")
        # print(iter.index())
        iter.next()

    print(pointsInfo.getvalue())

if __name__ == "__main__":
    sels = pm.ls(sl=1)
    getGeoPoints(sels[0])
# check md5
import md5
from StringIO import StringIO
import pymel.core as pm
import maya.OpenMaya as om

def getGeoPoints(geo):

    pointsInfo = StringIO()
    geoNode = pm.PyNode(geo)
    faceID = om.MIntArray()
    iter = om.MItMeshVertex(geoNode.__apiobject__())

    while not iter.isDone():
        iter.getConnectedFaces(faceID)
        pointsInfo.write(str(iter.index()))
        pointsInfo.write(" ")
        pointsInfo.write(" ".join([str(i) for i in faceID]))
        pointsInfo.write("\n")
        # print(iter.index())
        iter.next()

    return md5.new(pointsInfo.getvalue()).hexdigest()

if __name__ == "__main__":
    sels = pm.ls(sl=1)
    print(getGeoPoints(sels[0]))