基于VB的AutoCAD二次开发

(整期优先)网络出版时间:2019-11-22
/ 3

基于VB的AutoCAD二次开发

张亦钟

开平市城市规划设计室广东开平529300

摘要:VisualBasic是当今世界上最流行的编程语言之一,CAD是目前使用最广泛的绘图软件,本文将在测绘领域,探讨基于VisualBasic对AutoCAD进行二次开发,对外业获取的数据内业进行自动绘图,提高工作效率。

关键词:Visualbasic;AutoCAD;ActiveX;CAD二次开发

1.引言

在使用全站仪的外业测图,如果我们对采集的数据赋予遵循特定规则的简码,用成图软件导入外业数据,然后利用二次开发的软件完成自动绘图,更能提高作业效率。本文将基于VisualBasic对AutoCAD二次开发一个自动绘图的程序。

2.需求分析

需求分析:该程序可以实现“外业测图,内业自动绘图”的功能。具体是通过导出外业数据,对数据进行读取、分析识别,然后实现在AutoCAD画布上展点,自动绘图。

3.程序的设计

程序的设计包括界面和功能设计和数据格式的设计。

3.1界面和功能设计

程序Frmbase窗体由一个菜单栏、一个状态栏、一个公共对话框组成。

该程序主窗体frmbase设计如图3.1所示。

图3.1frmbase窗体设计效果图

菜单栏“文件”菜单下有创建新图形文件、打开、保存图形文件、导入DXF文件、导出DXF和BMP文件、关闭图形文件和退出程序这些子菜单。如图3.2所示。

图3.2“文件”菜单及其子菜单

菜单栏“绘图”菜单下有展点和自动绘图子菜单,而展点可以通过两种数据文件来读取数据,所以展点子菜单下还有两个子菜单。如图3.3所示。

图3.3“绘图”菜单及其子菜单

3.2数据格式的设计

数据格式的设计:文件后缀为*.dat或者*.xls。

第一列是点名,第二列是简码,第三列是AutoCAD中的Y坐标,也是测量坐标系中的X坐标,第四列是测量坐标系中的Y坐标,第五列是高程。

编码规则:以地物名字的中文拼音首字母进行命名,例如井盖的简码为“JG”,平房的简码为“pf”。图上的地物都是由点状地物、线状地物和面状地物这三种的抽象。针对这三种类型的地物,分别按照不同的规则输入不同的简码。

点状地物,是独立的,例如全站仪要测井盖,其在图上就是一个独立的井盖符号,没有与其他点有关联,其编码方式为:每测一个这种类型的地物,使用相同的简码,例如测十个井盖,每个井盖点的简码都为“JG”。

线状地物,是由彼此有联系的点连接而成的线。其测法是有一定规则的,要从该线状地物的开始端点一直测下去,中途不能倒退,否则会造成线状地物畸形。其编码方式为:该线状地物的第一点为该地物名字的中文拼音首字母为准进行编码,而后面的点采用符号“+”来进行编码,表示与上一个点相连。

面状地物,是由彼此有联系的点连接而成的面。其测法也是有一定规则的,选取该面状地物的一个点为开始端点,一直测下去直到最后一个点(不与开始端点重合),中途不能倒退,否则也会造成面状地物畸形。其编码方式为:该面状地物的第一点为该地物名字的中文拼音首字母为准进行编码,而后面的点采用符号“+”来进行编码,表示与上一个点相连。面状地物的编码方式与线状地物的编码方式一样。

具体的地物编码如表3.4所示:

4.程序的实现

安装好相应版本的VB和CAD,进行程序编写之前,需要在VB工程中引用“AutoCAD2004类型库”类库。

该VB工程是由三个窗体和两个标准模块组成的。窗体frmbase为程序的主窗体,窗体frmfil、frmdxf为程序的参数输入窗体,标准模块acadmdl为自定义过程函数模块,另一个模块clsmdl是自定义类型的模块。

VB对AutoCAD进行二次开发,首先要做的就要关联AutoCAD,利用ActiveXAutomation技术对AutoCAD暴露的对象进行连接。

实现VB与AutoCAD的关联,首先要定义AutoCAD对象,然后用GetObject,CreateObject等函数来获取AutoCAD对象。

4.1“文件”模块的实现

“文件”模块下创建图形文件可以用到AutoCAD的Documents对象的Add方法。

打开已有图形文件、保存图形文件功能可以通过设置打开对话框来获取文件路径,然后用AutoCAD的Documents对象的Add、Open方法来实现。

而导入DXF文件是结合打开对话框来获取*.dxf文件路径,然后设置Inputbox让用户输入插入图形的XY坐标,最后用AutoCAD的ActiveDocument的Import方法来实现。

导出DXF和BMP文件是将当前图形文件保存为*.dxf和*.bmp格式的文件,通过保存对话框,让用户设置文件保存的路径已经保存的文件名,然后通过AutoCAD的ActiveDocument的Export方法来实现。

关闭图形文件直接使用ActiveDocument的close方法来实现。

当程序使用完毕后,就需要进行退出,我们可以选择退出程序来同时实现退出AutoCAD和VB程序。

4.2“绘图”模块的实现

“绘图”模块包含有展点和自动绘图。

展点可以通过*.dat和*.xls两种数据文件作为数据源导入软件,把打开对话框的默认打开目录选择为程序目录,通过对数据文件格式的规定,我们可以通过使用VB中条件选择语句,循环语句,把数据文件中的数据赋予动态数组。然后可以把动态数组中的坐标来新建点对象,并且标注点号。自动绘图的实现,使用的算法要考虑到识别地物、识别地物点数、识别地物开始端点、结束端点、如何闭合等一些列的问题。该模块采取了循环结构嵌套复合选择结构的算法,即捉住动态数组的下标递进为基本点,每当数组下标递进都会进行判断,根据不同的结果有不同的执行语句。

以*.dat文件为例,展点过程的代码如下所示:

第一步,设置打开对话框。

CommonDialog1.DefaultExt=App.Path

CommonDialog1.Filter="数据文件(*.dat)|*.dat"

CommonDialog1.CancelError=True

CommonDialog1.ShowOpen

DimfilenameAsString

filename=CommonDialog1.filename

第二步,用动态数组对dat数据文件进行读取。首先,用open语句打开第一步选择的数据文件,然后用do…loop循环结构配合lineinput语句进行数据读取,然后赋值给动态数组data(),该部分代码如下;

OpenfilenameForInputAs#1

filelong=0'文件长度计算公共变量,在模块中定义

DoWhileNotEOF(1)

LineInput#1,tempstr

tempbox=Split(tempstr,",")

ReDimPreservedata(filelong)Aspoint'定义动态数组

data(filelong).pn=tempbox(0)

data(filelong).code=tempbox(1)

data(filelong).y=Val(tempbox(2))

data(filelong).x=Val(tempbox(3))

data(filelong).z=Val(tempbox(4))

第三步,向AutoCAD图形文件中添加新的图层“pn”,意思为点名图层,然后用自定义画点过程addpoint在“pn”图层上进行画点。并用addtext方法进行点名标注。具体代码如下所示:

Setpnlayer=acadapp.ActiveDocument.Layers.Add("pnlayer")'添加点名图层pnlayer

pnlayer.Color=acRed

acadapp.ActiveDocument.ActiveLayer=pnlayer

Calladdpoint(data(filelong).x,data(filelong).y,data(filelong).z)'展点

Diminsertpoint(0To2)AsDouble

DimtextobjAsAcadText

insertpoint(0)=data(filelong).x:insertpoint(1)=data(filelong).y:insertpoint(2)=data(filelong).z

Settextobj=acadapp.ActiveDocument.ModelSpace.AddText(data(filelong).pn,insertpoint,2)'展点号

5.程序的运行

该程序的运行过程如下:

步骤一:启动VB自动绘图程序,程序将自动关联AutoCAD,自动前置窗体,如图5.1所示。

图5.1程序刚启动时的界面

步骤二:点击菜单中的“绘图”及其子菜单“展点”或者“展点并绘图”,在打开对话框中选择dat数据文件,然后按打开确认。AutoCAD中新建了一个“pnlayer”,画图上展好了点,如图5.2所示。

图5.2新建点号图层

步骤三:点击菜单中的“绘图”及其子菜单“自动绘图”,即可完成图像的绘制,每一种地物有相对应的图层以及相应的线型,如图5.3所示。

图5.3自动绘图

6.结论

AutoCAD是当代重要的计算机辅助制图软件,是现代工业设计和生产发展的重要工具。AutoCAD在全球范围内有着广泛的使用。但是AutoCAD在进行一些批量操作、绘制一些特殊图形往往不容易实现,我们可以通过其二次开发平台进行开发以满足我们的需求。而对于VB来说,它具有可视化、简单易学、容易掌握、代码编写量小等特点,使得非计算机专业的用户也能掌握使用,所以通过基于VB对AutoCAD进行二次开发,可以满足我们的个性化需求,提高我们的工作效率。

参考文献

[1]岳震,张奉禄.基于VB的AUTOCAD二次开发[A].机械设计与制造.沈阳:机械设计与制造杂志社,2003,25.

[2]刘永波.基于VB的AutoCAD二次开发系统设计与实现[D].成都:电子科技大学,2007.

[3]王艳慧,曹红杰,张学庄.基于VB的AutoCAD二次开发[A].四川测绘.成都:四川省测绘学会,2000,116-118.

[4]张传伟,郭卫.ActiveXAutomation技术在AutoCAD开发中的应用[A].机床与液压.广州:《机床与液压》杂志社,2002,80-82.