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 的架構

2018-05-12

如何設定3D列印第一層的參數

對於3D列印而言,第一層列印的品質對於列印成功與否有極大的影響,因此若第一層列印的品質不好,筆者建議就直接終止列印,等到重新調整參數後再重新列印,才不會浪費時間也浪費材料。

一般列印的步驟為:
  1. 清潔玻璃
  2. 確保玻璃上沒有灰塵或其他雜質
  3. 校正水平與起始高度
  4. 水平校準這邊就不特別說明,畢竟這是本來就該做的事情,而起始高度影響的則是第一層的重要參數,太高則料無法有效黏著,太低可能會刮傷平台,必須特別注意。
  5. 選定要列印的檔案並開始執行列印
  6. 趁噴頭加熱的空檔在平台塗上口紅膠
  7. 按下列印後,這時噴頭會開始加熱到設定的溫度,通常我會利用這段時間塗上口紅膠,因為太早塗的話口紅膠乾掉效果就不好,口紅膠建議使用下圖這個牌子,其他牌子的黏著效果沒有這個好。
  8. 開始列印後,觀察第一層列印的品質,若發現任何瑕疵建議暫停重新列印
  9. 如同前面所說,第一層的品質對於最後列印的成功與否的影響極大,所以若覺得有任何不對勁的地方建議暫停列印並重新檢視有沒有什麼細節沒有注意到。
透過幾個參數的調整可以增加第一層的品質
  1. 速度
  2. 一般來說,我們會把第一層的列印速度放慢,讓料能夠完整有效地貼附平面
  3. 熱床
  4. 若有熱床的話一般可以提升列印品質,熱床並非必要品且熱床不便宜,因此需不需購買熱床就見仁見智了。
  5. Brim or Raft
  6. 不知道該怎麼翻譯這個,開啟Brim(外面那一圈一圈的)可以增加底部的穩定度,避免印到高處時模型晃動導致列印失敗,若要列印的物品比較高,則建議使用Raft(底部平台),其效果會比Brim更好但當然更花時間
通常第一層列印完沒太大問題之後,就比較可以安心的去做其他事情等時間到再回來看列印成果。最後祝大家都順利列印成功。


2018-05-07

如何將BIM模型透過3D列印呈現

買了一台3D列印機,我該如何把我建的模型印出來呢?

近年來3D列印機越來越便宜,已經到了個人能夠負擔的程度,因此越來越多人擁有3D列印機,但究竟該如何把模型給印出來了呢?

基本的流程如下圖,步驟只有兩個

  1. 從BIM/建模軟體匯出.stl檔。
  2. 透過切片軟體開啟.stl檔,設定列印參數後轉出.gcode檔,最後將.gcode送給3D 列印機開始執行列印動作。

從BIM模型到3D列印之流程
.stl為3D列印常用之格式,一般切片軟體都支援讀取此格式,但並非所有BIM軟體都支援轉出.stl,因此通常需要一些外掛程式來轉出,或是透過其他程式(例如Rhino)來轉出.stl。

.gcode為給3D列印機的指令,其可以控制噴頭的位置、速度、溫度、出料速度...等等資訊,切片軟體的功用就是將模型轉化為機器的指令。常見的切片軟體如上圖中間所示,CURA、Slic3r或是Kisslicer都是免費的切片軟體,各有優缺點,使用者依照習慣與喜好選擇即可。在切片軟體中一般需要設定的參數如下:

  1. 列印溫度:取決於使用的列印材料(filament)。
  2. 列印速度:一般來說,速度慢列印的品質越高,機器等級越好,列印的速度越快。
  3. 層高:每一層切片的高度,越高紋路就越粗但列印時間短,反之則紋路越細緻但需要較久的時間列印。
以上只是最基本的設定參數,但想要把一件物品印好的影響參數非常多,後續我們會再寫一篇文章介紹。



2014-09-04

Solibri Model Checker於法規檢討的應用-Part 1

前面筆者曾經介紹過SMC的基本功能(詳見Solibri Model Checker-BIM模型的檢核工具),SMC無疑地能夠確保模型品質,以系統的方法找出模型的瑕疵,確保模型的資訊正確無誤,下一個接收模型的單位才能夠直接應用模型,而非接手後重新建立模型。


多數人在得知SMC的基本功能之後都會好奇究竟SMC是否能夠用於「法規檢討」上,因此本篇將針對SMC能夠達成的法規檢討部分做一簡單的介紹。在開始之前必須跟讀者說明的是SMC並無法做到「一鍵完成」所有法規的檢討,其原因在於並非所有法規皆可轉換為程式邏輯,再者SMC提供約40~50種的基礎規則供使用者修改其參數作為品質驗證使用,而非開放給使用者自行編寫規則,因此無法自訂出百分之百符合法規邏輯的檢查規則。故若讀者想要尋找能夠自行撰寫邏輯的檢查程式,此篇文章所介紹的東西可能不適用。


在此筆者暫時先將SMC的規則庫中的所有規則依照用途將其分為9大類,其分別為:

  1. 邏輯性檢核
  2. 距離檢核
  3. 屬性檢核
  4. 結構元件檢核
  5. 一致性檢核
  6. 面積檢核
  7. 使用性檢核
  8. 防災逃生檢核
  9. 完整性檢核


以下就各種分類來詳細描述各種分類的功能與用途。


邏輯性檢核


此類規則主要針對模型元件的邏輯性做判斷,避免不合常理的情形出現。例如:

  1. 門與窗無法單獨存在於模型空間中而必須依附於牆體。
  2. 一棟建築的外殼必須將所有建築裡的空間包圍起來。
  3. 牆體的下部必須與樓地板接觸,上部必須連接上層的樓地板或是天花板。
  4. 物件與物件之間彼此不互相重疊。

說明:
上述例子說明的即是一般常理情況下,模型中的物件該有的特性與行為,但是我們在建模時基於能夠簡單快速地將模型給建立完成的前提有時會忽略這些細節,例子4即是大家所熟知的碰撞檢核或干涉檢核,其檢核的目的用於結構模型即是確保模型數量正確,用於管線模型則是為了檢核管線的配置是否有衝突發生。例子3則可應用於建築技術規則第46條:
「(防音)連棟住宅、集合住宅之分界牆、寄宿舍、旅館等之臥室或客房或醫院病房相互間之分間牆及其與其他部份之分間牆,應依左列規定設置具有防音效果之隔牆:
一、分界牆或分間牆應為無空隙、無害於防音之構造,並應為直達樓地板或屋頂之牆壁,如天花板有防音性能者,分間牆得建築至天花板。二、...」
第一點說明分界牆或分間牆必須觸碰於樓地板或有防音性能之天花板,例子3的規則恰好可用於檢查此類的牆體是否有滿足法規的需求。



距離檢核

此類規則可用於兩指定物件之間的距離是否過大或過小,物件並非一定是特定有實體的物件,也可以是兩空間。例如建築技術規則第32條:
「(天花板)天花板之淨高度應依左列規定:
一、學校教室不得小於三公尺。
二、其他居室及浴廁不得小於二‧一公尺,但高低不同之天花板高度至少應有一半以上大於二‧一公尺,其最低處不得小於一‧七公尺。」
則利用距離檢核的規則即可檢查天花板與樓地板之間的距離是否滿足法規的需求。


屬性檢核

此類規則用於檢查物件的屬性資料,如長度、高度、名稱等屬性,而且能夠進一步檢查屬性的規則,舉例來說,建築物的房間編號基本上不會重複,因此可透過屬性檢核來確認是否每個房間編號都是唯一的值。


後面待續...

2013-09-17

建模正確性與混凝土數量

在過去,工程師在設計完成後要進行數量計算時總是非常頭痛,想要算到非常精準需要耗費很多時間,並且不同的數量都各自有不同的計算規則,利用人為方式計算時難以保證沒有遺漏或是錯誤。因此為了方便計算以及方便審查,在過去會使用一些簡化的方式來計算數量,簡化的方式當然算出來的數量也只是粗略的估計值,而BIM的好處即是當模型被正確建立完成後,數量的資料即可馬上取得。

本次筆者將藉由一個例子來比較建模正確性造成的數量差異,模型如下圖所示,整個模型由混凝土柱、樑、版三種元素所組成,結構格線的配置為X向5x8m=40m,Y向為5x6m=30m。每一個節點上都配置斷面為80x80cm,高3m的混凝土柱。樑的斷面尺寸皆由50x30cm的斷面所構成,建立方法為從柱心至柱心,因此會有部分的體積與柱重疊。版的厚度皆為15cm,為了快速建立模型,建立的方法為直接建立一個40mx30m的矩形樓板覆蓋整個格線範圍,其與樑以及柱皆有部分重疊。
原始模型資料

2013-07-01

Solibri Model Checker-BIM模型的檢核工具


隨著BIM的熱潮,越來越多工程在投標階段就明訂必須使用BIM技術,但目前多數業主所遇到的難題是即使取得了設計單位或包商的BIM模型也不知道該如何檢核或驗收模型。大家都知道BIM的特色為「所見及所得」-即只要建立在模型中的物件那麼資訊與數量就會正確,因此檢驗模型的正確性就成了關鍵。過去檢驗BIM模型的方法不外乎兩種,一是用人工的方式瀏覽模型,找出模型有瑕疵的地方,此方法非常耗費時間,且人工的方式還是會有很多瑕疵會被遺漏沒被檢查出來。二是大家比較熟悉的「碰撞檢查」,通過碰撞檢查能夠確保模型的量體是正確的,數量不會重複計算到;但假若今天我們要檢查的是使用者有沒有把設備商資料填入正確的物件屬性中,或是物件的命名是否有根據業主所給定的原則、又或者是樓層的淨高度是否有滿足法規的需求?除了人工的方式之外是否有程式化的方法能夠幫我們做這樣的檢核呢?

2013-06-03

並不只是BIM What else? So what?

標題為筆者5/21參加的演講主題,講者為來自Arup的Argoon,Argoon受邀來台大分享她在Arup關於BIM的工作經驗以及案例分享,最後提出三項學生應具備的基本BIM能力來勉勵台大學弟妹們,Argoon分享許多在Arup展示出來的BIM技術以及觀念對筆者來說十分受用,因此特地記下來向大家分享。

  1. 對公司自己作業上有幫助,為何不使用BIM:目前各國大致上都碰上相同的問題,使用BIM會增加設計階段的工作量與時間,可以減少施工時的錯誤以及重工的損失,但目前除了新加坡政府明文規定在設計階段使用BIM作業可以增加5%的設計費用外,其餘國家均無此規定,因此對於設計單位而言使用BIM無疑是增加成本;但Arup自己發展出許多自動化程式幫助他們減少作業時間,因此對他們而言,BIM是個更好的工具,而非增加更多工作量的工具。

2013-05-19

成功導入BIM應有之基本條件


BIM的熱潮近幾年來不斷地在世界各地發燒,而BIM這個名詞也漸漸的在國內開始流傳,不同於國外政府的積極作為,國內的政府機關對於BIM的了解還不夠深入而且了解的人也不多,到目前還沒有辦法針對BIM流程制定一些具體的規範以及品質驗證的方法,因此國內的企業單位在沒有一套標準的制度可以遵循,只能各自發展,能量無法聚集,發展的速度也會相對受限,是非常可惜的一件事情。不過企業界因為競爭的壓力無法等到政府有所動作才開始發展,因此近幾年來許多企業界也積極嘗試將BIM導入既有工作流程中,小公司介面少案例單純,因此導入的速度一般都大公司還要來的順利;因此今天就要來談談大公司要成功導入BIM到底應先具備什麼樣的條件呢?

2013-05-13

Archicad使用經驗分享



在台灣,擁有BIM設計能力的建築設計者90%都是使用Revit Architecture,大家對於Revit都已經十分熟悉,但其實在建築領域裡的BIM軟體還有另外一套功能與Revit不相上下的軟體,也就是我們今天要介紹的「Archicad」。筆者有幸接觸到Archicad是因為一個朋友是Archicad的專家,在出國深造前他決定將他一身絕學留在台灣,因此筆者才有機會學習到Archicad。
在接觸Archicad前,筆者一直猜想Archicad是不是不太好用,因此使用者這麼少,但接觸之後才發現Archicad是一套不輸給Revit的BIM軟體,只是台灣知道的人比較少而已。
如同前面幾篇文章一樣,下面針對筆者自己的使用經驗列出Archicad的優點與特色:

2013-05-10

Tekla Structures使用經驗分享


Tekla原為芬蘭的軟體公司,其前身即為知名的XSteel,是專門應用於鋼結構設計以及鋼筋混凝土設計之BIM軟體,在2011年被Trimble給買下來。Tekla在細節設計上有非常突出的表現,其詳細程度能夠連螺栓數量都能夠計算出來。Tekla是筆者第二款接觸的BIM軟體,在學習Tekla之前有先接觸過Revit Structure,相較之下Tekla的功能比Revit Structure完整許多,是目前台灣鋼結構設計的主流軟體。
以下就筆者自己使用Tekla Structures的經驗羅列出Tekla Structures的優點與特色:

2013-05-08

Revit使用經驗分享


Revit為Autodesk公司於2002年買下的BIM解決方案,也是近年Autodesk主打的建築解決方案的軟體。Revit根據不同的專業族群又分為三個模組,建築專業使用的Architecture、結構專業使用的Structure、管線專業使用的MEP,這三個系列俗稱Revit三兄弟,為台灣最多人使用的BIM軟體。

根據筆者自己的使用經驗羅列出Revit的優點與特色:

2013-05-03

BIM探險首航

i2 Space Original Layout
時間回溯至2007年,當時筆者正在讀大四,那時在協助老師做一個既有建物拆除後再改建的案子,但因為還有其他不同領域的教授會一起參與這個案子,因此老師需要一個3D模型把空間規劃的想法與概念在會議上提出來與其他教授做討論使用。不巧的是參與那個計畫的學生沒有人熟悉3D建模,在時間的壓力下我趕緊在網路上調查了幾款常用的3D建模軟體後,馬上決定以最常聽到的3DS MAX開始著手學習,當下直接借了一本工具書就趕快回家自學,除了書之外,當時大陸的網站上已經有許多相關的「視頻教學」,透過這些教學資源我從零開始學習到把模型給建立出來只花了三天的時間;不過畢竟是三天之內出來的產物,所以最後老師也沒有採用我建出來的模型XD不過卻意外地讓我對於3D建模產生興趣,當時在網站上可以找到許多幾可亂真的彩現效果圖,我心想:如果未來我的設計也可以用相同的方式來展示,那在討論溝通上就比以前用2D圖面的效果能夠更真實、更震撼、更直覺的呈現,大家也更容易把自己的意見回饋給設計者。