本帖最后由 aeo 于 2014-5-27 14:40 编辑
:lol:lol:lol:Q:Q:funk::funk:;P;P
- (defun c:epp( / i j l-b l-e pl pn pts pts1 x ss olderr)
- ;;by Aeo ---- bbs.xdcad.org
- (prompt "\n选择需炸开成单段的PL线: ")
- (setq j 0)
- (setq olderr *error* *error* '((msg)(setq *error* olderr)(command "undo""end")))
- (command "undo""group")
- (if (setq ss(ssget '((0 . "LWPOLYLINE"))))
- (while(< j (sslength ss))
- (setq pl(ssname ss j)
- j (1+ j)
- pn(entget pl '("*"))
- l-b(vl-remove-if '(lambda(x)(if (= 10(car x))(setq i t)) i) pn )
- l-b(vl-remove-if '(lambda(x)(member (car x)'(-1 5 330 90 70)))l-b )
- l-b(append l-b '((90 . 2)(70 . 0)))
- pts(vl-remove-if-not '(lambda(x)(member (car x)'(10 40 41 42)))pn )
- pts(if(= 1(cdr(assoc 70 pn)))(append pts (list(car pts)))pts)
- l-e(reverse(vl-remove-if '(lambda(x)(if (= 42(car x))(setq i nil)) (not i)) (reverse pn) ))
- )
- (while (>(length pts )4)
- (setq pts1(mapcar '(lambda (x y)x) pts '(0 0 0 0 0)))
- (setq pts(cddddr pts))
- (if(>(distance(car pts1)(last pts1))1e-6) ;去掉0长度,可能会去掉无限接近圆的弧线
- (entmakex (append l-b pts1 l-e))
- )
- )
- (entdel pl)
- ))
- (command "undo""end")
- (setq *error* olderr)
- (princ "\nOK")(princ)
- )
entmake 方法,pl线端点打断,
命令: epp , 自己改名字吧 |