mandala 发表于 2011-1-8 13:58:07

本帖最后由 mandala 于 2011-1-8 14:02 编辑

ZZXXQQ 发表于 2011-1-8 12:54 http://bbs.mjtd.com/static/image/common/back.gif
那就用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)
)))


mandala 发表于 2011-1-8 14:09:08

本帖最后由 mandala 于 2011-1-8 14:11 编辑

一个月前刚开始接触lisp,以前一点点相关经验都没有,每个函数都是从说明文档开始学起,真的很费力。24小时之前我还不知道2楼版主给的这段lisp该怎么去用;一个小时之前还不知道cond函数是个什么东西。很幸运,在明经遇到那么多热心的前辈,给了我极大的帮助,在这里再次谢谢大家!

mandala 发表于 2011-1-8 17:45:54

本帖最后由 mandala 于 2011-1-8 20:13 编辑

发现严重错误……直线的反向不能简单用倒着画条线来解决,因为没有指定线型。

听版主14楼的话,最终修改如下:

;;pline、line、spline、arc统统反向:
(defun C:fx(/ ENT ENT1 Q Q2 )
(setq ENT (entget (setq ENT1 (car (entsel)))))
(cond
    ((= (cdr (assoc 0 ENT)) "LWPOLYLINE") (reverseLwp ent1))
    ((= (cdr (assoc 0 ENT)) "LINE")
      (setq Q (cons 10 (cdr (assoc 11 ent)))
            Q2 (cons 11 (cdr (assoc 10 ent))))
      (setq ent (subst Q (assoc 10 ent) ent)
            ent (subst Q2 (assoc 11 ent) ent))
      (entmod ent)
   )
    ((= (cdr (assoc 0 ENT)) "SPLINE")(command "SPLINEDIT" ENT1 "E" ""))
    ((= (cdr (assoc 0 ENT)) "ARC")
      (command "pedit" ent1 "y" "")
      (setq ent1(entlast))
      (reverseLwp ent1)
    )
    (t (prompt "这东西不能反转。"))
    )
(princ))
;;;以下为引用的子程序:pline顶点逆序
(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)
)))



Gu_xl 发表于 2011-1-8 19:19:28

本帖最后由 Gu_xl 于 2011-1-8 19:20 编辑

回复 mandala 的帖子 直线这么改比较好!

((= (cdr (assoc 0 ENT)) "LINE")
(setq Q (cons 10 (cdr (assoc 11 ent)))
Q2 (cons 11 (cdr (assoc 10 ent)))
)
(setq ent (subst Q (assoc 10 ent) ent)
ent (subst Q2 (assoc 11 ent) ent)
)
(entmod ent)

      )

mandala 发表于 2011-1-8 19:57:53

本帖最后由 mandala 于 2011-1-8 20:09 编辑

回复 Gu_xl 的帖子

嗯,对,用entmod更直观,也更方便。

另外我刚刚才知道cond后边是不用加progn的,汗一个。

mandala 发表于 2011-1-13 15:28:48

回复 Gu_xl 的帖子

又有新问题:能让一个圆反向吗?它没有起点终点……

Gu_xl 发表于 2011-1-13 18:25:07


(defun c:tt1()
(setq en (car (entsel "\n选择一个园:")))
(setq cp (cdr (assoc 10 (setq enl (entget en))))
r (cdr (assoc 40 enl))
)
(entmake (setq lst (list
      '(0 . "LWPOLYLINE")
      '(100 . "AcDbEntity")
      '(67 . 0)
      '(410 . "Model")
      '(100 . "AcDbPolyline")
      '(90 . 2)
      '(70 . 129)
      (cons 10 (polar cp 0 r))
      '(40 . 0)
      '(41 . 0)
      '(42 . -1)
      (cons 10 (polar cp pi r))
      '(40 . 0)
      '(41 . 0)
      '(42 . -1)
      )
    )
    )
(command "_matchprop" en (entlast) "")
(entdel en)
(princ)      
)

mandala 发表于 2011-1-13 18:58:59

回复 Gu_xl 的帖子

哦!对!还是用多义线来解决!!真是让我茅塞顿开,谢谢版主!!!哈哈。

oaf123 发表于 2014-7-31 17:25:26

我想问的是如何应用
页: 1 [2]
查看完整版本: 能否让线型反向?