• 沒有找到結果。

AutoRC 的開發

在文檔中 目錄 (頁 32-63)

4-1 前言

在開發 AutoRC 中包含了兩個個重要的部分,首先進行整體系統 的分析與設計,其次為程式碼的撰寫。在系統分析與設計部份,本研 究先透過功能觀點,將上述章節所擬定出問題內容的解決方式作為構 思AutoRC 的功能依據。再透過靜態觀點來觀看實際的房屋結構,將 實際房屋結構的組成要素物件化。在物件的動態行為分析部分,在此 必須思考其物件與物件之間該如何去合作與溝通。在完成系統分析與 設 計 的 部 份 後 , 本 研 究 使 用 Vi s u a l s t u d i o . N E T 2 0 0 3 程 式 開發工具,並利用C# .NET 語言撰寫本研究之 AutoRC。

4-2 系統分析與設計

本研究所採用的系統分析與設計方式是利用 UML 所提供的三個 觀點來進行,利用功能觀點中的使用案例圖來描述整體系統的目標與 所要提供的功能。利用物件導向技術中抽象化的概念將實際房屋結構 的每個組成要素轉換成物件,再依據每個組成要素之間的關係來建立 物件與物件之間的組合關係,並思考其物件所需定義的屬性,以完成 物件的靜態結構分析。為了完成所規劃的功能與目標,使用者透過程 式介面與結構資料溝通,使其能新增、刪除、編輯、顯示以及運算其 結構資料,並利用 UML 中動態觀點所提供圖形加以詳細的描繪出 來,確定其物件動態行為的合理性,以完成物件動態行為的分析部 分。其三個觀點的系統分析與設計如下所述:

4-2-1 功能觀點分析

由於本研究之主要目標為研究出一個更簡單且直接的前置處理 操作方式,透過第三章的研究問題一節中所提到的簡化介面和操作的 方式以及自動化產生結構設計資料兩個方式來思考其AutoRC 所要提 供的功能,並且確定所要達成的目標。本研究所開發的 AutoRC 主要 功能可分為三個部分,其為輸入基本資料、顯示結構模型以及產生結 構設計資料(如圖4-1),在輸入基本資料部份,可分為結構基本資料、

材料設定、結構模型設定、樓板以及牆設定、載重設定以及斷面設定,

使用者可以經由這五種基本資料的輸入產生初步結構模型,並以電腦 繪 圖 技 術 將 其 所 產 生 之 結 構 模 型 顯 示 於 模 型 檢 視 視 窗 (Mo d e l View),模型檢視視窗提供模型修改功能。使用者可以在此修改結構 模型,以致使模型符合實際所要模擬結構的結構形式,接下來透過 AutoRC 所提供的載重分配、斷面概算功能完成整個結構設計資料的 產生。如上所述,其完整功能分析如使用案例圖(如圖 4-2)所示。

USER

ETABS

* *

*

*

<<extends>>

4-1 前置處理系統使用案例圖

設定材料

載重設定

產生結構模型

載重分配

斷面估算

計算地震力

圖形顯示

調整模型構件

產生結構設計資料 基本資料設定

4-2 前置處理系統完整使用案例圖

4-2-2 靜態觀點分析與設計

一個鋼筋混凝土房屋結構基本上是由梁、柱、樓板以及牆等數種 構件所組成的(如圖4-3):

4-3 結構物基本組成要素示意圖

而就一個構件來說,其所包含了斷面尺寸以及構件材料等資料。除了 房屋結構的外觀資料以外,則還必須考慮其載重資料,例如:靜載重、

活載重以及地震力。最後則是房屋結構的邊界條件資料,例如:房屋 的地基支承等。在整理出所有鋼筋混凝土房屋結構的基本資料後,還 必須找出這些資料相互間的關係。由於一個房屋結構(class Structure)

至少擁有一個以上樓層(class Floor),且每一個樓層又含了四個以上 的門架(class Frame)、一個以上的樓板(class Slab)以及四面以上 的牆(class Wall),每個門架則有梁(class Beam)、柱(class Column)

等構件。在載重(class Load)資料方面,每一個構件都包含所必須 承受的靜載重、活載重以及地震力資料,而結構物最底層構件則包含 地基支承資料。透過以上的組合關係可以明確地將各個構件以及所包 含的資料組合成一個完整的結構物。透過靜態觀點,可以將上述構件 資料繪製成類別圖(如圖 4-4),並在類別圖中詳細描繪各個類別之間 的組合關係。再將上述類別圖繪製成物件圖(如圖4-5)以驗證所規 劃資料結構的是否合理。

透過資料結構分析,可以繪製出房屋結構大略的類別圖,但這只 是說明了結構物中包含了那些類別以及這些類別之間的關係。而每個 類別都還只是個空殼,實際撰寫程式時,必須得詳細定義每個類別的 屬性資料與操作。以梁(Beam)類別來說,除了上述所談到的斷面 尺寸(Section)、材料(Material)以及載重資料(Load)屬性外,詳 細設計梁類別時,梁類別還必須包含起始節點(StartNode)、終點節 點(EndNode)、梁編號(No)、梁長度(Length)以及梁重量(Weight)

等屬性資料,根據物件導向中的物件封裝原則,這些梁構件屬性資料 皆屬於內部資訊不應隨便更動,故這些屬性資料皆設定為私有的

(private),即便往後需要針對梁物件的屬性資料進行修改設定,在

為了不破壞梁物件運作的正確性情況下,必須得透過特定的操作機制 來進行修改設定。在定義類別操作部分,由於靜態觀點主要功能只是 描述一個系統在靜態時的架構,上述所定義的類別皆屬於結構物的靜 態構架資料,此時並無法得知這些類別有哪些操作的部分,其類別操 作部分將在下面結構資料的操作一節中透過動態觀點來詳細定義。每 個類別在經過詳細設計其屬性資料後即完成結構物的資料結構靜態 模型部份。

4-4 資料結構類別圖

4-5資料結構物件圖

4-2-3 動態觀點分析與設計

如上系統的靜態分析所述,將實際的結構物裡的每一個構件透過 物件導向技術的抽象化轉換成物件,利用物件與物件之間的組合關係 塑模而成。但這只是結構物件的靜態藍圖,而程式所提供的功能,還 必須仰賴結構物件之間的動態行為來加以完成。當使用者透過操作介 面執行某些功能時,每一個操作都代表一個事件(Event)的發生,

每一個事件的發生都會傳遞訊息給相關的物件,這些物件接收到訊息 時,可能會執行某些物件的操作(Function),或者是狀態(State)的 改變,這樣的一個程序即為物件的動態行為。利用動態觀點所提供的 圖形,可以將這些動態行為透過以時間為基準或者運作先後順序的 方式加以分析描述。

當使用者利用 AutoRC 進行結構分析前置處理作業時,首先面臨 的第一個操作就是資料的設定,其資料設定方式是採用對話視窗設定 的方式來進行。如圖4-6(資料設定活動圖)所示:

4-6 資料設定活動圖

當使用者按下設定結構基本資料設定視窗,並且開啟資料設定對 話視窗,輸入或者修改所要設定的資料,然後按下關閉按鈕完成設 定。將上述使用者透過介面與結構資料的互動情況對映到物件來表示

(如圖4-7,資料設定順序圖)。

4-7 資料設定順序圖

在 AutoRC 執行時,使用者按下設定結構基本資料按鈕即代表 AutoRC 主視窗(ETBSMain Object , C# .NET 裡的每一個視窗介面都 是一個物件)裡SetStrButton_OnClick()事件的發生,此時 ETBSMain 呼叫CerateStrInfo()函式產生 StrInfo 類別的物件(StrInfo 即為結構基 本資料設定視窗),並傳入 Str 物件參照(Str Object 為 Class Structure

所產生的物件),StrInfo 類別內部也宣告了 Structure 型別的物件參照 Str,當 StrInfo 類別的物件產成時,透過建構子將傳入的 Str 參照與 StrInfo 類別所產生的物件內部的 Str 參照作一個動態聯繫,使得結構 基本資料設定視窗可以取得 Str 物件的屬性資料以及操作。利用 StrInfo_OnLoad()事件的觸發,將 Str 物件的屬性資料結構物名稱、結 構物形式、結構物用途、結構物所在地、樓層數以及總高度資料載入 StrInfo 裡的控制項。由於在資料結構分析設計時,其屬性資料皆定義 為私有的(Private),為了讓 StrInfo 類別所產生物件內的控制項可以 存取Str 物件內的屬性資料,則必須得在 Structure 類別內定義這些屬 性資料的Get 以及 Set 操作函式,最後當使用者設定完畢按下關閉按 鈕時則會觸發 StrInfo 類別所產生的物件內 CloseButton 控制項的 OnClick 事件,將所有設定值透過 Structure 類別所定義的 Set 操 作機制設定其屬性值,並且關閉結構基本資料設定視窗以完成操作。

在使用者輸入完基本資料之後,AutoRC 就會依照使用者所設定 的資料產生初始結構資料,其包含 Str 物件裡的所有 Beam、Column、

Slab 等等物件,在初始結構資料產生完畢時 ETBSMain 就會將這些結 構資料交給 DrawForm 物件繪製結構模型並且顯示。DrawFrom 物件 主要功能除了顯示平面以及立體模型之外,也提供了模型的控制與編 輯的功能。

模型顯示的部份,為了讓使用者可以檢視 AutoRC 根據基本資料 所自動產生的結構模型,以及進行結構模型的編輯,AutoRC 在 DrawForm 物件中提供了結構模型繪製的功能。如圖 4-8(模型顯示 順序圖)所示,DrawForm 物件透過 DrawStructure()函式繪製整個結 構物(Str 物件),Str 物件透過 DrawFloor()函式繪製底下每一樓層

(Floor 物件),而 Floor 物件透過 DrawElement()將底下的每一個

B e a m 、 C o l u m n 以 及 S l a b 類 別 所 產 生 物 件 的 節 點 座 標 利 用 Trans3DPoint()函式轉換成平面座標並且產成繪圖物件(GraphicsPath)

回傳至DrawForm 物件,再由 DrawForm 物件的 ReDraw()函式將所有 繪圖物件繪製在視窗上。在此,為了取得每一個構件在平面座標系統 的位置以及產生繪圖物件,其 Beam、Column 以及 Slab 類別所產生 的物件內必須定義 Trans3DPoint()函式以及 DrawElement()函式,

Trans3DPoint()函式用於轉換其立體座標系統的節點座標,而 DrawElement()函式則是用於將轉換過的座標產生其繪圖物件。

4-8 模型顯示順序圖

控制功能部分,DrawFrom 提供了模型的縮放以及旋轉的功能。

以結構模型縮放為例,如圖 4-9(模型操作活動圖)所示,當使用者 在模型顯示視窗內按下右鍵下拉功能選單並點選縮放功能時,則觸發 DrawForm 物件裡的 Menu_OnClick()事件以及 MenuItem_OnClick()事

件,此時 DrawForm 物件內的 SizeChange 變數變為 True,即表示為 縮放功能開啟,而視窗所顯示的結構模型由靜態展示狀態變為可以改 變大小的狀態,結構模型隨著滑鼠的上下移動即觸發了Mouse_Move() 事件,透過Compute_SizeChange()將滑鼠移動的距離換算成要改變的 大小,並利用 ReDraw()函式來重新繪製結構模型,當使用者再次點 選縮放功能選項,即 SizeChange 變為 False 代表縮放功能關閉,

並回復到靜態模型展示狀態。

Model SizeChange Model Rotate

ComputeSizeChange

ReDraw

ComputeRotateAngle Menu_OnClick( )

MenuItem_OnClick( ) [ SizeChange == true]

MenuItem_OnClick( ) [ isRotate == true]

Mouse_Move( ) Mouse_Move( )

MenuItem_OnClick( ) [

SizeChange == false] MenuItem_OnClick( ) [ isRotate==false]

[SizeChange==false && isRotat==false]

DrawElement DrawElement

Mouse_up( ) Mouse_up( )

4-9 模型操作活動圖

編輯功能部分,其包含兩個動作,首先為選取所要編輯的構件,其次 為執行編輯的動作,如新增或者刪除構件。在選取構件的部份,如圖 4-10(模型構件選取合作圖)所示,DrawForm 物件呼叫本身的 DrawStructure()函式,透過階層的方式由 Str 物件到 Floor 物件再到

在文檔中 目錄 (頁 32-63)

相關文件