• 沒有找到結果。

第二章 研究相關知識

2.3 CORENET

2.3.3 CORENET e-Info

本系統提供一個中央的儲藏庫,儲藏建築物或結構等相關的資料,之前

Lee、Chin 與 Kim(2003)發展一個整合的資訊系統稱為 DIMS(Design Information Management System),著重在於以 IFC 為基礎的繪製資訊之 呈現,此系統結合了排程、評估估價與結構工程資訊,整合來自各方資訊

的 DIMS 透過對建築元件階層式的分類可從多個方面呈現計畫的資訊,

DIMS 也可計算每一種建築構件的數量,並幫助使用者於 3D 系統之中更 清楚辨認出與之相對應的3D 圖形物件[9]。

Halfawy 與 Froese(2005)使用 IFC 於 AEC 專案資料與進程之整合,

AEC 工業整合的趨勢正增加專案系統的實作與使用的需求,標準資訊模 IFC Entity 規格轉換為.Net Framework 類別(Class),再以類別庫(Class Library)封裝。此類別庫提供較直觀的 IFC 應用程式開發方式,並能夠運 用物件導向於系統開發。最後使用所建置之類別庫開發以外掛(Plug-In)為 架構的IFC BIM 系統,並開發一些外掛(Plug-In)元件進一步示範如何應用 類別庫,例如: 3D 建築模型瀏覽、梁柱斷面資訊瀏覽、建築物框架建模等 等外掛(Plug-In)元件[12]。

Faraj 與 Alshawi(1999)等人發展一以網頁與 IFC 為基礎的協同工作的 的文件就能夠與本應用系統共享與交換資訊。另一是透過SDAI(Standard Data Access Interface),未知系統透過此介面也能與本應用系統共享與交

換資訊。最後是一致性測試,要對實現IFC 標準的應用軟體進行測試,無 論何時、何地,測試結果都必須一致,並透過紀錄來檢查測試步驟的正確 性,一致性測試在資訊共享與交換的“質”與“量”給予保證[14]。

第三章 系統架構分析

本章將對整體理念的系統架構作概觀的介紹,對要開發實作的系統架 構進行分析與說明,並做兩者的比較。之後對開發工具用IFCEngine OCX

& DLL 做功能的介紹,並說明 OCX 與 DLL 原理,再對製作網頁用到的

IFCEngine OCX&DLL 為 TNO 公司所開發的應用程式,分為 OCX 檔

(.ocx)與 DLL 檔(.dll)兩部分,是一個 IFC 資料存取的應用程式介面(API, Application Program Interface),目前最新板本為 1.02,但是在實作時 1.02 板本尚未釋出,所以整個實作過程都是用 1.01 板本,1.01 板本可支援 IFC2x2 與 IFC2x3。

TNO 公司免費提供學術研究及非營利用途使用,若要使用在商業用途 則必需付費。此應用程式為Windows 平台下的 DLL 元件,使用 Microsoft Visual C++編譯器建置,使用此 API 需要 C 程式語言的基礎,因為其用到 許多指標(pointer)來操作資料,而且 Visual C++與一般 C++尚有些許不 同,這部份可以上網msdn( Microsoft Developer Network )或找相關書籍 參考。

IFCEngine DLL 根據 Standard Data Access Interface (SDAI, ISO 10303-22)設計,SDAI 定義為以 STEP 建模之模型的資料存取介面,這 些資訊存取的方式相當低階,使用上繁雜,但效率高[15]。

IFCEngine OCX 為開發出來更容易使用 IFCEngine DLL 的 ActiveX 控制項,這ActiveX 控制項能夠嵌在其他應用程式上,本研究即是將 OCX 嵌在IE 網際網路瀏覽器應用程式中。而在此 OCX 中有 3D 模型瀏覽的 3D viewer 之功能,所以若要使用 IFCEngine OCX 必須安裝有 DirectX 8 或 更新的板本。IFCEngine OCX 只支援部份的 SDAI 功能,但是 IFCEngine OCX 是公開原始碼的,所以使用者能夠任意修改或是新增所需功能[16]。

以下介紹一些有用到的API:

sdaiOpenModelBN

用於開啟一個檔案,需指定檔案的所屬的schema,回傳 ModelID。這邊 我們用來開啟一個IFC 檔。

sdaiCloseModel

用於關閉一個檔案,但這個檔將不被儲存。這邊我們用來將已開啟的IFC 檔關閉。

initializeModelling

用於在程式的3D viewer 啟動前做初始化的動作,決定 3D viewer 的規模 (scales),也就是 3D 瀏覽器的大小,並回傳儲存 indices 與 vertices 所需 的空間。

sdaiGetEntity

從Model 中藉由 Entity 名稱取得 Entity 物件,回傳 InstanceID。

sdaiGetEntityExtentBN

從Model 中藉由 Entity 名稱取得一組 Entity 物件,回傳 aggregate ID,

再藉由engiGetAggrElement 函式去取得 Instance ID

sdaiGetMemberCount

傳回特定聚合 Instance 的成員數目。在程式中有些 Instance 的資料型態 是由多個 Instance 所組合形成的聚合型態(aggregate),我們要知道是由 多少個 Instance 所聚合才有辦法抓取聚合 Instance 中的特定成員,此函 數輸入aggregate ID 就可得知是由多個 Instance 所組合。

sdaiGetAttrBN

藉由 Instance ID、屬性名稱及類型取得該屬性的內容。這是一個很重要 的函數,我們使用它來擷取Instance 的屬性。

IFCEngine OCX&DLL 所提供的基本功能,可分成兩部份,第一部份 是3D viewer 展示,第二部分是雙擊(double click)物件就可以顯示該物件 的基本屬性。

1. 3D viewer 展示

建築CAD 繪圖軟體發展至今,幾乎都支援 3D 展示瀏覽的功能,就是 3D viewer,這可以方便我們以立體的角度來看我們從平面設計的物件,

以確保畫出來的是我們所想要的,在IFC Engine OCX&DLL 應用程式介 面中也有提供3D viewer 的功能,此 3D viewer 也提供一般 3D 瀏覽時所 提供的功能,有拉近拉遠(zoom 如圖 3-2-1)、旋轉(rotate 如圖 3-2-2)、

拖移(pan 如圖 3-2-3)等等功能,並有額外的兩個功能:正視觀察(reset front 如圖 3-2-4)與側視觀察(reset side 如圖 3-2-5),讓我們方便調整方 向以想要的角度來觀察物體。

而將檔案載入3D 展示瀏覽器的是一個“Load IFC File"的功能,內 部的語法是將“fileName"這個變數的值指向 IFC 檔所在的網路位置,例 如 fileName='http://www.ifcbrowser.com/test.ifc',所以如果要讀入新的 IFC 檔案,只需要將新檔案的網路位置傳給 fileName 即可。

2. 基本屬性擷取

IFCEngine OCX&DLL 提供一個基本的功能,就是用滑鼠指標雙擊

進而呼叫 OCX 中的 doubleclick()這函數,此函數會回傳被滑鼠所點到的 物件ID,有了這 ID 就可當作參數帶入一些函數中求得該物件的一些基本 屬性,例如 sdaiGetStringAttrBN(id,attribution),而一般物件基本的屬性 值有GlobalId、Name、Description、ObjectType 等等(如圖 3-2-6 所示)。

不過這些預設提供的資料對我們來說是不夠的,所以我們必須改寫或自行 新增一些函數來擷取想要的資料,以利我們做一些運算與比較。

3.3 DLL 說明

DLL 全名為 Dynamic Link Library,中文譯為動態連結函式庫,DLL 也可以說是一種執行檔,但是 DLL 中的程式碼只能被其他執行檔或 DLL

就逐漸發展出分享式函式庫(Shared Library),而 Win32 平台則發展出動 態連結函式庫(Dynamic Link Library)。由於動態連結函式庫的函式的程式

碼是在應用程式載入或是執行階段才與應用程式相連結,也就是說,函式 開發。ActiveX 控制項是一種可以被執行的檔案,像是 OCX、DLL 或是 EXE 檔案,除了 EXE 檔案外,其它如 OCX 或 DLL 必須要在其它的應用 冊後才可以使用,在IFCEngine DLL&OCX 此應用程式介面裡,已經將註 冊 OCX 的語法寫成一個批次檔(.bat),我們只要執行該批次檔就可以將 OCX 檔註冊,其實註冊的語法很簡單,在命令提示位元切換到 OCX 所在 資 料 夾 , 輸 入 regsvr32 filename.ocx 即可。運作方式如圖 3-4-2,

CAB 格式為微軟的封包檔,為一壓縮封包,可包含多個相關的檔案。封 包檔格式為最佳的壓縮率。IFCEngine DLL&OCX 中也將打包 CAB 檔的 指令寫成一個批次檔,我們只要執行該批次檔就可以將OCX 檔、DLL 檔 就IFCEngine DLL&OCX 所提供的功能加以應用,若真的要深入底層只能 聯絡作者,付費就能得到原始碼。DLL 檔裡的內容大致是對 IFC 格式的解 碼(parse)。IFC Engine DLL&OCX 運作原理如圖 3-4-1。

3.5 CGI 說明

CGI 全名 Common Gateway Interface 一般中譯為共用閘道介面,是 介於客戶端(Client)和伺服器端(Server)的一種通訊介面,客戶端可透過此 (.exe)而是編譯成 CGI 檔(.cgi),這邊我們所使用來架設網頁伺服器的軟體 是Apache http server,這是一個免費且好用的軟體,所以使用率很高,

參數傳遞機制我們用post,原因是 get 傳遞機制會將變數名稱與輸入的值

連接到網址後面,如圖 3-5-1 所示,這不僅沒有隱私且這方法只能傳有限 長度的資料,一旦資料量增多,可能會無法傳遞資料,而 post 傳遞機制 中輸入的值會被當做是 Standard_input 也就是當成外在輸入,我們可以 在程式中去抓取,不過不論是 get 機制或 post 機制,傳遞過來的資料都 是以變數名稱 A=值A&變數名稱 B=值B&…,所我們必須一個個變數去作 分析(parse)的動作,將所需的值濾出來作為程式的 input,而字串分析這 麻煩的動作已經有很多熱心的人寫好程式給我們用了,所以我們不用額外 費心自己去撰寫,這類程式網路上已經有很多可以下載,而我用的是網路 上找到的util.c 這個 C 程式來幫我做解析。

第四章 系統實作與開發

本章將說明實作系統的過程,先用JSP 動態網頁技術實作檔案上傳的 功能。再改寫IFC Engine DLL&OCX 的原始碼,以新增一些功能,讓使 用起來更便利。再以IFC 檔案開啟程式 IFCQuickBrowser 來幫助分析 IFC 檔案格式,並依據 IFC 格式撰寫一個產生柱筋 IFC 圖檔的程式,並將該 程式以CGI 的技術應用於網頁。最後利用 IFC Engine DLL&OCX 內的 API 來擷取IFC 檔案內物件的資料,擷取這些資料與規範比對進行審核。

4.1 檔案上傳系統

檔案上傳系統流程如圖 4-1-1 所示,於上傳頁面(index.htm)運用 javascript 語法來限制只能選擇副檔名為.ifc 的檔案上傳,並以訊息視窗來 警告使用者(如圖 4-1-2),以免系統讀入不符的檔案造成毀損或當機,再 來架設資料庫系統,使用的資料庫軟體為 Microsoft Office ACCESS 2003,並以網頁伺服器架設軟體 Tomcat HTTP Server 來搭配動態網頁技 術JSP(Java Server Pages),JSP 文件主要是以 Java 語言來開發,為提 供網頁應用程式發展的語法,負責網頁與網頁間參數的傳遞,還有網頁與 資料庫間的溝通,來達成對資料庫中資料的存取或變更等等,這邊使用的 Tomcat HTTP Server 為 Tomcat 4.1,Java SDK 的板本為 6.0,並使用 Advantys 公司所撰寫的檔案上傳的元件 jspSmartUpload,來幫助我們實 作上傳的機制,此元件是免費的,使用時需要將它包含(include)進來,語 法為<%@ page import="com.jspsmart.upload.*" %>,這樣一來我們就能 建立SmartUpload 類別的物件,以此物件來使用 SmartUpload 類別所提 供的上傳相關函數。在此用到的函數有:

initialize(pageContext) 初始化上傳或下載的相關工作 Apache HTTP Server 中的資料夾,並且在資料庫 ACCESS 裡紀錄上傳 檔案的檔名,若順利儲存完成,網頁則顯示上傳成功,並有功能項目的超 連結引導使用者往下一個功能,而本研究中只針對了檢核功能做實作。詳 細內部運作流程如圖 4-1-3 所示。

進入了檢核頁面,而這頁面就是原本IFCEngine OCX&DLL 應用的頁

進入了檢核頁面,而這頁面就是原本IFCEngine OCX&DLL 應用的頁

相關文件