如何在中使用maxDistance标志OpenMaya.MMeshIntersector.getClosestPoin

2024-10-03 06:27:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用OpenMaya MMeshIntersector类在网格上查找最近点,但我想限制它搜索的距离。我用这个来得到重心坐标,得到一个更精确的值。你知道吗

每当我输入一个值来限制距离时,就会得到一个RuntimeError:(kFailure):意外的内部故障。但是,如果我输入的值高于47.0,它就工作了,但是对于我的用法来说,这个值太高了,我希望使用小于1的值。 我不知道如何使用maxDistance标志,也没有太多关于如何使用它的文档。有人有任何关于如何使用它的链接或信息吗?你知道吗

我在谷歌上搜索过玛雅人的文档,但没能找到具体的信息

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)

我希望maxDistance可以使用任何浮点值,但我从maya获得的RuntimeError: (kFailure): Unexpected Internal Failure并不能真正帮助我调试错误本身。你知道吗


Tags: 文档信息node距离runtimeerroropenmayamaxdistancepointinfo