Compatibility: Maya 2022 - 2027
NOTE: This is a preview release with the new Anim picker 2.0. The next big mGear 5.4 release coming soon in a few weeks 😉
ANIM PICKER 2.0
Documentation: https://mgear4.readthedocs.io/en/master/animPickerUserDocumentation.html
5.3.5
Enhancements
- Anim Picker: Autosave — the Save window gains an "Enable autosave" toggle and a minutes interval; on each interval, and when closing the picker with unsaved changes, it pops the same Save dialog as a clearly labeled "Autosave reminder" so you confirm where to write (node / file), never saving in the background; the settings persist via user preferences and unsaved-change detection now compares against a reliable load / save baseline instead of the node-vs-UI mismatch that always reported changes
- Anim Picker: Background layers — right-click a layer for "Reveal in Folder" and "Copy Resolved Path", and hover a layer to see its resolved on-disk image path as a tooltip; all three use the same
.pkr-relative fallback search as image loading - Core: Add a reusable
mgear.core.utils.reveal_in_file_browserhelper that opens the OS file browser with a given path selected, falling back to the containing folder (Windows / macOS / Linux) - Docs: Anim Picker: Document portable
.pkrpaths via theANIM_PICKER_PATHtoken, the background-image same-folder fallback andANIM_PICKER_RELATIVE_IMAGES, and the new autosave and background-layer path actions
Bug Fix
- Anim Picker: SVG (vector) items now show a hover highlight like other buttons
5.3.4
Enhancements
- Anim Picker: Opacity passthrough — a per-window "Passthrough" checkbox turns the transparent floating picker into a click-through HUD (masked to the item buttons and tabs; clicking a gap reaches the rig behind), with a move grip to drag it and the full window returning smoothly during pan / zoom
- Anim Picker: Checkbox master-toggle for item groups — tag items into a named group and a checkbox widget shows / hides the whole group at once (with optional invert), in the picker with no rig attribute needed; composes with conditional visibility
- Anim Picker: Editor undo/redo + focus-scoped keyboard shortcuts — a per-tab snapshot undo stack records every edit (a whole gesture is one step), with shortcuts (Ctrl+Z / Ctrl+Shift+Z, Ctrl+C/V/X, Ctrl+D, Ctrl+Shift+D, Delete, Ctrl+A, arrows, F, Esc) that fire only while the picker has focus
- Anim Picker: Expand / contract spacing tools — four Align-section buttons spread the selection apart or pull it closer, horizontally or vertically, a step per click about its center
- Anim Picker: Richer shape library with drag-to-create — 16 new templates (gear, face, hand, foot, arrows, heart, ring, eye, lock, ...) across Polygons / SVG tabs; click a tile to apply, drag to create on the canvas, or right-click to create one shaped item per selected control
- Anim Picker: High-DPI text + handle scaling — on-canvas labels and edit-mode handles scale on a high-DPI display (150 / 200%) via
pyqt.dpi_scale; a no-op at 100%, and the authored text size stays display-independent - Anim Picker: Vector shapes from SVG — a picker item can be a real curved vector shape (filled or stroked); drag an
.svgonto the canvas or use "Import SVG...", with graceful partial import (unsupported elements are discarded and reported); the parser ships as a reusable Qt/Maya-freemgear.core.svg_import - Anim Picker: Conditional item visibility — show an item only when a Maya channel passes a comparison or the view zoom is within a range (set in the Visibility panel, with "Capture current" zoom); re-evaluated on selection / zoom / mouse-over, never per frame; edit mode shows all and a bad condition fails open
- Anim Picker: Interactive widgets + trace from selection — an item can be a checkbox, 1D slider, or 2D slider bound to a Maya attribute and/or a script (drag a tile from the tool strip to create), and a Trace command (Front / Side / Top) builds one silhouette button per selected control, colored from it; also adds text alignment, backdrop containers (a titled panel that moves its contents together), and align / distribute tools
- Anim Picker: Tab reorder + multi-tab view — drag tabs to reorder in edit mode, and a View selector (Tabbed / Grid / Rows / Columns) shows one tab or every tab's picker at once (each cell live); the mode and column count persist via user settings, not the
.pkr - Anim Picker: Pinned / overlay HUD buttons — pin an item to the viewport at a 3x3 anchor plus a pixel offset so it keeps a fixed screen position and size through pan / zoom, and is excluded from the pan / zoom extent
- Anim Picker: Mirror relationships + color palette + shape library — link two items as a persistent, realtime-mirrored pair about a symmetry axis (pink dotted outline); a bottom left / center / right color palette colors the selection and mirrors the opposite side to its partner; a shape library applies premade shapes and saves custom ones
- Core: Add a reusable
PythonCodeEditorwidget (mgear.core.pycodeeditor) — line-number gutter, current-line highlight, Python syntax highlighting, configurable monospace font and indentation, show-whitespace, and smart Tab / auto-indent; preferences persist via QSettings - Anim Picker: The custom script / menu editor now uses
PythonCodeEditorwith a File / Edit / View menu bar - Anim Picker: On-canvas item manipulators + inline multi-edit panel — a left tool strip toggles Select / Transform tools (scale and rotate handles on the selection), and a docked panel edits the whole selection at once (Transform / Appearance / Shape / Controls / Action, with fields that differ across the selection shown as "mixed")
- Anim Picker: Re-enable dockable mode — an "Anim Picker (Dockable)" menu entry launches the picker as a Maya workspaceControl with a stable object name for clean re-open; the floating window stays the default
- Anim Picker: On-canvas background-layer manipulators — in edit mode, select background image layers on the canvas (click / shift / marquee) and drag-move or handle-scale them
- Anim Picker: Composite / flexible tab backgrounds — a tab background is an ordered list of positioned, sized image layers drawn back-to-front (managed from "Background layers..."); the canvas spans backgrounds and buttons so pan / zoom reach all content, removing the former 6000 size cap #108
- Anim Picker: Modernize the module (Phase 1) — Python-3 idioms,
mgear.loglogging, Maya API 2.0 selection, decomposed modules, and dead-code cleanup; internal version bumped to 2.0.0 - Anim Picker: Store picker data on the PICKER_DATAS node as clean JSON instead of an
eval()'d Python literal, removing arbitrary code execution on load. BREAKING: pickers stored only in a scene node with no external.pkrfile must be re-exported
Bug Fix
- Anim Picker: Show the vector "SVG" hover badge only in edit mode, so hovering a vector item in animation mode no longer flashes it
- Anim Picker: The selection / hover item border is now a cosmetic constant-screen-width outline, so it stays readable when the canvas is zoomed far out
- Anim Picker: Fix editor undo not clearing an added optional property (group / visibility / SVG / pin / widget / backdrop / text / controls / menus / mirror) — the undo restore now resets keys absent from the snapshot
- Anim Picker: Vector (SVG) items no longer show dead polygon handles ("Toggle handles" is a no-op for them); also removed the redundant right-click Options entry
- Anim Picker: Fix the shape library's "Save current shape" staying disabled with an item selected — it now reads the live selection when clicked
- Anim Picker: Fix the backdrop title and SVG badge being clipped on high-DPI displays — both size their font from the container height (DPI-independent), the title elides, and the badge pill grows to its text
- Anim Picker: Fix slider / 2D-slider knob leaving a ghost after a drag — the widget's bounding rect now includes the knob radius so the old position is repainted
- Anim Picker: Fix "Picker shape from curve not working" #598 — remove the JSON-to-Python-literal replace hack that corrupted control names containing "true", and guard shape-less transforms
- Anim Picker: Fix latent bugs in
picker_node/maya_handlers— a.format()typo, asetAttrthat never hid the data node, an assertion that never fired on referenced nodes, and an always-false dict type check
