panliang9 发表于 2011-3-31 23:14:32

瞎子也能走出迷宫,求快速生成外轮廓线程序!

有没有个程序,象一个滚球一样,沿图形的外轮廓滚动,最后得到外轮廓线呢!

我为什么想到这个呢?

我的工作中进行设备布局,或者是设备参照,

经常需要得到设备的外轮廓线!

这些图形有成千上万个对象。

使用通常的“boundary”绘制外轮廓线的办法,只要对象上了两千个,电脑就算得人事不知了!

我搜遍本版,搜到“lyy”的外轮廓线程序,

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=10489&highlight=%C2%D6%C0%AA%CF%DF

还有“yipihaoma”的“dwg搜索闭合轮廓线”

http://bbs.mjtd.com/dispbbs_14_83777_1_1.html

两位高手写的东西都很好,但是,使用他们的程序,和BOUNDARY命令比起来,并没有快很多。

简单的对象,他们能做的,boundary也能做!

太复杂的对象,boundary做不了的,他们的程序做起来也费力。

图形中间太多孤岛,计算机的灯在那儿一个劲狂闪!有时间一两个小时过去,还是不能得到

答案。

那么,有没有一种方法,能够不去计算那些孤岛,而是从一条线开始,象走迷宫那样,始终贴着一边走

始终摸着一面墙,把这个轮廓走出来呢?

是的,一个瞎子也能走出迷宫,他只要扶着一面墙走,再复杂的迷宫也能走得出去。他根本不用管迷宫里

那些未知的部分。

但是,“话说起来简单”,做为一个“伸手派”,这算法的复杂程度,也许很难,也许根本就不可能,

我有的仅仅是想象而已!

但就是这想象,使我在每天艰苦的工作中,始终抱有希望!

会有那么一天,有一位大神从天而降,用很高傲的语气说:“拿去吧”,这就是你们要的东西!

再不用做那重复单调的工作,你们从此有福了!

我每天都在等待它的出现!!!

明经的高手们,你们是国内最强的,这样的想法能不能实现呢?








yefei812678 发表于 2024-3-22 10:02:52

感谢分享感谢分享

13579 发表于 2011-4-2 09:33:12

明经的高手们,你们是国内最强的

nzl1116 发表于 2011-4-2 10:55:53

生成面域,直接合并不就得了

panliang9 发表于 2011-4-2 20:28:40

“nzl1116” 说的对,生成面域然后让面域合并是可以得到外轮廓线,LYY的程序似乎就是这么做的!

问题是计算的对象太多了,也就是说由于对象太多,孤岛的计算判断时间成倍的增加,最后增加到崩溃的地步。

一千个以上的对象,计算机就会问一句,是不是继续?因为CAD知道,这么多对象,计算时间就会变得超长了。

而我们经常处理的对象,远远超过这个数量,使我们有这样的想法(提取轮廓,简化图纸)的时候都望而却步。

很多时候只能把设备不经过任何简化就往布局图里放,图面上成千成万对布局图毫无意义的线条堆在那儿,看上去非常让人心烦,但也无可奈何。

我们国外同事发过来的布局图上,也是这样,我明白,不是他们不想简化,而是根本弄不了。

为了这个问题,我到处搜索,google搜“CAD generatingoutline”,或者是“CAD create outline”,发现国外也有很多人问同样的问题,有一个家伙也是画布局图,他也问同样的
问题,怎么能简单提取设备的外形,但都没有很好的办法!

按我的理解,这东西和走迷宫是一个道理,迷宫不论你有多么复杂,你只要顺着一堵墙走,就一定可以走出去!

那这个找闭合轮廓线的程序能不能也象走迷宫一样呢,找到一根线,然后把这根线当墙,顺着这根线一直摸下去,或者就象我上面说的那样,象是有一个球,贴着边一直滚,它总是会滚回原点的。

这样的话就只需要处理当前的对象,不用管其它的,这应该能大大简化计算的。

这涉及到算法,有可能是很深层次的问题了。
因为我们知道,CAD打剖面线总是容易出问题,虽然它有一个“间隙”值的设定,使得很多时候区域不封闭,也能打出剖面线,但也有的时候,不论你怎么处理,剖面线就是打不出来,这也说明,这个问题,autodesk公司也无法处理得很好!

但也有可能,真正的高手,譬如明经里的这一帮人,并没有把这个当一回事,但其实,这个问题是很有价值的!

ZZXXQQ 发表于 2011-4-2 22:01:55

一个一个窗口选行吗?

;窗选生成封闭区域 明经 ZZXXQQ 2010.9.14 2011.4.2改
(defun c:tt ()
(setvar "CMDECHO" 0)
(command ".UNDO" "BE")
(if (and(setq pt1 (getpoint "\n第一点 :"))
         (setq pt2 (getcorner pt1 "\n第二点 :"))) (progn
(setq s1 (entlast) ss (ssadd))
(command ".RECTANG" pt1 pt2)
(command "-boundary" (polar pt1 (angle pt1 pt2) 10) "")
(command ".erase" "c" pt1 pt1 "")
(if s1 (progn
   (while (setq s1 (entnext s1)) (setq ss (ssadd s1 ss)))
   (command ".ERASE" "W" pt1 pt2 "R" ss "")
))
))
(command ".UNDO" "E")
(setvar "CMDECHO" 1)
(princ)
)

nzl1116 发表于 2011-4-3 20:39:54

如果能象CAD Hatch命令那样就好了,点一下,填充区域很快就显示出来了
如果能这样做到,直接在外围框一个框

hhh454 发表于 2011-4-5 19:05:31

我有个帖子里面有代码,收索一下就有了

micotam 发表于 2011-4-7 09:16:50

楼主有创意

luntan666 发表于 2011-4-7 09:36:56

进来看看......

198526 发表于 2011-4-7 19:28:50

最好是能把你那复杂的图剪一个图放上来,大家看看
页: [1] 2
查看完整版本: 瞎子也能走出迷宫,求快速生成外轮廓线程序!