Просмотр полной версии : JSFL войти в сгруппированный шейп (shape)
chingachgoog
12.02.2009, 16:07
Дошел до уровня элемент_шейп.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() // выходим из группы
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.