乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 132|回复: 9

如何删除重复的线段

[复制链接]

28

主题

46

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
158
发表于 2005-1-18 10:50:00 | 显示全部楼层 |阅读模式
图形中有很多重复的线段,我想删除多余的,只留下一根就可以了,如何编这个程序,请高手帮忙
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2005-1-18 13:43:00 | 显示全部楼层
我有两个差不多的程序,但是Lisp语言编的,要不要?
回复

使用道具 举报

55

主题

282

帖子

5

银币

中流砥柱

Rank: 25

铜币
502
发表于 2005-1-18 14:31:00 | 显示全部楼层
vba也可以,通过遍历模型空间,对每一根直线求包围矩形,再通过选择集遍历包围矩形里的直线,如果有某根直线跟形成包围矩形的直线重合,则删除,这样一来,模型空间里的直线将会越来越少,速度应该还可以吧!
但我没编过,因为我用的是天正建筑,天正里有这个功能!
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2005-1-18 19:57:00 | 显示全部楼层
楼上的思路不错,学了一招。
但是有这么个问题,对于14直线和23直线,当然是删除23;若是13直线和24直线,就不是简单删除某根直线的问题了,而是将其中一根直线改成14,再删除另一根直线。
回复

使用道具 举报

55

主题

282

帖子

5

银币

中流砥柱

Rank: 25

铜币
502
发表于 2005-1-19 11:34:00 | 显示全部楼层
什么意思啊?请说明一点!谢谢!
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2005-1-19 20:04:00 | 显示全部楼层
就是说,还要先判断在同一直线位置上的所有线段的最外边端点。
回复

使用道具 举报

55

主题

282

帖子

5

银币

中流砥柱

Rank: 25

铜币
502
发表于 2005-1-19 20:22:00 | 显示全部楼层
呵呵!看来你有点误解我的意思啦,我的方法是删除完全重合的直线中较短的直线,而部分重合的直线是不删除的,因为对于部分重合的直线,其中任何一根的包围矩形都不能完全包含另一根直线,所以不被删除!
如果想把部分重合的多根直线变为一根直线,可以在原程序上再加修改!
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2005-1-19 23:25:00 | 显示全部楼层
也不算误解吧。大家的出发点不同。我的意思是说对于部分重合的线段也应该删除,这样同一直线上只有一根线段,这样才最精简。欢迎常讨论。
回复

使用道具 举报

12

主题

135

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
183
发表于 2005-1-20 08:21:00 | 显示全部楼层
acad的扩展程序Acad Express Tools中有一个命令叫“OverKill”,和你说的功能一样,好像也可以处理线段搭接的问题。
回复

使用道具 举报

55

主题

282

帖子

5

银币

中流砥柱

Rank: 25

铜币
502
发表于 2005-1-20 12:08:00 | 显示全部楼层

那我就改一下我的方法吧,改了之后应该可以满足你的要求,而且判断重线的速度应该比原来更快,欢迎讨论! 通过遍历模型空间,对每一根直线求包围矩形,并把这根直线的X坐标最小点和X坐标最大点存起来(对于竖直的直线是指Y坐标最小点和Y坐标最大点),以下就简称为直线最小点Pmin和最大点Pmax。再通过选择集遍历包围矩形里的直线(包含在矩形内或跟矩形相交的直线都选进来),如果有某根直线跟形成包围矩形的直线重合(通过数学方法可以简单的判断直线重合与否),就求它的最小点PTmin和最大点PTmax,if         PTmin&ltmin         then         Pmin=PTmin,if         PTmax&gtmax        then        Pmax=PTmax        ,然后把这根直线删除,最后,如果Pmin或Pmax跟初值相比发生了变化,就把形成包围矩形的直线删除,连结直线最小点Pmin和最大点Pmax, 形成新的直线,这样一来,同一直线位置上就只有一根直线了,而模型空间里的直线将会越来越少,速度还可以吧!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-16 19:45 , Processed in 2.826271 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表