1

次のことを実行する方法があるかどうか疑問に思っています。オブジェクトの翻訳を設定するには、pymel では次のように簡単です。

object.translateX.set(1.5)

「setAttr」コマンドを使用してこれを設定することもできます。

setAttr(object + '.translateX', 1.5)またsetAttr('%s.translateX' % object, 1.5)

ただし、最初の例を、属性名が変更されるもう少し高度なもので使用したい場合はどうすればよいでしょうか?

例:

object.translateX.set(1.5)
object.translateY.set(1.5)
object.translateZ.set(1.5)
object.rotateX.set(1.5)
object.rotateY.set(1.5)
object.rotateZ.set(1.5)

私はむしろ次のように書きたいと思います:

for i in range(0,5,1):
    t = ['translateX', 'translateY', 'translateZ', 'rotateX', 'rotateY', 'rotateZ']
    object.t[i].set(1.5)

ただし、これは明らかに機能しませんが、これを行う方法があるかどうか教えてもらえますか?

4

5 に答える 5

2

pymel メソッドは次のようになります。

for item in ['translateX', 'translateY', 'translateZ']:
   myObject.attr(item).set(0)
于 2013-08-22T15:47:14.090 に答える
1

theodox の回答の補遺として、PyMEL を使用して次のように書くこともできます。

object.t.set([1.0, 1.0, 1.0])
object.r.set([180.0, 360.0, 90.0])
于 2013-08-22T21:25:20.917 に答える
0

1 つのワイルドカード (*) を使用してトランスフォーム ノードをフィルタリングできる場合は、属性オブジェクトを取得して、次のようにそれらを直接設定できます。

import pymel.core as pm
for tX in pm.ls('spine*_jnt.translateX'):
    tX.set(0.0)

ご覧のとおり、「ls」関数も属性をリストできますが、複雑な正規表現パターンを受け入れることはできません。このようにして、識別属性を使用してシーン内のノードにフラグを付け、ここに示すようにリストでそれらを収集することもできます。必要に応じて、1 つのパスでベクトルを設定できます。

import random as rnd
for t in pm.ls('treeA_*.translate'):
    t.set([rnd.uniform(-20,20), 0.0, rnd.uniform(-20,20)])
于 2016-09-01T16:56:06.213 に答える
0

要約すると

import pymel.core as pmc
cube= pmc.polyCube()

attributes = ['tx', 'ty', 'tz', 
              'rx', 'ry', 'rz']

for a in attributes:
    cube[0].attr(a).set(1.5)

また

cube[0].t.set([1.5]*3)
cube[0].r.set([1.5]*3)
于 2016-03-27T04:28:21.323 に答える