2011-03-28 58 views
12

我正在製作一個程序來查看3D CAD模型,並且希望構建自動分解視圖。所有將被查看的組件都是軸對稱的。有些可能不是,但大多數都是。我想弄清楚一種將裝配中的零件自動移動到爆炸視圖位置的算法。這裏是什麼,我想通過一個算法(當然要去掉標籤)來實現的例子:CAD的分解視圖算法

Exploded view

我一起工作的唯一價值是各部分的邊界框的中心。如果需要更多信息,我可以計算更多信息,但似乎應該足夠。我想到的粗略方法是計算從組件的原點到沿着軸對稱軸的每個部件中心的矢量,然後計算相對於中心軸的部件中心的徑向矢量。從那裏開始,我需要弄清楚一些能夠按照這兩個向量的組合來縮放每個部分的位置的計算。這是我不太確定這個方向的部分。我所包含的圖像顯示了我想要的確切功能,但我希望能夠通過任何浮點值縮放位置以展開或收縮分解視圖,其中1.0是原始組裝模型。有任何想法嗎?

回答

9

你的問題相當廣泛,因此我的解釋變得冗長了。我將爲軸向和徑向處理提出兩種爆炸算法的變體。

爲了說明它們與一個例子,我將使用下面的數字(沿着軸線包圍盒只,只有五個份):

P1: [ 0,10] (battery) 
P2: [10,14] (motor) 
P3: [14,16] (cog) 
P4: [16,24] (bit holder) 
P5: [18,26] (gear casing) 

雖然份P1P4恰好彼此接觸,P4P5實際上重疊。

第一個是基本上按距離縮放一個因子的算法,比如你提出的。如果零件的尺寸在裝配中大不相同,但也會出現重疊零件(例如沿着軸的示例,圓齒輪的延伸比位固定器小得多),它將受到影響。

設定比例因子爲f,那麼每個邊界框的中心按比例縮小f,但擴展名不是。然後份將是

P1: 5 + [-5,5] => P1': 5*f + [-5,5] 
P2: 12 + [-2,2] => P2': 12*f + [-2,2] 
P3: 15 + [-1,1] => P3': 15*f + [-1,1] 
P4: 20 + [-4,4] => P4': 20*f + [-4,4] 
P5: 22 + [-4,4] => P5': 22*f + [-4,4] 

部件P1'P4然後通過

P2' - P1' : (12*f-2) - (5*f+5) = 7*(f-1) 
P3' - P2' : (15*f-1) - (12*f+2) = 3*(f-1) 
P4' - P3' : (20*f-4) - (15*f+1) = 5*(f-5) 

給出如所預期的差爲f=0零但對於任何分解查看距離強烈地依賴於尺寸之間的距離的單獨部分。如果尺寸變化較大,我認爲這不會太好。

此外,對於重疊部分

P5' - P4' : (22*f-4) - (20*f+4) = 2*f-8 

他們仍然合理˚F重疊。

另一種可能性是不定義軸的縮放因子,而是定義部分距離d。然後,邊界框會像下面的排列:

P1': [ 0,10] 
P2': [10,14]+d 
P3': [14,16]+2*d 
P4': [16,24]+3*d 
P5': [18,26]+4*d+6 

注意,在最後一行,我們增加24-8=6,即爲了區分這兩個部分重疊。

雖然這個算法處理上述情況(在我看來)更好的方式,我們必須加入特別小心覆蓋多個其他部分,不應該包括在分組中(例如,在您的情況下處理頂部) 。

一種可能性是在第一步中將部件分組爲組然後將算法應用於這些組的邊界框。之後,它可以再次應用於每個組的零件,省略覆蓋多個子組的零件。在你的情況下,將(注意嵌套的分組可能):

[ 
    ([battery,(switch,circuit switch),motor],handle top), 
    motor cog, 
    tri-cog, 
    red-cog, 
    circle-cog, 
    bit-holder, 
    (gear casing,spring,lock knob) 
] 

您可能會看到,我已介紹了兩種不同的羣體:零件/方括號組由算法處理,即間距添加在這樣的組內的每個部分/子組之間,而圓括號內的組不爆炸。

到目前爲止,我們沒有處理徑向爆炸,因爲它很好地從軸處理中分離出來。但是同樣的兩種方法也可以用於徑向爆炸。但在我看來,第二種算法產生更令人愉快的結果。例如。

[ 
    (battery,switch,<many parts>,gear casing), 
    (switch,spring), 
    (handle top, lock knob) 
] 

在這種情況下,我們將第三組中的第二組和2*r中添加額外的組分r所有徑向中心到所有:所述基團可以爲徑向處理如下進行。

請注意,簡單縮放算法運行時無需特殊用戶指導(一旦給定縮放因子),而第二個使用附加信息(分組)。

我希望這個相當長的解釋給你一些想法如何進一步進行。如果我的解釋在某些時候不清楚,或者您有其他問題,請隨時發表評論。

+1

哇。 +1爲徹底。希望我能給更多。 – 2011-03-29 02:18:34