Render.ru

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

Savin Denis

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

Paul_Winex

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

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

Paul_Winex

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

Код:
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
#24
Нашел тут на форумах код

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
#25
ar = $.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
#26
Да, глобальные. Твой вариант с поворотом выделенных групп сработал кстати. но я какраз закончил свой :):):)

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

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

Savin Denis

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

 

Paul_Winex

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

Код:
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
#30
В общем не всё так как хотелось. Щас скрипт действует только на группы. Если в группе есть вложенные группы, то они тоже и крутятся и перемещаются. То есть надо как-то не для всех выделенных групп применить скрипт а только для самой верхней если есть вложенные. Так же скрипт теперь не действует на просто единичный меш без групп. Группировать в этом случае кажется будет не очень логично, так как если объект повернут то группа всё равно создастся ровно и обнуление поворота не прокатит. Отсюда вывод - нужно научить скрипт работать только с верхним уровнем группы и если групп нет вообщето работать с объектом. Как это сделать?
 

Savin Denis

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

 

Paul_Winex

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

Savin Denis

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

igorznag

Мастер
Рейтинг
103
#35
Попробуй так:
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
#36
Отлично, спасибо. Пока всё работает. Только нужно не o.scale=[1,1,1] а Ресетнуть, чтобы текущий масштаб стал 1.1.1. Кажется это

Код:
ResetTransform o;
 

Savin Denis

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



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

Paul_Winex

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