王保国
(蚌埠市勘测设计研究院,安徽蚌埠 233000)
点之记自动生成程序的实现
王保国∗
(蚌埠市勘测设计研究院,安徽蚌埠 233000)
点之记是测量工作成果中不可缺少的一部分,它可以帮助工作人员迅速在实地查找控制点或路中点等,本文利用Visual Basic 2008结合.NET API在AutoCAD中开发了点之记自动生成程序,它可以自动的查找特征点并标示距离,如果没有特征点则输出程序日志文件,而且保存文件名均和各种工程用途相关联,此程序可以快速的生成点之记,提高了工作效率,减少错误率。
点之记;特征点;.NET API
点之记是测绘工作中使用的比较频繁的一种图件,它是根据现场条件用钢尺测量出相关特征点的距离,并绘制简要的略图。其作用是测量人员或其他相关人员在使用工作点时,依据点之记很方便地在实地能够找到。使用的范围主要在提交各种等级的GPS点、水准点、城市导线点、道路的中心点和给施工单位引测的临时水准点等成果时,必须要有点之记的成果表。尤其是现在随着城市的发展,道路建设越来越快,测绘单位需要根据规划好的道路中心线在实地放样和纵横断面的测量,最后把成果交付给施工单位,在这其中就有点之记的成果表。平时的做法就是在现场用钢尺丈量距离,再绘制图形,这样既费时又费力,因为既然实测了地形图,其实际位置都是准确的,那么用地形图来生成点之记即可。
刚开始我们使用做好的模板在地形图上进行裁切,然后保存,再打开进行编辑和保存,一直重复这样的工作。如果遇到一条长约几十公里的道路时,那路中点之记和水准点之记可能达到上百个,使用人工去手动完成这些重复而枯燥的工作,工作效率低下,也更容易出错。现在计算机使用广泛,它最擅长的就是做重复的工作,因此笔者开发了一段点之记自动生成的程序应用于工作中。
2.1 开发平台和开发语言的选择
现阶段在测绘行业中,Autodesk公司的产品Auto-CAD使用非常广泛,在此平台上的二次开发软件也很多。当然AutoCAD支持的开发语言种类也多,如AutoLISP、VBA、ObjectArx、.NET API等,对于不是专业的软件开发者,选择一种适合自己的二次开发语言即可,没有必要全部掌握。如果你有C++的基础你可以学习ObjectArx,它的功能最为强大,但学习起来有点困难。如果你是正在学习.NET的软件,如C#、VB.NET等,可以学习.NET API二次开发,因为在最新的AutoCAD 2011中,.NET API已经拥有与C++相匹配的强大功能,由于开发接口是完全面向对象的,又具有方便易用的特点,所以用.NET API来进行AutoCAD的二次开发还是比较容易掌握的。
2.2 程序设计思路
由于是自动生成点之记,那么首先要有绘制好的地形图,而且需要点之记在图形范围中,为了适应各种点之记,可以分几种常用的情况如控制点、路中点、水准点点之记等,笔者就以路中点为例。程序流程如图1所示。
2.3 界面设计
用户界面使用了用户常用的工具选项板,简洁而且实用,主要是设置点之记需要的内容,如作业员、检查员等。如图2所示。
3.1 点之生成文件
在生成路中点点之记时,文件名使用里程桩号来保存,这样可以方便对文件的管理,如图3所示。
图1 程序流程图
图2 用户界面 图3 文件名称
3.2 生成日志文件
在程序生成的日志文件中,列出了点之记中没有特征点可用的文件名。用户在查看日志文件时,可以对其中的点之记进行手动修改。
3.3 生成点之记成果
生成的点之记会自动标注特征点距离,填入点名、坐标和相应的说明等,如图4所示。
图4 点之记成果
3.4 部分代码实现
(1)在选择道路中心线的同时,把道路名称添加到扩展数据中,这样在生成点之记时将会自动标注道路名称。
'如果选择的线性是Polyline
If TypeOf(ent)Is Polyline=True Then Tools.AddLayer("断面道路中心线",0) plRoad=CType(ent,Polyline)
plRoad.Layer="断面道路中心线"
polyLength=plRoad.GetDistanceAtParameter(plRoad. EndParam)
pointMarkPalette.lblLength.Text=Format(polyLength," 0.000")&"m"
'加入道路名称的扩展数据
Tools.AddXdata("RoadName",plRoad,pointMarkPalette.strRoadName)
Else
ed.WriteMessage(vbCrLf&"该实体不是多段线")
Return End If
(2)生成点之记文件。
Using trans As Transaction=curDb.TransactionManager.Start-Transaction
'新建临时数据库来读取点之记模板
Dim tempDb As New Database(False,True) '新建数据库来生成点之记
Dim db As New Database(False,True) '使用多边形框来选择范围内的实体Dim resSel As PromptSelectionResult=ed.SelectCrossingPolygon(ptColl)
播前进行种子筛选和晾晒。选种时要选粒大饱满、纯度高、不带病虫害的大豆种子。播种前做好种子处理工作。采用药剂、根瘤菌拌种或种子包衣。药剂拌种时,用50%多菌灵按种子重量的0.4%拌种,以防治根腐病。拌种随拌随播,处理后的种子不宜过夜。
Dim sSet As SelectionSet=resSel.Value
Dim Ids As ObjectIdCollection=New ObjectIdCollection(sSet. GetObjectIds)
Ids.Add(pLine.ObjectId)
db=curDb.Wblock(Ids,curDb.Ucsorg)
'读取点之记模板
Dim fileName As String="C:\Program Files\AcadTool\测量工具箱\TP.dwg"
If System.IO.File.Exists(fileName)Then
tempDb.ReadDwgFile(fileName,System.IO.FileShare. Read,True,Nothing)
'插入点之记模板文件到数据库
db.Insert(System.IO.Path.GetFileNameWithoutExtension (fileName),tempDb,True)
'开始点之记数据库的事务处理
Using atrans As Transaction=db.TransactionManager.StartTransaction Dim bt As BlockTable=atrans.GetObject(db.Block-TableId,OpenMode.ForWrite)
'如果图形中没有TP的块定义If bt.Has("TP")=False Then
Return
End If
Dim block As BlockTableRecord=atrans.GetObject (bt.Item("TP"),OpenMode.ForW rite) '字体样式
Dim tst As TextStyleTable=TryCast(atrans.GetObject(db.TextStyleTableId,_OpenMode.ForWrite),TextStyleTable) Dim textObjectId As ObjectId=atrans.GetObject(tst. Item("宋体"),_OpenMode.ForWrite).ObjectId
'添加TP点点名
Dim tpName As New DBText
'在点之记中加入作业员
Dim workmanText As New DBText '在点之记中加入检查员
Dim checkmanText As New DBText '在点之记中加入说明
Dim typeText As New MText…………Dim blockref As BlockReference=New BlockReference(pt,bt.Item("TP"))
'点之记根据比例尺缩小或者放大
blockref.ScaleFactors=New Scale3d(ScaleFlector)
blockref.Rotation=0
Dim btr As BlockTableRecord=atrans.GetObject(bt.
Item(BlockTableRecord.ModelSpace),-OpenMode.ForWrite)
btr.AppendEntity(blockref)
atrans.AddNewlyCreatedDBObject(blockref,True) atrans.Commit()
End Using
End If
'把临时存取模板的数据库销毁tempDb.Dispose() '保存各个点之记
db.SaveAs(pointMarkPalette.saveFileName&"TP"&num.ToString&".dwg",DwgVersion.Current)
'提交事务处理trans.Commit() End Using…………
.NET语言中的VB.NET和C#都是面向对象的语言,它们对于初学者来说易学易用。用这些语言结合CAD的托管API来进行二次开发非常的方便。鉴于在线路测量或控制测量中,需要提交点之记时,可以使用本程序来生成成果,这样方便快捷而且不容易出错。本程序开发完成后,进行了详细的测试后才投入到生产当中,它实现了点之记的自动生成,提高了工作效率。
[1] Thearon Willis Bryan Newsome.Visual Basic 2008入门经典[M].北京:清华大学出版社,2009.
[2] 秦洪现,崔惠岚,孙剑.Autodesk系列产品开发培训教程[M].北京:化学工业出版社,2008.
[3] 曾洪飞,张帆,卢择临.AutoCad VBA&VB.NET开发基础与实例教程[M].北京:中国电力出版社,2008.
[4] 郑勇波.基于AutoCAD的断面测量新模式和软件研究[J].城市勘测,2011(6),149~151.
[5] 周建康,冷泠,王瑞青.AutoCAD中判断折线自相交的一种快速算法[J].2012(1),84~86.
[6] 李文柱.AutoCAD VBA二次开发在道路横断面数据处理中的应用[J].2008(3),127~129.
Description of Station Automatically Generate the Im p lementation of the Program
Wang Baoguo
(Bengbu Geotechnical Engineering and Surveying Institute,Bengbu 233000,China)
Description of station is an indispensable part of the measurement results of the work,it can help staff quickly find the control points in the field or road midpoint this article using Visual Basic 2008 combined NET API in AutoCAD development points credited automatically generated program,it can automatically find the feature points and marked the distance,if there is no feature points output log file,and save the file name and various engineering purposes,this program can quickly generate description of Station,improve work efficiency to reduce the error rate.
description of station feature points;.NET API
1672-8262(2013)03-143-03
P209
B
2013—01—07
王保国(1979—),男,工程师,主要从事城市测绘生产与管理工作。