范福平
(中鐵六局集團(tuán)有限公司,北京100026)
在工程測量中,DWG 圖是各種成果提交的主要形式,經(jīng)常遇到不同坐標(biāo)系成果轉(zhuǎn)換的問題。AutoCAD 軟件是繪制DWG 格式圖紙的基礎(chǔ)軟件, 常用的制圖軟件大多是以AutoCAD 軟件為基礎(chǔ)進(jìn)行開發(fā),通常具有完善的制圖編輯功能,但AutoCAD 軟件自身并不提供坐標(biāo)轉(zhuǎn)換的功能。坐標(biāo)變換從坐標(biāo)系形式可以分為國家標(biāo)準(zhǔn)坐標(biāo)坐標(biāo)系變換和任意坐標(biāo)系變換, 從坐標(biāo)的維度可以分為二維坐標(biāo)變換和三維坐標(biāo)變換, 從坐標(biāo)變換的對象可以分為基于整體的變換和基于實(shí)體的變換。本文主要研究任意坐標(biāo)系變換下二維坐標(biāo)成果的轉(zhuǎn)換問題。
任意坐標(biāo)系變換下二維坐標(biāo)成果的整體變化, 本質(zhì)就是數(shù)學(xué)上的二維坐標(biāo)系變化,數(shù)學(xué)公式如下:
對其求解首先需要確定變換函數(shù), 一般采用相似變換和仿射變換,相似變換通常采用四參數(shù)模型,仿射變換一般采用一次仿射變換模型[1]。在此采用相似變換的四參數(shù)模型,見公式(2)。
其中,x,y 為轉(zhuǎn)換前坐標(biāo),X,Y 為轉(zhuǎn)換后坐標(biāo),△X,△Y 為平移參數(shù),m 為尺度變換因子,θ 為旋轉(zhuǎn)角。
令a=m·cosθ,b=m·sinθ,則:
將△X,△Y、a、b 作為平差參數(shù),并將新坐標(biāo)系下的坐標(biāo)作為觀測值,舊坐標(biāo)系中的坐標(biāo)設(shè)為無誤差,可列出誤差方程:
設(shè)選中了n 個(gè)新舊坐標(biāo)重合點(diǎn),根據(jù)公式(4)可列出2n 個(gè)方程,當(dāng)n>2 時(shí),方程個(gè)數(shù)大于4,可采用最小二乘法求解式中的4個(gè)參數(shù)。
公式(5)用矩陣進(jìn)行表達(dá)為:
按最小二乘進(jìn)行求解,可得:
Visual Basic for Applications(簡稱VBA)是Autodesk 公司提供的一個(gè)基于對象的編程開發(fā)環(huán)境[2]。它利用AutoCAD ActiveX Automation 接口向AutoCAD 發(fā)送消息。而ActiveX Automation 是Microsoft 基于COM(組件對象模型)體系結(jié)構(gòu)開發(fā)的一種技術(shù)。用戶可以用它來自定義AutoCAD,開發(fā)人員通過調(diào)用AutoCAD ActiveX 對象封裝的方法與屬性, 操縱AutoCAD 圖形對象。VBA 開發(fā)具有易學(xué)易用、功能強(qiáng)大等特點(diǎn), 已經(jīng)成為CAD 二次開發(fā)中一種最為常見的形式之一。
AutoCAD 的VBA 編程開發(fā)需要理解三方面內(nèi)容, 一是AutoCAD 本身, 包括AutoCAD 圖元對象、數(shù)據(jù)和命令; 二是AutoCAD ActiveX Automation 接口, 可以與AutoCAD 對象進(jìn)行消息傳遞;三是VBA 本身,理解對象、常量、程序流控制、調(diào)試和執(zhí)行[3]。
理解AutoCad 的對象模型是對其進(jìn)行編程的基礎(chǔ)。AutoCAD 以層次結(jié)構(gòu)組織對象,如圖1,其頂層是Application,下面是Preferences、Document 等。Document 對象包含ModalSpace、PaperSpace、Blocks、Layers、Plot、Utility 等一系列對象。最底層的對象是點(diǎn)、線、圓、圓弧等基本圖形對象。
VBA 通過ActiveX Automation 技術(shù)能夠返回AutoCAD 的對象及其方法、屬性,開發(fā)的應(yīng)用程序通過對AutoCAD 的各級對象的方法和屬性進(jìn)行操作控制AutoCAD 的工作。通過方法可以實(shí)現(xiàn)對象的一些操作, 而對象狀態(tài)信息的收集或改變則是通過屬性操作來完成。
圖1 AutoCAD 對象模型層次路徑簡圖(部分)
2.2.1 CAD 地形圖平面坐標(biāo)轉(zhuǎn)的具體過程
a. 首先將CAD 地形圖中新舊坐標(biāo)系已知的點(diǎn)作為同名點(diǎn),計(jì)算:
b.將新舊坐標(biāo)系的同名點(diǎn)坐標(biāo)分別減去
c.用b 轉(zhuǎn)換獲得的同名點(diǎn)坐標(biāo)求出坐標(biāo)轉(zhuǎn)換參數(shù):
d.將CAD 地形圖整體平移,使(△X,△Y)與CAD 坐標(biāo)原點(diǎn)重合;
2.2.2 CAD 中坐標(biāo)轉(zhuǎn)換VBA 程序的實(shí)現(xiàn)
a.啟動AutoCAD,打開要坐標(biāo)轉(zhuǎn)換的地形圖,command 命令行輸入VBAIDE 命令,啟動VBA 編輯器,如圖2;
b.在VBA 編輯器中,編制矩陣計(jì)算程序模塊,包括矩陣的乘法、轉(zhuǎn)置、加法和求逆;
c.編制求參數(shù)和誤差計(jì)算模塊;
d.編制DWG 圖形實(shí)體遍歷程序,實(shí)現(xiàn)對圖形實(shí)體坐標(biāo)逐一進(jìn)行變換;
e.程序編制完畢,保存為獨(dú)立的后綴為dvb 的文件;
f.在command 命令行輸入vbarun 或者在菜單中定制調(diào)用。
圖2 AutoCAD 中VBA 編輯器窗口
基于本文原理開發(fā)的坐標(biāo)變換系統(tǒng)在多個(gè)工程項(xiàng)目得到應(yīng)用,精度可靠,實(shí)現(xiàn)了DWG 數(shù)字地形圖不同坐標(biāo)系間自動轉(zhuǎn)換,提高了生產(chǎn)效率。上述系統(tǒng)適合地形圖坐標(biāo)變換旋轉(zhuǎn)角度和放縮比例不大的情況,當(dāng)旋轉(zhuǎn)角度或放大比例過大,存在地形圖符號不符合制圖要求的,將在后續(xù)的研究中加以解決。