程序如下:
(defun c:knkc( / cmdecho_bak en en1 os pot pt ptlist ss1) (setq cmdecho_bak (getvar "cmdecho")) (setvar "cmdecho" 0) (setq os (getvar "osmode")) (if (/= os 0) (setvar "osmode" 0) ) (setq en(car(entsel"\n请选择闭合多义线:"))) (setq pt (getpoint "\n请选择方向点:")) (command "offset" 0.3 en pt "") (setq en1 (entlast)) (setq ptlist (ptlist-get en1)) (entdel en1) (command "trim" en "" "f" (foreach pot ptlist (command pot) "") "" ) (setq ss1 (ssget "_wp" ptlist)) (command "erase" ss1 "") (setvar "osmode" os) (princ) )
(defun ptlist-get (en / ptlist fst) (setq ent (entget en)) (foreach n ent (if (= 10 (car n)) (setq ptlist (cons (cdr n) ptlist)) ) ) (setq fst (car ptlist)) (setq ptlist (cons fst (reverse ptlist))) ptlist )
程序测试后,对于复杂闭合多义线框内扣图,程序有时失效,刚接触LISP不久,不知道哪里有问题?因不知道如何求得闭合多义线框内一点,在程序里加了(setq pt (getpoint "\n请选择方向点:")),请请斑主、大侠们指点,多谢
|