把以前发的加了一下circle arc
http://www.xdcad.net/forum/showt ... d=590811#post590811
arc反过来是没用的!

- ;;;==============================================
- ;;;多线义和直线,弧线,圆 反向
- ;;;by Aeo @ XDCAD.net
- ;;;-----------------------------------------------
- (defun reverse-LWpline (e / a en how li1 li2 li3)
- (setq en(entget e '("*")) how nil)
- (foreach an en
- (if(setq a(member(car an)'(10 40 41 42)))(setq how t))
- (cond((not how)(setq li1(cons an li1)))
- ((and how a)
- (cond((=(car an)40)(setq an(cons 41(cdr an))))
- ((=(car an)41)(setq an(cons 40(cdr an))))
- ((=(car an)42)(setq an(cons 42(- 0(cdr an)))))
- (t an)
- )
- (setq li2(cons an li2)))
- ((and how(not a))(setq li3(cons an li3)))
- )
- )
- (entmod(append
- (reverse li1)
- (append(cdddr li2)(list(car li2)(cadr li2)(caddr li2)))
- (reverse li3)
- )
- )
- )
- (defun c:rev( / plw r e en j p10 p11 ss)
- (setq j -1)
- (prompt"\n选择要反向的 *POLYLINE,line,arc,circle:")
- (if(setq ss(ssget '((0 . "*POLYLINE,line,arc,circle"))))
- (progn
- (command"undo""group")
- (repeat(sslength ss)
- (setq e(ssname ss(setq j(1+ j)))
- name(cdr(assoc 0(entget e)))
- )
- (if(= "POLYLINE" name)(command"convert""p""s"e""))
- (cond((= "LWPOLYLINE" name)(reverse-LWpline e ))
- ((= "LINE" name)
- (setq en(entget e) p10(cdr(assoc 10 en)) p11(cdr(assoc 11 en))
- en(subst(cons 10 p11)(assoc 10 en)en)
- en(subst(cons 11 p10)(assoc 11 en)en)
- )(entmod en)
- )
- ((= "ARC" name) ;;arc反了还是老样子,它永远是对称的.建议注视掉-----------
- (command "pedit" e "y""")
- (reverse-LWpline (entlast))
- ) ;;-------------------------------------------------------
- ((= "CIRCLE" name)
- (setq en(entget e)
- r (cdr(assoc 40 en))
- p10(cdr(assoc 10 en))
- p11(polar p10 pi r)
- p10(polar p10 0 r)
- plw(getvar "plinewid")
- )
- (command "_pline""none"p10 "w""0""0""a""a""-180""none"p11"cl")
- (command "_MATCHPROP" e (entlast) "") ;;这一堆写的比较傻^_^
- (command "_pedit"(entlast)"l""on""")
- (entdel e)
- (setvar "plinewid" plw)
- )
- )
- )(command"undo""end")
- )
- )
- (princ)
- )
|