摘要:介绍利用AutoCAD内嵌语言AutoLISP的数据库操作函数,实现测量坐标系与施工坐标的换算问题,并附上换算程序。

关键词:AutoCAD;Au toLISP;坐标系统换算

一 、问题的提出
总图设计人员为便于设计,常常根据场地情况采用施工坐标系,以便使新设计建筑物的轴线平行于施工坐标轴。施工坐标系与测量坐标系的坐标换算公式:
由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。为施工坐标系原点在测量坐标系中的“坐标,R。为施工坐标系统A轴正方向与测量坐标系统X轴正方向的夹角,如图1,图1(a)中为正值,图1(b)中为负值。

二、 平面坐标的换算
AutoCAD得以在世界范围内流行的重要因素之一,是它的开放性,它将二次开发权交给了用户,并提供了许多开发工具,特别是内嵌的AutoLISP
语言简单易学,且功能强大。笔者就是利用AutoLISP编程来简化坐标系统换算的。下面介绍给大家,程序如下:
(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)
)
在程序运行时,首先要求输人两坐标系统间的夹角Ro,角度按60进制输人。按下来要求输人Xo, Yo,只将它们的值输人即可。此程序能够完成两个坐标系统的相互换算,按提示选择字符1,2就行(缺省为1)。提示中的(X,Y =>A ,B )表示由测量坐标系统换算成施工坐标系统;(A,B=>X,川表示由施工坐标系统换算成测量坐标系统。

三、高程的换算
高程的换算需要如下程序:
(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两高程系统间高差是多
少?:‘今
w(g ets trin g n 输 人 要 处理 高程数据
的层名:")w(strcease w)
s3(g eti nt" n 处 理 后 高 程保 留的小数位
数:'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两高程系统间高差是多
少?:‘今
w(g ets trin g n 输 人 要 处理 高程数据
的层名:")w(strcease w)
s3(g eti nt" n 处 理 后 高 程保 留的小数位
数:'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 )
)
此程序首先要求输人两个坐标系统间的高差值,然后要求输人高程数据所在的层名,最后要求输人高程处理后要保留的小数位数,一般情况下,控制点名由字母开头并与控制点高程处于同一层。值得说明的是怎样解决控制点名与控制点高程的判断问题。大家知道,数字与字母的ASCII码不同,本程序就利用这一点来解决这一问题的。只要判断出得到的TEXT实体第一个字符的ASCII码,即可分辨出是控制点名,还是控制点高程。分辨之后再分别处理,对控制点名不做处理,对控制点高程,先将实体从图中删除,然后再重新在原位置写上换算后的高程。控制点若用自然数命名,本程序也能分辨出来。其方法是:先将所取得的高程字符用atof函数转换成实数,然后再用fix函数取整。若此实数与取整后的差值为0,则说明此数字是控制点名,不做处理。

四、结束语
上述的平面坐标及高程换算程序,虽然是为换算控制点坐标而编写的,但它们的用途不只于此。利用它们,可将不同坐标系的图纸互相换算。在换算过程中不需任何计算,只需做出选择,按提示输人夹角Ro,X o,Y 。以及坐标系间的高差,即可完成图纸的坐标系换算。