我正在尝试使用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
并没有真正帮助我调试错误本身。