 - (defun c:podu( / a a1 d dx dy i os p1 p2 pt0 str stri)
- (princ "\n欢迎使用坡度标注程序! 命令podu")
- (princ "\n分别选择需要计算的两个高程数据:")
- (princ "\n别多选,选多了计算一定会出错!")
- (setq s (ssget))
- (setq n (sslength s))
- (setq k 0 )(setq hh 0.0)
- (while (< k n)
- (setq name (ssname s k))
- (setq a (entget name))
- (setq t1 (assoc '0 a))
- (setq t1 (cdr t1))
- (if (= t1 "TEXT") (PROGN
- (setq tx (assoc '1 a))
- (setq tx (cdr tx))
- (setq tx (atof tx))
- (if (= k 0) (setq hh TX))
- (if (/= k 0) (setq hh (- hh tx)))
- ))
- (setq k (+ k 1))
- )
- ; (setq hh (rtos hh 2 2));计算出高差
- ; (princ "\n高程差为:" hh)
- ;------------------------------------------------
- (setq olay (getvar "clayer"))
- (setvar "cmdecho" 0)
- ;==================================================
- (princ "\n选择坡度线(可以是PL或L,支持多选):")
- (vl-load-com)
- (setq SUMLEN 0)
- (setq SS (ssget '((0 . "CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE,ARC"))))
- (setq N 0)
- (repeat (sslength SS)
- (setq CURVE (vlax-ename->vla-object (ssname SS N)))
- (setq TLEN (vlax-curve-getdistatparam
- CURVE
- (vlax-curve-getendparam CURVE)
- )
- )
- (setq SUMLEN (+ SUMLEN TLEN))
- (setq N (1+ N))
- )
- ;(setq SUMLEN1 (rtos SUMLEN 2 3));计算出坡长为SUMLEN1
- ;=======================开始计算坡度========================
- (setq i (* (/ hh SUMLEN) 100);计算出坡度
- stri (rtos i 2 2);坡坡度取1位小数
- SUMLEN1 (rtos SUMLEN 2 2);坡长取2位小数
- text (if (= dx 0) "垂直" (strcat "i=" stri "%" " L=" SUMLEN1 "m"))
- )
- ;===================开始输出结果==========================
- (command "undo" "g")
- (setq os (getvar "osmode"))
- (setvar "osmode" 1)
- (setq p1 (getpoint "\标注箭头的位置:")
- p2 (getpoint "\n标注箭尾的方向:" p1)
- ang (angle p1 p2)
- ang2 (* ang 57.3)
- ang5 (+ 70 ang)
- pt0 (polar p1 ang5 1.5) ; 确定文字距离箭头的偏移位置
- )
- (setvar "osmode" os)
- (grdraw p1 p2 2)
- (setq olay (getvar "clayer"))
- (command "_layer" "m" "DM-坡度标注" "c" "3" "" "")
- (command "pline" p1 "w" "0" "1.3" (polar p1 ang 5) "w" "0" "0" (polar p1 ang 43) "")
- (command "text" "j" "bl" pt0 "3.0" ang2 text) ;pt0=文字位置,ang2=文字的角度,text=文本数据 ,bl表示文字对齐点为左下
- (command "undo" "e")
- (command "layer" "s" olay "")
- (princ)
- )
这个程序上半部分是从别人那里找来拼凑起来的,下半部分是我自己写的,请高手帮我修改下
1.按顺序选择第一个高程,第二个高程
2.判断两个数的大小并计算差值,这个程序目前会计算出负值来。。。。。
3.还有其他可以修改的更完善的,请高手修改下,谢谢!
|