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

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

那么当前版本与历史版本对比完成后,在Web网页中点击差异项可以自动定位到图元变化所在位置。是否可以知道差异项来自哪个图框呢?

这篇博客针对该问题进行详细的讲解。

图纸拆分应用场景与效果

1、应用场景

     一个.dwg文件中包含多个图框,在BIMFACE中浏览时,可以根据图框编号与名称定位到具体的图框,使用更加便捷。

2、效果

(1)未拆分

(2)已拆分

拆分后的图纸,工具条上多了一个“图纸”按钮,点击后弹出图纸列表层,每一项里面包含“图纸名称”与“图号”,点击图纸项,自动定位到对应的图纸。

图纸拆分规则说明

1、图框识别,按照以下条件综合判断

(1)图框符合国标的标准尺寸,如A0,A0(1+1/4)等。标准的尺寸识别准确率更高,但也考虑了一定的容差,若图幅与规范有一定的出入仍可被识别。

(2)图框中包含图签信息,如图纸名称、图纸编号等信息。

2、图签识别,可以识别以下字段

(1)图纸名称(图名、标题、图纸内容)

(2)图纸序号(图号、图纸编号、张次、竣工图号、页码)

(3)图纸专业(专业、图别、设计专业、专业名称、图纸类别)

(4)工程名称(工程项目、项目、设计项目、工程总称)

(5)图纸日期(日期、升版日期、出图日期、修改日期、编制日期)

3、注意事项

(1)相邻的图框不要相连,不要重叠。

(2)图框外不要有额外的矩形框。

(3)图框需要有明确的图签字段。

图纸拆分API

1、发起拆分

调用接口

  1. 1 /// <summary>
  2. 2 /// 通过图纸文件ID,按图框拆分图纸。
  3. 3 /// (提示:图纸拆分必须在【图纸转换】接口完成且转换状态为 success 之后才能发起,拆分是在转换成功的基础之上进行的)
  4. 4 /// </summary>
  5. 5 /// <param name="accessToken">【必填】令牌</param>
  6. 6 /// <param name="fileId">【必填】代表该单图纸的文件ID</param>
  7. 7 /// <param name="callbak">【选填】回调url。图纸拆分是一个耗时的操作,并不能立刻完成。可以通过回调地址通知拆分结果</param>
  8. 8 /// <returns></returns>
  9. 9 public SplitDrawingResponse SplitDrawing(string accessToken, long fileId, string callbak = "")
  10. 10 {
  11. 11 // PUT https://api.bimface.com/files/{fileId}/split
  12. 12 string url = string.Format(BIMFaceConstants.API_HOST + "/files/{0}/split", fileId);
  13. 13 if (callbak.IsNotNullAndWhiteSpace())
  14. 14 {
  15. 15 url += "?callback=" + callbak.UriEscapeDataString();
  16. 16 }
  17. 17 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders();
  18. 18 headers.AddOAuth2Header(accessToken);
  19. 19
  20. 20 try
  21. 21 {
  22. 22 SplitDrawingResponse response;
  23. 23
  24. 24 HttpManager httpManager = new HttpManager(headers);
  25. 25 HttpResult httpResult = httpManager.Put(url);
  26. 26 if (httpResult.Status == HttpResult.STATUS_SUCCESS)
  27. 27 {
  28. 28 response = httpResult.Text.DeserializeJsonToObject<SplitDrawingResponse>();
  29. 29 }
  30. 30 else
  31. 31 {
  32. 32 response = new SplitDrawingResponse
  33. 33 {
  34. 34 Message = httpResult.RefText
  35. 35 };
  36. 36 }
  37. 37
  38. 38 return response;
  39. 39 }
  40. 40 catch (Exception ex)
  41. 41 {
  42. 42 throw new BIMFaceException("[通过图纸文件ID,按图框拆分图纸]发生异常!", ex);
  43. 43 }
  44. 44 }

2、获取图纸拆分状态

图纸拆分不能立刻完成,需要等待一段时间。可以通过 callback 方式获取拆分的信息(不推荐),也可以通过 BIMFACE 提供的接口进行查询。

调用接口

  1. 1 /// <summary>
  2. 2 /// 获取图纸拆分状态
  3. 3 /// </summary>
  4. 4 /// <param name="accessToken">【必填】令牌</param>
  5. 5 /// <param name="fileId">【必填】代表该单图纸的文件ID</param>
  6. 6 /// <returns></returns>
  7. 7 public SplitDrawingResponse GetSplitDrawingStatus(string accessToken, long fileId)
  8. 8 {
  9. 9 // GET https://api.bimface.com/files/{fileId}/split
  10. 10 string url = string.Format(BIMFaceConstants.API_HOST + "/files/{0}/split", fileId);
  11. 11
  12. 12 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders();
  13. 13 headers.AddOAuth2Header(accessToken);
  14. 14
  15. 15 try
  16. 16 {
  17. 17 SplitDrawingResponse response;
  18. 18
  19. 19 HttpManager httpManager = new HttpManager(headers);
  20. 20 HttpResult httpResult = httpManager.Get(url);
  21. 21 if (httpResult.Status == HttpResult.STATUS_SUCCESS)
  22. 22 {
  23. 23 response = httpResult.Text.DeserializeJsonToObject<SplitDrawingResponse>();
  24. 24 }
  25. 25 else
  26. 26 {
  27. 27 response = new SplitDrawingResponse
  28. 28 {
  29. 29 Message = httpResult.RefText
  30. 30 };
  31. 31 }
  32. 32
  33. 33 return response;
  34. 34 }
  35. 35 catch (Exception ex)
  36. 36 {
  37. 37 throw new BIMFaceException("[获取图纸拆分状态]发生异常!", ex);
  38. 38 }
  39. 39 }

3、获取图纸拆分结果

完整的拆分结果如下

  1. {
  2. "code": "success",
  3. "message": null,
  4. "data": [
  5. {
  6. "frames": [
  7. {
  8. "boundingBox": {
  9. "min": {
  10. "x": 686680.0,
  11. "y": 1066999.0
  12. },
  13. "max": {
  14. "x": 770782.0,
  15. "y": 1126401.0
  16. }
  17. },
  18. "id": 1,
  19. "name": "unknown-name",
  20. "number": "unknown-no-1"
  21. },
  22. {
  23. "boundingBox": {
  24. "min": {
  25. "x": 752146.0,
  26. "y": 1010435.0
  27. },
  28. "max": {
  29. "x": 836248.0,
  30. "y": 1069837.0
  31. }
  32. },
  33. "id": 2,
  34. "name": "电气抗震设计专篇",
  35. "number": "电施01"
  36. },
  37. {
  38. "boundingBox": {
  39. "min": {
  40. "x": 875778.0,
  41. "y": 1006559.0
  42. },
  43. "max": {
  44. "x": 1054130.0,
  45. "y": 1132711.0
  46. }
  47. },
  48. "id": 3,
  49. "name": "一层电气平面(一)",
  50. "number": "电施02"
  51. },
  52. {
  53. "boundingBox": {
  54. "min": {
  55. "x": 1070846.0,
  56. "y": 1006559.0
  57. },
  58. "max": {
  59. "x": 1249198.0,
  60. "y": 1132711.0
  61. }
  62. },
  63. "id": 4,
  64. "name": "一层电气平面(二)",
  65. "number": "电施03"
  66. },
  67. {
  68. "boundingBox": {
  69. "min": {
  70. "x": 1261883.0,
  71. "y": 1006559.0
  72. },
  73. "max": {
  74. "x": 1440235.0,
  75. "y": 1132711.0
  76. }
  77. },
  78. "id": 5,
  79. "name": "屋顶防雷平面",
  80. "number": "电施04"
  81. },
  82. {
  83. "boundingBox": {
  84. "min": {
  85. "x": 1460840.0,
  86. "y": 1006559.0
  87. },
  88. "max": {
  89. "x": 1639192.0,
  90. "y": 1132711.0
  91. }
  92. },
  93. "id": 6,
  94. "name": "基础接地平面",
  95. "number": "电施05"
  96. }
  97. ],
  98. "id": 0,
  99. "name": "Model"
  100. }
  101. ]
  102. }

说明:

(1)frames:一个dwg文件中的图框对象集合

(2)boundingBox:图框外的矩形框对象

(3)min、max:矩形框的左上角、右下角在图纸中的XY坐标

(4)id:图纸序号

(5)name:图纸名称

(6)number:图号

调用接口

  1. 1 /// <summary>
  2. 2 /// 获取图纸拆分结果
  3. 3 /// </summary>
  4. 4 /// <param name="accessToken"></param>
  5. 5 /// <param name="fileId"></param>
  6. 6 /// <returns></returns>
  7. 7 public SplitDrawingResultResponse GetSplitDrawingResult(string accessToken, long fileId)
  8. 8 {
  9. 9 // GET https://api.bimface.com/data/v2/files/{fileId}/frames
  10. 10 string url = string.Format(BIMFaceConstants.API_HOST + "/data/v2/files/{0}/frames", fileId);
  11. 11
  12. 12 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders();
  13. 13 headers.AddOAuth2Header(accessToken);
  14. 14
  15. 15 try
  16. 16 {
  17. 17 SplitDrawingResultResponse response;
  18. 18
  19. 19 HttpManager httpManager = new HttpManager(headers);
  20. 20 HttpResult httpResult = httpManager.Get(url);
  21. 21 if (httpResult.Status == HttpResult.STATUS_SUCCESS)
  22. 22 {
  23. 23 response = httpResult.Text.DeserializeJsonToObject<SplitDrawingResultResponse>();
  24. 24 }
  25. 25 else
  26. 26 {
  27. 27 response = new SplitDrawingResultResponse
  28. 28 {
  29. 29 Message = httpResult.RefText
  30. 30 };
  31. 31 }
  32. 32
  33. 33 return response;
  34. 34 }
  35. 35 catch (Exception ex)
  36. 36 {
  37. 37 throw new BIMFaceException("[获取图纸拆分结果]发生异常!", ex);
  38. 38 }
  39. 39 }

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

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

C#开发BIMFACE系列43 服务端API之图纸拆分的更多相关文章

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

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

  2. C#开发BIMFACE系列44 服务端API之计算图纸对比差异项来源自哪个图框

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

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

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 随着建筑信息化模型技术的发展,越来越多的人选择在云端浏览建筑模型.现阶段的云端模型浏览大多是基于文件级别,一次只可以浏览一 ...

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

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

  5. C#开发BIMFACE系列46 服务端API之离线数据包下载及结构详解

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在前一篇博客<C#开发BIMFACE系列45 服务端API之创建离线数据包>中通过调用接口成功的创建一个离线数 ...

  6. C#开发BIMFACE系列6 服务端API之获取文件信息

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

  7. C#开发BIMFACE系列4 服务端API之源上传文件

    在注册成为BIMFACE的应用开发者后,要能在浏览器里浏览你的模型或者获取你模型内的BIM数据, 首先需要把你的模型文件上传到BIMFACE.根据不同场景,BIMFACE提供了丰富的文件相关的接口. ...

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

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE 平台为开发者提供了大量的服务器端 API 与 JavaScript API,用于二次开发 BIM 的相关应用. BIMFACE ...

  9. C#开发BIMFACE系列7 服务端API之获取文件信息列表

    系列目录     [已更新最新开发文章,点击查看详细] 本文详细介绍如何获取BIMFACE平台中所有上传过的文件信息列表. 请求地址:GET https://file.bimface.com/file ...

随机推荐

  1. io中的特殊流Properties

    对于去年学习IO的时候一些代码贴上来: 初识properties,因为继承自hashtable,其中可以使用put操作: package special; import java.util.Prope ...

  2. RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列

    系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...

  3. ASP截取字符 截取字符之间的字符

    ASP截取字符:MID函数Mid(变量或字串符,开始字节, 结尾字节(可不填)) InStrRev(变量, "字串符")  最后出现位置InStr(变量, "字串符&qu ...

  4. MySQL中的seconds_behind_master的理解

    通过show slave status查看到的Seconds_Behind_Master,从字面上来看,他是slave落后master的秒数,一般情况下,也确实这样,我们可以通过Seconds_Beh ...

  5. MySQL-存储引擎-Myisam

    mysql> create table myisam_char(name char(10)) engine=myisam; Query OK, 0 rows affected (0.01 sec ...

  6. php实现验证码(数字、字母、汉字)

    验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码.好吧,其实是没有事情干,但是又不想浪费时间,所以学习了下php实现验证码.正所谓,技多不压身.而且,也 ...

  7. CSS3 animaion 和 transition 比较

    animation是CSS3的动画属性,可以设置以下六种属性. transition是CSS3的过度属性,可以设置以下四种属性. 从属性上分析,animation可以设定循环次数. 其次,两者的触发条 ...

  8. Windows系统一些好用的办公工具

    在日常办公过程中,总有一些工具令人觉得方便,提高了工作效率.以下是根据我的习惯,收集了一些好用的工具,在此记录且不定期更新. 文件名 说明 Everything 文件搜索工具,搜索速度快 ALTRun ...

  9. 《DotNet Web应用单文件部署系列》一、pubxml文件配置

    很多人想用DotNet开发软件赚点外快子补添家用,但心里总放不下心来,担心被人破解了.好消息是去年发布的DotNet 5支持单文件部署,不同于DotNet 3运行时将文件释放到临时文件夹内,DotNe ...

  10. Shiro03

    1.shiro授权角色.权限 2.Shiro的注解式开发 shiro权限思路 授权 ShiroUserMapper中定义两个方法 // 通过用户ID查询角色 Set<String> get ...