明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1847|回复: 3

急!寻找程序,删除同心圆的lisp程序。

[复制链接]
发表于 2009-7-8 22:40:00 | 显示全部楼层 |阅读模式

两个圆(或三个等)因某种原因重合在一起,半径相同,圆心相同,如何删去一个?

有没有这方面的程序,我有大量的图需要处理,每个图有4000-5000个圆,少量是重复的,所以无法正常编号和统计数量。

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2009-7-9 00:36:00 | 显示全部楼层

算了自力更生

(defun c:da ()
  (setvar "cmdecho" 0)
  (setq ss (ssget '((0 . "circle"))))
  (setq n 0)
  (while (< n (sslength ss))
       (setq ssa (cdr (assoc 10 (entget (ssname ss n)))))
       (setq m (+ n 1))
       (while (< m (sslength ss))
          (setq ssb (cdr (assoc 10 (entget (ssname ss m)))))
          (setq de (cdr (assoc -1 (entget (ssname ss m)))))
          (if (and (= (car ssa) (car ssb))(= (cadr ssa) (cadr ssb)))
             (if de (command "ERASE" de "")))
           (setq m (+ 1 m))
      )(setq n (+ 1 n))
  )(princ)
)

记得好像不能依赖command的返回来做一件事情,

因为command执行起来比较慢,而lisp的循环执行的快时会不会有的圆被跳过?

应该不会有这种事情发生吧。

另外这个算法也比较烂,如果有1000个圆,

循环的次数将是1000的阶乘,对于5000多个圆来说岂不是天文数字?

应该有更好的解决办法,希望高手的关注。

发表于 2009-7-9 08:38:00 | 显示全部楼层
:)

可以先试试 express tool 里面 的overkill 命令。

若一定要算法稍快的话,是否可以这样,假设圆位置是随机分布的话(要是分布太集中的话,此法就不一定很好)

得出圆心 xmax xmin ymax ymin,x,y向分别分为按照(xmax-xmin)/n和(ymax-ymin)/n的方格子[比如n=sqrt(总圆数))个区格]

然后,将圆列表按照圆心位置先分配到这n*n个子表中去。再对子表判断分治处理。说不定会好些。
发表于 2011-3-30 21:42:37 | 显示全部楼层
好东西,又学了一点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-11 06:36 , Processed in 0.182222 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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