[AI CC-CC2021] Сортировка слоев по параметрам

jak_art_a

Участник
Топикстартер
Сообщения
4
Реакции
0
Привет уважаемые эксперты.
Интересен следующий вопрос:

Есть 5 слоев, у объектов(слоев) есть имена(цифры). Был создан скрипт, что должен был отсортировать все объекты. Но сортируются объекты лишь в одном слое.
Как сделать так чтобы все объекты слоев были отсортированы?
В этом я слабо(вообще не) разбираюсь.
Благодарю!

-----------------------------------------------------

#target "Illustrator"

var doc = app.activeDocument;
var Top_all_layers = doc.layers;
Arrange_Layers(doc, Top_all_layers);
redraw();

function Arrange_Layers(where, T_Layers_OBJ) {
var temp_L_names = new Array();
for (var i = 0; i < T_Layers_OBJ.length; i++) {
temp_L_names.push(T_Layers_OBJ.name);
}
sort_layer(where, temp_L_names.sort(naturalCompare));;

for (var i = 0; i < T_Layers_OBJ.length; i++) {
if (T_Layers_OBJ.layers.length != 0) {
Arrange_Layers(T_Layers_OBJ, T_Layers_OBJ.layers);
}
}
return;
}

function sort_layer(where, Layers_Array) {
var temp_P_names = Array();
var Sorted_temp_P = Array();

for (var k = 0; k < Layers_Array.length; k++) {
var temp_layer = where.layers.getByName(Layers_Array[k]); //
var status_Lock = temp_layer.locked;
var status_Preview = temp_layer.preview;
var status_visible = temp_layer.visible;

temp_layer.locked = false;
temp_layer.preview = true;
temp_layer.visible = true;

temp_layer.zOrder(ZOrderMethod.SENDTOBACK);

temp_layer.locked = status_Lock;
temp_layer.preview = status_Preview;
temp_layer.visible = status_visible;
}


for (var k = 0; k < Layers_Array.length; k++) {
var temp_layer = where.layers.getByName(Layers_Array[k]); //
var temp_items = temp_layer.pageItems;

for (var l = 0; l < temp_items.length; l++) {
temp_P_names.push(temp_items[l].name);
}

Sorted_temp_P = temp_P_names.sort(naturalCompare);

try {
for (var l = 0; l < Sorted_temp_P.length; l++) {
$.writeln(Sorted_temp_P, "--", temp_items);
var temp_OBJ = temp_layer.pageItems.getByName(Sorted_temp_P[l]);
temp_OBJ.zOrder(ZOrderMethod.SENDTOBACK);
//
} //
} catch (e) {
//alert(e);
}


}

//
}
//
//
function naturalCompare(a, b) {
var ax = [],
bx = [];

a.replace(/(\d+)|(\D+)/g, function(_, $1, $2) {
ax.push([$1 || Infinity, $2 || ""])
});
b.replace(/(\d+)|(\D+)/g, function(_, $1, $2) {
bx.push([$1 || Infinity, $2 || ""])
});

while (ax.length && bx.length) {
var an = ax.shift();
var bn = bx.shift();
var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
if (nn) return nn;
}

return ax.length - bx.length;
}
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Честно говоря, какой то чудовищно безумный индокитайский код, минут двадцать честно вникал в логику и бросил.
Для начала - у нас на форуме есть специальные тэги для кода, с ними он выглядит гораздо нагляднее:
JavaScript:
-----------------------------------------------------

#target "Illustrator"

var doc = app.activeDocument;
var Top_all_layers = doc.layers;
Arrange_Layers(doc, Top_all_layers);
redraw();

function Arrange_Layers(where, T_Layers_OBJ) {
var temp_L_names = new Array();
for (var i = 0; i < T_Layers_OBJ.length; i++) {
temp_L_names.push(T_Layers_OBJ.name);
}
sort_layer(where, temp_L_names.sort(naturalCompare));;

for (var i = 0; i < T_Layers_OBJ.length; i++) {
if (T_Layers_OBJ.layers.length != 0) {
Arrange_Layers(T_Layers_OBJ, T_Layers_OBJ.layers);
}
}
return;
}

function sort_layer(where, Layers_Array) {
var temp_P_names = Array();
var Sorted_temp_P = Array();

for (var k = 0; k < Layers_Array.length; k++) {
var temp_layer = where.layers.getByName(Layers_Array[k]); //
var status_Lock = temp_layer.locked;
var status_Preview = temp_layer.preview;
var status_visible = temp_layer.visible;

temp_layer.locked = false;
temp_layer.preview = true;
temp_layer.visible = true;

temp_layer.zOrder(ZOrderMethod.SENDTOBACK);

temp_layer.locked = status_Lock;
temp_layer.preview = status_Preview;
temp_layer.visible = status_visible;
}


for (var k = 0; k < Layers_Array.length; k++) {
var temp_layer = where.layers.getByName(Layers_Array[k]); //
var temp_items = temp_layer.pageItems;

for (var l = 0; l < temp_items.length; l++) {
temp_P_names.push(temp_items[l].name);
}

Sorted_temp_P = temp_P_names.sort(naturalCompare);

try {
for (var l = 0; l < Sorted_temp_P.length; l++) {
$.writeln(Sorted_temp_P, "--", temp_items);
var temp_OBJ = temp_layer.pageItems.getByName(Sorted_temp_P[l]);
temp_OBJ.zOrder(ZOrderMethod.SENDTOBACK);
//
} //
} catch (e) {
//alert(e);
}


}

//
}
//
//
function naturalCompare(a, b) {
var ax = [],
bx = [];

a.replace(/(\d+)|(\D+)/g, function(_, $1, $2) {
ax.push([$1 || Infinity, $2 || ""])
});
b.replace(/(\d+)|(\D+)/g, function(_, $1, $2) {
bx.push([$1 || Infinity, $2 || ""])
});

while (ax.length && bx.length) {
var an = ax.shift();
var bn = bx.shift();
var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
if (nn) return nn;
}

return ax.length - bx.length;
}
 

jak_art_a

Участник
Топикстартер
Сообщения
4
Реакции
0
Так индокитаец и написал этот код:D
 

jak_art_a

Участник
Топикстартер
Сообщения
4
Реакции
0
Безымянный.jpg

вот такая ошибка выходит
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
А что, собственно, должен делать прямой расово православный код?
Этот делает одновременно столько всего, что конечная цель неясна вообще
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Ну правильно выходит. T_Layers_OBJ - массив слоев, откуда у него свойство namе? Наверное, индокитаец хотел T_Layers_OBJ[i] а индексы движок без тэга кода пожрал? Запостите исходный код в тэг пока мы тут мозг себе не сломали
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 885
Реакции
3 457
гораздо нагляднее
— это так:
JavaScript:
#target "Illustrator"

var doc = app.activeDocument;
var Top_all_layers = doc.layers;
Arrange_Layers(doc, Top_all_layers);
redraw();

function Arrange_Layers(where, T_Layers_OBJ) {
    var temp_L_names = new Array();
    for (var i = 0; i < T_Layers_OBJ.length; i++) {
        temp_L_names.push(T_Layers_OBJ.name);
    }
    sort_layer(where, temp_L_names.sort(naturalCompare));;

    for (var i = 0; i < T_Layers_OBJ.length; i++) {
        if (T_Layers_OBJ.layers.length != 0) {
            Arrange_Layers(T_Layers_OBJ, T_Layers_OBJ.layers);
        }
    }
    return;
}

function sort_layer(where, Layers_Array) {
    var temp_P_names = Array();
    var Sorted_temp_P = Array();

    for (var k = 0; k < Layers_Array.length; k++) {
        var temp_layer = where.layers.getByName(Layers_Array[k]); //
        var status_Lock = temp_layer.locked;
        var status_Preview = temp_layer.preview;
        var status_visible = temp_layer.visible;

        temp_layer.locked = false;
        temp_layer.preview = true;
        temp_layer.visible = true;

        temp_layer.zOrder(ZOrderMethod.SENDTOBACK);

        temp_layer.locked = status_Lock;
        temp_layer.preview = status_Preview;
        temp_layer.visible = status_visible;
    }


    for (var k = 0; k < Layers_Array.length; k++) {
        var temp_layer = where.layers.getByName(Layers_Array[k]); //
        var temp_items = temp_layer.pageItems;

        for (var l = 0; l < temp_items.length; l++) {
            temp_P_names.push(temp_items[l].name);
        }

        Sorted_temp_P = temp_P_names.sort(naturalCompare);

        try {
            for (var l = 0; l < Sorted_temp_P.length; l++) {
                $.writeln(Sorted_temp_P, "--", temp_items);
                var temp_OBJ = temp_layer.pageItems.getByName(Sorted_temp_P[l]);
                temp_OBJ.zOrder(ZOrderMethod.SENDTOBACK);
                //
            } //
        } catch (e) {
            //alert(e);
        }


    }

    //
}
//
//
function naturalCompare(a, b) {
    var ax = [],
        bx = [];

    a.replace(/(\d+)|(\D+)/g, function (_, $1, $2) {
        ax.push([$1 || Infinity, $2 || ""])
    });
    b.replace(/(\d+)|(\D+)/g, function (_, $1, $2) {
        bx.push([$1 || Infinity, $2 || ""])
    });

    while (ax.length && bx.length) {
        var an = ax.shift();
        var bn = bx.shift();
        var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
        if (nn) return nn;
    }

    return ax.length - bx.length;
}
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 885
Реакции
3 457

jak_art_a

Участник
Топикстартер
Сообщения
4
Реакции
0
JavaScript:
#target "Illustrator"

var doc            = app.activeDocument;
var Top_all_layers  = doc.layers;
Arrange_Layers(doc, Top_all_layers) ;
redraw();

function Arrange_Layers(where, T_Layers_OBJ) {
    var temp_L_names = new Array();
     for ( var i = 0 ; i < T_Layers_OBJ.length ; i++ ) {
        temp_L_names.push(T_Layers_OBJ.name);
    }
    sort_layer(where, temp_L_names.sort(naturalCompare)) ;;
    for ( var i = 0 ; i < T_Layers_OBJ.length ; i++ ) {
        if ( T_Layers_OBJ.layers.length != 0 ) {
            Arrange_Layers(T_Layers_OBJ, T_Layers_OBJ.layers) ;
        }
    }
return ;
}

function sort_layer(where, Layers_Array) {
    var temp_P_names  = Array() ;
    var Sorted_temp_P = Array() ;
    for (var k=0 ; k < Layers_Array.length ; k++) {
        var temp_layer = where.layers.getByName(Layers_Array) ;//
        var status_Lock = temp_layer.locked;
        var status_Preview = temp_layer.preview;
        var status_visible = temp_layer.visible;
    
        temp_layer.locked  = false;
        temp_layer.preview  = true;
        temp_layer.visible  = true;
        temp_layer.zOrder( ZOrderMethod.SENDTOBACK );
    
        temp_layer.locked  = status_Lock;
        temp_layer.preview  = status_Preview;
        temp_layer.visible  = status_visible;
    }

    for (var k=0 ; k < Layers_Array.length ; k++) {

        var temp_layer = where.layers.getByName(Layers_Array) ;//
        var temp_items = temp_layer.pageItems ;
        for (var l=0 ; l < temp_items.length ; l++) {
      
            temp_P_names.push(temp_items.name) ;
        }

        Sorted_temp_P = temp_P_names.sort(naturalCompare) ;
        try {
            for (var l=0 ; l < Sorted_temp_P.length; l++){
                $.writeln(Sorted_temp_P,"--", temp_items) ;
                var temp_OBJ = temp_layer.pageItems.getByName(Sorted_temp_P) ;           
                temp_OBJ.zOrder(ZOrderMethod.SENDTOBACK);
                //
            } //
        }
        catch (e)
        {
            //alert(e);
        }
    }
//
}
//
//
function naturalCompare(a, b) {
    var ax = [], bx = [];
    a.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { ax.push([$1 || Infinity, $2 || ""]) });
    b.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { bx.push([$1 || Infinity, $2 || ""]) });

    while(ax.length && bx.length) {
        var an = ax.shift();
        var bn = bx.shift();
        var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
        if(nn) return nn;
    }
    
    return ax.length - bx.length;

}

Это исходный код как я полагаю. Если я не правильно понял, простите меня простого смертного:)
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
JavaScript:
#target "Illustrator"

var doc            = app.activeDocument;
var Top_all_layers  = doc.layers;
Arrange_Layers(doc, Top_all_layers) ;
redraw();

function Arrange_Layers(where, T_Layers_OBJ) {
    var temp_L_names = new Array();
     for ( var i = 0 ; i < T_Layers_OBJ.length ; i++ ) {
        temp_L_names.push(T_Layers_OBJ.name);
    }
    sort_layer(where, temp_L_names.sort(naturalCompare)) ;;
    for ( var i = 0 ; i < T_Layers_OBJ.length ; i++ ) {
        if ( T_Layers_OBJ.layers.length != 0 ) {
            Arrange_Layers(T_Layers_OBJ, T_Layers_OBJ.layers) ;
        }
    }
return ;
}

function sort_layer(where, Layers_Array) {
    var temp_P_names  = Array() ;
    var Sorted_temp_P = Array() ;
    for (var k=0 ; k < Layers_Array.length ; k++) {
        var temp_layer = where.layers.getByName(Layers_Array) ;//
        var status_Lock = temp_layer.locked;
        var status_Preview = temp_layer.preview;
        var status_visible = temp_layer.visible;
   
        temp_layer.locked  = false;
        temp_layer.preview  = true;
        temp_layer.visible  = true;
        temp_layer.zOrder( ZOrderMethod.SENDTOBACK );
   
        temp_layer.locked  = status_Lock;
        temp_layer.preview  = status_Preview;
        temp_layer.visible  = status_visible;
    }

    for (var k=0 ; k < Layers_Array.length ; k++) {

        var temp_layer = where.layers.getByName(Layers_Array) ;//
        var temp_items = temp_layer.pageItems ;
        for (var l=0 ; l < temp_items.length ; l++) {
     
            temp_P_names.push(temp_items.name) ;
        }

        Sorted_temp_P = temp_P_names.sort(naturalCompare) ;
        try {
            for (var l=0 ; l < Sorted_temp_P.length; l++){
                $.writeln(Sorted_temp_P,"--", temp_items) ;
                var temp_OBJ = temp_layer.pageItems.getByName(Sorted_temp_P) ;          
                temp_OBJ.zOrder(ZOrderMethod.SENDTOBACK);
                //
            } //
        }
        catch (e)
        {
            //alert(e);
        }
    }
//
}
//
//
function naturalCompare(a, b) {
    var ax = [], bx = [];
    a.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { ax.push([$1 || Infinity, $2 || ""]) });
    b.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { bx.push([$1 || Infinity, $2 || ""]) });

    while(ax.length && bx.length) {
        var an = ax.shift();
        var bn = bx.shift();
        var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
        if(nn) return nn;
    }
   
    return ax.length - bx.length;

}

Это исходный код как я полагаю. Если я не правильно понял, простите меня простого смертного:)
Мой вам совет - не забивайте себе голову этой ерундой, а хорошо подумайте над ТЗ найдите специально обученного человека, который сделает вам нормальный код.
Если же вы все таки хотите пойти длинным и непростым путем (который не гарантирует прихода в нужную точку) то для начала поправьте temp_L_names.push(T_Layers_OBJ.name); на temp_L_names.push(T_Layers_OBJ[i].name);
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 885
Реакции
3 457
Но не осуждаешь!
Конечно осуждаю!
Прям с первой строчки и осуждаю.
var Top_all_layers = doc.layers;
var — моё любимое слово, которое не означает ничего. Даже больше, оно означает, что в переменной хз что.
Т — имя переменной с заглавной? WTF?
_ — ещё и через подчёркивания? Но не в апперкейсе и это не константа.
Бррр...
Можно дальше не буду? ;)
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Ты осуждаешь форму а не содержание
1569996154242.png
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
var — моё любимое слово, которое не означает ничего. Даже больше, оно означает, что в переменной хз что.
С этим, кстати, не согласен. Хорошим тоном является объявлять все переменные внутри их зоны видимости
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 885
Реакции
3 457