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. 1 {
  2. 2 "callback" : "https://api.glodon.com/viewing/callback?authCode=6kj0Jk0affae&signature=2ef131395fb6442eb99abd83d45c6016",
  3. 3 "config" : {},
  4. 4 "name" : "integrate",
  5. 5 "sourceId" : "hduf2w3ho21nowr23rqwjrn2o3",
  6. 6 "sources" : [ {
  7. 7 "fileId" : 1656504297006400
  8. 8 },
  9. 9 {
  10. 10 "fileId" : 1552501367034816
  11. 11 }]
  12. 12 }

HTTP响应示例(200):

  1. 1 {
  2. 2 "code" : "success",
  3. 3 "data" : {
  4. 4 "createTime" : "2017-12-25 17:25:25",
  5. 5 "integrateId" : 1248789977538784,
  6. 6 "name" : "integrate-x",
  7. 7 "reason" : "reason",
  8. 8 "sourceId" : "123156522123",
  9. 9 "status" : "success",
  10. 10 "thumbnail" : [ "https://m.bimface.com/dc6aa5e35b6a269972b005b4b2aac8ce/thumbnail/96.png", "https://m.bimface.com/dc6aa5e35b6a269972b005b4b2aac8ce/thumbnail/256.png" ]
  11. 11 },
  12. 12 "message" : ""
  13. 13 }

C#实现方法:

  1. 1 /// <summary>
  2. 2 /// 发起2个模型集成。
  3. 3 /// 由于集成不能立即完成,BIMFACE支持在模型集成完成以后,通过Callback机制通知调用方;另外,调用方也可以通过接口查询集成状态。
  4. 4 /// </summary>
  5. 5 /// <param name="accessToken">【必填】令牌</param>
  6. 6 /// <param name="fileId1">集成时的请求参数</param>
  7. 7 /// <param name="fileId2">集成时的请求参数</param>
  8. 8 /// <param name="callBack">集成时的请求参数</param>
  9. 9 /// <returns></returns>
  10. 10 public virtual ModelIntegrateResponse Integrate(string accessToken, long fileId1, long fileId2, string callBack = "")
  11. 11 {
  12. 12 //PUT https://api.bimface.com/integrate
  13. 13 string url = BIMFaceConstants.API_HOST + "/integrate";
  14. 14
  15. 15 FileIntegrateRequest request = new FileIntegrateRequest();
  16. 16
  17. 17 IntegrateSource source1 = new IntegrateSource(fileId1);
  18. 18 IntegrateSource source2 = new IntegrateSource(fileId2);
  19. 19 request.Sources = new IntegrateSource[] { source1, source2 };
  20. 20 request.CallBack = callBack;
  21. 21
  22. 22 string data = request.SerializeToJson();
  23. 23
  24. 24 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders();
  25. 25 headers.AddOAuth2Header(accessToken);
  26. 26
  27. 27 try
  28. 28 {
  29. 29 ModelIntegrateResponse response;
  30. 30
  31. 31 HttpManager httpManager = new HttpManager(headers);
  32. 32 HttpResult httpResult = httpManager.Put(url, data);
  33. 33 if (httpResult.Status == HttpResult.STATUS_SUCCESS)
  34. 34 {
  35. 35 response = httpResult.Text.DeserializeJsonToObject<ModelIntegrateResponse>();
  36. 36 }
  37. 37 else
  38. 38 {
  39. 39 response = new ModelIntegrateResponse
  40. 40 {
  41. 41 Message = httpResult.RefText
  42. 42 };
  43. 43 }
  44. 44
  45. 45 return response;
  46. 46 }
  47. 47 catch (Exception ex)
  48. 48 {
  49. 49 throw new BIMFaceException("[发起模型集成]发生异常!", ex);
  50. 50 }
  51. 51 }

代码中使用的 HttpManager 类请参考我的博客文章《C# HTTP系列 HttpWebRequest 与 HttpWebResponse》。

返回类型 ModelIntegrateResponse 类如下:

  1. 1 public class ModelIntegrateResponse : GeneralResponse<FileIntegrateBean>
  2. 2 {
  3. 3
  4. 4 }
  1. 1 public class FileIntegrateBean
  2. 2 {
  3. 3 /// <summary>
  4. 4 /// 对比开始时间,格式:yyyy-MM-dd hh:mm:ss
  5. 5 /// </summary>
  6. 6 [JsonProperty("createTime", NullValueHandling = NullValueHandling.Ignore)]
  7. 7 public string CreateTime { get; set; }
  8. 8
  9. 9 /// <summary>
  10. 10 /// 集成成功后返回的ID,用于获取对比状态或者结果等信息
  11. 11 /// </summary>
  12. 12 [JsonProperty("integrateId", NullValueHandling = NullValueHandling.Ignore)]
  13. 13 public long? IntegrateId { get; set; }
  14. 14
  15. 15 /// <summary>
  16. 16 /// 用户指定集成后的模型的名字
  17. 17 /// </summary>
  18. 18 [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)]
  19. 19 public string Name { get; set; }
  20. 20
  21. 21 /// <summary>
  22. 22 /// 对比优先级。取值 1、2、3。数字越大,优先级越低。默认为2
  23. 23 /// </summary>
  24. 24 [JsonProperty("priority", NullValueHandling = NullValueHandling.Ignore)]
  25. 25 public int? Priority { get; set; }
  26. 26
  27. 27 /// <summary>
  28. 28 /// 若对比失败,返回失败原因
  29. 29 /// </summary>
  30. 30 [JsonProperty("reason", NullValueHandling = NullValueHandling.Ignore)]
  31. 31 public string Reason { get; set; }
  32. 32
  33. 33 /// <summary>
  34. 34 /// 第三方应用自己的ID
  35. 35 /// </summary>
  36. 36 [JsonProperty("sourceId", NullValueHandling = NullValueHandling.Ignore)]
  37. 37 public string SourceId { get; set; }
  38. 38
  39. 39 /// <summary>
  40. 40 /// 对比状态:prepare(待对比)、processing(对比中)、success(对比成功)、failed(对比失败)
  41. 41 /// </summary>
  42. 42 [JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)]
  43. 43 public string Status { get; set; }
  44. 44
  45. 45 [JsonProperty("thumbnail", NullValueHandling = NullValueHandling.Ignore)]
  46. 46 public string[] Thumbnails { get; set; }
  47. 47
  48. 48 /// <summary>
  49. 49 /// 模型集成的类型 rvt(或者igms…​)
  50. 50 /// </summary>
  51. 51 [JsonProperty("type", NullValueHandling = NullValueHandling.Ignore)]
  52. 52 public string Type { get; set; }
  53. 53 }

测试程序:

BIMFACE控制台中查询到的集成结果如下:

集成成功后,等待一段时间,查看集成结果如下图:

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

BIMFACE二次开发系列目录     【已更新最新开发文章,点击查看详细】

C#开发BIMFACE系列40 服务端API之模型集成的更多相关文章

  1. C#开发BIMFACE系列41 服务端API之模型对比

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在建筑施工图审查系统中,设计单位提交设计完成的模型/图纸,审查专家审查模型/图纸.审查过程中如果发现不符合规范的地方,则流 ...

  2. C#开发BIMFACE系列30 服务端API之模型对比1:发起模型对比

    系列目录     [已更新最新开发文章,点击查看详细] 在实际项目中,由于需求变更经常需要对模型文件进行修改.为了便于用户了解模型在修改前后发生的变化,BIMFACE提供了模型在线对比功能,可以利用在 ...

  3. C#开发BIMFACE系列31 服务端API之模型对比2:获取模型对比状态

    系列目录     [已更新最新开发文章,点击查看详细] 在上一篇<C#开发BIMFACE系列30 服务端API之模型对比1:发起模型对比>中发起了2个模型对比,由于模型对比是在BIMFAC ...

  4. C#开发BIMFACE系列32 服务端API之模型对比3:批量获取模型对比状态

    系列目录     [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列31 服务端API之模型对比2:获取模型对比状态>中介绍了根据对比ID,获取一笔记录的对比状态.由于模 ...

  5. C#开发BIMFACE系列33 服务端API之模型对比4:获取模型对比结果

    系列目录     [已更新最新开发文章,点击查看详细] 模型对比可以对两个文件/模型进行差异性分析,确定两个文件/模型之间构件的几何和属性差异,包括增加的构件.删除的构件和修改的构件. 模型对应可以用 ...

  6. C#开发BIMFACE系列35 服务端API之模型对比6:获取模型构建对比分类树

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE平台提供了服务端"获取模型对比构件分类树"API.目录树返回结果以树状层级关系显示了增删改的构件信息,里面无法 ...

  7. C#开发BIMFACE系列34 服务端API之模型对比5:获取模型构件对比差异

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE平台提供了服务端“获取修改构件属性差异”API,其返回的结果也是一个列表,仅针对修改的构件(不包含新增.删除的构件),是指对于一个 ...

  8. C#开发BIMFACE系列42 服务端API之图纸对比

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在我的前一篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>中详细介绍了BIMFACE服务端接口 ...

  9. C#开发BIMFACE系列43 服务端API之图纸拆分

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在上一篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>的最后留了一个问题,在常规业务场景下,一 ...

随机推荐

  1. clojure配置

    1.转换clojure工程为eclipse工程 Install Counterclockwise plugin in Eclipse (from eclipse marketplace). This ...

  2. flex布局中flex属性运用在随机发红包的算法上

    flex布局是现在前端基本上都会运用的一种布局,基本上用到比较多的是父元素设置display:flex,两个子元素,一个设置固定宽度,另一个设置为flex:1(这里都指flex-direction为r ...

  3. kubebuilder实战之六:构建部署运行

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. cmd关闭端口占用

    netstat -nao |findStr "8080" taskkill /pid 15406  /f

  5. 眼见为实,看看MySQL中的隐藏列!

    在介绍mysql的多版本并发控制mvcc的过程中,我们提到过mysql中存在一些隐藏列,例如行标识.事务ID.回滚指针等,不知道大家是否和我一样好奇过,要怎样才能实际地看到这些隐藏列的值呢? 本文我们 ...

  6. MySQL大数据迁移备份

    MySQL迁移通常使用的有三种方法:   1.数据库直接导出,拷贝文件到新服务器,在新服务器上导入. 2.使用第三方迁移工具. 3.数据文件和库表结构文件直接拷贝到新服务器,挂载到同样配置的MySQL ...

  7. 基于Linux的系统排错

    1.系统引导过程概述 2.系统异常及恢复 [1]grub系统引导 1)mbr上446字节丢失 模拟问题: dd if=/dev/zero? of=/dev/vda? bs=446? count=1? ...

  8. Tars | 第7篇 TarsJava Subset最终代码的测试方案设计

    目录 前言 1. SubsetConf配置项的结构 1.1 SubsetConf 1.2 RatioConfig 1.3 KeyConfig 1.4 KeyRoute 1.5 SubsetConf的结 ...

  9. Java字符串常量池及字符串判等解析

    一.理解"=="的含义 "=="常用于两个对象的判等操作,在Java中,"=="主要有以下两种用法: 1.基础数据类型:比较的是他们的值是否 ...

  10. J2EE分布式微服务云开发架构 Spring Cloud+Mybatis+ElementUI 前后端分离J2EE分布式微服务云开发架构 Spring Cloud+Mybatis+ElementUI 前后端分离

    ​ 鸿鹄云架构[系统管理平台]是一个大型企业.分布式.微服务.云架构的JavaEE体系快速研发平台,基于模块化.微服务化.原子化.热部署的设计思想,使用成熟领先的无商业限制的主流开源技术(Spring ...