Render.ru
Поддержать

применить скрипт после создания объекта

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
как работать только с группой см выше на примере пивота

Paul_Winex

Знаток
Рейтинг
20
да, както пропустил 🙂 Думал цитата из хелпа. Можешь объяснить что делать скрипт поэтапно?

И с поворотом чтото совсем зам туго. Получилось повернуть на определенный угол, а задать по оси Z конкретный урол пока не получилось. Надо видимо выяснить текущий угол поворота, и прибавить его в отрицательном значении.

Paul_Winex

Знаток
Рейтинг
20
Вот что намудрил

ar = $.rotation.z_rotation;
$.rotation.z_rotation = $.rotation.z_rotation - ar;
С простым объектом прокатывает. Угол становится 0. С группой опять нет.
По аналогии с вышеуказанным циклом:

for obj in $selection where isGroupHead obj do
(
ar = $.rotation.z_rotation;
$.rotation.z_rotation = $.rotation.z_rotation - ar;
)
[i]-- Error occurred in obj loop
--  Frame:
--   obj: $Group01
-- Unknown property: "rotation" in $selection[/i]
Кажется у группы другие параметры. Может я пытаюсь решить проблему в лоб, может есть возможность проще? Или тут пару команд дописать и готово?

Paul_Winex

Знаток
Рейтинг
20
Нашел тут на форумах код

on selectAndRotate pressed do
(
local xa = getCurrentSelection();
for i = 1 to xa.count do
(
if isGroupMember xa do continue
rnd = (random -360 360)
rotate xa (eulerangles 0 0 rnd)
)
Ничего почти не ясно, понял что полезна сточка if isGroupMember xa do

То есть проверка группы

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
Paul_Winexar = $.rotation.z_rotation;
$.rotation.z_rotation = $.rotation.z_rotation - ar;
Хитро ))

Сперва в какой координатной системе поворачиваешься ?
Если в глобальной то так (Для выделенного объекта ):

in coordsys world $.rotation.z_rotation = 0
Для выделенных групп:

for obj in $selection where isGroupHead obj do in coordsys world obj.rotation.z_rotation = 0

Paul_Winex

Знаток
Рейтинг
20
Да, глобальные. Твой вариант с поворотом выделенных групп сработал кстати. но я какраз закончил свой 🙂🙂🙂

zr = getCurrentSelection();
for i = 1 to zr.count do
( 
if isGroupMember zr[i] do continue
$.rotation.z_rotation = 0; 
)
Вот уж я наморозил то!

Спасибо за помощ!

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
Внимательней у тебя опять таже самая ошибка !
Пытаешься присвоить параметр всей выборке, вместо того чтоб присваивать текущему объекту в цикле.
$ - содержит по сути массив всех выбранных объектов, если выбрано больше одного
Если уж так пишешь нужно $ заменить на zr

Paul_Winex

Знаток
Рейтинг
20
Да, ошибку понял, но твой код мне больше понравился 🙂 Так что ошибку просто учту на будущее. Итого я собрал в кучу все сточки и вышло вот что:

for obj in $selection where isGroupHead obj do 
   obj.pivot = [obj.center.x,obj.center.y,obj.min.z]; 

for obj in $selection where isGroupHead obj do 
   in coordsys world obj.rotation.z_rotation = 0;

for obj in $selection where isGroupHead obj do 
   obj.pos = [0,0,0];
Этот код пойдет для кнопки. Так же состряпал по-быстрому окошко:

rollout resetobj "Reset Transform" 

( 
group "Reset selected objects";
	(
	button start "Reset object" 
	label lab1 "Parameters to reset:" align:#left
	label lab2 "Pivot - center of object, Z=min;" align:#left 
	label lab3 "Rotate = x,y,0;" align:#left 
	label lab4 "Positon = 0,0,0;" align:#left 
	)
on start pressed do
	(
	 for obj in $selection where isGroupHead obj do 
  	  obj.pivot = [obj.center.x,obj.center.y,obj.min.z]; 

	 for obj in $selection where isGroupHead obj do 
  	  in coordsys world obj.rotation.z_rotation = 0;

	 for obj in $selection where isGroupHead obj do 
  	  obj.pos = [0,0,0];
	)
				
)
createDialog resetobj 180 120
Еще надо бы на хоткей повесить, но это уже потом (если такое возможно). Щас сил нет продолжать.

Paul_Winex

Знаток
Рейтинг
20
Да, забыл еще сбросить Scale в конце, но это тоже потом

Paul_Winex

Знаток
Рейтинг
20
В общем не всё так как хотелось. Щас скрипт действует только на группы. Если в группе есть вложенные группы, то они тоже и крутятся и перемещаются. То есть надо как-то не для всех выделенных групп применить скрипт а только для самой верхней если есть вложенные. Так же скрипт теперь не действует на просто единичный меш без групп. Группировать в этом случае кажется будет не очень логично, так как если объект повернут то группа всё равно создастся ровно и обнуление поворота не прокатит. Отсюда вывод - нужно научить скрипт работать только с верхним уровнем группы и если групп нет вообщето работать с объектом. Как это сделать?

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
Так добавь проверки в условие цикла выборки запрет если есть дети и разреши не членам группы.

Paul_Winex

Знаток
Рейтинг
20
... эт я и так понял. Мне бы кодом подсибить 🙂 У вас это лучше получается, судя по прошлому опыту.

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
Кодом пособляю за вознаграждение ))
А советом легко, что именно здесь не понятно ?
Проверку на принадлежность к группе ? так ты сам ее выше приводил
Свойство родитель можно найти в хелпе с базовыми параметрами ноды

igorznag

Мастер
Рейтинг
103
Попробуй так:
for o in $selection where o.parent==undefined do
(CenterPivot o;o.pivot.z=o.min.z;
o.rotation.z_rotation=0;o.pos=[0,0,0];o.scale=[1,1,1]😉

Paul_Winex

Знаток
Рейтинг
20
Отлично, спасибо. Пока всё работает. Только нужно не o.scale=[1,1,1] а Ресетнуть, чтобы текущий масштаб стал 1.1.1. Кажется это

ResetTransform o;

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
Тебе не кажется что фукция ResetScale больше созвучна ? Если речь конечно о масштабе.
Во вторых как луче это сделать уже говорил выше в посте #19



PS. Надеялся что сам все же домыслишь с этим условием. А если не получиться спросишь. Но да ладно заставить другого решить за тебя тоже хороший метод ))

Paul_Winex

Знаток
Рейтинг
20
Savin DenisPS. Надеялся что сам все же домыслишь
Честно старался! Просто автооповещение о коментах не дает пропускать сообщения 🙂 Да и срочность поджимает. А ResetTransform мне более созвучно по аналогичной команде из Майи (FreezTransform), и по сути, после предварительных действий, разницы нет.
Спасибо за модмогу!