摘要:介紹利用AutoCAD內(nèi)嵌語(yǔ)言AutoLISP的數(shù)據(jù)庫(kù)操作函數(shù),實(shí)現(xiàn)測(cè)量坐標(biāo)系與施工坐標(biāo)的換算問(wèn)題,并附上換算程序。

關(guān)鍵詞:AutoCAD;Au toLISP;坐標(biāo)系統(tǒng)換算

一 、問(wèn)題的提出
總圖設(shè)計(jì)人員為便于設(shè)計(jì),常常根據(jù)場(chǎng)地情況采用施工坐標(biāo)系,以便使新設(shè)計(jì)建筑物的軸線平行于施工坐標(biāo)軸。施工坐標(biāo)系與測(cè)量坐標(biāo)系的坐標(biāo)換算公式:
由AB換為XY
X =X o +Ac osR O+BsinR O
Y= Y o 一As inR O+BcosR O
由 XY 換 為AB
A= ( X 一XO)cosR O一(Y一YO)sinR O
B= ( X一 XO)sinR O+(Y一YO)cosR O
式中,Xo, Y。為施工坐標(biāo)系原點(diǎn)在測(cè)量坐標(biāo)系中的“坐標(biāo),R。為施工坐標(biāo)系統(tǒng)A軸正方向與測(cè)量坐標(biāo)系統(tǒng)X軸正方向的夾角,如圖1,圖1(a)中為正值,圖1(b)中為負(fù)值。

二、 平面坐標(biāo)的換算
AutoCAD得以在世界范圍內(nèi)流行的重要因素之一,是它的開(kāi)放性,它將二次開(kāi)發(fā)權(quán)交給了用戶,并提供了許多開(kāi)發(fā)工具,特別是內(nèi)嵌的AutoLISP
語(yǔ)言簡(jiǎn)單易學(xué),且功能強(qiáng)大。筆者就是利用AutoLISP編程來(lái)簡(jiǎn)化坐標(biāo)系統(tǒng)換算的。下面介紹給大家,程序如下:
(de fun c :x ths(/ald f m n o 禪wx 1Y O
(set qa l (ge tdi st” n輸人0V ’”):“)
x1( get d ist ” n 輸人 X o:”)
yl( g etd ist ” n 輸 人 YO:”)
n(g etd ist” n(X ,Y E A,B= 1)(A,B==>X,Y
=2)}1}):”)
o(ss get ") C) w(l ist 0 0 )p (ilstyl x l)
d(f ix a l) a l (‘ (一 al d ) 10 0)f(fixa l)m(* 1 00
(一alf) )
al( +d (/ f 60 .0) (/ m 3 6 00.0))
) (斌 = nn il) (se tqn 1 ))
(if (/ =n 1 )
(por gn
(set qa l (‘ 一 1 al ) )
(co mm an d" orta te 'o' "w a l" mo ve 'o'"w p "
zoom'"e )
)
(command"m oved'"p w 'ortate'o'"w a l"zood'
ne)
) (princ)
)
在程序運(yùn)行時(shí),首先要求輸人兩坐標(biāo)系統(tǒng)間的夾角Ro,角度按60進(jìn)制輸人。按下來(lái)要求輸人Xo, Yo,只將它們的值輸人即可。此程序能夠完成兩個(gè)坐標(biāo)系統(tǒng)的相互換算,按提示選擇字符1,2就行(缺省為1)。提示中的(X,Y =>A ,B )表示由測(cè)量坐標(biāo)系統(tǒng)換算成施工坐標(biāo)系統(tǒng);(A,B=>X,川表示由施工坐標(biāo)系統(tǒng)換算成測(cè)量坐標(biāo)系統(tǒng)。

三、高程的換算
高程的換算需要如下程序:
(de fun c :chtext(/a la 2b lb 2b 3b 4b 5b 8c lc 2c 3
pl sl s2 s3 w)
(set qp l(g e td ist” 、n兩高程系統(tǒng)間高差是多
少?:‘今
w(g ets trin g n 輸 人 要 處理 高程數(shù)據(jù)
的層名:")w(strcease w)
s3(g eti nt" n 處 理 后 高 程保 留的小數(shù)位
數(shù):'1)
) (se tq a l ( s s g e t" X "(l ist(c ons0" text")(c ons8w )))
a2 (sslength al)n 0)
(erp eat a2
(set qb l(s sna me al n ) b2(entgetbl ) b3(cdr
(, 1 b2))
b4( cd r( , 10 b 2 )) b 8 (a sci ib 3) b 5
(cdr(, 7 b2)
)
(if (4-b8 57)
(por gn
(set qc l (a tof be ) s2 (fix cl )s l (一 cl s2 )
(if (/ =s l0 )
(por gn (e n tde lb l ) (s e tqc 2 ( +c 1p l)
c3(rt osc2 2 s3 ))
(co mm and "l aye ''" 9 'w "” "te xt" "9 'b5
b410c3
)
)(setq n(+n 1))
高程 的 換 算需要如下程序:
(de fun c :chtext(/a la 2b lb 2b 3b 4b 5b 8c lc 2c 3
pl sl s2 s3 w)
(set qp l(g e td ist” 、n兩高程系統(tǒng)間高差是多
少?:‘今
w(g ets trin g n 輸 人 要 處理 高程數(shù)據(jù)
的層名:")w(strcease w)
s3(g eti nt" n 處 理 后 高 程保 留的小數(shù)位
數(shù):'1)
) (se tq a l ( s s g e t" X "(l ist(c ons0" text")(c ons8w )))
a2 (sslength al)n 0)
(erp eat a2
(set qb l(s sna me al n ) b2(entgetbl ) b3(cdr
(, 1 b2))
b4( cd r( , 10 b 2 )) b 8 (a sci ib 3) b 5
(cdr(, 7 b2))
)
)
)
(if (4-b8 57)
) (re dra w) ( p r i nc )
)
此程序首先要求輸人兩個(gè)坐標(biāo)系統(tǒng)間的高差值,然后要求輸人高程數(shù)據(jù)所在的層名,最后要求輸人高程處理后要保留的小數(shù)位數(shù),一般情況下,控制點(diǎn)名由字母開(kāi)頭并與控制點(diǎn)高程處于同一層。值得說(shuō)明的是怎樣解決控制點(diǎn)名與控制點(diǎn)高程的判斷問(wèn)題。大家知道,數(shù)字與字母的ASCII碼不同,本程序就利用這一點(diǎn)來(lái)解決這一問(wèn)題的。只要判斷出得到的TEXT實(shí)體第一個(gè)字符的ASCII碼,即可分辨出是控制點(diǎn)名,還是控制點(diǎn)高程。分辨之后再分別處理,對(duì)控制點(diǎn)名不做處理,對(duì)控制點(diǎn)高程,先將實(shí)體從圖中刪除,然后再重新在原位置寫上換算后的高程?刂泣c(diǎn)若用自然數(shù)命名,本程序也能分辨出來(lái)。其方法是:先將所取得的高程字符用atof函數(shù)轉(zhuǎn)換成實(shí)數(shù),然后再用fix函數(shù)取整。若此實(shí)數(shù)與取整后的差值為0,則說(shuō)明此數(shù)字是控制點(diǎn)名,不做處理。

四、結(jié)束語(yǔ)
上述的平面坐標(biāo)及高程換算程序,雖然是為換算控制點(diǎn)坐標(biāo)而編寫的,但它們的用途不只于此。利用它們,可將不同坐標(biāo)系的圖紙互相換算。在換算過(guò)程中不需任何計(jì)算,只需做出選擇,按提示輸人夾角Ro,X o,Y 。以及坐標(biāo)系間的高差,即可完成圖紙的坐標(biāo)系換算。