1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Reset XForm

Тема в разделе "MAXScript", создана пользователем ENGine, 9 окт 2007.

Модераторы: Savin Denis
  1. ENGine

    ENGine Пользователь сайта

    С нами с:
    27.01.2006
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    2
    подскажите пожалуйста как сделать Reset XForm для всех объектов сцены (for obj in geometry do ) ???
     
  2. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Так и пиши

    Код:
    for obj in geometry do (ResetXForm obj; collapseStack obj)
    
     
  3. ENGine

    ENGine Пользователь сайта

    С нами с:
    27.01.2006
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    2
    Интересно получается, если делаю вручную Reset XForm, то все прекрасно работает, а если делаю вот так как ты написал (через скрипт), то ничего не происходит -( Я к тому что видимо глюк в скриптах именно -)
     
  4. ENGine

    ENGine Пользователь сайта

    С нами с:
    27.01.2006
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    2
    Забыл дописать)) Такая же проблема и с переносом пивота в центр. Вообще вот как я пытаюсь делать:

    Код:
    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
     
  5. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Почему у тебя в коде Reset Pivot стоит до изменения Pivot`а ?!

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

    ENGine Пользователь сайта

    С нами с:
    27.01.2006
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    2
    вот мой код:
    Код:
    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
    )
    
    не хочет работать -(
     
  7. ENGine

    ENGine Пользователь сайта

    С нами с:
    27.01.2006
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    2
    Самое интересное если я делаю перемещние пивота и ресет хформ для основного объекта :
    obj.pivot = obj.center
    ResetXForm obj;
    collapseStack obj;
    И потом уже создаю его копию и экспортирую, то работает отлично. А если вот пытаюсь делать только для копии то не работает ?
     
  8. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Твой скрипт вешает макс, так как ты создаеш новые объекты во время цикла по объектам - парадокс.
    попробуй так

    Код:
    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 
    )
    
     
  9. ENGine

    ENGine Пользователь сайта

    С нами с:
    27.01.2006
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    2
    результат точно такой же как и с моим кодом -(
     
  10. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Значит тут в другом проблема
    Есть ряд фукций которые выполняются в другом потоке и возвряшают управление в скрип
    раньше чем будет готов результат, такое очень трудно побороть.
    лечиться только подбором последовательности действий в коде или заменой на альтернативные фукции.
     
  11. Pijoit

    Pijoit Пользователь сайта

    С нами с:
    04.08.2007
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    2
    Я в макс скриптах только начал разбираться.
    Но мой первый скрипт делал похожую задачу.
    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]

    Все чудненько работает.
     
Модераторы: Savin Denis

Поделиться этой страницей