AutoCAD VBA二次开发在海洋测量数据处理中的应用
付志水
(南宁市天测科技有限责任公司)
【摘 要】 本文着重介绍基于AutoCAD平台,利用其内嵌的VBA开发工具,进行二次开发,达到对海洋测量数据内业自动处理、成图的目的。
【关键词】 VBA 海洋测量 数据处理
1 引言
VBA(Visual Basic for Application)是Autodesk公司一种提供给用户,对AutoCAD平台进行二次开发的工具。
AutoCAD VBA,由Visual Basic派生而来、现在已经成为Microsoft产品的标准语言。与VB一样,VBA是面向对象的程序设计语言,它继承了VB语法简单、功能强大的特点:同时,由于VBA可与主程序在同一内存空间内运行,大大提高了运行速度。并具有某些“智能”功能。
由于海洋测量成图不像地形测量成图那样复杂,只需将测量数据展点,利用简单的线型生成等深线,并匹配上测量范围内固有物体(例如:航标、灯塔等)对应的海图图式符号即可。这样就使AutoCAD VBA处理海洋测量数据成图工作变得相当简单、可行了。
2
AutoCAD VBA对海洋测量数据处理的开发与实施
针对海洋测量数据成果形式相对比较单一的特点,采用VBA语言对AutoCAD进行简单的二次开发,能够完全满足数据处理的要求。程序开发既没什么成本又实用。
(1)程序的运行。
VBA是内置于AutoCADR14及以上版本的二次开发工具。因此,我们的开发工作都是基于AutoCAD平台的。首先要先运行AutoCAD,然后通过菜单或命令(loadvba)即可打开该开发工具了。
(2)应用程序的开发
由于VBA是面向对象的程序设计语言,开发者可利用其提供的可视化控件,根据目的需要进行窗体的排版设计及代码的编写。在实现对海洋测量数据成图处理的程序代码编写过程中,主要分以下几步:
①首先,根据海洋成图规范,实现在AutoCAD上正确的数据输出,即展点。实现此功能要求数据具有一定的格式,同时输出的数据应符合相应测图比例尺的字体大小要求。本程序的数据格式如下:
序号,,Y坐标,X坐标,水深改正值
1,,368005.269,2604936.102,34.04
2,,367999.881,2604935.102,34.35
3,,368014.594,2604934.600,40.55
4,,368016.144,2604940.415,39.87
5,,368027.631,2604943.379,44.57
6,,368012.377,2604944.119,42.50
……………………………………
Private Sub CommandButton1_Click()'展点
Do Until EOF(1) '文件读取循环
If CheckBox_turn = True Then 'X、Y轴对换
Input #1, Cass_Num, Cass_Name, Cass_xyh(0), Cass_xyh(1), Cass_xyh(2)
Else
Input #1, Cass_Num, Cass_Name, Cass_xyh(1), Cass_xyh(0), Cass_xyh(2)
End If
Cass_Old_X = Cass_xyh(0)
If CheckBox_Water = False Then '是否为水深格式显示
Set Text = ThisDrawing.ModelSpace.AddText(Format(Cass_xyh(2), Zero), Cass_xyh, TextBox_Text_H) '生成文本对象
End If
……………………………………
②由图面数据,实现构网功能。即相邻数据之间构成三角形组成三角网。要求各点之间的联线不能交叉且完整。具体实现代码如下:
Private Sub CommandButton2_Click()'构三角网
With ThisDrawing
On Error Resume Next
If.SelectionSets.count=1 Then .SelectionSets("CurrentSelection").Delete
Set Users_Selection = .SelectionSets.Add("CurrentSelection")
Me.Hide
Users_Selection.SelectOnScreen '选择对象
ReDim Preserve Cass_x(0 To Users_Selection.count) '初期分配内存
ReDim Preserve Cass_y(0 To Users_Selection.count)
ReDim Preserve Cass_H(0 To Users_Selection.count)
L = 0 '点数初始
Dim l_long As Long '临时循环变量
For Each Drawing_Selected In Users_Selection '循环 读取选择的点
Name = Drawing_Selected.ObjectName
If Name = "AcDbPoint" Then
Point_xyh = Drawing_Selected.Coordinates '读取
Cass_x(L) = Point_xyh(0) 'X 转存
Cass_y(L) = Point_xyh(1) 'Y
Cass_H(L) = Point_xyh(2) 'H
L = L + 1
Else
If Name = "AcDbBlockReference" Then
Point_xyh = Drawing_Selected.insertionPoint '判断重点
Cass_x(L) = Point_xyh(0) 'X 转存
Cass_y(L) = Point_xyh(1) 'Y
Cass_H(L) = Point_xyh(2) 'H
L = L + 1
End If
End If
Next
End With
……………………………………
③由三角网,实现等深线的自动绘制。要求生成的等深线应尽量准确、合理,并且包含相应的高程值和图层设置,自动绘制出粗细和颜色不同的首曲线和计曲线。具体实现代码如下:
Private Sub CommandButton3_Click()'绘制等高线
Dim Users_Selection As AcadSelectionSet
Dim Drawing_Selected As AcadEntity
Dim Cass_Text As AcadText
Dim Cass_Pline As AcadPolyline
Dim Name As String
On Error Resume Next
…………………………
ThisDrawing.ActiveLayer = ThisDrawing.Layers("0") '三角形层
Set Layer_Line = ThisDrawing.Layers.Add("等深线") '其它附加层
If Me.CheckBox_OnLine Then '画等深线
Dim Cass_Line() As Double
Dim Cass_Conunt As Single
Dim Cass_Conunt_T As Single '临时变量
With Max_line
For t = 0 To .count
If .OfFang(t) > -1 Then
L_M = L_M + 1 '等深线数
Cass_Conunt =(.line1(t).count + .line2(t).count + 2) * 3 - 1
ReDim Preserve Cass_Line(Cass_Conunt)
For T2 = .line2(t).count To 0 Step -1
Cass_Conunt_T = (.line2(t).count - T2) * 3
Cass_Line(Cass_Conunt_T) = .line2(t).x(T2)
Cass_Line(Cass_Conunt_T + 1) = .line2(t).y(T2)
Cass_Line(Cass_Conunt_T + 2) = .h(t)
Next
SetCass_Pline=ThisDrawing.ModelSpace.AddPolyline(Cass_Line)
End If
Next t
End With
…………………………
ThisDrawing.Application.Update
End Sub
④修图。有时由于水下地形比较复杂和假点(水深测量时出现的异常水深值)的情况,因此由测得数据生成的等深线会出现杂乱,甚至错误的情况。此时就要求首先剔除掉假点数据,对等深线进行局部修正,以使其的走向更加合理。这样做的好处是,及时发现问题,即时得到解决;方便、快捷,不必借助第三方软件。
3
程序操作流程图
 |
4
程序特点
① 程序可实现自动加载与可视化。当运行AutoCAD时,程序自动随其加载,并作为其菜单显示于面板。
② 程序运行稳定、速度快。由于VBA是内嵌在 AutoCAD里面的开发工具,无需调用其它程序。
③ 错误数据处理及时。由于测量过程中难免有假点数据出现,通过本程序的展点功能和生成的等深线,很容易发现那些异常的假点,马上删除后,局部重新生成等深线即可。
④ 经济实用,无需花钱购买第三方软件,为生产单位节约了资金投入。
⑤ 经济效益显著。利用本程序可以大大节省内业处理的时间,提高我们的工作效率,从而获得更高的经济效益。
⑥ 实现了内业处理一体化操作。利用AutoCAD平台,即可实现从数据处理,到成果出图。 5
结束语
VBA作为AutoCAD平台下强大的开发工具之一,具有语法简单、功能强大、易于掌握的特点,无疑是我们测绘工作者的一个良师益友,是各种水平的用户都能接受的开发语言。在我们的日常生产中,开发一个小程序来处理那些量大、重复的工作就可一劳永逸了,既经济又提高了我们的工作效率。
【参考文献】
[1] 《水运工程测量规范》.JTJ203—2001中华人民共和国交通部发布
[2] 张帆.《AutoCAD VBA二次开发教程》
[3] 张国宝.《AutoCAD2000VBA开发技术》
[4] 李青岳,陈永.《工程测量学》.测绘出版社
[5] 《测量学》.测绘出版社.1991.6第三版
|