在工程测量内业处理中,有时需将横断面线数据提取出来,横断面线关键点是以“偏轴距,高程”二维形式提取,使用时选择一条横断面线(多义线),指定横断面的基准点(通常是一个特别的交叉点及其在横断面中的坐标,一般选择断面轴线与某一已高程的点),程序将把断面线(多义线)的折点坐标逐点计算出对应于横断面的平面坐标写入文件。
(defun c:zzDMX ()
(setvar "cmdecho" 0)
(setq ffn (getfiled "选取文件" "d:/" "dmx" 1))
(setq ff (open ffn "w"))
(close ff)
(setq secCount 0)
(setq cadPoint (cond ((= cadPoint nil) '(0.0 0.0))
(cadPoint)
)
)
(setq secPoint (cond ((= secPoint nil) '(0.0 0.0))
(secPoint)
)
)
(setq cadPoint (cond ((getpoint (strcat "请选取断面基准点<"
(rtos (car cadPoint) 2 3)
","
(rtos (cadr cadPoint) 2 3)
">:"
)
)
)
(cadPoint)
)
)
(setq secPoint (cond ((getpoint (strcat "请输入断面基准点断面坐标<"
(rtos (car secPoint) 2 3)
","
(rtos (cadr secPoint) 2 3)
">:"
)
)
)
(secPoint)
)
)
;(setq secPoint (getpoint "请输入断面基准点断面坐标:"))
(setq dltX (- (car secPoint) (car cadPoint)))
(setq dltY (- (cadr secPoint) (cadr cadPoint)))
(princ "\n顺序选取横断面线...")
(setq ss (ssget))
(setq i 0)
(setvar "pdmode" 33)
(repeat (sslength ss)
(setq secCount (1+ secCount))
(setq ff (open ffn "a"))
(princ (strcat "第," (itoa secCount) ",根线\n") ff)
(close ff)
(setq ii 1)
;;输出点号
(setq ssn (ssname ss i))
(setq endata (entget ssn))
(setq n 0)
(repeat (length endata)
(setq pp (nth n endata))
(setq key (car pp))
(if (= key 10)
(progn
(setq x_temp (cadr pp))
(setq y_temp (caddr pp))
(setq x (rtos (+ x_temp dltX) 2 3))
;;把x后小数点变为3位输出
(setq y (rtos (+ y_temp dltY) 2 3))
;;把y后小数点变为3位输出
(setq iii (itoa ii))
(setq ff (open ffn "a"))
(princ iii ff)
(princ "," ff)
(princ x ff)
(princ "," ff)
(princ y ff)
;(princ "," ff)
;(princ "0 " ff)
(princ "\n" ff)
(close ff)
(setq ii (1+ ii))
)
)
(setq n (1+ n))
)
(setq ii ii)
(setq i (1+ i))
)
(princ (strcat "\n文件写至=> " ffn))
(prin1)
)
(princ
"\nQinDong qd@cehuis.com 2017.3,键入 zzDMX 运行本插件"
)