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

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

_MBK_

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

Не совсем так:
PHP:
var a=new Array();
a.push("0");
alert(a[0]);
alert(a.0);
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

на втором алерте ошибка
 

_MBK_

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

Странно. А a["0"] и а."0" тоже ошибку генерируют? Какая ошибка и какая версия Extended script?
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

да. ошибка "Expected: )" по первому случаю. cs4 на маке - (3.92.115)
если обратиться по ["0"] - он переводит это в число 0, а не обращается по имени. легко проверить
PHP:
var a=new Array();
a.push("1");
$.writeln(a["0"]); //выводит 1
$.writeln(a["1"]); //выводит undefined

если a."0" - просто Syntax error
 

_MBK_

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

если обратиться по ["0"] - он переводит это в число 0, а не обращается по имени. легко проверить
То-то и оно что по имени а не по значению. Да, точно выдает ошибку но синтаксическую, поскольку число формально идентификатором быть не может. Другой пример - обращение к полю объекта, как к индексу массива, скажем a.name эквивалентно a["name"]
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

То-то и оно что по имени а не по значению.

так а почему тогда a["0"] возвращает 1, а a["1"] - 2 из массива (1,2)?

Другой пример - обращение к полю объекта, как к индексу массива, скажем a.name эквивалентно a["name"]

а это разве не обычный JS?
 

_MBK_

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

Все верно, с точки зрения адобовской Java массив a[] из двух элементов - это объект подкласса массива со свойствами "0" со значением 1 и "1" со значением 2. Обращение к массиву идет по имени свойства, соответственно, обращение к свойству объекта тоже можно записаь как к строковому индексу соответствующего массива. Я когда писал декомпилятор столкнулся с этим - пришлось искусственно заменять конструкции вида a.0, a.1, a.2 ... на a[0], a[1], ... ибо не совсем верно. Можете кстати, сами глянуть, в той версии, которая тут лежит это еще не исправлено. Соответственно, это видно и по ассемблерному листингу - обращение к индексу массива (если это, конечно, константа, а не переменная), транслируется как свойство (причем строковое, то есть "0","1","2" или даже "2.5" можно сделать). В стандарте Java все иначе - там ассемблер другой и сама идеология трансляции псевдокода.
 

_MBK_

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

Вот специально загрузил проверил.
Доказательство того что к элементу a[0] жаба обращается по имени "0" а не по значению.
Рассмотрим код:
Код:
var a=new Array();
a.push(0);
alert(a[0]);        // 0 
alert(a[0.0]);     // 0
alert(a[00]);      // 0
alert(a["0"]);     // 0
alert(a["0.0"]);  // undefined
alert(a["00"]);   // undefined
Видно, что в первых четырех случаях число преображается к виду "0",
уже на этапе компиляции, и все 4 верхних выражения эквивалентны a["0"],
однако, в последних двух, хоть и обращение идет к арифметически
эквивалентным 0 элементам массива, преобразования не происходит,
а полей c именами "0.0" и "00" в подклассе Array нет. Если бы было обратное
преобразование из строки в число ("0"-> 0) то все выражения работали бы одинаково.
Что подтверждается, если просмотреть дизассемблированый код:
Код:
00000059:      ExprStatement{ 2  {}  0  {  } 
0000005D:        Call{
0000005E:          Variable{"alert" false 
0000006C:          }
0000006D:          List{ 1  { 
0000006F:            Property{"0" false 
00000076:              LocalVariable{"a" false  -1 
0000007A:              }
0000007A:            } }  false 
0000007B:          } false 
0000007C:        }
0000007C:      }
0000007D:      ExprStatement{ 3  {}  0  {  } 
00000081:        Call{
00000082:          Variable{"alert" false 
00000084:          }
00000085:          List{ 1  { 
00000087:            Property{"0" false 
0000008A:              LocalVariable{"a" false  -1 
0000008E:              }
0000008E:            } }  false 
0000008F:          } false 
00000090:        }
00000090:      }
00000091:      ExprStatement{ 4  {}  0  {  } 
00000095:        Call{
00000096:          Variable{"alert" false 
00000098:          }
00000099:          List{ 1  { 
0000009B:            Property{"0" false 
0000009E:              LocalVariable{"a" false  -1 
000000A3:              }
000000A3:            } }  false 
000000A4:          } false 
000000A5:        }
000000A5:      }
000000A6:      ExprStatement{ 5  {}  0  {  } 
000000AA:        Call{
000000AB:          Variable{"alert" false 
000000AD:          }
000000AE:          List{ 1  { 
000000B0:            Property{"0" false 
000000B3:              LocalVariable{"a" false  -1 
000000B7:              }
000000B7:            } }  false 
000000B8:          } false 
000000B9:        }
000000B9:      }
000000BA:      ExprStatement{ 6  {}  0  {  } 
000000BE:        Call{
000000BF:          Variable{"alert" false 
000000C1:          }
000000C2:          List{ 1  { 
000000C4:            Property{"0.0" false 
000000CF:              LocalVariable{"a" false  -1 
000000D3:              }
000000D3:            } }  false 
000000D4:          } false 
000000D5:        }
000000D5:      }
000000D6:      ExprStatement{ 7  {}  0  {  } 
000000DA:        Call{
000000DB:          Variable{"alert" false 
000000DD:          }
000000DE:          List{ 1  { 
000000E0:            Property{"00" false 
000000E9:              LocalVariable{"a" false  -1 
000000ED:              }
000000ED:            } }  false 
000000EE:          } false 
000000EF:        }
000000EF:      }
Как видно, с точки зрения компилятора строки 2-5 эквивалентны, причем "0" - свойство локальной переменной "a".
Далее рассмотрим случай обращения к свойству объекта, как к элементу массива:
Код:
alert(app["version"]);  // 3.5
alert(app.version);       // 3.5
Все тоже прекрасно работает. Генерируемый код:
Код:
000000F1:      ExprStatement{ 9  {}  0  {  } 
000000F5:        Call{
000000F6:          Variable{"alert" false 
000000F8:          }
000000F9:          List{ 1  { 
000000FB:            Property{"version" false 
0000010E:              Variable{"app" false 
00000118:              }
00000118:            } }  false 
00000119:          } false 
0000011A:        }
0000011A:      }
0000011B:      ExprStatement{ 10  {}  0  {  } 
0000011F:        Call{
00000120:          Variable{"alert" false 
00000122:          }
00000123:          List{ 1  { 
00000125:            Property{"version" false 
00000128:              Variable{"app" false 
0000012A:              }
0000012A:            } }  false 
0000012B:          } false 
0000012C:        }
0000012C:      }
 

Ghost in shell

Топикстартер
15 лет на форуме
Сообщения
244
Реакции
12
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

см. документацию по объектной модели. а то всю ее тут переписывать форума не хватит
в документации примеров маловато. Зачем всю? У меня ограниченные потребности.
перебрать все объекты, те, что подходят по цвету, закинуть в массив
А как их перебрать? Подсчитать количество на слое, затем for с нужным количеством циклов (он же номер в массиве векторных объектов), сравнение каждого объекта с цветом абриса и выделение совпавших по цвету? Затем перенос на другой слой.
 

Ghost in shell

Топикстартер
15 лет на форуме
Сообщения
244
Реакции
12
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Почему-то неработает перекраска объкта! Ругается на последнюю строку.
Код:
var newCMYKColor = new CMYKColor();
newCMYKColor.black = 0;
newCMYKColor.cyan = 30.4;
newCMYKColor.magenta = 32;
newCMYKColor.yellow = 0;
activeDocument.layers[0].pathItems[0].fillColor = newCMYKColor;
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

PHP:
var newCMYKColor = new CMYKColor();
newCMYKColor.black = 0;
newCMYKColor.cyan = 30.4;
newCMYKColor.magenta = 32;
newCMYKColor.yellow = 0;

var newSpot = activeDocument.spots.add(); 
newSpot.colorType = ColorModel.PROCESS;  
newSpot.color = newCMYKColor; 

var newSpotColor = new SpotColor(); 
newSpotColor.spot = newSpot; 
newSpotColor.tint = 100;

activeDocument.layers[0].pathItems[0].fillColor = newSpotColor;
 

_MBK_

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

Кстати, скрипт аналогичный топиковому уже существует: http://mf36.narod.ru/ SelectSame
 

Ghost in shell

Топикстартер
15 лет на форуме
Сообщения
244
Реакции
12
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

У меня лучше всего получается изучать программирование по работающему коду. Жаль, комментариев нет. Я для себя попробовал:
Код:
var CMYKColor_1 = new CMYKColor(); // добавляем в массив CMYKColor элемент CMYKColor_1
CMYKColor_1.black = 0;
CMYKColor_1.cyan = 30.4;
CMYKColor_1.magenta = 32;
CMYKColor_1.yellow = 0;

var Spot_1 = activeDocument.spots.add(); // добавляем в массив spots элемент Spot_1
Spot_1.colorType = ColorModel.PROCESS;  // назначаем Spot_1 цветовую модель PROCESS
Spot_1.color = CMYKColor_1; // назначаем Spot_1 цвет CMYKColor_1;

var SpotColor_1 = new SpotColor(); // добавляем в массив SpotColor элемент SpotColor_1
SpotColor_1.spot = Spot_1; // задание spot (цвета) SpotColor_1
SpotColor_1.tint = 100; // задание tint (оттенка) SpotColor_1 

activeDocument.layers[0].pathItems[0].fillColor = SpotColor_1;
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

комментарии есть в первоисточнике, то бишь Scripting Guide + подробное описание объектной модели в Object Model Viewer. но их вам почему-то упорно не хочется изучать )
 

qsedftghk

фея
15 лет на форуме
Сообщения
2 028
Реакции
1 197
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.


Не по теме:
Все хелпы по кодингу написаны таким образом, что их действительно "упорно не хочется изучать" (особенно с "нуля") и, иногда, быстрее раздербанить чей-нибудь чужой скрипт и понять как он работает, чем лазить по пдф`ам хелпа, да в Object Model Viewer. Вот реально. И, кстати, кому как удобнее, ведь... =)
 

_MBK_

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


Не по теме:
В принципе, согласен, особенно, при отсутствии примеров в хелпе. Причем, кстати, в кореловском хелпе примеры-таки есть!
 

Ghost in shell

Топикстартер
15 лет на форуме
Сообщения
244
Реакции
12
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

комментарии есть в первоисточнике, то бишь Scripting Guide + подробное описание объектной модели в Object Model Viewer. но их вам почему-то упорно не хочется изучать )
Ооо! Scripting Guide - это отдельный непечатный эпос. Скачал с офф. сайта файл "AICS2-JavaScriptGuide.pdf". Хотел закинуть описание в переводчик - фиг, файл запаролен.:) Текст не скопировать. Убил время, нашел подходящую ломалку паролей. Знать бы еще, как там обзываются команды. Программно-ориентированный переводчик не всегда помогает.
А примеры?! Нет, я понимаю, что могут не работать примеры из "самоучителей" и "уроков". Но в #30 из "AICS2-JavaScriptGuide.pdf" и он не работает. Так и не нашел, как выделять объекты определенного цвета. Как вырезать объекты - тайна (Ctrl+X). Как и вставлять (Ctrl+F). Использование сокращений лично меня очень сбивает.
Одно спасение - форумы и работающий код. Я в свое время только так и выучил микро-С.
Вот, наваял:
Код:
// конец задания цветов ---------------------------------------------------------------------------------------
// начало создания слоев ---------------------------------------------------------------------------------------
newlayer4.name = "Detali";
newlayer3 = activeDocument.layers.add();
newlayer3.name = "Solder";
newlayer2 = activeDocument.layers.add();
newlayer2.name = "Pad";
newlayer1 = activeDocument.layers.add();
newlayer1.name = "Otv";
// конец создания слоев ---------------------------------------------------------------------------------------
app.activeDocument.activeLayer = activeDocument.layers["Layer 1"]; // сделать активным слой "Layer 1".
app.activeDocument.layers["Layer 1"].hasSelectedArtwork = true; // выделяем все объекты на слое "Layer 1"
var sel = app.activeDocument.selection.length; // присваиваем переменной "sel" количество выделенных объектов
app.activeDocument.layers["Layer 1"].hasSelectedArtwork  = false; // deselect все объекты на слое Layer 1
for (i=sel; i<0; i--)
{
if (app.activeDocument.layers["Layer 1"].pathItems[i].strokeColor = Pad_11_SpotColor)
	{
???	а как выделить app.activeDocument.layers["Layer 1"].pathItems[i] ?!
	}
}
 

_MBK_

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

Вы как-то невнимательно примеры смотрите. В SelectSame:
Код:
...
var pgItems = doc.activeLayer.pageItems;
...
pgItems[i].selected = true;
...
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.

Как вырезать объекты - тайна (Ctrl+X). Как и вставлять (Ctrl+F).

вырезать app.cut(), вставлять app.paste()

без английского наверно тяжело, согласен
 

qsedftghk

фея
15 лет на форуме
Сообщения
2 028
Реакции
1 197
Ответ: Вопросы по Java Script: Создание слоя, выбор активного слоя, выделение объектов, перенос на другой слой, перекрашивание.


Не по теме:
Я ещё весь в праздниках... в строке:
Код:
if (app.activeDocument.layers["Layer 1"].pathItems[i].strokeColor = Pad_11_SpotColor)
не два ли значка "равно" должно быть? ну,
Код:
 if (app.activeDocument.layers["Layer 1"].pathItems[i].strokeColor == Pad_11_SpotColor)






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