[AI CC2022] Изменение скрипта "Find same color path and make compound path"

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Логично, но надо пробовать 'hmmm''cooll)'
 

Ant-3

Участник
Топикстартер
Сообщения
57
Реакции
2
Ну... если поизвращаться, то так:
Код:
#target Illustrator
var doc = app.activeDocument;
for (var i=0; i < doc.artboards.length; i++) {
    doc.artboards.setActiveArtboardIndex(i);
    app.executeMenuCommand("unlockAll")
    app.executeMenuCommand("selectallinartboard");
    app.executeMenuCommand("Inverse menu item");
    app.executeMenuCommand("lock");
    app.executeMenuCommand("Find Fill & Stroke menu item");
    app.executeMenuCommand('group')
}
app.executeMenuCommand("unlockAll")

Да, класс, это почти работает как нужно! Сейчас он группирует объекты только одного цвета (например объекты только с зеленым цветом, объекты других цветов оставляет без группировки ).

Может быть в этом скрипте есть часть кода, которая поможет это исправить?:
Код:
var lays=activeDocument.layers;
for(l=0;l<lays.length;l++){app.activeDocument.activeLayer=lays[l];
while (app.activeDocument.activeLayer.pathItems.length !=0) {try{
activeDocument.selection=app.activeDocument.activeLayer.pathItems[0];
app.executeMenuCommand("Find Fill & Stroke menu item");
app.executeMenuCommand('group');}catch(e){continue;}
};
}
 

_MBK_

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

Drawer

Участник
Сообщения
1 814
Реакции
799
Судя по всему это нужно:
Код:
#target Illustrator
var doc = app.activeDocument;

for (var i=0; i < doc.artboards.length; i++) {
    doc.artboards.setActiveArtboardIndex (i);
    doc.selectObjectsOnActiveArtboard ();
    atbObj = doc.selection
    redraw ();
    for (var c=0; c < atbObj.length; c++) {
        if (atbObj[c].parent.typename = "Layer" && atbObj[c].typename != "GroupItem" ) {
            atbObj[c].selected = true;
            redraw ();
            groupInArtboard ();
            doc.selection = null;
            redraw ();
        };
    };
};
app.executeMenuCommand("deselectall");

function groupInArtboard () {
    for (var i=0; i < doc.artboards.length; i++) {
        doc.artboards.setActiveArtboardIndex(i);
        app.executeMenuCommand("unlockAll");
        doc.selectObjectsOnActiveArtboard();
        app.executeMenuCommand("Inverse menu item");
        app.executeMenuCommand("lock");
        app.executeMenuCommand("Find Fill & Stroke menu item");
        app.executeMenuCommand("group");
    };
    app.executeMenuCommand("unlockAll");
};

Не по теме:
Получилось весело и задорно, но... Подозреваю, что работать в реальных условиях будет криво. Использовать или нет, дело ваше
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Как то у вас чересчур замороченно все. А может сделать проще?
Разбиваем задачу на два скрипта: Первый блокирует все обьекты, лежащие за пределами артбордов. Для этого:
1) Выделяем ваще всевсевсе обьекты и блокируем
2) В цикле по всем артбордам выделяем обьекты на текущем артборде и разблокируем.
Затем применяем один из топикстартовых скриптов на выбор
 

Drawer

Участник
Сообщения
1 814
Реакции
799
А может сделать проще?
ТС не дал достаточно исходных данных.
Например, соблюдается ли это условие
первый обьект каждого слоя покрашен в свой цвет?
и зачем вообще все это?
Потому ткнул пальцем в небо...
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
ТС не дал достаточно исходных данных.
Например, соблюдается ли это условие

и зачем вообще все это?
Потому ткнул пальцем в небо...
Ну вот потому я и предложил вариант, не зависимый от условий - просто блокировать все ненужные обьекты а потом с остальными что угодно делать.
 

Ant-3

Участник
Топикстартер
Сообщения
57
Реакции
2
Судя по всему это нужно:
Код:
#target Illustrator
var doc = app.activeDocument;

for (var i=0; i < doc.artboards.length; i++) {
    doc.artboards.setActiveArtboardIndex (i);
    doc.selectObjectsOnActiveArtboard ();
    atbObj = doc.selection
    redraw ();
    for (var c=0; c < atbObj.length; c++) {
        if (atbObj[c].parent.typename = "Layer" && atbObj[c].typename != "GroupItem" ) {
            atbObj[c].selected = true;
            redraw ();
            groupInArtboard ();
            doc.selection = null;
            redraw ();
        };
    };
};
app.executeMenuCommand("deselectall");

function groupInArtboard () {
    for (var i=0; i < doc.artboards.length; i++) {
        doc.artboards.setActiveArtboardIndex(i);
        app.executeMenuCommand("unlockAll");
        doc.selectObjectsOnActiveArtboard();
        app.executeMenuCommand("Inverse menu item");
        app.executeMenuCommand("lock");
        app.executeMenuCommand("Find Fill & Stroke menu item");
        app.executeMenuCommand("group");
    };
    app.executeMenuCommand("unlockAll");
};

Не по теме:
Получилось весело и задорно, но... Подозреваю, что работать в реальных условиях будет криво. Использовать или нет, дело ваше

Благодарю, все работает как нужно! Единственное появилась проблема - при большом количестве объектов в документе иллюстратор зависает намертво в процессе работы скрипта.
 

Ant-3

Участник
Топикстартер
Сообщения
57
Реакции
2
Как то у вас чересчур замороченно все. А может сделать проще?
Разбиваем задачу на два скрипта: Первый блокирует все обьекты, лежащие за пределами артбордов. Для этого:
1) Выделяем ваще всевсевсе обьекты и блокируем
2) В цикле по всем артбордам выделяем обьекты на текущем артборде и разблокируем.
Затем применяем один из топикстартовых скриптов на выбор
На самом деле без разницы как будет выглядеть код скрипта в итоге, лишь бы он выполнял свою функцию. Изначально я думал, что можно несколько строк добавить в скрипт, который я изначально прислал, но по итогу оказалось, что не так все просто.
 

Ant-3

Участник
Топикстартер
Сообщения
57
Реакции
2

Drawer и _MBK_ в любом случае спасибо большое за помощь. Постараюсь решить техническую проблему с зависанием иллюстратора, надеюсь в итоге последний скрипт Drawer у меня лично заработает без подобной проблемы​