Render.ru

Rotate + NormalAverage

Prostrelov

Активный участник
Рейтинг
5
#1
Подскажите пожалуйста способ (скрипт\плагин\алгоритм) выравнять
манипулятор Rotate аналогично манипуляторам Move, Scale в режиме
NormalAverage.
Не "SetToPoint\Edge\Face".

Можно ли вообще получить с манипулятора ориентацию его направляющих ?

Я пробовал получить так
mode = cmds.manipMoveContext( 'Move', q=True, oa=True ), но
"orientAxes" что в Global что в NormalAverage режиме неизменны.

Если есть посоветуйте годную статью по манипуляторам.
В тех что находил этот момент явно не освещался.
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
#2
Ориентация манипулятора Rotate завязана на локальный осях объекта.
Есть старый трюк повернуть эти оси:
Пустая группа, либо локатор поворачивается как надо любыми способами.
Нужный объект делается дочерним этой группе, потом делаем ему Freeze Transofrmation - его оси выравниваются по родительским.
Группу можно удалить, а ориентация осей останется.
Это все легко записать в свой скрипт.
+ Можно поискать различные готовые скрипты на просторах интернета.
 

Prostrelov

Активный участник
Рейтинг
5
#3
То-есть получается для того что бы мне повернуть пару полигонов обьекта, мне нужно фризить всему обьекту Transformation.
А если у меня обьект уже повёрнут и мне не желательно его фризить ?
Видимо нужно в переменную брать его положение прежде чем фризить что бы в дальнейшем к нему вернуться, или есть какая-то команда проще что бы вернуть положение локальных осей обьекту уже повёрнутому в пространтсве.
 

Skif

Администратор 3D галереи
Команда форума
Рейтинг
584
#4
а зачем это вообще делать? если не секрет?
 

Skif

Администратор 3D галереи
Команда форума
Рейтинг
584
#5
не правильно. что вы хотите в итоге получить?
 

Prostrelov

Активный участник
Рейтинг
5
#6
В итоге я хочу получить тоглер, под одну кнопку:
- включить NormalAverage для всех манипуляторов (Move,Rotate,Scale)
- включить World для всех манипуляторов

при этом не хотелось бы при каждом его использовании с Rotate заново выставлять направляющие у обьекта.
ну и разумеется что бы это работало для компонентов, а не только для обьектов.

п.с.
если есть примеры на python'e было бы здорово глянуть.​
 

Prostrelov

Активный участник
Рейтинг
5
#7
Разбирал HKLocalTool.
Работает он через локаторы.
Строит первый в центральной точке BoundingBox'а выбранных компонент обьекта.
Затем считает для него усреднённое значение вектора.
Потом складывает значения центра BoundingBox со значением вектора и строит второй локатор.
Далее через aimConstraint берёт среднее значение между двумя локаторами и поворачивает первый локатор соответственно этому значению.

И тут я засел. Манипуляторам можно передать orientAxes.
Но aimConstraint -aimVector возвращает локальные координаты, а не глобальные.
То-есть для любого обьекта кроме того для которого создавался констрейн координаты возвращаемые ключом aimVector бесполезны.

В результате у меня есть правильно повёрнутый Locator, но я не понимаю как повернуть по нему Контексты Move,Rotate,Scale.

Подскажите плз 4 дня убил на разбор чужого MEL скрипта.
Парентить не хочу потому и занялся припарированием HKLocalTools.

Может в Qt есть что-то что может решить данный вопрос ?
 

Prostrelov

Активный участник
Рейтинг
5
#9
эм. я не очень себе представляю как можно запарентить констрейном без офсета манипулятор к локатору.​
Можешь продемонстрировать как-нибудь плз ?​
 

Skif

Администратор 3D галереи
Команда форума
Рейтинг
584
#10
если честно не понял вообще зачем это делать.. что делать вы написали, а зачем - нет. может есть путь проще?
 

Monkibase

Соведущий Dominance War
Рейтинг
464
#11
В 2014 например, в моделинг тулкит, можно простым шорткатом поменять оси инструментов как угодно. Там как раз удобно выровнять их по кокой-нибудь грани или полигону. Какой шорткат не помню - надо хелп открыть.
 

Prostrelov

Активный участник
Рейтинг
5
#12
Monkibase если не ошибаюсь то оси можно было выровнять только по уже выбранному элементу. То-есть взять и выбрать ейдж по которому нужно выровнять оси , например с другой стороны куба - не получится.

п.с.
кстати обалденный боец ))) текстуры детальки - супер.попёр себе в коллекцию.
 

Monkibase

Соведущий Dominance War
Рейтинг
464
#13
нене, вроде кнопкой D выбираешь произвольный центр, хоть на обратной стороне, а потом шифтами или альтом снапишь направления.
 

Prostrelov

Активный участник
Рейтинг
5
#17
Это не ответ на мой вопрос заданый в теме.
Я искал способ сориентировать манипулятор Rotate так же как это происходит с отсльными манипуляторами при применении NormalAverage.
А то что предложил ты это грубо говоря указать направления координат (вверх вниз право лево).
 

Lemieux

Знаток
Рейтинг
58
#18
Это не ответ на мой вопрос заданый в теме.
Я искал способ сориентировать манипулятор Rotate так же как это происходит с отсльными манипуляторами при применении NormalAverage.
А то что предложил ты это грубо говоря указать направления координат (вверх вниз право лево).
Вообще-то, покатигорошек всё правильно посоветовал. Может Вам ещё с картинками всё показать?
 

Prostrelov

Активный участник
Рейтинг
5
#19
так отчего б не запарентить констрейном без офсета с последующим его удалением?
если парентить с MaintainOffset[: on] куб к правильно сориентированному локатору, координаты куба не изменяются.
если парентить с MaintainOffset[: off] куб к правильно сориентированному локатору, координаты куба не изменяются, сам куб поворачивается в соотвутствии с координатами локатора.

Мой изначальный вопрос был:
Подскажите пожалуйста способ (скрипт\плагин\алгоритм) выравнять
манипулятор Rotate аналогично манипуляторам Move, Scale в режиме
NormalAverage.
локал дирекшн - игрек.
...
Вообще-то, покатигорошек всё правильно посоветовал
Видимо действительно нужно показать картинки т.к. я не могу понять как указав
манипулятору что игрек у нас наверху(слева справа внизу) мы выравняем
манипулятор по NormalAverage.
Или как вариант ответить чуть подробнее чем одной строкой.
 
Сверху