最初由 ydf7332462 发布
[B]line pline有方向,我想用其表示管道中水的流向.
Lw表示打印宽,用层宽;
pline自身线宽表示管径+坡度等
不要将前后的线宽换过来,如要换让用者选; [/B]
按你的意思,pline线变成轻装多义线也可以,我就不写了.
;;;下面POLYLINE-->LWPOLYLINE,并加入直线.
;;;命令名test,自己改其他的吧.
;;;还是六楼的.test改了一下.

- ;;;==============================================
- ;;;多线义和直线反向
- ;;;by Aeo
- ;;;-----------------------------------------------
- (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:test( / e en j p10 p11 ss)
- (setq j -1)
- (prompt"\n选择要反向的直线或多义线:")
- (if(setq ss(ssget '((0 . "*POLYLINE,line"))))
- (progn
- (command"undo""group")
- (repeat(sslength ss)
- (setq e(ssname ss(setq j(1+ j))))
- (if(= "POLYLINE"(cdr(assoc 0(entget e))))(command"convert""p""s"e""))
- (cond((= "LWPOLYLINE"(cdr(assoc 0(entget e))))(reverse-LWpline e ))
- ((= "LINE"(cdr(assoc 0(entget e))))
- (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)
- )
- )
- )(command"undo""end")
- )
- )
- (princ)
- )
|