找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1456|回复: 13

[分享]:清除重复的圆

[复制链接]
发表于 2004-12-31 23:44:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
画图过程中,难免有重复的图元,为此我编写了几个程序!

清除重复的圆
(defun C:DC (/ m os p1 p2 P n pl e ena eaa paa Rpp A M pl Q nu nb)
             (setq m:err *error* *error* *merr*)
             (setvar "cmdecho" 0)
             (command "UNDO" "G")
             (command "ucs" "w")
             (setq os (getvar "osmode"))
             (setvar "osmode" 0)  
             (prompt "选择图形")
             (setq p1 (getpoint "\n请输入第一角点:"))
             (if (/= p1 nil)(progn
             (initget 32)
             (setq p2 (getcorner p1 "\n请输入另一角点:"))
             (if (/= p2 nil)(progn
             (princ "\n请稍候......")

      **** (setq P (ssget "C" p1 p2 '((0 . "CIRCLE"))  ))
             (if (/= p nil)(progn
             (setq n (sslength p) pl 0)
             (while (< pl n)
             (setq e (entget (ssname p pl)))
             (setq ena (cdr (assoc '-1 e)))
             (setq eaa (assoc '0 e))
             (setq paa (assoc '10 e))
             (setq Rpp (assoc '40 e))
             (setq A (ssget "C" p1 p2 (list eaa paa Rpp) ))
             (setq M (sslength A))
             (if (>= M 2) (entdel ena ) )
             (setq pl (1+ pl))
             )
             (setq Q (ssget "C" p1 p2 '((0 . "CIRCLE"))  ))
             (setq nu (sslength Q))
             (setq nb (- n nu))
             (princ "\n共删除<圆> ")(princ nb)(princ " 个")
             ) )  
         
             ))  ))   
             (setvar "osmode" os)
             (command "ucs" "p")
             (command "UNDO" "E")  
             (princ)  )  ****
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 24个

财富等级: 恭喜发财

发表于 2005-1-1 00:32:59 | 显示全部楼层
感谢分享,先顶一下
提点意见,你上面的程序没有考虑圆与弧重叠,或圆与圆环重叠,或弧与圆环重叠的情况,你有兴趣的话建议增加,
若是再考虑到块的因素,以及块内镶套块的情况,用现在的算法就不太合适了。
另外,请问有没有消除多义线与多义线,直线与直线,多义线与直线重复的程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3720个

财富等级: 富可敌国

发表于 2005-1-1 22:58:14 | 显示全部楼层
正需要这个程序,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-2 15:07:45 | 显示全部楼层
最初由 fools 发布
[B]感谢分享,先顶一下
提点意见,你上面的程序没有考虑圆与弧重叠,或圆与圆环重叠,或弧与圆环重叠的情况,你有兴趣的话建议增加,
若是再考虑到块的因素,以及块内镶套块的情况,用现在的算法就不太合适了。
另外... [/B]


我也在找"多义线与多义线,直线与直线,多义线与直线重复的程序",不知哪位老兄有?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-3 13:02:20 | 显示全部楼层
正想要这种LSP程序!还有其他的重覆图元消除的LSP程序吗?非常期待!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-4 09:25:05 | 显示全部楼层
还是用晓东工具箱里的[消除重线]命令吧。或者用晓东API里函数就可以了。

xdrx_curve_remove_dup

功    能:消除重线(line,arc,polyline)

调用格式:(xdrx_curve_remove_dup <选择集> ["图层"][超短线长度])

返 回 值:表 (总曲线数 剩余曲线数 超短线数)

说    明:参数: ["图层"]--字符串,剩余曲线存放的层

                 [超短线] -- 实数或整数,小于该值的都删除
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-9 17:12:52 | 显示全部楼层
非常感谢!!请问版主还有没有其他图元的消重元程序?非常期待.......
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-9 17:17:19 | 显示全部楼层
消重线的程序LISP比较难做。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-1-9 17:51:08 | 显示全部楼层
2006裏的OVERKILL不是可以麽?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-1-9 18:11:19 | 显示全部楼层
消重的算法中关键要排序,选择合适的特征作为索引,比如园和弧,取圆心和半径作为特征索引排序,将选择集根据特征索引构造表。有了表再计算每个表内需要保留的对象,如果表内有园,只保留一个园其他的就都可以删除;如果表内都是圆弧,取出最小角和最大角构造一个ARC,其他的都删除。这样才是消重(合并)。
对于Pline可以先行分解为简单的 Line  arc ,然后进行消重,但是Pline的实体信息要单独构造一个表,以便于最后恢复 Pline。

当然如果使用AutoCAD 2006 或者 Map 3D 或者 Civil 3D 编程就省事很多或者不必编程。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-9 22:42:24 | 显示全部楼层
2006里的join可以消除重线
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-17 10:29:28 | 显示全部楼层
我依照楼主的程序照葫芦搞了一个消重直线的程序,运行正常。但速度比较慢。
应该是算法的问题,楼主和斑竹能否依上面的程序搞一个较好的算法吗?(LISP的)
非常感谢。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-18 17:06:04 | 显示全部楼层
我用晓东工具箱的消重线功能无法消除探索者的重实体。如:桩
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-20 09:48:29 | 显示全部楼层
谢谢,指导。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-29 02:56 , Processed in 0.216170 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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