趙凱華,張璐琦,余 軍,張建宏
(1.黃河勘測規(guī)劃設(shè)計有限公司,河南 鄭州 450003;2.黃河流域水資源保護局,河南 鄭州 450004)
GenerativeComponents(以下簡稱GC)是Bentley公司開發(fā)的一款基于MicroStation平臺的關(guān)聯(lián)參數(shù)化建模系統(tǒng),其最早提出是在2003年,后來由于其工程實踐的突出表現(xiàn)(尤其是倫敦的瑞士再保險塔)逐漸進入了公眾視野,2007年商業(yè)版本GC正式發(fā)布。
其優(yōu)點是能夠靈活地創(chuàng)建各類幾何形體,支持各種幾何和邏輯可能性,為工程師提供了全新的設(shè)計方式。GC采用圖形方式展示元素及相互關(guān)系,支持有效展示與重用設(shè)計方案。使用GC,工程師既可完全采用圖形方式工作,也可適時將圖形與腳本和編程結(jié)合使用。GC的參數(shù)化規(guī)則和關(guān)系式用戶自定義的,通過界面圖形操作和腳本編程的混合方法,設(shè)計師能夠使用GC模擬出各類幾何結(jié)構(gòu),并且每一個對象都能記錄自己的創(chuàng)建方式。
在水利工程中,對于拱壩、蝸殼、尾水管、叉管等異形結(jié)構(gòu)眾多,設(shè)計計算和繪圖復(fù)雜,工作量、出圖量大,利用GC技術(shù)研究水利工程異形結(jié)構(gòu)具有良好的應(yīng)用價值,可以方便地完成三維建模,并且更改參數(shù)便可方便快速完成方案修改。
拱壩是一種建筑在峽谷中的攔水壩,做成水平拱形,凸邊面向上游,兩端緊貼著峽谷壁,是一種經(jīng)濟性和安全性都很好的壩型。其主要參數(shù)有:拱弧的半徑、中心角、圓弧中心沿高程的跡線和拱厚。按照拱壩的拱弧半徑和拱中心角,可將拱壩分為單曲拱和雙曲拱。
雙曲拱是拱壩中最具有代表性的壩型,其水平向彎曲可以發(fā)揮拱的作用,豎直向彎曲可實現(xiàn)變中心、變半徑以調(diào)整拱壩上下部的曲率和半徑。一般情況,上部半徑大些,可使拱座推力更指向岸里;下部半徑小些,可適當(dāng)加大下部中心角以提高拱的作用。因此,雙曲拱壩一般均采用變中心、變半徑布置。這樣結(jié)構(gòu)設(shè)計更合理,但建模時體形計算很復(fù)雜,特別在施工詳圖設(shè)計階段,各種參數(shù)的計算和圖形繪制工作非常繁雜,有時甚至是手工無法完成的。利用計算機進行參數(shù)化三維設(shè)計可大大減少工作量,提高設(shè)計精度[1]。
GC在拱壩三維設(shè)計上,國內(nèi)已經(jīng)有人做了一定應(yīng)用研究[2-3],但是研究的深度和適用的壩型有限,本文中研究的拱壩類型具有代表性,由于其特殊的要求,設(shè)計更復(fù)雜,有必要利用GC對其進行研究建模以更好地對設(shè)計提供技術(shù)支持。
對于拋物線雙曲拱壩來說,其水平及豎向截面都是曲線形。因此,可以需要通過創(chuàng)建各層水平面上曲線,根據(jù)水平面上的曲線分別擬合出上下游的拱面,在根據(jù)上下游拱面生成壩體。所以,利用GC進行參數(shù)化建模的技術(shù)路線如下。
(1)定義參數(shù),提取出拱壩的一些特征參數(shù),包括壩頂高程、壩底高程以及相鄰特征拱圈的距離、每一個拱圈上特征點的個數(shù),以及拱冠厚度、左右拱端厚度、弦長、大壩分縫的控制參數(shù)等。
(2)根據(jù)壩體高程范圍,高程進行離散。每個高程的拱圈根據(jù)公式,計算每層拱圈上特征點的坐標(biāo)。
(3)根據(jù)(2)中得到的拱圈上特征點的坐標(biāo),生成每層拱圈的特征點。
(4)根據(jù)(3)生成的特征點,分別擬合出拱壩上游面和下游面。
(5)根據(jù)(4)擬合的上下游拱面,生成壩體。
(6)將壩體進行分區(qū)。
(7)完成表孔、中孔、閘墩、交通橋等壩上建筑物建模。
對于雙曲拱壩,其體型通過上下游壩面形狀來控制,而上下游壩面的控制點要通過每一層拱圈上的特征點來確定;上下游壩面的拱圈數(shù)目、每層拱圈上特征點數(shù)目越多,則壩面控制越精確;但是拱圈個數(shù)及拱圈上特征點的增加,必將造成計算量的增大,造成繪圖效率的降低。因此,在工程誤差允許范圍內(nèi),應(yīng)選擇合適的拱圈個數(shù)及每層拱圈上特征點的個數(shù)。表1和表2為確定典型拱壩體型的控制參數(shù),保存在Excel表格以便GC直接調(diào)用。
定義完特征參數(shù)后,需在壩體高程范圍內(nèi)對高程進行離散。然后根據(jù)設(shè)計文件,對于每一個特定高程拱圈中心線按照式(1)確定其特征點位置。表1中給出了拱冠厚度為Tc、左拱端厚度為Tar、右拱
端厚度為Tal、左拱中心線拱冠處曲率半徑為Rcr、右拱中心線拱冠處曲率半徑為Rcl的插值參數(shù)。表2給出了右拱圈弦長Xr,為左拱圈弦長Xl及拱冠厚度為Tc在各個高程上的取值。拱圈形狀及各幾何參數(shù)說明如圖1所示,各幾何參數(shù)插值系數(shù)按表1取值,插值公式按式(2)計算。
圖1 拱圈形狀及參數(shù)說明示意圖
(1)
式中,R—拱冠處曲率半徑,對于左拱段R取Rcl,對于右拱段R取Rcr,m;Yc—y軸截距,m。
F0(Z)=α0+α1Z+α2Z2+α3Z3
(2)
式中,F(xiàn)0(Z)—高程為Z拱圈的幾何參數(shù),m;Z—相應(yīng)拱圈所在的相對高程,按式(3)計算,m;α0,α1,α2,α3為表1中對應(yīng)的插值系數(shù)。
Z=Z頂-z (3)
表2 拱圈體型參數(shù)表 單位:m
式中,z—拱圈所在的絕對高程,m;Z頂—拱壩壩頂絕對高程,m。
確定拱冠處厚度Tc后,式(4)為平面拱圈各部位厚度與弧長的關(guān)系。根據(jù)拱圈各部位的厚度,計算得到上下游拱圈上特征點,然后根據(jù)所有的特征點來擬合得到上下游拱面,從而生成壩體。
Ti=Tc+(Tai-Tc)(Si-S)2
(4)
式中,Ti—拱圈任意位置厚度,m;Tc—對應(yīng)拱圈拱冠厚度,m;Tai—拱端的拱冠厚度,對于左拱端Tai取Tal,對于右拱端Tai取Tar,m;S—左側(cè)段或右側(cè)段拱圈中心線總長度,m;Si—拱圈中心線上任意點至坐標(biāo)原點的中心線弧長,m。
據(jù)此,在高程上每隔一定高程按式(1)生成足夠多控制點,如圖2(a)所示;然后用B樣條曲線擬合每一條拋物線,如圖2(b)所示;根據(jù)式(4)計算得到控制點處的拱圈厚度Ti,以控制點為起點,分別向拱圈中心線內(nèi)法向和外法向生成長度為Ti/2的線段作為上下游拱面的控制線,如圖2(c)所示;利用控制線的起點和終點分別生成上下游拱面,生成圖2(d)所示壩體。
圖2 利用GC生成各層拱圈中心線拋物線
根據(jù)設(shè)計需要,大壩須設(shè)置橫縫,橫縫為鉛直面,按接近徑向布置。設(shè)置依據(jù)為y軸截距B和橫縫與y軸交角φ,數(shù)據(jù)見表3。在圖1中依據(jù)B和φ確定橫縫所在平面,如圖3(a)所示,從左
圖3 模型橫縫設(shè)置示意圖
拱壩上部的建筑物包括泄洪表孔、中孔、中孔門、交通橋等,由于涉及的細節(jié)數(shù)量多需要創(chuàng)建大量的Transactions去實現(xiàn),這些Transactions記錄下了整個模型的點、線、面、體的生成過程,以及求交線,拉伸成體、布爾運算等過程。圖4(a)為GC的Transactions窗口,生成的拱壩及其上部建筑物如圖4(b)、4(c)所示。
圖4 GC生成的拱壩模型
參數(shù)化設(shè)計要求模型具有數(shù)據(jù)驅(qū)動能力,在這方面GC具有從數(shù)據(jù)庫、Excel表格讀寫的模塊,能夠方便的實現(xiàn)和數(shù)據(jù)庫、Excel之間的數(shù)據(jù)交換,為參數(shù)化建模提供了便利。本文采用Excel表格對
表3 大壩橫縫位置表
參數(shù)進行統(tǒng)一管理,在GC中讀入這些參數(shù),再通過腳本編程來實現(xiàn)參數(shù)化建模;要實現(xiàn)方案修改,只需在Excel中修改相應(yīng)參數(shù)即可,提高了三維設(shè)計的效率。
對于拱壩,設(shè)計方案修改一般會涉及孔數(shù)、孔寬以及孔中心線的偏移等影響壩上建筑物布置的參數(shù),以及拱冠中心店坐標(biāo)、拱冠厚度、左右拱端厚度、左右拱中心線拱冠處曲率半徑、左右弦長、分區(qū)用到的夾角、截距等影響拱壩形體的參數(shù)。
以拱冠厚度和左右弦長為例,對設(shè)計方案進行修改。在表1中拱冠厚度Tc對應(yīng)的參數(shù)進行調(diào)整,α0取值增加到7.002872,左右弦長均增加2m,然后重新生成模型如圖5所示。
圖5 拱壩體型調(diào)整
石門坎水電站位于云南省思茅市墨江縣和普洱縣交界的把邊江上,為云南省李仙江流域水電梯級開發(fā)7個梯級電站中的第2級,引水式電站。水庫正常蓄水位756m,死水位740m,總庫容為1.97億m3。電站已于2007年1月17日開工,2008年11月14日大江截流,2010年5月下閘蓄水,2010年6月投產(chǎn)發(fā)電。石門坎壩體為圓弧形雙曲拱壩[4],最大壩高111m,拱壩體形采用拋物線雙曲拱壩。
設(shè)計時從650m高程到758m高程,每隔2m做一個特征拱圈,用變量z表示拱圈所在高程,用Z表示對應(yīng)相對高程,在GC中可以通過如下腳本語句實現(xiàn):
feature User.Objects.zBentley.GC.Features.GraphVariable
{Value=Series(650, 758, 2);}
feature User.Objects.ZBentley.GC.Features.GraphVariable
{Value=758-z;}
設(shè)計參數(shù)存放在Excel表格中,然后用GC從Excel中獲取相應(yīng)參數(shù)。但是,這之前需要裝載Excel庫,然后才能用ExcelRange特征。GC獲取Excel中參數(shù)可通過如下腳本語句實現(xiàn):
feature User.Objects.excelRange01 Bentley.GC.Features.ExcelRange
{
RangeAddress =″B2∶E7″;
SheetName =″Sheet1″;
WorkbookFileName =″E:GCSMK.xlsx″;
}
每層拱圈中心線的左半拱和右半拱分別取50個控制點,用B樣條曲線擬合拱圈中心線拋物線方程,確定拱圈中心線特征點坐標(biāo)GCScript函數(shù)為:
feature User.Objects.graphFunction02 Bentley.GC.Features.GraphFunction
{
Definition=Point function(out Point leftPts, out Point rightPts, out Point centerPts)
{
double count=Z.Count;
double maxX=graphFunction01(); // 獲取左右弦長范圍
double xPos, yPos; // 記錄拱圈中心線點坐標(biāo)x、y坐標(biāo)
double xRStep, xLStep; // 左右拱圈部分橫坐標(biāo)變化的步長
leftPts={};rightPts={}; centerPts={} //左右拱圈控制點
for(int i=0;i < count; i++){
xLStep=maxX[i][1]/(numPt-1); //獲得右側(cè)弦長離散的步長
leftPts[i]={}; //右側(cè)拱圈特征點初始化
for(int j=0 ; j < numPt; j++){
xPos=j*xLStep;
yPos=-xPos*xPos/2/Rcr[i]+Yc[i];
leftPts[i][j]=new Point();
leftPts[i][j].ByCartesianCoordinates(baseCS,xPos, yPos, Z[i]);
}
rightPts[i]={}; //左側(cè)拱圈特征點初始化
xRStep=maxX[i][0]/(numPt-1); //獲得右側(cè)弦長離散的步長
for(int j=0 ; j < numPt; j++){
xPos=-j*xRStep;
yPos=-xPos*xPos/2/Rcl[i]+Yc[i];
rightPts[i][j]=new Point();
rightPts[i][j].ByCartesianCoordinates(baseCS,xPos, yPos, Z[i]);
}
centerPts[i]=RemoveAt(Union(Reverse(leftPts[i]),rightPts[i]), numPt);
}
};
}
需要利用特征點坐標(biāo),用B樣條曲線擬合得到拱圈中心線近似拋物線方程,GCScript函數(shù)實現(xiàn)語句為:
feature User.Objects.graphFunction03 Bentley.GC.Features.GraphFunction
{
Definition=function (int index)
{ int count=Z.Count;
BSplineCurve childBSpline={};
for(int i=0; i < count; i++){
childBSpline[i]=new BSplineCurve(this);
childBSpline[i].ByPoints(leftPts[i]);
}
return childBSpline;
};
}
做出上下游拱面控制線后,利用控制線的起點和終點獲得拱面,通過如下腳本語句實現(xiàn):
feature User.Objects.bsplineSurface01 Bentley.GC.Features.BSplineSurface
{ Points =line09.StartPoint; }
feature User.Objects.bsplineSurface02 Bentley.GC.Features.BSplineSurface
{ Points =line09.EndPoint; }
利用上下游拱面生成壩體,通過如下腳本語句實現(xiàn):
feature User.Objects.solid01 Bentley.GC.Features.Solid
{ Surface0=bsplineSurface01; Surface1 =bsplineSurface02; }
壩上建筑物部分設(shè)計眾多細節(jié),主要也是通過類似的點、線、面、體進行實現(xiàn),不再一一說明。
在方案修改后,包括壩體、上部建筑物在內(nèi)整個模型更新共用時12min 40s,能夠較快實現(xiàn)設(shè)計變更。
以典型拋物線雙曲拱壩為例,介紹了GC三維建模的技術(shù)思路,能夠適用于大多數(shù)拱壩的三維設(shè)計。在石門坎拱壩的實例應(yīng)用表明,GC能夠很好地支持異形結(jié)構(gòu)體建模,支持設(shè)計方案重用,適用于水利工程、特別適用于異形結(jié)構(gòu)體的三維建模。