2018-11-01

程式解析公開地形模型資料測試

目前台灣政府開放了相當多的資料上網,
其中有一組資料是台灣附近20公尺網格數值地形資料,
https://data.gov.tw/dataset/35430
也就是工程上常說的DEM或DTM,
當然,20公尺的解析度可能無法拿來做工程用途,
但對資料工程師來說,
資料處理的問題都只有「量」與「質」的差異,
需要精度更高的特定範圍資料,
應該要由專業的測量公司協助提供。

另外一組新版資料 https://data.gov.tw/dataset/88733
在筆者撰寫此文章時測試完畢後部份花蓮資料有缺失,
相信不久後應該會被修正,
所以本文還是以上一組資料進行說明。

本文簡單的說明一下如何用程式技巧來處理 大約2.5G的台灣地形資料,
為了方便展示,筆者使用了Python跟C#來做立體圖表及平面的處理。

首先,
從上述政府開放資料平台下載該資料
解壓縮後有12,508個檔案 19個資料夾 (本測試並沒有納入澎湖縣)
打開內部的檔案來看一下,
除了有資料來源說明之外,
另外就是每個點的二度分帶座標及高程。

如果眼尖一點會發現有一些 -999 的存在,
估計可能是海面等無法量測的區域,
後續處理的時候就直接排除或處理成透明資料。

首先我們先用簡單的Python工具去將這個圖表以Mesh3D的方式畫出來,
工具非常的多,這邊我挑一個容易展示的Plotly來使用,
這裡我以桃園的某個區域進行測試,
範圍約2.5km * 2.5km,圖表不照實際比例。


關鍵Python程式碼如下:

import plotly.plotly as py
import plotly.graph_objs as go
xdata=[]
ydata=[]
zdata=[]
dem = open('E:/TY_DEM/96221012dem.grd','rt')
for x in dem:
    point = x.split()
    xdata.append(float(point[0]))
    ydata.append(float(point[1]))
    zdata.append(float(point[2]))
trace = go.Mesh3d(x=xdata,y=ydata,z=zdata,color='#FFB6C1',opacity=0.50)
fig = go.Figure(data=[trace])
py.plot(fig)

當然,相同的方法也可以套用在整個桃園區:

甚至是整個台灣:

只是點位數量有所限制,
需要做一點前處理,
但因為這個圖表工具本身並非處理地形使用,
在比例上並不正確,
資料處理後的精度也並不足以表現地貌,
這裡僅是用來展示大致的資料內容。

但很明顯的,
圖表工具並不適合來展示複雜地形資料,
單純的平面地圖配合顏色反而是很適合的工具。

先來畫一下整個桃園區:
藍色大約是高程 0~750公尺,
綠色大約是高程 750~1500公尺,
紅色則是高程超過 1500公尺。

進一步我們來看一下整個台灣畫出來的結果:
因為高程變化更大了,
這裡分的更細一點,
強化平原的細節,弱化了高山的部份,
藍色大約是: 0~ 250 m
黃色大約是: 250 ~ 750 m
紅色大約是: 750 ~ 1750 m
青色大約是: > 1750 m

C#關鍵程式碼如下:

Bitmap bmp = new Bitmap(width, height);
string[] filePaths = Directory.GetFiles(@"E:\DEM\", "*.grd", SearchOption.AllDirectories);
foreach (string file in filePaths)
{
    using (StreamReader sr = new StreamReader(file))
    {
        string tmp;
        while ((tmp = sr.ReadLine()) != null)
        {
            string[] point = tmp.Split(' ');
            int xx = Convert.ToInt32((Convert.ToInt32(point[0]) - x_offset) / scale);
            int yy = height - (Convert.ToInt32((Convert.ToInt32(point[1]) - y_offset) / scale));
            int zz = Convert.ToInt32(Convert.ToSingle(point[2]));
            if (xx < 0 || yy < 0 || xx > width || yy > height || zz<0)
                continue;
            if (zz < 255)
                bmp.SetPixel(xx, yy, Color.FromArgb(255 - zz, 255 - zz, 255));
            else
            {
                zz = (int)(zz - 255)/2;
                if (zz < 255)
                    bmp.SetPixel(xx, yy, Color.FromArgb(zz, zz, 255 - zz));
                else
                {
                    zz = (int)(zz - 255) / 2;
                    if (zz < 255)
                        bmp.SetPixel(xx, yy, Color.FromArgb(255, 255-zz , 0));
                    else
                    {
                        zz = (int)(zz - 255) / 2;
                        if (zz > 255)
                            zz = 255;
                        bmp.SetPixel(xx, yy, Color.FromArgb(255 -zz , zz, zz));
                    }                                
                }
            }
        }
    }
}
bmp.Save("TW.bmp");

以本案例來說,
成果的檔案約113MB,
差不多可以放大到這種程度。



後續我們也測試了很多相關的進階應用,
例如把所有資料存入資料庫,
處理成Mesh、計算挖填方體積等,
從工程需求的角度來處理地形資料,
但就比較不適合套用在這個資料集進行展示。

最後,感謝政府資料開放平台 及 內政部地政司 提供資料,
讓我們可以在合理的授權下對資料進行加值應用及展示。

2018-06-24

IFC的物件導向架構

在開始閱讀本文之前,
您應該已經對於 IFC的作用IFC的優缺點有一定的了解,
更進一步,如果您了解
一、物件導向 (Object-oriented)
二、繼承 (Inheritance)
三、多型 (Polymorphism)
四、抽象 (Abstraction)
這些概念的話,會對閱讀本文有所幫助,
如果不懂也沒關係,我會盡量簡單的在本文中介紹其原理。

一、物件導向 (Object-oriented)
IFC本身是採用物件導向架構,
而物件導向是一種「以真實世界的狀態」來描述資料的方式,
物件導向最基本的組成概念有三個:
1. 物件 (Object):
或稱為實體(Instance),基本概念就是一個實際上存在的東西,例如一台車牌是ABC-1234的Tesla Model X,或一本名為哈利波特第一集的書本都可以視為一個物件。
2. 類別 (Class):
基本概念就是一個物件的分類名稱,例如汽車、書本,都可以視為一個類別。
3. 屬性 (Properties):
基本概念就是一個物件的資料,例如「車牌」是「ABC-1234」,這裡的「車牌」就是一個屬性,而「ABC-1234」就是這個屬性的值。

當然,套用到AEC產業常見的狀況,
類別可能是「柱」,物件可能是的「混凝土柱」,
屬性可能有「名稱」為「C14」、「材質」為「混凝土」、「強度」為「5000psi」

套用一個最簡單的卡氏座標點的IFC資料行來看:
#43516 = IFCCARTESIANPOINT((7820.2955167228, 610.415423053157,514.28509535737));
其中類別就是IFCCARTESIANPOINT,物件代碼是#43516
屬性是 (x,y,z)(7820.2955167228, 610.415423053157,514.28509535737)
以上便是最基本的物件導向應用於IFC之架構。

二、繼承 (Inheritance)
類別之間有繼承關係,這個常會用「父」與「子」的關係來說明,
簡單來說,「子類別」會具有「父類別」的所有屬性,
但「子類別」通常會比「父類別」更具體一些,
例如「車」的子類別可能有「汽車」、「機車」、「腳踏車」,
在IFC裡面,地址的定義描述如下:
ENTITY IfcAddress
ABSTRACT SUPERTYPE OF(ONEOF(IfcPostalAddress,IfcTelecomAddress))
Purpose : OPTIONAL IfcAddressTypeEnum;
Description : OPTIONAL IfcText;
UserDefinedPurpose : OPTIONAL IfcLabel;
END_ENTITY;

從上述定義可以發現,地址類別又分成兩種子類別,
一種是「郵件地址」另一種是「通訊地址」,
另外其他的欄位是非必要欄位,在這裡先不解釋。

「郵件地址」的定義描述為:
ENTITY IfcPostalAddress
SUBTYPE OF (IfcAddress );
InternalLocation : OPTIONAL IfcLabel;
AddressLines : OPTIONAL LIST [1:?] OF IfcLabel;
PostalBox : OPTIONAL IfcLabel;
Town : OPTIONAL IfcLabel;
Region : OPTIONAL IfcLabel;
PostalCode : OPTIONAL IfcLabel;
Country : OPTIONAL IfcLabel;
END_ENTITY;

「通訊地址」的定義描述為:
ENTITY IfcTelecomAddress
SUBTYPE OF (IfcAddress );
TelephoneNumbers : OPTIONAL LIST [1:?] OF IfcLabel;
FacsimileNumbers : OPTIONAL LIST [1:?] OF IfcLabel;
PagerNumber : OPTIONAL IfcLabel;
ElectronicMailAddresses : OPTIONAL LIST [1:?] OF IfcLabel;
WWWHomePageURL : OPTIONAL IfcLabel;
END_ENTITY;

從這邊可以發現,兩種是完全不同的描述方法,
但都可以讓視為一個人的聯絡方式,
且都有幫你完整的考量各種情境,
例如Pager(呼叫器)可能在某些地區還是主要的聯繫方式,
這也是採用國際通用格式的一種好處。

三、多型 (Polymorphism)
簡單來說,就是可以用「父類別」來代替「子類別」進行定義描述,
而在實際產生物件的時候,再給予實際的類別即可。

聽起來有點複雜,我們用IfcOrganization(組職)來看,
ENTITY IfcOrganization;
Id : OPTIONAL IfcIdentifier;
Name : IfcLabel;
Description : OPTIONAL IfcText;
Roles : OPTIONAL LIST [1:?] OF IfcActorRole;
Addresses : OPTIONAL LIST [1:?] OF IfcAddress;
END_ENTITY;

在組職中,其中有一個欄位是地址,
這個欄位的定義是 IfcAddress
但實際在建置該物件時,
該屬性可以填入IfcPostalAddress 或 IfcTelecomAddress
這就是最簡單的「多型」的概念。

四、抽象 (Abstraction)
抽象其實就是一個「不會有實體的父類別」,
例如剛剛的IfcAddress定義裡有一個關鍵字「ABSTRACT」,
即為抽象類別,該類別不會有實體物件,
只會被拿來當作一個代稱,
常見的範例有「車」、「狗」、「貓」、「人」等,
不會有一個實體的東西叫做「車」,至少會是個「汽車」,
但你可以稱一台「汽車」為「車」。

了解上述四個定義,就可以看懂IFC的基本物件定義,
詳細的IFC定義可以直接從官方網站取得。

2018-06-04

如何檢討帷幕分割的施工性

最近剛好在協助審查一個廠商所提的帷幕分割計畫,因為建築的西南角是一個特殊的曲牆設計,其R值是隨著樓層高度而變化,除此之外,圓心的位置也在變化,如下圖1,不同顏色的弧線代表不同高程的外牆線。
圖1 依高程變化的圓弧外牆

此看似規則實際上不規則的曲面,廠商希望要以寬度1181mm的矩形單元分割方式來實現這個曲面,下面我們將會試著驗證這個想法的可行性。
模擬方法如下:
  1. 將不同的圓曲線放置到對應的高程位置(如下圖2),並依此排列以混成曲面的方式建立曲面,此曲面相當於完成面。
  2. 圖2 以空間中的圓曲線產生完成面

  3. 依廠商提供的數據,已完成面的曲線退縮(offset)122.5mm得到新的曲線(如圖3),此為版片的安裝位置。
  4. 圖3 將曲面退縮122.5mm
  5. 依照單元寬度1181mm分割步驟2所得到的曲線(如圖4)。
  6. 圖4 以1181mm寬度分割曲線
  7. 將鄰近的四個點連接起來,並配合廠商的分割方式將單元片與異形片都建立出來。
  8. 圖5 依設計建立出各單元片位置
  9. 步驟4得到的每一個四邊形的四個頂點其實並不在同一個平面(plane)上,因為上面的邊與下面的邊明顯是兩條空間中的歪斜線,將每一個單元片從左上角開始依順時針方向命名四個頂點分別為a、b、c、d,因此四邊形abcd實際上應視為三角面abd與三角面bcd(圖6)。
  10. 圖6 每一個四邊形片實際上由兩個在不同平面的三角面所組成
  11. 以abd三點可決定一個平面,將c點投影在此平面上可得到點c'(圖7),點c為理想的完成面位置,而點c'為實際單元片的安裝位置。
  12. 圖7 將c點投影至以abd三點所形成的平面上得到c'
  13. 計算兩點間的距離,可算出每個單元片右下角c點的實際位置與完成面的距離值即可得到下圖8的所有數據。
  14. 圖8 計算所有單元片右下角的安裝位置與完成面的距離
從上圖判斷,所有單元中,位移最大之處有10.4cm,很明顯以此平切的分割方式在施工上會有問題,實際把版片模擬出來的效果如下圖9,可以發現有很嚴重的鋸齒出現,因此最後業主決定採用弧面的方式施作。
圖9 版片模擬

IFC 的優點及缺點

關於IFC的基本概念,可以參考之前的文章「什麼是IFC」。

進一步,我們來聊一下IFC有什麼優點跟缺點,為什麼這個格式讓大家又愛又恨。

在開始之前,還是強調一下IFC的本質:
1. IFC是一個「公開格式」
2. IFC的目的是用來進行「資料交換」

基於其設計目標產生了以下的優點:

- 優點1:不限定使用軟體
形成這個優點的原因很簡單,
採用純文字作為格式基礎,
所有文字編輯器都可以直接開啟該檔案,
進一步如何解析請參考「IFC的格式 - 純文字解析基礎」。


- 缺點1:檔案容量大
相較於其他二進位壓縮格式檔案,
IFC光是純文字就讓其檔案的容量較大,
此外,特殊格式的檔案通常都還有一些較方便的縮寫或重覆引用方法,
但IFC為了讓公開的格式容易被使用,
因此在基本格式上放棄了一些可以節省容量的表示方法,
雖然也有事後壓縮成ifczip這類的應用,
但原則上並非在IFC本身的設計之內。

特別是一些管線等複雜的圖形上,
其檔案大小差異相當大。



- 優點2:格式公開
所有IFC的定義都可以在buildingSMART的官方網站上找到,
例如:IFC 2x3 TC1 格式說明 、 IFC4 Add2 格式說明
有任何版本更新及修正都會公佈在網路上,
因此大家可以依照相同的標準去進行IFC的匯入及匯出作業。



- 缺點2:常用版本非最新版
目前最新的公開釋出版本是2016年發佈的 IFC4 Add2,
但目前大多數軟體支援的是2007年發佈的 IFC 2x3 TC1,
主要的原因是IFC 2x3 TC1已經可以描述所有物件的外觀及屬性,
其原理有點像是電腦圖學的幾何描述與座標描述,
相關範例請參考「IFC的格式 - 純文字解析基礎」一文。

但單純的外觀描述並不足以進行工程應用,
在資料交換上往往還需要進一步進行判別,
例如三維空間中的「定線」其「平曲線」及「豎曲線」在沒有定義之前,
還是可以用一堆「點位」或簡單的公式加以表示,
但如果要應用在工程上,常常會需要進行檢核及修正,
如果沒辦法「全部」用設計參數來表示的話,
就不容易加以應用,
因此在 IFC4x1 Add1中,便加入了定線(IfcAlignment)相關的定義。

這些進一步定義的屬性其實算特殊化,
多數的軟體覺得並非其軟體之主要功能考量,
因此並沒有打算隨著改版,
造成大部份的軟體支援IFC都還是以IFC 2x3 TC1為主。

- 優點3:物件導向式設計
IFC本身是採用物件導向式(Object Oriented)的設計,
因此具備有類別、物件、繼承、參照、抽象、多型等特性,
幾乎可以描述現實生活中看得見的任何東西之間的關係。



- 缺點3:格式複雜
IFC 2x3 TC1中共有
117種定義資料型態(Defined Types)
164種列舉資料型態(Enumerations)
46個選擇資料型態(Select Types)
653種實體資料型態(Entities)

而IFC 2x4則有
126種定義資料型態(Defined Types)
206種列舉資料型態(Enumerations)
59個選擇資料型態(Select Types)
766種實體資料型態(Entities)
還有
42個內建函數(Functions)
408個屬性集(Property Sets)
91個數量集(Quantity Sets)
1691個獨立屬性(Individual Properties)
而且還有自訂義物件。

恩…不複雜嗎?


從上述說明大家應該可以發現,
其實IFC的優點與缺點就是一體兩面,
因為要具備這些優點,就會造成這些缺點。
但透過這樣的設計,就可以用純文字來描述複雜的工程資訊。

IFC的格式 - 純文字解析基礎

進行IFC格式解析前請先稍微了解IFC的架構(請參考「IFC的架構」一文),
本文先不談IFCXML格式,以純IFC格式來說明。

IFC的優點之一,就是採用「純文字」做為資料底層,
所有的資料都可以用明碼的方式存在,
因此不論採用什麼軟體設備,
只要能用純文字編輯器都可以開啟IFC檔案。

所以不論是Windows、Linux、iOS、Android都可以開啟IFC格式的檔案。

我們先隨意挑一個簡單來IFC 2x3 TC1的案例來看一下:

IFC 格式範例

這邊我們用最簡單的方式來理解一下上面這個IFC檔案,
在這裡我用Windows內建的「記事本」開啟,我們先看第一行

#43516 = IFCCARTESIANPOINT((7820.2955167228, 610.415423053157,514.28509535737));

主要分成三個部份:
左邊紅色是 P21ID
中間藍色是 物件類別
右邊綠色是 物件參數

這樣的表示法本身是一個ISO10303標準格式,
稱為STEP(Standard for the Exchange of Product model data) file,
等號(=)左邊井字號(#)開頭的數字#43516是ISO標準中的 Part21所記錄的一種方式,
因此我們常稱之為P21ID (詳情可以參考ISO10303-21說明)。

等號(=)右邊即為該行的資料,第一個英文字即為物件類別,
此處的IFCCARTESIANPOINT即為「卡氏座標點」,
而後面接的三個數字即為其 x, y, z 座標,也就是物件參數。

更進一步的IFC規格可以參考官方網站的說明,最常用的是下面這兩種:
1. IFC 2x3 TC1 格式說明
2. IFC4 Add2 格式說明

其中 IFC 2x3 TC1是支援度最廣的格式,
IFC4 Add2是目前開放出來最新的格式。

再往下可以找到

#43546 = IFCPOLYLOOP((#43486,#43538,#43510, ... ));

在右邊的 #43486,#43538,#43510, ... 就是一堆上面提到的卡氏座標點位,
因此,可以理解該行即為 將這些點位串起來,變成一個多邊型 (Polygon)。

再進一步可以看到 #43549 = IFCFACEOUTERBOUND(#43546, .T. );
第二個參數 .T. 就是代表 True 的一個布林值,
此時需要去找一下IFCFACEOUTERBOUND的定義
得知第二個參數為
Orientation : This indicated whether (TRUE) or not (FALSE) the loop has the same sense when used to bound the face as when first defined. If sense is FALSE the senses of all its component oriented edges are implicitly reversed when used in the face.
更進一步可以把一堆IFCFACEOUTERBOUND組成IFCFACE
最後再經過很多個步驟後,才會組成該檔案的「樓板」。

我們在該檔案中搜尋一下 IFCSLAB,回頭來解析看看:
#32536= IFCSLAB('17_$0D8CH3heDs19BdsuPW',#41,'\X2\6A13677F\X0\:RC15cm:3467913',$,'\X2\6A13677F\X0\:RC15cm',#32518,#32534,'3467913',.FLOOR.);

可以知道裡面總共有9個參數,
再來,前往官方網站找IFCSLAB的定義:

可以發現這九個參數分別是:

GlobalId : IfcGloballyUniqueId;
OwnerHistory : IfcOwnerHistory;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
ObjectType : OPTIONAL IfcLabel;
ObjectPlacement : OPTIONAL IfcObjectPlacement;
Representation : OPTIONAL IfcProductRepresentation;
Tag : OPTIONAL IfcIdentifier;
PredefinedType : OPTIONAL IfcSlabTypeEnum;

其中有 OPTIONAL代表可以填空值($),
如果要找該樓版的位置的話,應該要從 ObjectPlacement 往下找。
如果要找該樓版的外觀的話,應該要從 Representation 往下找。

中間複雜的過程這邊就先省略,
總之,把一開始的卡式座標式一路往上就會找到這個樓板,
而從這個樓版的Representation一路往下找就會找到這些組成樓版的座標點位。

而座標的部份,常用來指定物件為置的物件類別為IfcAxis2Placement3D,
簡單來說物件的解析方式可用下圖表示:

有了Z-Axis跟X-Axis即可cross出Y-Axis,
解析後可以把該物件變成一個 4x4 的轉置矩陣,
透過層層堆疊就可以把座標從物件座標一路轉換成專案座標,
甚至是全球座標。

再舉另一個簡單的「掃掠」格式來組成立方體的案例,
透過這幾行IFC的描述,即可表示出一個立方柱體。

這些是IFC的基礎解析方式,
而不同版本的IFC會有一定程度上的差別,
但通常基本的圖形描述方式並不會改變,
新版本的IFC主要都是在「物件定義」上加入新的物件類別及描述,
例如 IFC4 Add1中加入的定線 (Alignment)其實就是將原本的線形給予其工程意義,
讓直線、弧線、緩合曲線、豎曲線能夠用類似公式的方式來加以描述及調整,
本質上依然是「線」的集合,但解析上就會有所不同。


2018-05-27

什麼是Open BIM?


在接觸 IFC 之後,常常會聽到Open BIM這個詞出現在相關的文章或演講中,大家也都聽過像是Open Source這類的詞,或多或少可以理解成「開放」或「公開」,但Open BIM究竟是什麼?對我們有什麼幫助呢?

(圖片來源)

首先,我們先來看一些基本的定義及說明:

Open BIM是由buildingSMART、GRAPHISOFT、TEKLA、Trimble、NEMETSCHEK及DATA DESIGN SYSTEM等單位共同發起提出的概念,目的是用來解決資料交換的問題,讓所有資訊基於一個開放的標準流程進行協同設計、建築實作和營運管理。此外,也發展出Open BIM認證來提供AEC軟體供應商改進、測試和認證資料連接,幫助資料交換與其他Open BIM軟體解決方案銜接。

Open BIM主要的目標有四點:
1. 支援公開透明的工作流程,允許其他專案成員加入,無需限制專案成員使用何種軟體,都可以進行資料交換。
2. 建立相互參考過程的通用語言,使得業界和政府的採購透明化,可評估服務品質並確保資料品質。
3. 提供跨專案生命週期的持續性專案資料,避免重複輸入相同資料,減少間接錯誤。此外,不論大型的平台或小型的專案都能參與,以成為獨立系統的最佳解決方案。
4. 鼓勵提供更精確的用戶需求查詢的線上產品服務,並直接從建築資訊模型中提取所需的產品資料。

所以,IFC只是一個資料標準,而 Open BIM是基於其上再加入實際流程的一個概念,也發展成一個認證。更進一步,常常會有人提到英國的BIM Level 3的概念其實也是Open BIM,但名稱改成iBIM及ISO BIM,其概念也都是由IFC、IDM、IFD所組成。

Open BIM的組成,從buildingSMART所談的Open BIM跟IFC的關係,我們挑一個重要的圖表出來談:

先看右上角的三角型,基本上Open BIM就是由這三個所組成,下方的IFC相關說明可以在「什麼是IFC? IFC的作用為何?」這篇文章中找到,基本上就是一個資料的共通標準。

IDM(Information Delivery Manual)通常翻譯成「資訊交付手冊」,主要就是在說明流程。通常會將依專案特性分解為許多流程並清楚的定義其所需要的資料與最後的輸出資訊。此外,流程與流程之間也要說明資料流間的關係,所以IDM可以視為一張非常大的流程圖,定義著所有輸入與輸出的資訊。

IFD(International Framework for Dictionaries)通常翻譯成「國際字典框架」,主要是將物件的名稱跟概念分開來描述,並給予一個全球辨識碼(GUID就是一個全世界都不會重覆的唯一碼),舉例來說,「榔頭」、「錘子」、「鐵槌」、「Hammer」指的都是「能夠用來強化敲擊力量的一種工具」,但在不同的模型中可能有不同的名稱,因此透過IFD來確保資訊交換的正確性及唯一性。

最後MVD(Model View Definition)通常翻譯成「模型視圖定義」,其實就是上述三個元素加上使用情境後所整理出來的一份完整的格式資料,可以在官方網站上找到相關範例,但真的要實際應用,還是要依照需求進行整理。

廣義的細談下去與專案資訊結合具體化後,就會是EIR(Employer's Information Requirements,業主需求書)及BEP(BIM Execution Plan,BIM執行計畫書),但EIR及BEP並不會強制要求滿足Open BIM的規定,但如果要長遠的發展下去,國際標準,不考慮嗎?

最後,稍微提一下BCF(BIM Collaboration Format)通常翻譯成「BIM協同格式」,其概念是擷取一部份的模型用來交換、記錄及討論一些議題,其設計理念上是希望能夠進行模型部份更新,避免每次更新模型都需要把整個模型重新傳送,但要實現該設計理念同時需要後端伺服器的支持,目前這方面較知名的服務是BIMcollab

----
這一篇寫的有點太長太複雜,
但這些都是Open BIM底下的重要概念且彼此相互關聯。
希望之後的文章可以維持簡單易懂的風格。


2018-05-14

什麼是IFC? IFC的作用為何?

IFC 全名是 Industry Foundation Classes 「工業基礎分類」,
是一個AEC產業的國際標準格式,
主要設計目標是用來進行「資料交換」,
細節可參考 BuildingSMART官方網站

IFC從1997年1月發佈 IFC 1.0以來,已經過數次重要的改版,
IFC改版歷程
目前最多軟體支援的版本是 IFC 2x3 TC1
而最完整的公開版本目前是 IFC 4 Add2
本文不會介紹其中的細節,
主要從設計概念上說明 IFC 的目標跟作用。

前面有提過,IFC的目標是進行「資料交換」,
也就是說,今天你用A牌的軟體建立出來的資料,
B牌的軟體應該也可以讀取出裡面的參數,
C牌的工具也要能夠從裡面找出他所需要的資料。

意謂著這些「資料」不需要被「軟體」所綁住,
只要是符合相關認證的軟體及工具,
都可以正確的把資料「讀」出來。

在AEC產業常常需要多個不同專業的團隊一起合作完成一項複雜的工作,
不同的專業團隊使用的軟體可能會不一樣,
外觀設計的團隊跟結構設計的團隊考量一定有所落差,
而每個團隊擅長的工具也不盡相同,
如果沒有 IFC 這樣的格式存在的話,
團隊合作要進行資料交換就需要大量的客製化開發。

以下圖的五種軟體的範例來說,總共需要10種格式轉換工具。
而如果大家在開發轉換標準的時候都照IFC這個標準的話,
總共只需要五個轉換工具。
但是AEC產業常用的工具通常不只有五種,
甚至一個軟體可能會有不同的數個版本。

IFC 的作用
更重要的是,軟體工具的儲存格式往往會依照需求進行更新,
如果沒有 IFC 的話,就可以體會什麼是「牽一髮而動全身」。

同樣的,對軟體廠商來說,
他們可以不用把格式底層給其他同業進行介接,
對雙方也都有保障,也不用考慮該由那方進行開發。

結論:
1. IFC是用來進行「資料交換」的一個標準
2. 一般的目標是「讀」出不同軟體的資料



----
IFC 系列預告:
- 什麼是Open BIM?
- IFC 的優缺點
- IFC 的格式
- IFC 的架構