修復損壞的物件

如何發現並修復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)中顯示為曲面,一般只要刪除即可。