В чем отличия выделенного слоя от выбранного?

  • Автор темы Автор темы Larvatus
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Larvatus

Участник
Топикстартер
Сообщения
199
Реакции
6
Есть пара слоев.
upload_2015-2-20_10-44-14.png

Скрипт использует объекты в слое 1.
Код:
activeDocument.activeLayer
На скриншоте выбран слой 1, но выделен слой 2. Скрипт работает, только если и выбран и выделен один и тот же слой. В такой комбинации, как на скриншоте выдает ошибку.
upload_2015-2-20_10-48-12.png

Есть ли из javascript доступ к этому выделенному слою? Что-то вроде
Код:
.selectedLayer
по аналогии с
Код:
.activeLayer
 
Слоем .activeLayer оказался слой 2. А индикация слоя 1 показывает выделенные элементы. Теперь нужно просто сделать активным слой-родитель для выделенных элементов (при условии, что они находятся на одном слое). Поторопился с размещением темы(
 
Есть пара слоев.
Посмотреть вложение 69070
Скрипт использует объекты в слое 1.
Код:
activeDocument.activeLayer
На скриншоте выбран слой 1, но выделен слой 2. Скрипт работает, только если и выбран и выделен один и тот же слой. В такой комбинации, как на скриншоте выдает ошибку.Посмотреть вложение 69071
Есть ли из javascript доступ к этому выделенному слою? Что-то вроде
Код:
.selectedLayer
по аналогии с
Код:
.activeLayer
Не забыли ли Вы app?
Всё работает, как и ожидается:
Код:
#target Illustrator
a = app.activeDocument.activeLayer;
alert (a.name);
alertOk.JPG
 
Последнее редактирование:
  • Спасибо
Реакции: Larvatus
Да, все верно. Просто я изначально запутался, посчитав слой с выделенными объектами активным.
 
Нашел нужный слой:
Код:
alert(activeDocument.activeLayer.name); //Слой 2
alert(activeDocument.selection[0].parent.name);//Слой 1
 
Нашел нужный слой:
Код:
alert(activeDocument.activeLayer.name); //Слой 2
alert(activeDocument.selection[0].parent.name);//Слой 1
Вы не учли возможное выделение объекта внутри группы. В этом случае родительский объект будет иным, нежели слой.
 
  • Спасибо
Реакции: Larvatus
PHP:
var sel = selection[ 0 ];
alert ( getTopLay ( sel ) );
/**
* Получить слой верхнего уровня у которого parent == document
* @param {PageItem} item - объект класса PageItem
* @return {Layer} item/getTopLay(item.parent) - слой верхнего уровня, объект класса Layer
*/
function getTopLay ( item ) {
  if ( item.parent.typename == 'Document' ) return item;
  if ( item.parent.typename != 'Document' ) return getTopLay ( item.parent ); // рекурсия
}
 
  • Спасибо
Реакции: Larvatus
PHP:
function getTopLay ( item ) {
  if ( item.parent.typename == 'Document' ) { return item; }
  else { return getTopLay ( item.parent ); }
}
Двойная проверка ни к чему.

Либо вообще уйти от рекурсии:
PHP:
while (item.parent.typename != 'Document') { item = item.parent; }
 
  • Спасибо
Реакции: dumbm1 и Larvatus
Статус
Закрыто для дальнейших ответов.