Сценарий выполняется правильно в ExtendScript Toolkit, но не в Illustrator
Я написал сценарий, который выбирает несколько путей, дублирует их и применяет "Объект> Искажение конверта> Сделать с верхним объектом" к каждому дубликату нижнего пути со всеми другими путями в выделении с использованием действия (не я не верю, что в DOM есть что-то для непосредственного взаимодействия с конвертами). Итак, я начну с этого:
Он отлично работает в ExtendScript Toolkit, давая мне это:
Но если я выполню скрипт из Illustrator, я получу этот беспорядок:
Вот мой код:
var doc = app.activeDocument;
var sel = app.activeDocument.selection;
var currentLayer = app.activeDocument.activeLayer;
function envelope(){
var arr = [];
var bottomObject = sel[sel.length - 1];
bottomObject.selected = false;
for (i = 0; i < sel.length - 1; i++){
arr.push(sel[i]);
var newObjs = sel[i].duplicate();
newObjs.zOrder(ZOrderMethod.SENDBACKWARD)
}
currentLayer.hasSelectedArtwork = false;
for (i = 0; i < arr.length; i++){
var objectsToDistribute = bottomObject.duplicate();
objectsToDistribute.zOrder(ZOrderMethod.SENDTOBACK);
arr[i].selected = true;
objectsToDistribute.selected = true;
app.doScript('Envelope all', 'scriptTest');
}
}
envelope();
Вот набор действий. Так почему бы мне получать разные результаты из одного и того же сценария? Есть ли способ обойти это изнутри Illustrator?
0 ответов
Вы должны переместить линию
currentLayer.hasSelectedArtwork = false;
в петлю. Необходимо очищать выделение для каждой итерации:
...
for (i = 0; i < arr.length; i++){
currentLayer.hasSelectedArtwork = false; // <------------- here
var objectsToDistribute = bottomObject.duplicate();
objectsToDistribute.zOrder(ZOrderMethod.SENDTOBACK);
arr[i].selected = true;
objectsToDistribute.selected = true;
app.doScript('Envelope all', 'scriptTest');
}
...
И на самом деле вам не нужен набор действий. Это можно сделать через
app.executeMenuCommand('Make Envelope');
Вот моя версия сценария:
var sel = app.activeDocument.selection; // all the objects that have been selected
var lowest = sel[sel.length-1]; // the lowest object
for (var i=0; i<sel.length-1; i++) {
var top = sel[i].duplicate(); // make a copy of the next object
var btm = lowest.duplicate(); // make a copy of the lowest object
app.selection = null; // deselect all
top.selected = true; // select the top copy
btm.selected = true; // select the bottom copy
app.executeMenuCommand('Make Envelope'); // make Envenlope
}
Единственное отличие: он преобразует самый нижний объект среди выбранных.