Соединить объекты

Статус
Закрыто для дальнейших ответов.

rezipativ

Участник
Топикстартер
Сообщения
2
Реакции
0
Здравствуйте!

Подскажите как в скрипте из выделенных объектов сделать один

Спасибо!
 

dumbm1

10 лет на форуме
Сообщения
421
Реакции
196
  1. Эта операция (Unite) доступна только из палитры Pathfinder.
  2. В "ADOBE ILLUSTRATOR CC 2014 SCRIPTING REFERENCE: JAVASCRIPT" ничего подобного нет.
  3. Через команды меню этого тоже не сделать, значит для executeMenuCommand () команду не достать.
Но по моему операцию Unite можно записать в экшн и подгружать этот экшн в скрипт.
 
Последнее редактирование:

dumbm1

10 лет на форуме
Сообщения
421
Реакции
196
@rezipativ, кажется, единственный приемлемый вариант такой:
  1. предварительно записываете Action с операцией Unite (в палитре Action это будет Pathfinder > Add)
  2. а в скрипте должно быть:
    Код:
    doScript ( actionName, setName, dialogs /*Boolean*/ )
Но! Если дальше в скрипте идут какие-то ещё операции, то, по моему, они будут выполняться параллельно с выполнением акшна. В общем, могут быть глюки.

Есть ещё методы loadAction ( actionFile ) и unloadAction ( setName, actionName ) но они какие-то недоделанные..
 
Последнее редактирование:

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
  1. Эта операция (Unite) доступна только из палитры Pathfinder.

  2. Через команды меню этого тоже не сделать, значит для executeMenuCommand () команду не достать.
разве? а вот так не оно?

app.executeMenuCommand ('Live Pathfinder Add');

Но! Если дальше в скрипте идут какие-то ещё операции, то, по моему, они будут выполняться параллельно с выполнением акшна. В общем, могут быть глюки.

не сталкивался с таким, синхронно все обрабатывается вроде

Есть ещё методы loadAction ( actionFile ) и unloadAction ( setName, actionName ) но они какие-то недоделанные..

тоже работают, и неплохо ) можно action создавать на лету с параметрами таким образом

Код:
function offset_item_via_action(offset){ 
    var ActionString = [ 
'/version 3', 
'/name [ 16', 
  '53637269707465645f416374696f6e73', 
']', 
'/isOpen 1', 
'/actionCount 1', 
'/action-1 {', 
  '/name [ 13', 
  '4f66667365745f416374696f6e', 
  ']', 
' /keyIndex 0', 
  '/colorIndex 0', 
' /isOpen 1', 
  '/eventCount 1', 
' /event-1 {', 
  '/useRulersIn1stQuadrant 0', 
' /internalName (ai_plugin_offset)', 
  '/localizedName [ 11', 
  '4f66667365742050617468', 
  ']', 
' /isOpen 1', 
  '/isOn 1', 
' /hasDialog 1', 
  '/showDialog 0', 
' /parameterCount 3', 
  '/parameter-1 {', 
  '/key 1868985204', 
' /showInPalette -1', 
  '/type (unit real)', 
' /value ' + offset + '', 
  '/unit 592476268', 
  '}', 
' /parameter-2 {', 
  '/key 1835627634', 
' /showInPalette -1', 
  '/type (real)', 
' /value 4.0', 
  '}', 
' /parameter-3 {', 
  '/key 1785623664', 
' /showInPalette -1', 
  '/type (enumerated)', 
' /name [ 5', 
  '4d69746572', 
  ']', 
  '/value 2', 
  '}', 
  '}', 
'}' 
    ].join('\n'); 
    createAction(ActionString);   
    var ActionString = null; 
    app.doScript("Offset_Action", "Scripted_Actions", false); 
    app.unloadAction("Scripted_Actions",""); 
 
 
   
} 



function createAction (str) {   
        var f = new File('~/ScriptAction.aia');   
        f.open('w');   
        f.write(str);   
        f.close();   
        app.loadAction(f);   
        f.remove();   
    }
 
Последнее редактирование:
  • Спасибо
Реакции: dumbm1

dumbm1

10 лет на форуме
Сообщения
421
Реакции
196
Последнее редактирование:

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
от
  1. предварительно записываете Action с операцией Unite (в палитре Action это будет Pathfinder > Add)
точно не отличается. выделенные контуры объединяет опять же

имя экшена и сета после /name, по-моему - я если честно это с адобовского форума брал, а не сам сочинял. но проверить легко - записать экшен, а потом его открыть в текстовом редакторе
 
  • Спасибо
Реакции: dumbm1

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
да, не совсем то делает

а compound path не пойдет?
 

dumbm1

10 лет на форуме
Сообщения
421
Реакции
196
@Skvoznyak, compound path - это Exclude.
Самый лучший вариант - это создание экшна (с операцией Unite) в скрипте, по типу, как Вы показали выше.

UPD: а где найти метод расшифровки этих вот штук в экшнах - '53637269707465645f416374696f6e73' ?
 
Последнее редактирование:

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
ну это несложно )

вот сет AAA
с экшеном BBBCCC

/version 3
/name [ 3
414141
]
/isOpen 1
/actionCount 1
/action-1 {
/name [ 6
424242434343
]
/keyIndex 0
/colorIndex 0
/isOpen 1
/eventCount 0
}

обычные ASCII коды
 
  • Спасибо
Реакции: dumbm1

dumbm1

10 лет на форуме
Сообщения
421
Реакции
196
не сталкивался с таким, синхронно все обрабатывается вроде
при последовательной обработке большого количества артбордов если акшн сложный, то глючит (проверял на макете из 100 артбордов), работает только с redraw() после каждой итерации;
Код:
loadAct (make_align_center_act_str ());

executeMenuCommand ('deselectall');

for (var i = 0; i < activeDocument.artboards.length; i++) {

  activeDocument.artboards.setActiveArtboardIndex (i);
  app.executeMenuCommand ('selectallinartboard');
  doScript ('align_center_in_artb', 'align_center_in_artb');
  executeMenuCommand ('deselectall');
}

unloadAction ('align_center_in_artb', '');

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

function make_align_center_act_str () {
  return [
    '/version 3',
    '/name [ 20',
    '616c69676e5f63656e7465725f696e5f61727462',
    ']',
    '/isOpen 1',
    '/actionCount 1',
    '/action-1 {',
    '/name [ 20',
    '616c69676e5f63656e7465725f696e5f61727462',
    ']',
    '/keyIndex 58',
    '/colorIndex 2',
    '/isOpen 0',
    '/eventCount 2',
    '/event-1 {',
    '/useRulersIn1stQuadrant 0',
    '/internalName (ai_plugin_alignPalette)',
    '/localizedName [ 9',
    '416c69676e6d656e74',
    ']',
    '/isOpen 0',
    '/isOn 1',
    '/hasDialog 0',
    '/parameterCount 1',
    '/parameter-1 {',
    '/key 1954115685',
    '/showInPalette -1',
    '/type (enumerated)',
    '/name [ 23',
    '486f72697a6f6e74616c20416c69676e2043656e746572',
    ']',
    '/value 2',
    '}',
    '}',
    '/event-2 {',
    '/useRulersIn1stQuadrant 0',
    '/internalName (ai_plugin_alignPalette)',
    '/localizedName [ 9',
    '416c69676e6d656e74',
    ']',
    '/isOpen 0',
    '/isOn 1',
    '/hasDialog 0',
    '/parameterCount 1',
    '/parameter-1 {',
    '/key 1954115685',
    '/showInPalette -1',
    '/type (enumerated)',
    '/name [ 21',
    '566572746963616c20416c69676e2043656e746572',
    ']',
    '/value 5',
    '}',
    '}',
    '}'
  ].join('\n');
}
а вот если разделить акшн на два простых, то все ОК
Код:
var align_hor_str = align_hor_act (),
    align_ver_str = align_ver_act (),
    i;

loadAct (align_hor_str);
loadAct (align_ver_str);

executeMenuCommand ('deselectall');

for (i = 0; i < activeDocument.artboards.length; i++) {
  activeDocument.artboards.setActiveArtboardIndex (i);
  app.executeMenuCommand ('selectallinartboard');
  doScript ('align_horizontal', 'align_horizontal');
  executeMenuCommand ('deselectall');
}

for (i = 0; i < activeDocument.artboards.length; i++) {
  activeDocument.artboards.setActiveArtboardIndex (i);
  app.executeMenuCommand ('selectallinartboard');
  doScript ('align_vertical', 'align_vertical');
  executeMenuCommand ('deselectall');
}

unloadAction ('align_horizontal', '');
unloadAction ('align_vertical', '');

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

function align_hor_act () {
  return [
    '/version 3',
    '/name [ 16',
    '    616c69676e5f686f72697a6f6e74616c',
    ']',
    '/isOpen 0',
    '/actionCount 1',
    '/action-1 {',
    '    /name [ 16',
    '        616c69676e5f686f72697a6f6e74616c',
    '    ]',
    '    /keyIndex 0',
    '    /colorIndex 0',
    '    /isOpen 1',
    '    /eventCount 1',
    '    /event-1 {',
    '        /useRulersIn1stQuadrant 0',
    '        /internalName (ai_plugin_alignPalette)',
    '        /localizedName [ 9',
    '            416c69676e6d656e74',
    '        ]',
    '        /isOpen 0',
    '        /isOn 1',
    '        /hasDialog 0',
    '        /parameterCount 1',
    '        /parameter-1 {',
    '            /key 1954115685',
    '            /showInPalette -1',
    '            /type (enumerated)',
    '            /name [ 23',
    '                486f72697a6f6e74616c20416c69676e2043656e746572',
    '            ]',
    '            /value 2',
    '        }',
    '    }',
    '}'
  ].join('\n');
}
function align_ver_act () {
  return [
    '/version 3',
    '/name [ 14',
    '    616c69676e5f766572746963616c',
    ']',
    '/isOpen 1',
    '/actionCount 1',
    '/action-1 {',
    '    /name [ 14',
    '        616c69676e5f766572746963616c',
    '    ]',
    '    /keyIndex 0',
    '    /colorIndex 0',
    '    /isOpen 1',
    '    /eventCount 1',
    '    /event-1 {',
    '        /useRulersIn1stQuadrant 0',
    '        /internalName (ai_plugin_alignPalette)',
    '        /localizedName [ 9',
    '            416c69676e6d656e74',
    '        ]',
    '        /isOpen 1',
    '        /isOn 1',
    '        /hasDialog 0',
    '        /parameterCount 1',
    '        /parameter-1 {',
    '            /key 1954115685',
    '            /showInPalette -1',
    '            /type (enumerated)',
    '            /name [ 21',
    '                566572746963616c20416c69676e2043656e746572',
    '            ]',
    '            /value 5',
    '        }',
    '    }',
    '}'
  ].join('\n');
}
 
Последнее редактирование:

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
redraw никогда не вредно воткнуть! он работает как точка возврата для undo, иначе undo отменяет действие всего скрипта целиком - а через redraw можно сделать несколько шагов
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
интересно, насколько я понимаю он там через bridgeTalk идет?

немного не в тему - какой странный метод обнаружил
Application.getHelloJSONData (): string
Adobe Illustrator 19 Type Library
Returns the JSON Data required by Hello.
 
  • Спасибо
Реакции: dumbm1

Oleg_Sh

15 лет на форуме
Сообщения
179
Реакции
50
Вот так должно сработать:
Код:
app.ExecuteMenuCommand("group")
app.ExecuteMenuCommand("Live Pathfinder Add")
app.ExecuteMenuCommand("expandStyle")
это на vb. Для js синтаксис надо подправить
 
  • Спасибо
Реакции: dumbm1

dumbm1

10 лет на форуме
Сообщения
421
Реакции
196
да, работает, спасибо! 'thank'
Код:
executeMenuCommand("group");
executeMenuCommand("Live Pathfinder Add");
executeMenuCommand("expandStyle");
 
Статус
Закрыто для дальнейших ответов.