Zum Hauptinhalt springen

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()