UnitValue в ExtendScript

Так что я не могу найти, на всю жизнь, четкую разбивку компонентов объекта UnitValue в ExtendScript. Каждый источник, который я нашел, имел какое-то отношение к Adobe и не объяснял этого. Мне бы очень хотелось получить полный справочник по нему, но если никто не сможет его найти, мне нужны ответы хотя бы на несколько вопросов о нем.

Во-первых, что такое его конструкторы?
Я видел UnitValue(10,'px'), что имеет смысл, но я также видел UnitValue(20,20)
Во-вторых, как можно преобразовать одни единицы в другие?
В-третьих, как найти его значение и его единицу измерения?
Кажется, я видел uv.value, но ничего не получает единицы

И наконец, как указано в моих тегах, это для Adobe, Конечно, поскольку я никогда не видел и не слышал ни о какой другой программе, использующей ExtendScript.


person Codesmith    schedule 10.01.2013    source источник


Ответы (3)


UnitValue описан в Руководстве по Adobe JavaScript Tools.

В частности, вы создаете объект с v = new UnitValue(number, unit), где unit — строковое значение, такое как in (дюйм), mm (миллиметр), pt (точка), px (пиксель) и т. д.

Чтобы преобразовать UnitValue в фактическое число, используйте метод as, например. v.as("cm") для преобразования v в сантиметры.

person J. Peterson    schedule 19.03.2013
comment
Спасибо! Я просмотрел документацию по Photoshop, но не смог найти ничего, кроме расплывчатого описания — из книги, которую вы нашли, я нашел ее подробно описанной на страницах 230-232. - person Codesmith; 21.03.2013

Что ж, похоже, никто больше не знал, и я, наконец, кое-что понял, поэтому, пожалуй, отвечу сам:

‹Этот сайт› был немного полезен в качестве документации, но я думаю, что функции Adobe немного отличаются от него.

Главный конструктор UnitValue:

    UnitValue(numericalvalue,unit)

Я также видел альтернативу, которая принимает одну строку:

    UnitValue("42 in")

Для преобразования UnitValue поставляется с удобным методом as, который принимает единицы для преобразования (в виде строки), а затем возвращает свое измерение в этих единицах, то есть:

    UnitValue(5,'ft').as('in') === 60

(Обратите внимание, согласно найденной мной ссылке, я считаю, что метод as должен возвращать экземпляр UnitValue после преобразования в указанную единицу; однако реализация Adobe, похоже, вместо этого просто возвращает значение, поэтому я использую равенство типов оператора выше, чтобы показать метод Adobe) Для получения числового значения и единицы измерения существуют следующие два свойства:

    UnitValue.value  // number: the numerical value
    UnitValue.type  // string: the unit of measurement

Это все, что я смог найти в ходе своих исследований. Если у кого-то есть лучший ответ, опубликуйте его, и я могу его принять.

person Codesmith    schedule 11.01.2013

Что действительно интересно для меня, так это свойство baseValue, которое позволяет нам изменить систему отсчета для преобразования. Например:

var startUnit = UnitValue(500, "px");

startUnit.baseValue = UnitValue(1 / 72, "in"); // from what I can tell this is the default baseUnit value
$.writeln(v.as("in")); // returns 6.94444444444444 which is what 500px @ 72 dpi is as expressed in inches

startUnit.baseValue = UnitValue(1 / 300, "in"); // set to 300dpi
$.writeln(v.as("in")); // returns 1.66666666666667 which is what 500px @ 300 dpi is as expressed in inches

Я думаю, что baseValue по умолчанию всегда равно UnitValue(1/72, "in"), даже если для app.preferences.rulerUnits установлен любой другой тип измерения, но я особо не изучал его.

person Dave Hartman    schedule 19.07.2018
comment
Хороший вопрос, но, похоже, он больше не работает: даже с var startUnit=UnitValue(100, "px"); startUnit.baseValue = UnitValue(1 / 300, "in"); startUnit.as('in') становится 1.3888, что в точности равно 100/72. - person aexl; 16.12.2018