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