这个折断线曾经让我出过一次洋相。
一位朋友没装ET,没法画,我有呀,于是想当然就把ET内BREAKL.LSP拷贝过去,反馈不能用,便仔细一看,TNND,这么小的一个功能,居然不把程序独立,还要配相应的dwg文件。一气之下自己编一个。比它小比它强,呵呵。。。。。。

- [FONT=courier new]
- ; BREAKL.LSP 折断线 CYN 2003.7.8
- ; 最近一次修改: 2003.7.9
- (defun c:breakl (/ 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 breakl_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 breakl_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指定第一个点: "))
- (breakl_new)
- )
- )
- )
- (if (= p1 nil) (breakl_add) (breakl_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 ename)
- (command "_pline" p1 "w" "0.0" "" p4 p5 p6 p7 p2 "")
- (setvar "osmode" os)
- )
- [/FONT]
|