Render.ru

Reset XForm

ENGine

Пользователь сайта
Рейтинг
2
#1
подскажите пожалуйста как сделать Reset XForm для всех объектов сцены (for obj in geometry do ) ???
 

ENGine

Пользователь сайта
Рейтинг
2
#3
Интересно получается, если делаю вручную Reset XForm, то все прекрасно работает, а если делаю вот так как ты написал (через скрипт), то ничего не происходит -( Я к тому что видимо глюк в скриптах именно -)
 

ENGine

Пользователь сайта
Рейтинг
2
#4
Забыл дописать)) Такая же проблема и с переносом пивота в центр. Вообще вот как я пытаюсь делать:

Код:
for obj in geometry do
(
--obj.mapcoords = on 			
scen = svt.text + ("Media\\models\\") + obj.name
											
obj_copy = copy obj
obj_copy.name = "Copy_obj"
	
--ResetXForm obj_copy;
--collapseStack obj_copy;
						
obj_copy.pos = [0,0,0] 
obj_copy.rotation = quat 0 0 0 0
obj_copy.scale = point3 1 1 1
--obj_copy.pivot = obj_copy.center
						
exportSelected obj_copy scen progressBar
delete obj_copy
)
То есть у меня есть объекты в сцене, мне нужно взять каждый переместить его пивот в центр, проверить если есть у него свойство mapcoords, то поставить on и сделать Reset XForm. Все это необходимо сделать до строчки exportSelected obj_copy scen progressBar
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#5
Почему у тебя в коде Reset Pivot стоит до изменения Pivot`а ?!

Код у меня работал, у тебя какой макс ?
Поэксперементируй c одним объектом:
1) возьми бокс измени вручную pivot
2) нажми Reset Pivot - Pivot вернется обратно
3) повтори 1)
4) запусти код
5) нажми Reset Pivot - Pivot должен остаться на месте
 

ENGine

Пользователь сайта
Рейтинг
2
#6
вот мой код:
Код:
for obj in geometry do
scen = svt.text + ("Media\\models\\") + obj.name
																	
obj_copy = copy obj
obj_copy.name = "Copy_obj"
						
try
( obj_copy.mapcoords = on )
catch
()
						
--obj_copy.pivot = obj_copy.center				
--ResetXForm obj_copy;
--collapseStack obj_copy;

obj_copy.pos = [0,0,0] 
obj_copy.rotation = quat 0 0 0 0
obj_copy.scale = point3 1 1 1
						
exportSelected obj_copy scen progressBar
delete obj_copy
)
не хочет работать -(
 

ENGine

Пользователь сайта
Рейтинг
2
#7
Самое интересное если я делаю перемещние пивота и ресет хформ для основного объекта :
obj.pivot = obj.center
ResetXForm obj;
collapseStack obj;
И потом уже создаю его копию и экспортирую, то работает отлично. А если вот пытаюсь делать только для копии то не работает ?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#8
Твой скрипт вешает макс, так как ты создаеш новые объекты во время цикла по объектам - парадокс.
попробуй так

Код:
all_obj = $geometry as array
for obj in all_obj where IsValidNode obj do (
scen = svt.text + ("Media\\models\\") + obj.name 

obj_copy = copy obj 
obj_copy.name = "Copy_obj" 

if isProperty obj_copy "mapcoords" do obj_copy.mapcoords = on 


obj_copy.pivot = obj_copy.center 
ResetXForm obj_copy; 
collapseStack obj_copy; 

obj_copy.pos = [0,0,0] 

exportSelected obj_copy scen progressBar 
delete obj_copy 
)
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#10
Значит тут в другом проблема
Есть ряд фукций которые выполняются в другом потоке и возвряшают управление в скрип
раньше чем будет готов результат, такое очень трудно побороть.
лечиться только подбором последовательности действий в коде или заменой на альтернативные фукции.
 

Pijoit

Пользователь сайта
Рейтинг
2
#11
подскажите пожалуйста как сделать Reset XForm для всех объектов сцены (for obj in geometry do ) ???
Я в макс скриптах только начал разбираться.
Но мой первый скрипт делал похожую задачу.
1.
max select all
ResetXForm $ -- Reset_XForm для всех объектов сцены.

2.
--Ustanovka pivota i obeka v 000
X = $selection.center.x
Y = $selection.center.y
Z = $selection.min.z
$.pivot = [X,Y,Z]
$.pos = [0,0,0]

Все чудненько работает.
 
Сверху