菜鸟求教 关于道路标高计算的程序 应该如何写?
已知A点标高 长度 坡度 求B点标高通过点 A点标高 长度 坡度 然后计算出B点标高
这样的程序 应该如何写呢?
;;;=================================================================*
;;; 通用函数 *
;;;功能:标注坡度 *
;;;参数:pt0 -----第一点 *
;;; pt1 -----第二点 *
;;; ty-----标注形式。1为比值形式;2为百分比形式。 *
;;;返回:如果参数正确绘制完毕返回T;否则返回nil。 *
(defun zl-pd-draw (pt0 pt1 zxbl hxblty / ANG DIST DIST_TEXT n
NUM PTSIZE_TEXT STR TMP XX
YY
)
(setq n (getreal "\n请输入文字高:"))
(setq size_text n ;_字高
dist_text (/ n 5);_文字脱机距离
)
(if (< (car pt0) (car pt1))
(setq tmp pt0
pt0 pt1
pt1 tmp
)
)
;;计算文字标注位置
(setq dist (distance pt0 pt1)
ang(angle pt0 pt1)
)
(setq pt (polar pt0 ang (* 0.5 dist))
pt (polar pt (+ ang (* 0.5 pi)) dist_text)
)
;;计算标注内容
(setq xx (*(- (car pt1) (car pt0)) (/ hxbl 1000.0000))
yy (*(- (cadr pt1) (cadr pt0))(/ zxbl 1000.0000))
)
(cond ((= ty 1)
(if (equal yy 0.0 1e-10)
(setq str "1:9999")
(setq num (/ xx 1.0 yy)
str (rtos (abs num) 2 2)
str (strcat "1:" str)
)
)
)
((= ty 2)
(if (equal xx 0.0 1e-10)
(setq str "9999%")
(setq num (/ yy 1.0 xx)
str (rtos (* 100 num) 2 2)
str (strcat str "%")
)
)
)
(t (setq str nil))
)
;;写文字
(if str
(PROGN (COMMAND "_.TEXT"
"j"
"bc"
"non"
pt
;size_text
(+(* (/ ang pi) 180)180)
str
)
T
)
nil
)
)
;;;=================================================================*
;;;功能:点取两点,标注坡度 *
;;;日期:sahe 于 2009-09-22 *
(defun c:pd0 (/ pt0 pt1 zxbl hxbl)
(princ "功能:点取两点,标注坡度。")
(setq hxbl (getint "\n请输入断面横向比例 1 :"))
(setq zxbl (getint "\n请输入断面纵向比例 1 :"))
(if (and (setq pt0 (getpoint "\n点取第一点: "))
(setq pt1 (getpoint pt0 "\n点取第二点: "))
)
(zl-pd-draw pt0 pt1 zxbl hxbl 2)
)
(princ)
)
;;;=================================================================*
;;;功能:选取line,标注坡度(比值形式) *
;;;日期:sahe 于 2009-09-22 *
(defun c:pd1 (/ ANG DIST DIST_TEXTENT I NUM
PT PT10 PT11 SIZE_TEXTSS STR TMP
XX YY
)
(princ "\n功能:标注坡度(比值形式)")
(setq i 0)
(setq hxbl (getint "\n请输入断面横向比例 1 :"))
(setq zxbl (getint "\n请输入断面纵向比例 1 :"))
(princ "\n选取直线对像... ")
(if (setq ss (ssget '((0 . "line"))))
(repeat (sslength ss)
(setq ent(entget (ssname ss i))
pt10 (cdr (assoc 10 ent))
pt11 (cdr (assoc 11 ent))
;pt10 (trans pt10 0 1) ;_转换为用户坐标系下
;pt11 (trans pt11 0 1)
)
(zl-pd-draw pt10 pt11 zxbl hxbl 1)
(setq i (1+ i))
)
)
(princ)
)
;;;功能:指定坡度、坡长,绘制之。
(defun c:pd2 (/ PT0 PT1 TMP)
;;设置全局变量
(or i_old
(setq i_old 0.0)
)
(or l_old
(setq l_old 100.0)
)
;;
(princ "\n1.请输入坡度值(%)<")
(princ i_old)
(if (setq tmp (getreal ">: "))
(setq i_old tmp)
)
;;
(princ "\n2.请输入坡长值<")
(princ l_old)
(if (setq tmp (getdist ">: "))
(setq l_old tmp)
)
;;绘制
(setq pt0 (getvar "VIEWCTR")
pt1 (list (+ (car pt0) l_old)
(+ (cadr pt0) (* i_old 0.01 l_old))
)
)
(command "_.line" "non" pt0 "non" pt1 "")
;;移动
(command "_.move" (entlast) "" "non" pt0)
(princ)
)
参考看看
页:
[1]