我想沿着由位置列表定义的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()
但是,我们还没有这个扩展。:(
提前感谢!
发布于 2016-10-26 04:25:28
如果将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()https://stackoverflow.com/questions/38924752
复制相似问题