
Це MEL-скрипт “Measure Tools”, який додає в Maya зручне вікно для вимірювання дистанції між вершинами, створення Distance Dimension-інструментів з обмеженням по осях (X/Y/Z/All), підрахунку кута між 3 вершинами, а також має вбудований конвертер одиниць (inch/feet/yards ↔ meter/cm/mm). Плюс меню “Options/Help” і невеликі утиліти (виділення локаторів distance tool, auto UV).
Нижче — структурований опис, що саме робить код.
На старті скрипт ініціалізує optionVar, щоб пам’ятати стан UI і параметри відображення між запуском Maya:
MTconvertUnitsToggle (0/1) — чи показана вкладка Units Convert.Задаються дефолтні RGB для X/Y/Z/ALL (у вигляді float array):
distColor_xSet, locColor_xSetdistColor_ySet, locColor_ySetdistColor_zSet, locColor_zSetdistColor_allSet, locColor_allSetЦе потім застосовується як overrideColorRGB на трансформах distanceMeasure і locator’ів.
locScale_DSet — scale локаторів для “звичайного” distance tool (default 0.4)locScale_CSet — scale локаторів для distance tool з constraint’ами (default 0.05)MTdistToolPrecVal — точність distance tool (precision) замість стандартних 6 знаків. Default = 2.selectPref -trackSelectionOrder true;ls -os)selectPref -trackSelectionOrder false;Скрипт створює вікно UnitConvert (якщо є — видаляє і створює заново).
Options
locFromSelected(); (виділити локатори лише вибраних distanceMeasure)locGlobalSelect(); (виділити локатори всіх distanceMeasure у сцені)quickAutoUVLayout();measurePreferencesUI.mel і відкриває налаштуванняHelp
distanceFiled (textField)distanceToolSelVert();distanceToolSelVert():
ls -sl -flpointPosition -w → отримує позиціїmagtrunc(x*1000)/1000)distanceFiledangleFiledselectAngleSelected();selectAngleSelected() має 2 режими:
angle $U $Vrad_to_degangleFiled360 - valueВажливо: цей інструмент прямо залежить від
trackSelectionOrder.
Кнопка → createDistanceTool();
Поруч є чекбокс constrainOnOff — включає “Point on Poly constraint”.
Також є radio кнопки для осей:
changeIconsAll/X/Y/Z() лише міняють іконки, щоб UI показував активний режим.createDistanceTool()iconTextRadioButton -q -sl ...ls -hilite (щоб потім “повернути” режим/вибір)ls -os -fl (дві вершини у правильному порядку)xform -q -t -ws-sp 0 0 0 -ep 0 0 1)listHistory + listRelatives -pprecision distanceDimShape на значення з optionVar MTdistToolPrecValconstrainOnOff == 1, робить doCreatePointOnPolyConstraintArgList
overrideEnabled + overrideRGBColorsdistColor_*Set)_X_distanceMeasure, _Y_distanceMeasure, _Z_distanceMeasure, _ALL_distanceMeasurelocScale_CSetlocScale_DSetlocColor_*Set)clearAllDistanceTools();
distanceDimShapeclearSelectedDistance();
*distanceMeasure*locFromSelected()
*_distanceMeasure*gmatch "*_distanceMeasure*"locGlobalSelect()
distanceDimShape в сценіlistConnections -d 1quickAutoUVLayout()
polyAutoProjection ... -ch 0Це утиліта “на швидко”, щоб перерозкласти UV після деформацій/констрейнтів.
UI розділ “Units Convert” має:
Є 3 layout-режими:
mmLayout() — inch/feet/yards ↔ millimetercmLayout() — inch/feet/yards ↔ centimetermLayout() — inch/feet/yards ↔ meterКожен layout:
Meter, Centimeter, Millimeter)-cc callback у floatField, щоб при зміні значення автоматично рахувалось у правильні одиниціСкрипт має окремі proc input...() для кожної пари:
Наприклад:
* 0.0254* 39.37007874* 0.3048* 914.4toggleUnitConverUI():
unitConvertUI layout динамічно, зберігає optionVar=1deleteUI -layout unitConvertUI, ставить optionVar=0, зменшує висоту вікна