Rhino(犀牛)中国技术支持与推广中心

标题: 布尔差集运算失败,坛子里的所有相关主题都看过了,但是仍然无法解决。 [打印本页]

作者: e2zone    时间: 2013-10-25 23:36
标题: 布尔差集运算失败,坛子里的所有相关主题都看过了,但是仍然无法解决。
本帖最后由 e2zone 于 2013-11-8 18:44 编辑

我想做一个螺丝,和一个可以拧此螺丝的螺丝孔。
在做螺丝孔的时候,我是这样做的:
1. 现在长方体上打孔,方法是用一个柱体和长方体做布尔差集运算,长方体减去柱体。
2. 画一根螺旋线,再画一个三角形,让三角形沿着螺旋线单轨扫掠,然后把出来的螺纹体加盖,成实体。
3. 把螺纹体移动到刚才打过孔的位置,想让长方体减去这个螺纹体,这样在这个孔的内壁就能有螺纹了,但是这一步,总是失败。

之前就按照这样的方法试验(随便画的柱体和螺旋体),成功过。

看了那么多帖子,总结如下:
布尔差集运算前提条件:
1、法线方向一致。
2、避开曲面闭合线相交。
3、避开两个物件的控制点汇集点相交。
4、避开两个曲面相互重叠或者相切。
5、注意物件是不是实体。

目前,关于上面的五点:
1、我会看法线的方向,但是,一个物件是螺旋的,法线方向是,一直变化的。所以,感觉,永远无法一致。。。除非是相同走向和形状的面,否则,怎么会可能一致呢?
2、曲面的闭合线,如何看我还不清楚。
3、我只知道有控制点,但是控制点汇集点,是怎么出来的,还不太清楚。
4、这个应该可以避免。
5、是不是实体我还不太会看,我觉得系统是不是应该有个什么命令的,但是我知道什么是实体,就是所有面都封闭起来的,内部空间和外部空间能够被这个面完全隔开,而不漏一点空隙的,这样的一个物体。但是,真的不知道,如果画好的一个物件,怎么查看他是否是实体。

贴一下图:
这个是全局的四个视图:黄线选中的物件就是想打螺丝孔的物件。


这个是前视图的局部放大,加了一些说明:



现在我的目的就是想把这个物件上打上这个螺纹孔,但是总是布尔差集运算失败。
希望前辈给予指点。
谢谢!

相关的图我已经传到附件了。
Rhino5画的,附件中图的block图层。
不好意思,文件大于512K,我只好分成两个传。

DaesengLogo.part1.rar

500 KB, 下载次数: 108

DaesengLogo.part2.rar

294.21 KB, 下载次数: 103


作者: simonchen    时间: 2013-10-26 10:09
楼主,原因很简单~因为你的螺杆本身有自相交的情况:

线箭头所指的线就是两个螺旋面相交出的曲线

自相交的物件布尔是不被接受的,所以你要对螺杆进行修复,布尔运算才能成功。

作者: 无聊小子    时间: 2013-10-26 10:21
螺旋面有相交,导致无法确认法线方向。

QQ截图20131026100636.jpg (198.17 KB, 下载次数: 33)

QQ截图20131026100636.jpg

QQ截图20131026102533.jpg (176.57 KB, 下载次数: 39)

QQ截图20131026102533.jpg

QQ截图20131026102632.jpg (46.53 KB, 下载次数: 39)

QQ截图20131026102632.jpg

作者: simonchen    时间: 2013-10-26 10:56
无聊小子 发表于 2013-10-26 10:21
螺旋面有相交,导致无法确认法线方向。


作者: e2zone    时间: 2013-10-26 14:22
本帖最后由 e2zone 于 2013-10-26 14:27 编辑

要是说螺旋杆自身有相交的情况,那么出问题的应该就是螺旋杆了,但是问题是,如果把这个螺旋杆,放在其他没有打孔的地方,他是可以进行布尔运算的。甚至是放在和孔有一点相交的地方也可以进行布尔运算。
下面的截图,左边这个适合孔有一部分相交的,可以看到孔的内壁已经有凹槽了,右边这个是在没有孔的地方进行的布尔差集运算。
请前辈指点,谢谢!

作者: e2zone    时间: 2013-10-27 18:14
既然,没人管了。就自己来吧。
哈哈。
经过多次试验,现在就算是弄成了吧,至少能进行布尔差集运算了。
下面说一下我的步骤和参数,以下所有单位均为毫米:
1. 首先确定螺纹线的螺距,这里我设定的为2。
2. 确定三角形的垂直于螺纹线那一边的边长,同样为2,这样旋转出来的物件,就不会有相交的部分,那么我们就能根据此值去确定打孔圆柱的直径了。而不是怕有螺纹相交不能布尔,因为即使螺纹的两个边相交了,也依然能够进行布尔差集元算。
3. 放置三角形距离螺旋线中心轴的位置,我设定为3。
4. 绘制打孔圆柱体,半径为3.01,大于第四步的值。其实之前一直无法进行布尔差集运算的原因就是此值和第三步的值相同导致的。只要此值大于后者小于第三步的值,就都可以进行布尔差集运算了。
5. ok,去进行布尔差集运算吧。哈哈!

虽然成功了,但是具体的原理其实还是不太清楚,原因也不知道(只是不能确定,为什么),我猜可能是我之前总结的第一点和第四点的原因吧,仅仅是猜测。(这几点就写在此贴开始)。
贴图:

如果谁知道原因,请给我们讲下,谢谢!


作者: 无聊小子    时间: 2013-10-28 11:04
e2zone 发表于 2013-10-27 18:14
既然,没人管了。就自己来吧。
哈哈。
经过多次试验,现在就算是弄成了吧,至少能进行布尔差集运算了。

本人承认我的语文能力很差。所以越看越晕。

作者: e2zone    时间: 2013-10-28 11:42
无聊小子 发表于 2013-10-28 11:04
本人承认我的语文能力很差。所以越看越晕。

那不好意思了,是我表达能力太差。
我是说,经过一些试验,在没有调整螺纹杆的前提下,可以进行布尔差集运算了,也就是可以得到想要的效果了。
虽有瑕疵,但是不放大看不出来。
作者: e2zone    时间: 2013-11-8 18:43
大家记住,很多时候,一切都是扯淡,自己琢磨加实践才是真理。
有些人根本就是不懂装懂!
作者: Jessesn    时间: 2013-11-8 22:22
本帖最后由 Jessesn 于 2013-11-8 23:10 编辑
e2zone 发表于 2013-10-28 11:42
那不好意思了,是我表达能力太差。
我是说,经过一些试验,在没有调整螺纹杆的前提下,可以进行布尔差集 ...

Hi LZ, 我不确定这是一个 Bug,
你可以查看剖面,布尔失败是由于螺纹与圆柱之间的间隙所造成,如下图所示,在整个截面中存在多处这样的问题


暂时的解决方式建议将中间的圆柱做稍稍的截面方向的缩放。


感谢楼主所提及的问题,我会将这个问题反馈给我们相关工程师。

另外一端的问题,请参考3楼,因为你物件本身自交所致, 你要知道布尔运算能成功进行的关键是物体间可以形成彼此独立的封闭空间。



作者: Jessesn    时间: 2013-11-8 23:13
e2zone 发表于 2013-11-8 18:43
大家记住,很多时候,一切都是扯淡,自己琢磨加实践才是真理。
有些人根本就是不懂装懂!

楼主,这种语气没有必要了,这里只是论坛,并非所有的人都有义务来回答你的问题。
根本不需要这种语气,指桑骂槐的发泄你的情绪,这里只是技术交流的论坛,如果你决定对方的答案令你不满意,可以直接回帖继续讨论。

PS, 抱歉这么晚回复。




欢迎光临 Rhino(犀牛)中国技术支持与推广中心 (http://bbs.rhino3d.asia/) Powered by Discuz! X3.2