[AI CC2023] Удаление слоя с определенным названием через аctions?

duh

Топикстартер
15 лет на форуме
Сообщения
1 422
Реакции
699
Возможно ли как то задать удаление слоя с определенным названием через аctions?
Если нет, то может кто сжалится и напишет скриптик с такими действиями:
1 - выделить с таким же цветом контур (предварительно выделив спот контур)
2 - инверсия
3 - удалить
4 - разлочить все слои
5 - сохранить
6 - выделить все
7 - повернуть на 90
8 - выделить слой (по названию) и удалить его
9 - сохранить как аи8
 
Последнее редактирование:

duh

Топикстартер
15 лет на форуме
Сообщения
1 422
Реакции
699
И отправить в прошлое? ;)
ну плоттер его (аи8) только и принимает... а вот новый хоть и берёт последнюю версию но епс. а вот ржущий iECHO просит dfx но на него отдельные метки.
 

Drawer

Участник
Сообщения
1 817
Реакции
799
скриптик с такими действиями
Можно так, если сильно не упираться...
JavaScript:
#target Illustrator
/* 1 - выделить с таким же цветом контур (предварительно выделив спот контур)
2 - инверсия
3 - удалить
4 - разлочить все слои
5 - сохранить
6 - выделить все
7 - повернуть на 90 */
app.doScript("название эшена который делает вышеперечисленное", "Сет в который входит этот экшн");
try {
var doc = app.activeDocument;
doc.layers.getByName("имя удаляемого слоя").remove();
} catch (e) { };
/* 9 - сохранить как аи8 */
app.doScript("название эшена который делает вышеперечисленное", "Сет в который входит этот экшн");
 

densen

15 лет на форуме
Сообщения
753
Реакции
642
Возможно ли как то задать удаление слоя с определенным названием через аctions?
Можно.
Вначале сохранить в папке скриптов скрипт выделения слоя по его имени:
JavaScript:
app.activeDocument.activeLayer = app.activeDocument.layers.getByName("Layer 2"); // название слоя исправить на нужное
Затем записать экшен по пунктам (пока без первого - DS: Select layer)
delete_layer.png
A потом первым пунктом в экшен добавить Menu Item: File - Scripts - скрипт выделения слоя по имени.
 

Drawer

Участник
Сообщения
1 817
Реакции
799
A потом первым пунктом в экшен добавить Menu Item: File - Scripts - скрипт выделения слоя по имени.
А потом перегрузи иллюстратор и не трогая пункт Menu выполни свой экшн '))'
 
  • Спасибо
Реакции: densen и _MBK_

duh

Топикстартер
15 лет на форуме
Сообщения
1 422
Реакции
699
Можно так, если сильно не упираться...
Спасибо прикольно, но как по мне, то запустить скрипт, что бы тот отсылался на экшн или запустить экшн, что бы тот отсылался на скрипт для моего понимания "маленько диковато". Жаль что со скриптами как то у меня не срослось от слова "совсем"... фиг с ним, буду просто удалять слой ручками перед сохранением раз без скрипта слой не удалить.
Всем спс расходимся.
ПС: или можна всё в одном скрипте сделать, учитывая что до запуска нужно выделить нужный контур с пантоном?
 
Последнее редактирование:

Drawer

Участник
Сообщения
1 817
Реакции
799
запустить скрипт, что бы тот отсылался на экшн
"маленько диковато"
Да не, нормально :) Экшн можно и внутрь скрипта прописать. В общем и целом поворот на 90 реализовать скриптом сложнее, в некоторых случаях даже невозможно. В любом случае экшн придется делать.
 
  • Спасибо
Реакции: Chiga

Gad

Сообщения
2 975
Реакции
1 408
всё в одном скрипте сделать
JavaScript:
#target Illustrator
var rln = "Layer name"
var targetVersion = 8;

var doc = app.activeDocument;
if (doc.selection != "") {
    //beginning Action Set==========================================
var ActionString = [ '/version 3',
'/name [ 9',
'    536372697074536574',
']',
'/isOpen 1',
'/actionCount 1',
'/action-1 {',
'    /name [ 2',
'        3930',
'    ]',
'    /keyIndex 0',
'    /colorIndex 0',
'    /isOpen 0',
'    /eventCount 1',
'    /event-1 {',
'        /useRulersIn1stQuadrant 0',
'        /internalName (adobe_rotate)',
'        /localizedName [ 6',
'            526f74617465',
'        ]',
'        /isOpen 0',
'        /isOn 1',
'        /hasDialog 1',
'        /showDialog 0',
'        /parameterCount 2',
'        /parameter-1 {',
'            /key 1634625388',
'            /showInPalette -1',
'            /type (unit real)',
'            /value 90.0',
'            /unit 591490663',
'        }',
'        /parameter-2 {',
'            /key 1668247673',
'            /showInPalette -1',
'            /type (boolean)',
'            /value 0',
'        }',
'    }',
'}'].join('\n');
//end Action Set================================================
var f = new File('~/ScriptSet.aia');
f.open('w');
f.write(ActionString);
f.close();
loadAction (f);
f.remove();
ActionString = null;
    
    // 1 - выделить с таким же цветом контур (предварительно выделив спот контур)
    app.executeMenuCommand ("Find Stroke Color menu item");
    //2 - инверсия
    redraw();
    app.executeMenuCommand ("Inverse menu item");
    //3 - удалить
    redraw();
    app.executeMenuCommand ("clear");
    //4 - разлочить все слои
    for (var i = 0; i < doc.layers.length; i++) {
        doc.layers[i].locked = false;
        redraw();
    }
    //5 - сохранить
    app.executeMenuCommand ("save");
    //6 - выделить все
    app.executeMenuCommand ("selectall");
    //7 - повернуть на 90 */
    app.doScript("90", "ScriptSet");
    unloadAction("ScriptSet", "");
    //8 - выделить слой (по названию) и удалить его
    redraw();
    doc.layers.getByName(rln).remove();
    //9 - сохранить как аи8
    var docFolder = doc.fullName.path;
    var newName = doc.name.substring(0, doc.name.lastIndexOf('.'))+"_AI8.ai";
    var aiDoc = new File(docFolder+"//"+newName);
    SaveAI (aiDoc, targetVersion)
} else {
    alert ("No selected objects")
};

function SaveAI (dest, Version) {
    if ( app.documents.length > 0 ) {
        var saveOptions = new IllustratorSaveOptions();
        saveOptions.compatibility = Compatibility[ "ILLUSTRATOR" + Version ];
        app.activeDocument.saveAs(dest, saveOptions );
    };
};
 
  • Спасибо
Реакции: duh