如何删除重复的线段
图形中有很多重复的线段,我想删除多余的,只留下一根就可以了,如何编这个程序,请高手帮忙 我有两个差不多的程序,但是Lisp语言编的,要不要? vba也可以,通过遍历模型空间,对每一根直线求包围矩形,再通过选择集遍历包围矩形里的直线,如果有某根直线跟形成包围矩形的直线重合,则删除,这样一来,模型空间里的直线将会越来越少,速度应该还可以吧!但我没编过,因为我用的是天正建筑,天正里有这个功能! 楼上的思路不错,学了一招。
但是有这么个问题,对于14直线和23直线,当然是删除23;若是13直线和24直线,就不是简单删除某根直线的问题了,而是将其中一根直线改成14,再删除另一根直线。 什么意思啊?请说明一点!谢谢! 就是说,还要先判断在同一直线位置上的所有线段的最外边端点。 呵呵!看来你有点误解我的意思啦,我的方法是删除完全重合的直线中较短的直线,而部分重合的直线是不删除的,因为对于部分重合的直线,其中任何一根的包围矩形都不能完全包含另一根直线,所以不被删除!
如果想把部分重合的多根直线变为一根直线,可以在原程序上再加修改! 也不算误解吧。大家的出发点不同。我的意思是说对于部分重合的线段也应该删除,这样同一直线上只有一根线段,这样才最精简。欢迎常讨论。 acad的扩展程序Acad Express Tools中有一个命令叫“OverKill”,和你说的功能一样,好像也可以处理线段搭接的问题。 本帖最后由 作者 于 2005-1-20 14:43:56 编辑
那我就改一下我的方法吧,改了之后应该可以满足你的要求,而且判断重线的速度应该比原来更快,欢迎讨论!
通过遍历模型空间,对每一根直线求包围矩形,并把这根直线的X坐标最小点和X坐标最大点存起来(对于竖直的直线是指Y坐标最小点和Y坐标最大点),以下就简称为直线最小点Pmin和最大点Pmax。再通过选择集遍历包围矩形里的直线(包含在矩形内或跟矩形相交的直线都选进来),如果有某根直线跟形成包围矩形的直线重合(通过数学方法可以简单的判断直线重合与否),就求它的最小点PTmin和最大点PTmax,if PTmin<Pmin then Pmin=PTmin,if PTmax>Pmax then Pmax=PTmax ,然后把这根直线删除,最后,如果Pmin或Pmax跟初值相比发生了变化,就把形成包围矩形的直线删除,连结直线最小点Pmin和最大点Pmax, 形成新的直线,这样一来,同一直线位置上就只有一根直线了,而模型空间里的直线将会越来越少,速度还可以吧!
页:
[1]
2