Угловые поля

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

Угол поля

Поле угла с редактором

Свернутое поле угла

Создание

JSON

{
  "type": "example_angle",
  "message0": "angle: %1",
  "args0": [
    {
      "type": "field_angle",
      "name": "FIELDNAME",
      "angle": 90
    }
  ]
}

JavaScript

Blockly.Blocks['example_angle'] = {
  init: function() {
    this.appendDummyInput()
        .appendField('angle:')
        .appendField(new Blockly.FieldAngle(90), 'FIELDNAME');
  }
};

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

Сериализация

JSON

JSON для поля угла выглядит так:

{
  "fields": {
    "FIELDNAME": 0
  }
}

Где FIELDNAME — это строка, ссылающаяся на поле угла, а значение — это значение, которое применяется к полю. Значение подчиняется тем же правилам, что и значение конструктора.

XML

XML для поля угла выглядит так:

<field name="FIELDNAME">0</field>

Где атрибут name содержит строку, ссылающуюся на поле угла, а внутренний текст — это значение, которое следует применить к полю. Внутреннее текстовое значение подчиняется тем же правилам, что и значение конструктора.

Кастомизация

привязка

Свойство Blockly.FieldAngle.ROUND изменяет значения, к которым «привязывается» средство выбора угла при использовании мыши.

Вот пример со значением ROUND , равным 70:

Поле угла со значением ROUND, равным 70.

Свойство ROUND по умолчанию имеет значение 15. Установите его в 0, если вы хотите отключить привязку.

Это глобальное свойство, поэтому при его установке будут изменяться все поля угла.

Направленность

Свойство Blockly.FieldAngle.CLOCKWISE изменяет направление увеличения значения угла. Установка для этого значения значения true приводит к увеличению угла при перемещении селектора по часовой стрелке, установка значения false приводит к увеличению угла при перемещении селектора против часовой стрелки.

ЧАСОВОЙ СТРЕЛКЕ установлено значение true

Поле угла, для параметра ЧАСОВАЯ СТРЕЛКА установлено значение true.

ЧАСОВОЙ СТРЕЛКЕ установлено значение false

Поле угла, для которого значение «ЧАСОВАЯ СТРЕЛКА» равно false.

Свойство CLOCKWISE по умолчанию имеет значение false , что означает, что движение против часовой стрелки приведет к увеличению угла.

Это глобальное свойство, поэтому при его установке будут изменяться все поля угла.

Нулевая позиция

Свойство Blockly.FieldAngle.OFFSET устанавливает, где находится 0 градусов. По умолчанию ноль градусов выравнивается по положительной оси X (вправо), а затем это свойство «смещает» это положение на несколько градусов.

Нулевой указатель угла справа

Нулевой переключатель угла вверху

Свойство OFFSET по умолчанию равно 0, что означает, что ноль градусов выровнен по положительной оси X.

Это глобальное свойство, поэтому при его установке будут изменяться все поля угла.

Диапазон

Свойство Blockly.FieldAngle.WRAP задает диапазон значений. Диапазон значений равен (-360 + WRAP, WRAP) . Это означает, что значение WRAP 360 даст диапазон (0, 359.9) , а значение WRAP 180 даст диапазон (-179.9, 180) .

Выбор угла со значением обтекания 180.

Свойство WRAP по умолчанию имеет значение 360, что означает, что диапазон поля равен (0, 359.9) .

Это глобальное свойство, поэтому при его установке будут изменяться все поля угла.

Размер выбора угла

Свойство Blockly.FieldAngle.HALF изменяет размер средства выбора угла. Это значение определяет радиус внешнего круга в пикселях.

Выбор угла с размером редактора по умолчанию

Выбор угла с большим редактором

Свойство HALF по умолчанию равно 50.

Это глобальное свойство, поэтому при его установке будут изменяться все поля угла.

Общие режимы

Направление и нулевое положение можно использовать вместе для создания забавных комбинаций. Вот два распространенных:

Транспортир

0 градусов – вправо, 90 градусов – вверх.

Blockly.FieldAngle.CLOCKWISE = false;
Blockly.FieldAngle.OFFSET = 0;

Инструмент выбора угла в форме транспортира

Компас

0 градусов – вверх, 90 градусов – вправо.

Blockly.FieldAngle.CLOCKWISE = true;
Blockly.FieldAngle.OFFSET = 90;

Инструмент выбора угла, выполненный в виде компаса

Создание валидатора угла

Значением поля угла является число, поэтому любые валидаторы должны принимать число и возвращать число, null или undefined .

Вот пример валидатора, который заставляет значение быть кратным 30:

function(newValue) {
    return Math.round(newValue / 30) * 30;
}

Выбор угла с валидатором

Обратите внимание, что свойство [ROUND](#snapping) поля угла по-прежнему установлено на 15, поэтому графические элементы поля отображают числа, кратные 15, а не 30.