C#開發BIMFACE系列40 服務端API之模型整合
隨著建築資訊化模型技術的發展,越來越多的人選擇在雲端瀏覽建築模型。現階段的雲端模型瀏覽大多是基於檔案級別,一次只可以瀏覽一個模型檔案中的內容。而在工程專案模型設計的過程中,通常由多個設計師協同設計,不同的設計師負責不同的專業領域(例如建築、結構、水電等)。如果想要在雲端瀏覽整個專案工程,就需要把這些組成部分整合起來一起展示。更近一步,如果要在整合的模型之上進行業務整合的話,就要求在整合過程中對構件按單體,樓層,專業,構件分類,系統型別等進行分類或對映。
目前在實際專案中,不同專業的團隊成員可能會採用不同軟體進行建模,然後再將不同格式的模型匯入如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。歡迎大家下載使用。
BIMFACE二次開發系列目錄 【已更新最新開發文章,點選檢視詳細】成在管理,敗在經驗;嬴在選擇,輸在不學! 貴在堅持!
歡迎關注作者頭條號 張傳寧IT講堂,獲取更多IT文章、視訊等優質內容。
1、BIMFace.Community.SDK.NET
開源地址:https://gitee.com/NAlps/BIMFace.SDK
系列部落格:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列視訊:https://www.cnblogs.com/SavionZhang/p/14258393.html
2、ZCN.NET.Common
開源地址:https://gitee.com/NAlps/zcn.net.common
1、Visual Studio、.C#/.NET、.NET Core、MVC、Web API、RESTful API、gRPC、SignalR、Python
2、jQuery、Vue.js、Bootstrap
3、資料庫:SQLServer、MySQL、PostgreSQL、Oracle、SQLite、Redis、MongoDB、ElasticSearch、TiDB、達夢DM、人大金倉、 神通、南大通用 GBase、華為 GaussDB 、騰訊 TDSQL 、阿里 PolarDB、螞蟻金服 OceanBase、東軟 OpenBASE、浪潮云溪資料庫 ZNBase
4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分庫分表、讀寫分離
5、架構:領域驅動設計 DDD、ABP
6、環境:跨平臺、Windows、Linux(CentOS、麒麟、統信UOS、深度Linux)、maxOS、IIS、Nginx、Apach
7、移動App:Android、IOS、HarmonyOS、微信、小程式、快應用、Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、Smobiler
雲原生、微服務、Docker、CI/CD、DevOps、K8S;
Dapr、RabbitMQ、Kafka、分散式、大資料、高併發、負載均衡、中介軟體、RPC、ELK;
.NET + Docker + jenkins + Github + Harbor + K8S;
出處:www.cnblogs.com/SavionZhang
作者:張傳寧 微軟MCP、系統架構設計師、系統整合專案管理工程師、科技部創新工程師。
專注於微軟.NET技術(.NET Core、Web、MVC、WinForm、WPF)、通用許可權管理系統、工作流引擎、自動化專案(程式碼)生成器、SOA 、DDD、 雲原生(Docker、微服務、DevOps、CI/CD);PDF、CAD、BIM 審圖等研究與應用。
多次參與電子政務、圖書教育、生產製造等企業級大型專案研發與管理工作。
熟悉中小企業軟體開發過程:需求分析、架構設計、編碼測試、實施部署、專案管理。通過技術與管理幫助中小企業快速化實現網際網路技術全流程解決方案。
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。
如有問題,可以通過郵件[email protected]聯絡。共同交流、互相學習。
如果您覺得文章對您有幫助,請點選文章右下角【推薦】。您的鼓勵是作者持續創作的最大動力!