compound Path

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

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 032
Реакции
1 198
Реально ли скриптом сделать compound Path с дыркой? Типа, буквы "О".
Руками делается так:
рисуем один круг, потом другой по центру меньше радиусом, потом выделям всё -> Make compound Path. Красим всё это в любой цвет, вот и "О".
Скриптом так хочу.
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 032
Реакции
1 198
Ответ: compound Path

Никто никогда не озадачивался что ли? Или это настолько естественно нереализуемо, что и подсказать не охота?
 

AirGraph

Участник
Сообщения
244
Реакции
21
Ответ: compound Path

CS2, Illustrator JavaScript Ref.pdf, стр. 93. - пример создания объекта CompoundPathItem. Постить сюда код смысла нет, там все очевидно.

AirGraph.
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 032
Реакции
1 198
Ответ: compound Path

AirGraph, я читал это и в CS3 доках. Но либо что-то не догоняю, либо либо.
вот код:
Код:
mm = 2.834645;
lsd = activeDocument;
regColor = new CMYKColor();	
regColor.cyan = 0;
regColor.magenta = 0;
regColor.yellow = 0;
regColor.black = 100;

newCompoundPath = lsd.compoundPathItems.add();
newPath = newCompoundPath.pathItems.add();
newPath.setEntirePath(Array( Array(-40*mm, -40*mm), Array(-40*mm, lsd.height+40*mm), Array(lsd.width+40*mm, lsd.height+40*mm), Array(lsd.width+40*mm, -40*mm) ));
newPath.closed = true;
newPath = newCompoundPath.pathItems.add();
newPath.setEntirePath(Array( Array(0, 0), Array(0, lsd.height), Array(lsd.width, lsd.height), Array(lsd.width, 0) ));
newPath.closed = true;
newPath.filled = false;
newPath.stroked = true;
newPath.strokeColor = regColor;
newPath.strokeWidth = 1*mm;

Если я руками создаю объект, как написал в начале темы, то при его покраске он с дыркой. Если же таким макаром как в коде, то при покраске объект без дырки =(. То есть, compound Path создаётся, но без вычитания объекта из объекта. =(
 

similideus

12 лет на форуме
Сообщения
671
Реакции
349
Ответ: compound Path

то при покраске объект без дырки
Внутренний (вырезаемый) контур нужно рисовать обходя контур в противоположном направлении.

Где-то так:
PHP:
newPath.setEntirePath(Array( Array(lsd.width, 0), Array(lsd.width, lsd.height), Array(0, lsd.height), Array(0, 0) ));

Закрашиваемую часть — по часовой стрелке, вырезаемую — против. Скорее всего сработает и наоборот, главное чтобы в разные стороны.
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 032
Реакции
1 198
Ответ: compound Path

О, как. Круто. Similideus, спасибо, ни за что бы не догадался.
 

Fog_patch

12 лет на форуме
Сообщения
3 163
Реакции
998
Ответ: compound Path

Код:
newCompoundPath.PathItems(2).Polarity = aiNegative
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 032
Реакции
1 198
Ответ: compound Path

И ведь, косо же смотрел на эту полярити... И даже пробовал, но, видать, в суматохе наколбасил кода и неправильно заработало. Fog_patch, спасибо. Уже окосел от этих мануалов, очевидное не вижу.
 

Fog_patch

12 лет на форуме
Сообщения
3 163
Реакции
998
Ответ: compound Path

Я мануалы не смотрел. Лень было. Просто вспомнил что в шрифтах дырка появляется только при соблюдении условий. Глянул в бейсике локалз — так и есть.
 

Вложения

  • type1.gif
    type1.gif
    28.4 КБ · Просм.: 772
Статус
Закрыто для дальнейших ответов.