用Rhino实现逆向工程及检测方法

Shaper3d论坛版主Shadow 分享他使用Rhino实现逆向工程的一些经验,供大家学习。

在大多数人看来,用Rhino做逆向工程,第一反应就是不行,可事实上并非如此,只要掌握方法,用Rhino实现逆向工程还是可以实现的。本例分为两个内容来讲,先讲纯Rhino工具实现逆向操作的方法,另外一个内容是借用插件的方法。
一般扫描出来的模型都是以mesh方式保存的,直接打开即可,如果模型的精度太高,视图旋转就可能会有卡顿现象,所以必须对模型的点数时行一定的精简,至于减多少,没有一个标准,但减面后的模型不能跟原始模型差别太大,要不做出来的东西可能就不太准了。如果你旋转模型,没有卡的现象,当然就没必要去减了。

在Rhino中有一个减面工具:ReduceMesh,可以直接输入需要保留的网格面数,也可以按百分比来让程序自动减少,对话框比较简单,不需要怎么设置。
1041.png

接下来工作就是考虑如何做面,这一步和看图练习就没有什么区别,要在脑子里想好如何分面,对于有一定基础的同学来说,并没啥难度,难点就是如何让做出来的面贴到mesh上去。
先说如何生成曲面
A01.jpg
像图中的例子,我们可以先把它做成3个大面,在边缘有曲率变化比较大的部分,再切开做出细节即可。
在顶视图画线把这一体的mesh分为几个部分,注意mesh不是直接用split指令,而是用meshsplit,分开的这3个部分就是我们想要做的3个大面。
A02.jpg
但要记得,尽可能的选择曲率比较平缓的做为大面,像我图中蓝色的面,就不选择切到右侧这部分,因为右侧是曲率比较大的部分,这部分将作为单独的一个面与左边连接,如果一次选择完做一个大面,在曲率大的这里,就会贴不好了。
Mesh分割好之后,就建立NURBS曲面。先用plane指令做出一个简单的曲面。从顶视图看,这个面要比蓝色的mesh要大一些,但也不必太大。
A03.jpg
可以看出,左下角的曲面,离mesh比较远,所以需要对曲面进行一定的调整,让它的边界尽可能的与mesh保持一个走势,这样就方便我们保证曲面的质量。当然也可以先画线把这曲面做出来,最终目的是弄出这个曲面。

A04.jpg

然后选择patch指令,再点mesh,弹出它的对话框,点确定,你可以看到就生成了一个曲面,贴在选取的那个mesh上了。

A04.pngA05.jpg

生成曲面的结构线多少,可以在对话框输入控制,一般来说,并不需要这么密的结构线,因为不方便调整。像这种曲面变化比较平缓,就用简单的1span曲面就可以了,也就是说在UV跨距数都输入1,它就会生成一个3阶的1span曲面了。有人说,那有没有可能生成4阶5阶的曲面,或者2阶的呢?答案是可以的,但不是这里的UV跨距数控制。
看看patch对话框下面的一个按钮,选取起始曲面。什么意思呢,就是说你给定一个面的,这个面的形状你可以定义,还有曲面的阶数,最后生成的曲面从某个角度看,都符合你给定的这个面的轮廓形状,还有阶数,UV也都保持一致,这样就可以做到3阶以外的曲面了。下面还有一个拉力值,越小就越贴着mesh。下图就是我用开始做的那个曲面贴到mesh上。
A06.jpg
可以看到,有一部分曲面盖住了底下的mesh,这说明贴合不是太好,因为我这里只是用了2阶曲面。把阶数改变一下,可以看到效果略有不同了。
A07.jpg
为什么要把这参考曲面做大?如果这曲面小于mesh的范围,贴上去的时候,程序会自动把它拉到mesh的范围,就会导致控制点分布很乱了。使用了这个参考曲面,上面的UV跨距就失效,不管你怎样设置都没起作用的。另外,由于是近似算法,所以你再执行一次patch,又以贴在mesh上的这个面做起始曲面,生成的曲面形状又会发生改变的。当然做得越多,就变化越来越小,说明每次它都在计算,直到做到最贴的曲面。一般情况下,都没必要做太多次的,如果发现每次变化都好大,说明你的参考曲面可能做得不是太好。

调整方法
虽然曲面已经贴上,但有时候精度可能也不够,需要进行一些细微的调整,如何调整又能保持曲面和mesh的贴合?在这里需要用到contour指令,其作用是在mesh和曲面上生成截面线,看着两条曲线的位置来判断曲面的边界是否合适。选择mesh的时候,最好把全部都选上,这样就容易判断曲面延伸到边界,位置是否合理。因为mesh都是由很多三角面拼起来,所以在上面生成的截面线,都是polyline,而不是3阶的曲线,为了区分,方便可以把这两种线以不同颜色区分,用selpolyline可以选择到mesh上的线。 像下图中,曲面的边界明显不在mesh上,虽然中间的部分看起来还不错,所以必须把这条边再抬起来一些。抬起来最好不要用XYZ直接拖动,用moveUVN沿着法线方向移动。抬高后的曲面,基本就延着mesh走到倒角的位置了。

A08.jpg

A09.jpg

这里可能会有人有疑问,为何不把曲面边界事先画在倒角的附近,让做出来的曲面离倒角的边更近,不是更好控制吗?当然这也是一个方法,但画线可能没这么方便而已。

还有contour指令不支持历史记录,所以调起来挺不方便,但也不是没方法,可以在需要调整的位置选出几条截面线投影到曲面上,这样就带有历史了,因为投影有历史记录,但是一定不能要太多条,两三条就够了,如果你全部选择曲面上的那些截面线投影,调整的时候曲线也会在动,但是它动的时候会很卡,并没单条线操作顺畅,另外太多条线这样操作还有可能宕机。

检测方法
检测曲面贴在mesh上的功能,需要用到PointDeviation指令,它可以直接检测mesh上的顶点到曲面上距离范围,也可以检测点到曲线的误差。所谓范围,就是它能检测出你给定的一个值,在这范围内都以某种颜色显示,而不是它把每个点的实际距离都显示出具体数值。
执行指令,先选mesh,再选曲面,就会弹出它的对话框了。这些参数有必要说明一下。
A10.jpg
容许角度
没有曲线或曲面法线通过的点,如果位于曲线端点或曲面边缘法线容许角度范围内也会被测量,预设值为 1 度,设为 180 度时,所有的点都会被测量。
如果你的曲面是在mesh范围之内,设置为180的时候,就会把曲面范围之外的mesh顶点也算进去,如果是1,那就是在你的曲面范围之内的点。一般情况下我们都是检测曲面内的点的误差,如果把之外的顶点也算进来,反而会影响到实际结果,所以只需要设置为1即可。当你的曲面范围大于mesh范围,简单理解为曲面包住你的mesh,那么即便设置为180,也是没啥效果的,因为你的所有点都已曲面的范围之内。
指示线缩放比
点到曲线或曲面的指示线长度会因为缩放比设定值而被放大,预设值为 10,设置越大指示线越长。所谓指示线就是被检测的点到曲面的法线。下面两个选项是一个是显示这些指示线,另外一个就是生成这些指示为直线,这几个没有什么实际意义,可以忽略。
下面的统计就是被检测的点数量,还有平均距离什么的,这些数据并不是真正的误差值,具体我也不太清楚这组数据有啥意义。主要是设置是在右边这些设置。
忽略,坏点
超过这个数值的点就不被检测,坏点多显示一个红色,这两个可以理解为一样。我们要检测的是所有点,所以这两个数值可以设大一些。有的人可能觉得设置为1或2大不大,我觉得不够,我觉得随便设置个几百吧。如果设置太小,你会发现统计那栏的点数会很少,这样检测结果当然不准了。
良点
这个数值就是我们要设置的误差值,比如说你想知道这些顶点到曲面的距离,是不是都在0.5以内,如果在范围内,就会显示为蓝色。如果超过这个范围,就显示水蓝色。
曲面上
这个参数没得设置,就是0,意思就是点真正意义上的在曲面上。

A11.jpg
回到我们的例子检测一下,显示有两个不同的颜色,蓝色就表示在1mm范围内的点,水蓝色的就是大于1mm点。每改一个范围,就要点一下套用,颜色显示也会不同。如果想知道最大误差值是多少在哪看呢?这时候要点关闭,再按F2,会在指令历史中看得到。在这里我想吐槽一下,为什么不直接在这界面上显示呢?

好了,第一部分先讲这些,下一内容讲用插件如何实现。插件相对来说,会更方便。

此条目发表在Rhino5, 逆向工程分类目录,贴了, 标签。将固定链接加入收藏夹。