очистка носителя изображения производится даже в том случае, если он пуст;
производится проверка, заполненность носителя изображения, чтобы избежать бесполезной дополнительной очистки.
Второй вариант означает, что носитель изображения очищается лишь в случае необходимости. Обычно такая ситуация возникает, когда носитель изображения не пуст (т. е. когда запись «заполненность носителя изображения» в таблице состояния станции имеет значение НЕ ПУСТ). Запись «носитель изображения пуст» в таблице состояния станции устанавливается равной НЕ ПУСТ, если выходные данные были направлены на устройство. Значение НЕ ПУСТ может быть установлено даже в том случае, если выходные данные не появились на носителе изображения (например, примитив ОПВ, который в результате операции отсечения на устройстве был полностью исключен).
Оба варианта очистки носителя изображения доступны пользователю через функцию ОЧИСТИТЬ СТАНЦИЮ. Второй вариант используется также в функциях ОБНОВИТЬ ИЗОБРЖЕНИЕ НА СТАНЦИИ и ПЕРЕРИСОВАТЬ ВСЕ СЕГМЕНТЫ на СТАНЦИИ.
Удаление примитивов, находящихся вне сегментов
Е Удаление примитивов, находящихся вне сегментов, производится в следующих ситуациях:
при обращении к функциям ЯГС:
ОЧИСТИТЬ СТАНЦИЮ;
ПЕРЕРИСОВАТЬ ВСЕ СЕГМЕНТЫ НА СТАНЦИИ;
ОБНОВИТЬ ИЗОБРАЖЕНИЕ НА СТАНЦИИ,
если параметр «флаг повторной генерации» имеет значение ВЫПОЛНИТЬ и если поле «при обновлении необходим вывод нового кадра» в таблице состояния станции имеет значение ДА.
ЗАДАТЬ РЕЖИМ ЗАДЕРЖКИ, если параметр «режим неявной повторной генерации» имеет значение РАЗРЕШЕНО и поле «при обновлении необходим вывод нового кадра» имеет значение ДА;
если необходима неявная повторная генерация и параметр «режим неявной повторной генерации» имеет значение РАЗРЕШЕНО;
если любая из вышеописанных ситуаций возникает как результат работы функции ИНТЕРПРЕТИРОВАТЬ ЗАПИСЬ
.Передача сообщений на станцию
Функция СООБЩЕНИЕ позволяет передать на станцию строку литер. Прикладная программа не может управлять расположением и формой представления строки литер, и в конкретной реализации допускается помещать устройство, не входящее в состав станции, но связанное с ней.
С и с т е м ы координат и преобразования
Е Преобразования нормирования
ЕЕ В ЯГС прикладной программист может строить графическое изображение из отдельных частей, каждая из которых концептуально определяется в своей собственной системе мировых координат (МК). Взаимное расположение этих частей описывается в едином для всех пространстве нормированных координат (НК), в которое отображаются все заданные системы мировых координат. Набор преобразований нормирования определяет преобразования из систем мировых координат в единое пространство нормированных координат, которое можно рассматривать как независимый от станций абстрактный носитель изображения. Такое нормированное изображение можно запомнить и затем подвергнуть преобразованиям через механизм сегментации; оно также может быть записано в метафайл.
Е2. В любой момент времени одно из преобразований нормирования является текущим для вывода примитивов и используется для преобразования МК, заданных, например в примитивах вывода и геометрических атрибутах, в нормированные координаты.
ЕЗ. Преобразование нормирования определяется путем задания границ области в системе МК (ОКНО), которая должна быть отображена в заданную область в пространстве нормированных координат (поле вывода). Границы окна и поля вывода определяют прямоугольники, стороны которых параллельны осям координат в МК и НК. Границы включаются в состав прямоугольников. Преобразование нормирования производит отображение МК в НК, которое включает перенос и масштабирование с положительными коэффициентами (возможно различными) для обеих координатных осей.
Е4. Хотя пространство НК концептуально простирается до бесконечности, та его часть, в которой должно быть размещено поле вывода и которую можно увидеть на станции, ограничивается диапазоном [0., Е]Х[0., Е]. Кроме того, в конкретной реализации может поддерживаться только ограниченный диапазон НК. Однако этот диапазон всегда существенно больше, чем квадрат [0., EJ Х[0., Е], что позволяет эффективно использовать функцию ВСТАВИТЬ СЕГМЕНТ. В частности, всегда должен быть обеспечен диапазон изменения НК в пределах [—7., 7.]Х[—-7., 7.].
Каждое преобразование нормирования идентифицируется номером — целым числом в диапазоне от нуля до зависящего от реализации п, которое содержится в таблице состояния ЯГС. Преобразование нормирования с номером нуль является тождественным преобразованием, отображающим область [0., 1.,]Х Х[0„ 1.,] мк в область [0., 1.,]Х[0-, Е,] НК. Это преобразование не может быть изменено.
Первоначально все другие преобразования нормирования устанавливаются равными преобразованию с номером ноль. После того как ЯГС открыто, эти преобразования в любой момент могут быть заменены на другие преобразования. ЯГС поддерживает несколько различных преобразований нормирования, прикладная программа может их определять до начала вывода графического изображения. Перед началом вывода отдельных частей изображения осуществляется выбор определенного преобразования нормирования. Переопределение преобразований нормирования допускается и в процессе графического вывода.
Текущее преобразование нормирования задается функцией ВЫБРАТЬ ПРЕОБРАЗОВАНИЕ НОРМИРОВАНИЯ и используется для вывода до тех пор, пока не будет выбрано другое преобразование. По умолчанию выбирается преобразование с номером ноль.
Отсечение
Поле вывода и окно, задающие определенное преобразование нормирования, используются также для задания прямоугольника отсечения. Поле «прямоугольник отсечения» в таблице состояния ЯГС устанавливается равным полю вывода текущего преобразования нормирования при определении поля вывода текущего преобразования нормирования или при выборе преобразования нормирования. Отсечение по границам поля вывода может быть разрешено или не разрешено. Имеется единый глобальный переключатель (индикатор отсечения), указывающий, будет ли прямоугольник отсечения использоваться для отсечения.
Отсечение не проводится непосредственно во время выполнения преобразования нормирования, оно задерживается до того момента, когда примитивы будут выводиться на носитель изображения графической станции. Прямоугольник отсечения, связанный с примитивами вывода, входящими в состав сегментов, хранится вместе с координатами этих примитивов, преобразованными в НК. Функция ВСТАВИТЬ СЕГМЕНТ позволяет заменить прямоугольник отсечения, записанный вместе с примитивом вывода при создании сегмента, на прямоугольник отсечения, взятый из таблицы состояния ЯГС.
Примитивы, посланные на станцию категории МВЫВОД отсечению не подвергаются.
Преобразование станции
Пространство нормированных координат может рассматриваться как независимый от станции абстрактный носитель изображения. Для каждой открытой станции независимо выбирается некоторая часть пространства НК в диапазоне [0., 1 .J X Х[0„ 1.], которая будет отображаться на носитель изображения. Преобразование станции отображает НК в координаты устройства (КУ) данной станции.
Координаты устройства измеряются в метрах для устройств, способных генерировать точно масштабируемые изображения (например для большинства графопостроителей), или в зависящих от станции единицах (например для дисплеев, размер монитора которых неизвестен).
В любом случае координаты устройства отображаются в пространство изображения следующим образом:
начало системы координат устройства находится в левом нижнем углу изображения;
единицы измерения КУ соотносятся с пространством изображения так, чтобы квадрат в КУ выглядел квадратом на поверхности изображения (это условие правильно выполняется, если единицами измерения в КУ являются метры);
координаты X и Y возрастают соответственно слева направо и снизу вверх.
На некоторых устройствах единицы измерения КУ могут не совпадать с адресуемыми единицами (например, в случаях, когда адресуемые единицы не удовлетворяют вышеуказанным условиям).
Размер пространства изображения, выраженный в единицах измерения КУ, заносится в таблицу описания станции.
Преобразование станции представляет собой неискажающее преобразование НУ в КУ, т. е. выполняет перенос и одинаковое масштабирование по обеим осям с положительными коэффициентами. Таким образом для композиции изображений можно воспользоваться преобразованиями нормирования, тогда как преобразование станции позволяет отображать на разных станциях различные части скомпонированной картины.
Например, чертеж можно вывести на графопостроитель в истинном масштабе и одновременно некоторую часть чертежа отобразить на полный экран дисплея интерактивного терминала.
Преобразование станции может быть определено в любой момент времени после открытия станции. Изменение преобразования станции может вызвать неявную повторную генерацию изображения.
Преобразование станции определяется заданием границ области в системе нормированных координат в диапазоне [0., 1.] X X [0., 1.] — окна станции, которая должна быть отображена в определенную область пространства координат устройства — поле вывода станции. Границы окна и поля вывода станции определяют прямоугольники со сторонами, параллельными осям координат г, системах НК и КУ. Границы входят в состав прямоугольников.
Для предотвращения выхода выводимого изображения за пределы окна на станции в ЯГС производится обязательное отсечение по окну станции, которое не может быть отменено. Поскольку окно станции задается в диапазоне [0., 1.] X [0., 1.] НК, то гарантируется, что на любой станции может быть визуализирована только часть пространства НК, лежащая в пределах [0., 1.] X Х[0„ Г].
Для обеспечения одинакового масштабирования по каждой оси преобразование станции должно отображать окно станции на самый большой прямоугольник, который может быть размещен в пределах поля вывода станции так, чтобы было сохранено соотношение сторон и нижний левый угол окна станции отображался в нижний левый угол поля вывода станции. Таким образом, если соотношение сторон окна и поля вывода станции различны, то часть пространства сверху и справа от поля вывода останется неиспользованным.
Преобразование станции по умолчанию устанавливается таким, чтобы отображать пространство НК [0., 1.] X [0., 1.] во все пространство изображения станции. Если пространство изображения не является квадратом, то применяются те же правила, что описаны выше, для достижения одинакового масштабирования по каждой оси.
Преобразование станции может быть изменено функциями ЗАДАТЬ ОКНО СТАНЦИИ или ЗАДАТЬ ПОЛЕ ВЫВОДА СТАНЦИИ. Поскольку изменение преобразования станции может быть задержано (см. п. 2.5.3), эти функции производят лишь запись значений параметров «требуемое поле вывода станции» в таблицу состояния станции. Записи «текущее окно станции» и «текущее поле вывода станции» продолжают содержать ранее установленные значения параметров преобразования. Только после модификации изображения текущим значениям присваиваются требуемые значения.
Полная схема потока данных для графического вывода приведена на черт. 9, где системы координат МК, НК и КУ являются двумерными декартовыми системами координат.
Преобразование входных данных устройства ввода позиции
Прикладной программист запрашивает входные данные устройства ввода позиции, чтобы определить позицию в наиболее подходящей системе мировых координат.
Для этого входные данные преобразуются из КУ в НК с помощью преобразования, обратного преобразованию станции. В качестве входных данных для устройства ввода позиций могут вы-
Схема потока данных для графического вывода в ЯГС
К станции
Черт. 9
ступать только те позиции, которые лежат внутри части поля вывода станции, на которую отображается окно станции (это может быть часть поля вывода станции, если соотношение сторон у поля вывода станции и у окна станции различны). Следовательно, входные данные устройства ввода позиции всегда определяют позицию в НК в диапазоне [0., 1.] X [0., 1.].
Чтобы передать прикладной программе позицию в мировых координатах, позиция должна быть преобразована из НК в МК с помощью преобразования, обратного одному из преобразований нормирования. Для каждого преобразования нормирования определен приоритет поля вывода, при вводе который относится к вводу позиций и последовательности позиций. Преобразования нормирования упорядочены в соответствии со значениями входных приоритетов поля вывода. При инициализации ЯГС инициируется некоторое число преобразований нормирования, для которых окна и поля вывода задаются в виде единичных квадратов, а приоритеты поля вывода при вводе устанавливаются в соответствии с номером преобразования, причем преобразование с номером ноль имеет наивысший приоритет, преобразование с номером единица следующий но величине и т. д. Входной приоритет поля вывода при вводе преобразования нормирования может быть изменен в любой момент времени.
Позиция в пространстве НК, полученная от устройства ввода позиции, сравнивается с полями вывода преобразований нормирования с целью найти такое преобразование нормирования, поле вывода которого содержит данную позицию и имеет наивысший входной приоритет ввода. Введенная позиция преобразуется в соответствующую систему МК с помощью преобразования, обратного этому преобразованию нормирования. Позиция, введенная с помощью устройства ввода позиции, передается прикладной программе в МК вместе с номером использованного преобразования нормирования.
Поскольку преобразование с номером ноль является тождественным и неизменяемым преобразованием, связанным с полем вывода [0., 1.] X [0., 1.], всегда обеспечивается попадание позиции, полученной от устройства ввода позиции, по крайней мере в одно из полей вывода.