
Це візуальний конструктор інтерфейсів для Maya, який дозволяє:
Формат збереження — .uid (по суті str(self.uidGLData) і потім eval назад).
Головний стан — self.uidGLData:
ctrlSort: порядок контролів (і одночасно їх список)ctrlId — ключ у uidGLData, що містить baseNode:moduleName, className, procName, ctrlTypeparentList (куди можна підпорядковувати)attrList — список атрибутів (flags), де кожен атрибут має:longName, shortNametype (string, int, color, form, script…)mode:c / s — на створення (create/static)e — edit-параметри (після створення)a — “action” (наприклад dock)active (включено чи ні)value (значення)Основне вікно UIDesigner.setupUI() створює:
UIDesigner.sdd_generateCode():
generatePyCode()), або MEL (generateMelCode()),mm.eval(debugStr).Це окрема сила цього скрипта: властивості складних типів не редагуються просто полем, а відкривають спеціальний editor.
Призначення: налаштування правил генерації коду.
Опції:
-l чи -label, q vs query, і т.д.)True/False або 0/1getIndentStr() чомусь дивиться на booleanType, а не indentType)ctrlId)Працює як modal dialog через cmds.layoutDialog.
Призначення: обрати Alpha (0..1) для colorA.
Один slider + OK/Cancel. Повертає float.
Призначення: налаштування докінгу (dockControl/toolBar/window).
Поля:
[type, label, area, allowedAreaList] або None.Призначення: палітра кольорів (5x5), редагування RGB для кожної клітинки.
Повертає список кольорів формату [idx, r, g, b].
Призначення: вибір іконки (з XBMLANGPATH + “Internal Icons”).
Функції:
iconTextButtonПризначення: вибір tool context (cmds.lsUI(ctx=1)) і (опційно) іконки для нього.
Режими:
toolImage: повертає [context, icon]tool: повертає тільки contextПризначення: редагування спискових параметрів типу:
list_int2, list_int, list_string, list_align[[index, value], ...] або [[index, v1, v2], ...]Призначення: редагування formLayout прив’язок:
attachFormattachPositionattachControlchildData[ctrlId][edge] і на кожну зміну викликається upDataFunction(...) для live-оновлення property та preview.Призначення: редагувати “script” атрибути.
Перемикач:
cmdScrollFieldExecuter з st = sourceType.PropertyDelegate — це “рендерер” property-панелі для конкретного className.
Він:
attrList у baseNode,rowColumnLayout з 3 колонок:colorA → + AlphaEditorimage → IconChooser (і можливість enable ручне поле)script → ScriptEditorform → FormEditorlist_* → ListEditortoolImage/tool → ToolImageEditordock → DockEditorКлючове: UIData[longName] = [attrType, activeCtrl, labelCtrl, valueCtrl]
valueChangeWrap(longName, attrType, value):active в чекбоксactive/value у всі вибрані baseNode (якщо multi-select і клас однаковий)refreshWindow(), який:sdd_generateCode()sdd_showItemProperty()addUndoAndClearRedo(...)Це робить property панель “живою”: змінив значення → одразу перегенерився UI preview і output code.
modulesList=['Layouts','Controls','Menus','Customs'])replace)ctrlSort у порядку.checkNeedParentFlag)mode c/s)mode e)CmdTextPos для швидкого скролу в output код на виділений ctrl у дереві.__all__), легко розширювати.Це не “хейт”, а речі, які як UI Designer 2.0 можна було б полірувати:
str(dict) + evalЦе ризиковано і крихко. Краще JSON (або ast.literal_eval мінімум).
getIndentStr() використовує booleanType замість indentType. Через це Tab/4-space може працювати не як задумано.
Там є if(self.child in self.uidGLData) — виглядає як помилка (self.child ніде не видно в класі).
Один клас тримає все: UI, дані, генерацію, файлові операції, undo/redo. Для підтримки краще розділити.
Цей скрипт — повноцінний UI Builder для Maya, який зберігає проект у власному форматі, дозволяє збирати інтерфейс з компонентів, редагувати атрибути через розумну property-панель і спеціальні редактори, і генерувати готовий Python/MEL код з налаштовуваними правилами форматування.
Як “UI Designer 2.0” він вже має ключові фічі продуктового рівня: дерево, інспектор властивостей, пошук віджетів, прев’ю, генерацію коду, undo/redo, і набір editor-діалогів під складні властивості.