• 當前位置:首頁 > IT技術 > Windows編程 > 正文

    C#開發BIMFACE系列45 服務端API之創建離線數據包
    2021-10-18 17:48:31


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


    ?


    BIMFACE的常規應用方式有公有云與私有化部署兩種方式,并且瀏覽模型或者圖紙需要使用ViewToken,ViewToken 有效期為12小時,過期后需要調用接口重新生成。該過程稍微有點麻煩且性能可能受到網絡等環境的影響。本文介紹第三種更加便捷高效的方式。

    由于用戶所在環境以及應用開發自身的需求,BIMFACE的用戶可能想在如下兩個場景下還能瀏覽上傳的BIMFACE的模型:


    • 由于內容保護等原因,有些BIMFACE的用戶所在的網絡環境不一定允許訪問公網的BIMFACE服務。
    • 用戶自己的應用服務不想依賴于BIMFACE的服務來瀏覽已經在BIMFACE轉換過的模型。尤其適用于運維場景,模型數量不多,且內容不會變更。

    離線數據包功能就是為這種需求量身設計的,每一個用戶上傳的模型在轉換后都可以生成對應的離線數據包, 該離線數據包可以下載到本地,獨立部署到用戶的環境內,具體操作流程以及部署細節可以參考服務器端部署離線數據包、JS端調用離線數據包。


    生成方式


    BIMFACE提供了兩種方式生成離線數據包:


    • 在控制臺中手動生成

    C#開發BIMFACE系列45 服務端API之創建離線數據包_sql


    • 調用API自動生成

    企業級集成應用開發一般都使用第二種方式,靈活方便。

    BIMFACE支持三種類型的文件生成離線數據包,文件轉換、模型集成、圖對比成功后,即可創建該文件的離線數據包。 在創建離線數據包完成以后,通過Callback機制通知調用方(請參考這里);另外,調用方也可以通過接口查詢離線數據包狀態。?


    通過文件ID創建離線數據包


    請求地址:PUT https://api.bimface.com/files/{fileId}/offlineDatabag

    參數:

    C#開發BIMFACE系列45 服務端API之創建離線數據包_BIM  BIMFACE_02

    其中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 文件,數據庫文件中包含了模型轉換后的所有屬性數據,方便保存到業務系統數據庫中并使用。

    C#開發BIMFACE系列45 服務端API之創建離線數據包_sql_03


    測試程序


    (1)創建文件離線數據包

    C#開發BIMFACE系列45 服務端API之創建離線數據包_BIM  BIMFACE_04

    調用接口的實現代碼:



    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)查詢文件離線數據包狀態

    C#開發BIMFACE系列45 服務端API之創建離線數據包_.net_05

    調用接口的實現代碼



    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 }


    查看控制臺

    C#開發BIMFACE系列45 服務端API之創建離線數據包_離線_06

    (3)獲取數據包下載地址

    C#開發BIMFACE系列45 服務端API之創建離線數據包_json_07

    調用接口的實現代碼



    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 }


    通過文件集成ID創建離線數據包


    請求地址:PUT https://api.bimface.com/integrations/{integrateId}/offlineDatabag。

    其他操作與【通過文件ID創建離線數據包】的操作方式完全相同。


    通過模型對比ID創建離線數據包


    請求地址:PUT https://api.bimface.com/comparisions/{compareId}/offlineDatabag。

    其他操作與【通過文件ID創建離線數據包】的操作方式完全相同。

    ?


    上述測試程序使用了 《BIMFace.SDK.CSharp》開源SDK。歡迎大家下載使用。


    ?


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



    成在管理,敗在經驗;嬴在選擇,輸在不學!? 貴在堅持!

    ?


    ?C#開發BIMFACE系列45 服務端API之創建離線數據包_.net_08技術棧

    ? ?

    ?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;


    ?

    作者:張傳寧 ??微軟MCP、系統架構設計師、系統集成項目管理工程師、科技部創新工程師。

    ??????????專注于微軟.NET技術(.NET Core、Web、MVC、WinForm、WPF)、通用權限管理系統、工作流引擎、自動化項目(代碼)生成器、SOA 、DDD、 云原生(Docker、微服務、DevOps、CI/CD);PDF、CAD、BIM 審圖等研究與應用。

    ??????????多次參與電子政務、圖書教育、生產制造等企業級大型項目研發與管理工作。

    ??????????熟悉中小企業軟件開發過程:需求分析、架構設計、編碼測試、實施部署、項目管理。通過技術與管理幫助中小企業快速化實現互聯網技術全流程解決方案。

    ?????????



    ?????????

    ?

    本文摘自 :https://blog.51cto.com/u

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码