JavaScript и автоматизация

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

WereVarg

Участник
Сообщения
571
Реакции
0
Ответ: JavaScript и автоматизация

Возрадуемся братья!! в 8ой фотошопе появилось более подробное описание ява-скрипта, а также описаны возможности создания диалоговых окон. Радость то какая!! теперь добавлю в свой скрипт по собиранию виньеток возможность первоначального опроса юзера на предмет "чего желаете".
Сперва написал вопрос насчет запоминания настроек в каком нибудь конфиг файле, но потом дочитал референс до конца (всё как в старые времена на Паскале - readln writeln и т.д.).

А вот как оригинально Фотошопа интерпретирует русский язык из одного и того же скрипта в разных зонах интерфейса (при том сперва он даже в заголовке панели - та что очерчена линией понимал русский нормально).
Будем пинать.
 

Вложения

  • russ.gif
    russ.gif
    7.8 КБ · Просм.: 1 153

-=CMYK=-

Забанен
Сообщения
3 320
Реакции
2
Ответ: JavaScript и автоматизация

А на VB сразу была возможность работать с любыми окнами и диалогами. А настройки сохранять в базе данных. Access'овской, например. Да и масса API виндовской доступна.

В 8-ой версии объектная библиоткеа обрела несколько нужных объектов, например textfont и свойство fonts объекта application. Однако кретинская Адобская система обращения с именем шрифта и главное стилями - разлагается и смердит по сей час.
 

WereVarg

Участник
Сообщения
571
Реакции
0
Ответ: JavaScript и автоматизация

Некогда тут спрашивали почему мол фотошопа двигает слои в поинтах. Встретился с подобным, когда тестировал скрипт в 8ой фотошопе. Проблема появляется когда координаты расчитываются просто цифрами типа 5 + 5 (или переменными с этими цифрами) и устраняется, когда один из участников является параметром файла или слоя в юнитах (типа нашдок.height), который и обьясняет фотошопе что во всем выражении все таки юниты. (хорошо что мне действительно нужны габариты документа)

Имха думаю можно тупо вставлять + док.хейт - док.хейт или будем рыться дальше в хелпе.
 

-=CMYK=-

Забанен
Сообщения
3 320
Реакции
2
Ответ: JavaScript и автоматизация

Продемонстрируйте образец кода с найденной фитчей.
 

WereVarg

Участник
Сообщения
571
Реакции
0
Ответ: JavaScript и автоматизация

С найденым микробагом?
Вообще по здравому размышлению проблема решается при заявлении переменной сразу нужного типа (только не уверен есть ли это в ява-скрипте)
типа var X as Units

так работает хорошо (при обращении к ширине одного из файлов фонВ)

Код:
var x = FonV.width/2-(N_doc - Math.floor(N_doc/Rjad)*Rjad)*(Small_width+0.5)-2.5;

При отсутствии части FonV.width/2 цифры выдает правильные для оставшегося выражения значение (проверял по алерту), но смещает в поинтах после вызова

Код:
newLayerSetRef.translate(-x,-y);
 

-=CMYK=-

Забанен
Сообщения
3 320
Реакции
2
Ответ: JavaScript и автоматизация

Короче, я не проверял что там толик777 нашел за проблему с транслейтом, а вашу находку проверил.

Вот кода басика:

Код:
Private Sub Command1_Click()
Dim a As New Photoshop.Application
Dim d As Photoshop.Document
Dim l As Photoshop.ArtLayer

a.Preferences.RulerUnits = psCM
Set d = a.ActiveDocument
Set l = d.ActiveLayer
l.Translate 1, 1

End Sub

Работает как из пушки - на 1 см вправо и на 1 см вниз перемещает слой.

Код явы

Код:
var strtRulerUnits = preferences.rulerUnits;
if (strtRulerUnits != Units.CM)
{
  preferences.rulerUnits = Units.CM;
}

var docRef = activeDocument;
var layRef = docRef.activeLayer

layRef.translate (1, 1);

Совершенно тоже самое - на 1 см туда и на 1 туда же.

Что у вас там за проблема с пунктами я не знаю. У меня не воспроизводится.
 

WereVarg

Участник
Сообщения
571
Реакции
0
Ответ: JavaScript и автоматизация

Создайте документ порядка 10 см с любым разрешением
для наблюдения включите см в линейке
на втором слое нарисуйте квадратик например и запустите вот это
(для наглядности вставлен алерт)
Код:
var originalUnit = preferences.rulerUnits;
preferences.rulerUnits = Units.CM;
var Small_width = 3;
var newLayerSetRef = activeDocument.artLayers[0];

var x = Math.floor(4/Small_width)+activeDocument.height-activeDocument.height;
var y = Math.floor(7/Small_width)+activeDocument.height-activeDocument.height;
alert (x+' '+y);
newLayerSetRef.translate(x,y);
preferences.rulerUnits = originalUnit;

фотошопа показывает в окошке 1 см и 2 см и на них же двигает
в случае же
Код:
var originalUnit = preferences.rulerUnits;
preferences.rulerUnits = Units.CM;
var Small_width = 3;
var newLayerSetRef = activeDocument.artLayers[0];

var x = Math.floor(4/Small_width);
var y = Math.floor(7/Small_width);
alert (x+' '+y);
newLayerSetRef.translate(x,y);
preferences.rulerUnits = originalUnit;

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

Второй вывод - что-то Adobe в натуре распоясалось (пойду отправлять им свой диск "как рекомендует ЕУЛА"). 'cooll)' Или подождем 8.5

p.s. траблема возникает только в 8ой фотошопе
в 7ой оба метода работают корректно
 

-=CMYK=-

Забанен
Сообщения
3 320
Реакции
2
Ответ: JavaScript и автоматизация

У вас какие-то методы проведения экспериментов непонятные. Зачем городить какие-то вычисления если нужно четко определить на какое расстояние сдвигается объект. Используйте единицы в translate и все станет ясно сразу.

8-ка сдвигает на 1 пункт, на 0,035278 см. Поскольку в скриптинге 8-ке появилось свойство bounds вы это легко можете узнать вписав строку

alert (newLayerSetRef.bounds);

До и после translate.
 

WereVarg

Участник
Сообщения
571
Реакции
0
Ответ: JavaScript и автоматизация

Так вот вопрос теперь мой и имха толика777 звучал в том, какого икс фотошопа двигает в пунктах, когда настройки стоят в см (при том в особых случаях). Не по людски это.

Огород я нагородил чтобы показать в какой ситуации идет смещение в пунктах (а ситуация не высосана из пальца - это подобное моему расчету формулы смещения виньетки в зависимости от ее расположения в ряду).
 

Duran

Участник
Сообщения
174
Реакции
0
Ответ: JavaScript и автоматизация

Народ, можно вопрос ?
Я так понял, что все огороды мастяться вокруг виньеток.
Зачем двигать что-то в шаблоне ?
Никакой скрипт не сможет симпотишно организовать размещение портретов по шаблону.
Единственное, что действительно вызывает проблему- это копирование текстового слоя из 1-го активного документа в другой активный документ, причем, копирование не должно быть привязано к имени файла. Например, через индекс открытия (скопировать слой из 1 в -1 например).
 

-=CMYK=-

Забанен
Сообщения
3 320
Реакции
2
Ответ: JavaScript и автоматизация

Все верно. Вы нашли баг. Никакой не микро-баг, а настоящий косяк скриптинга Фотошопа 8. Уже обсуждалось: http://www.adobeforums.com/cgi-bin/webx?13@151.yH1Kbil29b8.2@.2cce4198/0 и тот же самый обход был найден.

Michael Adler - 03:38pm Nov 10 сказал(а):
I found the same bug in JavaScript for Photoshop CS. translate() doesn't seem to honor the ruler unit preferences. I came up with a hack that works in JavaScript, but it is ugly:
Код:
    hPos = doc.width - doc.width + hPos; 
    vPos = doc.height - doc.height + vPos;    
    doc.activeLayer.translate(hPos, vPos);

The doc.width - doc.width hack forces the type of hPos to a type that is specific to the ruler units. translate() honors that type.

There must be a better way to force the type in JavaScript. Any suggestions?
 

-=CMYK=-

Забанен
Сообщения
3 320
Реакции
2
Ответ: JavaScript и автоматизация

Duran сказал(а):
Народ, можно вопрос ?
Я так понял, что все огороды мастяться вокруг виньеток.
Зачем двигать что-то в шаблоне ?
Никакой скрипт не сможет симпотишно организовать размещение портретов по шаблону.
Единственное, что действительно вызывает проблему- это копирование текстового слоя из 1-го активного документа в другой активный документ, причем, копирование не должно быть привязано к имени файла. Например, через индекс открытия (скопировать слой из 1 в -1 например).

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

А почему это вызывает проблему?
 

Duran

Участник
Сообщения
174
Реакции
0
Ответ: JavaScript и автоматизация

Все может быть..., а может и не быть :).
Вот не верю я в симпотишность скриптовых виньеткомест :)

Про текст проблема отпала.
1-на буковка в скрипте была русской :)
 

-=CMYK=-

Забанен
Сообщения
3 320
Реакции
2
Ответ: JavaScript и автоматизация

Возжгите жертву, может поможет поверить.
 

WereVarg

Участник
Сообщения
571
Реакции
0
Ответ: JavaScript и автоматизация

Мой скрипт расставляет виньетки в ряды по сколько вы укажете штук с нужным вам интервалом начиная от левого края с задаными смещениями (перед этим компонуя в леерсеты рамочки, портрет и тектсовую подпись на основе имени файла и заданных стилей). Когда все утрясется то фотограф будет готовить фотографии с постоянной раскадровкой и портреты будут вставляться под его запросы и уже от него зависит, будет ли он гемороится потом с положением портрета. Хотя процес этот занимает секунды так как портреты расположены в несвязанной маске и подвинуть их не составляет труда. Вся же кучка как я сказал выше расположена в леерсетах, которые также не сложно подвинуть.
В разработке находится скрипт, который расставляет портретики в зависимости от первого скомпонованого вами. (то есть вы не указываете смещения от угла в цифрах).
Также в планах распределение портретиков шахматкой, спиральками и прочей фигней, которую может описать математика.
А буде надо так и рандомом %).

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

Фотограф

Участник
Сообщения
15
Реакции
0
Ответ: JavaScript и автоматизация

WereVarg сказал(а):
Мой скрипт расставляет виньетки в ряды по сколько вы укажете штук с нужным вам интервалом начиная от левого края с задаными смещениями (перед этим компонуя в леерсеты рамочки, портрет и тектсовую подпись на основе имени файла и заданных стилей). Когда все утрясется то фотограф будет готовить фотографии с постоянной раскадровкой и портреты будут вставляться под его запросы и уже от него зависит, будет ли он гемороится потом с положением портрета. Хотя процес этот занимает секунды так как портреты расположены в несвязанной маске и подвинуть их не составляет труда. Вся же кучка как я сказал выше расположена в леерсетах, которые также не сложно подвинуть.
В разработке находится скрипт, который расставляет портретики в зависимости от первого скомпонованого вами. (то есть вы не указываете смещения от угла в цифрах).
Также в планах распределение портретиков шахматкой, спиральками и прочей фигней, которую может описать математика.
А буде надо так и рандомом %).

маленькое отступление - чтоб легче возиться со скриптами, пишите экшины, которые просто вызывают нужный скрипт, и привязывайте им горячие клавиши.
Хороший скрипт,может поделишься?
 

WereVarg

Участник
Сообщения
571
Реакции
0
Ответ: JavaScript и автоматизация

Фотограф сказал(а):
Хороший скрипт,может поделишься?
Если б я сам в это влез по доброй воле, то возможно, а то люди попросили за деньги, чем подкинули хорошую идею.
 

iv@n

Участник
Сообщения
25
Реакции
0
Ответ: JavaScript и автоматизация

А если рассмотреть вопрос о покупке ЗНТОГО скрипта,реально???
 

Фотограф

Участник
Сообщения
15
Реакции
0
Ответ: JavaScript и автоматизация

Если б я сам в это влез по доброй воле, то возможно, а то люди попросили за деньги, чем подкинули хорошую идею.
Можно и за деньги, только за какие? :rolleyes:
 

WereVarg

Участник
Сообщения
571
Реакции
0
Ответ: JavaScript и автоматизация

Пишите на мыло через форум свои координаты. А также пожелания по задачам скрипта.
 
Статус
Закрыто для дальнейших ответов.