[AI CC-CC2021] Offset Path с параметрами - новое решение с XML

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

Участник
Топикстартер
Сообщения
277
Реакции
23
Всем привет, только что нашёл новое для себя решение для применения offset path с параметрами через XML.

Как мне известно, до этого было 2 решения - через вызов action и через применение и дальнейшую разбивку обводки.

ссылка на источник:
Illustrator Scripting

один пример там содержит ошибку - Live Offset Path, должно быть "Adobe Offset Path"

рабочий пример применения для всех выделенных объектов:

PHP:
var aDoc = app.activeDocument; 
var mSel = aDoc.selection; 

var offsetvalue = '-0.35'; //   1 = 0,3528 mm, допускается знак "-"
var jointype ='Round';
var miterlimitvalue = '4';
//                                                         Live заменить на Adobe, иначе выдаст эффект "Feather"
//xmlstring = '<LiveEffect name="Live Offset Path"><Dict data="R mlim '+miterlimitvalue + ' R ofst ' + offsetvalue + ' I jntp ' + jointype + '"/></LiveEffect>';
xmlstring = '<LiveEffect name="Adobe Offset Path"><Dict data="R mlim '+miterlimitvalue + ' R ofst ' + offsetvalue + ' I jntp ' + jointype + '"/></LiveEffect>';

for (i = 0; i < mSel.length; i++)
{
mSel[i].applyEffect(xmlstring);
}
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Можно и проще сделать - через вызов MenuItem. Там, правда, идентификатор менюитема совсем неочевидный
 
  • Спасибо
Реакции: NatalieRedFox_333

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

Участник
Топикстартер
Сообщения
277
Реакции
23
Можно и проще сделать - через вызов MenuItem. Там, правда, идентификатор менюитема совсем неочевидный
MenuItem - это executeMenuCommand или что-то другое? если другое, где почитать?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Да
 
  • Спасибо
Реакции: NatalieRedFox_333

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
А, извиняюсь, неточно выразился. Имел в виду разбивку обводки через вызов менюитема
 
  • Спасибо
Реакции: NatalieRedFox_333

romaya

10 лет на форуме
Сообщения
317
Реакции
40
А что собственно рабочий вариант скрипта делает, кроме применения эффекта Offset Path?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
  • Спасибо
Реакции: NatalieRedFox_333

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Сообщения
2 089
Реакции
145
Всем привет, только что нашёл новое для себя решение для применения offset path с параметрами через XML.

Как мне известно, до этого было 2 решения - через вызов action и через применение и дальнейшую разбивку обводки.

ссылка на источник:
Illustrator Scripting

один пример там содержит ошибку - Live Offset Path, должно быть "Adobe Offset Path"

рабочий пример применения для всех выделенных объектов:

PHP:
var aDoc = app.activeDocument;
var mSel = aDoc.selection;

var offsetvalue = '-0.35'; //   1 = 0,3528 mm, допускается знак "-"
var jointype ='Round';
var miterlimitvalue = '4';
//                                                         Live заменить на Adobe, иначе выдаст эффект "Feather"
//xmlstring = '<LiveEffect name="Live Offset Path"><Dict data="R mlim '+miterlimitvalue + ' R ofst ' + offsetvalue + ' I jntp ' + jointype + '"/></LiveEffect>';
xmlstring = '<LiveEffect name="Adobe Offset Path"><Dict data="R mlim '+miterlimitvalue + ' R ofst ' + offsetvalue + ' I jntp ' + jointype + '"/></LiveEffect>';

for (i = 0; i < mSel.length; i++)
{
mSel[i].applyEffect(xmlstring);
}
а как тут углы сделать прямые....? У меня никак не получается.... третий день уже бьюсь над этой проблемой 'otbline'
 
Последнее редактирование:

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Сообщения
2 089
Реакции
145
так пробовала.... все равно круглые ))))
Код:
var offsetvalue = '5'; //   1 = 0,3528 mm, допускается знак "-"
var jointype ='Miter'; // Miter, Round, Bevel
var miterlimitvalue = '4';
//Live заменить на Adobe, иначе выдаст эффект "Feather"
//xmlstring = '<LiveEffect name="Live Offset Path"><Dict data="R mlim '+miterlimitvalue + ' R ofst ' + offsetvalue + ' I jntp ' + jointype + '"/></LiveEffect>';
xmlstring = '<LiveEffect name="Adobe Offset Path"><Dict data="R mlim '+miterlimitvalue + ' R ofst ' + offsetvalue + ' I jntp ' + jointype + '"/></LiveEffect>';

for (i = 0; i < mSel.length; i++)
{
mSel[i].applyEffect(xmlstring);
}
 

Вложения

  • Untitled.jpg
    Untitled.jpg
    57.9 КБ · Просм.: 189

lev

Модератор
20 лет на форуме
Сообщения
2 142
Реакции
2 066
var jointype = 2;//0 = Round, 1 = Bevel, >=2 = Miter
 
Последнее редактирование:
  • Спасибо
Реакции: _MBK_ и NatalieRedFox_333

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Гм выходит в исходном коде ошибка? А как тогда работало с Round? Или она любое нераспознанное значение как 0 интерпретирует? И вообще откуда у тебя инфа?
 
  • Спасибо
Реакции: NatalieRedFox_333

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Сообщения
2 089
Реакции
145
да да . почему там Round стоит?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
  • Спасибо
Реакции: NatalieRedFox_333