




已阅读5页,还剩72页未读, 继续免费阅读
(控制理论与控制工程专业论文)电脑刺绣cad系统的开发花版编辑系统.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浙江大学硕士学位论文 致谢 y 互2 3 8 27 在两年半的研究生学习期间,许多老师和朋友在学习、研究和生活方面给予 了我热情的帮助和鼓励,使我能不断进步,较好的完成了学业和研究工作。这些 都将使我终生难忘,在此对他们表示衷心的感谢。 首先感谢我的导师蒋静坪教授。蒋老师不论是在在科研方面,还是在生活方 面都给了我许多谆谆的教导和无私的帮助。蒋老师渊博的知识、严谨的治学态度、 踏实的工作作风都使我受益非浅,必将在我以后的工作和学习中产生积极的影 响。 还要感谢的是诸葛振荣老师的热心帮助。这个项目能够顺利地完成,和诸葛 老师的指导和帮助是分不开的。诸葛老师不仅在项目的开始提供了必要的开发设 备,而且在项目开发的整个过程中,经常给我们提出些有益的建议和想法,大 大加快了开发的进度。 另外,实验室里和谐融洽、积极向上的工作气氛,师兄、师弟的关心和帮助, 为我的论文的顺利完成起着不可忽略的作用。在此也向他们一并表示感谢。 致谢人胡兴 二零零二年一月 浙江大学硕士学位论文 摘要 本论文对刺绣c a d 系统的各个方面做了较为详细的探讨,着重 介绍了系统的软件设计过程和生成刺绣画稿所需的各种算法的实现 方法。对于系统的输入输出、图形的编辑修改以及文字编针也进行了 一些简要的叙述。 本系统通过扫描仪将各种图片和花样图稿输入到计算机,再通过 样条插值和曲线造型形成花稿的初试特征点。也可以由设计人员在屏 幕上用鼠标绘出花样轮廓点( 花样的创作) 。在微型计算机上经过各 种算法的处理和人机交互的编辑过程把特征点转化为型绣王茎所需 的落针点信息,并把这些信息以一定的格式存入磁盘,形成花版文件, 再由电脑刺绣机根据花版文件的绣图信息完成刺绣产品的加工。 一一 塑兰查兰堡主兰垡丝壅 a b s t r a c t t h i s p a p e rp r e s e n t s a p r a c t i c a la p p l i c a t i o ns o f t w a r e ,t h ec a ds y s t e mf o r e m b r o i d e r yd e s i g n ,w h i c hh a st h ec a p a b i l i t i e so fs c a n n i n gp i c t u r e s o re m b r o i d e r y p r o d u c t s ,i m p o r t i n gt h es k e l e t o n so fe m b r o i d e r yd r a f t s ,c r e a t i n gk e yp o i n t so ft h e o u t l i n e so ft h et h o s ed r a f t s ,c r e a t i n gs t i t c hp o i n t so ft h o s ee m b r o i d e r yd r a f t sf r o m t h o s ek e y p o i n t s ,c o n v e r t i n gs t i t c hp o i n t si n f o r m a t i o ni n t op r o p e rf o r m sa n d s oo n t h i ss y s t e mi si m p l e m e n t e do nt h ef i a i c r o c o m p u t e r t h i sp a p e rm a i n l yd i s c u s s e s t h ef o l l o w i n gp r o b l e m s :t h es y s t e md e s i g na n dr e a l i z a t i o nm e t h o d ;a l g o r i t h m so f p i c t u r ec r e a t i o n ,p i c t u r et r a n s f o r m a t i o n ,p i c t u r ea c c e s s a n ds oo n ;t h ei n p u ta n do u t p u t s y s t e m t h i sp a p e ra l s od i s c u s s e st h ee n c o u n t e rp r o b l e m sa n d t h e i rs o l u t i o n sd u r i n g t h ed e s i g na n dd e v e l o p m e n to f t h es y s t e m 3 塑兰奎堂堕主堂垡堡苎 第一章电脑刺绣c a d 系统 第一节工程c a d 系统概述 c a d 是近二十多年来逐渐发展、成熟的一种技术,它的全称是c o m p u t e r a i d e d d e s i g n ( 计算机辅助设计) 。如今c a d 已经渗透到工业的各个领域,正 处于蓬勃发展、方兴未艾的阶段。c a d c a m 的引入是工业上的一次革命,它 是计算机对人类文明的巨大推动在工业方面的重要体现。 一、c a d 的定义及其基本性质 1 9 7 2 年1 0 月,国际信息处理联合会提出了如下的c a d 定义:c a d 是一种 技术,其中人与机器结合为一个问题求解组,紧密配合各自所长,从而使其工作 优于每一方,并为应用多科学的方法的综合性协作提供了可能性。这一定义突出 了c a d 技术中“人机配合,取长补短”的基本性质。计算机的主要特长是进行 高速运算,能长时间存储大量的信息,能按一定的方式迅速的检索信息,能长时 间地准确地执行各种频繁重复的动作。这些都是人所不能比拟的,但是人能进行 创造性的思考,能根据已有的知识和经验,按照某一任务的预期的目标和当前的 情况,及时作出判断并选择尽可能好的方向和对策,还能吸取自己或他人的经验 教训,具有学习的能力,这些都是计算机所欠缺的。因此,在工程设计过程中, 如能把计算机和人的主要特长紧密地结合起来,将会大大提高工程设计的效率。 二、工程设计的基本过程与计算机的引入 工程设计是一种“面向目标闯题的求解的活动”,它包括问题的形成、创造 性的构思、分析、综合、模拟以及评价、判断和决策直至最后形成生产信息。这 是一个复杂的过程,可以用流程图概括如下: 在传统的设计中,设计者首先要花费大量的时间查阅有关的技术资料,这对 于哪些新手来说是一件很费力的事情。在分析模拟或样机调试阶段,往往只能使 用近似公式和经验公式,尤其是在试制新产品的时候,往往要先对关键部件进行 多次试验,然后做出整机的样机,再反复调试修改,有时还不得不重做,工作量 大,又容易造成浪费。在引入计算机辅助设计之后,除了概念设计和初始设计过 程还完全依靠工程师之外( 这也是工程师表现其知识、经验、能力和创造性思维 的所在) ,其它过程都可以全部或部分地用计算机代替。例如,相关的技术资料 浙江大学硕士学位论文 圈1 1 1工程设计的一般过程 可以以数据库的形式存在计算机中,使用时可以根据设计者的命令,随机地或按 一定的顺序调出供设计者参考引用。在分析模拟阶段,可以完全用计算机进行分 析计算,并利用图形显示功能,进行静态和动态的实物模拟,直至完全符合性能 指标的要求,这样就缩短了样机的试制调试过程甚至可以不需试制样机,从而大 大地提高了设计的效率。 第二节电脑刺绣机及其c a d 系统概述 电脑刺绣系统主要由两大模块组成:一部分是刺绣的工艺实现部分即电脑绣 花机及其控制系统;另一部分就是电脑绣花花版编辑c a d 系统,作为电脑绣花 机的辅助系统,它负责提供电脑绣花机控制系统所需的花版信息。 电脑绣花机可以分为多头绣花机和单头绣花机两种。由于多头绣花机在性能 价格比上远远优于单头绣花机,并可适应大批量生产的要求,因此,多头绣花机 6 塑兰盔兰堡主兰垡堡塞 已在国内外市场上占据主导地位。所谓多头绣花机,就是一台绣花机上有许个机 头,每个机头都可以独立进行刺绣操作。每个机头又有很多根针( 俗称几种颜色) , 机头上的针数决定了绣图所拥有的颜色的数目,目前以1 4 针居多。电脑多头刺 绣机的生产全部采用自动化作业,实现自动换针( 换不同颜色的绣线) 、自动切 线、自动移图等作业,基本摆脱了手工操作,极大地提高了生产力。 电脑刺绣机的控制系统组成大多是采用双c p u 微处理器构成的计算机控制 系统,微处理器一般由8 位数据处理的c p u 构成,两片协处理器分别担当数据 处理和机械控制的作用。通过内存扩展板得到可存储几十万针脚信息的内存储 量。总线结构突出了标准性和通用性,选用s t d 总线搭载c p u 和各项外设接口。 步进电机通电方式选用五相十拍,增加了输出转矩,以小的步进角换取最大的启 动转矩、启动频率和控制精度。为保证可靠启停而不失步,采用分级调速等控制 规律。c p u 处理的机械信息主要包括步进驱动量、断线信号、换色信号、选针 信号、主电机驱动、剪线信号、电磁铁驱动以及一些极限量的设定等。在机械方 面传动装置采用齿轮多级转换,保证了刺绣的精度要求。 随着刺绣机的普及和人们对刺绣产品要求的提高,电脑绣花花版编辑c a d 系统的地位也日益突出。毕竟电脑绣花机只能完成一些机械动作,它不具备创造 性功能,所有的创造性都是在花版编辑c a d 系统中得到体现。刺绣产品最终能 否为广大用户所喜欢和接受在很大程度上取决于设计人员设计出来的花样是否 具有独创性、新颖性和时效性。固然,设计的好坏与设计者的业务水平有很大的 关系,但花版编辑c a d 系统( 又称自动打版系统) 的优劣也会直接影响到设计 出来的花样,因为设计者的构思必须通过自动打版系统才能转化为刺绣机所能识 别的机械信号,自动打版系统能否如实、快速、准确地反映出设计者的构思,并 给设计者一个良好的修改操作环境,对输出花版信息将会有很大的影响,进而影 响到刺绣产品的最终质量。目前在国内外市场上有许多厂家都在进行这方面的研 究工作,比较著名的有香港富怡公司、香港京华公司、台湾大采公司、意大利普 洛尔有限公司等,它们的产品一般都具有较好的兼容性,能与世界上许多著名多 头绣花机厂商的花版格式相匹配。 第三节刺绣的常用针法及花版编辑c a d 的主要工作 刺绣针法中最基本的是单针,即移动一段距离下一针,如此反复。单针的不 同排列组合会产生许多不同的刺绣效果,从而有许多组合针法的提出。 包针:又称换针,是最常用的一种针法。规定两边的曲线形状可绣制各种图 案,只规定中心线形状,则适用于文字、字母等管状图形的绣制,但受其宽度影 一塑堡奎兰堡主兰垡笙壅 响,一般在1 毫米到1 2 毫米之间,以3 毫米到6 毫米为最佳。包针有全包针、 半包针之分,也可分为直线包针、曲线包针等。 席纹针:又称缎纹针、榻榻米针,也是一种常用的针法。适用于绘制面积较 大的花瓣、人物脸部、服装、动物的身体以及大面积的底纹和图案等。 拉针:用于图案外边的走线,有单线法、三线法等,用以增强图案立体感, 还用于区别图案局部的关系。一般走线以深于图案的颜色居多。 e 字绣:沿图案边沿以e 字形绣制,可产生毛发效果。 珠串绣;以某种形状图案( 珠串) 沿直线或曲线逐一绘制,或覆盖某个指定 区域,使产品显得精巧丰满,富于变化和动感。 乱针绣:用色线交叉排列变化。特点是乱而不繁,乱中有律,色采丰富,立 体感强,空间感好,由于它层层交叉加色,运用得当可表现油画、水粉画丰富而 微妙的色彩关系。 羽毛绣:其特点是图案边沿不平整,按指定的比例伸出或缩进一定的长度, 用以表现羽毛的效果。 绣花的针法相当丰富,除了以上介绍的,还有十字绣、网络绣、花带绣、插 针等不下几十种。限于篇幅,仅作以上介绍。 电脑刺绣c a d 完成的工作实际上主要由三大部分组成:花稿输入、花稿处 理、花版输出。其它的工作都是为顺利完成这三大部分而进行的辅助工作。 输入部分主要有两种方法:一种是将设计好的花样送入计算机,目前最常用 的是扫描仪输入。扫描仪是通过光电设备直接将图稿上的线条、色块读入,因此 其输入相当简捷迅速,花稿、图纸、照片甚至刺绣产品都可以作为输入稿,极大 地缩短了用户的产品设计周期。另一种方法是直接用鼠标在屏幕上绘制绣图的轮 廓关键点,系统根据这些关键点生成自动绣图。这种方法较扫描仪输入要慢,适 用于没有花样原稿的情况。 数据处理部分根据用户的输入进行花稿的采样、绣图的生成、修改、补打等 操作,是刺绣c a d 系统最为重要的一个部分。花稿的采样是专对扫描仪输入的 花稿而言的,是用一定的方法获取花稿的特征轮廓点。绣图的生成是在用户输入 的特征关键点的基础上,首先根据边界生成算法生成针法的边界,然后在边界围 成的区域内使用区域填充算法获得整个针法的刺绣点,再将各个针法组合起来获 得整幅绣图。绣图的修改和补打其实是修改或添加新的特征关键点,再根据新的 关键点列重新计算绣图的边界点和落针点。 花版信息的输出一般有两种途径:直接送电脑刺绣机( 联机方式) 和通过媒 介物传送( 脱机方式) 。联机方式的好处是可以根据刺绣效果对花版进行实时修 改,而且可以通过增加i o 口实现一机多控。联机方式减少了信息传送的中间环 塑望奎兰堡主兰垡堡塞 节,节省了许多硬件开支,因而成为世界上生产制造的流行方式。脱机方式是利 用磁盘、纸带、e p r o m 等媒介物存放花版信息,再由电脑刺绣机的读取设备读 取使用。 第四节刺绣c a d 系统的发展趋势 1 、电脑多头绣花机的发展趋势 随着科技的进步,未来的电脑绣花机将朝着多功能、高效率、低噪声等方向 发展。一台多头绣花机可以完成许多工作,如既可绣真皮,也可绣丝绸面料,既 能做平绣,也可做特种绣等。刺绣机的头数将不断增多,效率将进一步提高。因 而用户将获得更高的性能价格比。 2 、花版编辑c a d 系统的发展趋势 ( 1 ) 性能更加完善,针法更加丰富 花版编辑c a d 系统的发展是与计算机硬件及其系统软件的发展密不可分的, 随着计算机计算能力的不断提高,显示技术的日趋完美,刺绣c a d 系统的花版编 辑系统将为用户提供更为完善的技术支持和更为友好的人机界面。许多以前必须 有设计者完成的工作都将可以由计算机来完成。例如以前必须由设计者输入的花 样的特征点可以由扫描仪扫描输入,设计者只需把画好的创意稿或图案花样放在 扫描仪平台上,再输入一些必要的参数,计算机即可自动生成这些特征点。 ( 2 ) 刺绣花稿的模拟输出 在以前的绣花花版c a d 系统中,判断设计的成功与否往往要通过刺绣机绣出 样品后才可加以判断,如有不合格的地方,则必须对原来的设计进行修改,再进 行试验、比较,反复这个过程一直到得出满意的结果。这种设计方法造成了时间 和材料的极大浪费。随着计算机性能的提高和彩色打印机的普及,在计算机上动 态模拟刺绣物的实际效果,或在打印机上模拟输出绣图图案都已经成为可能。这 种方法使得设计与生产两个过程独立出来,并且设计者可以根据模拟的效果对绣 图进行实时的修改,大大缩短了设计周期,提高了产品的竞争力。 ( 3 ) 通讯功能的扩充 随着计算机网络的普及,要求未来的刺绣花版c a d 系统必须具有在网络上传送 数据的功能,这样一方面可以避免许多重复的劳动,另一方面一幅花稿的设计甚 至可以由几个不同地方的设计人员来共同完成,大大方便了产品的设计。 9 塑坚奎羔堡主兰堡垒奎 第二章刺绣c a d 系统的设计方案 第一节 系统硬件的基本配置 系统要求的基本配置为:c p u 为i b m p c 兼容,5 8 6 或p e n t i u m 等级,操 作系统为w i n d o w s9 5 9 8 或w i n d o w s2 0 0 0 ,内存3 2 m b 以上,硬盘大小2 g 以 上,有c d - r o m 光驱、m o 可写式光驱( 复制备份之用,可选购) ,3 5 寸 软驱,显示器,键盘,鼠标。如果有以下的器件将会更好地发挥系统的性能:扫 描器:a 4 尺寸,不限品牌;大型数字化仪:1 2 1 8 英寸至4 2 6 0 英寸。不限 品牌:彩色打印机:a 4 尺寸,不限品牌。 第二节系统软件的总体构思 绣花花版编辑c a d 系统完成的主要功能应突出计算机在绣花工艺编针、花 样设计完善、花型选择变换等方面的辅助设计较工艺师手q - 仓, j 意更为方便、迅速、 准确的优势。花版编辑c a d 系统软件的编制主要应解决的问题是: 如何处理图形花稿的输入问题; 如何处理编辑过程中花样图案的数学表示问题: 如何实现刺绣工艺设计即完成绣花工艺自动编针; 如何进行绣图的增加、修改、删除、变换等花稿编辑工作; 如何实现人机交互的比较”友好”的操作环境。 第一个问题实质上是关于花稿有效轮廓特征关键点的建立问题。如果是对现 有的花稿建立轮廓特征点,可以有两种方法:一是先用扫描仪对花稿进行扫描输 入,再通过p h o t o s h o p 、p h o t o s t y l e 或p h o t o p r i n t 等软件对扫描得到的图像进行处 理,等到一些标准格式( 如g 1 f 、b m p 、q i f 等) 的图像,然后用一个自编的应 用软件提取这些图像的轮廓线,最后通过采样得到轮廓特征点。另一种方法是在 扫描仪得到的图像的基础上,使用数字化仪进行轮廓点的采样,建立轮廓线的特 征点列。如果是花稿的创作过程,轮廓特征点的建立则比较简单,只要设计者用 鼠标在屏幕绘图区按一定的规则逐点绘出即可。 第二个问题的实质是怎样用计算机语言来描述一幅绣图,使得在对绣图进行 生成、修改、变换等操作时尽可能地方便迅速。这涉及到绣图的数据结构问题。 我们将在下面的章节中详细介绍。 1 0 一 塑堡奎兰堡圭兰篁笙茎 嚣2 2 1c a d 系缱时总蠢提矗 一塑鋈奎堂堡主兰垡丝苎 圈2 2 2 花j 故编辑系绕梃圈 第三个问题是在已经获得绣图的轮廓及其特征点的情况下,如何由这些特征 点和一些输入的参数把一个个针法绘出来,并组合成一幅绣图。这是一个图形的 生成的过程,也是c a d 花版编辑系统中最为重要和复杂的部分。这个问题将在 后面的绣图针法的具体实现中进行阐述。 第四个问题是修版要完成的任务。在系统的类已经构造好,绣图的数据结构 已经确定,并且各个针法已经实现的情况下,这是一个很容易的问题。例如,在 实际的刺绣c a d 系统中,通常用双链表来表示一幅绣图,链表的每一个结点都 是一个针法,对绣图的部分增加、删除只要插入或删除相应的结点就行了。对绣 2 一 塑坚奎兰堡主主垡堡壅 图的变换也只要对链表的相应结点内容进行变换就行了。 最后一个问题其实是界面美观和操作方便性的问题。即系统应该提供个比 较友好和智能的绘图环境,在做到简捷、迅速的同时,还要尽可能为工艺人员提 供帮助,把花样处理结果尽量通过屏幕回显给工艺人员。 经过讨论,可以画出系统的总体功能图大致如图2 2 1 和2 2 2 : 第三节 o o p 思想及c + + 语言概述 一、0 0 p 思想 7 “面向对象”技术追求的是软件系统对现实世界的直接模拟,尽量实现将现实 世界中的事物直接映射到软件系统的解空间。它希望用户用最小的气力,最大限 度得用软件系统来解决问题。 传统的结构化程序设计的思路是:自项向下,逐步求精:其程序结构按功能 划分为若干个基本模块,这些模块形成一个树状结构:个模块之间的关系尽可能 简单,在功能上相对独立:每一模块内部均是由顺序、选择和循环三种基本结构 组成;其模块化实现的具体方法是使用子程序。 面向对象程序设计既吸取了结构化程序设计的一切优点,又考虑了现实世界 与面向对象解空间的映射关系,它追求的目标是将现实世界的问题尽可能简单 化。面向对象设计将数据及对数据的操作放在一起,作为一个相互依存、不可分 割的整体来处理,它采用数据抽象和信息隐藏技术。它将对象及对对象的操作抽 象成一种新的数据类型类,并且考虑不同对象之间的联系和对象类的重用 性。 面向对象程序设计优于传统的结构化程序设计,其优越性表现在,它有希望 解决软件工程的两个主要问题软件复杂性控制和软件效率的提高,此外它还 符合人类的思维习惯,能够自然地表现现实世界的实体和问题,它对软件开发过 程具有十分重要的意义。面向对象程序设计能支持的软件开发策略有: 编写可重用的代码; 编写可维护的代码: 共享代码; 精化已有的代码。 c + + 是在c 语言的基础上进行扩充,并增加了类似s m a l l t a l k 语言( 第一个 真正的面向对象程序语言) 中相应的对象机制;它将类看作用户定义类型,使其 扩充比较自然。c + + 以其高效的执行赢得了广大用户的喜爱,在c + + 中提供 了对传统语言c 的向后兼容性,因此,很多已有的程序稍加改造就可以重用, 浙江大学硕士学位论文 许多有效的算法也可以重新利用。它是一种混合型的面向对象程序设计语言,由 于它的出现,才使面向对象的程序设计语言越来越得到重视和广泛的应用。 二、面向对象系统的特性 面向对象系统最突出的特性就是封装性、继承性和多态性。衡量某一种程序 设计语言,看它是否是面向对象的程序设计语言,主要看它是否具有这三种特性。 下面对它们逐个地作简单的分析。 1 、封装性 从字面上理解,封装就是将事物包围起来,使外界不知道其实际内容。在程 序设计中,封装是指将一个数据和与这个数据有关的操作集合放在一起,形成一 个能动的实体对象,用户不必知道对象行为的实现细节,只需根据对象提供 的外部特性接口访问对象即可。因此,从用户的观点来看,这些对象的行为就像 包含在一个“黑盒子”里,是隐蔽的、看不见的。封装性应该具有下面三个条件: 具有一个清楚的边界,对象的所有私有数据、内部程序( 成员函数) 细节 都被固定在这个边界内; 具有一个接1 2 ,这个就口描述了对象之间的相互作用、请求和响应,它就 是消息。 对象内部的实现代码受到封装壳的保护,其它对象不能直接修改本对象所 拥有的数据和代码。 跟对象紧密相关的一个概念是协议。协议是一个对象对外服务的说明,它声 明这个对象可以为外界做什么。它是有一个对象能够接受并且愿意接受的所有信 息构成的对外接口。也就是说,请求对象进行操作的唯途径就是通过协议中的 消息进行。 外界对象能够并且只能根据该对象发送协议中所提供的消息,请求该对象服 务。即使一个对象可以完成某一个功能,但它没有将该功能放入到协议中去,外 界对象依然不能请求该对象完成这一功能。协议实际上是一个对象所能接受的所 有共有消息的集合。下面是一个用c + + 语言所定义的对象类: c l a s ss t u d e n t p r i v a t e : c h a r + n a m e ; i n t m a r k ; c h a r + m a j o r ; v o i d c h a n g e m a r k o ; p r o t e c t e d : 一塑婆查堂婴圭堂壁鎏苎 i n t g e t m a r k o ; p u b l i c : c h a r + g e t n a m e o ; c h a r + g e t m a j o r o ; ) ; 在上面所定义的学生对象类中,包含的数据内容有学生姓名、分数、专业。 它所包含的操作( 所具有的功能) 分为三种: 处于私有段( p r i v a t e ) 的c h a n g m a r k ,这是不向外界公开的功能,只提供 对象自己使用; , 处于保护段( p r o t e c t e d ) 的g e t m e r k ,只是只向部分外界宣布的功能,只 对其派生类对象提供服务: 处于共有段( p u b l i c ) 的g e t n a m e 和g e t m a j o r ,这是向外界公开的功能, 它可以响应外界对象的请求,这些是属于协议的内容。 面向对象系统的封装性是一种信息隐藏技术,它使系统设计员能够清楚地标 明他们所提供的服务界面,用户和应用程序员则只看见对象提供的操作功能,看 不到其中的数据和操作代码细节。从用户或应用程序员的角度看,对象提供了一 组服务,而服务的具体实现即对象的内部却被屏蔽封装着。 对象的这一封装机制的目的在于将对象的使用者与设计者分开,使用者不必 知道对象实现的具体细节,只需用设计者提供的协议命令对象去做即可。面向对 象系统中的封装单位为对象,即主要指对对象的封装,该对象的特性是由它所属 的类说明来描述。除去对象的封装性以外,类概念本身也具有一种封装意义,它 将数据和与这些数据有关的操作集合封装在一起,建立了一个定义良好的接口, 这反映了抽象数据类型的思想。 2 、继承性 继承是面向对象系统中的另一个重要的概念。在系统中有些对象,它们有一 些相同但又有些差别,这就需要在类之间建立一种相交关系,把这种相似之处表 现出来。继承所表达的就是一种对象类之间的相交关系。它使得某类对象可以继 承另外一类的特征和能力。若类之间具有继承关系,则它们之间应具有下列几个 特性: 类间具有共享特性( 包括数据和程序代码的共享) ; 类间具有细微的差别或新增部分( 包括非共享的数据和程序代码) ; 类间具有层次结构。 具体地讲,若类b 继承类a 时,则属于类b 的对象便具有类a 的一切性质( 数 浙江大学硕士学位论文 据属性) 和功能( 操作) 。我们称被继承类a 为基类或父类,而称继承类b 为a 的派生类或子类。因此,要构造一个新类b ,只需去继承个与之有公共特征的 基类a ,再描述与基类不同的少量特征( 即增加些新的数据成员和成员函数) 。 于是,类b 便由继承来的和新增加的两部分特征组成。 继承所具有的作用有两个方面:方面, - 7 d a 减少代码冗余;另一方面可以通 过协调性来减少相互之间的接口和界面。 当一个类b 从类a 中派生出来,b 类继承了a 的部分或全部属性,b 类作为 一个派生类,它又可以再派生新类,这样我们就可以从某一个类中派生出所需的 任意多的类,这就形成了类的层次。下面是一个c + + 语言中派生类的例子: c l a s sa ? f ) ; c l a s sb :p u b l i ca ) : c l a s sc :p u b l i cb f : 类b 是从类a 中派生出来的,a 是b 的基类,而且是直接基类;类c 是从类 b 中派生出来的,b 是c 的直接基类。对于c 来讲,除了b 是它的基类,a 也是 它的基类,但是是间接基类。由此,a 、b 、c 这三个类之间的继承关系就形成了 一个类的层次。类的层次关系可以清楚有效地表示现实世界中事物的分类问题。 在面向对象的系统中引入继承机制后具有如下的有点: 能清晰体现相关类之间的层次结构关系; 能减小代码和数据的重复冗余度,大大增加程序的可重用性; 能通过增强一致性来减少模块间的接口和界面,大大增加程序的易维护 性: 继承是能自动传播代码的有力工具: 继承还是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的 手段。 在面向对象系统中,继承性不仅作用在对操作的继承,还作用在对数据内容 的继承,既具有结构特性的继承性,又具有行为特性的继承性。在面向对象的系 统中,派生类可以访问基类的哪些数据成员和函数成员昵? 以c + + 为例来说 明,在c + + 语言中,类的定义域分为三段:私有段( p r i v a t e ) 、保护段 6 塑垩查兰堡主兰垡丝奎 ( p r o t e c t e d ) 和公有段( p u b l i c ) 。基类的成员若处在保护段和公有段中,派 生类是可以访问的,若基类的成员处在私有段中,派生类是无权访问的。 3 、多态性 多态性是面向对象系统中的又重要特性,它描述的是同一个消息可以根据 发送消息对象的不同采用多种不同的行为方式。多态性是通过重载和虚函数来实 现的。 在面向对象系统中,重载的含义是指通过为函数和运算符创建附加定义而使 它们的名字可以重载。也就是说相同名字的函数或运算符在不同的场合可以表现 出不同的行为。下面是一个c + + 语言中函数重载的例子: c l a s sn u m b e rf 1 : x : s 1 p u b l l c : i n tm a x ( i n ta ) r e t u r na i ? a :i :) f l o a tm a x ( f l o a tb ) r e t u r nb x ? b :x :) c h a r * m a x ( c h a r * c ) r e t u r ns t r c m p ( c ,s 1 ) o ? c :s l :j ? : 在这里重载了三个函数,均为m a x ,它们的功能是将函数的参数分别与各私 有数据比较大小。函数名相同,它们的差别在于函数参数的类型不同。当有求最 大值的消息发送时,到底是执行这三个函数中的哪一个,这要看发送消息的对象 是什么,在本例中即看传递的函数参量是什么,根据参量来调用不同的同名函数 假如发送的是m a x ( 1 0 ) 。则执行第一个m a x 函数,因为其参量是整型的。 虚函数是重载的另一种表现形式,它是一种动态的重载方式,它提供了一种 更为灵活的多态性机制。虚函数允许函数调用与函数体之间的联系在运行时才建 立,也就是在运行时才决定如何动作,即“动态连接”。虚函数是在引入了派生 概念后,用来表现基类和派生类的成员函数的一种关系的。虚函数的定义是在基 类中进行的,它是在基类中定义为虚函数的成员函数的声明中冠以关键字 v i n u a l ,从而提供了一种接口界面。在基类中的某个成员函数被声明为虚函数之 后,此需函数就可以在一个或多个派生类中被重新定义。在派生类中重新定义时, 其函数原型,包括返回类型、函数名、参数个数、参数类型及其顺序,都必须与 基类中的原型完全相同。下面是一个虚函数的例子: 1 7 t 术 t 酊n 曲 一塑坚盔兰堡圭兰竺丝奎 # i n c l u d e c l a s sb a s e | p u b l i c : v i r t u a lv o i dw h o ( ) 定义虚函数 c o u t ”b a s e n ”: f : c l a s s f i r s t :p u b l i cb a s e t | p u b l i c : v o i dw h 0 0重新定义虚函数 c o u t ”t h ef i r s td e r i v a t i o n n ”;) ) : c l a s ss e c o n d :p u b l i cb a s e 伽 p u b l i c : v o i dw h 0 0重新定义虚函数 c o u t u p d a t e w i n d o w 0 : r e t u r nt r u e 浙江大学硕士学位论文 这个函数完成的主要任务如下: 定义并初始化了一个多文档样板对象p o o c t e m p l a t e ,构造这个对象时用 了四个参数。第一个参数时显示和管理文档的程序资源,i d r d r a w t y p e 就是 当打开文档时显示在主框架窗口的菜单、图标和文字说明资源的i d 号( 可 以打开d r a w r c 文件,在里面找到i d 号为i d d r a w t y p e 的资源) ,另外三 个参数是文档类、子框架类和视图类的信息,通过m f c 宏r u n t i m ec l a s s 取 得。程序通过这些信息进行工作,在通过这个多文档模板打开或新建一个新 文档时,分别生成一个文档类、子框架类和视图类的对象,并用第一个参数 指定的资源进行管理。 完成多文档模板的定义后,程序有产生了一个主框架窗口,创建主框架 窗口时采用的是i d r _ m m n f r a m e 资源。d r a w 程序运行时,当所有的文件被关 闭时显示在屏幕上的资源就是i d r _ m a i n f r a m e 资源。在有文档打开的情况下, 这个资源被注册到文档模板类对象中的i d r d r a w t y p e 资源所代替,所以在 打开文档后,程序显示的菜单、工具条等内容都不一样。 创建主框架窗口后,程序将处理命令行信息。命令行信息是跟在命令后 的参数。如可用下面的语句启动d r a w 程序: d r a wd r a w l d a t启动d r a w 程序,并在启动后自动打开d r a w l d a t 文件 函数p a r s e c o m m a n d l i n e 0 用来取得命令行,函数p r o c e s s s h e l l c o m m a n d 0 处理命令行的信息。命令行参数存在,此函数会取出参数调用c w i n a p p 的 o n o p e n d o c u m e n t 打开文档:命令行参数不存在,则调用o n o p e n d o c u m e n t 函 数创建新的文档。不论是打开文档还是创建新文档,c w i n a p p 都是通过调用 多文档模板来构造一个文档类对象、一个子框架类对象和一个视图类对象, 并调用相关的资源进行编辑。 最后,程序显示并更新窗口。 ( 4 ) w i n m a i n 处理消息 完成初始化任务后,w i n m a i n 进入消息循环。通过r u n ( ) 函数把消息从消息 队列中取出来,并发送到别的窗口。大多数命令消息被发送到应用程序主窗口, 其中的函数w i n d o w p r o c 0 得到消息,再根据消息的类别送到适当的对象,激活 并运行各消息处理函数。 ( 5 ) w i n m a i n 退出,程序终止 d r a w 程序中选择“f i l e ”菜单下的“e x i t ”命令,或系统菜单的c l o s e 命令, m f c 程序删除程序窗口,并调用w i n 3 2a p i 函数:p o s t q u i t m e s s a g e ( ) 退出消息 循环。然后w i n m a i n 函数返回,程序结束。 一塑坚盔兰堡主兰垡堡茎 第五节 刺绣系统类的构造 、针法类 在刺绣c a d 系统中,任何幅绣图都是由些针法组成的,例如朵玫瑰 可以由一些包针组成,一只老虎可以由满绣和一些包针组成,所以花版编辑系统 最基本的操作单元应该是针法。应用o o p 的思想,可以把各个针法都定义为一 个类,在每一个针法类中,都定义了一些相关的变量,比如在直线包针类中定义 了m s h a p e t y p e ( 针法的类型) 、mz h e n n u m b ( 针法的刺绣点数) 、mw i d e ( 直线包针的宽度) 和md e n s i t y ( 直线包针的密度) 等参数,在类中还定义了 一些操作方法,比如在直线包针类中定义了d r a w ( 绘制直线包针) 、d r a w k e y v o i n t ( 绘制直线包针的关键特征点) 、c r e a t e e d g e l i s t ( 建立直线包针的边界点列) 和c r e a t e p o i n t l i s t ( 建立直线包针的刺绣点列) 等函数。在这些变量和方法中, 有些是各个针法中都有的公共的变量和方法,比如ms h a p e z y p e 、mz h e n n u m b 、 d r a w ( ) 、d r a w k e y p o i n t 0 ,这样就可以把这些公共的变量和方法提取出来,构成 一个针法基类,每一个具体的针法类都从这个基类派生而来。这样的话程序的结 构很清楚,公有的操作在基类中完成,特有的操作在各自的类中完成,可以减少 很多重复的代码。基类的操作大多做成虚函数,以便于调用子类相应的函数。类 的结构如下: 针法基类( 各 种针法的共有 变量和方法) 包针( 包针 竹私有变量 和方法) 羽毛绣( 羽 毛绣的私有 变量和方 法) 扇形绣( 扇 形绣的私有 变量和方 _ i 去) 图2 5 1 针法类的构造 具体实现如下: c l a s sc s h a p e :p u b l i cc o b j e c t针法基类 ( p u b l i c : 珠串( 昧串 的私有变量 和方法) j 堕醴堡主鲨塑 i n tm s h a p e t y p e ; l o n gm z h e n n u m b | p u b l i c : 绣图的类型 绣图针数 c s h a p e ( i n t s h a p e t y p e ,l o n gz h e n n u m b ,d o u b t e pk e y l i s t ,c x i u h u a p o i m l i s t + p x i u h u a l i s t ) 构造函数 | ) v i r t u a lv o i dd r a w ( c d c + p d c ,i n tm d r a w m o d e ) ; v i r t u a lv o i d d r a w k e y p o i n t ( c d c + p d c ,b o o l p _ k e y l i s t ) ; ) : c l a s sc l i n e b a o :p u b l i cc s h a p e 直线包针类 ( p u b l i c : d o u b l e m l o n g ;直线包针长度 d o u b l em d e n s i t y ;直线包针密度 p u b l i c : l i n e l o n g ,c k e y p o i n t l i s t * r e d r a w ,c k e y p o i n t l i s t * c l i n e b a o ( i n ts h a p e t y p e ,l o n gz h e n n u m b ,d o u b l e l i n e l o n g ,c k e y p o i n t l i s t + p _ k e y l i s t ,c x i u h u a p o i n t l i s t + px i u h u a l i s t ,d o u b l el o n g ,d o u b l ed e n s i t y ) :c s h a p e ( s h a p e t y p e ,z h e n n u m b ,l i n e l o n g ,p _ k e y l i s t ,p _ x i u h u a l i s t ) 构造函数 | f ) v o i dd m w ( c d c + p d c ,i m d r a w m o d e ) ; v o i d d r a w k e y p o i n t ( c d c + p d c ,b o o lr e d r a w ) ; v o i dc r e a t e e d g e l i s t ( ) ; v o i dc r e a t e p o i n t l i s t ( ) ; , ” f 真电铁法装 二、双链表类 浙江大学硕士学位论文 在刺绣c a d 系统中,最常用的数据结构是链表,链表的结点各不相同,有 i n t 、f l o a t 、s t r u c t 等各种类型,而s t r u c t 又包含关键点、边界点、刺绣点等各种类 型,于是便有整型链表、浮点型链表、结构型链表等各不相同的链表,但是它们 的操作( 插入、删除、查找、排序等) 却是相同的。如果对每一个链表类都定义 套操作函数,便会使得程序代码的重用性差,维护起来也非常困难,解决这个 问题的方法是引入类属编程。在c + + 中是通过模板机制来实现类属编程的。 1 、模板的概念 模板是c + + 中实现类属机制的一种工具,它的功能非常强大,它是无约束 类属机制和约束类属机制的集合,既允许用户构造类属函数( 函数模板) ,也允 许用户构造类属类( 模板类) 。模板类、对象、函数之间的关系如下图: 图2 5 2 摸板、类、对象和函数之间的关系 模板声明格式: t e m p l a t e 说明体 t e m p l a t e :这是一个声明模扳的关键字,表示正在声明一个模板。 模板参数表:由若干个模板参数组成,每个模板参数均由类型参数和参数说 明两部分组成,类型参数指的是c l a s s 标识符。 说明体:指模板定义体,或为函数模板的定义,或为类模板的定义。 2 、函数模板与模板函数 若有个求最大值的函数,由于c + + 是强类型语言,我们定义时,不同的 数据类型都需要定义不同的版本。如 一塑坚查兰堡主兰垡堡壅 i n tm a x ( i n t x ,i n ty ) r e t u r n ( x y ) ? x :y : ) f l o a tm a x ( f l o a tx ,f l o a t y ) r e t u r n ( x y ) ? x :y : ) 这些版本之间的基本内容是相同的,只是参数类型和函数返回值类型不同, 用定义模板函数的方法可以避免这些重复的定义。定义如下: t e m d l a t e tm a x ( tx ,y y ) r e t u r n ( x y ) ? x :y : ) t 为类型参数,既可以取系统的预定义类型,也可以取用户自己定义的类型。 这样定义的m a x 代表的是一类函数,称为函数模板。函数模板不是一个完全的函 数,必须将它的模板参数t 实例化以后,才能完成具体函数的功能。将t 实例化 的参数称为模板参数,用模板参数实例化的函数称为模板函数。一个简单的例子 如下: # i n c l u d e t e m p l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 薪酬绩效管理培训
- 魔幻消气屋课件
- 巨人创意画课件
- 自然拼读字母课件
- 表情包转盘课件
- 新媒体案例培训
- 朱子治家培训讲座
- 课件最美的眼神
- 课件最后一页内容
- 课件智能生成
- 《中国的行政区划》- 完整版课件
- 机器视觉技术及应用全套课件完整版电子教案最新板
- 道路工程实施重点、难点分析及解决方案
- 北师大版四年级上册数学(全册)同步随堂练习一课一练
- 精美的个人简历封面 (4)应聘招聘投递简历模板找工作
- K2FastWave中文操作手册
- 地热井常见主要问题分析与研究_图文
- 教育学 德育PPT课件
- 科学引文索引(SCI)投稿指南及主要医学信息资源
- 《广告策划概述》PPT课件.ppt
- BS EN13900-5:2021标准中文版(压滤值测试)
评论
0/150
提交评论