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

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

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

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

Кстати, Вы в курсе, что ваш скрипт можно вторично запустить, применительно к уже разъединенному пунктиру? Он преобразует (так и хочется сказать "превращает"))) группу линий в группу объектов с заливкой из-за присутствия команды Offset Path в скрипте.
 
команды OffsetPath не было упоминаний совсем
В скрипте и нет такой команды ;)
удаляете дублированные линии (которые лежат одна над другой),
Там тоже такого нет. Я на всякий случай вставил фильтр на одинаковые узлы, поскольку, погоняв скрипт, все таки согласился, что адобовский перевод обводки в контур иногда оставляет огрехи, что поделать
Михаил, несмотря на то, что Вы за свои слова (я говорю об Expand пунктира 0,0001 pt и двойных линиях) так и не ответили
Ну почему же? Я не спорю, что данная операция идеально не проходит, местами дубли узлов таки остаются, но вычищаются достаточно просто автоматически.
Кстати, Вы в курсе, что ваш скрипт можно вторично запустить, применительно к уже разъединенному пунктиру? Он преобразует (так и хочется сказать "превращает"))) группу линий в группу объектов с заливкой из-за присутствия команды Offset Path в скрипте.
Сейчас проверил - вроде нет, нормально оставляет незалитые незамкнутые контура.
Повторяю - там нет команды Offset Path Это обман зрения ;)
 
На самом деле, там об этом писали тоже - надо не просто Expand, а Expand Appearence - Expand
Причем одна из этих команд принимает параметры в виде диалогового окна, которое из скрипта подавить невозможно
А тут одна команда с тем же самым результатом
 
Немного поправил ваш код, иначе скрипт в некоторых случаях некорректно обрабатывал:
Код:
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");
}
 
Ну предполагалось же, что контура все разомкнутые, односвязные и незаполненные?
Иначе возможны коллизии иного рода
 
надо не просто Expand, а Expand Appearence - Expand
К простой Dush линии Expand Appearance не применим из интерфейса.
Ну предполагалось же, что контура все разомкнутые, односвязные и незаполненные?
Иначе возможны коллизии иного рода
При работе стиль сохраняется от последнего объекта, так что такие коллизии были бы часты.
_МВК_, Вы не могли бы перепостить код, чтобы я на него ссылку мог поставить ( сохранить авторство)?
 
Я скриптов не пишу, так что все - штатными средствами.
Вариант Корела:
Настройки дублирования объектов - в ноль.
Линия перфорации дублируется, потом ей назначается параметр сплошной линии. Верхний дубль - переводится в outline. Получившиеся прямоугольники делают trim по нижней линии - получаем набор отрезков из 2-х узлов (надо еще выставить, чтобы исходные фигуры прибивались).

в Иллюстраторе - алгоритм такой же, верхний дубль превращаем в набор прямоугольников, нижнюю - в просто линию, выделяем обе, pathfinger - outline, получаем набор прямоугольников с отрезками посредине. А вот как сделать, чтобы отрезки остались, а остальное - отвалилось, и без ручной работы - это я не знаю.
 
Задаете хитровыделанный цвет
 
К простой Dush линии Expand Appearance не применим из интерфейса.
В смысле?
upload_2018-10-1_18-13-13.png

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