В большинстве  объектов Adobe  свойства координат хранятся в типе UnitValue, который позволяет извлекать значения в удобных единицах измерения, дальше попытаюсь рассказать об использовании.

Для правильной работы прежде всего необходимо задать коэффициент базовой величины:

UnitValue.baseUnit = UnitValue (1/300, "in"); //-- Для правильной работы .as('...')

Значение 300, я так полагаю это DPI, поэтому будет наверное лучше указать в зависимости от DPI документа, но мне нужно именно 300, так как с таким разрешением я вывожу на принтер. Для экрана соответственно нужно 72. Дальше уже можно работать с конвертацией сантиметров в пиксели, например:

val12 = new UnitValue (12, "cm"); //-- создаем переменную типа UnitValue  в сантиметрах 
alert(val12.as('px')); //-- выводим преобразованную величину.

Ну, или узнать ширину слоя в пикселях:

var _docRef=app.activeDocument;
var layerW=new UnitValue(_docRef.activeLayer.bounds[2] -_docRef.activeLayer.bounds[0], 'px');

При попытке напрямую получить значение, которое хранится в UnitValue будет отдано значение с единицами измерения.

Например:

alert(layerW)

Поэтому будут глюки при вычислениях. Если нужно просто получить значение, не приводя ни к каким единицам, то следует поступать так:

alert(layerW.value);
Вот в общем то и всё

3 комментария

Navi1982 5 сентября 2015 - 18:11

Я не сишник, но тоже приходится работать с Photoshop’ом, через скрипты из Corel Draw… Скрипты пишу, естественно на VBA (Visual Basic for Applications). Так вот, нужную единицу измерения документа можно установить перед использованием других методов/процедур/функций. Ну, и этично было бы не плохо в конце процедуры вернуть исходное значение свойства.
Пример:
OldUnits = psApp.Preferences.RulerUnits
psApp.Preferences.RulerUnits = psPixels
‘ здесь манипуляции с размерами объектов
psApp.Preferences.RulerUnits = OldUnits
или одно из возможных значений: psPixels = 1 / psInches = 2 / psCM = 3 / psMM = 4 / psPoints = 5 / psPicas = 6 / psPercent = 7
И не заморачиваться с переводами размеров. Разве что, если приходиться переводить царские локти в одну из единиц СИ — тогда ваш метод хорош ;D

Reply
Pavelk 6 сентября 2015 - 11:28

Благодарю за дополнение!
Действительно, так можно сделать, но всё мерять в пикселях не всегда возможно.
Поэтому без UnitValue.baseUnit перевод из пикселей в сантиметры будет давать не верные значений (видимо берётся какой-то иной разрешение)

Reply
WladL 27 декабря 2016 - 1:56

Ибо писано в писании :
UnitValue.baseUnit =
UnitValue object
that defines the size of one pixel, or a total size to use as a
base for percentage values

Reply

Leave a Comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

You may also like