
隨着建築信息化模型技術的發展,越來越多的人選擇在雲端瀏覽建築模型。現階段的雲端模型瀏覽大多是基於文件級別,一次只可以瀏覽一個模型文件中的內容。而在工程項目模型設計的過程中,通常由多個設計師協同設計,不同的設計師負責不同的專業領域(例如建築、結構、水電等)。如果想要在雲端瀏覽整個項目工程,就需要把這些組成部分集成起來一起展示。更近一步,如果要在集成的模型之上進行業務集成的話,就要求在集成過程中對構件按單體,樓層,專業,構件分類,系統類型等進行分類或映射。
目前在實際項目中,不同專業的團隊成員可能會采用不同軟件進行建模,然后再將不同格式的模型導入如Navisworks等軟件中,但這樣的方法有如下的缺點:
- 即使僅為了滿足瀏覽模型的需求,也需要安裝用來集成不同格式模型的桌面端軟件;
- 桌面端軟件支持的模型文件格式有限,無法滿足多種文件格式的模型集成需求;
- 在諸如Navisworks等軟件中進行的模型導入只做了幾何的導入集成,不支持上面提到的建築領域各種分類信息;
- 只支持桌面端瀏覽模型,同時軟件也對操作系統有明確要求,普遍無法支持移動端的iOS和安卓操作系統;
針對上述的限制,BIMFACE的模型集成,能完美解決上述的所有問題。
在業務方面,BIMFACE的模型集成能:
- 集成不同專業的模型,包括建築、結構、裝修、幕牆、鋼構,以及機電中給排水、采暖燃氣、通風空調、消防、強弱電等各專業。
- 自定義樓層映射
- 支持單體,系統類型,構件類型等其他分類維度
- 支持模型鏈接集成,如帶標准層的集成模型
- 支持自定義文件轉換矩陣(transform)
在技術方法,BIMFACE的模型集成充分運用了雲端無窮的計算資源,在模型集成過程中:
- 運用圖形幾何算法進行了如下優化,大大提升在瀏覽器里能展示模型的規模以及渲染的性能:構件屬性在雲端進行入庫索引,提供任意的屬性查詢能力。
- 識別基本體
- 實例繪制優化
- 同材質全場景動態合並
- 外圍殼光線追蹤識別
- 構件屬性在雲端進行入庫索引,提供任意的屬性查詢能力
當單個模型文件轉換成功以后,可以將多個單文件集成,生成一個全專業/樓層模型。由於集成不能立即完成,BIMFACE支持在模型集成完成以后,通過Callback機制通知調用方(請參考作者的博客《C#開發BIMFACE系列36 服務端API回調機制》);另外,調用方也可以通過接口查詢集成狀態。目前BIMFACE支持集成的模型文件格式包括:rvt、dgn、ifc、nwd、skp、3dm、3ds、fbx、stp。
下面的截圖分別是建築模型、結構模型、集成后的模型效果圖,可以直觀的看出建築與結構集成后的效果。
BIMFACE官方提供了非常豐富的模型集成接口
下面詳細講解模型集成接口如何實現上述的集成效果。
接口地址:PUT https://api.bimface.com/integrate
接口參數:
請求 header(示例):"Authorization: Bearer dc671840-bacc-4dc5-a134-97c1918d664b"
請求 body:
1 { 2 "callback" : "https://api.glodon.com/viewing/callback?authCode=6kj0Jk0affae&signature=2ef131395fb6442eb99abd83d45c6016", 3 "config" : {}, 4 "name" : "integrate", 5 "sourceId" : "hduf2w3ho21nowr23rqwjrn2o3", 6 "sources" : [ { 7 "fileId" : 1656504297006400 8 }, 9 { 10 "fileId" : 1552501367034816 11 }] 12 }
HTTP響應示例(200):
1 { 2 "code" : "success", 3 "data" : { 4 "createTime" : "2017-12-25 17:25:25", 5 "integrateId" : 1248789977538784, 6 "name" : "integrate-x", 7 "reason" : "reason", 8 "sourceId" : "123156522123", 9 "status" : "success", 10 "thumbnail" : [ "https://m.bimface.com/dc6aa5e35b6a269972b005b4b2aac8ce/thumbnail/96.png", "https://m.bimface.com/dc6aa5e35b6a269972b005b4b2aac8ce/thumbnail/256.png" ] 11 }, 12 "message" : "" 13 }
C#實現方法:
1 /// <summary> 2 /// 發起2個模型集成。 3 /// 由於集成不能立即完成,BIMFACE支持在模型集成完成以后,通過Callback機制通知調用方;另外,調用方也可以通過接口查詢集成狀態。 4 /// </summary> 5 /// <param name="accessToken">【必填】令牌</param> 6 /// <param name="fileId1">集成時的請求參數</param> 7 /// <param name="fileId2">集成時的請求參數</param> 8 /// <param name="callBack">集成時的請求參數</param> 9 /// <returns></returns> 10 public virtual ModelIntegrateResponse Integrate(string accessToken, long fileId1, long fileId2, string callBack = "") 11 { 12 //PUT https://api.bimface.com/integrate 13 string url = BIMFaceConstants.API_HOST + "/integrate"; 14 15 FileIntegrateRequest request = new FileIntegrateRequest(); 16 17 IntegrateSource source1 = new IntegrateSource(fileId1); 18 IntegrateSource source2 = new IntegrateSource(fileId2); 19 request.Sources = new IntegrateSource[] { source1, source2 }; 20 request.CallBack = callBack; 21 22 string data = request.SerializeToJson(); 23 24 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders(); 25 headers.AddOAuth2Header(accessToken); 26 27 try 28 { 29 ModelIntegrateResponse response; 30 31 HttpManager httpManager = new HttpManager(headers); 32 HttpResult httpResult = httpManager.Put(url, data); 33 if (httpResult.Status == HttpResult.STATUS_SUCCESS) 34 { 35 response = httpResult.Text.DeserializeJsonToObject<ModelIntegrateResponse>(); 36 } 37 else 38 { 39 response = new ModelIntegrateResponse 40 { 41 Message = httpResult.RefText 42 }; 43 } 44 45 return response; 46 } 47 catch (Exception ex) 48 { 49 throw new BIMFaceException("[發起模型集成]發生異常!", ex); 50 } 51 }
代碼中使用的 HttpManager 類請參考我的博客文章《C# HTTP系列 HttpWebRequest 與 HttpWebResponse》。
返回類型 ModelIntegrateResponse 類如下:
1 public class ModelIntegrateResponse : GeneralResponse<FileIntegrateBean> 2 { 3 4 }
1 public class FileIntegrateBean 2 { 3 /// <summary> 4 /// 對比開始時間,格式:yyyy-MM-dd hh:mm:ss 5 /// </summary> 6 [JsonProperty("createTime", NullValueHandling = NullValueHandling.Ignore)] 7 public string CreateTime { get; set; } 8 9 /// <summary> 10 /// 集成成功后返回的ID,用於獲取對比狀態或者結果等信息 11 /// </summary> 12 [JsonProperty("integrateId", NullValueHandling = NullValueHandling.Ignore)] 13 public long? IntegrateId { get; set; } 14 15 /// <summary> 16 /// 用戶指定集成后的模型的名字 17 /// </summary> 18 [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] 19 public string Name { get; set; } 20 21 /// <summary> 22 /// 對比優先級。取值 1、2、3。數字越大,優先級越低。默認為2 23 /// </summary> 24 [JsonProperty("priority", NullValueHandling = NullValueHandling.Ignore)] 25 public int? Priority { get; set; } 26 27 /// <summary> 28 /// 若對比失敗,返回失敗原因 29 /// </summary> 30 [JsonProperty("reason", NullValueHandling = NullValueHandling.Ignore)] 31 public string Reason { get; set; } 32 33 /// <summary> 34 /// 第三方應用自己的ID 35 /// </summary> 36 [JsonProperty("sourceId", NullValueHandling = NullValueHandling.Ignore)] 37 public string SourceId { get; set; } 38 39 /// <summary> 40 /// 對比狀態:prepare(待對比)、processing(對比中)、success(對比成功)、failed(對比失敗) 41 /// </summary> 42 [JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)] 43 public string Status { get; set; } 44 45 [JsonProperty("thumbnail", NullValueHandling = NullValueHandling.Ignore)] 46 public string[] Thumbnails { get; set; } 47 48 /// <summary> 49 /// 模型集成的類型 rvt(或者igms…) 50 /// </summary> 51 [JsonProperty("type", NullValueHandling = NullValueHandling.Ignore)] 52 public string Type { get; set; } 53 }
測試程序:
BIMFACE控制台中查詢到的集成結果如下:
集成成功后,等待一段時間,查看集成結果如下圖:
上述測試程序使用了 《BIMFace.SDK.CSharp》開源SDK。歡迎大家下載使用。