Разбить пунктир на отдельные отрезки в Illustrator

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 233
Реакции
10 851
Мы, кажется, перешли с технических, на общечеловеческие вопросы?
Скриптинг (даже такой косолапый, как в иллюстраторовской модели) - вполне нормальный инструмент для решения многих проблем, в т.ч. данной. Столь простой скрипт, как приведенные мною выше вполне по силам сделать человеку, прослушавшего курс информатики средней школы и уж с двумя высшими образованиями - подавно. На адобовском комьюнити охотно советуют решения именно в виде скриптов, отсутствие оного для данной задачи свидетельствует, скорее, об общей специфичности и маловостребованности топиковой задачи.
Но, согласитесь, всего несколько строк простого кода, и решение практически однокнопочное (особенно если на шоткат повесить) в отличие от кучи манипуляций из вашего поста, с которого все началось.
Cобственно, мой скрипт именно допиливает приведенное на комьюнити решение штатными средствами, ибо индоразработчики иллюстратора постарались щедро насыпать в эти штатные средства всевозможных багов. Можете воспринимать этот скрипт просто как фикс для них.
 

drawline

10 лет с rudtp
Топикстартер
10 лет на форуме
Сообщения
99
Реакции
2
Столь простой скрипт...
Ну что ж, скрипт вполне рабочий и действительно достаточно простой, но есть несколько "но":
- о применении команды OffsetPath не было упоминаний совсем, я по-крайней мере не припомню;
- в скрипте Вы все-равно удаляете дублированные линии (которые лежат одна над другой), из-за чего эта дискуссия продолжается уже достаточно долго. Вручную на такую операцию ушла бы уйма времени. В отличие от Expand, результат применения команды Offset Path несколько иной, и, он действительно более прост для реализации дальнейших операций в скрипте.
всего несколько строк простого кода, и решение практически однокнопочное
Да, за скрипт спасибо. Думаю, что Вам есть смысл опубликовать его на AdobeCommunity, несмотря на то, что тема не новая. Уверен, Вам скажут много благодарностей.
именно допиливает приведенное на комьюнити решение штатными средствами
А вот здесь возражу, так как уже сказал, что о речь шла команде Expand для тонкой штриховой линии с толщиной, заданной как 0,0001 pt, где пришлось бы разрывать каждый из полученных объектов и искать дубли.

Михаил, несмотря на то, что Вы за свои слова (я говорю об Expand пунктира 0,0001 pt и двойных линиях) так и не ответили, предлагаю мир (войны же ведь не было?) и остановиться на том, что решение найдено, а Вами предложен суперский доп. инструмент (действительно "однокнопочный").
Донимать Вас "двойными" линиями больше не буду, так как уже получил удовольствие от того, что наша дискуссия принесла результат.

С вашего позволения, могу ли опубликовать Ваш скрипт в "Советах.."в качестве еще одного решения? Ну или сами...

Кстати, Вы в курсе, что ваш скрипт можно вторично запустить, применительно к уже разъединенному пунктиру? Он преобразует (так и хочется сказать "превращает"))) группу линий в группу объектов с заливкой из-за присутствия команды Offset Path в скрипте.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 233
Реакции
10 851
команды OffsetPath не было упоминаний совсем
В скрипте и нет такой команды ;)
удаляете дублированные линии (которые лежат одна над другой),
Там тоже такого нет. Я на всякий случай вставил фильтр на одинаковые узлы, поскольку, погоняв скрипт, все таки согласился, что адобовский перевод обводки в контур иногда оставляет огрехи, что поделать
Михаил, несмотря на то, что Вы за свои слова (я говорю об Expand пунктира 0,0001 pt и двойных линиях) так и не ответили
Ну почему же? Я не спорю, что данная операция идеально не проходит, местами дубли узлов таки остаются, но вычищаются достаточно просто автоматически.
Кстати, Вы в курсе, что ваш скрипт можно вторично запустить, применительно к уже разъединенному пунктиру? Он преобразует (так и хочется сказать "превращает"))) группу линий в группу объектов с заливкой из-за присутствия команды Offset Path в скрипте.
Сейчас проверил - вроде нет, нормально оставляет незалитые незамкнутые контура.
Повторяю - там нет команды Offset Path Это обман зрения ;)
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 233
Реакции
10 851
На самом деле, там об этом писали тоже - надо не просто Expand, а Expand Appearence - Expand
Причем одна из этих команд принимает параметры в виде диалогового окна, которое из скрипта подавить невозможно
А тут одна команда с тем же самым результатом
 

drawline

10 лет с rudtp
Топикстартер
10 лет на форуме
Сообщения
99
Реакции
2
Немного поправил ваш код, иначе скрипт в некоторых случаях некорректно обрабатывал:
Код:
var oldwidth,oldcolor;

if (documents.length > 0) {
 if (activeDocument.selection.length>0)
 {
   for (var i=0;i<activeDocument.selection.length;i++)
     if (activeDocument.selection[i].typename == "PathItem")
     {
         oldwidth=activeDocument.selection[i].strokeWidth;
         oldcolor=activeDocument.selection[i].strokeColor;
         oldcolorf=activeDocument.selection[i].fillColor;
         activeDocument.selection[i].strokeWidth=0.0001;
         activeDocument.selection[i].fillColor=NoColor;
       
     }
   app.executeMenuCommand("OffsetPath v22");
   app.executeMenuCommand("ungroup");
   app.executeMenuCommand("noCompoundPath");
 
   for (var i=0;i<activeDocument.selection.length;i++)
     if (activeDocument.selection[i].typename == "PathItem")
     {
         for (j=0;j<activeDocument.selection[i].pathPoints.length-1;j++)
         {
             var pp=activeDocument.selection[i].pathPoints[j];
             for (k=j+1;k<activeDocument.selection[i].pathPoints.length;k++)
            {
                var pp1=activeDocument.selection[i].pathPoints[k];
                if ((Math.abs(pp1.anchor[0]-pp.anchor[0])<0.001) && (Math.abs(pp1.anchor[1]-pp.anchor[1])<0.001))
                {
                 pp1.remove();
                }
            }
         }
         activeDocument.selection[i].filled=false;
         activeDocument.selection[i].closed=false;
         activeDocument.selection[i].stroked=true;
         activeDocument.selection[i].strokeWidth=oldwidth;
         activeDocument.selection[i].strokeColor=oldcolor;
         activeDocument.selection[i].fillColor=oldcolorf;
     }
 } else
 {
    alert("No selection");
 }
} else
{
 alert("No opened document");
}
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 233
Реакции
10 851
Ну предполагалось же, что контура все разомкнутые, односвязные и незаполненные?
Иначе возможны коллизии иного рода
 

drawline

10 лет с rudtp
Топикстартер
10 лет на форуме
Сообщения
99
Реакции
2
надо не просто Expand, а Expand Appearence - Expand
К простой Dush линии Expand Appearance не применим из интерфейса.
Ну предполагалось же, что контура все разомкнутые, односвязные и незаполненные?
Иначе возможны коллизии иного рода
При работе стиль сохраняется от последнего объекта, так что такие коллизии были бы часты.
_МВК_, Вы не могли бы перепостить код, чтобы я на него ссылку мог поставить ( сохранить авторство)?
 

carry

15 лет на форуме
Сообщения
2 637
Реакции
1 015
Я скриптов не пишу, так что все - штатными средствами.
Вариант Корела:
Настройки дублирования объектов - в ноль.
Линия перфорации дублируется, потом ей назначается параметр сплошной линии. Верхний дубль - переводится в outline. Получившиеся прямоугольники делают trim по нижней линии - получаем набор отрезков из 2-х узлов (надо еще выставить, чтобы исходные фигуры прибивались).

в Иллюстраторе - алгоритм такой же, верхний дубль превращаем в набор прямоугольников, нижнюю - в просто линию, выделяем обе, pathfinger - outline, получаем набор прямоугольников с отрезками посредине. А вот как сделать, чтобы отрезки остались, а остальное - отвалилось, и без ручной работы - это я не знаю.
 

Йожег

без телевизора
12 лет на форуме
Сообщения
8 836
Реакции
4 275
Задаете хитровыделанный цвет
 

drawline

10 лет с rudtp
Топикстартер
10 лет на форуме
Сообщения
99
Реакции
2

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 233
Реакции
10 851
К простой Dush линии Expand Appearance не применим из интерфейса.
В смысле?
upload_2018-10-1_18-13-13.png

При работе стиль сохраняется от последнего объекта
Это да, в противном случае придется запоминатьсвойства каждой линии а затем как то идентифицировать их огрызки.
Я не говорю, что это принципиально невозможно, но это серьезно усложнило бы задачу.
Вы не могли бы перепостить код
Куда перепостить?
 

YemZ

В бане
Сообщения
14
Реакции
7
Будет ли активна Expand Appearance зависит от этого
dash_opt.png
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 233
Реакции
10 851
Тогда тем более правильнее Outline stroke делать