[ID CC-CC2021] Задание цвета линии с помощью JS

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Не отмазывайся, проблема таки есть - ненужные паразитные свотчи накапливаются и тратят машинное время на свое создание. Даже на глаз видно, что colors.add довольно нехило по времени занимает, особенно, когда в панели прорисовывается.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
А с другой стороны, и вправду - чего это мы все усложняем? Вот такой простой пример тоже работает:
JavaScript:
var myDocument=app.activeDocument;
var myColor =null;
for (var i=0;i<myDocument.colors.length;i++)
{
    
    var col=myDocument.colors[i];
    if (!col.name)
    {
     try
     {
      col.colorValue=[0,100,100,0];
      myColor=col;
      break;
      } catch (err)
     {
      
     }
   }
}


var rect = myDocument.pages.item(0).rectangles.add({geometricBounds:[0,0,100,100]});


rect.fillColor=myColor;
rect.fillColor.colorValue=[0,100,0,0];
 
  • Спасибо
Реакции: koros

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Не отмазывайся, проблема таки есть - ненужные паразитные свотчи накапливаются и тратят машинное время на свое создание. Даже на глаз видно, что colors.add довольно нехило по времени занимает, особенно, когда в панели прорисовывается.
Я спросонья не пойму - это сарказм или ты на 286 пересел? )
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Адобовский скриптинг весма нетороплив. Особенно индизайновский. Особенно на крайних версиях.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Не замечал. Redraw отключен на время скрипта?
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
с таблицами такое бывает, но опять же - undo отключили?


Подскажите, как это сделать через Javascript?

у документа есть свойство colorGroups. добавляете новую

Код:
ColorGroups.add (name: string , swatchList:Array of Swatch , withProperties: Object ): ColorGroup
Adobe InDesign CC 2019 (14.0) Object Model
Creates a new ColorGroup
name: Data Type: string
The color group name (Optional)
swatchList: Data Type: Array of Swatch
The swatches to add in color group. (Optional)
withProperties: Data Type: Object
Initial values for properties of the new ColorGroup (Optional)

свотчи создаете в ней

Код:
ColorGroupSwatches.add (swatchItemRef: Swatch , withProperties: Object ): ColorGroupSwatch
Adobe InDesign CC 2019 (14.0) Object Model
Adds a color group swatch.
swatchItemRef: Data Type: Swatch
swatch to be added to color group
withProperties: Data Type: Object
Initial values for properties of the new ColorGroupSwatch (Optional)
 

_MBK_

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

Не по теме:
Обожаю данный форум, каждый желает высказаться о наболевшем вместо того чтобы по существу '))'
Мой код то проверяли, работает?

 

koros

Участник
Топикстартер
Сообщения
71
Реакции
4
А с другой стороны, и вправду - чего это мы все усложняем? Вот такой простой пример тоже работает:
У меня не работает. Вот что у меня:
JavaScript:
function myDrawLine(myBounds, myStrokeWeight, myRegistrationColor, myNoneSwatch, myLayer){
var myDocument=app.activeDocument;
var myColor =null;
for (var i=0;i<myDocument.colors.length;i++)
{
    
    var col=myDocument.colors[i];
    if (!col.name)
    {
     try
     {
      col.colorValue=[0,100,100,0];
      myColor=col;
      break;
      } catch (err)
     {
      
     }
   }
}

    var myLines = app.activeWindow.activeSpread.graphicLines.add(myLayer, undefined, undefined,{strokeWeight:myStrokeWeight, geometricBounds:myBounds});

myLines.fillColor=myColor;
myLines.fillColor.colorValue=[0,100,0,0];
}

у документа есть свойство colorGroups. добавляете новую
А можно это в виде JavaScript для Windows&
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
У меня не работает. Вот что у меня:
Что именно не работает? Вовсе необязательно кстати каждый раз доступный цвет искать перед созданием линии - это разовое действие.
 

_MBK_

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

koros

Участник
Топикстартер
Сообщения
71
Реакции
4
Вы же им fillColor присваиваете а надо strokeColor
Так заработало. Большое спасибо. Простите за нубскую наглость (только начал со всем этим разбираться), но не могли вы пояснить, что именно делает цикл в вашем коде?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
что именно делает цикл в вашем коде?
Цикл ищет первый попавшийся безымянный редактируемый цвет документа. Это можно сделать один раз а затем присваивать его всем создаваемым линиям. После этого им можно напрямую менять свойство colorValue
 

koros

Участник
Топикстартер
Сообщения
71
Реакции
4
А если такого безымянного редактируемого цвета документа нет?
А если цвет есть, но он уже присвоен каким-либо элементам. то значит после работы скрипта эти элементы перекрасятся?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
А если такого безымянного редактируемого цвета документа нет?
Пока что всегда были.
А если цвет есть, но он уже присвоен каким-либо элементам. то значит после работы скрипта эти элементы перекрасятся?
Надо пробовать. Вы когда линии создаете и разные цвета им присваиваете они перекрашиваются или нет?
 

koros

Участник
Топикстартер
Сообщения
71
Реакции
4
Пока что всегда были.
Где-то видел скрипт, который удаляет неиспользуемые цвета - точно не помню, но кажется он удаляет в том числе и безымянные.
Надо пробовать. Вы когда линии создаете и разные цвета им присваиваете они перекрашиваются или нет?
Попробовал. Выделил один объект запустил скрипт - линии нарисовались. В скрипте изменил цвет, выделил другой объект и запустил скрипт - линии нарисовались другого цвета, а вокруг первого объекта линии тоже изменили цвет на второй.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Тогда вот так
JavaScript:
rect.fillColor=myColor.duplicate();
rect.fillColor.colorValue=[0,100,0,0];
 
  • Спасибо
Реакции: koros

koros

Участник
Топикстартер
Сообщения
71
Реакции
4
Так цвета (после изменения в скрипте) после повторного запуска не меняются. Естественно при strokeColor.

А как проверить, что будет, если изначально нет безымянных цветов?
 

_MBK_

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