如何发现并修复Rhino内损坏的物件,或是从其他文件输入的损坏物件
Rhino“损坏”的物件(Bad objects)通常是指物件违反了某些NURBs 规则,或是结构性问题。理论上,Rhino不应产生损坏的物件,但在实际操作上,它是可能并周期性地发生。也可能是由其他程序汇入时造成。这里有些相关说明,告诉您如何修复这些损坏的物件,且通常不会花太多的功夫修复。通常损坏的物件为曲面,但偶尔曲线也会产生损坏。
查找损坏物件最简单的方式是使用 SelBadObjects 指令(分析 > 检测 >选取损坏的物件 )。所有无效物件会被选取,一个多重曲面被选取可能只包括一个损坏曲面。您可以透过抽离损坏的曲面ExtractBadSrf指令(不在下拉式功能表内)找出损坏的曲面。 Rhino另有一个非常好用的指令叫自动检查新物件CheckNewObjects,开启此功能后,Rhino会在物件建立、修改、输入时检查物件的资料结构是否有错误。
这有许多技术上的解释。对曲面物件来说,产生损坏物件多半是因为已修剪边缘上有一个或多个极微小的分段造成边缘结构不良所导致的。有时候也可能因为曲面上的某几列控制点完全重合而产生损坏物件,又或者是在某个方向上产生长度为零的边(收缩边缘)。这种状况在Rhino V3时比较容易发生─例如建立一个垂直的平面或直线,从上视图将它投影至工作平面上。这个物件现在Z方向上就是长度为零并且被认定为损坏物件了。在Rhino V4里,这类操作在某些场合是“不允许”的,所以也不会产生损坏物件,指令只会在动作失败后弹出错误讯息而已。然而,在V4仍然还是有可能会产生损坏物件。
为什么曲面修剪后会变成损坏物件您通常不会刻意这么做。损坏物件通常可能会在使用组合指令 (或者其他用到组合功能的指令,例如布尔运算)后出现。因为在组合物件的过程中,Rhino经常必须分割并调整修剪边缘。在某些情况下这些修剪过的边缘会因为调整而产生极微小分段,Bing!! 于是也产生了损坏的物件。 (附带一提,“极微小”的定义是指小于系统绝对公差值,文件中若存在小于系统绝对公差的几何物件将会造成问题)
由其他程序输入的几何物件也可能有损坏的物件,若您有执行 CheckNewObjects检查新物件指令,当您输入文件时若有无效物件,将会有一个提醒通知,您需要逐一点击确定。若有很多无效物件,这可能很烦人,您可以先把检查新物件指令关闭,然后在输入工作结束后再次开启。
每一套程序有他自己建立及检查几何物件的方式,并可能与Rhino不尽相同,是以输入的物件有可能在原始建立的程序可能并不被视为“损坏”。最重要的是,在程序间交换文件数据至少需要一个转译有时需要两个(透过像IGES这样的“中性”格式),在转换的过程中造成损坏,这取决于输入/输出功能的质量。Rhino同样也可能产生没有错误的物件,但却在其他程序被视为“损坏”的物件。
为何我无法看到损坏物件?
Rhino偶尔会产生您看不到的损坏物件。就字面上,它们是隐形的(是因为没有显示网格可以产生显示它们)。它们有时被称作“幽灵”曲面,这些幽灵曲面有时会让文件作怪,例如,缩放至最大范围(ZoomExtents)无法正确作业,因为视图缩放指令将此看不到的曲面考虑进去。
通常可以选取损坏的物件SelBadObjects指令,然后直接删除即可解决,这类幽灵曲面通常无法被修复。若无法删除,请试用Ctrl+X剪下这些资料。若您无法选取这些幽灵曲面,您也可以试做下列方式:缩放至最大范围,选取视图内所有物件并隐藏。然后使用 Ctrl+A全选物件,通常这会将文件所有物件选取起来,包括无法点选的物件。若您在指令提示列有看到一个物件被选取,使用详细资料(What)来确认选取到的物件为此损坏物件(无效),并删除这个物件,然后将所有隐藏物件复原显示即可。
若多边形网格物件看起来有问题,可使用网格>检查物件CheckMesh工具来了解有什么问题,这个指令会告诉您是否可修复,并且在网格工具列下有几个编辑及修复工具您可以拿来使用,以下是几个常用指令:
ExtractDuplicateMeshFaces
ExtractNonManifoldMeshEdges
CullDegenerateMeshFaces
UnifyMeshNormals
损坏的多重曲线通常透过炸开并重新组合即可修复。另外,曲线是否包含非常微小的边缘,并清除它。若这样仍然有问题,可能曲线违反 NURBs knot 结构并且需要更多的重建工作。
以下是处理因修剪造成损坏曲面修复处理的方式,在这之前,您需要先确认那些是损坏的曲面并暂时将其他物件隐藏(您可能需要执行前文说明的步骤并执行ExtractBadSrf指令)。
1. 首先我们通常在所有的损坏物件上先执行重建边缘 RebuildEdges指令,这个步骤可修复部分曲面,或多或少恢复到曲面边缘修剪前的状态,然而也意味着曲面无法再度与邻近曲面组合,或是组合后再度损坏。但它在某些情况下是可行的,若有部分曲面被修复(使用选取损坏物件并反选SelBadObjects/Invert),先修复曲面隐藏。有时在损坏曲面上执行缩回已修剪曲面ShrinkSrf也有帮助。
2. 在第一个损坏曲面上,使用取消修剪指令并将选项设为“保留修剪物件=是”,然后重新使用修剪指令重新修剪一次,并检查是否修复此曲面。若确认修复,将之隐藏,并使用相同方式试着修复其他损坏曲面。隐藏所有已修复曲面。
3. 若仍有损坏的曲面,在这些损坏曲面上再次执行分离修剪指令,将分离修剪结果使用 炸开指令并检查是否有小边缘,这是造成损坏物件最常见的情况。检查看看有多少曲线组成此修剪过的曲线,通常会出现一个可疑的数字,例如看起来是一个矩形的曲线数是5而非4,有可能某处有一个微小边缘导致问题,通常会靠近四角,试着检查四周边缘。或者,使用选取过短的曲线SelShortCrv指令并设定一个小的设定值。若您发现有小边缘,请删除它并重新组合为一条封闭的曲线,使用它重新修剪曲面,通常能够修复大部分损坏的曲面。
4. 最后,试着显示所有隐藏的物件,然后试试看是否能够再度组合物件并不产生损坏的物件。若一切都很好,那太赞了。若仍有问题,这一般是因为组合无法正确完成,若如此您需要分析曲面为何无法与邻近那个曲面组合且为何会发生。这个部分有时相当伤脑筋。
备注: 上述方式只针对修剪过的曲面,对边缘控制点叠在一起的曲面情况或不同排的控制点重叠曲面并没有帮助。这需要使用其他方式解决,例如移除节点或重建曲面。边缘控制点叠在一起的曲面很容易察觉,看起来像曲线但在内容(Properties)中显示为曲面,一般只要删除即可。