#python #api #maya
#python #API #maya
Вопрос:
Я пытаюсь найти ближайшую точку в сетке, используя класс OpenMaya MMeshIntersector, но я хочу ограничить расстояние, которое он ищет. Я использую это, чтобы получить барицентрические координаты для получения более точного значения.
Всякий раз, когда я ввожу значение для ограничения расстояния, я получаю ошибку времени выполнения: (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, что на самом деле не помогает мне отлаживать саму ошибку.
Комментарии:
1.Я могу подтвердить ту же ошибку с определенными значениями maxDistance. Достаточно интересно, что во всех примерах, похоже, НЕ используется параметр maxDistance. Кажется, он отлично работает без maxDistance, поэтому вы могли бы опустить его, а затем проверить расстояния самостоятельно (производительность, вероятно, пострадает), или вы можете обернуть
try
except RuntimeError
вокруг него, но это очень грязное решение. Я постараюсь подробнее разобраться в этом.2.Даже этот пример завершает его с
try
except
..! Это дешевое решение, но, возможно, оно достаточно хорошее. programtalk.com/python-examples/maya .Открой Майю.MPointOnMesh3. Ого, так что в основном флаг maxDistance может завершиться ошибкой, если он не достигнет чего-либо при первом запуске. Метод try except сработал, на данный момент я не против сделать это таким образом, спасибо за это! Забавно, что без флага это работает, вероятно, придется указать это в autodesk и надеяться, что они это исправят