免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 2550|回复: 6
收起左侧

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

[复制链接]

4

主题

239

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
92
发表于 2018-11-26 17:39 | 显示全部楼层 |阅读模式
本帖最后由 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

主题

516

铜板

1

好友

技术员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

5988

铜板

2

好友

至尊VIP

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
468
发表于 2019-1-9 20:10 | 显示全部楼层
留言急急急
回复 支持 反对

使用道具 举报

3

主题

5万

铜板

6

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3889

精华勋章冰雪节勋章童话节勋章12周年纪念勋章

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

使用道具 举报

0

主题

1438

铜板

0

好友

助理工程师

Rank: 5Rank: 5

积分
312
发表于 2022-7-22 08:39 | 显示全部楼层
多谢分享!!!!
回复

使用道具 举报

0

主题

8799

铜板

8

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2200
发表于 2023-9-25 10:44 | 显示全部楼层
过来学习学习,查漏补缺一下
回复 支持 反对

使用道具 举报

2

主题

2899

铜板

1

好友

至尊VIP

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
578
发表于 2023-9-25 15:09 | 显示全部楼层
过来学习学习,查漏补缺一下
回复 支持 反对

使用道具 举报

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

本版积分规则

在线客服
快速回复 返回顶部 返回列表