“Wedge Tool”: він бере 1 вибране ребро (як напрямок/вісь), поруч з ним робить контрольовану екструзію, далі запускає Maya-команду WedgePolygon (створює “клин”/сегмент), відокремлює результат, повертає матеріал, ховає одну з частин, і відкриває маленьке UI для керування кутом/офсетом/дивізіями/поворотом та фіналізації (“Apply”).
На початку оголошуються глобальні масиви/змінні:
$preGetObj[] — ім’я “hilite” об’єкта (виділений меш у компонентному режимі)$getFace[] — вибрані фейси (sm 34)$getEdge[] — вибрані ребра (sm 32)$extrNodeW[] — нод екструду (polyExtrudeEdge)$rotationTransf[] — нод для “повороту” (polyMoveFacet)$getWedge[] — нод wedge-операції (результат WedgePolygon)$getit[] — трансформи після SeparatePolygonКлючова перевірка:
if ( size ($getEdge) == 1)
Тобто треба вибрати рівно 1 ребро, інакше warning:
“Select only ONE edge for Wedge direction!!”
Скрипт бере матеріал з одного з вибраних фейсів:
select -r $getFace[0];hyperShade -smn;string $getMaterialAss[] = ls -sl;Це типовий трюк: після операцій типу Separate/History матеріал інколи “злітає”, тому його потім перевидають назад.
Щоб екструзія мала “адекватну” довжину, скрипт міряє геометричну довжину вибраного ребра:
pointPosition -w)mag дає довжинуlengthBetween2 = lengthBetween * -1 (від’ємне значення використовується в -lty)Це важливо: tool підлаштовує “товщину” клина під масштаб геометрії.
Далі робиться екструзія:
$extrNodeW = `polyExtrudeEdge ... -thickness $lengthBetween -lty $lengthBetween2 $getEdge`;
Після цього створюється expression “expCusWedge”, який зв’язує:
extrude.localTranslateY = extrude.thickness * -1Тобто коли ти крутиш thickness (офсет), translation по Y автоматично підлаштовується.
Також:
optionVar -iv "setFixToggle" 1;
Це перемикач для кнопки “Fix” у UI (щоб перевертати знак у expression).
Після екструду:
GrowPolygonSelectionRegiondoDelete;Суть: він “вирізає”/прибирає частину, щоб отримати правильний сегмент для wedge-операції.
$rotationTransf = `polyMoveFacet ... $getFace2`;
Це робиться не для переміщення як такого, а щоб у UI мати контроль:
localRotateZ (через slider) — “Rotate” клина в межах -90..90.
Скрипт готує selection:
$getFace$getFace2$getEdge2Потім:
WedgePolygon; $getWedge = `ls -sl -tl 1`; setAttr ($getWedge[0] + ".wedgeAngle") -90; setAttr ($getWedge[0] + ".divisions") 6;
Тобто wedge-кут дефолтно −90°, а divisions 6.
Далі:
select -r $preGetObj; SeparatePolygon;$getit = ls -sl -tr; — зазвичай після Separate Maya повертає 2 трансформи (дві частини)pickWalk -d up; renameSelectionList ("WedgeTool"); — дає групі/об’єктам зрозумілий префіксПісля цього:
hyperShade -a $getMaterialAss[0]; — повертає матеріал на wedge-результатselect -r $getit[1]; hide; — ховає другу частинуselect -r $getit[0]; — залишає активною “головну” частину
Створюється вікно customWedgeee з наборами контролів:
($getWedge[0] + ".wedgeAngle")($extrNodeW[0] + ".thickness") (фактично “товщина/офсет” клина)($getWedge[0] + ".divisions")($rotationTransf[0] + ".localRotateZ") з межами -90..90($extrNodeW[0] + ".localTranslateZ") (ручна підстройка)flipWedge($extrNodeW, $getWedge))wedgeAngle на -1extrude.thickness на -1revFixExpress($extrNodeW, $getWedge))thickness * -1 ↔ thickness * 1optionVar setFixToggleclearDoneWedge($getit, $getFace, $preGetObj))localTranslateZ = 0)
clearDoneWedge(...) робить фіналізацію:
delete "expCusWedge"; — прибирає expression, щоб не лишався “живий зв’язок”pickWalk -d upparent -w; DeleteHistory; — від’єднує від групи, чистить історію на результатіdoDelete;rename $getit[0] $preGetObj[0];doMenuComponentSelection($preGetObj[0], "facet");select -r $getFace;evalDeferred "deleteUI -window customWedgeee";Тобто “Apply” = запекти, прибрати службові ноди, повернути ім’я і selection, закрити UI.
Мінімально:
$getFace використовується і для матеріалу, і для wedge selection)Якщо фейсів не буде, частина логіки (матеріал / подальші selections) може поводитись непередбачувано.