Так что я не могу найти, на всю жизнь, четкую разбивку компонентов объекта UnitValue в ExtendScript. Каждый источник, который я нашел, имел какое-то отношение к Adobe и не объяснял этого. Мне бы очень хотелось получить полный справочник по нему, но если никто не сможет его найти, мне нужны ответы хотя бы на несколько вопросов о нем.
Во-первых, что такое его конструкторы?
Я видел UnitValue(10,'px')
, что имеет смысл, но я также видел UnitValue(20,20)
Во-вторых, как можно преобразовать одни единицы в другие?
В-третьих, как найти его значение и его единицу измерения?
Кажется, я видел uv.value
, но ничего не получает единицы
И наконец, как указано в моих тегах, это для Adobe, Конечно, поскольку я никогда не видел и не слышал ни о какой другой программе, использующей ExtendScript.
UnitValue в ExtendScript
Ответы (3)
UnitValue описан в Руководстве по Adobe JavaScript Tools.
В частности, вы создаете объект с v = new UnitValue(number, unit)
, где unit
— строковое значение, такое как in
(дюйм), mm
(миллиметр), pt
(точка), px
(пиксель) и т. д.
Чтобы преобразовать UnitValue в фактическое число, используйте метод as
, например. v.as("cm")
для преобразования v
в сантиметры.
Что ж, похоже, никто больше не знал, и я, наконец, кое-что понял, поэтому, пожалуй, отвечу сам:
‹Этот сайт› был немного полезен в качестве документации, но я думаю, что функции 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
Это все, что я смог найти в ходе своих исследований. Если у кого-то есть лучший ответ, опубликуйте его, и я могу его принять.
Что действительно интересно для меня, так это свойство 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 установлен любой другой тип измерения, но я особо не изучал его.
var startUnit=UnitValue(100, "px"); startUnit.baseValue = UnitValue(1 / 300, "in");
startUnit.as('in')
становится 1.3888
, что в точности равно 100/72
.
- person aexl; 16.12.2018