netty服务端设置数据处理时长(C开发BIMFACE系列45服务端API之创建离线数据包)

netty服务端设置数据处理时长(C开发BIMFACE系列45服务端API之创建离线数据包)(1)

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

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

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

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

生成方式

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

  • 在控制台中手动生成

netty服务端设置数据处理时长(C开发BIMFACE系列45服务端API之创建离线数据包)(2)

  • 调用API自动生成

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

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

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

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

参数:

netty服务端设置数据处理时长(C开发BIMFACE系列45服务端API之创建离线数据包)(3)

其中DatabagDerivativeRequest.cs 类如下

namespace BIMFace.SDK.CSharp.Entity.Request { /// <summary> /// 为文件创建bake数据包或者离线数据包的请求类 /// </summary> [Serializable] public class DatabagDerivativeRequest { /// <summary> /// 设置参数,请参考官方具体API需要配置的相关参数 /// </summary> [JsonProperty("config", NullValueHandling = NullValueHandling.Ignore)] public Config Config { get; set; } } [Serializable] public class Config { public Config() { KeepModel = true; KeepDB = true; } /// <summary> /// 默认值为 true /// </summary> [JsonProperty("keepModel", NullValueHandling = NullValueHandling.Ignore)] public bool KeepModel { get; set; } /// <summary> /// 默认值为 true /// </summary> [JsonProperty("keepDB", NullValueHandling = NullValueHandling.Ignore)] public bool KeepDB { get; set; } } }

请求 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 文件,数据库文件中包含了模型转换后的所有属性数据,方便保存到业务系统数据库中并使用。

netty服务端设置数据处理时长(C开发BIMFACE系列45服务端API之创建离线数据包)(4)

测试程序

(1)创建文件离线数据包

netty服务端设置数据处理时长(C开发BIMFACE系列45服务端API之创建离线数据包)(5)

调用接口的实现代码:

private DatabagDerivativeCreateResponse CreateDatabag(string accessToken, long objectId, ModelType modelType, string callback = null, DatabagDerivativeRequest request = null) { /* 通过传入相应的ID创建对应离线数据包: 文件转换ID:PUT https://api.bimface.com/files/{fileId}/offlineDatabag 集成模型ID:PUT https://api.bimface.com/integrations/{integrateId}/offlineDatabag 模型对比ID:PUT https://api.bimface.com/comparisions/{compareId}/offlineDatabag */ string actionType = string.Empty; if (modelType == ModelType.fileId) { actionType = "files"; } else if (modelType == ModelType.integrateId) { actionType = "integrations"; } else if (modelType == ModelType.compareId) { actionType = "comparisions"; } string url = BIMFaceConstants.API_HOST string.Format("/{0}/{1}/offlineDatabag", actionType, objectId); if (callback.IsNotNullAndWhiteSpace()) { url = "?callback=" callback; } if (request == null) { request = new DatabagDerivativeRequest(); request.Config = new Config(); } string data = request.SerializeToJson(); BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders(); headers.AddOAuth2Header(accessToken); try { DatabagDerivativeCreateResponse response; HttpManager httpManager = new HttpManager(headers); HttpResult httpResult = httpManager.Put(url, data); if (httpResult.Status == HttpResult.STATUS_SUCCESS) { response = httpResult.Text.DeserializeJsonToObject<DatabagDerivativeCreateResponse>(); } else { response = new DatabagDerivativeCreateResponse { Message = httpResult.RefText }; } return response; } catch (Exception ex) { throw new BIMFaceException("[创建离线数据包]发生异常!", ex); } }

(2)查询文件离线数据包状态

netty服务端设置数据处理时长(C开发BIMFACE系列45服务端API之创建离线数据包)(6)

调用接口的实现代码

private DatabagDerivativeQueryResponse QueryDatabag(string accessToken, long objectId, ModelType modelType) { /* 通过传入相应的ID创建对应离线数据包: 文件转换ID:GET https://api.bimface.com/files/{fileId}/offlineDatabag 集成模型ID:GET https://api.bimface.com/comparisions/{compareId}/offlineDatabag 模型对比ID:GET https://api.bimface.com/integrations/{integrateId}/offlineDatabag */ string actionType = string.Empty; if (modelType == ModelType.fileId) { actionType = "files"; } else if (modelType == ModelType.integrateId) { actionType = "integrations"; } else if (modelType == ModelType.compareId) { actionType = "comparisions"; } string url = BIMFaceConstants.API_HOST string.Format("/{0}/{1}/offlineDatabag", actionType, objectId); BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders(); headers.AddOAuth2Header(accessToken); try { DatabagDerivativeQueryResponse response; HttpManager httpManager = new HttpManager(headers); HttpResult httpResult = httpManager.Get(url); if (httpResult.Status == HttpResult.STATUS_SUCCESS) { response = httpResult.Text.DeserializeJsonToObject<DatabagDerivativeQueryResponse>(); } else { response = new DatabagDerivativeQueryResponse { Message = httpResult.RefText }; } return response; } catch (Exception ex) { throw new BIMFaceException("[查询离线数据包]发生异常!", ex); } }

查看控制台

netty服务端设置数据处理时长(C开发BIMFACE系列45服务端API之创建离线数据包)(7)

(3)获取数据包下载地址

netty服务端设置数据处理时长(C开发BIMFACE系列45服务端API之创建离线数据包)(8)

调用接口的实现代码

/// <summary> /// 获取数据包下载地址 /// </summary> /// <param name="accessToken">【必填】令牌</param> /// <param name="objectId">【必填】模型Id 或 模型集成Id 或 模型对比Id</param> /// <param name="modelType">【必填】模型类别</param> /// <param name="databagVersion">数据包版本;对于offline、vr数据包,如果只有一个,则下载唯一的数据包,如果多个,则必须指定数据包版本</param> /// <param name="type">数据包类型,如offline、vr、igms</param> /// <returns></returns> private GetUrlSwaggerDisplay GetDatabagDownloadUrl(string accessToken, long objectId, ModelType modelType, string databagVersion = "", string type = "offline") { //GET https://api.bimface.com/data/databag/downloadUrl string url = BIMFaceConstants.API_HOST "/data/databag/downloadUrl?" modelType.ToString() "=" objectId; if (databagVersion.IsNotNullAndWhiteSpace()) { url = "&databagVersion=" databagVersion; } if (type.IsNotNullAndWhiteSpace()) { url = "&type=" type; } BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders(); headers.AddOAuth2Header(accessToken); try { GetUrlSwaggerDisplay response; HttpManager httpManager = new HttpManager(headers); HttpResult httpResult = httpManager.Get(url); if (httpResult.Status == HttpResult.STATUS_SUCCESS) { response = httpResult.Text.DeserializeJsonToObject<GetUrlSwaggerDisplay>(); } else { response = new GetUrlSwaggerDisplay { Message = httpResult.RefText }; } return response; } catch (Exception ex) { throw new BIMFaceException("[获取数据包下载地址]发生异常!", ex); } }

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

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

其他操作与【通过文件ID创建离线数据包】的操作方式完全相同。

通过模型对比ID创建离线数据包

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

其他操作与【通过文件ID创建离线数据包】的操作方式完全相同。

上述测试程序使用了 《BIMFace.SDK.CSharp》开源SDK。欢迎大家下载使用:https://gitee.com/NAlps/BIMFace.SDK


#神舟十三号载人飞船发射成功#

#神舟十三号升空和月亮浪漫同框#

#美舰闯中俄演习区 俄战舰没客气#

#神舟十三号航天员进驻天和核心舱#

#航天员王亚平发朋友圈:出差半年#

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页