Спецификация базовой графической системы для многооконной динамической графики

Автор: Яковлев А.Ф.

Журнал: Компьютерная оптика @computer-optics

Статья в выпуске: 2, 1987 года.

Бесплатный доступ

Описывается проект системы многооконной динамической графики. Основное внимание уделяется базовой графической системе, обеспечивающей многоуровневую сегментацию графических данных в специальном системном буфере. В системе существует возможность построения произвольного бесконтурного орграфа сегментов, в частности дерева сегментов. Реализация ведется на языке Модула-2 для персональной ЭВМ с растровым графическим дисплеем.

Короткий адрес: https://sciup.org/14058132

IDR: 14058132

Текст научной статьи Спецификация базовой графической системы для многооконной динамической графики

Система должна быть многооконной, так как она будет использоваться для обеспечения графического взаимодействия оператора с целым рядом параллельно идущих процессов. При этом каждому процессу выделяется свое ’’окно” на экране, а оператор, делая "активным" то или иное окно процесса, может наблюдать за его ходом или вступить с ним в диалог. Окна могут как частично, так и полностью перекрываться на экране. Процессы, окна которых в текущий момент не активны, продолжают идти.

Поскольку система должна непрерывно отражать ход процессов, она должна быть динамической, то есть в ней должна иметься возможность выборочного изменения картинки без полной ее перерисовки.

АРХИТЕКТУРА СИСТЕМЫ

Простой метод получения динамического изображения на растровом дисплее состоит в следующем. При выводе пикселя на экран будем производить сложение по модулю 2 его нового и старого цветов. Тогда для стирания любой подкартинки достаточно нарисовать ее повторно.

Этот метод динамизации, а также потребность куда-то записывать изображения, генерируемые процессами. окна которых в текущий момент не активны. приводит к необходимости иметь "буфер изображений”. Этот буфер должен быть частью базовой графической системы.

Общая архитектура многооконной динамической графической системы представлена на рис. 1.

Рис. 1

Базовая графическая система содержит процедуры приблизительно того же уровня, что и система GKS [1]. Машинно-зависимый графический модуль ориентирован на работу с конкретным экраном и является, по существу, графическим драйвером, который, однако, расширен процедурами диалогового управления окнами [2]. Геометрический модуль содержит процедуры чисто геометрического характера, например отсечения и т. д.

Модули деловой и научной графики представляют собой проблемно-ориентированные графические пакеты того же уровня функциональности, что, например, система ГРАФОР для БЭСМ-6 [3).

БАЗОВАЯ ГРАФИЧЕСКАЯ СИСТЕМА

В проекте базовой графической системы использованы терминология и некоторые идеи из системы GKS. Имеются три уровня структуризации графических данных - верхний (рабочие станции), средний (сегменты) и нижний (графические примитивы) . Здесь, однако, рабочие станции мы будем называть картинками. Предполагается, что каждая картинка рисуется в своем окне.

Приняты и более существенные отклонения от идеологии GKS. Одновременная работа со многими картинками не допускается. Сегменты могут быть вложенными (допустима иерархия сегментов) и даже составлять более сложную структуру.

Текст модуля определений базовой графической системы приведен на рис. 2. В этом тексте опущены процедуры установки систем координат и атрибутов.

DEFINITION MODULE MultiPic; (* А.Яковлев, ВЦ АН СССР, 1986 *)

TYPE Picture = CARDINAL;

PROCEDURE CreatePic (UAR p : Picture);

(* создание в буфере новой картинки и открытие ее *) PROCEDURE OpenPic (р : Picture);

(* открытие существующей картинки р для модификации *) PROCEDURE ClosePic;

(* закрытие текущей картинки *)

PROCEDURE ErasePic (UAR р : Picture);

(* удаление картинки р из буфера *)

PROCEDURE DrauPic (р : Picture);

(* выталкивание модификаций картинки р на экран *) PROCEDURE Polyline (UAR х, у : ARRAV OF REAL; n : CARDINAL); (* ломаная с n узлами *) TYPE

Segment = CARDINAL;

Transform = ARRAV 11..21, 11..31 OF REAL;

PROCEDURE CreateSeg (UAR s : Segment; t : Transform); (* создание нового сегмента *) pnn^r-тмтп cioseSeg;

(* закрытие текущего сегмента *)

PROCEDURE DeleteSeg (UAR s : Segment);

(* удаление сегмента s *)

PROCEDURE LinkSeg (father, son : Segment; t : Transform);

(* связывание сегментов father и son по преобразованию t *) PROCEDURE UnlinkSeg (father, son : Segment);

(* обрыв связи между сегментами father и son *)

END MultiPic.

УПРАВЛЕНИЕ КАРТИНКАМИ

СЕГМЕНТНАЯ ПОДСИСТЕМА

Картинки могут создаваться, открываться, модифицироваться, закрываться и удаляться. Все эти процедуры могут вызываться из прикладных модулей и оказывать влияние лишь на буфер, но не на экран. Выталкивание накопленных изменений на экран делает специальная процедура рисования, которая, вообще говоря, должна вызываться асинхронно только из машинно-зависимого графического модуля.

ГРАФИЧЕСКИЕ ПРИМИТИВЫ

В настоящее время определен единственный графический примитив - полилиния.

Сегменты могут создаваться, заполняться примитивами, закрываться и удаляться. Эти функции соответствуют имеющимся в GKS. Здесь, однако, в отличие от GKS, при создании сегмента может быть уже открыт сегмент: таким образом легко определяется дерево сегментов. Кроме этого, могут устанавливаться и рваться межсегментные связи, что обеспечивает возможность построения произвольного бесконтурного орграфа сегментов с источником.

Модификация содержимого сегментов, как и в системе GKS, не допускается.

Статья научная