[AI CC-CC2022] Скрипт красит заливки в цвет обводок, а толщину обводок обнуляет

  • Автор темы Автор темы Flegma
  • Дата начала Дата начала

Flegma

Участник
Топикстартер
Сообщения
90
Реакции
2
Будьте добры, посмотрите еще один.
Составил скрипт, который хватает все выделенные объекты (все простые пути без заливок, но с разноцветными обводками) и красит заливки в цвет соответствующих обводок, а толщину обводок обнуляет.
В общем идея разноцветные обводки превратить в заливки. Дело в том, что объектов очень много, тысячи и даже миллионы, цвета разнообразные, в общем кроме как скриптом, перекрасить нереально.
Код:
mypathItems = app.activeDocument.pathItems;
docSelected = app.activeDocument.selection;
     if ( docSelected.length > 0 ) {
          for ( i = 0; i < docSelected.length; i++ ) {
               mypathItems[i].fillColor = mypathItems[i].strokeColor;
               mypathItems[i].strokeWidth = 0;
          }
     }
     else {
     alert( "Please select one or more objects" );
     }
Скрипт работает, но долго и с ограниченным кол-вом объектов (только неск-ко тысяч).
Для примера скрипт рандомной покраски объектов легко справляется с любыми кол-вами объектов..
Просто пытаюсь понять, самый ли это простой и "ресурсоэффективный" для Иллюстратора путь или может быть есть вариант проще и быстрее
 
Может быть возможно не запускать цикл и не прогонять все по одному..
 
но долго и с ограниченным кол-вом объектов (только неск-ко тысяч).
скрипт рандомной покраски объектов легко справляется с любыми кол-вами объектов..
С этого момента поподробнее - что за скрипт рндомной покраски, и чем его алгоритм от вашего принципиально отличается? 'hmmm'
Навскидку вижу косяк - вы путаете все PathItemы и выбранные объекты в скрипте. Странно что работает вообще
 
не запускать цикл и не прогонять все по одному..
Если б в один цвет все красилось то можно было бы простым экшном. Но тут копирование заливки из обводки - только по одному к сожалению :(
Поправьте скрипт как я говорю - он у вас правильно отрабатывать будет только если все объекты выделены
 
Вот скрипт рандомной заливки, он красит все выделенные объекты в случайном порядке в цвета, выделенные в палитре Свотчес:
Код:
mySelection = app.activeDocument.selection;
myDoc = app.activeDocument;
if (mySelection instanceof Array)
{
    selSwatches = myDoc.swatches.getSelected();
    
    if(selSwatches.length != 0)
        for (i=0; i<mySelection.length; i++)
        {
            if(mySelection[i].typename == "PathItem" || mySelection[i].typename == "CompoundPathItem")
            {
                selItem = mySelection[i];
                selItem.filled = true;

                swatchIndex = Math.round( Math.random() * (selSwatches.length - 1 ));
                
                if(selItem.typename == "PathItem")
                    selItem.fillColor = selSwatches[swatchIndex].color;
                else
                    selItem.pathItems[0].fillColor = selSwatches[swatchIndex].color;
                
            }
        }
}
 
Я тут, к сожалению, разобраться не смог, темнота )) Но тут, мне каж, цикла нет, отрабатывает очень быстро.
Видимо не мой случай :)
 
Кажется понял с путаницей переменных, открыли глаза, спасип ;) Буду править
Так хоть можно будет по частям выделять и запускать, а то с полным объемом не справляется.
 
Ооо, ну тогда и мой способен быстро работать, буду доводить
 
Меня терзают смутные сомнения, что, возможно, операция чтения цвета с обводки тормозит?
 
Видимо так и происходит.
Рандомный отрабатывает за пару секунд,
а мой подвисает на минуту, когда заканчивает, процентов пять перекрашено, остальное нет
 
процентов пять перекрашено, остальное нет
Во-первых, у вас не все pathitemы обрабатываются, а неизвестно какие произвольные. А во вторых, вы на PathItemы нигде перекрашиваемые объекты не проверяете - возможно по ошибке выскакивает из скрипта как только напарывается скажем на группу
 
Там у меня все объекты по типу одинаковые - простые пути с обводками без заливок, но разнообразные по цвету. Групп тоже нет. Это на самом деле кривые экпортированные из 3д-редактора, цвет могу экспортировать в Илл-р только через обводку, вот и возникает необходимость перекрашивать в заливку..
 
Тогда даже и не знаю, откуда тормоза. Поправьте все таки путаницу с
mypathItems и docSelected, хотя к скорости работы это отношения не имеет 'hmmm'
 
Поправил. Вроде корректно отрабатывает только с выделенными
Код:
docSelected = app.activeDocument.selection;
     if ( docSelected.length > 0 ) {
          for ( i = 0; i < docSelected.length; i++ ) {
               docSelected[i].fillColor = docSelected[i].strokeColor;
               docSelected[i].strokeWidth = 0;
          }
     }
     else {
     alert( "Please select one or more objects" );
     }

Меня терзают смутные сомнения, что, возможно, операция чтения цвета с обводки тормозит?
Как думаете, если ввести еще одну переменную и ей присваивать цвет обводки, а потом уже заливку красить по этой переменной, это может что-то изменить в плане скорости обработки?
 
А в случае с экспортированными кривыми не работает скрипт,
видимо поспешил я с утверждением, что там только однотипные пути все получаются при экспорте,
вот глянул в палитру Инфо:
 
Обшибся, работает с экспортированными, не то делал
 
Как думаете, если ввести еще одну переменную и ей присваивать цвет обводки, а потом уже заливку красить по этой переменной, это может что-то изменить в плане скорости обработки?
Только замедлит
 
А если экшн записать, Cmd+A, Shift+x, готово?
 
Это заработает когда все объекты одного цвета, в моем же случае множество оттенков, вот и приходится городить ))