一楼的朋友,你的程序很好。
下面我也上传一个,我的这个可以在14下面使用,但是只能画水平和垂直方向的折断线。

- [FONT=courier new]
- (defun c:zdx()
- (setq os (getvar "osmode"))
- (setvar "cmdecho"0)
- (setq plw (getvar "plinewid"))
- (setvar "plinewid" 0)
- (command "undo""group")
- (princ"只画水平和竖直的折断线")
- (setq pt2 (getpoint "\nPlease click the first point(选择断面线的第一个边缘点):"))
- (setq pt7 (getpoint pt2 "\nPlease click the second point(选择地面线的另一边缘点):"))
- (setq bl (getreal "\nPlease enter the scale(请输入比例)<10>:"))
- (if (null bl)
- (progn
- (setq bl 10)
- ))
- (setq bl (/ bl 10))
- (setvar "osmode"0)
- (setq dx (- (car pt2) (car pt7)))
- (setq dy (- (cadr pt2) (cadr pt7)))
- (if (<= (abs dx) (abs dy))
- (progn
- (setq pt3 (list (car pt2) (+ (- (cadr pt2) (/ dy 2.0)) (* 1.5 bl))))
- (setq pt4 (list (+ (car pt3) (* 1 bl)) (cadr pt3)))
- (setq pt5 (list (- (car pt4) (* 2 bl)) (- (cadr pt4) (* 3 bl))))
- (setq pt6 (list (+ (car pt5) (* 1 bl)) (cadr pt5)))
- (setq pt8 (list (car pt2) (cadr pt7)))
- )
- (progn
- (setq pt3 (list (- (car pt2) (/ dx 2.0) (* 1.5 bl)) (cadr pt2)))
- (setq pt4 (list (+ (car pt3) 0) (+ (cadr pt3) (* 1 bl))))
- (setq pt5 (list (+ (car pt4) (* 3 bl)) (- (cadr pt4) (* 2 bl))))
- (setq pt6 (list (+ (car pt5) 0) (+ (cadr pt5) (* 1 bl))))
- (setq pt8 (list (car pt7) (cadr pt2)))
- )
- )
- (if (or (and (< (abs dy) (abs dx))(< dx 0)) (and (> (abs dy) (abs dx))(> dy 0)))
- (progn
- (command "pline" pt2 pt3 pt4 pt5 pt6 pt8 "")
- )
- (progn
- (command "pline" pt2 pt6 pt5 pt4 pt3 pt8 "")
- )
- )
- (command "undo""end")
- (setvar "cmdecho" 1)
- (setvar "plinewid" plw)
- (setvar"osmode"os)
- (princ)
- )
- [/FONT]
|