明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4305|回复: 18

[基础] 能否让线型反向?

  [复制链接]
发表于 2011-1-7 15:34:29 | 显示全部楼层 |阅读模式
比如这么一条陡坎的pline或spline,线型名是DK,符号在前进方向左侧。画完后发现陡坎方向画反了,希望用一个命令将其反向。
当然用lisp来换一个反向的线型是最简单的,比如换成DK1。只是为每个线型都做一个反向线型,会导致cad的线型列表很长很长,也比较麻烦。能否不用添加新线型,直接将其反向呢?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-1-7 16:33:32 | 显示全部楼层
回复 mandala 的帖子

  1. ;;;多段线顶点逆序
  2. (defun reverseLwp (e / a en how li1 li2 li3)
  3. (setq en(entget e '("*")) how nil)
  4. (foreach an en
  5.   (if(setq a(member(car an)'(10 40 41 42)))(setq how t))
  6.   (cond((not how)(setq li1(cons an li1)))
  7.        ((and how a)
  8.          (cond((=(car an)40)(setq an(cons 41(cdr an))))
  9.               ((=(car an)41)(setq an(cons 40(cdr an))))
  10.               ((=(car an)42)(setq an(cons 42(- 0(cdr an)))))
  11.               (t an)
  12.           )
  13.          (setq li2(cons an li2)))
  14.        ((and how(not a))(setq li3(cons an li3)))
  15.    )
  16.   )
  17. (entmod(append
  18.          (reverse li1)
  19.          (append(cdddr li2)(list(car li2)(cadr li2)(caddr li2)))
  20.          (reverse li3)
  21.         )
  22. )
  23. )

评分

参与人数 1金钱 +10 收起 理由
mandala + 10 非常感谢

查看全部评分

 楼主| 发表于 2011-1-7 18:53:22 | 显示全部楼层
谢谢版主!我研究一下先。

评分

参与人数 1金钱 +20 收起 理由
jackynine + 20

查看全部评分

 楼主| 发表于 2011-1-7 22:18:57 | 显示全部楼层
回复 Gu_xl 的帖子

研究了一下,很佩服。按照这个思路我又添了一个 if 语句,可以把单独的一条直线也反向了。但是能不能把单独的一段圆弧也反向呢?我写不出来了……
发表于 2011-1-7 22:27:47 | 显示全部楼层
回复 mandala 的帖子

不可以!圆弧始终是逆时钟方向的!
 楼主| 发表于 2011-1-7 23:01:32 | 显示全部楼层
唉!不过还是谢谢版主,呵呵。

评分

参与人数 1金钱 +20 收起 理由
jackynine + 20

查看全部评分

发表于 2011-1-8 09:25:45 | 显示全部楼层
mandala 发表于 2011-1-7 22:18
回复 Gu_xl 的帖子

研究了一下,很佩服。按照这个思路我又添了一个 if 语句,可以把单独的一条直线也反向了 ...

试一下将圆弧转成复线,然后用2楼的程序反向。

评分

参与人数 1金钱 +10 收起 理由
mandala + 10 非常感谢!

查看全部评分

 楼主| 发表于 2011-1-8 12:28:41 | 显示全部楼层
ZZXXQQ 发表于 2011-1-8 09:25
试一下将圆弧转成复线,然后用2楼的程序反向。

嗯,俺昨天晚上睡床上时想到了。现在的结果如下……连用了4个if是不是有点傻,辛苦各位老大看看能否优化一下:
  1. ;;统统反向:

  2. (defun C:fx(/ ENT ENT1 )
  3.   (setq ENT (entget (setq ENT1 (car (entsel)))))
  4.   (if (= (cdr (assoc 0 ENT)) "LWPOLYLINE") (reverseLwp ent1))
  5.   (if (= (cdr (assoc 0 ENT)) "LINE")
  6.     (progn
  7.      (command "_.LINE" "_NON" (vlax-curve-getendPoint ent1) "_NON"  (vlax-curve-getStartPoint ent1) "")
  8.      (entdel ENT1)
  9.     )
  10.   )
  11.   (if (= (cdr (assoc 0 ENT)) "SPLINE")(command "SPLINEDIT" ENT1 "E" ""))
  12.   (if (= (cdr (assoc 0 ENT)) "ARC")
  13.     (progn
  14.       (command "pedit" ent1 "y" "")
  15.       (setq ent1(entlast))
  16.       (reverseLwp ent1)
  17.     )
  18.   )
  19.   (princ)
  20. )
  21. ;;;多段线顶点逆序
  22. (defun reverseLwp (ent1 / a en how li1 li2 li3)
  23. (setq en(entget ent1 '("*")) how nil)
  24. (foreach an en
  25.   (if(setq a(member(car an)'(10 40 41 42)))(setq how t))
  26.   (cond((not how)(setq li1(cons an li1)))
  27.        ((and how a)
  28.          (cond((=(car an)40)(setq an(cons 41(cdr an))))
  29.               ((=(car an)41)(setq an(cons 40(cdr an))))
  30.               ((=(car an)42)(setq an(cons 42(- 0(cdr an)))))
  31.               (t an)
  32.           )
  33.          (setq li2(cons an li2)))
  34.        ((and how(not a))(setq li3(cons an li3)))
  35.    )
  36.   )
  37. (entmod(append
  38.          (reverse li1)
  39.          (append(cdddr li2)(list(car li2)(cadr li2)(caddr li2)))
  40.          (reverse li3)
  41.         )
  42. )
  43. )



评分

参与人数 1金钱 +20 收起 理由
jackynine + 20

查看全部评分

 楼主| 发表于 2011-1-8 12:41:30 | 显示全部楼层
至于直线的反转……我本来是打算通过(entmake (append ……))来改动10和11段这两个点的坐标来实现的,如下:
  1. (setq Q (reverse (member (assoc 100 (reverse ENT)) (reverse ENT))))
  2. (setq Q2 (member (assoc 10 ENT) ENT))
  3. (entmake (append Q
  4.      (list(cons 10 (cdr(assoc 11 q2))))
  5.      (list(cons 11 (cdr(assoc 10 q2))))
  6.      (list (last Q2))
  7.     ))
  8. (entdel ENT1)

后来想到直接倒过来连么好了,就用了(command "_.LINE" "_NON" (vlax-curve-getendPoint ent1) "_NON"  (vlax-curve-getStartPoint ent1) ""),请问这样会不会有问题?我运行了一下似乎是一样的。

评分

参与人数 1金钱 +10 收起 理由
jackynine + 10

查看全部评分

发表于 2011-1-8 12:54:45 | 显示全部楼层
那就用cond吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-25 10:09 , Processed in 0.191639 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表