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

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
24
Всем привет, написал скрипт, который создаёт обводку в цвет заливки, делает скругления и прочее. Это треппинг.
Если запускать скрипт через панель ScriptBay, всё работает как надо, если закидывать его из папки в окно иллюстратора, выделение сбрасывается и не у всех выделенных объектов задаются нужные параметры, например скругление обводки. Пробовал в двух версиях илла, результат один. Как вариант думаю сохранять выделенные объекты в массиве и в конце ещё раз выделять объекты и проходится по второму кругу.
JavaScript:
//   Stroke as Fill
//   make stroke the same color as fill and make it inside with overprint and rounded cap and join
//   by S. Hoffman  03 2021

var doc = app.activeDocument;

var sel = doc.selection;

var mmp = 2.8346457481;


for ( i = 0; i < sel.length; i++ )
{
sel[ i ].stroked = true;
sel[ i ].strokeWidth = 0.3 * mmp;
sel[ i ].strokeColor = sel[ i ].fillColor;
sel[ i ].strokeOverprint = true;

sel[ i ].strokeCap = StrokeCap.ROUNDENDCAP;  //ROUNDENDCAP, PROJECTINGENDCAP,
sel[ i ].strokeJoin = StrokeJoin.ROUNDENDJOIN;  //BEVELENDJOIN, MITERENDJOIN

/////////////////////////////////
_addSwatchSel()

function _addSwatchSel()  {   //   align stroke to inside via action
    
var ActionString = [
'/version 3',
'/name [ 3',
'    536574',
']',
'/isOpen 1',
'/actionCount 1',
'/action-1 {',
'    /name [ 3',
'        333333',
'    ]',
'    /keyIndex 0',
'    /colorIndex 0',
'    /isOpen 1',
'    /eventCount 1',
'    /event-1 {',
'        /useRulersIn1stQuadrant 0',
'        /internalName (ai_plugin_setStroke)',
'        /localizedName [ 10',
'            536574205374726f6b65',
'        ]',
'        /isOpen 0',
'        /isOn 1',
'        /hasDialog 0',
'        /parameterCount 1',
'        /parameter-1 {',
'            /key 1634494318',
'            /showInPalette -1',
'            /type (enumerated)',
'            /name [ 6',
'                496e73696465',
'            ]',
'            /value 1',
'        }',
'    }',
'}'

    ].join('\n');
    createAction(ActionString);   
    var ActionString = null;
    app.doScript("333", "Set", false);
    app.unloadAction("Set","");
 }

function createAction (str) {   
        var f = new File('~/temp.aia');   
        f.open('w');   
        f.write(str);   
        f.close();   
        app.loadAction(f);   
        f.remove();   
    }

function readFile (_file) {   
       _file.open('r');
        var _arrStr=_file.read();   
        _file.close();   
        return _arrStr
    }


}  //   END for ( i = 0; i < sel.length; i++ )


//   с певрого раза не круглит для нескольких объектов обводки, приходится пускать второй круг
for ( i = 0; i < sel.length; i++ )
{
sel[ i ].strokeCap = StrokeCap.ROUNDENDCAP;  //ROUNDENDCAP, PROJECTINGENDCAP,
sel[ i ].strokeJoin = StrokeJoin.ROUNDENDJOIN;  //BEVELENDJOIN, MITERENDJOIN
}
 
Это известная багофича, вон, quaritexa даже петицию накатал дабы починили
Сохраняйте объекты в массиве, разумеется, это прямой способ
 
Строго говоря, (и я уже говорил об этом) кошерный путь аккуратного кодера - не надеяться на предыдущие выделения при запуске экшна, а каждый раз специально готовить их самому. Вы ж при вызове функций каждый раз передаете им локальные параметры, а не используете для их сквозной передачи глобальные переменные? Так и тут - создавайте выделение специально перед запуском экшна или выделяйте сразу в экшне, скажем, по Note
 
А в каких ? В CS6 работает, выше версий имитировать "багофичу" нет. единственное выяснил, что можно так делать как ЛКМ так и ПКМ :)
попробуйте штуки три объектов выделить, у одного обводка должна остаться не скруглённой и слететь выделение до одного объекта.
 
а можно обосновать такой ответ....? 'hz' у меня например запустить скрипт уходит 0,25 сек )
это особенность при программировании - скрипты постоянно допиливаются и сохраняются новые версии, чтобы всегда можно было вернуться к предыдущему варианту. Работать таким образом в илловской папке со скриптами не получится, там будет свалка из трёх сотен скриптов. Зайти в папку и перекинуть из неё скрипт в илл - простое и удобное решение, потом можно финальную версию закинуть в менеджер скриптов типа ScriptBay.
 
Я все скрипты редактирую в Atom...., и все версии, копии, дупликаты лежат тоже там и все по полочкам..)))) Потом закидываю рабочий в Ai и никаких проблем.... никаких ScriptBay не надо ))) ;)
 
Зайти в папку и перекинуть из неё скрипт в илл - простое и удобное решение, потом можно финальную версию закинуть в менеджер скриптов типа ScriptBay.
Ну так вам сам б-г велел допиливать скрипты до аккуратного самодостаточного кода, которому все равно, откуда и в каком порядке запускаться. А не надеяться как quaritexa на добрых дядей в чалмах, которые даже если и соизволят починить багофичу, то это все равно будет малополезно, ибо, в целях совместимости придется учитывать, что она какбэ и не починена
 
Я все скрипты редактирую в Atom...., и все версии, копии, дупликаты лежат тоже там и все по полочкам..) Потом закидываю рабочий в Ai и никаких проблем.... никаких ScriptBay не надо ) ;)
пользуюсь Atom иногда с фотошоп, когда ExtendScript Toolkit не работает, там минус в том, что нет кнопки остановки скрипта, очень бывает нужно, когда скрипт зависает.
 
Вроде же поддерживает не одну папку? :) можно сделать тестовую для отладки и рабочую для готовых скриптов:)
так и делаю - все финальные скрипты кидаю в отдельную папку, но работая в двух версиях илла мне удобнее кидать скрипт из папки для новой версии, т.к. там у меня нет менеджера скриптов.