本帖最后由 mandala 于 2011-1-8 14:02 编辑
ZZXXQQ 发表于 2011-1-8 12:54 
那就用cond吧。
好的,改动一下 - ;;统统反向:
- (defun C:fx(/ ENT ENT1 )
- (setq ENT (entget (setq ENT1 (car (entsel)))))
- (cond
- ((= (cdr (assoc 0 ENT)) "LWPOLYLINE") (reverseLwp ent1))
- ((= (cdr (assoc 0 ENT)) "LINE")
- (progn
- (command "_.LINE" "_NON" (vlax-curve-getendPoint ent1) "_NON" (vlax-curve-getStartPoint ent1) "")
- (entdel ENT1)
- ))
- ((= (cdr (assoc 0 ENT)) "SPLINE")(command "SPLINEDIT" ENT1 "E" ""))
- ((= (cdr (assoc 0 ENT)) "ARC")
- (progn
- (command "pedit" ent1 "y" "")
- (setq ent1(entlast))
- (reverseLwp ent1)
- ))
- (t (prompt "这个玩意不能反转!"))
- )
- (princ))
- ;;;多段线顶点逆序
- (defun reverseLwp (ent1 / a en how li1 li2 li3)
- (setq en(entget ent1 '("*")) 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)
- )))
|