И вновь скриптинг... дубликат слоя и размещение.

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

KeS))

Участник
Топикстартер
Сообщения
128
Реакции
0
Добрый день.
Задача: описать скриптом, дублирование слоя и затем последующее его размещение по документу.
к примеру из
A - -
- - -
- - -
сделать:
A A A
A A A
A A A

где - А - слой, а "-" - пустое пространство файла.

в частности интересует размещения в плане позиционировая этого слоя(слоев)?!
пример описания или описание функции с параметрами.
 

Zest

Забанен
Сообщения
2 967
Реакции
70
Ответ: И вновь скриптинг... дубликат слоя и размещение.

Метод artLayer.translate(blah-blah-blah). В документации все есть. Там же duplicate. Возвращает референс на объект (artLayer).

Точно, там относительное смещение.

translate

([deltaX]
[, deltaY])

UnitValue
UnitValue

Moves the layer the specified
amount (in pixels) relative to its
current position.

---

duplicate

([relativeObject]
[, insertionLocation])

object (Layer)
ElementPlacement
object
(Layer)

Creates a duplicate of the object
on the screen.

Параметры дупликейта - слой относительно которого разместить.

dupRef = layRef.duplicate();
dupRef.translate(dX, dY);

Кажется транслейт нужно в пикселы переводить из-за известного бага. На всякий случай можете не проверять - сразу переводить через разрешение.
 

Zest

Забанен
Сообщения
2 967
Реакции
70
Ответ: И вновь скриптинг... дубликат слоя и размещение.

Забыл уже как на яве забацать в одну строку. Но по идеет дуп возвращает реф на объект и можно сразу обозначить:

layRef.duplicate().translate(dX, dY);

Но тогда рефа не будет.

Соответственно для размещения рядами (2 by 3) надо два цикла вкрутить:

for(var i=0; i<2; i++){for(var j=0; j<3; j++){ тут шняга }}
 

KeS))

Участник
Топикстартер
Сообщения
128
Реакции
0
Ответ: И вновь скриптинг... дубликат слоя и размещение.

Ага. вроде оно.... буду пробовать...
2 и 3 тоже условные единицы... хочу сделать зависимость от значения по ширине и высоте будущего документа... чтобы подобную "сетку" шоп сам раскладывал.

ps. можно не описывать "золотые" руки производства... потому приходится извращаться. Как всегда СПАСИБО за помощь.
 

Zest

Забанен
Сообщения
2 967
Реакции
70
Ответ: И вновь скриптинг... дубликат слоя и размещение.

Количество рядов и колонок от ширины и высоты конечного документа? Останутся поля.

Вообще это элементарно делается в экшне: дублируется, затем команда Reveall all и в финале размер документа Imagе Size
 

KeS))

Участник
Топикстартер
Сообщения
128
Реакции
0
Ответ: И вновь скриптинг... дубликат слоя и размещение.

Так вот и хочу чтобы поля не оставались...

Reveall ???

p.s.: Имеем исходный документ, к примеру А5, при помощи скрипта располагаю его в зависимости от максимальной ширины, но не четко по ширине, а как ляжет по высоте и ширине от А5-ого. Правда думаю не проще ли от количества??? чтобы тоже окргулялось до целого ряда.

Либо вводить максимальную ширину и высоту будущего документа, велечины за которые "сетка" не должна выходить, либо уже брать от кол-ва... при вводи ширина материала, длина - сколько выйдет...

подумываю о паттернах.
 

Zest

Забанен
Сообщения
2 967
Реакции
70
Ответ: И вновь скриптинг... дубликат слоя и размещение.

Скрипт еще не написали что ли?
 

Zest

Забанен
Сообщения
2 967
Реакции
70
Ответ: И вновь скриптинг... дубликат слоя и размещение.

Да, с экшном облом. В процентах нельзя задать дистанцию. Вот скрипт:

PHP:
var originalRulerUnits = preferences.rulerUnits;
// временно переключаем на пункты чтобы избежать гемора с багом translate
preferences.rulerUnits = Units.POINTS;

var docRef = app.activeDocument;
var h = docRef.height;
var w = docRef.width;
var layRef = docRef.activeLayer;

// данные о количестве столбцов и строк можно брать из диалога
// который еще надо сделать. А можно просто в коде менять, вот тут:
var cols = 2; // столбцы
var rows = 3; // строки

for(var i=0; i<cols; i++){
	for(var j=0; j<rows; j++){
		var dupRef = layRef.duplicate();
		dupRef.translate(i*w,j*h);
	}
} 

docRef.revealAll();
docRef.flatten();

preferences.rulerUnits = originalRulerUnits;

В финале надо воткнуть docRef.resizeImage([width] [, height] [, resolution] [, resampleMethod])
 

KeS))

Участник
Топикстартер
Сообщения
128
Реакции
0
Ответ: И вновь скриптинг... дубликат слоя и размещение.

Спасибо, что-то подобное уже есть, и даже диалоговое окно...
но лень матушка хочет чтобы вводилось параметры приближенно конечного документа, и исходя из данных ограничений высчитывалось кол-во строк и столбцов. а затем кропилось по формату... хотя как сказать... чтобы не кропилось а заканчивался цикл исходя из целых количест ширин и высот.

т.е. к примеру если мы имеем формат исходного файла А4, а вводимый блок допустим 137x60 см.
то... в итоге должны получить 126 (21*6) на 59,4 (29,7*2) см... Вводимые параметры - это параметры блока 137 и 60.

думаю скоро доделаю, тогда выложу на ваш суд).
 

KeS))

Участник
Топикстартер
Сообщения
128
Реакции
0
Ответ: И вновь скриптинг... дубликат слоя и размещение.

p.s.: кстати, застопорился ещё на том чтобы четные(точнее решеткой/мозайкиой) по позиции слои как по горизонтали так и по вертикали крутились на 180%. - заморочка из бочки... цикл в цикле одной процедуры.
 

Zest

Забанен
Сообщения
2 967
Реакции
70
Ответ: И вновь скриптинг... дубликат слоя и размещение.

Делите каждый исходный размер на заданный и округляете до целого. Получите количество строк и столбцов. Эти данные используете в цикле и на их инкремент умножаете соответственно заданные размеры.

В чем проблема-то с поворотом. Или не знаете как чет-нечет определять? Кстати, я тоже не знаю как на яве. На басике mod.

0 mod 2 = 0
1 mod 2 = 1
2 mod 2 = 0
3 mod 2 = 1
4 mod 2 = 0
...
etc.
 
Статус
Закрыто для дальнейших ответов.