您如何在OpenMaya.MMeshIntersector.getClosestPoint

时间:2019-04-05 01:28:36

标签: python api maya

我正在尝试使用OpenMaya MMeshIntersector类在网格上找到最近的点,但是我想限制它搜索的距离。我正在使用它,所以我可以获得barycentricCoords以获得更准确的值。

每当我输入一个值来限制距离时,我都会收到RuntimeError:(kFailure):意外的内部故障。但是,如果我输入的值大于47.0,则可以使用,但是对于我的用法来说该值太高,我希望使用小于1的值。 我不确定如何使用maxDistance标志,也没有太多有关如何使用它的文档。没有人有任何链接或使用信息吗?

我已经在Google上搜索并浏览过Maya文档,没有太多运气获得任何具体信息

import maya.OpenMaya as OpenMaya

def getBarycentricCoords(sourceMesh, targetMesh, distanceThreshold):
    selectionList = OpenMaya.MSelectionList()
    selectionList.add(sourceMesh)
    sourceMeshDag = OpenMaya.MDagPath()
    selectionList.getDagPath(0, sourceMeshDag)

    selectionList = OpenMaya.MSelectionList()
    selectionList.add(targetMesh)
    targetMeshDag = OpenMaya.MDagPath()
    selectionList.getDagPath(0, targetMeshDag)


    mObj = OpenMaya.MObject()
    currentFace = OpenMaya.MItMeshPolygon( sourceMeshDag, mObj )

    targetMeshMPointArray = OpenMaya.MPointArray()
    targetMeshMFnMesh = OpenMaya.MFnMesh(targetMeshDag)
    targetMeshMFnMesh.getPoints(targetMeshMPointArray, OpenMaya.MSpace.kWorld)

    matrix = sourceMeshDag.inclusiveMatrix() 
    node = sourceMeshDag.node()
    intersector = OpenMaya.MMeshIntersector()
    intersector.create( node, matrix )

    pointInfo = OpenMaya.MPointOnMesh()
    uUtil = OpenMaya.MScriptUtil(0.0)
    uPtr = uUtil.asFloatPtr()
    vUtil = OpenMaya.MScriptUtil(0.0)
    vPtr = vUtil.asFloatPtr()
    pointArray = OpenMaya.MPointArray()
    vertIdList = OpenMaya.MIntArray()

    for idx in range(targetMeshMPointArray.length()):

        intersector.getClosestPoint( targetMeshMPointArray[idx], pointInfo, distanceThreshold )
        pointInfo.getBarycentricCoords(uPtr,vPtr)

我希望可以使用任何float值,因为maxDistance应该可以工作,但是我从maya那里获得了RuntimeError: (kFailure): Unexpected Internal Failure并没有真正帮助我调试错误本身。

0 个答案:

没有答案