Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой с

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

Ghost in shell

Топикстартер
15 лет на форуме
Сообщения
249
Реакции
12
Привет.
С созданием слоев у меня проблем не возникло:
Код:
newlayer4 = activeDocument.layers.add();
newlayer4.name = "Detali";        
newlayer3 = activeDocument.layers.add();
newlayer3.name = "Solder";
newlayer2 = activeDocument.layers.add();
newlayer2.name = "Pad";
newlayer1 = activeDocument.layers.add();
newlayer1.name = "Otv";
К созданному мной слою обращаться просто:
Код:
activeDocument.activeLayer = newlayer2;    // сделать активным newlayer2
Как обратится к "родному", (дефолтному) слою документа (этот слой был создан вместе с документом, англ. 10-я версия Иллюстратора) чтобы выделить на нем объекты с определенным цветом абриса (или заливки)?
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

А посмотреть, что было в activeDocument.layers до того как вы туда слои добавили?
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Как это можно посмотреть?
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

PHP:
for(var i=0;i<activeDocument.layers.length;i++) 
$.writeln(activeDocument.layers[i]);

например
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Спасибо, Skvoznyak
А где можно прочитать результат?
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Я не пойму, вам к слою обратиться надо или значения посмотреть? Сделайте его активным, как в первом посте делали. А значения можно и в отладчике глянуть.
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Как вариант, можно было сначала (до создания новых слоёв) запомнить в переменную активный слой (он же, дефолтный) и через эту переменную потом к нему и обращаться.
Код:
default_layer = app.activeDocument.activeLayer;

newlayer4 = activeDocument.layers.add();
newlayer4.name = "Detali";        
newlayer3 = activeDocument.layers.add();
newlayer3.name = "Solder";
newlayer2 = activeDocument.layers.add();
newlayer2.name = "Pad";
newlayer1 = activeDocument.layers.add();
newlayer1.name = "Otv";

//activeDocument.activeLayer = default_layer; // так станет активным  дефолтный слой
default_layer.hasSelectedArtwork  =true; // так будет выделено все на дефолтном слое
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Спасибо, Skvoznyak
А где можно прочитать результат?

при запуске из ExtendScript по $.writeln информация выводится в консоль. а так - можно в файл писать лог, можно алертом выводить. Консоль наиболее удобна при отладке, на мой взгляд.
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Забыл добавить, что если запускать скрипт с такими директивами из программ (как обычно) - очень часто программа падает.
Поэтому я обрамляю такие выводы конструкцией if(debug).., а глобальную переменную debug устанавливаю в false/true в самом начале скрипта.

Можно также для большего удобства добавить в скрипт функцию, и пользоваться ей
PHP:
function writeLog(logMsg)
{
if(debug) $.writeln(logMsg);
}
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Я не пойму, вам к слою обратиться надо или значения посмотреть?
Обратиться к слою. Это потом мне предложили посмотреть значение (название слоя).
при запуске из ExtendScript по $.writeln информация выводится в консоль.
Мысль хорошая, только для 10-й версии нет ExtendScript. У меня стоит неиспользуемая CS2-я сюита, можно в ней. Но пойдет ли скрипт, отлаженный в илле CS2 в 10-й версии?
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Обратиться к слою. Это потом мне предложили посмотреть значение (название слоя).
Тогда чем вам пост #7 не подходит?

Мысль хорошая, только для 10-й версии нет ExtendScript. У меня стоит неиспользуемая CS2-я сюита, можно в ней. Но пойдет ли скрипт, отлаженный в илле CS2 в 10-й версии?
За давностью лет вообще не помню, какая там объектная модель, запросто может и не пойти. Пробовать надо. Не нравится в лог писать - алертов понатыкайте повсюду.
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Алерт тоже надо уметь правильно писать. Пока нехочу на него отвлекаться.
Попробовал в ExtendScript для CS2
PHP:
for(var i=0;i<activeDocument.layers.length;i++) 
$.writeln(activeDocument.layers[i]);
результат - Layer Layer 1
переименовал слой в 111, результат - Layer 111
не работает
PHP:
activeDocument.activeLayer = Layer 1;   // сделать активным слой Layer 1;
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

выводите в файл.

PHP:
logFile=new File("/path/to/log.txt");
logFile.open("w");
..
logFile.writeln(logInfo);
..
logFile.close();

как-то так. хотя честно скажу, не знаю как и что в 10 совершенно )

не работает
PHP:
activeDocument.activeLayer = Layer 1;   // сделать активным слой Layer 1;

это же название слоя ) а вам надо присваивать объект.

условно говоря
PHP:
activeDocument.activeLayer = activeDocument.layers[0];
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

PHP:
activeDocument.activeLayer = activeDocument.layers[0];
это обращение к первому элементу массива Layers. Им будет слой, созданный последним - Otv.
Дефолтный слой имеет номер 4 в массиве.
Вот так можно сделать слой активным, зная его имя!
PHP:
activeDocument.activeLayer = activeDocument.layers["Layer 1"];

Следующие проблемы:
- как выделить на активном слое объекты с заданным цветом абриса (заливки)?
- вырезать
- как сделать активным другой слой я уже знаю
- вставить на тоже место (аналог Ctrl+F) на другом слое
- прекрасить (или сделать пустой) абрис (заливку)
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

это обращение к первому элементу массива Layers. Им будет слой, созданный последним - Otv.
Ну почему же, вы ведь обращаетесь к нему в самом начале, до того, как свои слои создали.

А как можно обратится к слою по имени?
Вы же только что это делали. При присваивании строковой переменной слоя автоматом ей его имя присваивается.
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Вот так можно сделать слой активным, зная его имя!
PHP:
activeDocument.activeLayer = activeDocument.layers["Layer 1"];

странно, что это работает. по идее должно быть
PHP:
activeDocument.activeLayer = activeDocument.layers.itemByName("Layer 1")

но спорить не буду, если работает, то хорошо.

- как выделить на активном слое объекты с заданным цветом абриса (заливки)?

перебрать все объекты, те, что подходят по цвету, закинуть в массив
по остальным вопросам - см. документацию по объектной модели. а то всю ее тут переписывать форума не хватит )
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

activeDocument.activeLayer*=*activeDocument.layers["Layer*1"];*
странно, что это работает
Скажу вам даже более интересную вещь. С точки зрения адобовской Javы, выражения layers[0], layers["0"], layers.0 ну и, например, layers["Layer 1"] и layers."Layer 1" эквавалентны
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

возможно. это же не обычные массивы js, а коллекции
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Я в том смысле, что, получается, все массивы реализованы через коллекции. Точнее, через подклассы, где индекс элемента массива - это строковое название свойства объекта подкласса.
 
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Да нет, с обычным массивом это не прокатит.
PHP:
var a=new Array();
a.push("0");
a."0"; //ошибка
 
Статус
Закрыто для дальнейших ответов.