C#開發BIMFACE系列40 服務端API之模型集成

BIMFACE二次開發系列目錄     【已更新最新開發文章,點擊查看詳細】

  隨著建築資訊化模型技術的發展,越來越多的人選擇在雲端瀏覽建築模型。現階段的雲端模型瀏覽大多是基於文件級別,一次只可以瀏覽一個模型文件中的內容。而在工程項目模型設計的過程中,通常由多個設計師協同設計,不同的設計師負責不同的專業領域(例如建築、結構、水電等)。如果想要在雲端瀏覽整個項目工程,就需要把這些組成部分集成起來一起展示。更近一步,如果要在集成的模型之上進行業務集成的話,就要求在集成過程中對構件按單體,樓層,專業,構件分類,系統類型等進行分類或映射。

  目前在實際項目中,不同專業的團隊成員可能會採用不同軟體進行建模,然後再將不同格式的模型導入如Navisworks等軟體中,但這樣的方法有如下的缺點:

  • 即使僅為了滿足瀏覽模型的需求,也需要安裝用來集成不同格式模型的桌面端軟體;
  • 桌面端軟體支援的模型文件格式有限,無法滿足多種文件格式的模型集成需求;
  • 在諸如Navisworks等軟體中進行的模型導入只做了幾何的導入集成,不支援上面提到的建築領域各種分類資訊;
  • 只支援桌面端瀏覽模型,同時軟體也對作業系統有明確要求,普遍無法支援移動端的iOS和Android作業系統;

針對上述的限制,BIMFACE的模型集成,能完美解決上述的所有問題。

在業務方面,BIMFACE的模型集成能:

  • 集成不同專業的模型,包括建築、結構、裝修、幕牆、鋼構,以及機電中給排水、採暖燃氣、通風空調、消防、強弱電等各專業。
  • 自定義樓層映射
  • 支援單體,系統類型,構件類型等其他分類維度
  • 支援模型鏈接集成,如帶標準層的集成模型
  • 支援自定義文件轉換矩陣(transform)

在技術方法,BIMFACE的模型集成充分運用了雲端無窮的計算資源,在模型集成過程中:

  • 運用圖形幾何演算法進行了如下優化,大大提升在瀏覽器里能展示模型的規模以及渲染的性能:構件屬性在雲端進行入庫索引,提供任意的屬性查詢能力。
    • 識別基本體
    • 實例繪製優化
    • 同材質全場景動態合併
    • 外圍殼光線追蹤識別
  • 構件屬性在雲端進行入庫索引,提供任意的屬性查詢能力

當單個模型文件轉換成功以後,可以將多個單文件集成,生成一個全專業/樓層模型。由於集成不能立即完成,BIMFACE支援在模型集成完成以後,通過Callback機制通知調用方(請參考作者的部落格《C#開發BIMFACE系列36 服務端API回調機制》);另外,調用方也可以通過介面查詢集成狀態。目前BIMFACE支援集成的模型文件格式包括:rvt、dgn、ifc、nwd、skp、3dm、3ds、fbx、stp。

下面的截圖分別是建築模型、結構模型、集成後的模型效果圖,可以直觀的看出建築與結構集成後的效果。

 

BIMFACE官方提供了非常豐富的模型集成介面

 

下面詳細講解模型集成介面如何實現上述的集成效果。

介面地址:PUT //api.bimface.com/integrate

介面參數:

請求 header(示例):“Authorization: Bearer dc671840-bacc-4dc5-a134-97c1918d664b”

請求 body:

 1 {
 2   "callback" : "//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" : [ "//m.bimface.com/dc6aa5e35b6a269972b005b4b2aac8ce/thumbnail/96.png", "//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 //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二次開發系列目錄     【已更新最新開發文章,點擊查看詳細】