陳冠臣
摘要:本文利用VB.NET對AutoCad進(jìn)行二次開發(fā),實(shí)現(xiàn)了對不同數(shù)據(jù)格式的控制點(diǎn)繪制,不僅提高了工作效率,而且避免了數(shù)據(jù)轉(zhuǎn)換而出現(xiàn)的錯誤。
關(guān)鍵詞:控制點(diǎn)VB.NET
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3791(2012)04(c)-0031-01
隨著測繪技術(shù)的不斷發(fā)展,GPS-RTK在測繪工作中的運(yùn)用越來越廣泛。它的出現(xiàn)使我們的工作變的非常便捷,在測量領(lǐng)域越來越受到廣大測量人員的重視和青睞。尤其是在大面積的測圖中,使用GPS-RTK施測圖根控制相比傳統(tǒng)的導(dǎo)線測量效率要提高很多。在施測好圖根控制點(diǎn)后,需要在南方CASS中展點(diǎn)時,問題就出現(xiàn)了。因?yàn)镽TK手簿導(dǎo)出的數(shù)據(jù)格式與南方CASS中的格式不一致,需要在EXCEL中進(jìn)行一系列的轉(zhuǎn)換才能展點(diǎn)成功。而且在轉(zhuǎn)換過程中,稍不注意就會出現(xiàn)錯誤,給外業(yè)工作帶來不必要的麻煩。本文就是利用AutoCad二次開發(fā)程序來實(shí)現(xiàn)了展點(diǎn)的功能,避免了轉(zhuǎn)換數(shù)據(jù)的麻煩。
現(xiàn)在AutoCad二次開發(fā)的語言很多,如AutoLISP、ObjectARX、VBA、.NET等,各種語言有各自的優(yōu)點(diǎn)。其中使用VB.NET來開發(fā)AutoCad不僅實(shí)用,而且非常的方便。從AutoCad 2006開始的時候,AutoDesk就開發(fā)了針對.NET的類庫,使開發(fā)者很方便的操縱CAD中的各種圖元。雖然AutoCad 2006版本支持.NET并不是很好,但隨著時間的推移,.NET的功能將越來越強(qiáng)大。
1程序思路和編程實(shí)現(xiàn)
(1)RTK數(shù)據(jù)的提取。
不同廠家生產(chǎn)的儀器,其數(shù)據(jù)格式可能不盡相同,所以要對不同的數(shù)據(jù)格式進(jìn)行處理。結(jié)合生產(chǎn)中的應(yīng)用,編寫了一種實(shí)現(xiàn)程序,以下是提取數(shù)據(jù)的主要代碼:
Dim data1 As String
data1 = TextBox1.Text
Dim strLines() As String
strLines = data1.Split(New String() {ControlChars.CrLf}, _
StringSplitOptions.RemoveEmptyEntries)
For Each strLine As String In strLines
Dim surData() As String
surData = strLine.Split(New String() {","}, StringSplitOptions.None)
If RadioButton1.Checked = True Then
ElseIf RadioButton2.Checked = True Then
(2)實(shí)現(xiàn)展點(diǎn)。
根據(jù)不同的控制點(diǎn)類型來展繪控制點(diǎn),其實(shí)不同的控制點(diǎn)對應(yīng)不同的塊定義和不同的實(shí)體代碼,所以在處理不同的控制點(diǎn)類型的時候,只要插入不同的塊定義,再附于不同的實(shí)體代碼就可以達(dá)到目的了。下面是部分實(shí)現(xiàn)代碼:
If RadioButton5.Checked = True Then
''''遍歷集合中的每個元素
For Each kongzhiData As Data In AllPtColl
''''獲取控制點(diǎn)的坐標(biāo)
Dim kzPt As Point3d = New Point3d(kongzhiData.Y, kongzhiData.X, kongzhiData.Z)
''''插入塊定義
Block.InsertBlockRef("gc261", kzPt, CassScale, 0)
''''添加控制點(diǎn)的文字
AddKZText(kongzhiData, "KZD", 95)
Next
ElseIf RadioButton6.Checked = True Then
For Each kongzhiData As Data In AllPtColl
Dim kzPt As Point3d = New Point3d(kongzhiData.Y, kongzhiData.X, kongzhiData.Z)
Block.InsertBlockRef("gc168", kzPt, CassScale, 0)
AddKZText(kongzhiData, "KZD", 95)
Next
ElseIf RadioButton7.Checked = True Then
For Each kongzhiData As Data In AllPtColl
Dim kzPt As Point3d = New Point3d(kongzhiData.Y, kongzhiData.X, kongzhiData.Z)
Block.InsertBlockRef("gc257", kzPt, CassScale, 0)
AddKZText(kongzhiData, "KZD", 95)
Next
End If
2結(jié)語
Visual Basic 2005是一種易學(xué)易懂的.NET語言。用此語言結(jié)合CAD的托管API來進(jìn)行AutoCad二次開發(fā)非常的方便。本程序根據(jù)在實(shí)際工作中的應(yīng)用而開發(fā)出來的,實(shí)現(xiàn)了多種數(shù)據(jù)格式的轉(zhuǎn)換,進(jìn)而來實(shí)現(xiàn)控制點(diǎn)的展繪。本程序編制結(jié)束后,一直應(yīng)用于生產(chǎn),不僅提高了工作效率,而且避免了數(shù)據(jù)之間轉(zhuǎn)換而產(chǎn)生的錯誤。
參考文獻(xiàn)
[1] AutoCAD.NET開發(fā)人員手冊.
[2] AutoCAD 2006幫助文件.
[3] (美)Thearon Willis Bryan Newsome.Visual Basic 2005入門經(jīng)典[M].北京:清華大學(xué)出版社,2006.
[4] 秦洪現(xiàn),崔惠嵐,孫劍,等.Autodesk系列產(chǎn)品開發(fā)培訓(xùn)教程[M].北京:化學(xué)工業(yè)出版社,2008.