Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   JSFL войти в сгруппированный шейп (shape) (http://www.flasher.ru/forum/showthread.php?t=121305)

chingachgoog 12.02.2009 16:07

JSFL войти в сгруппированный шейп (shape)
 
Дошел до уровня элемент_шейп.isGroup

Далее надо войти в группу (или подгруппы) до конечного шейпа и выделить его (применить в итоге optimizeCurves).

Не могу найти, как получить массив группы (или как войти в группу)???

DarkLight 12.02.2009 19:06

а если сделать beginEdit, а затем unGroup? потом отредактировать и сгруппировать обратно

chingachgoog 12.02.2009 19:19

Разгруппированные шейпы ведут себя непредсказуемо, особенно когда их много - обратно может сгруппироваться совсем не то.

В общем нашел, что в группу можно войти enterEditMode().
Но при выделении selectAll() в массиве selection всего один объект (хотя там могут быть несколько шейпов, в т.ч. тоже сгруппированные).

Плюс начинаются глюки со встроенными методами JSFL-разработчиков: то enterEditMode(), то optimizeCurves(), начинают непредсказуемо писать ошибки - якобы нет выделения! (и это после selectAll()!) Непредсказуемость в том, что они при одном запуске возникают, при другом - нет.

add:

В общем основная ошибка из-за которой скрипт не работает - нестабильность метода
Цитата:

fl.getDocumentDOM().selection=[мой_элемент]
Собственно он то выделяет мой_элемент (видно по параметру selection.length), то напрочь отказывается это делать (часто помогает перезапуск флеш-редактора, но не всегда).
А выделение нужного элемента (мой_элемент) - необходимое условие методов enterEditMode и optimizeCurves.

Может быть еще как-то можно выделить элемент для этих методов? Не понимаю...

Код:

Array.prototype.clone=function(){
        var arr=[]
        for (var i in this){
                arr[i]=this[i]
        }
        return arr
}

fl.outputPanel.clear ();

myFile=fl.getDocumentDOM()
myTimeline=myFile.getTimeline()

for (var i=0; i<myTimeline.layers.length; i++){ // перебираем слои
        var curLayer=myTimeline.layers[i] // текущий слой
       
        for (var j=0; j<curLayer.frames.length; j++){ // перебираем кадры
                curFrame=curLayer.frames[j] // текущий кадр
                var arrElements = curFrame.elements.clone(); // массив с элементами на текущем кадре
               
                  for (var c = 0; c < arrElements.length; c++) {
                        var curElement=arrElements[c]
                      chekElements(curElement)
                }
        }
}

function chekElements(curElement){
        myFile.selectNone()
        fl.trace("проверка элемента "+curElement)
        if (curElement.elementType == "shape"){
                if (curElement.isGroup){
                        inGroup(curElement)
                        return
                }
               
                //myFile.selection=[curElement]
                myFile.selectAll()
                fl.trace("Оптимизация простого элемента "+myFile.selection)
                if (!myFile.selection.length){
                        fl.trace("произошел сбой выделения элемента")
                        return
                }
                myFile.optimizeCurves(100, true);
        }
}                       

function inGroup(curElement){
        fl.trace("выделена группа")
       
        myFile.selection=[curElement]

        if (!myFile.selection.length){
                        fl.trace("произошел сбой выделения группы")
                        return
                }
       
        myFile.enterEditMode(); // входим в группу
        myFile.selectAll() // выделяем все элементы
        var arrSelection=myFile.selection.clone()

        fl.trace("В группе выделенных элементов: "+arrSelection.length)
       
        for (var i=0; i<arrSelection.length; i++){
                chekElements(arrSelection[i])
        }
        myFile.exitEditMode() // выходим из группы
}



Часовой пояс GMT +4, время: 01:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.