簡體   English   中英

如何執行兩個列表的元素級父約束?

[英]How to perform element-wise parent constraint of two lists?

我正在嘗試在兩個列表中的元素之間創建父約束,如下所示:

    import maya.cmds as mc
    objCtl= mc.ls('red_ctl', 'green_ctl', 'blue_ctl')
    objJt= mc.ls('red_jt', 'green_jt', 'blue_jt')

    for item in objCtl:
        ctl= item
        makeParentCons= mc.parentConstraint(ctl, objJt, mo=True, w=1)

我得到了一個 parentConstraint,每個關節都有多個驅動程序。 我知道我必須在列表之間進行迭代,但我只是不知道該怎么做。 我試過使用 zip(),追加

我既沒有任何 Maya 經驗,也沒有可用的軟件。 但是,據我了解您的問題(有一些猜測)並且在查看了ls命令parentConstraint命令的Maya 文檔后,您似乎需要從兩個列表中生成元素對才能創建這兩個元素之間的約束。

Maya 的ls命令似乎返回一個元素list ,而parentConstraint需要幾個參數(至少兩個元素/對象和一些額外的配置參數)來創建給定元素之間的約束。

因此,退一步將問題從與 Maya 相關的內容抽象為“純 Python”,您基本上希望從列表中獲取對並將每一對傳遞給另一個函數。 一般來說,這可以這樣做:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# define sample data, using tuples here, but can be lists as well
# needs to be adopted to the mc.ls() command
objCtl = ('red_ctl', 'green_ctl', 'blue_ctl')
objJt = ('red_jt', 'green_jt', 'blue_jt')

# generate element-wise pairs using zip()
pairs = zip(objCtl, objJt)

# iterate through zip-object and print elements of each pair
# print() needs to be changed to the `mc.parentConstraint()` command
for ctl, jt in pairs:
    print(ctl, jt)

上面給出的這個片段的輸出是

red_ctl red_jt
green_ctl green_jt
blue_ctl blue_jt

並且應該適合/采用約束生成。

萬一有人在未來回到這個問題,多個驅動程序的原因是因為您使用 objCtl 作為驅動程序而不是單個元素。

因此,如果我們將其展開,這就是單個循環的樣子

makeParentCons= mc.parentConstraint('red_ctl', ['red_jt', 'green_jt', 'blue_jt'], mo=True, w=1)

如果您想對列表中的每個項目執行此操作,您可以按照其他評論中所述執行操作並對兩個元素進行壓縮,或者簡單地使用循環中的枚舉函數從 objJt 獲取值。

    import maya.cmds as mc
    objCtl= mc.ls('red_ctl', 'green_ctl', 'blue_ctl')
    objJt= mc.ls('red_jt', 'green_jt', 'blue_jt')

    for idx, item in enumerate(objCtl):
        ctl= item
        makeParentCons= mc.parentConstraint(ctl, objJt[idx], mo=True, w=1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM