| 本帖最后由 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)
)))
 |