专栏首页.NET企业级解决方案应用与咨询C#开发BIMFACE系列40 服务端API之模型集成

C#开发BIMFACE系列40 服务端API之模型集成

BIMFACE二次开发系列目录

  随着建筑信息化模型技术的发展,越来越多的人选择在云端浏览建筑模型。现阶段的云端模型浏览大多是基于文件级别,一次只可以浏览一个模型文件中的内容。而在工程项目模型设计的过程中,通常由多个设计师协同设计,不同的设计师负责不同的专业领域(例如建筑、结构、水电等)。如果想要在云端浏览整个项目工程,就需要把这些组成部分集成起来一起展示。更近一步,如果要在集成的模型之上进行业务集成的话,就要求在集成过程中对构件按单体,楼层,专业,构件分类,系统类型等进行分类或映射。

目前在实际项目中,不同专业的团队成员可能会采用不同软件进行建模,然后再将不同格式的模型导入如Navisworks等软件中,但这样的方法有如下的缺点:

  • 即使仅为了满足浏览模型的需求,也需要安装用来集成不同格式模型的桌面端软件;
  • 桌面端软件支持的模型文件格式有限,无法满足多种文件格式的模型集成需求;
  • 在诸如Navisworks等软件中进行的模型导入只做了几何的导入集成,不支持上面提到的建筑领域各种分类信息;
  • 只支持桌面端浏览模型,同时软件也对操作系统有明确要求,普遍无法支持移动端的iOS和安卓操作系统;

针对上述的限制,BIMFACE的模型集成,能完美解决上述的所有问题。

在业务方面,BIMFACE的模型集成能:

  • 集成不同专业的模型,包括建筑、结构、装修、幕墙、钢构,以及机电中给排水、采暖燃气、通风空调、消防、强弱电等各专业。
  • 自定义楼层映射
  • 支持单体,系统类型,构件类型等其他分类维度
  • 支持模型链接集成,如带标准层的集成模型
  • 支持自定义文件转换矩阵(transform)

在技术方法,BIMFACE的模型集成充分运用了云端无穷的计算资源,在模型集成过程中:

  • 运用图形几何算法进行了如下优化,大大提升在浏览器里能展示模型的规模以及渲染的性能:构件属性在云端进行入库索引,提供任意的属性查询能力。
    • 识别基本体
    • 实例绘制优化
    • 同材质全场景动态合并
    • 外围壳光线追踪识别
  • 构件属性在云端进行入库索引,提供任意的属性查询能力

当单个模型文件转换成功以后,可以将多个单文件集成,生成一个全专业/楼层模型。由于集成不能立即完成,BIMFACE支持在模型集成完成以后,通过Callback机制通知调用方(请参考作者的博客《C#开发BIMFACE系列36 服务端API回调机制》);另外,调用方也可以通过接口查询集成状态。目前BIMFACE支持集成的模型文件格式包括:rvt、dgn、ifc、nwd、skp、3dm、3ds、fbx、stp。

下面的截图分别是建筑模型、结构模型、集成后的模型效果图,可以直观的看出建筑与结构集成后的效果。

BIMFACE官方提供了非常丰富的模型集成接口

下面详细讲解模型集成接口如何实现上述的集成效果。

接口地址:PUT https://api.bimface.com/integrate

接口参数:

请求 header(示例):"Authorization: Bearer dc671840-bacc-4dc5-a134-97c1918d664b"

请求 body:

 1 {
 2   "callback" : "https://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" : [ "https://m.bimface.com/dc6aa5e35b6a269972b005b4b2aac8ce/thumbnail/96.png", "https://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 https://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二次开发系列目录 【已更新最新开发文章,点击查看详细】

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C#开发BIMFACE系列49 Web网页中加载模型与图纸的技术方案

    C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken

    张传宁IT讲堂
  • C#开发BIMFACE系列41 服务端API之模型对比

      在建筑施工图审查系统中,设计单位提交设计完成的模型/图纸,审查专家审查模型/图纸。审查过程中如果发现不符合规范的地方,则流程退回到设计单位,设计单位人员根据...

    张传宁IT讲堂
  • C#开发BIMFACE系列37 网页集成开发1:审图系统中加载模型或图纸

    在之前的《C#开发BIMFACE系列》中主要介绍了BIMFACE平台提供的服务端API接口的封装开发与测试过程。

    张传宁IT讲堂
  • C#开发BIMFACE系列42 服务端API之图纸对比

    在我的前一篇博客《C#开发BIMFACE系列41 服务端API之模型对比》中详细介绍了BIMFACE服务端接口模型对比的功能。 BIMFACE官方文档提供的三维...

    张传宁IT讲堂
  • C#开发BIMFACE系列26 服务端API之获取模型数据11:获取单个面积分区信息

    在《C#开发BIMFACE系列25 服务端API之获取模型数据9:获取楼层对应面积分区列表》一文中介绍了如何获取单个模型中单个楼层包含的面积分区列表。有了面积分...

    张传宁IT讲堂
  • C#开发BIMFACE系列24 服务端API之获取模型数据9:获取单个房间信息

    大厦建筑模型中,基本上包含多个楼层,每个楼层包含多个房间等信息。在《C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息》中介绍了...

    张传宁IT讲堂
  • C#开发BIMFACE系列15 服务端API之获取模型的View token

    在《C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken》中详细介绍了应用程序访问API的令牌凭证。我们知道 Access tok...

    张传宁IT讲堂
  • C#开发BIMFACE系列25 服务端API之获取模型数据10:获取楼层对应面积分区列表

    在《C#开发BIMFACE系列22 服务端API之获取模型数据7:获取多个模型的楼层信息》中,返回的楼层信息结果中包含了楼层的具体信息,其中包含楼层ID。

    张传宁IT讲堂
  • C#开发BIMFACE系列30 服务端API之模型对比1:发起模型对比

      在实际项目中,由于需求变更经常需要对模型文件进行修改。为了便于用户了解模型在修改前后发生的变化,BIMFACE提供了模型在线对比功能,可以利用在线的模型对比...

    张传宁IT讲堂
  • C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken

    BIMFACE 平台为开发者提供了大量的服务器端 API 与 JavaScript API,用于二次开发 BIM 的相关应用。

    张传宁IT讲堂
  • C#开发BIMFACE系列39 网页集成开发3:审图系统中三维模型比对

      在建筑施工图审查系统中,设计单位提交设计完成的模型/图纸,审查专家审查模型/图纸。审查过程中如果发现不符合规范的地方,则流程退回到设计单位,设计单位人员根据...

    张传宁IT讲堂
  • C#开发BIMFACE系列36 服务端API之:回调机制

      在《C# 开发 BIMFACE 系列文章》中介绍了模型转换、模型对比接口。这2个功能接口比较特殊,发起请求后,逻辑处理是在BIMFACE云端进行的,通常需要...

    张传宁IT讲堂
  • C#开发BIMFACE系列12 服务端API之文件转换

    在模型成功进行转换后,模型内的BIM信息会在云端进行解析,抽取并结构化入库。这些信息包含:

    张传宁IT讲堂
  • C#开发BIMFACE系列5 服务端API之文件直传

    BIMFACE使用了分布式对象存储来存储用户上传的模型/图纸文件。如使用普通的文件上传接口, 文件流会通过BIMFACE的服务器,再流向最终的分布式存储系统,整...

    张传宁IT讲堂
  • C#开发BIMFACE系列43 服务端API之图纸拆分

    在上一篇博客《C#开发BIMFACE系列42 服务端API之图纸对比》的最后留了一个问题,在常规业务场景下,一个.dwg文件中包含多个图框,如下图

    张传宁IT讲堂
  • C#开发BIMFACE系列20 服务端API之获取模型数据5:批量获取构件属性

    在《C#开发BIMFACE系列18 服务端API之获取模型数据3:获取构件属性》中介绍了获取单个文件/模型的单个构建的属性,本篇介绍如何一次性获取多个构建的属性...

    张传宁IT讲堂
  • C#开发BIMFACE系列6 服务端API之获取文件信息

    在《C#开发BIMFACE系列4 服务端API之源上传文件》、《C#开发BIMFACE系列5 服务端API之文件直传》两篇文章中详细介绍了如何将本地文件上传到B...

    张传宁IT讲堂
  • C#开发BIMFACE系列31 服务端API之模型对比2:获取模型对比状态

      在上一篇《C#开发BIMFACE系列30 服务端API之模型对比1:发起模型对比》中发起了2个模型对比,由于模型对比是在BIMFACE云端进行的,通常需要5...

    张传宁IT讲堂
  • C#开发BIMFACE系列33 服务端API之模型对比4:获取模型对比结果

      模型对比可以对两个文件/模型进行差异性分析,确定两个文件/模型之间构件的几何和属性差异,包括增加的构件、删除的构件和修改的构件。 模型对应可以用于进行文件/...

    张传宁IT讲堂

扫码关注云+社区

领取腾讯云代金券