王保國
(蚌埠市勘測設(shè)計研究院,安徽蚌埠 233000)
點之記自動生成程序的實現(xiàn)
王保國?
(蚌埠市勘測設(shè)計研究院,安徽蚌埠 233000)
點之記是測量工作成果中不可缺少的一部分,它可以幫助工作人員迅速在實地查找控制點或路中點等,本文利用Visual Basic 2008結(jié)合.NET API在AutoCAD中開發(fā)了點之記自動生成程序,它可以自動的查找特征點并標(biāo)示距離,如果沒有特征點則輸出程序日志文件,而且保存文件名均和各種工程用途相關(guān)聯(lián),此程序可以快速的生成點之記,提高了工作效率,減少錯誤率。
點之記;特征點;.NET API
點之記是測繪工作中使用的比較頻繁的一種圖件,它是根據(jù)現(xiàn)場條件用鋼尺測量出相關(guān)特征點的距離,并繪制簡要的略圖。其作用是測量人員或其他相關(guān)人員在使用工作點時,依據(jù)點之記很方便地在實地能夠找到。使用的范圍主要在提交各種等級的GPS點、水準(zhǔn)點、城市導(dǎo)線點、道路的中心點和給施工單位引測的臨時水準(zhǔn)點等成果時,必須要有點之記的成果表。尤其是現(xiàn)在隨著城市的發(fā)展,道路建設(shè)越來越快,測繪單位需要根據(jù)規(guī)劃好的道路中心線在實地放樣和縱橫斷面的測量,最后把成果交付給施工單位,在這其中就有點之記的成果表。平時的做法就是在現(xiàn)場用鋼尺丈量距離,再繪制圖形,這樣既費時又費力,因為既然實測了地形圖,其實際位置都是準(zhǔn)確的,那么用地形圖來生成點之記即可。
剛開始我們使用做好的模板在地形圖上進行裁切,然后保存,再打開進行編輯和保存,一直重復(fù)這樣的工作。如果遇到一條長約幾十公里的道路時,那路中點之記和水準(zhǔn)點之記可能達(dá)到上百個,使用人工去手動完成這些重復(fù)而枯燥的工作,工作效率低下,也更容易出錯。現(xiàn)在計算機使用廣泛,它最擅長的就是做重復(fù)的工作,因此筆者開發(fā)了一段點之記自動生成的程序應(yīng)用于工作中。
2.1 開發(fā)平臺和開發(fā)語言的選擇
現(xiàn)階段在測繪行業(yè)中,Autodesk公司的產(chǎn)品Auto-CAD使用非常廣泛,在此平臺上的二次開發(fā)軟件也很多。當(dāng)然AutoCAD支持的開發(fā)語言種類也多,如AutoLISP、VBA、ObjectArx、.NET API等,對于不是專業(yè)的軟件開發(fā)者,選擇一種適合自己的二次開發(fā)語言即可,沒有必要全部掌握。如果你有C++的基礎(chǔ)你可以學(xué)習(xí)ObjectArx,它的功能最為強大,但學(xué)習(xí)起來有點困難。如果你是正在學(xué)習(xí).NET的軟件,如C#、VB.NET等,可以學(xué)習(xí).NET API二次開發(fā),因為在最新的AutoCAD 2011中,.NET API已經(jīng)擁有與C++相匹配的強大功能,由于開發(fā)接口是完全面向?qū)ο蟮?,又具有方便易用的特點,所以用.NET API來進行AutoCAD的二次開發(fā)還是比較容易掌握的。
2.2 程序設(shè)計思路
由于是自動生成點之記,那么首先要有繪制好的地形圖,而且需要點之記在圖形范圍中,為了適應(yīng)各種點之記,可以分幾種常用的情況如控制點、路中點、水準(zhǔn)點點之記等,筆者就以路中點為例。程序流程如圖1所示。
2.3 界面設(shè)計
用戶界面使用了用戶常用的工具選項板,簡潔而且實用,主要是設(shè)置點之記需要的內(nèi)容,如作業(yè)員、檢查員等。如圖2所示。
3.1 點之生成文件
在生成路中點點之記時,文件名使用里程樁號來保存,這樣可以方便對文件的管理,如圖3所示。
圖1 程序流程圖
圖2 用戶界面 圖3 文件名稱
3.2 生成日志文件
在程序生成的日志文件中,列出了點之記中沒有特征點可用的文件名。用戶在查看日志文件時,可以對其中的點之記進行手動修改。
3.3 生成點之記成果
生成的點之記會自動標(biāo)注特征點距離,填入點名、坐標(biāo)和相應(yīng)的說明等,如圖4所示。
圖4 點之記成果
3.4 部分代碼實現(xiàn)
(1)在選擇道路中心線的同時,把道路名稱添加到擴展數(shù)據(jù)中,這樣在生成點之記時將會自動標(biāo)注道路名稱。
'如果選擇的線性是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"
'加入道路名稱的擴展數(shù)據(jù)
Tools.AddXdata("RoadName",plRoad,pointMarkPalette.strRoadName)
Else
ed.WriteMessage(vbCrLf&"該實體不是多段線")
Return End If
(2)生成點之記文件。
Using trans As Transaction=curDb.TransactionManager.Start-Transaction
'新建臨時數(shù)據(jù)庫來讀取點之記模板
Dim tempDb As New Database(False,True) '新建數(shù)據(jù)庫來生成點之記
Dim db As New Database(False,True) '使用多邊形框來選擇范圍內(nèi)的實體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)
'插入點之記模板文件到數(shù)據(jù)庫
db.Insert(System.IO.Path.GetFileNameWithoutExtension (fileName),tempDb,True)
'開始點之記數(shù)據(jù)庫的事務(wù)處理
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
'在點之記中加入作業(yè)員
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"))
'點之記根據(jù)比例尺縮小或者放大
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
'把臨時存取模板的數(shù)據(jù)庫銷毀tempDb.Dispose() '保存各個點之記
db.SaveAs(pointMarkPalette.saveFileName&"TP"&num.ToString&".dwg",DwgVersion.Current)
'提交事務(wù)處理trans.Commit() End Using…………
.NET語言中的VB.NET和C#都是面向?qū)ο蟮恼Z言,它們對于初學(xué)者來說易學(xué)易用。用這些語言結(jié)合CAD的托管API來進行二次開發(fā)非常的方便。鑒于在線路測量或控制測量中,需要提交點之記時,可以使用本程序來生成成果,這樣方便快捷而且不容易出錯。本程序開發(fā)完成后,進行了詳細(xì)的測試后才投入到生產(chǎn)當(dāng)中,它實現(xiàn)了點之記的自動生成,提高了工作效率。
[1] Thearon Willis Bryan Newsome.Visual Basic 2008入門經(jīng)典[M].北京:清華大學(xué)出版社,2009.
[2] 秦洪現(xiàn),崔惠嵐,孫劍.Autodesk系列產(chǎn)品開發(fā)培訓(xùn)教程[M].北京:化學(xué)工業(yè)出版社,2008.
[3] 曾洪飛,張帆,盧擇臨.AutoCad VBA&VB.NET開發(fā)基礎(chǔ)與實例教程[M].北京:中國電力出版社,2008.
[4] 鄭勇波.基于AutoCAD的斷面測量新模式和軟件研究[J].城市勘測,2011(6),149~151.
[5] 周建康,冷泠,王瑞青.AutoCAD中判斷折線自相交的一種快速算法[J].2012(1),84~86.
[6] 李文柱.AutoCAD VBA二次開發(fā)在道路橫斷面數(shù)據(jù)處理中的應(yīng)用[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—),男,工程師,主要從事城市測繪生產(chǎn)與管理工作。