2017-02-22 259 views
1

嗨,我是一个Python和脚本编写的新手,阅读了很多教程,并尝试创建脚本,将curveShapes合并到一条具有多形状的曲线,它对我来说工作正常。但在这里我有一个错误,当我启动脚本第一次发射后玛雅它给了我回溯,如果它是一个运行时它不给任何错误或回溯:Maya python脚本将几条曲线合并为一条

// Error: Not enough objects or values. 
# Traceback (most recent call last): 
# File "<maya console>", line 2, in <module> 
# File "C:/Users/.../maya/2017/scripts\CreateOneCurve.py", line 17, in <module> 
#  cmds.parent(r=True, s=True) 
# RuntimeError: Not enough objects or values. // 

这里我的脚本:

#Funcion for create list of objects 
def listCurveObj(): 
    shapeList = cmds.ls(cmds.listRelatives(s=True), s=True) 
    groupList = cmds.ls(cmds.group(em=True, n='Curve#')) 
    listAllobjects = [] 
    for obj in groupList: 
     listAllobjects.extend(shapeList) 
     listAllobjects.extend(groupList) 
    return listAllobjects 

#Create one Curve 
cmds.select(listCurveObj()) 
cmds.parent(r=True, s=True) 

#Clean scene 
transforms = cmds.ls(type='transform') 
deleteList = [] 
for tran in transforms: 
    if cmds.nodeType(tran) == 'transform': 
     children = cmds.listRelatives(tran, c=True) 
     if children == None: 
      print '%s, has no childred' %(tran) 
      deleteList.append(tran) 

if len(deleteList) > 0:    
    cmds.delete(deleteList) 

任何人都可以帮忙吗?

+0

只是为了记录,最好使用'pymel.core'而不是'maya.cmds',它非常相似,但给了更多的控制权。我有时候会重新安装maya,然后看看,可能需要几天时间:) – Peter

回答

0

你好,现在我解决了所有的错误和警告,并完成我的第一个Python脚本!它效果很好。所以这个脚本通过标准的maya attach曲线工具将几条曲线合并到一条多形曲线,而不需要关闭点!所以现在它看起来像:

import pymel.core as pm 

#Get list of objects 
shapeList = pm.ls(pm.listRelatives(c=True)) 
groupList = pm.ls(pm.group(em=True, n='Curve#')) 
listAll = [] 
for obj in groupList: 
    listAll.extend(shapeList) 
    listAll.extend(groupList) 

#Parent objects to one Curve 
pm.select(listAll) 
pm.parent(r=True, s=True) 

#Clean scene 
trans = pm.ls(tr=True) 
parents = pm.listRelatives(pm.ls(), type='transform', p=True) 
deleteList=[] 
for obj in trans: 
    if obj not in parents: 
     deleteList.append(obj) 
     print '%s, has no childred' %(obj) 

if len(deleteList) > 0: 
    pm.delete(deleteList) 
0

嗨,我试图解决我的问题与pymel和重做所以现在我的第一部分可以完美运行:

import pymel.core as pm 

#Get list of objects 
shapeList = pm.ls(pm.listRelatives(c=True)) 
groupList = pm.ls(pm.group(em=True, n='Curve#')) 
listAll = [] 
for obj in groupList: 
    listAll.extend(shapeList) 
    listAll.extend(groupList) 

#Parent objects to one Curve 
pm.select(listAll) 
pm.parent(r=True, s=True) 

但第二(干净的场景)不工作,所以我想在这里,我有麻烦上市我不知道如何接收空组的列表,或者我如何比较两个列表并删除相同的项目?

0

好像过度杀死,为什么不是这样?

import maya.cmds as mc 

def combineCurves(curves = []): 
    crvGrp = mc.group(n = curves[0], em=1) 
    for crv in curves: 
     crvShape = mc.listRelatives(crv, shapes = 1) 
     mc.parent(crvShape,crvGrp,s=1,r=1) 
     mc.delete(crv) 

combineCurves(mc.ls(selection=1))