Добрый вечер. Столкнулся с проблемой и не могу разобраться. Быть может я просто не сильно разбираюсь в JavaScript, надеюсь вы подскажете в чем дело.
Пишу скрипт, который удаляет все контуры за пределами квадрата (0; 0; 320; 320). Для этого мне нужно пройтись по всей древовидной структуре групп. Для этого написал функцию, в которой содержится цикл, в котором опять эта функция должна вызываться рекурсивно. Но оно у меня не работает: функция рекурсивно вызывается, но после этого следующая итерация цикла не наступает. Почему ?
Пишу скрипт, который удаляет все контуры за пределами квадрата (0; 0; 320; 320). Для этого мне нужно пройтись по всей древовидной структуре групп. Для этого написал функцию, в которой содержится цикл, в котором опять эта функция должна вызываться рекурсивно. Но оно у меня не работает: функция рекурсивно вызывается, но после этого следующая итерация цикла не наступает. Почему ?
Код:
sel = activeDocument.selection;
delItems = [];
function geatherP (group){
pItems = group.pathItems;
cpItems = group.compoundPathItems;
gItems = group.groupItems;
if (pItems){
for (i=0; i < pItems.length; i++){
if (pItems[i].locked == true || pItems[i].hidden == true) continue;
b = pItems[i].geometricBounds;
if (b[0] >= 0 && b[1] <=0 && b[2] <= 320 && b[3] >= -320) continue;
delItems.push (pItems[i]);
}
}
if (cpItems){
for (i=0; i < cpItems.length; i++){
if (cpItems[i].locked == true || cpItems[i].hidden == true) continue;
b = cpItems[i].geometricBounds;
if (b[0] >= 0 && b[1] <=0 && b[2] <= 320 && b[3] >= -320) continue;
delItems.push (cpItems[i]);
}
}
if (gItems){
for (i=0; i < gItems.length; i++){ //проблемный блок
if (gItems[i].locked == true || gItems[i].hidden == true) continue;
geatherP (gItems[i]);
}
}
}
for (i=0; i < sel.length; i++){
if (sel[i].locked == false && sel[i].hidden == false){
if (sel[i].typename == 'PathItem' || sel[i].typename == 'CompoundPathItem'){
delItems.push (sel[i]);
continue;
} else if (sel[i].typename == 'GroupItem') geatherP (sel[i]);
}
}
for (i=0; i < delItems.length; i++) delItems[i].remove();