2014-02-02 4 views
1

Я пытаюсь создать скрипт, который выберет кучу кривых 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)) 

ответ

3

Вы можете выйти делать петлю со списком пониманием. Соберите все формы и их длины в список (длина, форма) пар и сортировки, что - что дает вам кратчайшую:

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) 

Вы также можете просто сделать это в функцию и возвращать selectable список для обработки в другом месте.

+0

Спасибо theodox, я дам этому идти. – pj1138

0

я рекомендую начать использовать pymel по очевидным причинам простоты и легкости

import pymel.core as pm 

curveInfo = pm.createNode('curveInfo') 
for thisCurve in pm.ls(sl=True): 
    #get the shape node 
    thisShape = thisCurve.getShape() 
    #connect the world space to the curve info 
    thisShape.worldSpace >> curveInfo.inputCurve 
    #this is how you get the value 
    print curveInfo.arcLength.get() 
    #from here you can put the value in whatever you need 
#delete the curve info 
pm.delete(curveInfo) 
Смежные вопросы