/ / python maya: betrifft Gruppen von Knoten - python, maya

Python Maya: beeinflussen Gruppen von Knoten - Python, Maya

Ich bin mir nicht ganz sicher, wo das Problem in diesem Skript ist. Was ich getan habe, ist das .... Ich habe eine Szene mit 2 Kurven. Jede Kurve hat drei Kugeln, die damit verbunden sind.

Ich wähle die Kurven aus und führe das Skript aus. Es scheißt und sagt, ich hätte Objekte mit passenden Namen?

Konfiguration

import maya.cmds as cmds

selection = cmds.ls(selection=True, type="dagNode")

# groups of ![enter image description here][1]nodes to be exported out
nodeBundles = []

for n in selection:
# list the children nodes
children = cmds.listRelatives(n, allDescendents=True, noIntermediate=True, fullPath=True, type="dagNode", path=True)

# list the transform nodes to each child node
childrenTransforms = maya.cmds.listRelatives(children, type="transform", parent=True)

# append each set of children to a unique array and then append to main array
nodeBundles.append(childrenTransforms)

# select the transform nodes
# cmds.select(childrenTransforms)


# MXS cache out each bundle of nodes
for n in nodeBundles:
cmds.select(clear=True)
cmds.xform(n, absolute=True, t=[0,0,10])
print n

FESTGELEGTER CODE:

import maya.cmds as cmds

selection = cmds.ls(selection=True, type="dagNode")

# groups of ![enter image description here][1]nodes to be exported out
nodeBundles = []

for n in selection:
# list the children nodes
children = cmds.listRelatives(n, allDescendents=True, noIntermediate=True, fullPath=True, type="dagNode", path=True)

# list the transform nodes to each child node
# childrenTransforms = maya.cmds.listRelatives(children, type="transform", parent=True)
childrenTransforms = maya.cmds.listRelatives(children, type="transform", parent=True, fullPath=True)

# append each set of children to a unique array and then append to main array
nodeBundles.append(childrenTransforms)

# select the transform nodes
# cmds.select(childrenTransforms)


# MXS cache out each bundle of nodes
for n in nodeBundles:
cmds.select(clear=True)
cmds.xform(n, r=True, t=[0,0,10])
print n

Durch Hinzufügen einer Liste innerhalb einer Liste kann ich dann basierend auf Gruppen von Kindern iterieren. Ist das die richtige Methode?

nodes = []

for item in cmds.ls(sl=True, type = "transform"):
descendants = cmds.listRelatives(ad=True, ni=True, f=True) or []
# nodes += descendants  # append the list, not insert it

nodes.append(descendants)

val = 1
for grp in nodes:
for n in grp:
cmds.select(clear=True)
offset = val * 10
print offset
cmds.xform(n, r=True, t=[0,0,offset])

val += 1

Antworten:

1 für die Antwort № 1

Ohne Ihre Szene oder Fehlermeldung zu sehen, nehme ich an, dass Sie mehrere Knoten mit demselben Namen haben. Da Maya Strings verwendet, kann es nicht unterscheiden pSphere1 und... pSphere1

Aus der Dokumentation zu listRelatives, benutze das Argument fullPath:

Geben Sie vollständige Pfadnamen anstelle von Objektnamen zurück.

So was:

    childrenTransforms = maya.cmds.listRelatives(children, type="transform", parent=True, fullPath=True)

Angenommen, der Fehler war in der letzten cmds.xformDies sollte diese Transformationen eindeutig machen (d. h. |group1|pSphere1)


0 für die Antwort № 2

listRelatives wird an ausgewählten Objekten arbeiten, wenn nichts angegeben ist, sodass Sie die Unterknoten (mit vollen Pfaden) wie folgt erhalten:

descendants = cmds.listRelatives(ad=True, ni=True, f=True) # f=True = long paths

Wenn Sie "dagNode" verwenden möchten, um zwischen Formen und Geometrie zu filtern, funktioniert es nicht: dagNode gibt sowohl Transformationen als auch Formen zurück. Sie können "geometryShape" verwenden, um nur Formen zu erhalten:

descendant_shapes = cmds.listRelatives(ad=True, ni = True, f=True)

aber in deinem Fall würde das auch die curveShape zurückgeben. Sie könnten die Kurve herausfiltern mit:

descendants = cmds.ls(descendants, type= surfaceShape, l=True) # l=True keeps long paths

Außerdem: In deinem Code übergibst du List-Listen in nodeBundles, was Maya nicht mag. Du solltest die Liste reduzieren, indem du Items einzeln hinzufügst:

nodes = []
for item in cmds.ls(sl=True, type = "transform"):
descendants = cmds.listRelatives(ad=True, ni=True, f=True) or []
nodes += descendants  # append the list, not insert it

for n in nodes:
cmds.select(clear=True)
cmds.xform(n, r=True, t=[0,0,10])