明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3777|回复: 6

不改变属性和起点去除多线段冗余点(将假闭合改为闭合)

[复制链接]
发表于 2013-4-24 11:35 | 显示全部楼层 |阅读模式
(defun Plinexy(e / p a b n ob q et d d1 en et) ;;多线段节点坐标(滤掉了多余点,未处理假闭合)
  (setq a(entget e)ob(vlax-ename->vla-object e)et(cdr(assoc 0 a))n 0 p nil d nil)
  (cond((="LWPOLYLINE"et)
        (repeat (length a)  (setq b (nth n a) n (+ n 1))
          (if (= 10 (car b))(progn
                              (setq q(list (cadr b) (caddr b))d1(vlax-curve-getDistAtPoint ob q))
                              (if p (if (not(member d1 d)) (setq p (append p (list q))d (append d (list d1))))
                                (setq p (list q))))
            )))
       ((="POLYLINE"et)
        (SETQ EN (ENTGET (SETQ E (ENTNEXT E))))
        (WHILE (/= (CDR (ASSOC 0 EN)) "SEQEND")
          (SETQ q (CDR (ASSOC 10 EN))d1(vlax-curve-getDistAtPoint ob q)q(reverse(cdr(reverse q))))
          (if p(if (not(member d1 d)) (setq p (append p (list q))d (append d (list d1))))
            (setq p (list q)))
          (SETQ EN (ENTGET (SETQ E (ENTNEXT E)))))
        (setq p(reverse p))
        )
       )
  P
  )

(defun RYD(/ m n e e1 f a);;删除冗余点
  (VL-LOAD-COM)
  (setq s(ssget "X"'((0 . "LWPOLYLINE"))))
  (if s(progn
         (setq m(sslength s)n 0)
         (while(< n m)
           (setq e1(ssname s n)n(1+ n)p(Plinexy e1)ob(vlax-ename->vla-object e1)e(entget e1'("*"))F 0)
           (if (or(=(cdr(assoc 70 e))129)(=(cdr(assoc 70 e))1))(setq p(append p(list(car p)))))
           (if (=(vlax-curve-getdistatpoint ob(vlax-curve-getendpoint ob))0)
             (setq p(reverse(cdr(reverse p)))F 1)
           )
           (setq a(list(cons 0 "LWPOLYLINE")(cons 8(cdr(assoc 8 e)))(cons 6(if(assoc 6 e)(cdr(assoc 6 e))""))
                       (cons 62(if(assoc 62 e)(cdr(assoc 62 e))256))(cons 370(if(assoc 370 e)(cdr(assoc 370 e))0))
                       (cons 48(if(assoc 48 e)(cdr(assoc 48 e))1))(cons 100 "AcDbEntity")(cons 100 "AcDbPolyline")
                       (cons 90(-(length P)F))(cons 70 (+ 128 F))(cons 43(if(assoc 43 e)(cdr(assoc 43 e))0))
                       (cons 38(caddr(vlax-curve-getstartpoint ob)))(cons 39(if(assoc 39 e)(cdr(assoc 39 e))0)))
                 a(vl-remove (cons 6 "")a))
           (foreach e P(setq a(append a(list(append(list 10) e)))))
           (entmake(if(assoc -3 e)(append a(list(assoc -3 e)))a))
           (entdel e1)
           )
         )
    )
  )



发表于 2014-4-3 14:55 | 显示全部楼层
是删除多段线重复点吗
 楼主| 发表于 2014-4-4 00:15 | 显示全部楼层
是的,不过可以不用entdel原线后再ENTMAKE,可以直接ENTMOD的
发表于 2014-4-15 22:13 | 显示全部楼层
今天在研究这个关于多余点非重复点,来学习学习。
发表于 2014-7-17 17:23 | 显示全部楼层
是真的好复杂啊...
发表于 2016-7-11 09:45 | 显示全部楼层
怎么用不了啊,还是我不会用啊
发表于 2022-3-10 10:40 | 显示全部楼层
你好楼主命令是啥呀这个程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 19:14 , Processed in 0.676469 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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