Привет, я пытаюсь написать скрипт для поиска и объединения слоев и групп по сопоставлению порядковых номеров, затем объединяю группы и задаю имя группы.
игрался с chatgpt, но так как в javascript я мало разбираюсь, ничего не работает =((
данный:
слои и группы с именами:
"step_n_n"
"mask_n_n"
"back_n_n"
п = порядковый номер
задача:
сгруппировать слои и группы с одинаковыми порядковыми номерами и назвать группы "[slot] step-n-n"
вот какой код получился... но чую что то в нем не так))
// Создаем функцию для сравнения порядковых номеров
function compareNumbers(a, b) {
// Извлекаем порядковые номера из имен слоев
var aNum = parseInt(a.name.match(/_(\d+)_(\d+)/)[2]);
var bNum = parseInt(b.name.match(/_(\d+)_(\d+)/)[2]);
// Сравниваем номера и возвращаем результат
return aNum - bNum;
}
// Создаем массив из всех слоев в документе
var doc = app.activeDocument;
var layers = doc.layers;
// Фильтруем слои по заданным шаблонам и создаем новые массивы
var steplayers = layers.filter(function(layer) {
});
var steplayers = layers.filter(function(layer) {
return layer.name.match(/^step_\d+_\d+$/);
});
var masklayers = layers.filter(function(layer) {
return layer.name.match(/^mask_\d+_\d+$/);
});
var backlayers = layers.filter(function(layer) {
return layer.name.match(/^back_\d+_\d+$/);
});
// Сортируем массивы по порядковым номерам
steplayers.sort(compareNumbers);
masklayers.sort(compareNumbers);
backlayers.sort(compareNumbers);
// Создаем группы для слоев
var stepGroup = doc.layerSets.add();
stepGroup.name = "[slot] step-" + stepLayers[0].name.match(/-(\d+)-(\d+)/)[1];
// Перемещаем слои в соответствующие группы
for (var i = 0; i < steplayers.length; i++) {
steplayers[i].move(stepGroup, ElementPlacement.PLACEATEND);
}
for (var i = 0; i < masklayers.length; i++) {
masklayers[i].move(stepGroup, ElementPlacement.PLACEATEND);
}
for (var i = 0; i < backlayers.length; i++) {
backlayers[i].move(stepGroup, ElementPlacement.PLACEATEND);
}