1

polyPlane の上に 1 つのロケータがあるとします。私がやりたいことは、負または正の y のロケーターから、polyPlane にヒットし、最も近いポイント/頂点/uv/ の位置を返すまでルックアップまたはトレースすることです。

これは100万回行われたと思いますが、私が見つけた唯一の例は、私の場合はほとんど役に立たないすべての軸に基づいて最も近い点を見つけることによって機能します.

私が得ることができる助けをいただければ幸いです!

編集:最初に提案された解決策と私が達成したいことの違いの画像を追加しました

ここに画像の説明を入力

4

1 に答える 1

3

私たちができることは、OpenMaya (Maya の API) を使用して、配列に収集された faceVerts をループし、現在の facevert と比較してロケーター位置からの最短距離を確認し、最後の最短距離よりも短い場合は保存することです。最も近い頂点変数として。

import maya.OpenMaya as OpenMaya
from pymel.core import *

geo = PyNode('pSphere1')
pos = PyNode('locator1').getRotatePivot(space='world')

nodeDagPath = OpenMaya.MObject()
try:
    selectionList = OpenMaya.MSelectionList()
    selectionList.add(geo.name())
    nodeDagPath = OpenMaya.MDagPath()
    selectionList.getDagPath(0, nodeDagPath)
except:
    warning('OpenMaya.MDagPath() failed on %s' % geo.name())

mfnMesh = OpenMaya.MFnMesh(nodeDagPath)

pointA = OpenMaya.MPoint(pos.x, pos.y, pos.z)
pointB = OpenMaya.MPoint()
space = OpenMaya.MSpace.kWorld

util = OpenMaya.MScriptUtil()
util.createFromInt(0)
idPointer = util.asIntPtr()

mfnMesh.getClosestPoint(pointA, pointB, space, idPointer)  
idx = OpenMaya.MScriptUtil(idPointer).asInt()

faceVerts = [geo.vtx[i] for i in geo.f[idx].getVertices()]
closestVertex = None
minLength = None
for v in faceVerts:
    thisLength = (pos - v.getPosition(space='world')).length()
    if minLength is None or thisLength < minLength:
        minLength = thisLength
        closestVertex = v
select(closestVertex)

これはおそらく API なしで Python で実行できますが、Maya を持っている場合は API にアクセスできます :)

これが役立つことを願っています

于 2014-02-12T11:43:21.510 に答える