[AI CC-CC2022] Скрипт удаления мусора

KNB

Участник
Топикстартер
Сообщения
2
Реакции
0
Мучал нейросетку, получилось 2 скрипта, один удаляет все, другой ничего.
Своих познаний не хватает в исправлении недочета. Задача удалить все кроме объектов с черной обводкой.
// Функция для получения всех объектов с чёрной обводкой
function getBlackStrokeObjects(doc) {
var blackStrokeObjects = [];

for (var i = 0; i < doc.layers.length; i++) {
var layer = doc.layers;

for (var j = 0; j < layer.pageItems.length; j++) {
var item = layer.pageItems[j];
if (item.stroked && item.strokeColor == new CMYKColor(0, 0, 0, 100)) {
blackStrokeObjects.push(item);
}
}
}

return blackStrokeObjects;
}

// Функция инвертирования выделения
function invertSelection(selection, doc) {
// Получаем массив всех объектов
var allItems = [];
for (var i = 0; i < doc.layers.length; i++) {
var layer = doc.layers;
for (var j = 0; j < layer.pageItems.length; j++) {
allItems.push(layer.pageItems[j]);
}
}

// Создаём массив для инвертированного выделения
var invertedSelection = [];

// Проходимся по каждому объекту в массиве всех объектов
for (var k = 0; k < allItems.length; k++) {
// Если объект находится в текущем выделении
if (!containsObject(selection, allItems[k])) {
invertedSelection.push(allItems[k]);
} else {
// Иначе добавляем его к выделению
allItems[k].selected = true;
}
}

return invertedSelection;
}

// Функция проверки наличия объекта в массиве
function containsObject(arr, obj) {
for (var i = 0; i < arr.length; i++) {
if (arr === obj) {
return true;
}
}
return false;
}

// Функция удаления выбранных объектов
function removeSelectedObjects(selection) {
for (var i = 0; i < selection.length; i++) {
selection.remove();
}
}

// Основная функция
function main() {
// Получаем выделение
var selection = activeDocument.selection;

// Инвертируем выделение, чтобы выбрать только объекты с чёрной обводкой
selection = invertSelection(selection, activeDocument);

// Удаляем все выбранные объекты кроме тех, что имеют чёрную обводку
removeSelectedObjects(selection);
}
main();



// Функция для получения всех объектов с чёрной обводкой
function getBlackStrokeObjects(doc) {
var blackStrokeObjects = [];

for (var i = 0; i < doc.layers.length; i++) {
var layer = doc.layers;

for (var j = 0; j < layer.pageItems.length; j++) {
var item = layer.pageItems[j];
if (item.stroked && item.strokeColor == new CMYKColor(0, 0, 0, 100)) {
blackStrokeObjects.push(item);
}
}
}

return blackStrokeObjects;
}

// Функция инвертирования выделения
function invertSelection(selection, doc) {
// Получаем массив всех объектов
var allItems = [];
for (var i = 0; i < doc.layers.length; i++) {
var layer = doc.layers;
for (var j = 0; j < layer.pageItems.length; j++) {
allItems.push(layer.pageItems[j]);
}
}

// Создаём массив для инвертированного выделения
var invertedSelection = [];

// Проходимся по каждому объекту в массиве всех объектов
for (var k = 0; k < allItems.length; k++) {
// Если объект находится в текущем выделении
if (containsObject(selection, allItems[k])) {
invertedSelection.push(allItems[k]);
} else {
// Иначе добавляем его к выделению
allItems[k].selected = true;
}
}

return invertedSelection;
}

// Функция проверки наличия объекта в массиве
function containsObject(arr, obj) {
for (var i = 0; i < arr.length; i++) {
if (arr === obj) {
return true;
}
}
return false;
}

// Функция удаления выбранных объектов
function removeSelectedObjects(selection) {
for (var i = 0; i < selection.length; i++) {
selection.remove();
}
}

// Основная функция
function main() {
// Получаем выделение
var selection = activeDocument.selection;

// Инвертируем выделение, чтобы выбрать только объекты с чёрной обводкой
selection = invertSelection(selection, activeDocument);

// Удаляем все выбранные объекты кроме тех, что имеют чёрную обводку
removeSelectedObjects(selection);
}
main();

 
Ожидаемо, негросеть родила полную дичь. Во первых, скрипт по нескольку раз делает, по сути, одно и то же - перебирает обьекты. Во вторых, для корректного удаления обьектов цикл должен идти (по понятным причинам) в обратном порядке. В третьих, достаточно просто найти один обьект с черной обводкой, выделить схожие одной командой, так же одной командой инвертировать выделение и одной командой удалить выделенные...
 
Экшн записать...
 
  • Спасибо
Реакции: _MBK_
Скрипт нужен для esko, постепенно ухожу от ручного труда и однотипных действий.