[AI CS4-CS6] Покрасить все подслои и объекты в цвет слоя

sylvio

Участник
Топикстартер
Сообщения
77
Реакции
5
Добрый день, коллеги

Как скриптом в палитре Слои перекрасить слой, его подслои и объекты в один цвет? Актуально при разворачивании символа в объект.
Здесь выложен скрипт для независимого перекрашивания слоя и подслоя, при этом если подслои развернуты, цвет объектов не изменяется.

Код выглядит так:
Код:
(function recolLays(lays) { 
  for (var i = 0; i < lays.length; i++) { 
    if (lays[i].layers.length) recolLays(lays[i].layers); 
    lays[i].color = _getRandRgb(); 
  } 
  function _getRandRgb() { 
    var rgbCol   = new RGBColor(); 
    rgbCol.red   = __randInt(0, 255); 
    rgbCol.green = __randInt(0, 255); 
    rgbCol.blue  = __randInt(0, 255); 
    return rgbCol; 
    function __randInt(min, max) { 
      var rand = min + Math.random() * (max + 1 - min); 
      rand     = Math.floor(rand); 
      return rand; 
    } 
  } 
}(activeDocument.layers));
 

Вложения

  • Capture4.PNG
    Capture4.PNG
    37 КБ · Просм.: 930

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
У вас на скриншоте не "подслои", а "объекты на слое"
Объекты перекрашиваются по другому
 

sylvio

Участник
Топикстартер
Сообщения
77
Реакции
5
У вас на скриншоте не "подслои", а "объекты на слое"
Объекты перекрашиваются по другому
Слой - Layer 1, подслои - Cube, Roman Trim
Во всяком случае, им можно задать кастомный цвет, а их вложениям нет.
 

_MBK_

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

sylvio

Участник
Топикстартер
Сообщения
77
Реакции
5
У слоя есть параметр color - его вы и задаете верно.
Но Сube,Roman trim - это уже не слои, соответственно,не перекрашиваются
Хотя, надо внимательно глянуть - говорите, если слой свернут перекрашиваются и они? 'hmmm'
Немного не так. Скрипт выше перекрашивает слой Layer 1, а также Сube и Roman trim, но все в разные цвета. А нужно чтоб все стали одного цвета вместе со всеми их подчиненными объектами.

Подчеркиваю, Сube и Roman trim все таки подслои, поэтому в отношении их окраски Иллюстратор и допускает вольности, иначе бы, если бы они были просто группами, их окраска совпадала бы с цветом слоя.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Сейчас проверил - у меня красится правильно что в свернутом что в развернутом состоянии.
Только случайность цвета вы,надеюсь, убрали?
upload_2017-8-23_14-46-27.png
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Код:
lays[i].color = _getRandRgb();

вот здесь свой цвет задайте вместо случайного
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Вот так у меня:
Код:
(function recolLays(lays) {
  for (var i = 0; i < lays.length; i++) {
    if (lays[i].layers.length) recolLays(lays[i].layers);
    lays[i].color = _getRandRgb();
  }
  function _getRandRgb() {
    var rgbCol   = new RGBColor();
    rgbCol.red   = 255;//__randInt(0, 255);
    rgbCol.green = 0;//__randInt(0, 255);
    rgbCol.blue  = 0;//__randInt(0, 255);
    return rgbCol;
    function __randInt(min, max) {
      var rand = min + Math.random() * (max + 1 - min);
      rand     = Math.floor(rand);
      return rand;
    }
  }
}(activeDocument.layers));
 

sylvio

Участник
Топикстартер
Сообщения
77
Реакции
5
Код:
lays[i].color = _getRandRgb();

вот здесь свой цвет задайте вместо случайного
Но тогда все слои будут одного цвета, разве нет?
Смысл вопроса как перекрасить подслои и все вложенные объекты в цвет слоя. Чтобы было понятно, на каком слое находится объект. При этом слоев может быть много.
 

_MBK_

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

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
значит покрасьте все подслои в цвет слоя, а не в случайный.

Код:
(function recolLays(lays,color) {
  for (var i = 0; i < lays.length; i++) {
if(!color)
   lays[i].color = _getRandRgb();
else
lays[i].color = color;
    if (lays[i].layers.length) recolLays(lays[i].layers,lays[i].color);
  
  }
  function _getRandRgb() {
    var rgbCol   = new RGBColor();
    rgbCol.red   =__randInt(0, 255);
    rgbCol.green = __randInt(0, 255);
    rgbCol.blue  = __randInt(0, 255);
    return rgbCol;
    function __randInt(min, max) {
      var rand = min + Math.random() * (max + 1 - min);
      rand     = Math.floor(rand);
      return rand;
    }
  }
}(activeDocument.layers));
 
  • Спасибо
Реакции: _MBK_ и sylvio