我希望在由位置列表定义的nurbs曲线上获得特定参数的世界位置。 目前我在插件中创建一个临时曲线,只是为了得到这条曲线上的一系列位置:
# 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 :(得分:0)
如果您将Nurbs曲线数据对象作为父级提供给MFnNurbsCurve.create(),而不是将其保留为null,则数据不会在场景图中显示为曲线,因此您不必删除它
试试这个:
dimNode = pm.arcLengthDimension( 'curveShape1.u[0]' )
dimNode.uParamValue.set( 0.5 )
print(dimNode.arcLength.get()
要在没有API的情况下获取参数的弧长,可以创建arcLengthDimension节点。这意味着您必须在场景中创建一条曲线并将其连接起来。
var handlers = ["onerror","onclose","onopen"];
for(var i=0;i<handlers.length;i++){
ctrlScope.conn.[handlers[i]] = ctrlScope.updateStatus;
};