Разгруппированные шейпы ведут себя непредсказуемо, особенно когда их много - обратно может сгруппироваться совсем не то.
В общем нашел, что в группу можно войти
enterEditMode().
Но при выделении
selectAll() в массиве
selection всего один объект (хотя там могут быть несколько шейпов, в т.ч. тоже сгруппированные).
Плюс начинаются глюки со встроенными методами JSFL-разработчиков: то
enterEditMode(), то
optimizeCurves(), начинают непредсказуемо писать ошибки - якобы нет выделения! (и это после
selectAll()!) Непредсказуемость в том, что они при одном запуске возникают, при другом - нет.
add:
В общем основная ошибка из-за которой скрипт не работает - нестабильность метода
Цитата:
fl.getDocumentDOM().selection=[мой_элемент]
|
Собственно он то выделяет мой_элемент (видно по параметру
selection.length), то напрочь отказывается это делать (часто помогает перезапуск флеш-редактора, но не всегда).
А выделение нужного элемента (
мой_элемент) - необходимое условие методов
enterEditMode и o
ptimizeCurves.
Может быть еще как-то можно выделить элемент для этих методов? Не понимаю...
Код:
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() // выходим из группы
}