地信网论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

免费视频|新人指南|答学员问|投诉删帖

禁止上传涉密资料|赚取铜板|附件下载

查看: 202|回复: 3
收起左侧

[二次开发] 多线段反向lsp

[复制链接]

3

主题

180

铜板

0

好友

技术员

Rank: 3Rank: 3

积分
78
发表于 2018-11-26 17:39 | 显示全部楼层 |阅读模式
“家乡”主题作品征集大赛

马上注册地信网,享受更多功能,学习更多知识,成就人生精彩!

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

x
本帖最后由 wzg 于 2018-11-29 13:19 编辑
  1. (defun c:plfx ( / en enl p1 p2 cp r reverseLwp)
  2. ;;;多段线顶点逆序
  3. ;(reverseLwp (car(entsel "\n选择线...")))
  4. (defun reverseLwp (e / a en how li1 li2 li3)
  5. (setq en(entget e '("*")) how nil)
  6. (foreach an en
  7.   (if(setq a(member(car an)'(10 40 41 42)))(setq how t))
  8.   (cond((not how)(setq li1(cons an li1)))
  9.        ((and how a)
  10.          (cond((=(car an)40)(setq an(cons 41(cdr an))))
  11.               ((=(car an)41)(setq an(cons 40(cdr an))))
  12.               ((=(car an)42)(setq an(cons 42(- 0(cdr an)))))
  13.               (t an)
  14.           )
  15.          (setq li2(cons an li2)))
  16.        ((and how(not a))(setq li3(cons an li3)))
  17.    )
  18.   )
  19. (entmod(append
  20.          (reverse li1)
  21.          (append(cdddr li2)(list(car li2)(cadr li2)(caddr li2)))
  22.          (reverse li3)
  23.         )
  24. )
  25. )
  26. ;;---------------------------
  27. (initget "  ")
  28. (setq en(entsel "\n点击要反向的线..."))
  29. (cond
  30.         ((= en "")nil)
  31.         ((and(setq en (car en))(setq enl(entget en))
  32.                 (or(wcmatch(cdr(assoc 0 enl))"*LINE")
  33.                         (wcmatch(cdr(assoc 0 enl))"CIRCLE")
  34.                         (wcmatch(cdr(assoc 0 enl)) "ARC")
  35.                 )
  36.         )        
  37.         (cond
  38.                 ((and(wcmatch(cdr(assoc 0 enl))"POLYLINE")
  39.                 (= (cdr(assoc 70 enl)) 4)
  40.                 (or (= (cdr(assoc 75 enl)) 5) (= (cdr(assoc 75 enl)) 6))
  41.                 )
  42.                 (command "pedit" en "d" "")
  43.                 (reverseLwp en)
  44.                 (command "pedit" en "s" "")
  45.                 (princ "\n 多线段成功反向!")
  46.                 (c:plfx)
  47.                 )
  48.                 ((wcmatch(cdr(assoc 0 enl))"LWPOLYLINE")
  49.                         (reverseLwp en)
  50.                         (princ "\n 多线段成功反向!")
  51.                         (c:plfx)
  52.                 )
  53.                 ((= (cdr (assoc 0 enl)) "SPLINE")
  54.                         (command "SPLINEDIT" en "E" "")
  55.                         (princ "\n 样条曲线成功反向!")
  56.                         (c:plfx)
  57.                 )
  58.                 ((= (cdr (assoc 0 enl)) "ARC")
  59.                         (command "pedit" en "y" "")
  60.                         (reverseLwp en)
  61.                         (princ "\n 圆弧成功反向并转为多线段!")
  62.                         (c:plfx)
  63.                 )
  64.                 ((= (cdr (assoc 0 enl)) "LINE")
  65.                         (setq p1 (cdr (assoc 11 enl))
  66.                                 p2 (cdr (assoc 10 enl)))
  67.                         (setq enl (subst (cons 10 p1) (assoc 10 enl) enl)
  68.                                enl (subst (cons 11 p2) (assoc 11 enl) enl))
  69.                         (entmod enl)
  70.                         (princ "\n 直线成功反向!")
  71.                         (c:plfx)
  72.                 )
  73.                 ((= (cdr (assoc 0 enl)) "CIRCLE")
  74.         (setq cp (cdr (assoc 10 enl)) r (cdr (assoc 40 enl)))
  75.         (entmake
  76.           (setq lst (list
  77.             '(0 . "LWPOLYLINE")
  78.             '(100 . "AcDbEntity")
  79.             '(67 . 0)
  80.             '(410 . "Model")
  81.             '(100 . "AcDbPolyline")
  82.             '(90 . 2)
  83.             '(70 . 129)
  84.             (cons 10 (polar cp 0 r))
  85.             '(40 . 0)
  86.             '(41 . 0)
  87.             '(42 . -1)
  88.             (cons 10 (polar cp pi r))
  89.             '(40 . 0)
  90.             '(41 . 0)
  91.             '(42 . -1)
  92.           );list
  93.         );setq
  94.         );entmake
  95.         (command "_matchprop" en (entlast) "")
  96.         (entdel en)
  97.         (princ "\n 圆成功反向!")
  98.         (c:plfx)
  99.         )
  100.     ))
  101.     (t (princ "\n 无选中或选中对象无法反向!")(c:plfx))        
  102. )
  103. (princ)
  104. )
复制代码
另外几个
http://bbs.3s001.com/thread-2832 ... p;page=1#pid6532063
http://bbs.3s001.com/thread-283303-1-1.html


0

主题

517

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
76
发表于 2018-11-29 09:15 | 显示全部楼层
真的是太厉害,太6了!
回复 支持 反对

使用道具 举报

0

主题

1745

铜板

1

好友

助理工程师

Rank: 5Rank: 5

积分
309
发表于 2019-1-9 20:10 | 显示全部楼层
地信网论坛版规和新人指南
留言急急急
回复 支持 反对

使用道具 举报

0

主题

2089

铜板

1

好友

助理工程师

Rank: 5Rank: 5

积分
249
发表于 2019-1-10 10:55 | 显示全部楼层
谢谢楼主分享代码。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

土流网招商加盟广告
在线客服

新人指南|地信论坛 ( 湘ICP备14003170号-5 湖南土流信息有限公司 版权所有 关于地信 联系方式 邮箱登陆

湘公网安备 43010302000511号

Powered by Discuz! X3.2

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