(计算机软件与理论专业论文)霓虹灯cad系统.pdf_第1页
(计算机软件与理论专业论文)霓虹灯cad系统.pdf_第2页
(计算机软件与理论专业论文)霓虹灯cad系统.pdf_第3页
(计算机软件与理论专业论文)霓虹灯cad系统.pdf_第4页
(计算机软件与理论专业论文)霓虹灯cad系统.pdf_第5页
已阅读5页,还剩46页未读, 继续免费阅读

(计算机软件与理论专业论文)霓虹灯cad系统.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 霓虹灯c a d 系统是一个二维矢量图绘制系统,该系统允许用户绘制常用的二 维矢量图形以及导入已有的位图,来完成虚拟的霓虹灯效果图,并且可以与设计 好的网格文件关联起来,实现动态的霓虹灯效果演示。 在认真探讨了用户操作习惯和系统的可扩展性之后,该系统着重于实现界面 友好,采用设计人员熟悉的类似现有矢量图绘制工具的方式进行操作;在功能上 实现了常用的矢量图形、t r u e t y p e 文字以及常见类型图片的绘制和变换,以及 b e z i e r 曲线的合并、拆分,允许任意矢量图形转化为b e z i e r 曲线、任意矢量图形 切分成线段;支持图层、群组操作,允许用户自定义图形元件库,实现了楼体勾 边、灯带切分、灯管长度计算、动态演示、导出视频、透明图片等功能。 关键词:霓虹灯计算机辅助设计 矢量图形贝塞尔曲线 a b s t r a c t a b s tr a c t n e o nl i g h tc a d s y s t e mi sa2 - dv e c t o rg r a p hs y s t e m i ti sd e s i g n e dt op r o v i d e u s e r sw i t ht h eu t i l i t i e st h a td r a w i n gc o m m o n2 - dc u r v e sa n dd i s p l a y i n ge x i s t i n gb i t m a p s ot h a tw ec a ns i m u l a t et h es t a t i cn e o nl i g h td e s i g ne f f e c to nc o m p u t e r a n da f t e r c o n n e c t i n gt h ec u r v e sw i t ht h ef r d l n es e q u e n c e ,t h ed y n a m i cn e o nl i g h te f f e c tc o u l db e s h o w n c o n s i d e r e dt h eu s e r sc u s t o mo fo p e r a t i n ga n dt h ee x t e n s i b i l i t yo ft h es y s t e m , w e p a i ds p e c i a la t t e n t i o nt ot h eo p e r a t i n gm o d ea n dt h em o d u l es t r u c t u r eo ft h es y s t e m t o m a k en e o nl i g h tc a de a s yt ol e a r n , i t so p e r a t i n gm o d ei sd e s i g n e dt oi m i t a t et h e p o p u l a rs o f t w a r ec o r e l d r a w i tp r o v i d e st o o l st h a tc a nd r a wc o m m o n2 - dc t l r v e s , t r u e t y p ef o n ta n dc o m _ r n o nb i t m a p a n df r e et r a n s f o r mt o o lt h a t 啪t r a n s f o r mv e c t o r g r a p h f o rt h ec o n v e n i e n c eo f n e o nl i g h td e s i g n , t h es y s t e ma l s op r o v i d e ss o m et o o l s w h i c hc a l lc o n v e r ta n yv e c t o rg r a p hi n t ob e z i e rc u r v e s ,s p l i tb e z i e rc u r v e s , m e r g e b e z i e rc u r v e s ,s p l i ta n yr e o rg r a p hi n t os e p a r a t e ds e c t i o n s ,e t c l a y e ra n dc r o u pi s a l s os u p p o r t e di nt h es y s t e m c u s t o m i z e dc o m p o n e n tl i b r a r ye n a b l e su s e r ss a v ea n d r e u s ee x i s t i n gd e s i g n k e y w o r d : n e o nl i g h tc a dv e c t o rg r a p h b e f i e r 创新性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研 究成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中 不包含其他人已经发表或撰写过的研究成果;也不包含为获得西安电子科技大学 或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所 做的任何贡献均已在论文中做了明确的说明并表示了谢意。 本人签名;夕奎勃b日期:协7 元坫 关于论文使用授权的说明 本人完全了解西安电子科技大学的有关保留和使用学位论文的规定,即:学 校有权保留送交论文的复印件,允许查阅和借阅论文;学校可以公布论文的全部 或部分内容,可以允许采用影印、缩印和其他复制手段保存论文。( 保密论文在 解密后遵守此规定) 本学位论文属于保密,在 年解密后适用本授权书。 本人签名:参勿乙日期:办力7 覆谚 导师签名:型 第一章绪论 第一章绪论 1 1 霓虹灯简介 霓虹灯是一种冷阴极低气压辉光放电灯,起源于1 9 1 0 年,法国人克洛德做成 了世界上第一用于商业照明的霓虹灯管,二十世纪二十年代,霓虹灯技术传入上 海,从此,霓虹灯技术在中国大地上生根发芽,得到了蓬勃地发展。 霓虹灯的幅射光谱具有极强的穿透大气的能力,色彩鲜艳绚丽、多姿,发光 效率明显优于普通的白炽灯,它的线条结构表现力丰富,可以加工弯制成任何几 何形状,满足设计要求,通过电子程序控制,可变幻色彩的图案和文字,受到人 们的欢迎。霓虹灯的亮、美、动特点,是目前任何电光源所不能替代的,在各类 新型光源不断涌现和竞争中独领风骚。 目前,霓虹灯装饰工程的设计一般按照下列程序进行【l 】: 1 设计构思:征询客户绘出初步草图,需要考虑霓虹灯广告显示的主题 内容、结构的尺寸与形状、选择的颜色、字体风格等; 2 概要设计阶段:设计人员根据双方初步达成的协议进行精细的画面设计, 并作出效果图,提出工程造价预算; 3 详细设计阶段:进行具体的图案、灯管、框架与衬底金属字或灯箱设计, 供生产实施的图案应以1 :1 的比例绘制出来,灯管的所有加工尺寸与包 络线,以及灯管的连接,应准确地定位在图样上。 由于绘制的效果图是静态图片,无法表现出霓虹灯绚丽的动态效果,所以最 终的动态效果一般需要多次调整才能满足需求,浪费大量人力物力小型的设计 还可以想象得到,或者直接描述出来,大型户外霓虹灯广告牌一般都有上千只灯 管,而且需要拉幕、渐变、积木、闪烁、灯带等许多效果,难以给客户直观的印 象,而且大型霓虹灯需要很多的程控器来控制灯光,如果效果不合适需要重新设 计,将需要大量的人力物力。因此广告厂家迫切需要能够表现霓虹灯动态效果的 方法,一方面可以节省时间,一方面也可以直接给出绚丽的效果,来在众多的竞 标者中脱颖而出。 随着计算机绘图技术的发展,矢量图形表示技术已经相当成熟,通用c a d 系 统比如a u t o d c s k 公司的a u t o c a d 的成功也为霓虹灯专用c a d 系统提供了很多 的经验。而随着f l a s h 等通用动画软件的普及,一些厂家开始采用通用动画软件来 制作霓虹灯的动态演示,但是这些通用动画软件并没有专门针对霓虹灯设计的便 2 霓虹灯c a d 系统 利工具,因此制作周期长,费用高,重复工作量大。 因此,市场迫切需要一种简单易用,针对性强,能够简便实现常用效果并能 够动态演示最终效果的霓虹灯设计软件,霓虹灯c a d 软件将会有着广阔的市场。 1 2 霓虹灯c a d 软件现状 目前市场上已经有了几款霓虹灯c a d 系统,比如深圳川田电子有限公司的 n e o n 系列、北京宇通霓虹科技有限公司的宇通霓虹c a d 系统,已经在霓虹灯设 计领域中取得了一些成就,也为我们提供了不少宝贵的经验。 川田n e o n 是一个实用化几年的软件,经历了几个版本演变,采用网格文件和 绘制图形两部分分开的方式,网格文件用来记录抽象的灯管颜色变换序列,绘制 图形部分绘制出实际的灯管样式。支持多种常见的霓虹灯效果,支持普通扫描、 渐变扫描两种扫描方式,提供常用的矢量图形绘制功能并可以导入位图文件。其 特色的地方在于,川田n e o n 支持将定义好的网格文件转换为自己的程控器中使用 的代码,从而可以直接将设计好的动画效果烧录到程控器中,减少对程控器的编 程时间。 宇通霓虹c a d 采用了类似f l a s h 的方式绘制图形并设置颜色变换序列,内置 了一部分简单效果,并支持自定义任意的动画效果,提供简单的矢量图形绘制功 能并提供比较强大的排布工具和填充工具,使用实际长度单位来绘制图形。其特 色在于可以制作出非常复杂的动画效果。 但是目前的霓虹灯c a d 软件还处于探索阶段,还没有形成一套完整的规范, 各个软件也都各有优点。我们希望能够设计一个软件,在参考现有软件的基础上, 综合各个软件的优点,并将软件的操作尽可能贴近现有的矢量图设计工具的操作 方式,使得软件操作人员可以很容易上手;支持图形元件库,保证已有的设计尽 可能的能够被再次利用;增加一些实用的工具,使编辑更加便捷。 1 3 本文的主要工作 在和霓虹灯设计人员的交流中得知,对于霓虹灯c a d 软件的使用者来说,易 用性和操作的便捷性是非常重要的。用户的操作习惯也是需要考虑的要点之一。 本文在总结了现有霓虹灯c a d 软件的经验以及目前所存在的问题的基础上, 参考了矢量绘图软件c o r e l d r a w 的设计方式以及操作方式,以面向对象的方式设 计了一个扩展性较强,操作简便,设计图重用程度高,功能适合的霓虹灯c a d 系 统,该系统分为网格编辑和图形绘制两个部分,本文着重于探讨图形绘制部分的 第一章绪论 3 问题和解决办法,主要研究设计工作体现如下: 1 通过与霓虹灯设计人员的交流,同时分析现有霓虹灯c a d 软件的优缺点, 提出了霓虹灯c a d 系统的设计目标,并进行了系统分析和设计; 2 在二维矢量图形表示技术关于点、线、多边形描述方法的基础上,实现霓 虹灯c a d 系统中点、线、多边形的矢量化描述和编辑,并使其在数据结 构上和编辑方法上尽可能的统一; 3 在b e z i e r 曲线方程和b e z i e r 曲线的d ec a s t e l j a u 算法基础上讨论了将任意 矢量图形转换为b e z i e r 曲线、将任意矢量图形切分为线段并保持原形状的 方法,以及b e z i e r 曲线的切分、合并、长度计算、包围盒计算方法; 4 讨论了将t r u e t y p e 文字转换为b e z i e r 曲线的方法; 5 讨论了用户自定义图形元件库的实现方法; 6 讨论了u n d o r e d o 的实现方法。 1 4 本文的组织结构 本文主要分为五个部分: 第一章为绪论,主要总结现有霓虹灯设计方法的发展概况以及现有霓虹灯 c a d 系统的优缺点,指出本文要解决的问题和所做工作; 第二章介绍计算机图形学、g d i 绘图等原理和相关知识; 第三章阐述了系统的思路和架构; 第四章阐述了系统的具体实现以及实现过程中的难点解决方法; 第五章对本文的内容作了总结,并提出了进一步的研究方向。 第二章相关原理、技术 2 1 1 二维矢量图形 第二章相关原理、技术 2 1 二维矢量图形 矢量图像,也称为面向对象的图像或绘图图像,在数学上定义为一系列由线 连接的点。像a d o b ei l l u s t r a t o r 、c o r e l d r a w 、c a d 等软件是以矢量图形为基础进行 创作的。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体, 它具有颜色、形状、轮廓、大小和屏幕位置等属性。既然每个对象都是一个自成 一体的实体,就可以在维持它原有清晰度和弯曲度的同时,多次移动和改变它的 属性,而不会影响图例中的其它对象。这些特征使基于矢量的程序特别适用于图 例和三维建模,因为它们通常要求能创建和操作单个对象。基于矢量的绘图同分 辨率无关。这意味着它们可以按最高分辨率显示到输出设备上。 矢量图形与分辨率无关,可以将它缩放到任意大小和以任意分辨率在输出设 备上打印出来,都不会影响清晰度。因此,矢量图形是文字和线条图形的最佳选 择。 二维矢量图形是指用方程表示的平面的矢量图形,包括直线、矩形、椭圆、 曲线等。在本文中,用图元一词统称各种二维图形。 2 1 2 基本的二维几何变换 利用显示输出图元及其属性的程序,可以生成各种图像和图形。在很多应用 中,还需要改变或控制显示效果。例如,通过调整组成部分的方向和大小来实现 设计和设施布局。在方向、尺寸和形状方面的变化则是通过改变对象坐标描述的 几何变换来完成的。 基本的几何变换有:平移、旋转和缩放,经常应用于对象的其它变换还有反 射和错切。这里只介绍结论,详细推导过程参见文献【2 1 。 1 平移: 平移是指将对象沿直线路径从一个坐标位置移动到另一个坐标位置的重 定位。即通过给原始坐标位置( x ,y ) 加上平移距离t x 和t ,来平移二维点,从而 实现到新位置( x ,y ) 的移动。使用列向量p ,p 来表示坐标位景,t 表示平移向 6 霓虹灯c a d 系统 量,则平移可表示为: 灶m 一盼= 卧= 嘲 平移是一种不产生变性而移动对象的刚体变换,邸对象上的每个点移动 相同数量的坐标。可以使用同样的方法来移动各种曲线。 2 旋转: 二维旋转时将对象沿珂平面内的圆弧路径重定位。点绕任意基准位置 ( x 。y r ) 旋转的变换方程为: x = x ,+ ( x 一工,) c o s 0 一( j ,- y ,) s i n o y = y ,+ ( y y r ) s i n a 一( ) ,一) ,) c o s o ( 2 - 2 ) 旋转也是一种不变形地移动对象的刚体变换,对象上的所有点旋转相同 的角度。 3 缩放 缩放变换改变对象的尺寸。可以选择一个在缩放变换后不改变位置点 ( x 6 y d ,即固定点,从而控制缩放对象的位置。 工= x s x + x f o - s o ,y = y 。x y + ( 1 - s y ) 式( 2 3 、 多边形的缩放可以通过将变换方程应用于每个顶点上,然后利用变换后 的顶点重新生成多边形。其它对象的变换则将缩放变换方程应用到定义对象 的参数上。 2 1 3 复合变换 矩阵表达式和齐次坐标: 所谓齐次坐标就是将一个原本是n 维的向量用一个n + 1 维向量来表示。如向 量( x l x 2 ,x 。) 的齐次坐标表示为( h x l ,h x 2 ,1 1 ) 【。舢,其中h 是一个实数。显然一个 向量的齐次表示是不唯一的,齐次坐标的h 取不同的值都表示的是同一个点,比 如齐次坐标 8 ,4 ,2 】、【4 ,2 ,1 】表示的都是二维点【4 ,2 】。 3 1 引进齐次坐标,提供了用矩阵运算把二维、三维甚至高维空间中的一个点集 从一个坐标系变换到另一个坐标系的有效方法;并可以表示无穷远的点。舛1 维的 齐次坐标中如果h = 0 ,实际上就表示了n 维空间的一个无穷远点。 第二章相关原理、技术 7 10l 形进行缩放、旋转、对称、错切等变换;l ,j 是对图形进行平移变换;【gh i 是对图 形作投影变换;【f 】则是对图形整体进行缩放变换。 将图形变换用矩阵表示后,可以通过计算单个变换的矩阵乘积,将任意的变 换序列组合成复合变换矩阵。于是可以实现复杂的复合变换。 比如通过平移一旋转平移操作序列来实现绕任意指定点旋转的操作,将平移 旋转平移的变换矩阵依次相乘即可得到该变换的复合变换矩阵。 具体的复合变换矩阵推导可参见文献1 2 1 ,这里不再赘述。 2 2 1b e z i e r 曲线简介 2 2b e z i e r 曲线 1 9 6 2 年,法国雷诺汽车公司的p e b e z i e r 构造了一种以逼近为基础的参数曲线 和曲面的设计方法,并用这种方法完成了一种称为u 】m s u i 江的曲线和曲面设计系 统,1 9 7 2 年,该系统被投入了应用。b e z i e r 方法将函数逼近同几何表示结合起来, 使得设计师在计算机上就象使用作图工具一样得心应手。 b e f i c r 曲线的定义如下: 给定空间n + 1 个点的位置矢量p i ( i _ o ,1 ,2 , n ) ,则b e f i c r 参数曲线上各点坐 标的插值公式是: p ( t ) = e 。( f ) z ,0 t 1 式( 2 4 ) 数: 其中,p i 构成该b e z i e r 曲线的特征多边形,b i j i ( i ) ( o t 1 ) 是n 次b e m s t e i n 基函 “r ) - 淼咿= ( 1 卅。扣o ,l 2 ,r - 舭- 5 ) 其中,( 0 0 = 1 ,o i - 1 ) ,( 0 1 重s 1 ) b e f i e r 曲线具有很多优良的特性使得其能够在计算机绘图领域应用广泛,这里 我们只介绍几个与本文相关的重要性质,其他性质请参考相关文献书籍。 8 霓虹灯c a d 系统 4 曲线端点位置矢量 b e z i e r 曲线的起点、终点与相应的特征多边形的起点、终点重合; 5 切矢量 b e z i e r 曲线的起点和终点处的切线方向和特征多边形的第一条边及最 后一条边的走向一致; 6 对称性 由控制顶点只= 只+ ( f - o ,1 ,阼) ,构造出新的b e z i e r 曲线,则新曲 线与原曲线形状相同,方向相反,b e z i e r 曲线在起点处有什么几何性 质,在终点处也有相同的性质; 7 凸包性 b e z i e r 曲线落在只构成的凸包之中; 8 几何不变性 这是指某些几何特性不随坐标变换而变化的特性。b e z i e r 曲线的位置 与形状与其特征多边形顶点p i ( i = 0 ,1 ,柚的位置有关,它不依赖坐标系 的选择。 2 2 2d ec a s t e l j a u 递推算法 计算b e z i e l 曲线上的点,可用b e z i e r 曲线方程,但是这种方式不是数值稳定 的( n u m e r i c a l l ys t a b l e ) ,可能会在计算b e r n s t e i n 多项式时引入数值误差,使用d e c a s t e l j a u 提出的递推算法则可以解决这个问题,并适合于程序实现。 设控制点是o o ( a pp 0 ) ,0 1 ( p 0 ,o i ( p j ) ,o n a 嗡。o s 表示初始或者第0 次迭代,下面它也会被用1 ,2 ,3 替换。 d ec a s t e l j a u 算法最基本的概念就是在线段a l l 中找到c 点,使得c 点将a l l 线段划分成“:( 1 的比例( 例如:t a c i :i a b i = “) 。 7 :一誓 :二j l f; 从a 到b 的矢量是b - a ,由于“在【0 一l 】之间,c 就在“( b a ) 处。考虑a 的 位置,c 就在a + u o a a ) = ( 1 u ) a + u b 。因此,给定u ,( 1 - 功a + u b 就是在a 和b 之间的c 点,它将a b 分割成u :1 ”的比例。 d ec a s t e l j a u 算法的思想如下所述:假设我们要求c ( ,其中u 在 o ,1 】之间, 从第一条边开始,o o 0 1 0 2 0 3 0 n ,用上面的公式求得一个在o i 到0 ( i + 1 ) 的线段 上的点1 i ,1 i 点将0 i 到o ( i + 1 ) 的线段划分成“:( 1 比例;这样就可以得到n 个点 1 0 ,1 1 ,1 2 ,k n - d ,它们形成了新的n - 1 条线段。 第二章相关原理、技术 9 田2 1d ec a s t e l j a u 算法图示 上图中,u - - 0 4 ,1 0 是0 0 到0 1 线段上的点,1 1 是0 1 到0 2 线段上的点, 1 4 是0 4 到0 5 线段上的点,所有的新点是蓝色显示的。 新点按1 i 方式命名,对这些新点执行相同的操作,可以得到第二个由( 2 0 2 1 ,2 ( n - 2 ) ) n - 1 个点组成的多边和n - 2 条边;再次进行该操作,可以得到第三 个由( 3 0 ,3 1 ,3 ( n 一3 ) ) n - 2 个点组成的多边和n - 3 条边;如此循环进行n 次后, 将产生一个单点n o :d ec a s t e l j a u 证明这个点就是要求的c ( 。具体的推导算法参 见文献州。 对于上面的图形,得到1 0 到1 1 的线段上的点2 0 将1 0 到1 l 的线段划分成 甜:( 1 - 比例,同样可以得到1 1 到1 2 的线段上的点2 1 ,1 2 到1 3 的线段上的点2 2 , 1 3 到1 4 的线段上的点2 3 ,这第三个多边有四个点和三条边;如此继续,就可以 得到由3 0 ,3 l 和3 2 三个点组成的新多边;再从这第四个多边,就可以得到由4 0 和 4 l 两个点组成的第五个多边;如此再进行一次,就可以得到5 0 ,这就是曲线上的 c ( 国。1 5 】 这一算法可用简单的几何作图实现,给定参数t t o ,l 】,就把定义域分成长度 为f :( 1 f ) 的两段。依次对原始控制多边形每一边执行同样的定比分割,所得分点就 是第一级递推生成的中间顶点只1 q = o ,1 ,川1 ) ,对这些中间顶点构成的控制多边形 再执行同样的定比分割,得第二级中间顶点p f 2 ( 产o ,l ,玎2 ) 。重复进行下去,直到 n 级递推得到一个中间顶点跗即为所求曲线上的点烈f ) ,如图所示。 1 0 霓虹灯c a d 系统 2 3 1g d i p 1 2 j ,l l + 01 ,3i 图2 2 几何作图法求b e z i e r 曲线上的点( n = 3 ,t = 1 4 ) 2 3w i n d o w s 图形系统 g d i 是g r a p h i c sd e v i c ei n t e r f a c e 的缩写,即图形设备接口,是w m d o w s a p i ( a p p l i c a t i o np r o g r a m m i n gi n t e r f a c e ) 的一个重要组成部分。它是w i n d o w s 图形显 示程序与实际物理设备之间的桥梁,g d i 使得用户无需关心具体设备的细节,而 只需在一个虚拟的环境( 即逻辑设备) 中进行操作。它的主要任务是负责系统与绘图 程序之间的信息交换,处理所有w i n d o w s 程序的图形输出。 g d i 提供两种基本服务:创建图形输出和存储图象。g d i 提供了大量用于图 形输出的函数,这些函数接收应用程序发出来的绘图请求、处理绘图数据并根据 当前使用设备调用相应的设备驱动程序产生绘图输出。这些绘图函数分为三类: 一是文字输出,二是矢量图形函数,用于画线、圆等几何图形,三是光栅( 位图) 图形函数,用于绘制位图。 g d i 提供了直线、连续折线、矩形、3 次b e z i e r 曲线、椭圆、文字的绘制功能, 并且可以支持多种画笔类型和画刷类型来进行绘制图形以及填充图形。 g d l 支持路径( p a t l l ) ,可用于填充复杂的图形。 2 3 2g d i + g d i 虽然使程序员得到了一定程度的解脱,但是其编程方式仍很麻烦。 g d i + 是w i n d o w s2 0 0 0 及以后版本的一个子系统,同原有的g d i ( 图形设备接 口) 一样,主要负责对显示器和打印机进行管理。g d i + 提供了在编程时使用的应用 第二章相关原理、技术 程序接口a p i ( a p p l i e a t i o np r o g r a m m i n gi n t e r f a c e ) ,通过这些a p i 函数,g d i + 让程 序员在设计程序中不必考虑具体的显示器或打印机,直接使用由g d i + 提供的类的 方法便可以调用显示器或打印机,真正做到与设备无关。 g d i + 主要提供了以下三类服务: 二维矢量图形:g d i + 提供了存储图形基元自身信息的类( 或结构体) 、存储图 形基元绘制方式信息的类以及实际进行绘制的类; 图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量 图形方式进行处理。因此,g d i + 提供了b i t m a p 、i m a g e 等类,它们可用于显示、操 作和保存b m p 、j p g 、g i f 等图像格式。 文字显示:g d i + 支持使用各种字体、字号和样式来显示文本。 g d i 接口是基于函数的,而g d i + 是基于c + + 类的对象化的应用程序编程接口, 因此使用起来比g d i 要方便。 g d i + 与传统的g d i 相比,主要有以下六方面的新特色:渐变画刷、独立的路 径对象( p a t ho b j e m s ) 、矩阵对象( m a t r i xo b j e 圮0 、区域( s e a l a b l er e g i o n s ) 、a l p h a b l e n d i n g 和多格式图片支持。 2 3 3 双缓冲 在绘制图形时,尤其是绘制大面积填充的图形时,直接在显示缓冲区内绘图, 屏幕上往往会产生闪烁或类似裁剪的现象。这是因为绘制图像时没有与视频显示 完全同步,v g a 视频硬件以大约每秒7 0 次的速率刷新屏幕,绘制图像过程如果不 在一个刷新周期内完成的话,就会出现一幅图像还没有绘制完就被显示出来的情 况,屏幕就会产生闪烁现象。 双缓冲技术就是为了解决这个问题而出现的。双缓冲技术一般的实现方法是: 在内存中开辟一段与视频缓冲区大小一样的内存空间,把图形先画在这段内存中, 然后快速地把内存的内容复制到视频缓冲区。由于隐藏了图形的实际绘制过程, 而最后复制图形内容的速度非常快,人眼感觉不到绘图的过程,就避免了屏幕出 现闪烁现象。 双缓冲只是提出了一种解决闪烁的基本方法,根据具体的绘制图形的环境, 双缓冲有着不同的具体实现方式。在g d i 下实现双缓冲通常是通过将图形绘制到 一个与目前的d c 同样大小的b i t m a p 上,并将该b i t m a p 贴到当前d c 上实现的。 第三章系统设计和架构 1 3 第三章系统设计和架构 3 1 系统总体设计 通过对现有霓虹灯设计软件的考察,以及同霓虹灯设计人员的交流得知,由 于将实际的霓虹灯抽象出来,用网格来表示抽象的灯管,可以比较方便的进行动 态效果处理,设计人员也比较容易理解和掌握;另外,将网格动画和实际灯管效 果设计分开,也可以充分利用已经设计好的动画效果,最大程度的重复利用做过 的工作。所以本系统采用网格动画编程和灯管绘制两部分分开的结构。系统共分 为3 个部分: 其中, 1 网格编辑部分: 用小方格表示抽象的灯,所有的灯管以及灯带中的灯泡都被抽象为小方格 放到一张二维的表格中。这个表格代表了在某一个时刻,所有灯的状态, 在后面的叙述中,称这一个表格为一帧。一系列相同的表格组成了一个帧 序列,代表着所有的灯随着时间变化的灯的颜色和明暗的变化。 由于霓虹灯所具有的颜色有限,并且亮度等级也被程控器所限制,所以网 格所能够表示的颜色也有限,并随着所选用的灯的种类而有不同的颜色组 合。色盘定义了当前系统中所有灯可能具有的颜色,灯的动态花样将会依 赖于色盘内的颜色。 网格部分包含了色盘编辑和网格编辑,色盘编辑可以允许用户为网格限定 颜色范围,并且可以存储和读取。网格编辑负责设置网格随着时间变化的 颜色变化,系统内置了一部分常用的花样,并可以通过更改脚本来实现自 定义的花样。 2 效果图绘制部分: 效果图部分提供了绘制实际的霓虹灯管样式和排布灯管的功能。系统提供 了直线、曲线、椭圆、任意多边形等常用矢量绘制工具以及文字、图片显 示功能,并提供群组、层等功能,通过这些工具可以绘制出复杂的静态霓 虹灯效果图。然后将灯管图形与网格文件的某一部分网格相关联,使得灯 管图形的颜色与网格的颜色按帧对应,即可为灯管设定颜色变化序列。 3 播放器部分: 播放器只具有简单的播放功能,即根据网格文件定义的帧序列以及效果图 1 4 霓虹灯c a d 系统 中图形与网格的关联,绘制出颜色随时间变化的灯管,实现霓虹灯效果的 动态演示。 3 2 各模块间关系 上述三个模块组成了完整的系统。其中网格编辑模块和效果图绘制模块是系 统的设计部分,播放器模块是用于为客户演示的部分。 各个模块间的数据流图如下: 图3 1 各模块i 司数据流图 网格编辑模块可以产生并存储、重用色盘文件,并通过用户的操作以及软件 内置的效果或者用户自定义的花样产生网格帧序列,作为霓虹灯效果演示的动画 方式定义;效果图编辑部分通过用户操作绘制或导入图形元件制作出静态的霓虹 灯效果图,并指定图形元件与网格文件的关联关系,形成可供播放的最终效果图 文件;播放器根据效果图文件中的静态图元与网格动画序列的关联,使用网格动 画序列来控制静态图元的颜色变化,并定时刷新静态图元的显示,即可实现霓虹 灯的动态效果演示。 3 3 效果图绘制部分架构 对于用户来说,效果图绘制部分要完成绘制静态效果图以及将各个图元绑定 到网格文件的某些网格的功能。从功能设计的角度看,效果图绘制部分要实现的 主要功能框图如下; 第三章系统设计和架构 1 5 图3 2 效果图绘制部分功能框图 根据该部分的功能需求,以及文档型软件的基本架构,同时考虑到系统的可 扩展性、层次性,设计霓虹灯效果图绘制部分整体结构如下: 用 户 图3 3 效果图部分整体结构 在上图中,最底层的部分是图形数据,记录了设计中的所有图形元素:图形 管理部分管理所有的图形数据,并向上层提供访问图形数据的接口;图形呈现模 块通过在显示终端上对图形数据的渲染绘制将图形数据直观地呈现给用户;动作 管理部分接受用户的输入操作,并将其转化为内部的动作,执行动作并通过图形 管理模块改交内部的图形数据,再由图形呈现模块将改变结果反馈给用户。 这样的设计使得程序模块化程度较高,逻辑层次分明,便于开发实现以及扩 展修改功能。同时由于向用户提供接口的动作管理和具体的数据分离,使得程序 可以有一个比较强大的动作脚本化功能,在以后需要的时候能够比较方便的实现 类似于p h o t o s h o p 的动作记录和重放功能;图形呈现和图形数据分离的方式使得程 序可以比较方便的改用其他的图形呈现层而无须改动其他部分的代码,比如目前 考虑到速度原因主要使用g d i 完成图形呈现功能,如果用户需要图形抗锯齿特性, 则可以方便地改用g d i + 作为数据呈现的实现基础。 1 6 霓虹灯c a d 系统 3 3 1 图形数据和图形管理部分 图形数据是整个霓虹灯效果图设计模块的核心部分,负责记录基本图形元素 的数据。另外,图形编辑功能要求系统支持图层、群组的功能,图层和群组的数 据也包含在该部分中。 图层相当于透明的绘图纸,图形对象绘制到该图纸上,前后的图层存在着遮 挡的关系。每个图形对象只能同时存在于一个图层上。由于群组中的一组图形被 当作一个单独的图形来看待,因此群组也应该具有与图形对象类似的特性,也应 该依附于某个图层。群组可以包含图形对象或者群组,因此,图形对象与图层的 关系成为一种树型的结构,图层包含图形对象或者群组,群组再包含图形对象或 者群组。 图3 4 图形管理结构示意图 图形编辑功能还需要图形能够和某些图层关联。图形和图层关联后,移动该 图形即同时移动关联图层的所有图形对象,移动关联图层的位置同时也会影响到 关联的图形,以保证图形和关联图层相对位置不变。一个图形可以不关联图层, 也可以同时和多个图层相关联。为了避免关联关系存在环路,规定只有第一层的 直接的关联关系才会起作用,比如图形a 在图层l 1 上,它关联图层l 2 ,图形b 在图层l 2 上,图形b 又关联l l ,则移动a 时只会影响到l 2 ,不会因为b 的移动 再次去移动l 1 上的图形。 群组的功能是将一组图形对象关联到一起,使其相对位置关系不变。移动等 会修改图形坐标数据的变换将会同时作用于群组的每一个对象上。群组也可以用 于同时对一组对象进行相同的操作。群组可以作用于跨越图层的不同对象,但是 在群组操作之后所有图形将从属于该群组,图形对象原有的所属图层的关系将被 删除。 第三章系统设计和架构 1 7 群组与图形具有很多共同点,因此将群组也作为一种特殊的图形。 由于图形的管理方式为树的结构,任何一个图形对象必须在一个上层的容器 ( 图层或者群组) 中,并且同时最多只能处于一个上层容器中。 综合以上需求,图形数据部分和图形管理部分的结构如下图所示: s h a p e l 业l a y e r 型m a n 坐a g e r | 1 i 坐l a y e r i a y c r l 随:l a y e r | _ 1 - s h a p e l i s t :s h a l i s h a p e b a s e 控制点集 等价的b c z i e r 曲线点集 _ 添加控制点0 _ 修改控制点0 转换为b e z i e r ! 目t 线0 s h a p e o b j e c t 图形类型 线条及填充颜色等属性 关联网格 所属及关联图层:l 利a - 图形变换0 - 图形拾取0 图形包围框( ) 图3 5 图形数据和图形管理部分类图 在图中,l a y e r m a n a g e r 起着图形对象管理器的作用。s h a p e o b j e e t 是图形元素 的虚的基类,它定义了具体图形元素类的一些公共操作接i :1 。各个具体的图形子 类通过s h u p e o b j e c t 接口的方式被其它类引用,从而隐藏了具体的实现细节。实际 的具体图形对象不能单独存在,只能存在于l a y e r ( 层) 对象或者c r o u p ( 群组) 对象 中。层隶属于l a y e r m a n a g e r 管理。 图形对象自身仅仅提供了图形必须的数据的存储和修改功能,简单的图形工 具接口实现以及图形变换功能,不提供图形绘制功能。 层管理器是图形部分非常重要的一个组件,它担负着创建、管理图形的重要 任务。 层管理器存在的必要性: 1 可以保证数据一致性: 按照需求,每一个具体图形类必须并且只能同时在一个l a y e r 对象或者 c r o u p 对象中,可能与一个或者多个层对象相关联。为了能够高效的从 一个s h a p e 对象查找到其所属的l a y e r 或c r o u p ,以及从一个l a y e r 或 者g r o u p 对象快速查找到包含的s h a p e 对象,s h a p e 对象中将包含一个 所属l a y e r 和所属c r o u p 的引用,以及一个相关联l a y e r 的引用链表; l a y e r 和c r o u p 对象中也有一个包含s h a p e 对象的链表或者引用链表。 这样双方各自保持着一套对应关系,就有可能被单独修改而导致数据不 一致。因此由一个高层的管理器来管理对象,隐藏掉底层的实际数据, 1 8 霓虹灯c a d 系统 对外提供操作接口,在接口实现时保证数据一致性,即可可靠的解决问 题; 2 可以隐藏底层的实现细节,对上层的逻辑提供一个统一的接口,从而可 以避免底层的局部修改影响到上层逻辑。 3 3 2 图形呈现部分 图形呈现部分的功能是将读取l a y e r m a n a g e r 中的图形数据并在显示器上显示 供用户查看。这个部分的结构相对比较简单,与其他模块关系也比较松散。 将这个部分单独分离出来,而不放在图形对象中,可以使得程序与具体的系 统的相关性尽可能的小,以便以后可以使用不同的渲染方式呈现图形;同时也可 以方便的实现与具体查看图形的缩放比例相关的功能,比如在放大的情况下,绘 制出的图形包围框仍旧应该保持屏幕上的像素宽度不变。 霓虹灯效果图中,可能会有上万个灯管和灯泡需要快速显示动画,为了运行 效率的考虑,系统目前主要采用w i n d o w s 系统提供的g d i 来绘制图形。g d i + 尽管 功能强大,但是由于速度比g d i 慢不少,在本系统中主要用来实现g d i 无法或者 很难实现的功能,比如绘制透明图片。 3 - 3 3 动作管理部分 动作管理部分是连接界面与后台数据的桥梁。它提供给用户界面编辑修改 l a y e r m a n a g e r 中数据的接口,并负责实现系统的u n d o r e d o 功能。 动作对象是将对数据的修改抽象并且分类,每一种动作对应某一个或一系列 的数据修改操作,动作对象负责记录具体的动作以及修改的数据,并且提供u n d o 该动作功能。 动作管理部分包含了一个动作管理器,和一个动作链表。动作管理器根据用 户的操作产生相应的动作对象,执行该动作的功能,并将其加入到动作链表。在 用户执行u n d o 时,依次执行动作对象的u n d o 功能即可实现撤销。 第四章系统实现 1 9 绍。 第四章系统实现 根据上面的设计,效果图绘制部分共分为四个主要的部分。本节对其分别介 4 1 图形数据 在霓虹灯c a d 系统中,根据用户的需求,需要有: 直线、矩形、圆角矩形、圆、椭圆、圆弧、椭圆弧、3 次b e z i e r 曲线、多边形、 星形、文字、图片这几种基本的图形元素。 在参考了c o r e l d r a w 等现有矢量图绘制软件,以及征求了霓虹灯设计人员的 基础上,综合计算机图形学的二维图形表示方式,将上述多种图形元索分为以下 类型: 1 直线:描述直线段; 2 圆角矩形;描述圆角矩形以及普通矩形; 3 椭圆:描述圆以及椭圆以及相应的圆弧、椭圆弧; 4 3 次b e z i c r 曲线:描述一段连续的曲线,可以包含多段3 次b e z i e r 曲线段; 5 多边形:描述大于4 条边的多边形,可以是连续定点连接的多边形,或者 是隔点连接的星形; 6 文字:描述矢量字体的文字,可以包含多个字符: 7 图片:位图图片,能够设定透明关键色以及支持带a l p h a 通道的透明图片。 其中,一些图形具有特殊的控制点,这些控制点的意义由图形自身解释,特 殊控制点可以起到修改图形形状的作用。某些具有多种属性的图形可以通过修改 特殊控制点进行相互转换,比如普通矩形转换为圆角矩形;多边形也可以通过修 改特殊控制点的位置来改变角的锐利程度。 这7 种图形元素可以分为三类:矢量图形、文字和位图。 所有的图形都必须实现的功能包括: 选择、包围框( b o u n d i n gb o x ,在本系统中都是二维图形,故简化为包围 框,本文中简称为b b o x ,指与坐标轴平行的、能完全包含该图形的最小矩形 框) 、平移、缩放、设置网格关联、设置可见性、设置所属图层、所属群组、 关联图层; 矢量图形需要实现的功能包括: 霓虹灯c a d 系统 旋转、错切、设置线条色和填充色:设置线宽、调整控制点以改变图形形 状、转换成b e z i e r 曲线; 文字需要实现的功能: 旋转、设置文字颜色、设置字体、转换成b e z i e r 曲线: 图片需要实现的功能: 设置图片、设置透明关键色。 矢量图形在这里统一采用点集来记录,点集的意义由各个具体图形类来解释, 根据二维几何变换的原理,所有的矢量图形的变换都可以统一使用交换矩阵对点 集进行;文字图形需要记录文字的字体、内容以及旋转角度等,由于显示原理的 不同,文字的旋转不能用变换矩阵表示,因此旋转角度需要另外存放;位图需要 记录位图信息,并且不支持矢量图形的变换功能,但需要额外的透明关键色等信 息,也需要另外存放。 文字和图片虽然比较特殊,但其具有与其他图形相似的大部分属性和操作, 也应该抽象为同一种对象。文字和图片的控制点可以认为是表示其所在位置的特 征点。 这样,所有的基本图形就被抽象成了同一种对象,也就是由点集来作为图形 特征的图形对象,后面的处理都是基于这一点的。 根据面向对象的设计原则,程序设计一般需要满足一下条件: o c p ( 开闭原则,o p e n - c l o s e dp r i n c i p l e ) :一个软件的实体应当对扩展开放, 对修改关闭。0 0 l d i p ( 依赖倒转原则,d e p e n d e n c ei n v e r s i o np r i n c i p l e ) :要针对接口编程,不 要针对实现编程。 在本系统中,有众多的类似的基本图形对象,它们有许多公用的方法和属性, 为了能够统一它们的创建方式,以及保留以后的可扩展性,基本图形对象采用简 单工厂方式来创建。 另外,它们有了共同的基类,就可以满足d i p ,后面的应用逻辑大都是基于对 图形基类的,而不针对其中某个具体类。 综合以上分析,图形数据部分设计如下: 第四章系统实现 2 1 c l i e n t l l a y e r m a n a g e r c r e a t e s h a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论