Как вы используете флаг maxDistance в OpenMaya.MMeshIntersector.getClosestPoint - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь найти ближайшую точку на сетке, используя класс 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)

Я ожидаю любое значение с плавающей запятой, так как maxDistance должно работать, но я получаю RuntimeError: (kFailure): Unexpected Internal Failure от Maya, которая действительно не помогает мне отладить саму ошибку.

...