2016-08-12 90 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()

但是,我們還沒有此擴展。 :(

提前感謝!

回答

0

如果你提供一個NURBS曲線數據對象MFnNurbsCurve.create()作爲父母,而不是讓它爲空,則該數據不會顯示爲一條曲線場景圖,因此您不必刪除它

試試這個:

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)) 

要獲取參數的弧長沒有API,你可以創建一個arcLengthDimension節點這意味着你會的。必須在場景中創建曲線並將其連接起來

dimNode = pm.arcLengthDimension('curveShape1.u[0]') 
dimNode.uParamValue.set(0.5) 
print(dimNode.arcLength.get()