【问题标题】:Maya python script for combine few curves to one用于将几条曲线合并为一条的 Maya python 脚本
【发布时间】:2017-02-22 11:16:32
【问题描述】:

您好,我是 python 和脚本的新手,阅读了很多教程并尝试创建脚本以将曲线形状组合到具有多形状的一条曲线,这对我来说效果很好。但是在这里我有一个错误,当我在启动 Maya 后第一次启动脚本时,它会给我回溯,如果它运行一次,它不会给出任何错误或回溯:

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

有人可以帮忙吗?

【问题讨论】:

  • 为了记录,最好使用pymel.core 而不是maya.cmds,它非常相似,但提供了更多控制权。有时间我会重新安装 Maya 看看,可能需要几天时间:)

标签: python maya-api


【解决方案1】:

您好,我尝试使用 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)

但是第二个(干净的场景)不起作用,所以我认为在这里我无法列出列表,我不知道如何接收空组列表或如何比较两个列表并删除相同的项目?

【讨论】:

    【解决方案2】:

    您好,现在我解决了所有的错误和警告,并完成了我的第一个 python 脚本!它工作得很好。所以这个脚本通过标准的玛雅附加曲线工具将几条曲线组合成一条多形曲线,而不用关闭点!所以现在看起来像:

    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)
    

    【讨论】:

      【解决方案3】:

      看起来有点过头了,为什么不这样呢?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-04
        • 2021-07-23
        • 1970-01-01
        • 2021-07-19
        • 2016-06-29
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多