(defun c:zd (/ os scl ee temp xx ang p1 p2 p3 p4 p5 p6 p7 ename)
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(if (= scl nil) (setq scl (getvar "dimscale")))
(if (= scl 0) (setq scl 1.0))
(if (= ee nil) (setq ee 1.0))
(setq temp T)
(while temp
(prompt (strcat "\n比例因子 Scale = " (rtos scl)
" , 延伸 Extension = " (rtos ee)
)
)
(initget "Scale Extension")
(setq p1 (getpoint "\n指定第一个点或 [比例因子(S)/延伸(E)] <在既有直线上添加>: "))
(cond
((= p1 "Scale")
(setq xx (getreal (strcat "\nScale <"(rtos scl)">:")))
(if xx (setq scl xx))
)
((= p1 "Extension")
(setq xx (getreal (strcat "\nExtension <"(rtos ee)">:")))
(if xx (setq ee xx))
)
(T
(setq temp nil)
)
)
)
(defun zd_new ()
(setq p2 p1)
(while (<= (distance p1 p2) (* scl 3.0))
(initget 1)
(setq p2 (getpoint p1 "\n指定第二点: "))
(if (<= (distance p1 p2) (* scl 3.0))
(princ "\n线条太短,不足以成为折断线")
)
)
(command "_line" p1 p2 "")
(setq ename (entlast))
)
(defun zd_add ()
(while (null ename)
(setq ename (entsel "\n选择要加折断符号之直线 LINE: "))
(setq ename (car ename))
(if (/= (cdr (assoc 0 (entget ename))) "LINE")
(setq ename nil)
)
)
(setq p1 (cdr (assoc 10 (entget ename))))
(setq p2 (cdr (assoc 11 (entget ename))))
(if (<= (distance p1 p2) (* scl 3.0))
(progn
(princ "\n! 线太短,不足以成为折断线,新画一个")
(setq p1 (getpoint "\n指定第一个点: "))
(zd_new)
)
)
)
(if (= p1 nil) (zd_add) (zd_new))
(setq ang (angle p1 p2))
(while (not p3)
(setq p3 (getpoint "\n指定折断符号位置 <中点>: "))
(if (not p3)
(setq p3 (polar p1 ang (/ (distance p1 p2) 2.0)))
(progn
(setq p4 (polar p3 (+ ang (* pi 0.5)) 1.0))
(setq p3 (inters p1 p2 p3 p4 nil))
(if (> (max (distance p1 p3) (distance p2 p3))
(- (distance p1 p2) (* scl 3.0))
)
(progn
(princ "\n*无效* 指定的点超出范围,请重新指定")
(setq p3 nil)
)
)
)
)
)
(setq p1 (polar p1 (+ ang pi) (* ee scl))
p2 (polar p2 ang (* ee scl))
p4 (polar p3 (+ ang pi) (* scl 1.5))
p5 (polar p4 ang (* scl 0.75))
p5 (polar p5 (- ang (* pi 0.5)) (* scl 2.0))
p6 (polar p3 ang (* scl 0.75))
p6 (polar p6 (+ ang (* pi 0.5)) (* scl 2.0))
p7 (polar p3 ang (* scl 1.5))
)
(entdel en