在maya python插件中创建临时曲线

时间:2016-08-12 18:55:44

标签: python maya-api

我希望在由位置列表定义的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()

但是,我们还没有这个扩展。 :(

提前致谢!

1 个答案:

答案 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;
};