图形绘制技术
徐景周
一、概述
图形绘制技术由二部分组成:图形基础和绘制技术。其中图形基础内含基础结构类、几何/曲线算法等,绘制技术是在图形基础之上构建的符号和线形的绘制及管理。符号和线形同样作为底层方式,面向所有图元,为它们提供边界线的线形绘制,内部的符号填充或绘制。它以相同的调用方式实现符号、线形的绘制输出,从而减少针对不同图形格式输出时编程的工作量。从库中读取指定的符号或线形,进行缓存后以一致的方式绘制输出。其中符号和线形的使用方式,大致可分为选取和绘制二个步骤,如图所示。
对基础绘制技术的设计要求主要包括符号和线形可以通过显式的描述进行定义,绘制方法的调用规范以接口方式体现。对于不同绘图设备的绘图指令的调用,应该发生在规范实现的模块内部(这样才能做到,修改一处不影响其余的要求,一致性地改变输出格式)。符号和线形的设计要考虑缓存需求,缓存的符号、线形是在具体图件中使用到的符号和线形,这些缓存着的符号和线形可以最终嵌入到图件文档中,使文档在脱离两库存在的情况下还可以正常实现(文档的便携性)。
二、基础绘制技术
抽象出符号和线形的基本表现形式,通过对它们进行组合,可以形成各种复杂的符号和线形表现。
2.1 功能划分
符号和线形的主要功能是实现符号和线形的绘制与管理,使上层应用能方便地使用各种符号和线形元素。设计时采用结构和绘制分离的方法,达到只需要其中绘制部分就可以脱离两库,嵌入图件中独立显示的需求。同时也增加了符号和线形的灵活性,这样在修改和替换一个时,不会影响到另一部分。符号和线形大致的功能结构,如图所示。
2.2 符号设计
符号由符号绘制、符号管理和符号数据存储结构组成。符号通常用于图元的内部填充或绘制。
从程序角度来看,符号绘制不同的油田可能有不同的绘制方式,设计时要考虑这种变化的需求,使之易于扩展和维护,可以通过定义一个绘制符号的接口,不同的绘制方式用不同的接口实现来达到这一目的;不同的应用程序可能有不同的符号应用规则,例如一个符号大小不一样时表现形式也不一样,可能只取其中的某一部份或放大到某一程度时,符号里的某元素大小不再变化,这种需求要求符号在不同的状态下有不同的表现,解决方法就是引入帧的概念,帧是类似动画效果中的图片,多个连续图片形成一段动画,其中每一个图片称为一帧,我们可以对同一个符号实现多种表现形式,每种表现形式我们称之为一帧,符号应用规则是在用户程序中实现的,帧的替换规则也是在用户程序中实现的,由符号用户使用程序确定在什么情况下使用什么帧;符号的绘制在图形绘制技术中频繁使用,要求有较好的时间性能,这一点可以通过在程序中使用内存位图来缓存的方式解决。
1. 数据存储结构
符号存储采用树状结构。符号库(SymLib)为根元素,它可以包含0或多个符号(Symbol)。每个符号可以由多个符号元素组成:文本(SymText)、圆/椭圆/扇形/弧(SymArc)、曲线(SymCurve)和符号元素自身(也称子符号),还有符号帧(Frames),帧内也是子符号,如此递归,直到最终树状结构的所有叶子结点中只包含基本元素,即文本、圆/椭圆/扇形/弧和曲线三种为止。符