BIMFACE的常規應用方式有公有云與私有化部署兩種方式,並且瀏覽模型或者圖紙需要使用ViewToken,ViewToken 有效期為12小時,過期後需要呼叫介面重新生成。該過程稍微有點麻煩且效能可能受到網路等環境的影響。本文介紹第三種更加便捷高效的方式。
由於使用者所在環境以及應用開發自身的需求,BIMFACE的使用者可能想在如下兩個場景下還能瀏覽上傳的BIMFACE的模型:
- 由於內容保護等原因,有些BIMFACE的使用者所在的網路環境不一定允許訪問公網的BIMFACE服務。
- 使用者自己的應用服務不想依賴於BIMFACE的服務來瀏覽已經在BIMFACE轉換過的模型。尤其適用於運維場景,模型數量不多,且內容不會變更。
離線資料包功能就是為這種需求量身設計的,每一個使用者上傳的模型在轉換後都可以生成對應的離線資料包, 該離線資料包可以下載到本地,獨立部署到使用者的環境內,具體操作流程以及部署細節可以參考伺服器端部署離線資料包、JS端呼叫離線資料包。
BIMFACE提供了兩種方式生成離線資料包:
- 在控制檯中手動生成
- 呼叫API自動生成
企業級整合應用開發一般都使用第二種方式,靈活方便。
BIMFACE支援三種型別的檔案生成離線資料包,檔案轉換、模型整合、圖對比成功後,即可建立該檔案的離線資料包。 在建立離線資料包完成以後,通過Callback機制通知呼叫方(請參考這裡);另外,呼叫方也可以通過介面查詢離線資料包狀態。
請求地址:PUT https://api.bimface.com/files/{fileId}/offlineDatabag
引數:
其中DatabagDerivativeRequest.cs 類如下
1 namespace BIMFace.SDK.CSharp.Entity.Request 2 { 3 /// <summary> 4 /// 為檔案建立bake資料包或者離線資料包的請求類 5 /// </summary> 6 [Serializable] 7 public class DatabagDerivativeRequest 8 { 9 /// <summary> 10 /// 設定引數,請參考官方具體API需要配置的相關引數 11 /// </summary> 12 [JsonProperty("config", NullValueHandling = NullValueHandling.Ignore)] 13 public Config Config { get; set; } 14 } 15 16 [Serializable] 17 public class Config 18 { 19 public Config() 20 { 21 KeepModel = true; 22 KeepDB = true; 23 } 24 25 /// <summary> 26 /// 預設值為 true 27 /// </summary> 28 [JsonProperty("keepModel", NullValueHandling = NullValueHandling.Ignore)] 29 public bool KeepModel { get; set; } 30 31 /// <summary> 32 /// 預設值為 true 33 /// </summary> 34 [JsonProperty("keepDB", NullValueHandling = NullValueHandling.Ignore)] 35 public bool KeepDB { get; set; } 36 } 37 38 }
請求 path(示例):https://api.bimface.com/files/1199714943746080/offlineDatabag
請求 header(示例):"Authorization: Bearer dc671840-bacc-4dc5-a134-97c1918d664b"
請求 body(示例):
{ "config": { "keepModel": true, "keepDB": true } }
新增上述引數後,生成的資料包中包含一個名為 modeldrive.db 的 SQLite 檔案,資料庫檔案中包含了模型轉換後的所有屬性資料,方便儲存到業務系統資料庫中並使用。
(1)建立檔案離線資料包
呼叫介面的實現程式碼:
1 private DatabagDerivativeCreateResponse CreateDatabag(string accessToken, long objectId, ModelType modelType, string callback = null, DatabagDerivativeRequest request = null) 2 { 3 /* 通過傳入相應的ID建立對應離線資料包: 4 檔案轉換ID:PUT https://api.bimface.com/files/{fileId}/offlineDatabag 5 整合模型ID:PUT https://api.bimface.com/integrations/{integrateId}/offlineDatabag 6 模型對比ID:PUT https://api.bimface.com/comparisions/{compareId}/offlineDatabag 7 */ 8 9 string actionType = string.Empty; 10 if (modelType == ModelType.fileId) 11 { 12 actionType = "files"; 13 } 14 else if (modelType == ModelType.integrateId) 15 { 16 actionType = "integrations"; 17 } 18 else if (modelType == ModelType.compareId) 19 { 20 actionType = "comparisions"; 21 } 22 23 string url = BIMFaceConstants.API_HOST + string.Format("/{0}/{1}/offlineDatabag", actionType, objectId); 24 if (callback.IsNotNullAndWhiteSpace()) 25 { 26 url += "?callback=" + callback; 27 } 28 29 if (request == null) 30 { 31 request = new DatabagDerivativeRequest(); 32 request.Config = new Config(); 33 } 34 35 string data = request.SerializeToJson(); 36 37 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders(); 38 headers.AddOAuth2Header(accessToken); 39 40 try 41 { 42 DatabagDerivativeCreateResponse response; 43 HttpManager httpManager = new HttpManager(headers); 44 HttpResult httpResult = httpManager.Put(url, data); 45 if (httpResult.Status == HttpResult.STATUS_SUCCESS) 46 { 47 response = httpResult.Text.DeserializeJsonToObject<DatabagDerivativeCreateResponse>(); 48 } 49 else 50 { 51 response = new DatabagDerivativeCreateResponse 52 { 53 Message = httpResult.RefText 54 }; 55 } 56 57 return response; 58 } 59 catch (Exception ex) 60 { 61 throw new BIMFaceException("[建立離線資料包]發生異常!", ex); 62 } 63 }
(2)查詢檔案離線資料包狀態
呼叫介面的實現程式碼
1 private DatabagDerivativeQueryResponse QueryDatabag(string accessToken, long objectId, ModelType modelType) 2 { 3 /* 通過傳入相應的ID建立對應離線資料包: 4 檔案轉換ID:GET https://api.bimface.com/files/{fileId}/offlineDatabag 5 整合模型ID:GET https://api.bimface.com/comparisions/{compareId}/offlineDatabag 6 模型對比ID:GET https://api.bimface.com/integrations/{integrateId}/offlineDatabag 7 */ 8 9 string actionType = string.Empty; 10 if (modelType == ModelType.fileId) 11 { 12 actionType = "files"; 13 } 14 else if (modelType == ModelType.integrateId) 15 { 16 actionType = "integrations"; 17 } 18 else if (modelType == ModelType.compareId) 19 { 20 actionType = "comparisions"; 21 } 22 23 string url = BIMFaceConstants.API_HOST + string.Format("/{0}/{1}/offlineDatabag", actionType, objectId); 24 25 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders(); 26 headers.AddOAuth2Header(accessToken); 27 28 try 29 { 30 DatabagDerivativeQueryResponse response; 31 HttpManager httpManager = new HttpManager(headers); 32 HttpResult httpResult = httpManager.Get(url); 33 if (httpResult.Status == HttpResult.STATUS_SUCCESS) 34 { 35 response = httpResult.Text.DeserializeJsonToObject<DatabagDerivativeQueryResponse>(); 36 } 37 else 38 { 39 response = new DatabagDerivativeQueryResponse 40 { 41 Message = httpResult.RefText 42 }; 43 } 44 45 return response; 46 } 47 catch (Exception ex) 48 { 49 throw new BIMFaceException("[查詢離線資料包]發生異常!", ex); 50 } 51 }
檢視控制檯
(3)獲取資料包下載地址
呼叫介面的實現程式碼
1 /// <summary> 2 /// 獲取資料包下載地址 3 /// </summary> 4 /// <param name="accessToken">【必填】令牌</param> 5 /// <param name="objectId">【必填】模型Id 或 模型整合Id 或 模型對比Id</param> 6 /// <param name="modelType">【必填】模型類別</param> 7 /// <param name="databagVersion">資料包版本;對於offline、vr資料包,如果只有一個,則下載唯一的資料包,如果多個,則必須指定資料包版本</param> 8 /// <param name="type">資料包型別,如offline、vr、igms</param> 9 /// <returns></returns> 10 private GetUrlSwaggerDisplay GetDatabagDownloadUrl(string accessToken, long objectId, ModelType modelType, string databagVersion = "", string type = "offline") 11 { 12 //GET https://api.bimface.com/data/databag/downloadUrl 13 string url = BIMFaceConstants.API_HOST + "/data/databag/downloadUrl?" + modelType.ToString() + "=" + objectId; 14 if (databagVersion.IsNotNullAndWhiteSpace()) 15 { 16 url += "&databagVersion=" + databagVersion; 17 } 18 if (type.IsNotNullAndWhiteSpace()) 19 { 20 url += "&type=" + type; 21 } 22 23 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders(); 24 headers.AddOAuth2Header(accessToken); 25 26 try 27 { 28 GetUrlSwaggerDisplay response; 29 HttpManager httpManager = new HttpManager(headers); 30 HttpResult httpResult = httpManager.Get(url); 31 if (httpResult.Status == HttpResult.STATUS_SUCCESS) 32 { 33 response = httpResult.Text.DeserializeJsonToObject<GetUrlSwaggerDisplay>(); 34 } 35 else 36 { 37 response = new GetUrlSwaggerDisplay 38 { 39 Message = httpResult.RefText 40 }; 41 } 42 43 return response; 44 } 45 catch (Exception ex) 46 { 47 throw new BIMFaceException("[獲取資料包下載地址]發生異常!", ex); 48 } 49 }
請求地址:PUT https://api.bimface.com/integrations/{integrateId}/offlineDatabag。
其他操作與【通過檔案ID建立離線資料包】的操作方式完全相同。
請求地址:PUT https://api.bimface.com/comparisions/{compareId}/offlineDatabag。
其他操作與【通過檔案ID建立離線資料包】的操作方式完全相同。