[AI CC-CC2021] Доступ к объектам находящимся на Layer

Статус
Закрыто для дальнейших ответов.

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Не понимаю логики)

Так не работает!!!

Код:
  colorItem = app.activeDocument.activeLayer.pageItems;

  newRGBColor = new RGBColor();
  newRGBColor.red = 255;
  newRGBColor.green = 255;
  newRGBColor.blue = 255;

  for (с=0;с<colorItem.length;с++){
  colorItem[с].filled = true;
  colorItem[с].fillColor = newRGBColor;
  }


А так работает

Код:
colorItem = app.activeDocument.pageItems;

                newRGBColor = new RGBColor();
                newRGBColor.red = 255;
                newRGBColor.green = 255;
                newRGBColor.blue = 255;

                for (с=0;с<colorItem.length;с++){
                colorItem[с].filled = true;
                colorItem[с].fillColor = newRGBColor;
                }

Вопрос как получить доступ к объектам pageItems нужного слоя?
 

splxgf

12 лет на форуме
Сообщения
7 744
Реакции
3 425
Да наверное перебирать все и проверять принадлежность к активному слою.
 
  • Спасибо
Реакции: angelp

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Проблема в том, что таких объектов на всех слоях, ну очень много, вот уже минуты 2 перебираю, еще не перебрал. Нужен доступ к объектам конкретного слоя)
 

splxgf

12 лет на форуме
Сообщения
7 744
Реакции
3 425
Пробуйте сделать по шагам.
DocRef=app.activeDocument;
LayRef=DocRef.activeLayer;
colorItem = LayRef.pageItems;
 

angelp

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

qsedftghk

фея
15 лет на форуме
Сообщения
2 033
Реакции
1 200
Эээ.., непонятно в чем проблема. Самый первый код работает как нужно, - перекрашивает то, что находится в активном слое. Слой должен быть выбран в палитре Layers.
ill CS6.
 

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Если объекты в группе, то уже не работает)
А второй вариант работает на все и на объекты в группе в т.ч.
 

splxgf

12 лет на форуме
Сообщения
7 744
Реакции
3 425
Ну для групп есть groupItems
 

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Если перебирать groupItems, а в них Path или Page, то он перекрасит только path, при этом CompaundPath остаются неокрашенными, а у самого CompaundPath уже нет в свойствах path(

В общем пока из рабочих только вариант предложенный @splxgf, но у меня более 50 000 объектов для перебора, очень долго перебирает.
Решение пока прежнее, копирую нужные объекты из слоя в новый документ, и там работаю вторым вариантом
 

qsedftghk

фея
15 лет на форуме
Сообщения
2 033
Реакции
1 200
хм, тогда, может вот так, через обычное место?
Слой, в котором будет перекраска, должен быть выделе в палитре layers

Код:
doc=app.activeDocument;
al = doc.activeLayer;
zo=al.zOrderPosition;
al.zOrder(ZOrderMethod.BRINGTOFRONT);

for(i=1; i<doc.layers.length; i++)
{
doc.layers[i].visible=false;
}

try {
colorItem = app.activeDocument.pageItems;

newRGBColor = new RGBColor();
newRGBColor.red = 255;
newRGBColor.green = 255;
newRGBColor.blue = 255;

for (с=0;с<colorItem.length;с++){
colorItem[с].filled = true;
colorItem[с].fillColor = newRGBColor;
}

} //try

catch (e) {
}

for(i=1; i<doc.layers.length; i++)
{
doc.layers[i].visible=true;
}

for(i=doc.layers.length; i>zo; i--)
{
al.zOrder(ZOrderMethod.SENDBACKWARD);
}

ЗЫ. Особо не тестил, но смысл в том, чтобы скрыть все другие слои, а тот, в котором будет перекраска поднять на самый верх. Тогда прокатывает "неправильная" перекраска, хоть и выдает ошибку, которую, мы, благополучно, забываем ;) Ну, а после вернуть всё как было.
 
  • Спасибо
Реакции: angelp

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Спасибо!
Для меня рабочий вариант, теперь не нужно переносить элементы в новый документ. Поскольку у меня все слои, кроме нужного, находятся в состоянии Hidden, то код я упростил, да и порядок слоев в моем случае не важен.

Код:
doc=app.activeDocument;
al = doc.activeLayer;
zo=al.zOrderPosition;
al.zOrder(ZOrderMethod.BRINGTOFRONT);


try {
colorItem = app.activeDocument.pageItems;

newRGBColor = new RGBColor();
newRGBColor.red = 255;
newRGBColor.green = 255;
newRGBColor.blue = 255;

for (с=0;с<colorItem.length;с++){
colorItem[с].filled = true;
colorItem[с].fillColor = newRGBColor;
}

} //try

catch (e) {
}
 
Статус
Закрыто для дальнейших ответов.