【问题标题】:Creating temporary curve in maya python plugin在maya python插件中创建临时曲线
【发布时间】:2016-08-12 18:55:44
【问题描述】:

我想沿着由位置列表定义的 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()

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

提前致谢!

【问题讨论】:

    标签: python maya-api


    【解决方案1】:

    如果您向 MFnNurbsCurve.create() 作为父级提供 Nurbs 曲线数据对象,而不是将其保留为 null,则数据不会在场景图中显示为曲线,因此您不必删除它。

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多