3-Point Rotate, Мало ли кому надо :) |
Home· Статьи · Вакансии · Чертежи · 3D Галерея · 2D Галерея · Форум · Форум Realtime | Реклама |  Конкурсы | RAR Award | Правила |
Здравствуйте, гость ( Вход | Регистрация )
3-Point Rotate, Мало ли кому надо :) |
13/03/2019, 14:03
Сообщение
#1
|
|
Мастер Группа: Пользователи Сообщений: 1 379 Регистрация: 13/03/2006 Из: Челябинск, Россия Пользователь №: 25 023 |
Всем привет... Мимокрокодил
Набрел тут... Кто юзает скрипт 3Point Rotate от Серго, тот знает, что скрипт сей хороший, но малость бесявый - мешюшка лишняя появляется, в ней еще и минус иногда ставить надо вручную. Встретился мне вариант, называется Рекомендую использовать скрипт, который не "Z_Axis_Fixed", потому как всё было бы хорошо, но "fixed" он по Z оси глобальной, а не вьюпортовой, т.е. поворачивать будет по Z только относительно "ландшафта". С обычным же, которые не "fixed" та же раздражающая фигня, что и с вариантом от Серго, что надо переключать 3D Snap на 2.5D, но тут уж что уж. Инструкция: 1) Скачать (рекомендую reference_rotation_v1.0.ms), запустить через Run Script 2) Через Customize User Interface -> Toolbars в Категории Retouchaid найти оный, кинуть на панельку кнопкой 3) Чтобы сделать иконку стандартную Серговскую вместо текстовой, можно сделать следующее: 3а) Правой кнопкой по оной получившейся кнопке -> Edit Macro Script 3б) Заменить первую строку с "macroScript RotateRef buttonText: "Reference Rotation" category: "Retouchaid"" на "macroScript RotateRef buttonText: "Reference Rotation" category: "Retouchaid" Icon:#("sergoIcons",9)", сохранить скрипт 3в) Поместить в папку UI-In\Icons (UI\Icons на более старых версиях) приложенные bmp файлы, если их там нет 3г) Перезапустить Макс У меня описанное в третьем пункте злобное колдунство вроде сработало. Надеюсь, буде оное заметит Серго, он не обидится на использование его иконок. Пока замеченный мною минус только в том, что обязательно нужно проверять 3D на 2.5D Snap, иначе он честно развернет в объеме. Сергошный в этом плане сразу какой-то "randomize" делал, там видно, что не то, а тут можно и не заметить, если объекты находятся в близкой плоскости. Жаль, что автор не сделал гарантированную проверку по Z именно вьюпорта, а не глобальную, а мне, если честно, вникать сейчас лень, т.к. я в скриптах плохо.
Прикрепленные файлы
sergoIcons_16a.bmp ( 10,6 килобайт )
Кол-во скачиваний: 285
sergoIcons_16i.bmp ( 14,12 килобайт ) Кол-во скачиваний: 263 |
|
|
13/03/2019, 15:18
Сообщение
#2
|
|
психомазохист Группа: Пользователи Сообщений: 4 418 Регистрация: 16/10/2012 Из: Восточная Африка - Маисовое поле Пользователь №: 86 591 |
жалко тут лайкать нельзя =)
|
|
|
18/09/2019, 13:53
Сообщение
#3
|
|
Мастер Группа: Пользователи Сообщений: 1 379 Регистрация: 13/03/2006 Из: Челябинск, Россия Пользователь №: 25 023 |
Мимокрокодил-2: Возвращение мимокрокодила
Опять же, мало ли кому. Из интереса поковырялся в этом скрипте, сделал фичу, чтобы при использовании стандартных "плоских" видов он всегда поворачивал в плоскости сетки, а не в "3D", чтобы постоянно не переключать с 3D на 2.5D. При этом в перспективе он будет поворачивать именно в объеме, если не включено 2.5D Обращаю внимание, что первая строчка, где RotateRef buttonText и т.д., там уже поправленный вариант на иконку от Sergo Script Pack, о чем я выше писал, к тому, что если по какой-то причине это "изменение" не нужно, первую строчку не заменяйте Код macroScript RotateRef buttonText: "Reference Rotation" category: "Retouchaid" Icon:#("sergoIcons",9)
( on isEnabled return ( selection.count > 0 ) on execute do ( fn compareFN a b = ( if a==b then ( messagebox "This point have to be different then pivot point!" return false ) else return true )--end fn relPt = #() p3A = pickpoint prompt:"Pick pivot point:" snap: #3D if (classof p3A)==point3 then ( p3B= pickpoint prompt:"Pick reference point:" snap: #3D rubberBand: p3A if (classof p3B)==point3 and (compareFN p3A p3B) then ( p3C = pickpoint prompt:"Pick reference point:" snap: #3D rubberBand: p3A if (classof p3C)==point3 and (compareFN p3A p3C) then ( if viewport.getType()==#view_top or viewport.getType()==#view_bottom then ( p3A=p3A*[1,1,0] p3B=p3B*[1,1,0] p3C=p3C*[1,1,0] ) if viewport.getType()==#view_front or viewport.getType()==#view_back then ( p3A=p3A*[1,0,1] p3B=p3B*[1,0,1] p3C=p3C*[1,0,1] ) if viewport.getType()==#view_left or viewport.getType()==#view_right then ( p3A=p3A*[0,1,1] p3B=p3B*[0,1,1] p3C=p3C*[0,1,1] ) relPt=#((p3B - p3A), (p3C - p3A)) --counting angel relatively to the beginning of coordinate system abAngle = acos (dot (normalize relPt[1]) (normalize relPt[2])) rotMatrix = arbAxis (cross (normalize relPt[1]) (normalize relPt[2])) rotMatrix.row4 = p3A for i in selection do ( if (isValidNode i) and (classof i) != Dummy then ( --dummy is for groups; alternative exclution is - (superclassof i) != helper in coordsys rotMatrix about rotMatrix rotate i abAngle z_axis ) )--end for )--end if p3C )--end if p3B )--end if p3A )--end on execute )--end macroscript |
|
|
18/09/2019, 14:06
Сообщение
#4
|
|
Знаток Группа: Пользователи Сообщений: 278 Регистрация: 02/05/2010 Из: РФ Пользователь №: 78 372 |
нужная фича, пасиба...
|
|
|
20/09/2019, 23:26
Сообщение
#5
|
|
Мастер Группа: Пользователи Сообщений: 1 379 Регистрация: 13/03/2006 Из: Челябинск, Россия Пользователь №: 25 023 |
"А ты всё, холоп, не уймешься!"
Решил сделать еще немного более рабочую версию. Взял метод взятия точек у Серго (у него взятие точек не создает проблем навигации), приписал это в в остальном работающий скрипт от Retouchaid, добавил показывающую "куда-чего" желтую линию. В этом виде немного подглюкивает Undo в случае, если нажатия точек прерваны каким-то замороченным образом, я не уловил пока. Но если кто-то хочет протестировать, вот тут код... Первая строчка класса макросткрипта, ее можно не копировать, оставив первую строчку старую, т.к. я поменял для порядка название, потому придется кнопку заново добавлять на панель. И рекомендую, понятно, бэкап исходного файла сделать для порядка. Также приложил видео, демонстрирующее работу. Вариант все еще не идеальный в сравнении с каноничным, когда и линии пунктирами, и арка рисуется, и вбить на клавиатуре можно, и объекты в процессе прям поворачиваются, но изучать макскрипт до этой меры, у меня сейчас тупо времени на это нет, так что за неимением гербовой... Короче, в сравнении с предыдущей версией, где просто подправлены 2.5D/3D снапы, тут уже есть не 100%-ая стабильность в работе, потому на свой страх и риск и всё такое Код macroScript RotateRefPlus buttonText: "Reference Rotation Plus" category: "Retouchaid" Icon:#("sergoIcons",9)
( global pickedPoint on isEnabled return ( selection.count > 0 ) tool pickOnePoint ( on mousePoint click_no do ( if click_no == 1 then ( pickedPoint = worldPoint ) ) ) tool pickTwoPoint ( on freeMove do ( ss=getNodeByName "SpecLine515" setKnotPoint ss 1 2 worldpoint updateshape ss ) on mousePoint click_no do ( if click_no == 1 then ( pickedPoint = worldPoint ) ) ) on execute do ( fn compareFN a b = ( if a==b then ( messagebox "This point have to be different then pivot point!" undo off ( ss=getNodeByName "SpecLine515" if ss !=undefined then delete ss ) return false ) else return true )--end fn fn drawLineBetweenTwoPoints pointA pointB = ( undo off ( local ss = SplineShape pos:pointA addNewSpline ss addKnot ss 1 #corner #line PointA addKnot ss 1 #corner #line PointB ss.name="SpecLine515" ss.showFrozenInGray = false ss.thickness = 2 Freeze ss updateShape ss ) ) relPt = #() pick_result = startTool pickOnePoint numPoints:1 p3A = pickedPoint if (classof p3A)==point3 then ( pick_result = startTool pickOnePoint numPoints:1 p3B=pickedPoint if (classof p3B)==point3 and (compareFN p3A p3B) then ( undo off ( newSpline = drawLineBetweenTwoPoints p3A p3B ss=getNodeByName "SpecLine515" ss.wirecolor = Yellow updateshape ss pick_result = startTool pickTwoPoint numPoints:1 p3C=pickedPoint ) if (classof p3C)==point3 and (compareFN p3A p3C) then ( if viewport.getType()==#view_top or viewport.getType()==#view_bottom then ( p3A=p3A*[1,1,0] p3B=p3B*[1,1,0] p3C=p3C*[1,1,0] ) if viewport.getType()==#view_front or viewport.getType()==#view_back then ( p3A=p3A*[1,0,1] p3B=p3B*[1,0,1] p3C=p3C*[1,0,1] ) if viewport.getType()==#view_left or viewport.getType()==#view_right then ( p3A=p3A*[0,1,1] p3B=p3B*[0,1,1] p3C=p3C*[0,1,1] ) relPt=#((p3B - p3A), (p3C - p3A)) --counting angel relatively to the beginning of coordinate system abAngle = acos (dot (normalize relPt[1]) (normalize relPt[2])) rotMatrix = arbAxis (cross (normalize relPt[1]) (normalize relPt[2])) rotMatrix.row4 = p3A undo off (delete ss) for i in selection do ( if (isValidNode i) and (classof i) != Dummy then ( --dummy is for groups; alternative exclution is - (superclassof i) != helper in coordsys rotMatrix about rotMatrix rotate i abAngle z_axis ) )--end for )--end if p3C )--end if p3B )--end if p3A undo off ( ss=getNodeByName "SpecLine515" if ss !=undefined then delete ss ) )--end on execute )--end macroscript
Прикрепленные изображения
|
|
|
21/09/2019, 12:51
Сообщение
#6
|
|
психомазохист Группа: Пользователи Сообщений: 4 418 Регистрация: 16/10/2012 Из: Восточная Африка - Маисовое поле Пользователь №: 86 591 |
кажется, канонично в Синеме
|
|
|
22/09/2019, 16:38
Сообщение
#7
|
|
▄▀▄▀▄▀▄▀▄ Группа: Пользователи Сообщений: 1 551 Регистрация: 31/10/2009 Пользователь №: 73 967 |
теперь придумай, чтоб не только ориентировалось, но и масштабировалось по третей точке.
И делало копию))) |
|
|
22/09/2019, 19:31
Сообщение
#8
|
|
Мастер Группа: Пользователи Сообщений: 1 379 Регистрация: 13/03/2006 Из: Челябинск, Россия Пользователь №: 25 023 |
теперь придумай, чтоб не только ориентировалось, но и масштабировалось по третей точке. И делало копию))) Не-не-не... Когда же я работать буду, я на это-то убил часов 8, блин )) Это надо хорошо максскрипт знать, а то за каждую ерунду гуглить, почему оно не работает. Вот просто из "потрындеть" - решил сделать линию, чтобы рисовалась, когда ты точки кликаешь. Нашел, как создавать линию между точками. Прекрасно. Надо найти, как вершину двигать, там все по-другому, нежели если двигать объект. Нашел. Только еще пришлось посмотреть на тему, чтобы он объект не только перерисовывал у себя там, но и на экране обновлял. Как сделать, чтобы оно бегало, когда я мышку двигаю, а не только когда кликаю. Нашел. Не работает. Убил час, выяснил, что у меня не эта функция вообще вызывается и вообще "Гена, мы не в тот подъезд зашли". Линия рисуется, цвет норм, красота... Только она, скотина, начала привязываться сама к себе, мол вершина линии как раз на курсоре, к ней привяжемся, потому при привязке к вертексам она постоянно привязывается сама к себе. Не, ну мы же умные, мы ее сделаем фризенной (какая простая команда, тупо Freeze и имя объекта). Она перестала привязываться, но стала серой. Ищем, как убрать галочку "Show frozen as gray". Находим, работает. Только в Undo появляется теперь не только "Undo RotateRefPlus", но и еще один пункт дальше "Undo MaxScript"... Нашел фишку, как делать все эти создания объектов и двигания вершин без записи в буфер Undo функцией Undo Off (). Пошерстил скрипт, все равно "Undo Maxscript", но теперь при нажатии Undo любой макс, что 2010, что 2018, вылетает с ошибкой. Интуитивно догадываясь, в чем дело, понатыкал Undo Off в кучу мест, помогло и стало нормально работать. Вах! Но блин, сколько времени убито и вообще, тяжела и неказиста жизнь простого... программиста. Потому как надо максскрипт уже знать немного, а не переводить все на уровне "My name is, I live in" Потому я знаю, как надо, вот прям хорошо знаю, но писать это - никакого времени не напасешься. Сейчас я сделал тот вариант, который уже удобный и рабочий. Хороший и годный вариант, где линия еще и жирной рисуется, и арка, и вбить угол можно, и объекты поворачиваются... Увы мне. Это не долго, это для меня ОЧЕНЬ долго Кстати, набор кад функций типа вот этой вообще можно, блин, продавать, но и продавец из меня, и программировать их я буду весь следующий год, за это время еще народ в блендеры слиняет, т.к. там все развивается, а тут тупо загнивает, почивая на лаврах 2000 года. |
|
|
23/09/2019, 07:56
Сообщение
#9
|
|
психомазохист Группа: Пользователи Сообщений: 4 418 Регистрация: 16/10/2012 Из: Восточная Африка - Маисовое поле Пользователь №: 86 591 |
Цитата Но блин, сколько времени убито и вообще ни фига ты не убил. Только насладился и ментально оздоровился |
|
|
25/09/2019, 11:07
Сообщение
#10
|
|
Хренодёр Группа: Пользователи Сообщений: 1 001 Регистрация: 02/06/2007 Из: Новосибирск Пользователь №: 53 785 |
|
|
|
25/09/2019, 12:21
Сообщение
#11
|
|
Мастер Группа: Пользователи Сообщений: 1 379 Регистрация: 13/03/2006 Из: Челябинск, Россия Пользователь №: 25 023 |
Прикольная штуковина, пригодится, спасибо. Пожалуйста... Т.к. тут был занят по другим делам, до макса почти не добирался, но вродь никаких явных косяков с последней версией не обнаружил. Потестил в 2010 и в 2018. Разве что в Перспективе в режиме 2,5D выяснилось, что за точки неправильно цепляется, когда они не на сетке лежат. На практике, думаю, даже вникать не буду, т.к. хоть это и некорректно, но я вряд ли в таком режиме оным хоть раз воспользуюсь, разве что случайно... И что-то мне подсказывает, что остальным тоже нужно будет или в проекциях получать поворот в плоскости одинаково в режиме 2,5D/3D, или в перспективе поворот в объеме в 3D. |
|
|
27/09/2019, 09:26
Сообщение
#12
|
|
Знаток Группа: Пользователи Сообщений: 278 Регистрация: 02/05/2010 Из: РФ Пользователь №: 78 372 |
А как на счет выравнивания объекта по четырем точкам ?
|
|
|
27/09/2019, 18:17
Сообщение
#13
|
|
Мастер Группа: Пользователи Сообщений: 1 379 Регистрация: 13/03/2006 Из: Челябинск, Россия Пользователь №: 25 023 |
Это как это по четырем? Направление и разворот по своей оси что ли?
|
|
|
29/09/2019, 19:30
Сообщение
#14
|
|
Знаток Группа: Пользователи Сообщений: 278 Регистрация: 02/05/2010 Из: РФ Пользователь №: 78 372 |
Может, конечно, я чего то не понимаю в данном плагине, и он позволяет это делать... Попробую объяснить. Для полного контроля объекта в пространстве не хватает ещё одной или даже двух контрольных точек. Например, в Normal Align, происходит выравнивание объекта в плоскость другого по принципу сопланарности. Но для полного контроля не хватает возможности задать нужный вектор, который укажет угол поворота объекта вокруг общей оси нормалей. В нашем случае, четвертая точка могла бы дополнительно показать объекту как его вращать/лепить к плоскости, опираясь на выбранную ранее ось. 1-я точка задает центр угла выравниваемого объекта, 2-я задает базовую линию, 3-я указывает требуемое направление для первых двух. 4-я могла бы задать плоскость, которая по ранее образовавшейся оси бы развернула объект. 5-я указала бы на искомую плоскость. Как то так.
|
|
|
29/09/2019, 20:39
Сообщение
#15
|
|
Мастер Группа: Пользователи Сообщений: 1 379 Регистрация: 13/03/2006 Из: Челябинск, Россия Пользователь №: 25 023 |
Контекст я понял: чтобы выравнивание делать именно в объеме, а не в плоскости. Т.е. чтобы не только объект смотрел на точку на другом объекте, а еще и был повернут в направлении четвертой точки.
Суть: этого тут нет, это вообще отдельный должен быть инструмент. Причем это даже не "4-Point Rotate", потому как, насколько я понимаю, там нужно будет целых 5 точек, а не 4. Да, такой сделать можно, и да, можно сделать из этого как еще один отдельный инструмент. Но нет, я его сейчас делать не буду... Банально нет времени разбирать максскрипт и требуемую на это математику. Переделку того скрипта я делал под себя, потому как реально нужно было именно классически кадовский трехтотчечный поворот, но сейчас еще четырех-шести часов на разработку нового скрипта у меня тупо нет. Да, для этого на самом деле нужно минут 15, но только если знаешь как. Я сейчас не знаю. Поработал с этим скриптом, пока работает стабильно кроме косяка с 2,5D во вьюпорте, а чем я выше упоминал. Даже проблем с undo пока не было. Сообщение отредактировал Harh - 29/09/2019, 20:41 |
|
|
Bots |
Системное сообщение
|
|
|
|
|
Текстовая версия | Сейчас: 19/04/2024 - 14:26 |