明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1120|回复: 7

[已解答] 怎么用lisp实现将不闭合的多段线的起始点和终止点互换,并且要维持多断线的形状不变

[复制链接]
发表于 2016-5-10 23:48 | 显示全部楼层 |阅读模式
各位大神,如题,怎么用lisp实现将不闭合的多段线的起始点和终止点互换,并且要维持多断线的形状不变呢?

如图,多段线的形状不变,只是起始点和终止点互换。

本帖子中包含更多资源

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

x
发表于 2016-5-11 01:44 | 显示全部楼层
自贡黄明儒 黄长老的
  1. ;;164.32 [功能] 多段线反向(起点反成终点) byzml84
  2. ;;(HH:LWPOLYLINEFX (car (entsel)))
  3. (defun HH:LWPOLYLINEFX (EN / A B C D ENT LST LST1 TMP)
  4.   (setq ENT (entget EN))
  5.   (setq tmp ent)
  6.   (while (setq tmp (member (assoc 10 tmp) tmp))
  7.     (setq a   (assoc 10 tmp)
  8.           b   (cons 40 (cdr (assoc 41 tmp)))
  9.           c   (cons 41 (cdr (assoc 40 tmp)))
  10.           d   (cons 42 (- (cdr (assoc 42 tmp))))
  11.           LST (append (list b c d a) LST)
  12.     )
  13.     (setq tmp (cddddr tmp))
  14.   )
  15.   (repeat 3 (setq LST (append (cdr lst) (list (car lst)))))
  16.   (setq lst1 (reverse (cdr (member (assoc 10 ent) (reverse ent)))))
  17.   (entmod (append lst1 lst '((210 0 0 1))))
  18. )
发表于 2016-5-11 08:10 | 显示全部楼层
支持一下支持
 楼主| 发表于 2016-5-11 08:35 | 显示全部楼层
xiaolong1487 发表于 2016-5-11 01:44
自贡黄明儒 黄长老的

用了一下,好给力!就是有一点点小问题,最好在while语句最好加一条(setq LST(list))语句,
发表于 2016-5-11 09:21 | 显示全部楼层
 楼主| 发表于 2016-5-11 13:44 | 显示全部楼层
ll_j 发表于 2016-5-11 09:21
http://bbs.mjtd.com/thread-111281-1-1.html

受教了
发表于 2016-5-14 18:19 | 显示全部楼层
  1. (defun c:tes ( / #g1 &h1 &k1 &kw1 &n1 &n2 &ob1 &p1 &ss1 &ss2 &ss3 &ss4 aw ew x z40 z41)
  2. (setvar "cmdecho" 0)
  3. (setvar "blipmode" 0)
  4. (if (null vlax-dump-object) (vl-load-com) )
  5. (setq &ss1 '(0 100 67 62 8 90 70 43))
  6. (princ "\n请选择多段线")
  7. (if (setq &kw1 (ssget '((0 . "LWPOLYLINE"))))
  8.   (progn
  9.    (while (setq &k1 (ssname &kw1 0))
  10.     (setq &kw1 (ssdel &k1 &kw1) &ob1 (vlax-ename->vla-object &k1))
  11.     (setq #g1 (entget &k1) &ss2 (vl-remove-if-not '(lambda (X) (member (car x) &ss1)) #g1))
  12.     (setq &n1 (vlax-curve-getEndParam &ob1) &n2 0.0 &ss3 '())
  13.     (if (= (cdr (assoc 70 #g1)) 0);如果不封闭
  14.      (progn
  15.       (setq &h1 (cons 42 (* -1.0 (vla-getBulge &ob1 &n1))));弧值
  16.       (vla-getwidth &ob1 &n1 'aw 'ew)
  17.       (setq z41 (cons 41 aw) z40 (cons 40 ew))
  18.       (setq &p1 (cons 10 (vlax-curve-getPointAtParam &ob1 &n2)))
  19.       (setq &ss3 (list &p1 z40 z41 &h1))
  20.      )
  21.     )
  22.     (while (> &n1 &n2)
  23.      (setq &h1 (cons 42 (* -1.0 (vla-getBulge &ob1 &n2))));弧值
  24.      (vla-getwidth &ob1 &n2 'aw 'ew)
  25.      (setq z41 (cons 41 aw) z40 (cons 40 ew))
  26.      (setq &n2 (1+ &n2) &p1 (cons 10 (vlax-curve-getPointAtParam &ob1 &n2)))
  27.      (setq &ss4 (list &p1 z40 z41 &h1) &ss3 (append &ss4 &ss3))
  28.     );
  29.     (setq &ss3 (append &ss2 &ss3))
  30.     (vla-delete &ob1)
  31.     (entmake &ss3)
  32.    );while
  33.   )
  34. )
  35. (princ)
  36. )
发表于 2016-5-14 18:25 来自手机 | 显示全部楼层
command reverse

点评

原来已经有这个功能,学习了。  发表于 2016-5-14 18:49
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 17:47 , Processed in 0.366580 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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