本帖最后由 作者 于 2005-8-10 12:01:39 编辑
龙龙仔发表于2005-8-8 17:14:00 无痕早就有一个不错的,赶快跟他要!
看到他的反剪程序,都是没选剪切边。
自己写的只对LINE有效。
(defun c:newtrim (/ data pt_nea endata pt_in pt_temp) (princ "仅支持LINE线型") (setq data (entget (car (nentsel "\n剪切线:"))) ) (while (setq en (nentsel "\n保留段:")) (setq pt_nea (osnap (cadr en) "nea")) (setq endata (entget (car en))) (cond ((= (cdr (assoc 0 endata)) "LINE") (setq pt_in (inters (cdr (assoc 10 data)) (cdr (assoc 11 data)) (cdr (assoc 10 endata)) (cdr (assoc 11 endata)) nil ) ) (if (> (distance (cdr (assoc 10 endata)) pt_in) (distance (cdr (assoc 10 endata)) pt_nea) ) (setq pt_temp (cdr (assoc 10 endata))) (setq pt_temp (cdr (assoc 11 endata))) ) (command "erase" en "") (entmake (list '(0 . "line") '(100 . "acdbentity") '(100 . "acdbline") (cons 10 pt_temp) (cons 11 pt_in) ) ) ) (t (alert "对不起,暂未支持该实体类型。")) ) ) (princ) ) (princ "***newtrim*** 小妹丁") |