Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按多个对象的最后一个编号(maya python)设置多个对象的子对象_Python_Parent_Maya_Pymel - Fatal编程技术网

按多个对象的最后一个编号(maya python)设置多个对象的子对象

按多个对象的最后一个编号(maya python)设置多个对象的子对象,python,parent,maya,pymel,Python,Parent,Maya,Pymel,我目前正在编写一个脚本,制作一个简单的起重机式钻机 我有一个变量来定义我想要的关节数量。我也有一个变量来表示我想要的组/控制器的数量。这些数量可能会有所不同,因此脚本将是半“动态”的 因此,我最终得到的是两个接头(接头1、接头2、接头3等) 和几个组(组1、组2、组3等) 我的问题是,我不知道我该如何一次完成我的“group1”到“joint1”和“group2”到“joint2”的育儿工作。 因为我希望能够更改关节和组的数量,所以无法硬编码 任何帮助都将不胜感激:)像这样的东西能帮助你吗 gr

我目前正在编写一个脚本,制作一个简单的起重机式钻机

我有一个变量来定义我想要的关节数量。我也有一个变量来表示我想要的组/控制器的数量。这些数量可能会有所不同,因此脚本将是半“动态”的

因此,我最终得到的是两个接头(接头1、接头2、接头3等) 和几个组(组1、组2、组3等)

我的问题是,我不知道我该如何一次完成我的“group1”到“joint1”和“group2”到“joint2”的育儿工作。 因为我希望能够更改关节和组的数量,所以无法硬编码


任何帮助都将不胜感激:)

像这样的东西能帮助你吗

grp = cmds.ls('group*')
nbs = [int(n.split('group')[-1]) for n in grp]
grpDic = dict(zip(nbs, grp))

joint = cmds.ls('joint*', type='joint')
nbs = [int(n.split('joint')[-1]) for n in joint]
jointDic = dict(zip(nbs, joint))

common = list(set(grpDic.keys())&set(jointDic.keys()))

for i in common:
    cmds.parent(grpDic[i], jointDic[i])
编辑:包括nurbs父项

# filter by nurbs type    
nurbs_sh = cmds.ls('nurbsCircle*', type='nurbsCurve')
# get the transform node of this nurbs
nurbs_tr = cmds.listRelatives(nurbs_sh, p=1)
nbs = [int(n.split('nurbsCircle')[-1]) for n in nurbs_tr]
curveDic = dict(zip(nbs, nurbs_tr))

common = list(set(grpDic.keys())&set(curveDic.keys()))
# nurbs parent to group
for i in common:
    cmds.parent(curveDic[i], grpDic[i])

像这样的东西能帮你吗

grp = cmds.ls('group*')
nbs = [int(n.split('group')[-1]) for n in grp]
grpDic = dict(zip(nbs, grp))

joint = cmds.ls('joint*', type='joint')
nbs = [int(n.split('joint')[-1]) for n in joint]
jointDic = dict(zip(nbs, joint))

common = list(set(grpDic.keys())&set(jointDic.keys()))

for i in common:
    cmds.parent(grpDic[i], jointDic[i])
编辑:包括nurbs父项

# filter by nurbs type    
nurbs_sh = cmds.ls('nurbsCircle*', type='nurbsCurve')
# get the transform node of this nurbs
nurbs_tr = cmds.listRelatives(nurbs_sh, p=1)
nbs = [int(n.split('nurbsCircle')[-1]) for n in nurbs_tr]
curveDic = dict(zip(nbs, nurbs_tr))

common = list(set(grpDic.keys())&set(curveDic.keys()))
# nurbs parent to group
for i in common:
    cmds.parent(curveDic[i], grpDic[i])

@DrWeeny的示例将以现有对象和现有关节为例,并将它们作为父对象。如果要从几何体开始并自动向其添加关节,可以尝试以下操作:

import re

def add_joints_to_selected(orient = 'xyz'):
    selection = cmds.ls(sl=True)
    cmds.select(d=True)
    joints = []
    for geo in selection:
        pivot = cmds.xform(geo, q=True, rp=True, ws=True)
        suffix = '0'
        raw_name = re.findall( "\d$", geo)
        if raw_name:
            suffix = raw_name[-1]       
        jnt = cmds.joint(n = "joint_" + suffix, p=pivot)
        cmds.parent(geo, jnt)
        joints.append(jnt)
    if orient:
        cmds.joint(joints[:-1], e=True, oj = orient)

add_joints_to_selected('xyz')  # or add_joints_to_selected(None)

该节点获取选定节点的轴心点,并为每个节点创建关节(按照选择它们的顺序)。如果您提供像“xyz”或“yzx”这样的关节顺序,它将对齐关节,就像您手动绘制关节一样;否则,关节将与世界对齐。唯一棘手的一点是使用正则表达式从现有节点名称中获取后缀(如果没有数字后缀,则返回“0”)

@DrWeeny的示例将以现有对象和现有关节为例,并将它们作为父对象。如果要从几何体开始并自动向其添加关节,可以尝试以下操作:

import re

def add_joints_to_selected(orient = 'xyz'):
    selection = cmds.ls(sl=True)
    cmds.select(d=True)
    joints = []
    for geo in selection:
        pivot = cmds.xform(geo, q=True, rp=True, ws=True)
        suffix = '0'
        raw_name = re.findall( "\d$", geo)
        if raw_name:
            suffix = raw_name[-1]       
        jnt = cmds.joint(n = "joint_" + suffix, p=pivot)
        cmds.parent(geo, jnt)
        joints.append(jnt)
    if orient:
        cmds.joint(joints[:-1], e=True, oj = orient)

add_joints_to_selected('xyz')  # or add_joints_to_selected(None)

该节点获取选定节点的轴心点,并为每个节点创建关节(按照选择它们的顺序)。如果您提供像“xyz”或“yzx”这样的关节顺序,它将对齐关节,就像您手动绘制关节一样;否则,关节将与世界对齐。唯一棘手的一点是使用正则表达式从现有节点名称中获取后缀(如果没有数字后缀,则返回到“0”)

这非常适合将我的组作为关节的子对象!非常感谢你!我假设我可以使用相同的公式,通过更改名称属性,将我的NurbScilles(NurbScille1、2、3等)作为我的组(1、2、3等)的父对象,但是我似乎无法让它工作。我似乎得到的不仅仅是转换数据,我认为这就是它不起作用的原因。我还想知道为什么我必须定义关节的类型而不是组?我是否也必须定义NurbScilles的类型,以使它们能够成为组的父对象?我使用-type是因为创建关节时,在某个位置有一个以关节命名的节点(如果我处理过一个非常简单的场景文件,则为eve),我刚刚假设您有一个已知命名节点的列表。如果使用类型NURBCURVE,将获得形状,并且必须找到转换以将其设置为父对象。明天我要找玛雅的时候我会试试。我在这段代码中的观点是:您可以构建一个ID字典并关联所有内容。在这种情况下,有一个组,一个关节,但您可以使用多个组来创建关节的父对象。我不是一个操纵者,所以我试着把事情看得像我能看到的那样广泛,我设法把我的nurbs放在字典里,但在字典里查找它充满了许多不同的nurbs数据,并试图将它们作为组的父对象没有做任何事,甚至没有错误消息。但正如您所说,我需要从nurbs获取变换数据,并将其作为组的父对象?我真的很感谢你花时间来帮助我,我以前完全被困住了。伟大的社区:)我添加了一些构建nurbs词汇的代码,这些代码非常适合将我的组作为关节的家长!非常感谢你!我假设我可以使用相同的公式,通过更改名称属性,将我的NurbScilles(NurbScille1、2、3等)作为我的组(1、2、3等)的父对象,但是我似乎无法让它工作。我似乎得到的不仅仅是转换数据,我认为这就是它不起作用的原因。我还想知道为什么我必须定义关节的类型而不是组?我是否也必须定义NurbScilles的类型,以使它们能够成为组的父对象?我使用-type是因为创建关节时,在某个位置有一个以关节命名的节点(如果我处理过一个非常简单的场景文件,则为eve),我刚刚假设您有一个已知命名节点的列表。如果使用类型NURBCURVE,将获得形状,并且必须找到转换以将其设置为父对象。明天我要找玛雅的时候我会试试。我在这段代码中的观点是:您可以构建一个ID字典并关联所有内容。在这种情况下,有一个组,一个关节,但您可以使用多个组来创建关节的父对象。我不是一个操纵者,所以我试着把事情看得像我能看到的那样广泛,我设法把我的nurbs放在字典里,但在字典里查找它充满了许多不同的nurbs数据,并试图将它们作为组的父对象没有做任何事,甚至没有错误消息。但正如您所说,我需要从nurbs获取变换数据,并将其作为组的父对象?我真的很感谢你花时间来帮助我,我以前完全被困住了。伟大的社区:)我已经添加了一些构建nurbs词汇的代码。这是一本非常有趣的书,我希望在将来应用它,尽管对于我的脚本来说,应用这些函数并不是必需的。但是非常感谢你的回答和知识:)哦,是的,在我的例子中,我假设你已经知道你的等级。对于脚本,您正在选择组以绘制关节?是的,我会熟练地使用正则表达式来命名模式。这是一本非常有趣的书,我想在将来应用它,尽管对于我的脚本来说,这并不是真的必要