尘缘一生 发表于 2014-6-18 20:26:58

提个比较难的问题(自动智能作闭合填充边界)!

本帖最后由 尘缘一生 于 2014-6-19 05:38 编辑

填充问题:

   大家知道,填充边界不闭合,那是没法填充的,多年来,我一直没有解决这个问题的,这几天在明经也没有发现这个问题解决代码,我总想这么一件事:那就是,点取一点,从这一点向四周放射线(不是实体,是虚的),碰到实体(点、线、圆.......),取得交点坐标,最后,交点坐标多义线连接并闭合,填充完毕,再删除这个填充边界多义线,岂不就完成了吗?

      这是我的心病,对于放射线角度,可以取值精度,比如:5度,对吧?那么那么这个程序的代码,是个复杂智能程序,我能力办不到,我相信,明经有人能办到。

      假如整个屏幕为空,点取一点,我们可以叫程序,闭合整个填充屏幕。实际上就是不让CAD做边界,我们写LISP,取得四周许多点位,求得智能效果,假如能这么智能取得四周边界的话,像我们许多动态演示的也不难做到(单四周闭合边界线),就更好啦。

   假如谁能写出这个代码,将是对设计界的一大贡献,我当重谢,特请来阳城一聚,若何?

xyp1964 发表于 2014-6-19 15:15:26

spp_wall 发表于 2014-6-19 14:34 static/image/common/back.gif
院长的不错!!!!!!!!!!


Lisper 发表于 2014-6-20 11:55:00

tester005 发表于 2014-6-20 10:35 static/image/common/back.gif
没看到任何一个程序 都是演示

(defun c:tt1 (/ *error* cmdecho fuzz pt)
(defun *error* (s)
    (setvar 'cmdecho cmdecho)
    (princ s)
    )
(setq cmdecho (getvar 'cmdecho))
(setvar 'cmdecho 0)
(setq fuzz (getreal "\n容差值<10.0>:"))
(if (null fuzz) (setq fuzz 10.0))
(while (setq pt (getpoint "\n指定点:"))
    (setq pt (trans pt 1 0))
    (if (setq e (mybpoly pt fuzz))
      (progn
(command "hatch" "p" "ansi31" 10 0 "s" e "")
(entdel e)
)
      (princ "\n没有封闭区域...")
      )
    )
(setvar 'cmdecho cmdecho)
(princ)
)
代码需加载附件BPOLY_R17.arx使用!适应CAD版本:R17
arx提供一个函数 MyBPoly 和一个命令: BP。
MyBPoly 函数相当于可以指定容差值的CAD自带的函数 BPOLY, (MyBPoly 点 [容差值 = 0.001])
命令 BP 相当于可以指定容差值的CAD自带的命令 Boundary

panliang9 发表于 2017-11-24 16:14:35

这个问题今天又来看了一下,我觉得答案已经出来了!

四楼的“shenhung”提出的想法是:在所有交点.端点上.画一个小圆.~包住間隙..再填充.小圆填充后删除,

五楼的院长马上贴出了悬空线检查的命令,效率非常的快!

实际上四楼的方法变成了“在所有的悬空点添上小圆”这就已经是答案了,只要有一个查找悬空点的程序,然后在该悬空点加上某直径的小圆,

就已经是非常好的办法了,这几乎可以把所有的不闭合的地方都闭合了!

然后“tryhi”在另一个贴子里“寻找悬空线”给出了查找悬空线的代码,而且最好的是,在找出的悬空线里把小圆都加上了!!!!

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=169701&extra=&highlight=%D0%FC%BF%D5%CF%DF&page=1

这就是答案,我把一个研究了很长时间很难打剖面线的图案,成功的用这个办法把剖面线打出来了!

当然在复杂的图形里,为了快速的计算和填充,最好用ET工具里的快速选择把有关的线给单独拎出来,这样速度就基本上能满足要求了!

edata 发表于 2014-6-18 20:49:41

可以尝试修改 HPGAPTOL 变量
有的时候CAD用延伸的时候,正常视图无法延伸对象,放大后倒是可以和这种情况雷同。
在遇到有圆弧的多段线的时候,有重叠线的时候,也会出现填充失败。
------ 省略若干。。

shenhung 发表于 2014-6-19 09:16:06

通常是很细微的间隙.不好找出来.~!!
我是用很笨的方法.~!! 在所有交点.端点上.画一个小圆.~包住間隙..再填充.小圆填充后删除.

xyp1964 发表于 2014-6-19 09:28:16

;;先查悬挂线

enn09 发表于 2014-6-19 10:14:14

院长好厉害,我平常解决不闭合的,也是笨办法,用cad自带的BOUNDARY重新生成边界,再去填充

ysq101 发表于 2014-6-19 12:10:48

楼主说的射线法   
等出的结果:
角度太小   =点太多
角度太大   =太毛躁

还是象3楼说的用小圆还封闭线来得更快

xyp1964 发表于 2014-6-19 12:49:19


spp_wall 发表于 2014-6-19 14:34:37

院长的不错!!!!!!!!!!

风树 发表于 2014-6-19 18:18:23

xyp1964 发表于 2014-6-19 15:15 static/image/common/back.gif


上面的图中第一个图形如果有多个缺口能处理吗
页: [1] 2 3 4 5
查看完整版本: 提个比较难的问题(自动智能作闭合填充边界)!