毕业论文范文——数字地图质量管理研究_第1页
毕业论文范文——数字地图质量管理研究_第2页
毕业论文范文——数字地图质量管理研究_第3页
毕业论文范文——数字地图质量管理研究_第4页
毕业论文范文——数字地图质量管理研究_第5页
免费预览已结束,剩余24页可下载查看

下载本文档

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

文档简介

成人高等教育学生毕业论文 存档编号: 武 汉 大 学 毕 业 论 文 题目 _ 数字地图质量管理研究_ _ _ 专 业: 信息工程 _ 学 院: 遥感信息工程学院 _ 年 级: _ 学习形式: 函授 _ 学 号: _ 论文作者: _ 论文指导教师: 余 洁 _ 指导教师职称: 教授 _ 完成时间: 年 月 日 目目 录录 摘 要 I ABSTRACT .II 第一章 绪论 .1 1.1 论文的研究目的 .1 1.2 本文的结构安排 .1 第二章 数字地图质量管理系统 .2 2.1 数字地图的概念和应用.2 2.2 数字地图质量管理系统.3 2.2.1 数字地图数据的检查验收 .3 2.2.2 数字地图质量检查的主要内容 .4 2.2.3 系统设计目标 .5 2.2.4 系统设计原则 .5 第三章 VBA FOR AUTOCAD 开发技术7 3.1 CAD 的二次开发环境 7 3.2 VBA FOR AUTOCAD 的主要特点和 VB 的主要区别8 3.3 VBA 的基础知识及编程基础 9 3.3.1 用 VBA 开发 AutoCAD 所涉及的一些概念 .9 3.3.2 VBA 编程基础 11 第四章 基于 VBA FOR AUTOCAD 开发技术的面交叉检查功能开发 .13 4.1 算法实现 13 4.2 程序流程图 14 4.3 程序原代码 14 4.4 程序运行界面 18 第五章 小结 20 致 谢 .21 参考文献 .22 附录 .23 附录一.模块一(加载菜单程序原代码).23 附录二.模块二(窗体显示程序原代码).24 I 摘摘 要要 本文在对数字地图质量管理系统的主要内容、设计原则和设计目的进行讨论的基础上, 采取利用 VBA 对 AUTO CAD 进行二次开发的方法进行数字地图质量管理。文章分析了 AUTO CAD 的二次开发环境,VBA FOR AUTOCAD 的主要特点和 VB 的主要区别;重点研究了数字地 图质量管理的一个模块即面交叉问题的检查的实现,并通过例子验证利用该模块能够检查 出在同一层中是否有交叉区域,并且在图上的相应位置以圆的形式显示出来,以便进行修 改。 关键字:数字地图质量管理 面交叉 VBA II Abstract This article to the digital map quality control systems primary coverage, the principle of design and the design goal carries on discussions foundation, adopts carries on the re-development using VBA to AUTO CAD the methods to carry on the digital map quality control. The article has analyzed the AUTO CAD re-development environment, the VBA FOR AUTOCAD main feature and the VB main difference; Studied a digital map quality control module namely to deliver in person the fork question with emphasis inspection realization, and used this module through the example confirmation to be able to inspect in the identical level whether to have the overlapping region, and on the chart relevant position by the circle form demonstrated that with the aim of making the revision. Key words Digital map quality control Delivers in person the fork VBA 1 第一章第一章 绪论绪论 1.11.1 论文的研究目的论文的研究目的 随着AUTO CAD和GIS 在各行各业的广泛应用,目前,数字地图已成为测绘保障部门的主 要测绘产品,规模、体制都在不断扩大。各测绘单位在大量生产数字地图产品的同时,出 现了大量生产数字产品和数字产品质量控制这对矛盾。数字地图看不见、摸不着,这就给 模拟地图查图的老办法造成了很大困难,如:单一从绘图输出的样图上查不出要素的属性, 也看不见拓扑数据是否形成等。所以,如何针对这一对矛盾,促进数字地图生产的发展, 生产出高质量、高精度的数字产品是我们亟待解决的问题。 我们感到要解决这一问题,就必须立足现有设备,研制开发能够有一定自动化程度的 数字地图质量检查软件,用计算机代替人工查图. 本文从这一目的出发,分析了数字地图质量管理的研究现状,讨论了数字地图质量管 理的要求、内容等,并开发了面交叉检查的模块。 1.21.2 本文的结构安排本文的结构安排 考虑到目前数字地图的迅速发展和数字地图质量管理问题层出不穷的情况,论文对数 字地图质量管理系统进行了比较全面的分析和讨论。 论文的第二章着重讨论了数字地图质量管理系统的主要内容、设计目标和设计原则。 第三章则详细分析了 VBA:分析了 CAD 的二次开发环境,并重点陈述了 VBA 的基础知识及编 程基础。第四章是文章的核心部分,部分理论上的构思在这一部分得以实现,这一部分详 细的从程序算法,程序流程,原代码和运行结果四个方面展示了程序实现的理论基础和实 际的运行效果。 2 第二章第二章 数字地图质量管理系统数字地图质量管理系统 2.1 数字地图的概念和应用数字地图的概念和应用 长期以来,地图作为了解客观地理环境的手段,一直是纸质地图的形式广泛应用着.它清 晰直观,易读易懂,在国民经济建设中发挥着重要的作用。随着科学技术的发展,出现了一种 新型的地图,数字地图。 数字地图是用数字形式表示地图信息,独立于固定的符号系统,以数据和数据结构为信 息传递语言,不强调信息的符号化,注重计算机对信息的理解和识别,主要在计算机环境中使 用,在计算机中的表示和存储形式主要是一组数据,由坐标位置,属性编码和一定的数据值所 组成,在计算机屏幕上和输出设备上表现为色彩鲜艳,符号化的地图(如图1)。 图1 数字地图 目前,数字地图广泛应用与国民建设的各个方面,在测绘行业,数字地图提供了基础资料, 主要体现在城市基础地理信息系统建设上,数字化测绘技术的迅速发展,使得城市规划的 测绘部门获得了整个城市的大部分基础数字地图1。相对于纸质地图这些地图更加易于保存, 并且也更具实效性。 3 2.22.2 数字地图质量管理系统数字地图质量管理系统 系统的作用是为了使数字地图质量合理性、完备性、可靠性、简便性、自动性,同时 也使数据在精度上得到提高。 它的主要功能有: 1)分层与编码检查检查各层编码是否正确、有无漏层;各层间是否重复要素 公共 边是否拷贝到各层中。 2) 图形质量检查 检查线划的光滑、粗细、清晰情况是否满足需要;要素间的关系是 否合理,有无地理性矛盾;符号配置、图面整饰、注记是否正确无误。 3) 属性及拓扑关系检查 逐层检查每一个属性表,检查属性项的名称、类型、长度、 顺序是否符合规定要求,有无遗漏:检查属性值是否正确。检查每个层是否建立了相应的 拓 朴关系。 4) 方向问题检查 检查有向点、有向线的方向是否正确。 5) 面状要素检查 .1 数字地图数据的检查验收数字地图数据的检查验收 数字地图检查验收的内容有形式检查和内容检查10; 1、形式检查:就是对作业用图、检查绘图、数字化数据以及各种文档是否完整、齐全, 其格式是否正确等的检查。 2、内容检查:就是对数据进行深层的检查。对于一幅全要素数字地图来讲要对以下十 三个要素层进行检查,测量控制点、独立地物、居民地、交通、管线与垣栅、境界与政区、 水系、地貌、等高线、土质、植被、地名、图外信息等,具体内容分以下五个方面。 (1)位置精度 数字化的图廓点、测量控制点与其相应的理论值或实测值的符合程度。 数字化地图各要素的几何位置与数字化底图上相应要素的符合程度。 (2)属性精度 属性数据是否正确表达了数字化底图要素的分类、分级等质量及数量特征。 (3)数据的完整性 数字化地图的内容是否完整、有无遗漏、有无重复。 (4)数据逻辑的一致性 同一要素层或不同要素层之间、数字化目标的相关位置关系是否正确;重叠要素几何位 置是否一致其属性描述是否正确;相邻图幅的接边目标,几何上是否自然连接,属性描述是 否一致。 (5)拓扑关系正确性 4 拓扑关系中的同名结点是否匹配,弧段无不必要的假结点;面域是否闭合,有无内部唯 一标识;拓扑数据是否正确表达目标之间的邻接连通、包含关系。 .2 数字地图质量检查的主要内容数字地图质量检查的主要内容 (1)各要素层的交互接边 在实际生产中出现问题最多的就是相邻图幅的接边问题,只能利用检查绘图互相接边 来检查,如存在没接边的问题时,就只能用采集软件打开一幅图数据,在屏幕上大致地编 辑,而实际接边差的数值,还需要再接边,编辑、绘图输出,对照接边反复多次,既费时 又费力,同时也白白消耗了不少纸张。 基于此,我们在研制软件时,应重点解决要素接边问题,并应设法对交通、水系、境 界与政区、植被、等高线、管线与垣栅、居民地、土质、地貌等九个要素层的接边工作, 利用各要素层的地理坐标经纬度直接在屏幕上进行上、下、左、右四个方向的自动接边, 对几何位置不准、属性错误的数据利用交互式修改或在文件上标注出来。该系统是对数据 进行直接操作,并提供了方便快捷的检查和编辑修改功能,对点误差为零,避免了过去利 用检查绘图进行接边误差较大的现象发生。 (2)拓扑结构化检查 数字地图的优点只有按拓扑结构组织起来,才能有效地予以利用。作为地图各要素的 抽象代表的点、线、面具备拓扑性质,所以拓扑关系就是点、线,面元素之间的关系。地 图上主要的拓扑关系有关联关系,临接关系和包含关系 关联关系:指存在于空间图形的不同类元素之间的关系 邻接关系:指存在于空间图形的同类元素之间的关系。 包含关系:指存在于空间图形的同类但不同级的元素之间的关系。分为简单包含、多层 包含和等价包含。 数据拓扑结构的检查工作是比较复杂的,本系统对拓扑结构化检查主要包括面拓扑和 线拓扑的检查,我们对居民地、交通、水系、境界与政区、地貌、土质、植被等七个要素 层中的面、线拓扑进行编程检查。重点在同名结点是否匹配,是否有不必要的假结点,面 域是否有唯一的标识,是否闭合等几个方面进行检查4。 (3)要素属性的检查 对要素属性的检查是针对任一要素层的主码、识别码、描述码和参数码等的检查。同 时对那些主码、识别码、描述码之间具有唯一推导关系的要素,参数码和领码等进行自动 检查,如果出现其它码即认为非法,在错误记录文件中标出。比如:在数字地图数据中有四 种参数码,宽度参数、相对高参数、长度参数、其它参数。领码依次为工00, 200, 300, 400,如果在其它参数中输入高程值后会自动形成400领码,如将其输在相对高参数中形成 的领码为300,这就说明高程值的输入项不正确,应在其它参数中输入,形成领码为400的 才正确。 5 (4)要素坐标位置值域的检查 值域的检查主要是对作业员在采集数据时,一是在定位精度不符合要求时,强行进入 采集软件中进行采集数据,这时形成的数据不仅位置精度不够,同时有数据超出范围之外。 二是作业员在采集数据时将点采在图幅范围外。三是在数据编辑过程中,将数据点位移动, 超出范围。 可以采用入库的地理坐标数据与图幅范围的地理坐标值作比较,对超出范围的数据自 动修改,并将错误记录在文件中。如1: 25万数字地图的图幅范围:纵坐标 Ymin=O,Ymax=14400,横坐Xmin=O,Xmax=21600,以秒为单位,图幅数据和其比较,XXmax和YYmax的数值即为超限9。 (5)等高线要素层的检查 作业员在作业过程中重点是高程值的检查,出现错误最多的也是高程值赋错。而且利 用绘图检查也存在弊病,等高线稀疏的图幅还可以,如果山势比较陡,等高线稠密,绘出 图后的等高线几乎分不清楚,所以也无法套片查图。 编程解决的办法可以是将编辑赋值后的等高线图形文件叠加在原始扫描图像文件上, 检查是否有变形、移位、丢漏等错误。 .3 系统设计目标系统设计目标 主要目标是通过该系统使数字地图的数据更具独立性、合理性、完备性、可靠性、简 便性、自动性,同时也在数据精度上得到提高,从以下几个方面进行: 1)交通、水系、境界与政区、植被、等高线、管线与垣栅、居民地、土质、地貌等九 个要素层的接边情况检查及交互式修改。 2)交通、水系、境界与政区、植被、居民地、土质、地貌、图外信息等要素层的拓扑 结构化检查及修改。 3)测量控制点、独立地物、居民地、交通、水系、境界与政区、管线与垣栅、地貌、 土质、植被、等高线、地名等要素层的坐标数据值域检查及修改。 4)所有要素层要素属性的检查及修改。 5)等高线要素层的高程值检查及修改。 最终达到数字地图质量管理的要求,从而大大提高了效率和减轻了以往繁杂的工作量。 .4 系统设计原则系统设计原则 1)独立性 系统各模块相互独立,各自具备一套完整齐备的检查功能、处理功能。而且功能相互 独立,针对不同的要素层或要素进行不同项目的检查和处理,重复度小。 2)合理性 6 系统的功能模块的划分要以系统的总体设计目标相符,以系统的设计思想为指导,合 理地进行集成和区分,功能特点清楚逻辑清晰,设计合理。 3)完备性 根据系统的应用目的要求,功能齐全,适用各种应用目的和范围。 4)可靠性 各功能模块的稳定性好,在检查操作过程中可靠实用,数据处理方法简便、科学、实 用。 5)简便性 各功能模块的操作方便、简单、明了、宜于学习和使用,容易掌握。 6)自动性 各功能模块在检查数据过程中,自动化程度较高,部分要素在检查出错后自动修改, 数据修改后自动回存更新。 7)高精度性 检查修改后的数据精度高,符合数字地图数据采集规范和标准的要求。 7 第三章第三章 VBAVBA FORFOR AUTOCADAUTOCAD 开发技术开发技术 3.13.1 CADCAD 的二次开发环境的二次开发环境 AutoCAD的主要特色在于其支持用户的二次开发,即用户可以将它设计和扩展成自己的 专用软件。 AutoCAD 2000面市以来,其开发途径更加广阔。除了使用传统的AutoLISP及基于C语言 的ObjectARX等开发工具外,用户还可以使用Visual Basic、AutoCAD VBA 、Visual LISP 及J+集成开发环境来开发定制AutoCAD,特别是AutoCAD 2000已经将AutoCAD VBA 、Visual LISP集成在系统的内部,用户使用更加方便。 AutoLISP是AutoCAD内嵌的一种解释语言。它是一种很好的交互式语言,很适合于CAD 这类交互性很强的应用软件。LISP语言的特点是程序和数据都采用符号表达式的形式,即 一个LISP程序可以把另一个LISP程序作为它的数据进行处理。因此使用LISP语言编程十分 灵活,看起来,是一个一个的函数调用。利用Auto LISP开发AutoCAD的一个典型应用是实 现参数化绘图的程序设计。利用参数化绘图方法可以在较短的时间里快速、高质量地完成 多方案对比设计,也可建立各种零部件的图形库,给出一些必要的参数即可直接绘出图形, 由此可见Auto LISP的强大功能之所在6。 但是,随着计算机技术的发展,AutoCAD编程更加复杂,代码越来越庞大,AutoLISP的 缺点亦愈未愈明显。主要表现是:功能单一,综合处理能力差;解释执行,程序运行速度 慢;缺乏很好的保护机制,软件质量不易保证。 ADS (AutoCAD C语言开发环境)是AutoCAD R11开始支持的一种基于C语言的灵活的 开发环境。ADS程序的隐藏错误往往导致AutoCAD,乃至操作系统的崩溃;要编译才能运行, 不易见到代码的效果;同样功能C语言的ADS程序一般比AutoLISP程序的源代码要长不少, 比较繁冗。 ARX (AutoCAD运行时间扩展)是AutoCAD R13之后推出的一个全新的面向对象的开发 环境,也是AutoCAD第一次直接提供面向对象的二次开发工具。可以说AutoLISP着眼于应用 程序的交互性,ADS CC+着眼于应用程序的综合性,而ARX则着眼于应用程序的智能性。 然而,ARX应用程序比ADS程序具备更大的危险性和破坏性。ARX程序设计比ADS要复杂 得多。ARX程序设计的错误,经常导致AutoCAD崩溃,甚至操作系统的崩溃。程序员需要有 很高的素质,才能编制好ARX应用程序。 8 Vlsual LISP是AutoLISP的换代产品,已经集成在AutoCAD 2000之中。它与AutoLISP完 全兼容,并提供它所有的功能,同时它能访问新的多文档设计环境。COM/ActiveX用户界面、 事件响应器等。Visual LISP同时提供了新的编程环境。该环境提供括号匹配、跟踪调试、 源代码和语法检查等工具,方便了创建和调试LISP程序7。 用户和开发者可以充分利用完全集成在AutoCAD内部的LISP开发环境。作为一个完整的 用户化开发环境,Visual LISP可以迅速而方便地建立自己的高效解决方案。 AutoCAD 2000包含了VBA (Microsoft Visual Basic for Applications)应用程 序开发应用语言。VBA在集成开发环境中提供了高质量的用户化编程能力。它能够使得 AutoCAD数据与其它VBA应用程序直接共享,如Microsoft Office 97软件。最重要的是 VBA的加入,扩展了AutoCAD集成用户化工具的集成能力。它集成了AutoL1SP、Visual LISP 和ObjectARX API等工具。这样,就为访问AutoCAD 2000软件的多种技术框架提供了新的 选择和新的开放机会,可以按所需求的工作方式用户化应用程序,也可以从战略上考虑开 发基于AutoCAD的应用程序。 总之,虽然Auto CAD 2000的开发方法很多,Auto CAD中的大部分组件也都可以由用户 自己定义或定制,但很多的功能只需要编辑一些AutoLISP 程序就可以完成了。所以 AutoLISP编程开发Auto CAD是基础。 3.23.2 VBAVBA FORFOR AUTOCADAUTOCAD 的主要特点和的主要特点和 VBVB 的主要区别的主要区别 VBA可作为空间容器,允许在VBA窗体设置控件,同时,VBA支持自动化控制。VBA提供 了一个综合开发环境,具有完整的容错功能,对象浏览器,属性窗口和工程窗口。使用 VBA,用户可以用ACTIVEX AUTOMATION所提供的对象来拓展(二次开发)AUTOCAD的功能, 建立自己的解决方案。 到底是用VBA还是用VB来控制AUTOCAD好呢?可以从运行速度,功能等方面做一个比较 1、应用程序的运行速度 VBA是一个内嵌式的控制器,可以更好的与AUTOCAD沟通,运行速度快,并且,AUTOCAD 和AUTOCAD共享内存空间,明显节约了空间,提高了运行速度。同时它提供了应用程序和其 他VBA程序的沟通路径,当使用其他程序的对象类型库是,AUTOCAD可以作为该程序的 AUTOMATION客户程序,而不仅仅是AUTOCAD本身。 当AUTOCAD被外部的VB程序或外部的VBA应用程序控制时,其运行速度明显降低,因为 外部应用程序要通过WINDOWS系统与CAD沟通。 2、程序功能 虽然VBA没有VB含有的其他部件和功能(例如外部数据引擎和报表输出等功能)以及VB 所提供建立可执行的原代码编译器,但是VBA提供了一个文件中心模型,能让代码程序以应 用程序的格式应用起来。 9 3、投资 VBA是主应用程序提供的一个部件,随应用程序本身一起提供,不需要单独购买,而 VB 是一个单独软件需要另外购买 总体而言,两者各有所长,使用VBA进行AUTOCAD二次开发的优势体现在下面几个方面: 1)开发环境和VB类似,而VB编程环境易学易用。CAD VBA是自动嵌入在CAD应用程序中 的,所以不必编程来建立与CAD的连接,而VB必须通过编程来建立与CAD的连接。 2)VBA运行在与CAD相同的处理空间,从而提供了一个高效的编程环境,而独立的VB与 ACTIVEX AUTOMATION的接口需要通过IPC驱动AUTOCAD,因而VBA比VB 更具明显的性能优势 AutoCAD VBA在AutoCAD应用程序进程内运行,程序运行速度比较快。 3)可以利用VBA进行可视化界面设计,允许快速开发程序和及时得到设计的反馈,例 如,可以快速构建对话框。 4)工程可以单独存在,亦可以嵌入在图形中允许程序随图形文件一起存储(R14版本不 支持),这使开发者在发行应用程序时有极大的灵活性。 5)VBA还可以同其他使用VBA的应用程序集成,共享系统资源,例如,用户可以创建一 个应用程序,自动提取属性信息,把结果直接插入Excel数据表以及执行任意数据转换。 6)支持事件过程:允许工程文件加密。 总之,AutoCAD VBA是一个非常看好的开发工具,现在全球已经有超过80万家AutoCAD 二次开发商使用AutoCAD VBA进行程序开发 3.33.3 VBAVBA 的基础知识及编程基础的基础知识及编程基础 .1 用用 VBAVBA 开发开发 AutoCADAutoCAD 所涉及的一些概念所涉及的一些概念 面向对象技术目前被广泛地应用于计算机的各个领域,其中最直接、最基本的应用就 是用于软件的开发过程中,形成了包含面向对象的分析(OOA)、面向对象的设计(OOD)和面 向对象的程序设引(OOP)的所谓面向对象的软件开发方法(OOSD) . 1、类和对象 面向对象的程序设计不同于早期的过程化程序设计,它允许抽象化、模块化的分层结 构,具有多态性、继承性和封装性。面向对象的程序设计中最主要的概念是类和对象。类 决定了对象的特征以及对象外观和行为。比如铸造砂模和铸件之间的关系,铸造砂模是类, 它确定了每个铸件(对象)的特征,比如大小和形状。用类创建对象,对象就是铸件。在VBA 中,对象就是由类创建,或者说对象是类的一个实例。类的描述保存在类型库中,而且通 过VBA集成开发环境(VBA IDE)中的对象浏览器可以查看。对象代表应用程序中的元素,比 如,AutoCAD 图形文件中的直线、图层、文字、块等等。在VBA的程序中,在使用对象的任 一方法或改变它的属性值之前,必须先识别对象。对象集合则是一个包含几个其他对象的 10 对象,而这些对象通常但并不总是相同的类型。例如,在AutoCAD中的文档集合对象 (Documents)包含了所有己经打开的文档对象(Document)。 2、属性、方法和事件 在VBA中,属性定义了应用程序中对象的特征,例如AutoCAD中图元的大小、颜色或位 置,或某一方面的行为,例如图元对象是否有激活或可见的。通过修改对象的属性值可以 改变对象的特征。方法指的是对象能执行的动作。例如,AutoCAD个文档集合对象的Add方 法,它可以在当前打开的文档之上增加一个新的文档对象。事件是一个对象可以辨认的动 作,像单击鼠标或按下某键等,并且可以写某些代码针对此类动作来做出响应。用户的操 作或程序代码的结果可能导致事件的发生,或是由系统引发。在VBA中,AutoCAD中的对象 有三种级别的事件: 应用程序级(Application)、文档级(Document)和图元对象级(Object)事件。应用程序 级(Application)事件:当AutoCAD本身的环境被改变时,就触发该类事件。例如,创建、打 开、保存、关闭或打印图形文件时;使用AutoCAD命令时:加载或卸载ARX或LISP应用程序时: 改变系统变量时;以及改变主窗体尺寸时等等。文档级(Document)事件:当一个指定的图形 文件(DWG文件)自身或其内容发生变化时,就触发该类要件。例如,添加、删除或修改图形 文件中的对象时;快捷菜单激活时:选择集被改变时:图形文件窗口被改变时:以及重新生成 图形文件数据时等等。此外,该类事件还对应着一个图形文件的打开、关闭以及打印、加 载或卸载ARX和LISP应用程序等操作。图元对象级(Object)事件:当图形数据库中的图元对 象被修改时,触发该事件AutoCAD ActiveX中,具有Modified一种图元对象级事件,该事件 在图形数据库中的图元对象被修改或被触发。 3、过程和过程关键字 过程是包含VBA代码的单位。它包含一系列的语句和方法,以执行操作或计算数值。在 VBA中,有两种过程:子过程和函数过程(通常简单地称为函数)。子过程执行一个操作或一 系列的运算,但是不返回值。子过程的声明使用Sub关键字,并用End Sub语句来结束。函 数过程将返回一个值,可以在表达式中使用。函数过程的声明使用Function关键字,并用 End Function语句来结束。VBA包含许多内置函数,用户也可以创建自己的自定义函数。 Sub和函数过程都可以接受参数。 在VBA中,在Sub和Function前面的关键字Public和Private是用来表示作用域的。关键 字Public表示该过程或函数在整个工程中是公用的,任何窗体、模块都可以调用该过程。 关键字Private表示该过程或函数不能被任何其他窗体、模块和应用程序(如AutoCAD)调用, 只能在自身的过程中运行。 4、宏与工程 用过Office产品的人都知道“宏”这个概念,宏就是VBA的程序语句代码的集合。宏是 指一个或多个操作的集合,其中每个操作实现特定的功能。在VBA中,可以认为与过程等同。 工程(或工程文件)是VBA对其开发中的应用程序的称呼。它包含了很多功能单元,如窗体、 11 模块和过程及其代码等等。在AutoCAD VBA中,工程文件被保存为扩展名为“dvb”的文件5。 5、窗体与模块 窗体是为方便人机交互而提供的图形界面。在窗体上可以放置各种控件。在AutoCAD VBA中,窗体可以被保存为“.frm”文件。模块是将VBA声明过程作为一个单元进行保存的 集合。模块有两种基本类型:类模块和标准模块。模块中的每一个过程都可以是一个函数过 程或一个子程序。在AutoCAD VBA中,类模块通常都含有新对象定义的模块。新建一个类实 例时,也就创建了新的对象。模块中定义的任何过程都会变成该对象的属性和方法。类模 块可以被保存为“.c1S”文件。标准模块包含的是子过程和函数过程,这些过程不与任何 对象相关联,可以被保存为“.bas”文件2。 6、事件处理器 事件处理器是事件被触发后,程序对之响应的一段代码。也被称为事件过程。 .2 VBAVBA 编程基础编程基础 1)变量 在VBA中,变量用来临时存储数据。它可以是数字、文本字符串或日期,也可以是一个 对象,比如控件。变量包括名字(用来引用变量所包含的值的词)和数据类型(确定变量能够 存储的数据的种类)。 (1)变量的数据类型 VB可以处理14种标淮变量类型,如Integer, Long, Decimal, Single, Double,String, Boolean, Object, Byte, Data以及Variant等数据类型,Variant数据类型是所有没被显式 声明(用如Dim, Private, Public或Static等语句)为其他类型变量的数据类型。Variant数 据类型并没有类型声明字符。Variant是一种特殊的数据类型,除了定长String数据及用户 定义类型外,可以包含任何种类的数据。Variant也可以包含EmPty, Error, Nothing及 Null特殊值。可以用VarType函数或TYpeName函数来决定如何处理Variant中的数据。另外 也允许用户自定义变量类型,用户自定义数据类型可以是任何用Type语句定义的数据类型。 用户自定义类型可包含一个或多个某种数据类型的数据元素、数组或一个先前定义的用户 自定义类型。 (2)变量的声明 在使用变量之前,用户必须先对变量进行声明。变量声明有显式声明和隐式声明两种。 显式声明是用Dim, Private, Public或Static关键字声明的。变量的隐式声明是指在给变 量赋初值时,在变量的结尾处使用特定的字符对其进行类型声明,常用的有: Integer类型声明字符是百分比符号(%); String的类型声明字符为美圆号($); Long的类型声明字符为和号(&): 12 Single的类型声明字符(!): Double的类型声明字符是数字符号(#)。 (3)变量的作用域和存活期 变量有三个级别的:过程的级别、私有模块级别和公有模块级别。 过程的级别:用Dim语句在过程中声明的私有变量,只在其被定义的过程中有效。 私有模块级别:用Dim语句在模块级声明的变量,在该模块的所有过程中有效,但对工 程中的其他模块无效。 公有模块级别:用Public关键字在模块级声明的变量,在工程的所有模块、模块中的所 有过程及工程中的所有窗体均有效。 变量保留其值的这段时间称为存活期。变量的值可能在整个存活期都在改变,但它仍 然保留着一些值。当变量失去了范围之后,它也就不再保留着任一个值。Dim语句声明过程 的级别变量将保留一个值,直到此过程退出为止。如果该过程调用其他的过程,则在这些 过程正在运行的同时,属于调用者过程的变量也保留它的值。如果过程的级别变量是用 Static关键字来声明的,则只要代码正在任何模块中运行此变量仍会保留它的值。而当所 有的代码都完成运行后,变量会失去它的范围和它的值。所以它的存活期和模块级别的变 量是一样的。如果在Sub或Function语句前加上Static关键字,则在此过程中所有过程级别 的变量的值被保留在调用期间。 (4)对象变量 创建一个对象变量需要先声明对象变量,然后指定对象变量到一对象。对象变量声明 可以使用Dim语句或其他的声明语句(如Public. Private或Static)。引用对象的变量则必 须是Variant或则Object数据类型,或是一个对象的指定类型。当需等到过程运行A知道指 定的对象类型时,可以利用Object数据类型来声明。使用Object数据类型来创建对任何对 象的一般的引用 2)VBA的语法与语句(略) 13 第四章第四章 基于基于 VBAVBA FORFOR AUTOCADAUTOCAD 开发技术的面交叉检查功能开发开发技术的面交叉检查功能开发 所谓面交叉,是指两个面域存在重叠部分(如图2所示),面交叉的检查属于第二章提 到的拓扑关系的检查。考虑到CAD中层的应用,这里的两个面域是指同一层中的面域,否则 检查出来的结果并不具有现实的意义。 图2 面交叉功能界面 4.14.1 算法算法实现实现 在 AUTOCAD 中实体对象的 INTERSETWITH 方法存在着查询两个实体交点的功能,可直 接利用,该方法可返回实体包括其延长线的所有交点,该方法的语法为8: IntersetWith(IntersetObject,ExtentOption) 14 取值为下列4个常数: 两个实体都不延长:AcExtendNone(0) 延长发出求交要求的实体: AcExtendThisEntity(1) 延长被求交的实体: AcExtendOtherEntity(2) 两个实体都延长AcExtend: AcExtendBoth(3) 4.24.2 程序流程图程序流程图 程序流程图如下: 创建选择集 INTERSETTWITH 语句求出 面域交点 判断交点是否与面域顶点重 合 将所要检查的图层放入选择集 跳出 创建辅助圆层在辅助圆层画交点为圆心的圆 图3 程序流程图 4.34.3 程序原代码程序原代码 程序原代码如下: Dim objyuan(0 To 1000) As Object Private Sub CommandButton1_Click() Dim layerObj As AcadLayer Set layerObj = ThisDrawing.Layers.Add(“jmd“) Dim color As AcadAcCmColor layerObj.color = acRed Dim selseta As AcadSelectionSet 定义选择集 a 15 Set selseta = ThisDrawing.SelectionSets.Item(“selseta“) selseta.Delete 清空选择集 If VarType(selecta) = vbEmpty Then Set selseta = ThisDrawing.SelectionSets.Add(“selseta“) 创建选择集 a(在确信选 择集已经为空的前提下) End If Dim FilterType(2) As Integer Dim FilterData(2) As Variant FilterType(0) = 0 FilterData(0) = “POLYLINE“ FilterType(1) = 62 FilterData(1) = 256 FilterType(2) = 8 FilterData(2) = “JMD“ Dim mode As Integer Dim corner1(0 To 2) As Double Dim corner2(0 To 2) As Double mode = acSelectionSetCrossing corner1(0) = 0: corner1(1) = 0: corner1(2) = 0 corner2(0) = 10000000: corner2(1) = 10000000: corner2(2) = 0 selseta.Select mode, corner1, corner2, FilterType, FilterData 用 SELECT 的方法向选择集中添加实体, 对象必须是多义线,红色,在居民地层上 Dim ent As Object Dim i, j As Integer Dim obja(0 To 1000) As Object 将选择集中的实体置于 obja 中 j = 0 For Each ent In selseta Set obja(j) = ent j = j + 1 Next Dim gettwopoint As Variant Dim entry As AcadEntity 16 定义相关变量 Dim entObjectID As Long Dim objCount As Integer Dim mspaceObja As AcadObject Dim mspaceObjb As AcadObject objCount = ThisDrawing.ModelSpace.Count 创建辅助圆层 Dim layerObjb As AcadLayer Set layerObjb = ThisDrawing.Layers.Add(“辅助圆“) Set color= AcadApplication.GetInterfaceObject(“AutoCAD.AcCmColor.16“) 给辅助圆层设置颜色 Call color.SetRGB(80, 100, 244) layerObjb.TrueColor = color n = j 将上面的 j 值赋给 n(为该选择集即该层中实体的个数) For ii = 0 To n Set mspaceObja = obja(ii) Set entry = mspaceObja gettwopoint = entry.Coordinates 求实体坐标 On Error Resume Next ? p 为 ii 次级循环 For p = ii + 1 To n - 1 跳过已判断过的情况 If ii = p Then ppp = 0 跳过 Else j = 0 Set mspaceObjb = obja(p) Dim intPoints As Variant 求两个实体的交点 intPoints = mspaceObja.IntersectWith(mspaceObjb, acExtendNone) 17 If VarType(intPoints) vbEmpty Then 如果交点不为空(即存在交点) For i = LBound(intPoints) To UBound(intPoints) q = 0 For q = LBound(gettwopoint) To UBound(gettwopoint) If gettwopoint(q) = intPoints(i) Then GoSub aaa 如果实体坐标和交点坐标一致则跳出 Next q Dim centerPt(0 To 2) As Double Dim radius As Double centerPt(0) = intPoints(j): centerPt(1) = intPoints(j + 1): centerPt(2) = intPoints(j + 2) 圆心 radius=30 半径 Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPt, radius) circleObj.Layer = “辅助圆“ circleObj.color = acbule cnamber = cnamber + 1 Set objyuan(cnamber) = circleObj Dim center(0 To 2) As Double Dim magnification As Double magnification = 50 i = i + 2 j = j + 3 k = k + 1 Next i i = 0 j = 0 k = 0 End If End If Next p 18 aaa: Next ii On Error Resume Next If cnamber = “ Then cnamber = “ 0 “ nnnn = “共有“ & cnamber & “个交点“ MsgBox nnnn, , “IntersectWith Example“ cnamber = 0 End Sub Private Sub CommandButton2_Click() Dim selseta As AcadSelectionSet Dim selsetb As AcadSelectionSet Set selseta = ThisDrawing.SelectionSets.Add(“selseta“) Set selsetb = ThisDrawing.SelectionSets.Add(“selsetb“) End Sub Private Sub CommandButton3_Click() End End Sub 4.44.4 程序运行界面程序运行界面 程序运行界面如下: 19 图4 面交叉功能运行界面一 左击“面交叉”: 图5 面交叉功能运行界面二 检查结果: 20 图6 面交叉功能运行界面三 第五章第五章 小结小结 本文集中笔墨讨论了数字地图质量管理的内容,方法,质量管理系统的设计原则和设 计目标。然后结合现代软件技术的发展,提出了自己解决问题的思路应用VBA技术即VB FOR APPLICATION。VBA是目前比较流行的应用程序开发语言,功能非常强大。用VBA编程技 术可以在AUTO CAD环境中结合开发人员的需要开发出多种实用的功能。 论文所设计的程序只是前文所提到的数字地图质量管理的一个小小的方面面交叉 问题。 这个程序虽然很小原理也比较简单,却能很实用的检查出数字地图中存在的面交叉 现象,并且能在图上显示出来交叉点。 论文需要解决的问题还有很多,主要有:在CAD 界面下利用已经打开的文件菜单直接 打开待检查的数字地图;对面交叉的地物进行合理化判别;对不符合地形图图式的面交叉 地物进行自动修正,以真正实现数字地图质量管理的目标。 数字地图质量检查系统有着巨大的开发空间,由于学识和时间的限制,只能做其中小 小的部分,希望日后能进一步开发。 21 致致 谢谢 本文是在导师余洁教授的悉心指导下进行的。余老师学识渊博,思维敏捷,态度严谨, 在设计过程中给予我严格的要求,引导我认识问题分析问题解决问题,使我受益匪浅,终 身受用。在此毕业设计完成之际,向帮助我、指导我的老师及同学致以由衷的感谢和敬意。 在以后的学习和工作当中,我会秉承师风,继续努力,不断创新,以取得更好的成绩。 感谢我的同学,谢谢他们对我的支持和帮助。 感谢我的同学、朋友和家人,是他们在生活上和精神的不断鼓励和支持,使得我在工 作、学

温馨提示

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

评论

0/150

提交评论