明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2730|回复: 7

如何实现多段线换向?

[复制链接]
发表于 2004-5-28 09:19:00 | 显示全部楼层 |阅读模式
龙哥、飞哥:请问如何将A线段的节点坐标读取,并换向排列,重新生成B线段,实现多段线换向。

本帖子中包含更多资源

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

x
发表于 2004-5-28 12:11:00 | 显示全部楼层
  1. (defun GETPL (ED / ENTS PTS PTS2 EDS D)
  2.    (setq PTS nil PTS2 nil)
  3.    (setq ENTS (entget ED))
  4.    (setq EDS ENTS)
  5.    (while (setq ENTS (member (assoc 10 ENTS) ENTS))
  6.        (setq PTS (append PTS (list (car ENTS) (cadr ENTS) (caddr ENTS) (cadddr ENTS))))
  7.        (setq ENTS (CDR ENTS))
  8.    )
  9.    (setq PTS (reverse PTS))
  10.    (repeat 3 (setq PTS (append (cdr PTS) (list (car PTS)))))
  11.    (foreach item PTS
  12.        (if (= (car item) 42)           
  13.            (setq item (cons 42 (- (cdr item))))
  14.        )
  15.        (setq PTS2 (append PTS2 (list item)))
  16.    )
  17.    (setq PTS PTS2)
  18.    (while (setq item (assoc 10 EDS))
  19.        (setq EDS (vl-remove item EDS))
  20.        (setq EDS (vl-remove (assoc 40 EDS) EDS))
  21.        (setq EDS (vl-remove (assoc 41 EDS) EDS))
  22.        (setq EDS (vl-remove (assoc 42 EDS) EDS))
  23.    )
  24.    (setq D (car (setq EDS (reverse EDS))))
  25.    (setq EDS (append (reverse (cdr EDS)) PTS (list D)))
  26.    (entmod EDS)
  27. )
发表于 2009-8-13 07:51:00 | 显示全部楼层
还是不清楚
发表于 2011-10-4 18:30:24 | 显示全部楼层
2楼的无命令,加载后怎么运行?
发表于 2011-10-9 18:27:27 | 显示全部楼层
如果是多段线(POLYLINE & LWPOLYLINE),从CAD2010开始(也可能09也有,09我没用过),PEDIT命令有换向的选项了,不过对于LWPOLYLINE,好像线宽没换过来,如果你用非固定线宽的LWPOLYLINE来表示一个图形,换向以后就不是原来的样子了。
发表于 2011-10-9 19:49:07 | 显示全部楼层
这个部题也一直困扰着我,对于有凸度的多义线,转向后凸度改了,这样就和原来的线不一样了
最后没办法只能在线的一端增加一条很短的多义线,按自已想要的顺序画,然后把原来的长线加入这个短线解决
发表于 2011-10-9 20:28:12 | 显示全部楼层
logoin 发表于 2011-10-9 19:49
这个部题也一直困扰着我,对于有凸度的多义线,转向后凸度改了,这样就和原来的线不一样了
最后没办法只能 ...

pedit的换向会考虑凸度的,但是不考虑起终点线宽。
发表于 2011-10-10 15:20:30 | 显示全部楼层
(defun GETPL (ED / ENTS PTS PTS2 EDS D) ;(getpl (car (entsel)))多义线反向,优化了一下,考虑了终点线宽
   (setq PTS nil PTS2 nil)
   (setq ENTS (entget ED))
   (setq EDS ENTS)
   (while (setq ENTS (member (assoc 10 ENTS) ENTS))
       (setq PTS (append PTS (list (car ENTS) (cadddr ENTS) (cadr ENTS) (caddr ENTS))))
       (setq ENTS (CDR ENTS))
   )
   (setq PTS (reverse PTS))
   (repeat 3 (setq PTS (append (cdr PTS) (list (car PTS)))))
   (foreach item PTS
       (cond ((= (car item) 42)           
           (setq item (cons 42 (- (cdr item)))))
             ((= (car item) 40)           
           (setq item (cons 41 (cdr item))))
             ((= (car item) 41)           
           (setq item (cons 40 (cdr item))))
       )
       (setq PTS2 (append PTS2 (list item)))
   )
   (setq PTS PTS2)
   (while (setq item (assoc 10 EDS))
       (setq EDS (vl-remove item EDS))
       (setq EDS (vl-remove (assoc 40 EDS) EDS))
       (setq EDS (vl-remove (assoc 41 EDS) EDS))
       (setq EDS (vl-remove (assoc 42 EDS) EDS))
   )
   (setq D (car (setq EDS (reverse EDS))))
   (setq EDS (append (reverse (cdr EDS)) PTS (list D)))
   (entmod EDS)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-25 04:57 , Processed in 0.199832 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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