python - 选择最长和最短曲线

标签 python maya curves nurbs

我正在尝试创建一个脚本来选择一堆 Nurbs 曲线, 并测量这些曲线的长度。
因此,理想情况下,我可以选择最短的曲线,而不选择较长的曲线(或相反)。 到目前为止我有这个:

import maya
import string

    for i in maya.cmds.ls(selection=True):
        shapeNodes = maya.cmds.listRelatives(i,shapes=True)
        for shape in shapeNodes:
            if maya.cmds.nodeType(shape) == "nurbsCurve":
                print "Curve: %s is %s units long" % (shape, maya.cmds.arclen(shape,))
                cvs = mc.getAttr(string.join(shapeNodes) + '.spans')+1
                print "The: %s  has %s cvs" % (shape,cvs)
            else:
                print "Wrong: %s is a %s" % (shape, maya.cmds.nodeType(shape))

最佳答案

您可以通过列表理解来摆脱循环。将所有形状及其长度收集到(长度,形状)对的列表中,然后对其进行排序 - 这将为您提供最短的曲线:

import maya.cmds as cmds

sel = cmds.ls(sl=True)
shapeNodes = cmds.listRelatives(sel,shapes=True)
shapeNodes = cmds.ls(shapeNodes, type= 'nurbsCurve', l=True)  # long paths to avoid confusion
selectable = [ ( cmds.arclen(item), item)  for item in shapeNodes]
if selectable:
   selectable.sort()
   cmds.select( selectable[0][-1])
else:
   cmds.select(cl = True)

您也可以将其放入函数中并返回可选列表以在其他地方进行处理。

关于python - 选择最长和最短曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21509275/

相关文章:

python - 无法阻止标签扩展主窗口

python - 如何在 Python 中显示来自数据框的词云

Python 分析器和 CPU 秒数

python - 也给组设置属性?

c++ - 从圆弧边绘制曲线

c# - 如何在 ZedGraph 中将特定曲线置于最前面

python - 如何从 Node.js 调用 Python 函数

pycharm - 如何在 PyCharm 中引用 Maya 命令?

python - 玛雅/ python : How do I scale multiple selected animation curves each from their own specific pivot point?

optimization - 找到最小距离