BC/NW 2003г., №1(3)/ 15.2
РЕАЛИЗАЦИЯ
ДИНАМИКИ ПРИ ВИЗУАЛИЗАЦИИ СЕТЕВОГО ПРЕДСТАВЛЕНИЯ СХЕМ НАПРАВЛЕННЫХ ОТНОШЕНИЙ
Бебчик Ан.М.
(Москва, Московский государственный институт
радиотехники,
электроники и автоматики (технический университет),
Россия)
В работе
рассматриваются вопросы, связанные с визуализацией перемещений объектов
сетевого представления схем отношений [1,2], реализованных в составе
графического редактора реляционных выражений FLOGOL-системы функционально
логического программирования. Необходимые требования к рассматриваемому
программному продукту определяются общими принципами визуализации объектов
сетевого представления схем отношений, которые подробнее рассмотрены в [3].
На рис. 1 приведен пример
графического представления сети, формируемого на экране пользователем и которое
можно в процессе редактирования изменять без изменения самой отображаемой сети.
Заметим, что реализованный в редакторе способ формирования сети выбран таким
образом (методом слияния и расщепления точек сети), что на любом этапе
редактирования на экране отображается некоторая формально правильная
построенная сеть.
Существующие методы
реализации динамики в двумерной графике можно условно разделить на две группы:
а) полная перерисовка, б) восстановление и перерисовка только тех областей, в
которых происходит изменение изображения (перемещение объектов). Полная
перерисовка объектов приводит к существенному мерцанию экрана, и потому этот
метод не приемлем, хотя и прост в реализации.
Второй вариант заключается в
перерисовке только выделенных областей изображения. Простейшим методом является
построение перемещающихся частей изображения цветом фона, изменение их
координат на новые, и полная прорисовка всего нового изображения. Минусом
данного метода является то, что изображение может содержать области сплошной
закраски, которая производится достаточно долго и тоже вызывает заметные
мерцания. Другим методом, который и был реализован, является метод оболочек. То
есть каждому графическому объекту привязывается оболочка, описывающая область,
которую он занимает. К сложным объектам, таким как, например, дуга, состоящая
из многих ребер, привязывается несколько оболочек, покрывающих объект в целом.
Изображение формируется в двух экземплярах – одно на экране, а другое в
невидимом буфере. Во время перемещения объекта на его старое место,
определяемое оболочкой, копируется изображение из буфера. После того, как все
такие части изображения скопированы, прорисовываются сами движущиеся объекты.
В
результате применения данного метода мерцание экрана существенно снизилось, однако
при большом количестве объектов на экране все же оставалось достаточно
заметным. Надо заметить, что по сравнению с полной перерисовкой, мерцание
изменило и свой характер – теперь этот эффект наблюдался уже не для всего
изображения в целом, а лишь для областей, в которых происходило движение
объектов. Для окончательного устранения мерцания (в заданных условиях) было
решено отказаться от построения изображения непосредственно на экране. Таким
образом, появились два буфера – один для статического изображения, в который
помещались объекты, не изменяющие свои геометрические характеристики или
положение, так называемый фоновый буфер, другой – буфер изображения, в который
копировался фон и помещались изображения движущихся объектов с учетом их
текущего состояния.
Опишем принцип действия
данного метода. В момент начала перемещения формируется буфер фона, при этом
перемещаемые и связанные с ними объекты (например, при перемещении элемента
сети изменяется и форма или размер любой дуги, с ним связанной), помечаются как
движущиеся и в буфер фона не попадают. Буфер фона формируется один раз за все
время перемещения объектов. После того, как буфер фона будет заполнен, он
копируется в буфер изображения. Движущиеся объекты с новым положением и,
возможно, формой строятся в уже подготовленном буфере изображения, после чего
буфер изображения отображается на экране. В качестве буферов использовался
стандартный класс TBitmap среды программирования Borland C++Builder.
Это позволило использовать стандартные функции рисования, а также быстро
копировать сформированное изображение на экран.
Реализованный метод позволил
получить приемлемые результаты для нескольких сотен объектов на экране. Также
заметим, что при невозможности произвести все вычисления, связанные с геометрическими
параметрами объектов и их положением в реальном времени, изображение не мигает,
а наблюдается эффект скачкообразного движения перемещаемых объектов. Для работы
с графикой в операционной системе Windows возможно использование не
только средств GDI (Graphic User Interface) , но и DirectDraw. Это также неплохой
вариант, но возможны проблемы с работой соответствующих библиотек у
пользователя. Средства же GDI работают всегда, если
пользователь вообще смог запустить Windows.
ЛИТЕРАТУРА
1.
Фальк В.Н. Теория направленных
отношений и ее приложения // Дисс. докт. техн. наук. М: – МЭИ. -2001.
2.
Кутепов В.П., Фальк В.Н. Направленные отношения:
теория и приложения // Изв. РАН. Техническая кибернетика, 1994. № 4,5.
3.
Бебчик Ал.М., Бебчик Ан.М. Особенности визуализации
объектов графического интерфейса FLOGOL-системы
функционально-логического программирования // В наст. сборнике. – 2003.