Поиск вершин в пределах определенного радиуса в Maya с использованием Python / API - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь найти ближайшую вершину на сетке, но в радиусе.Это сделано для того, чтобы избежать необходимости проходить по всем вершинам, так как это занимает много времени.Например, у меня есть 2 рубашки с различным количеством вершин, и я пытаюсь найти ближайшую вершину вершины 1, которая находится на правом рукаве меша 2 на правом рукаве меша 1.Я не хочу перебирать вершины за рукавом, так как логически никакие вершины не будут достаточно близкоЯ понимаю, что есть предположение, что могут быть другие вершины ближе, но для использования, которое я ищу, я не предвижу, что это проблема.

У меня есть код для циклического перемещения по вершинам иполучить ближайшую точку, но если сетка имеет большое количество вершин, это займет много времени, даже если он использует API.

Есть ли в Maya функция, позволяющая ограничивать вершины по радиусу?Или какие-нибудь советы о том, как написать функцию, которая могла бы это сделать?

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете использовать узел nearPointOnMesh.В API Maya вы можете найти класс MFnMesh :: closestIntersection, который может выполнять raycast ( Запрос точки находится в сетке Maya Python API )

vtx = 'shirt1.vtx[0]'
pos = cmds.pointPosition(vtx)
m = 'shirts2'
objShape = cmds.listRelatives(m, ni=True, type='mesh')[0]
node = cmds.createNode('nearestPointOnMesh')
cmds.connectAttr(objShape + ".worldMesh", node + ".inMesh")
cmds.setAttr(node + ".inPosition", type = 'double3', *pos)
target_pos = cmds.getAttr(node + '.position')[0]
face = cmds.getAttr(node + ".nearestFaceIndex")
...