MAYA | CUSTOM SCRIPTS
CTRL + 2 | CONSTRAIN LOC TO SELECTION
import maya.cmds as cmds
def create_locators_with_constraints():
selection = cmds.ls(selection=True)
if not selection:
cmds.error("Bitte wähle mindestens ein Objekt aus.")
for obj in selection:
locator_name = obj + "_followLoc"
locator = cmds.spaceLocator(name=locator_name)[0]
cmds.delete(cmds.parentConstraint(obj, locator, mo=False))
cmds.parentConstraint(obj, locator, mo=True)
print("%d Locator(en) wurden erstellt und verbunden." % len(selection))
create_locators_with_constraints()
CTRL + 3 | CREATE CHILD-LOC UNDER SELECTION
import maya.cmds as cmds
def parent_locator_under_object():
selection = cmds.ls(selection=True)
if not selection:
cmds.error("Bitte wähle ein Objekt aus.")
for obj in selection:
# Locator erstellen
locator_name = obj + "_childLoc"
locator = cmds.spaceLocator(name=locator_name)[0]
# Position & Rotation auf das Objekt matchen
cmds.delete(cmds.parentConstraint(obj, locator, mo=False))
# Locator als Child unter das Objekt parenten (0,0,0 im Local Space)
cmds.parent(locator, obj)
cmds.setAttr(locator + ".translate", 0, 0, 0, type="double3")
cmds.setAttr(locator + ".rotate", 0, 0, 0, type="double3")
print("Locator(en) wurden unterhalb der selektierten Objekte geparentet.")
# Aufruf
parent_locator_under_object()
2 - TOGGLEUI
# Toggle Viewport Display States (Maya Python)
# States: 0 = nur NURBS Curves, 1 = NURBS Curves + Polygons, 2 = Alles sichtbar
import maya.cmds as cmds
def _active_model_panel():
"""Aktives/geeignetes modelPanel ermitteln."""
p = cmds.getPanel(withFocus=True)
if p and cmds.getPanel(typeOf=p) == 'modelPanel':
return p
# Fallback: erstes sichtbares modelPanel
for p in cmds.getPanel(visiblePanels=True) or []:
if cmds.getPanel(typeOf=p) == 'modelPanel':
return p
# Letzter Fallback: neues Panel erstellen
return cmds.modelPanel()
def toggle_view_states():
panel = _active_model_panel()
var = "cc_viewToggleState"
# aktuellen State holen & erhöhen
state = 0
if cmds.optionVar(exists=var):
try:
state = int(cmds.optionVar(q=var))
except Exception:
state = 0
state = (state + 1) % 4
cmds.optionVar(iv=(var, state))
# Alles aus, dann gezielt einschalten (für State 0/1)
if state in (0, 2):
# Schalte zunächst *alle* Objektarten aus
try:
cmds.modelEditor(panel, e=True, allObjects=False)
except Exception:
pass # allObjects gibt's eigentlich, aber just in case
# Baseline: alles sicher aus (robust, falls allObjects nicht greift)
kw_off = dict(
polymeshes=False, nurbsSurfaces=False, subdivSurfaces=False,
curves=False, # (nur für ältere Versionen – schadet nicht)
nurbsCurves=False, planes=False, lights=False, cameras=False,
imagePlane=False, joints=False, ikHandles=False, deformers=False,
dynamics=False, fluids=False, follicles=False, hairSystems=False,
locators=False, dimensions=False, handles=False, pivots=False
)
try:
cmds.modelEditor(panel, e=True, **kw_off)
except TypeError:
# Manche Flags gibt's evtl. nicht in jeder Version – ignorieren
pass
# State-spezifisch einschalten
if state == 0:
# Nur NURBS Curves (Rig Gizmos)
cmds.modelEditor(panel, e=True, nurbsCurves=True)
label = "Viewport: NURBS Curves only"
elif state == 1:
# NURBS Curves + Polygons
cmds.modelEditor(panel, e=True, nurbsCurves=True, polymeshes=True)
label = "Viewport: Curves + Polygons"
elif state == 2:
# NURBS Curves + Polygons
cmds.modelEditor(panel, e=True, polymeshes=True)
label = "Viewport: Polygons"
print ("poly")
else:
# State 2: Alles sichtbar
try:
cmds.modelEditor(panel, e=True, allObjects=True)
except Exception:
# Fallback: die gängigen Objektarten aktivieren
cmds.modelEditor(panel, e=True,
polymeshes=True, nurbsSurfaces=True, subdivSurfaces=True,
nurbsCurves=True, planes=True, lights=True, cameras=True,
imagePlane=True, joints=True, ikHandles=True, deformers=True,
dynamics=True, fluids=True, follicles=True, hairSystems=True,
locators=True, dimensions=True, handles=True, pivots=True
)
label = "Viewport: All objects"
# kleine HUD/Toast Meldung
try:
cmds.inViewMessage(amg="%s" % label, pos="topCenter", fade=True, fst=300)
except Exception:
print(label)
# -------- Nutzung --------
# Führe einfach toggle_view_states() aus. Für einen Shelf-Button:
# import view_toggle; view_toggle.toggle_view_states()
toggle_view_states()
SHIFT +2 MOTIONTRAIL TGL
import maya.cmds as cmds
def _active_model_panel():
p = cmds.getPanel(withFocus=True)
if p and cmds.getPanel(typeOf=p) == 'modelPanel':
return p
for p in cmds.getPanel(visiblePanels=True) or []:
if cmds.getPanel(typeOf=p) == 'modelPanel':
return p
return cmds.modelPanel()
def toggle_motion_trails():
panel = _active_model_panel()
try:
# aktuellen Zustand abfragen
on = cmds.modelEditor(panel, q=True, motionTrails=True)
except Exception:
on = False
# umschalten
cmds.modelEditor(panel, e=True, motionTrails=not on)
msg = "Motion Trails: {}".format("ON" if not on else "OFF")
try:
cmds.inViewMessage(amg="%s" % msg, pos="topCenter", fade=True, fst=200)
except Exception:
print(msg)
toggle_motion_trails()