2016-08-12 10 views
0

位置のリストで定義されたnurbsカーブに沿って、特定のパラメータの世界的な位置を取得したいと考えています。 は現在、私はちょうどこの曲線に沿った位置の配列を取得するためのプラグインの一時的な曲線を作成しています:maya pythonプラグインでテンポラリカーブを作成する

# targetXforms = array of MPoints 
    # knots = knots list 
    # uValue = array of floats (0->1) 
    # 

    curveFn = om.MFnNurbsCurve() 
    curveFn.create(targetXforms, knots, 3, om.MFnNurbsCurve.kOpen, False, False, nullObj) 
    for i in range (numRefXforms): 
     point = curveFn.getPointAtParam (uValue[i]) 
     print point 

はこれを行うには良い方法はあります(すなわち、曲線を作成するオーバーヘッドを持っていませんか)?おそらくいくつかの数学ライブラリですか? プラグインが評価されるたびにカーブが作成されないようにこのカーブを削除するにはどうすればいいですか(MDGModifierは少しクラッシュしているようです)

また、カーブに沿った長さを見つける方法はありますか指定されたパラメータ値Maya 2016 Extension 2には次の機能があります。 MFnNurbsCurve :: findLengthFromParam()

ただし、この拡張子はまだありません。あなたは、親としてMFnNurbsCurve.create()にNURBSカーブデータオブジェクトを提供する場合代わりにヌルそれを残す:(事前に

ありがとう!

答えて

0

は、そのデータは曲線として表示されません。 。シーングラフ、したがって、あなたがそれを削除する必要はありません

はこのお試しください:APIなしパラメータでアーク長を取得するには

import pymel.core as pm 

pts = ([ 0,0,0 ], [ 0,10,0 ], [ 0,10,10 ], [ 0,0,10 ]) 
knots = [0,0,0,1,1,1] 

curveFn = om.MFnNurbsCurve() 

dataCreator = om.MFnNurbsCurveData() 
curveDataObject = dataCreator.create() 

curveFn.create(pts, knots, 3, om.MFnNurbsCurve.kOpen, False, False, curveDataObject) 

for i in range(11): 
    point = curveFn.getPointAtParam (i/10.0) 
    pm.spaceLocator(p=(point.x, point.y, point.z)) 

を、あなたはarcLengthDimensionノードを作成することができますそれはあなたが希望を意味します。シーンにカーブを作成して接続する必要があります。

dimNode = pm.arcLengthDimension('curveShape1.u[0]') 
dimNode.uParamValue.set(0.5) 
print(dimNode.arcLength.get() 
関連する問題