首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#开发BIMFACE系列45 服务端API之创建离线数据包

C#开发BIMFACE系列45 服务端API之创建离线数据包

作者头像
张传宁IT讲堂
发布2021-10-18 11:13:11
2730
发布2021-10-18 11:13:11
举报

BIMFACE的常规应用方式有公有云与私有化部署两种方式,并且浏览模型或者图纸需要使用ViewToken,ViewToken 有效期为12小时,过期后需要调用接口重新生成。该过程稍微有点麻烦且性能可能受到网络等环境的影响。本文介绍第三种更加便捷高效的方式。

由于用户所在环境以及应用开发自身的需求,BIMFACE的用户可能想在如下两个场景下还能浏览上传的BIMFACE的模型:

  • 由于内容保护等原因,有些BIMFACE的用户所在的网络环境不一定允许访问公网的BIMFACE服务。
  • 用户自己的应用服务不想依赖于BIMFACE的服务来浏览已经在BIMFACE转换过的模型。尤其适用于运维场景,模型数量不多,且内容不会变更。

离线数据包功能就是为这种需求量身设计的,每一个用户上传的模型在转换后都可以生成对应的离线数据包, 该离线数据包可以下载到本地,独立部署到用户的环境内,具体操作流程以及部署细节可以参考服务器端部署离线数据包JS端调用离线数据包

生成方式

BIMFACE提供了两种方式生成离线数据包:

  • 在控制台中手动生成
  • 调用API自动生成

企业级集成应用开发一般都使用第二种方式,灵活方便。

BIMFACE支持三种类型的文件生成离线数据包,文件转换、模型集成、图对比成功后,即可创建该文件的离线数据包。 在创建离线数据包完成以后,通过Callback机制通知调用方(请参考这里);另外,调用方也可以通过接口查询离线数据包状态。

通过文件ID创建离线数据包

请求地址: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 }

通过文件集成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二次开发系列目录 【已更新最新开发文章,点击查看详细】

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档