基于AutoCAD选择集的自动化图元搜索方法

2021-03-06 06:33何鑫星王小娟
地理空间信息 2021年2期
关键词:图元多边形编程

何鑫星,王小娟,李 卓

(1.四川省测绘产品质量监督检验站,成都 610041)

在对AutoCAD 平台的DWG 数据进行编辑时,经常需要人机交互式使用选择集对数据进行过滤搜索处理,但人机交互使用选择集过滤器的方法无法将图元之间的几何关系也作为过滤条件对数据进行精准搜索。基于此,本文基于AutoCAD 选择集的二次开发技术更宽泛地重新定义过滤搜索条件,从而实现基于图元几何关系及属性信息组合的图元自动化搜索。这种对图元过滤搜索的方法,扩展了用户对DWG 数据自动化处理的能力。

1 AutoCAD ActiveX/VBA编程技术

VBA 编程技术是Visual Basic 的一种宏语言,主要能用来扩展Windows 的应用程序功能,特别是Microsoft Office 软件。ActiveX 是微软推出的一个基于COM 的技术规范[1]。它是在OLE 基础上发展的新技术,其宗旨是在Windows 系统的统一管理下协调不同的应用程序。Autodesk 公司采纳了微软的这一技术规范,最早在AutoCAD R14.0 版推出了基于ActiveX Automation 技术的开发方式,随后就有AutoCAD R14.01 版,该版本内嵌了AutoCAD VBA。到AutoCAD 2000/2002(属R15 版)、AutoCAD 2004/2005/2006(属R16 版)和AutoCAD 2007(属R17 版),这种新型的开发方式得到了进一步的改进及完善。将AutoCAD、ActiveX Automation 和VBA 相结合编程有3 个基本要素[1]。第一个要素是AutoCAD 本身,它提供了全面的对象,包括AutoCAD 图元、数据和命令,要有效地使用VBA,必须熟悉 AutoCAD 的编程特性,例如一些基于对象的方法;第二个要素是AutoCAD ActiveX Automation 接口,是它与AutoCAD对象进行信息传递;第三个要素是VBA 本身,它有自己的一套对象、关键字和常量等的集合,用于提供程序流、控制、调试和执行。

2 选择集的编程构建方法

在AutoCAD 中通过菜单或命令的方式使用选择集,实现对DWG 数据中目标图元对象的过滤选择操作,但选择集过滤参数是人工给定的,即需要交互式地给出图元的线型、颜色、所在层等参数。利用VBA技术可以实现自动化选择集的构建,相对于人工操作,VBA 技术允许过滤参数做批量循环操作,适合做数据自动化批量处理。选择集自动化构建方法的实现主要是基于对AutoCAD ActiveX 接口对象的利用,如图形对象、组织结构对象、图形显示对象、应用程序本身等。对象是通过分层方式来组织的,其中应用程序对象为根对象,这种分层结构的视图即对象模型,对象模型提供了访问下一层对象的途径[2]。模型中有一种集合对象是预先定义的对象,它包含所有相似对象的实例,即这些对象的父对象。用于创建选择集的SelectionSets 对象就是常用的集合对象之一,常用的集合对象还有Documents 集合、ModelSpace 集合、Views 集合等。

2.1 选择集的编程接口

在AutoCAD2008 中用于创建选择集的VBA 编程方法有如下4 种:

1) object.Select Mode [,Point1][,Point2][,FilterType][,FilterData]

2)object.SelectAtPoint Point, FilterType, FilterData

3)object.SelectByPolygon Mode[,Pointslist][,FilterType][,FilterData]

4)object.SelectOnScreen [FilterType][,FilterData]

其中,Object 指使用SelectionSet 这个方法的对象;FilterType 为变体数组类型,仅用于输入指定过滤器类型的DXF 组码(可选项);FilterData 为变体数组类型,仅用于输入过滤器的值(可选项)。方法1:object.Select 选择的区域是由两点构成的矩形区域;方法2:object.SelectAtPoint 选择的区域是某一个点;方法3:object. SelectByPolygon 选择的区域是由坐标列表构成的多边形区域;方法4:object.SelectOnScreen 选择的区域是一个人机交互给定的矩形区域。方法1、3 中的Mode 包含8 种选择模式,不同的模式对应不同的对象过滤结果。

2.2 选择集的DXF 组码

AutoCAD 的DXF 组码码值范围为-5~1 071[3-4],熟练掌握DXF 组码就可以灵活使用选择集进行过滤,一般常用的DXF 组码有10 个左右,其使用方式如表1、2 所示。

表1 常用选择集过滤器的DXF 组码代码表

表2 常用过滤群组方式(FilterType(DXF 群组码)=-4 时)

根据表1、2 可以得出,如果过滤的条件为图元为TEXT 或LINE 但图层不属于TEST 层的组码,则应该如表3 所示。

表3 选择集条件过滤实例

3 一种基于选择集的自动化搜索方法

DWG 数据的自动化批量处理涉及的核心问题是如何对数据按特定图元对象进行过滤搜索,只有访问到目标图元对象后才能进行分析、处理、修改等操作,而这仅依赖AutoCAD 提供的交互式基本操作是实现不了的。为了扩展AutoCAD 的功能,让其在测绘地理信息、土地规划、勘察设计、城市地下管网等行业中得到更为广泛的应用,本文基于AutoCAD 选择集的二次开发提出了一种能够将图元几何关系也作为选择集过滤参数的新自动化图元搜索方法。

3.1 DXF 组码条件过滤方法的局限

第2 章介绍了利用AutoCAD 选择集的DXF 组码条件过滤方法能搜索到图元对象以及对象的所有属性信息,但是却无法按图元对象之间的相关关系进行搜索,例如要搜索出所有内部包含文字注记“砖2”的多边形,这就无法避免判断文字注记与该多边形房屋的包含关系,所以过滤参数除了有属性信息还有图元对象间几何拓扑关系(点与多边形关系)[5-6],这也是仅用DXF 组码条件过滤方法无法实现的。但类似的应用需求在DWG 数据的处理中非常普遍,具体需求如DWG 格式的地形图数据批量编辑修改、农村不动产测绘分户图的批量编辑修改等。因此,由于DXF 组码条件过滤的局限性,考虑用更底层的方法去设计开发一种能够按图元几何拓扑关系作为过滤条件的自动化搜索方法,从而扩展选择集的过滤搜索能力。

3.2 按几何拓扑关系搜索的算法

几何拓扑关系按点、线、面的组合来分,最基本的有6 种关系,以下主要讨论点与面、线与面、面与面的包含关系,由于AutoCAD 中对面的概念与GIS 软件不同,所以这里讨论的面实际是闭合的多边形。为了能设计开发出一种实用的能自动判断拓扑关系的搜索方法,需要综合考虑稳定性、数据量等实际情况。算法流程如图1 所示。

图1 自动化搜索算法流程

1)定义分区搜索是为了避免数据量太大的情况下算法过于复杂导致程序崩溃,通过数据量指定分区大小则可以有效避免程序崩溃。

2)目标对象包含关系给出目标图元之间要满足的拓扑关系参数,可以是点与多边形、线与多边形、多边形与多边形(这里只讨论包含与被包含的关系)。

3)DXF 组码过滤条件是为了给出目标图元自身的类型与属性信息。

4)创建选择集利用AutoCAD 提供的创建接口进行创建。

5)分区内搜索图元是选择集的搜索范围大小为定义的分区大小,根据实际分区个数循环进行搜索,通过分区筛选的方式提高程序的运行效率[7]。

6)拓扑关系判断是将点与多边形、线与多边形、多边形与多边形的包含关系都转化成点集合与边集合、多边形集合后进行数学方法判断[8]。

7)若目标图元的关系满足定义参数要求则被提取,实现自动化过滤搜索。

3.3 判断点与多边形关系的算法

点与多边形关系的判断是拓扑关系判断的基础,其中涉及的多边形分凸多边形与凹多边形两种,关系又分为点在多边形内、点在多边形外、点在多边形边上三种。以下为一种面积法判断点与多边形关系的方法。

如图2 所示,当点P 在凸多边形ABCDE 外时,如果找到离P 点最近的边AB,然后将P 点纳入AB之间构成新的多边形APBCDE,多边形APBCDE 的面积会大于多边形ABCDE。反之,当点P 在凸多边形ABCDE 内时,多边形APBCDE 面积小于多边形ABCDE。

图2 凸多边形与点的关系

如图3 所示,P 点在多边形ABCDEF 内或外时对面积的变化完全与凸多边形一致。所以关键算法只有两部分,第一是找到离P 点最近的边,并将P 纳入两点之间构成新的多边形;第二步利用公式(1)进行面积计算。

所以只需根据面积数值变化就可以实现点与多边形关系的判断。判断点与多边形关系的算法除了该方法还有向量法、射线法[9-10]等,但各种方法都有自身的优缺点,所以具体用什么方法要根据实际情况来进行选择。

图3 凹多边形与点的关系

3.4 程序功能的集成方法

本文按几何拓扑关系搜索算法的总体流程对DWG数据的分区搜索、选择集自动构建、点与多边形关系判断等功能模块完成了程序代码编写,并设计了相应的用户界面方便对图元对象的输入、提取、修改、输出等操作。考虑程序的执行效率及易用性,将程序各个功能模块用现今主流的VBA、Lisp、ARX、.NET等AutoCAD 二次开发技术进行集成。其中VBA、.NET 等可以快捷的做出图形界面;Lisp 可以便捷的调用VBA 程序的各个模块,相当于在CAD 中输入命令,使用非常方便;VBA 可以直接操作CAD 图元对象,程序执行效率高,且VBA 可以实现简洁易用的窗体,使得程序更加人性化,更简单实用;Lisp 主要用来建立VBA 程序与CAD 菜单和工具栏之间的联系,可以整合VBA 程序功能到菜单及工具栏中,使得程序使用更加方便,用户体验与使用CAD 内置功能一致,如图4 所示。

图4 VBA 程序窗体界面

本文选择用VBA 来高效实现按几何拓扑关系搜索的算法、用户界面搭建等,用lisp 及AutoCAD 的菜单文件“*.mnu”实现菜单的改写,再用lisp 语言来说实现VBA 工程与自定义命令随AutoCAD 启动而自动加载,最终实现将二次开发的功能完整嵌入AutoCAD,使用时如同AutoCAD 本身功能一样,可以从菜单调用也可以输入命令调用程序功能。

4 应用实例

实验数据为四川省农村不动产测绘项目的分户图数据,该项目的质量检查需求之一是要能对每一户的房产面积进行重新计算核对。其中每一户的面积由若干层、若干户型的面积组成,而且根据项目设计要求面积有全算、半算、不算3 种算法。需求二是要能全自动化检查。本文提出的新搜索方法正好能满足以上需求,因为其本质是判断多边形内的文字注记是否与定义要求一致。图5 为农村不动产测绘项目的按村组组织的分户图数据,图6 为程序查出的面积数值与图形不符的错误情况图。

图5 农村不动产测绘分户图

图6 程序检查结果

为了能更好地对该方法的效率及稳定性进行测试实验,实验用了农村不动产测绘项目中的25 个村组的分户图数据在64 位Windows 7 系统、2008 版AutoCAD环境下进行效率实测,测试过程中程序运行正常,测试结果如表4 所示。

表4 搜索效率测试

5 结 语

本文介绍了AutoCAD VBA 编程技术,并对选择集的VBA 编程方法进行了经验总结,提出一种非人机交互式的自动选择集对目标数据进行搜索、过滤的新方法。通过集成AutoCAD 选择集的VBA 编程方法、分区搜索、点与多边形关系判断等算法,实现对DWG数据中文字注记、二维图形的高效搜素、过滤、提取、计算等操作。将该方法应用到了四川省农村不动产测绘项目质量检验中,对项目成果数据中的大批量分户产权信息完成了自动化比对分析,得到了预期的结果。这种基于AutoCAD ActiveX/VBA 技术开发的搜索方法的优势主要体现在如下方面。

1)VBA 代码与AutoCAD 共享内存空间,所以程序代码执行效率非常高。

2)在DXF 组码选择集过滤搜索的基础上扩展出了按图元包含关系的自动化搜索方法,拓展了应用场景。

3)开发环境搭建非常简单,AutoCAD 界面下按Alt+F11 就自动进入编程和执行环境,无需安装编程软件。

需要注意的是该方法是基于AutoCAD 平台开发,部分内容无法直接移植到其他图形平台下进行应用,例如GIS 平台中就没有DXF 组码进行选择集过滤的方式。

猜你喜欢
图元多边形编程
多边形中的“一个角”问题
编程,是一种态度
元征X-431实测:奔驰发动机编程
学术出版物插图的编排要求(一):图注
联锁表自动生成软件的设计与实现
编程小能手
多边形的艺术
纺织机上诞生的编程
解多边形题的转化思想
多边形的镶嵌