Створення зубчастої рейки за допомогою maxscript

Один з моїх Новомосковсктелей (Шибанов Булат aka ASK'R) надіслав мені свій шикарний урок щодо практичного застосування скриптів в 3ds Max. Дуже добре, що він його зробив так, як це відбувається в житті. Наводжу тутор як є.
Всі картинки просто отмасштабовані. Щоб побачити повний розмір, натисніть правою кнопкою мишки на неї і виберіть пункт "Відкрити зображення" (або подібний).
Завдання або вступна.
Одного разу мені знадобилося зробити моделі багатокоординатних машин в яких позиціонування частин здійснюється обертанням шестерень по зубчастих рейках. Шестерні були успішно створені в якомусь безкоштовному CAD пакеті, а ось рейок не знайшлося. ScriptSpot з гуглом промовчали, як партизани, і залишився лише шлях істинного джедая. Отже завдання - написати скрипт, за допомогою якого зручно робити зубчасті рейки.
Ось так буде виглядати кінцевий результат (якщо ви зробите все кроки з цього уроку):
А далі йде процес отримання такого результату:
Після деякого гугленія знайшлася сторінка. Взявши картинку з параметричних профілем зуба, блокнот і калькулятор я вирахував координати базових точок. Ось результати:

Але це тільки самі зуби, а потрібна рейка в цілому. Значить Каляка-малякаем ще:


Виділене це і є те що треба - якщо вийде зробити один відрізок, то і всю Кривулін не складе проблеми.

Отже, щоб зробити сплайн нам треба:
- Створити екземпляр в позиції будь-якої.
- Додати в нього хоч один сплайн.
- Додати опорні точки.
- Оновити його (це фіча для прискорення роботи - все створюємо і тільки потім вивалюємо в сцену, майже всі об'єкти потребують оновлення для появи в сцені).
- Повертаємо в викликає код для будь-яких подальших робіт.
Кодування.
Мінімально необхідне знаємо, можна писати код. Переносимо з картинок код в MAXScript Editor:
-- \ - дозволяє розписувати що-небудь багаторядкова, це просто зручніше і наочніше
-- for in конструкція дозволяє пробежатся по всіх елементах масиву (не додавати же вузлики поштучно). І отримуємо однозубий рейку:

До того ж ще й не замкнуту. Згадуємо, що при створенні вручну при досить близькому розташуванні вузликів, 3ds Max пропонує закрити (Close) сплайн, значить вміє робити це сам (є функція). Знову в пошук:

Додаємо close s 1 і тепер рейка придатна для Extrude / Bevel.
Однак зубів у рейки може бути будь-яку кількість і негоже людині працювати. Значить думаємо. Цикл нам дозволить порахувати точки з потрібними зрушеннями, а joint (знову ж з Maxscript Reference) дозволить зліпити шматочки:

Отже, в результаті є скрипт, який дозволяє по цифрам побудувати рейку. На цьому можна було б і зупиниться.
Однак, не всі 3d artist'и нормально сприймають правку значень в тексті скрипта. Деякі бояться його як вогню * FUME_FX * і треба зробити чайники і полігони GUI - Графічний користувача Інтерфейс.
GUI-ня або "повернемося до користувача особою".
Використовувати будемо rollout і контроли на ньому:

Знадобляться спіннери для ціферний значень і кнопка.
З спиннер будемо отримувати значення і після натискання кнопки створювати рейку.
Ідея виглядає нормально, але в Макса прийнято мати можливість подивитися, покриття параметри і тільки потім створити (варіант параметричного об'єкта поки не розглядається - користі небагато, а проблем значно більше). Значить треба буде також оновлювати рейку при зміні значення спиннер і показувати при налаштуванні. Просто кнопка вже не підійде, куди краще буде затискати - Check Button.
Пишемо код попутно роблячи рефакторинг:
Тепер створення рейки заховано за інтерфейсом і заготовлені події, за якими буде що-небудь відбуватися. При затиску кнопки треба зробити рейку:
fillValues ()
if state == on then (
generateRack ()
)
якщо віджали, то треба її видалити:
else delete Rack
При змінах в будь-якому спиннер треба оновити її:
if Rack! = undefined and not isdeleted Rack then renewRack ()
Отже, при затиску кнопки бачимо зубчасту рейку під вьюпорте, можемо крутити параметри, якщо віджали, то віддаляється, якщо закрили діалог рейка залишається в сцені.
Можливо maxscript-гуру скажуть фууу, оскільки дуже багато чого не дороблено і / або зроблено грубою силою з копіпастом. Але я вважаю, що в цьому і є призначення maxscript'а - робити не шедеври коду, а вирішувати практичні завдання (з проблемами "що є добро?" Повинні розбиратися довбані філософи).
GUI робився не для мене, а напарнику. Зайняло все близько 3-х годин неквапливо з кавою і какава. Цей скрипт можна засунути в кнопку, можна зробити перевірку єдиності діалогу, кнопку Create, щоб не закривати діалог, додати підрізування зуба, евольвентний профіль.
P.S. Робота на початку статті під назвою "Жертва" зроблена американцем в 3ds Max, BodyPaint, Digital Fusion, Photoshop, VRay і ZBrush. Оригінал дивіться там.
Відповідей: 12 до статті "Вивчення MAXScript на практичної задачі створення зубчастої рейки"
Я просто беру і перетягувати за допомогою лівої кнопки мишки зображення в поле вкладок / відкритих сторінок ... Відразу ж відкривається зображення в повний розмір ... І швидко і зручно.
До речі, якщо САПР вже є / потрібна в господарстві можна зробити лише одну секцію і ретоположіть в максі вже, потім Tools-> Array, саттачіть і VertexWeld кинути