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

Как удалить instance объекты из массива

Тема в разделе "MAXScript", создана пользователем astron, 12 авг 2014.

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

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

    С нами с:
    15.12.2006
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Нужно собирать массив объектов на которых наложен TurboSmooth
    В получившемся массиве на ряду с уникальными объектами, присутствую instance объекты, как их удалить, оставив лишь один объект instance

    вот моя функция но работает через раз. не могу понять почему.
    function objectCollector =
    ( ObjArrTbs=#()
    dirtinctarr=#()
    for i in geometry where i.isHiddenInVpt!=true do
    (
    if ( classof i.modifiers[1]==TurboSmooth ) then append ObjArrTbs #(i,1,(i.modifiers[1].iterations),(i.modifiers[1].enabled),if (InstanceMgr.GetInstances i &instances)==1 then true else false)
    else
    for j=1 to i.modifiers.count do
    (
    if (classof i.modifiers[j]==TurboSmooth and isHiddenInVpt!=true) then (append ObjArrTbs #(i,j,i.modifiers[j].iterations,i.modifiers[j].enabled, if (InstanceMgr.GetInstances i &instances)==1 then true else false) ; exit() )
    else
    if classof i.modifiers[j]==Edit_Poly do exit()
    )
    )

    global Dirtarr=ObjArrTbs.count
    objcount= ObjArrTbs.count
    while objcount>=1 do
    ( if InstanceMgr.GetInstances ObjArrTbs[objcount][1] &instances != undefined then inst=instances.count else exit()

    while inst>=2 do
    (
    tempvar=objcount
    while tempvar >=1 do
    (
    if finditem ObjArrTbs[tempvar] instances[inst] > 0 do deleteitem ObjArrTbs tempvar; exit()
    tempvar-=1
    )
    inst-=1
    )
    objcount-=1
    )
    )
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.255
    Симпатии:
    172
    Баллы:
    65
    Пример:
    Код:
    ObjArrTbs=#(); g=geometry as array; while g.count>0 do 
    ( 
    have_ts=false; i=g[1]
    for j=1 to i.modifiers.count where classof i.modifiers[j]==TurboSmooth do have_ts=true
    if have_ts==true then append ObjArrTbs i; InstanceMgr.GetInstances i &instances
    for k in instances do (ind=finditem g k;if ind>0 do deleteitem g ind)
    )
    print ObjArrTbs
     
  3. astron

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

    С нами с:
    15.12.2006
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    ого как лаконично ! спасибо огромное !
     
Модераторы: Savin Denis

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