Ну... если поизвращаться, то так:
Код:#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;}
};
}
#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");
};
ТС не дал достаточно исходных данных.А может сделать проще?
и зачем вообще все это?первый обьект каждого слоя покрашен в свой цвет?
Ну вот потому я и предложил вариант, не зависимый от условий - просто блокировать все ненужные обьекты а потом с остальными что угодно делать.ТС не дал достаточно исходных данных.
Например, соблюдается ли это условие
и зачем вообще все это?
Потому ткнул пальцем в небо...
Судя по всему это нужно:
Код:#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"); };
Не по теме:
Получилось весело и задорно, но... Подозреваю, что работать в реальных условиях будет криво. Использовать или нет, дело ваше
На самом деле без разницы как будет выглядеть код скрипта в итоге, лишь бы он выполнял свою функцию. Изначально я думал, что можно несколько строк добавить в скрипт, который я изначально прислал, но по итогу оказалось, что не так все просто.Как то у вас чересчур замороченно все. А может сделать проще?
Разбиваем задачу на два скрипта: Первый блокирует все обьекты, лежащие за пределами артбордов. Для этого:
1) Выделяем ваще всевсевсе обьекты и блокируем
2) В цикле по всем артбордам выделяем обьекты на текущем артборде и разблокируем.
Затем применяем один из топикстартовых скриптов на выбор