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