ПрагмаСофтСтудия 2.1
Группы в дереве окна Прорисовка, а также в функциях прорисовки
окна Функции обладают собственными системами координат. Их называют локальными. Это связано с тем, что каждая из них относится к одной определённой группе, и все они размещаются внутри корневой, глобальной системы координат. Такой системой координат наделены элемент проекта
и элементы задач
в окне Прорисовка. В результате возникает иерархия систем координат, в которой каждая локальная система координат может быть смещена, повернута и масштабирована в приделах системы координат родительской группы или глобальной системы координат, если группа расположена в окне Прорисовка непосредственно в ветви проекта
или задачи
.
На рисунке выше система координат группы Маска находится в приделах системы координат группы Бочка, относительно её смещается, поворачивается и масштабируется. При этом группа Бочка расположена в корневой ветви элемента задачи . Это заставляет её смещаться, поворачиваться и масштабироваться в глобальной системе координат.
Другая ситуация возникает, если группа расположена в окне Функции на корневом уровне функции прорисовки
.
В данном случае группа Отметка расположена на корневом уровне функции прорисовки
DrawScaleUnitTop. Система координат группы будет отталкиваться от того абсолютного смещения, угла поворота и масштаба, которые существует на момент вызова функции. Эта особенность может быть выгодно использована при прорисовке. Вы подготавливаете текущее смещение, угол поворота и масштаб, вызываете функцию, и она прорисовывает графику в том месте, под тем углом и с тем масштабом, которые вам необходимы.
Для всех групп, обладающих собственными системами координат, при выделении их в деревьях в окне Свойства отображаются приведённые ниже поля.
Опишем их в следующей таблице.
Смещение X | Позиция (координата) по оси X начала координат группы в родительской системе координат. |
Смещение Y | Позиция (координата) по оси Y начала координат группы в родительской системе координат. |
Угол | Угол поворота в градусах локальной системы координат группы относительно родительской системы координат. |
Масштаб X | Масштаб прорисовки примитивов в группе по оси X относительно масштаба существующего в родительской системе координат. |
Масштаб Y | Масштаб прорисовки примитивов в группе по оси Y относительно масштаба существующего в родительской системе координат. |
В целом принцип локальной системы координат был придуман для создания более простого и гибкого способа компоновки графики на экране. Предполагается, что вся графика разбивается на фрагменты, заключённые в отдельные, при необходимости вложенные друг в друга, группы. В последующем, если потребуется сместить, повернуть или изменить масштаб какого-либо фрагмента, то мы не изменяем примитивы, а смещаем, поворачивает или масштабируем системы координат их родительских групп.
Начало глобальной системы координат в окне Редактор обозначается маркером в виде пересекающихся зелёной и красной стрелок.
Пересечение стрелок соответствует координате 0,0 и всегда совпадает с левым нижним углом рабочей области.
Для обозначения локальных систем координат используются два маркера.
Первым маркером помечают начало координат группы, элемент которой в дереве выделен или содержит выделенный в данный момент элемент (кроме элемента группы).
В обоих случаях начало координат группы Обводка в окне Редактор будет обозначено следующим маркером.
Вторым маркером помечается начало координат родительской группы по отношению к той, которая обозначена первым маркером.
В данном случае начало координат группы Бочка будет помечено следующим маркером.
Маркер сознательно сделан бесцветным и имеет короткие лучи, чтобы не бросаться в глаза и лишь кратко обозначить место и угол поворота, от которых отсчитывается трансформация текущей активной группы. Если активная группа расположена непосредственно в ветви проекта или задачи
, то данный маркер в окне Редактор не отображается.
Существует нюанс связанный с показом обоих маркеров в случае, если режим отображения редактора установлен в значение Всё содержимое. Если содержимое некоторой группы не может быть прорисовано, то для вложенных в неё групп не будут показаны маркеры их систем координат. Продемонстрируем это на рисунке.
На рисунке выше метка активности на группе Обводка снята. Это означает, что группа неактивна, и поток выполнения при прорисовке не будет заходить внутрь группы и прорисовывать её содержимое. Но сама группа
Обводка для потока выполнения доступна, и маркер её системы координат в окне Редактор будет отображён. Он также останется на экране, если выделить примитив
Дуга или
Полосный полигон. Если же в дереве выделить группу
Самолёт или один из её элементов, то возможности показать её маркер уже не будет. Группа
Самолёт не участвует в прорисовке и вычислить абсолютное смещение и угол поворота её системы координат для показа маркера нет возможности.
Аналогичная ситуация будет наблюдаться, если активность группы Обводка в окне Свойства задана с помощью формулы, которая после вычисления возвращает значение false или, просто, содержит ошибку.
Если вы попали в описанную выше ситуацию, переключите режим отображения редактора в значение |
Как было сказано выше, для изменения позиции или угла поворота локальной системы координат группы можно воспользоваться её свойствами Смещение X, Смещение Y и Угол. Но это не наглядно. Гораздо удобнее совершать эти операции с помощью мыши в окне Редактор.
Давайте сместим локальную систему координат группы . Для этого выделите её или один из её дочерних элементов в дереве. Далее, выберите опцию главного меню {Редактор →
Смещение системы координат группы}. Указатель мыши в окне редактор примет вид
.
Опция главного меню {Редактор → |
Далее, нажмите левой кнопкой мыши в поле окна Редактор и переместите мышь в сторону.
На рисунке выше показано перемещение системы координат группы , содержащей жёлтую фигуру. Красным
квадратом обозначено место, где находилось начало координат группы до перемещения. Белая
прямая линия связывает старую и текущую позицию начала координат.
Рядом с указателем мыши отображается полупрозрачное информационное окно. Координаты x и y в нём показывают текущее смещение системы координат, т.е. текущую позицию начала координат группы в родительской системе координат. Значения dx и dy обозначают на сколько начало координат группы при перемещении было сдвинуто от своей начальной позиции.
Для окончания смещения снова нажмите левую клавишу мыши. Либо для отмены операции нажмите клавишу Esc на клавиатуре.
Для поворота локальной системы координат группы выделите её или один из её дочерних элементов в дереве. Далее, выберите опцию главного меню {Редактор →
Поворот системы координат группы}. Указатель мыши в окне редактор примет вид
.
Опция главного меню {Редактор → |
Далее, нажмите левой кнопкой мыши в поле окна Редактор и переместите мышь в сторону.
На рисунке выше показан поворот системы координат группы , содержащей жёлтую фигуру. Сектор круга, прорисованный белой
линией, визуально показывает на сколько система координат была повёрнута.
Рядом с указателем мыши отображается полупрозрачное информационное окно. Значение угол обозначает текущий угол поворота системы координат группы в родительской системе координат. Значения дельта (+) и дельта (-) указывают на сколько изменился в процессе операции угол поворота системы координат от своего начального значения. Оба значения соответствуют одинаковому углу, но измеренному в разных направлениях.
На приведённом рисунке перед началом операции система координат группы была повёрнута на угол 10°. В результата, при повороте на 20°, текущий угол поворота стал равным 30°.
По умолчанию системы координат групп поворачиваются на целое значение угла. Это связано с тем, что опция главного меню {Редактор → Целочисленность → Целочисленный поворот плоскости группы} включена. Отключите её, если вам необходимо иметь действительный текущий угол поворота с дробной частью. Сделать это можно как до операции поворота, так и во время её.
Для окончания смещения снова нажмите левую клавишу мыши. Либо для отмены операции нажмите клавишу Esc на клавиатуре.
Масштабирование локальных систем координат групп с помощью мыши в окне Редактор не предусмотрено. Масштаб необходимо задавать в окне Свойства с помощью полей свойств Масштаб X и Масштаб Y. Он представляется числом с плавающей точкой величиной всегда больше 0. Значение 1.0 соответствует единичному масштабу или, говоря иначе, отсутствию масштабирования. Т.е. значение 1.0 аналогично записи 1:1. Координатная ось при этом будет повторять масштаб действующий на данную ось в родительской системе координат. Запись 0.5 означает уменьшение масштаба в 2 раза и аналогична записи 1:2. Соответственно, для увеличения масштаба в 2 раза необходимо указать значение 2.0.
На масштаб действующий в системе координат влияет не только масштаб родительской системы координат, но и наличие поворота данной координатной плоскости относительно родительской. Это может привести к искривлению координатных четвертей и координатной сетки в них. При этом оси системы координат визуально уже могут не быть перпендикулярными друг другу.
Более подробно показанный случай будет рассмотрен как пример в конце данной статьи.
Рядом с окном Редактор находится панель инструментов, дублирующая некоторые опции главного меню Редактор. По умолчанию она расположена под окном Редактор, но может находиться и над ним, что управляется опциями контекстного меню панели инструментов.
Нас интересуют кнопки, обозначенные на рисунке красным прямоугольником.
Кнопка запускает операцию перемещения локальной системы координат группы
и аналогична выбору опции главного меню {Редактор →
Смещение системы координат группы}.
Кнопка позволяет изменить угол поворота локальной системы координат и дублирует опцию главного меню {Редактор →
Поворот системы координат группы}.
Приведём пример показывающий, как вычисляется конечное абсолютное смещение и угол поворота локальной системы координат группы .
Пусть элементы в окне Прорисовка расположены следующим образом.
Пусть группа Бочка относительно глобальной системы координат смещена на (x=70, y=40) пикселей и повёрнута на угол -20°. А группа
Самолёт имеет смещение (x=30, y=75) пикселей и угол поворота 90°. В результате в окне Редактор мы увидим следующую ситуацию.
Чтобы было понятнее, пометим системы координат и нанесём смещения и углы.
Результирующее абсолютное смещение системы координат группы Самолёт будет равно примерно (x=123.8, y=100.1) пикселей. Абсолютный угол поворота при этом будет равен 70°.
Рассмотрим более подробно случай, показанный при описании масштабирования систем координат. Он соответствует следующему расположению элементов в окне Прорисовка.
Для большей наглядности, чтобы показать, как влияет поворот и масштабирование систем координат на прорисовку примитивов, в Группу 2 мы добавили окружность и выделили её.
Группы Группа 1 и
Группа 2 имеют одинаковое смещение и угол поворота, равные 70,0 и 30°, соответственно. Также для
Группы 1 задан масштаб 2.0 по оси X. Окно Редактор при этом примет следующий вид.
Чтобы было понятнее, пометим системы координат и нанесём смещения и углы.
Как мы видим, Группа 2 была смещена в плоскости родительской группы на 140 пикселей. Это связано с масштабом 2.0 заданным для оси X
Группы 1. Этот масштаб также влияет на саму
Группу 2. Её система координат, которая повёрнута на 30°, визуально имеет угол поворота ~17°. При этом угол между осями в первой четверти превышает 90°, и окружность стала похожа на эллипс. Для большей наглядности мы обозначили оси проходящие через центр окружности оранжевыми
пунктирными линиями.