劉建秀
目前三維實體的模型構造主要基于兩種內核:ACIS和Parasolid。其中,Parasolid是一款功能強大的實體建模核心軟件,用邊界表示法對實體進行幾何建模[1,3,4]。在 Parasolid 中,采用導動(sweep)和放樣(loft)兩種特征造型方法進行模型構造。本文詳細介紹放樣函數的使用方法,在VC++6.0平臺上以MicrostationV8為CAD系統原型,調用Parasolid圖形內核函數庫的放樣函數實現特殊實體的建模,該實例應用于彎肘型尾水管的三維建模,并可用于其他異構體模型構造。
在三維建模中,放樣是基于一組有規律的輪廓,對輪廓施加一定的對應關系或約束來獲得光滑的放樣體。因此,在放樣操作中,輪廓間點的對應關系和外加約束對放樣體的精確度有決定性作用。在Parasolid函數庫中,實現放樣的函數是PK_BODY_make_lofted_body,其原型為:
int PK_BODY_make_lofted_body (int n_profiles,const PK_BODY_t profiles [],const PK_VERTEX_t start_vertices[],const PK_BODY_make_lofted_body_o_t*options, PK_BODY_tracked_loft_r_t*constlofted_body)
其中,前三個為輸入參數,n_profiles為參與放樣的輪廓個數;profiles[]為參與放樣的輪廓元素,如果輪廓為面元素,最終結果會生成體;如果輪廓為線元素,可以生成面;start_vertices為放樣輪廓的起始點,記錄輪廓間起始頂點的匹配關系,以這些起始點為基準,按照輪廓元素中點的生成順序產生對應關系,理論上應該是一一對應,實際生產過程中,大部分情況都不是一對一的關系,具體對應關系可見第3節的介紹;options是生成放樣體時可以自定義的一些屬性值,其內容包括末端條件、導線、拓撲形式、彎曲度、精度等,是控制放樣體質量的一個非常重要的參數;lofted_body是一個輸出參數,存儲生成的結果。
本節利用第2部分中介紹的放樣函數來生成放樣體。在函數PK_BODY_make_lofted_body中,options是決定最終三維實體質量的關鍵參數,這里重點介紹這個參數。
一般先利用宏定義PK_BODY_make_lofted_body_o_m對結構體參數 PK_BODY_make_lofted_body_o_t進行初始化,將其設為默認參數,然后按需進行個性化設置。在該參數中,需要重點說明的幾個成員參數是:
(1)末端條件
參數PK_BODY_loft_end_conds_t指定輪廓的末端條件,對放樣輪廓的起始和終止進行約束使其符合形狀要求。這是一個結構體參數,可以通過設置其成員變量PK_PARAM_periodic_t的值為PK_PARAM_periodic_yes_c約定輪廓是首尾相連的,或者為PK_PARAM_periodic_no_c設置輪廓首尾不相連;另外一個成員變量PK_BODY_loft_deriv_conds_t通過首尾輪廓時的曲率限制,可取值為K_BODY_loft_unconstrained_c無約束,PK_BODY_loft_natural_c曲率為0,以及其他值如:向量約束、面約束和平面約束[2]。
(2)頂點匹配規則
參數PK_BODY_vertex_matches_t表示頂點的匹配關系,這是一個數組,存放多個體(頂點)之間的兼容或匹配關系,其原型為:
struct PK_BODY_vertex_matches_t{int n_mappings;PK_BODY_vertex_match_t*mappings;};
在上面的結構中,n_mappings取值為輪廓的個數減1,表示以第一個輪廓為參考,考慮其他輪廓與參考輪廓的匹配關系;PK_BODY_vertex_match_t存放當前輪廓與其相鄰的輪廓的頂點匹配信息,定義如下:
struct PK_BODY_vertex_match_s{PK_BODY_t profile;int n_matches;PK_BODY_one_vertex_match_t*matches;}
其中,profile表示當前輪廓;n_matches表示需要匹配的頂點個數,如果前后輪廓頂點個數相等,取其個數即可,如果不等,取最大的;頂點的對應關系存放在數組matches中,這個參數最終決定放樣體質量,該結構中存放著當前輪廓的當前頂點對應著相鄰輪廓的哪一個頂點,每個頂點都要設置匹配關系,可能一對一,多對一或者一對多,具體設置可見第四節中的例子。
本節基于VC++6.0軟件平臺,以彎肘型尾水管的三維造型為例,來說明parasolid中放樣函數的使用。彎肘型尾水管由肘管段和出口擴散段組成,三維建模的難點在于肘管段的繪制,它是一個90°轉彎的變截面彎管,進口斷面為圓形,經橢圓矩形截面漸變到出口處的矩形截面,首尾截面輪廓線相差較大,且肘管段尺寸難以用理論設計,通常采用推薦的標準肘管尺寸,參數由水輪機制造廠家提供。圖1為制造廠家提供的尾水管單線圖,這是一個輪廓截面由圓到方漸變的尾水管模型,共20個截面,截面參數如圖1所示。

圖1 尾水管單線圖
在參數表中,BCDE四個參數確定了輪廓在右視圖中的相對位置(坐標),offset參數確定輪廓相對于中心線的偏移量(見圖1左下頂視圖)。W和H分別為橢圓矩形的寬度和高度,Rroof、Rfloor分別為橢圓矩形上、下圓角的半徑,如圖2所示。

圖2 過渡輪廓(橢圓矩形截面)示意圖
為了生成放樣體,需要將每一個輪廓按照順序畫在以落點為坐標原點的相對位置上,然后用放樣函數PK_BODY_make_lofted_body來生成體,將輪廓及其頂點分別記錄在數組profiles和vertices中,需要注意的是,輪廓形狀要嚴格按照表格中的數據來畫,例如第一個輪廓為半徑為4 600的圓,但是畫圖時需要按照圖2所標注的各參數來畫,也即該輪廓由四個弧段組成,如圖3左圖所示,并且在畫輪廓的時候要注意每個輪廓的起始點和形成方向應該一致,以保證頂點匹配的正確性。

圖3 輪廓示意圖
首先,對圖1表中數據進行分析可知,末端條件中首輪廓為圓形,尾端輪廓為矩形,且不相連,所以在定義放樣參數PK_BODY_make_lofted_body_o_t options時,限制其終端條件options.end_conditions.periodic=PK_PARAM_periodic_no_c;其次,分析輪廓形式可知,輪廓變化規律為圓-橢圓矩形-矩形,在下面的內容中,為了方便討論,記“輪廓1到輪廓2的變化規律”為“輪廓1-2”,以此類推,則頂點匹配上有幾種情況:
(1)輪廓1-2為圓形-橢圓矩形,如圖3所示,頂點為4-6,屬于不同頂點個數的匹配;
(2)輪廓2-3為橢圓矩形-橢圓矩形(圖3右圖~圖2),頂點為6-8,屬于不同頂點個數的匹配;
(3)輪廓3-18為橢圓矩形-橢圓矩形,頂點為8-8,屬于相同頂點個數一一對應匹配;
(4)輪廓18-19為橢圓矩形-矩形,頂點為8-4,屬于不同頂點個數的匹配;
(5)輪廓19-20為矩形-矩形漸變,頂點為4-4,屬于相同頂點個數一一對應匹配;
綜上,頂點的匹配是4-6-8-4,以第一種情況為例,顯然只要設置頂點的匹配規則為L1_1—L2_1,L1_2—L2_2,L1_2—L2_3,L1-3—L2_4,L1_4—L2_5,L1_4—L2_6,將此對應關系存儲在數組matches中。部分關鍵c++代碼如下:
//頂點對應關系
PK_BODY_vertex_matches_t matches;
matches.n_mappings=profileNum-1;
matches.mappings=new PK_BODY_vertex_match_t[profileNum-1];
PK_BODY_vertex_match_t match;
if(currentCount==4&&nextCount==6)
{
match.n_matches=6;
match.matches=new PK_BODY_one_vertex_match_t[6];
PK_BODY_one_vertex_match_t oneVertexMatch;
//1-1對應
currentVertex=profileVertexVec[profileIndex][0];
nextVertex=profileVertexVec[profileIndex+1][0];
.....
oneVertexMatch.profile_vertex=(PK_VERTEX_t)currentVertex;
oneVertexMatch.matched_vertex=(PK_VERTEX_t)nextVertex;
match.matches[0]=oneVertexMatch;
//2-2 對應
...
}
....
//生成體
PK_BODY_make_lofted_body_o_t options;
PK_BODY_make_lofted_body_o_m(options);
options.end_conditions.periodic = PK_PARAM_periodic_no_c;
options.matches=pMatches;
int failureCode=PK_BODY_make_lofted_body(nProfiles,profiles,vertices,&options,&loft_body)
根據上面的描述,生成的異構體模型如圖4所示,其中,左邊表示生成體所需要的輪廓,右邊是生成的實體。在圖5中,用該函數實現了一個蝸殼體的三維模型構建。

圖4 尾水管放樣生成體

圖5 蝸殼放樣體生成
本文詳細介紹了Parasolid的放樣函數及其使用方法,針對彎肘型尾水管和蝸殼體的實例,用該方法成功實現了異構體三維模型的構建,也證明了該函數可用于其他異構體建模。
[1]鄭春峰,王永皎,何利力.基于 PARASOLID的CAD系統開發[J].計算機應用研究,2006,23(8):216-217,250.
[2]宋 錦,張應中,羅曉芳.基于Parasolid的導動與放樣特征造型的實現[J].計算機輔助工程,2001,10(3):23-28.
[3]潘如剛,錢錦鋒,陳志楊,等.基于Parasolid的CAD系統中螺旋實體的建模[J].計算機工程與應用,2003,39(31):61-63.
[4]林 焰,王忠勇,紀卓尚.基于Parasolid船體結構造型程序設計[J].大連理工大學學報,2000,40(4):473-474.