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

Как удалить из сцены все Dummy

Тема в разделе "MAXScript", создана пользователем Castello, 10 дек 2012.

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

    Castello Активный участник

    С нами с:
    06.01.2012
    Сообщения:
    47
    Симпатии:
    0
    Баллы:
    5
    Пробовал таким образом:

    Код:
    	for obj in objects where classOf obj == Dummy do
    	(
    		delete obj
    	)
    удаляются одиночный дамми, а также дамми которые находятся ввеху по иеархии, т.е. если к дамми присоеденены другие дамми, то они не удаляются.

    Приходится повторять операцию, и рабочий скрипт выглядит так:

    Код:
    for i = 1 to 10 do
    (
    	for obj in objects where classOf obj == Dummy do
    	(
    		delete obj
    	)
    )
    помогите написать грамотный код
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Код:
    for obj in (objects as array) where classOf obj == Dummy do 
    ( 
    delete obj 
    )
     
  3. Castello

    Castello Активный участник

    С нами с:
    06.01.2012
    Сообщения:
    47
    Симпатии:
    0
    Баллы:
    5
    работает...
    можете объяснить почему? objetcs это ведь и так массив, что дает явное определение?
     
  4. 1acc

    1acc Знаток

    С нами с:
    03.09.2007
    Сообщения:
    347
    Симпатии:
    6
    Баллы:
    40
    Я могу объяснить. objects это не массив, а коллекция, которая обновляется сама собой. При стирании в цикле объектов коллекция самообновляется при каждом удалении, и никто не гарантирует, какой объект там на каком месте после обновления окажется, поэтому объекты запросто могут быть пропущены. Аналогично, если и из массива пытаться удалить объекты по порядку "for i=1 to arr.count do ..." - будет похожая ерунда. Поэтому, если требуется удалять по порядку, то из массивов элементы удалять нужно обратным циклом "for i=arr.count to 1 by -1 do ...". В вышеприведенном рабочем примере используется in, поэтому все работает.
    Ну, а вообще удалять даммики лучше так: delete (for obj in helpers where classOf obj == Dummy collect obj)
     
Модераторы: Savin Denis

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