CASS高程点位自动恢复的实现
来源:用户上传
作者:
摘要:由于数据处理或作业过程中的不当操作,而引起CASS成图系统高程点位与注记值不一致的现象,文章针对该情况,运用计算机编程技术,快速恢复高程点位。
关键词:CASS;AutoCAD;ActiveX Automation
在编制地形图的过程,由于作业员的操作不当,往往引起个别或成片的高程点位属性高程值与高程注记不一致的情况,而在成果使用时,往往是致命的,在土方量计算时将会引起严重数据错误。而高程点位高程不能直观地检查出来,它包含在点位属性的标高值内,而人工检查,耗费大量的人力物力,且检查效果不明显。通常情况下,高程注记值是正确的,本文通过Visual Basic计算机编程技术,对AutoCAD进行二次开发,能将高程值迅速恢复,有效地解决此问题。
一、AutoCAD与CASS成图软件
AutoCAD是由美国Autodesk公司于20世纪80年代初为微机上应用CAD技术而开发的绘图程序软件包,经过不断的完美,现已经成为国际上广为流行的绘图工具。CASS地形地藉成图软件是基于AutoCAD平台技术的数字化测绘数据采集系统。广泛应用于地形成图、地藉成图、工程测量应用三大领域,且全面面向GIS,彻底打通数字化成图系统与GIS接口,使用骨架线实时编辑、简码用户化、GIS无缝接口等先进技术。自CASS软件推出以来,已经成长成为用户量最大、升级最快、服务最好的主流成图
系统。
二、Visual Basic ActiveX开发技术
ActiveX自动化技术是微软建立的标准,基于COM的自动服务程序,是对象链接与嵌入OLE的进一步发展,。AutoCAD ActiveX技术提供了一种机制,可使编程都通过编程以AutoCAD的内部或外部操作控制AutoCAD。其中,AutoCAD的对象模型是一种树型结构模型,根为”AutoCAD Application”,AutoCAD中的所有对象都是AutoCAD Application的子对象。
三、点位高程恢复的实现
(一)开发思路
由于Visual Basic可通过ActiveX技术来操控AutoCAD,因此可通过对象模型结构对实体进行编辑和更新,从而实现对数据的批量修改。
CASS高程点位数据放置在标高(Elevation)标段内,高程点位为块(AcAdBlock);高程注记实体类型为文字(AcADText),图层放置在“GCD”层,程序可通过选取图面中的高程注记,按一定距离的搜索圆对高程点位进行搜索,满足条件时,对高程注记转化为数据对高程点位进行赋值,从而实体对点位的数据恢复。
(二)ActiveX Automation对象模型
(三)Visual BASIC中连接 AutoCAD
启动Visual BASIC ,引用 AutoCAD 类型库。操作步骤:从“工程“菜单中选择“引用”选项,启动“引用”对话框。在“引用”对话框中,选择 AutoCAD 类型库,然后单击“确定”。
同时运行多个 AutoCAD 任务时,GetObject 函数会返回 Windows 运行对象表中的第一个 AutoCAD 实例。要显示 AutoCAD 图形窗口,需要将 AutoCAD 应用程序的 Visible 特性设置为 TRUE。
使用 acadDoc 变量引用当前的 AutoCAD 图形。
Dim acadApp As AcadApplication
Dim acadDoc as AcadDocument
Sub ConnectToAcad()
On Error Resume Next
Set acadApp = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application")
If Err Then End
End If
acadApp.Visible = True
Set acadDoc = acadApp.ActiveDocument
End Sub
(四)处理流程
当Visual Basic连接到AutoCAD后,通过对实体的引用,可实体数据的处理。
1.定义过滤机制。首先对高程注记进行实体的过滤定义,只获取图面中高程注记文字数据,类型为文字(AcadText),图层为“GCD”,其次建立文字注记存在的选择集,将文字注记存放在选择集内,以便程序进行遍历。
Dim ftype(0 To 1) As Integer
Dim fdata(0 To 1) As Variant
ftype(0) = 0:fdata(0) = "text":ftype(1) = 8:fdata(1) = "GCD"
Dim filtertype As Variant:Dim filterdata As Variant
filtertype = ftype:filterdata = fdata
Dim SSetObj As IAcadSelectionSet
If Not IsNull(AcadApp.ActiveDocument.SelectionSets.Item("text")) Then
Set SSetObj = AcadApp.ActiveDocument.SelectionSets.Item("text")
SSetObj.Delete
End If
2.点位搜索
AutoCAD的二次开必提供了七种选择模式,而此相关的7种模式均没有提供圆形方式的搜索,因此,通过程序设计,可通过多边形的方式模拟搜索圆,实体查找方式的需求,即将以文字注记中心到点位为距离,按一定的角度值以极坐标法计算各点的坐标,所得的坐标形成多边形。
For FenJiao = 0 To 330 Step 30
acut = FenJiao * 0.01745
SouSuo = AcadApp.ActiveDocument.Utility.PolarPoint(Curpnt, acut, 3)
AddpolyPnt(cum * 2 + cum) = SouSuo(0): AddpolyPnt(cum * 2 + 1 + cum) = SouSuo(1): AddpolyPnt(cum * 2 + 2 + cum) = 0
cum = cum + 1
Next
3.实体效果。程序运行后,将对每一个高程记进行遍历处理,完成后,即可恢复点位的高程值。
处理前
处理后
四、结语
本文提出了点位高程的迅速恢复的手段和方法,能有效解决高程点位错误的问题,提高了工作效率,在实践证明是简易可行的,对地形图的质量控制起到十分重要的作用,对于目前使用南方CASS成图系统成图软件生产的地形图成果可作为质量检查的辅助工具,应用前景广泛。
注:文章内的图表及公式请以PDF格式查看
转载注明来源:https://www.xzbu.com/2/view-589608.htm