Привет уважаемые эксперты.
Интересен следующий вопрос:
Есть 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;
}
Интересен следующий вопрос:
Есть 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;
}