专栏首页.NET企业级解决方案应用与咨询C#开发BIMFACE系列43 服务端API之图纸拆分

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

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

2、获取图纸拆分状态

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

调用接口

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

3、获取图纸拆分结果

完整的拆分结果如下

{
  "code": "success",
  "message": null,
  "data": [
    {
      "frames": [
        {
          "boundingBox": {
            "min": {
              "x": 686680.0,
              "y": 1066999.0
            },
            "max": {
              "x": 770782.0,
              "y": 1126401.0
            }
          },
          "id": 1,
          "name": "unknown-name",
          "number": "unknown-no-1"
        },
        {
          "boundingBox": {
            "min": {
              "x": 752146.0,
              "y": 1010435.0
            },
            "max": {
              "x": 836248.0,
              "y": 1069837.0
            }
          },
          "id": 2,
          "name": "电气抗震设计专篇",
          "number": "电施01"
        },
        {
          "boundingBox": {
            "min": {
              "x": 875778.0,
              "y": 1006559.0
            },
            "max": {
              "x": 1054130.0,
              "y": 1132711.0
            }
          },
          "id": 3,
          "name": "一层电气平面(一)",
          "number": "电施02"
        },
        {
          "boundingBox": {
            "min": {
              "x": 1070846.0,
              "y": 1006559.0
            },
            "max": {
              "x": 1249198.0,
              "y": 1132711.0
            }
          },
          "id": 4,
          "name": "一层电气平面(二)",
          "number": "电施03"
        },
        {
          "boundingBox": {
            "min": {
              "x": 1261883.0,
              "y": 1006559.0
            },
            "max": {
              "x": 1440235.0,
              "y": 1132711.0
            }
          },
          "id": 5,
          "name": "屋顶防雷平面",
          "number": "电施04"
        },
        {
          "boundingBox": {
            "min": {
              "x": 1460840.0,
              "y": 1006559.0
            },
            "max": {
              "x": 1639192.0,
              "y": 1132711.0
            }
          },
          "id": 6,
          "name": "基础接地平面",
          "number": "电施05"
        }
      ],
      "id": 0,
      "name": "Model"
    }
  ]
}

说明:

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

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

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

(4)id:图纸序号

(5)name:图纸名称

(6)number:图号

调用接口

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

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

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

    在前两篇博客《C#开发BIMFACE系列42 服务端API之图纸对比》、《C#开发BIMFACE系列43 服务端API之图纸拆分》中介绍了单文件多图框的拆分与对...

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

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

    张传宁IT讲堂
  • 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系列39 网页集成开发3:审图系统中三维模型比对

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

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

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

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

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

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

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

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

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

    张传宁IT讲堂
  • C#开发BIMFACE系列50 Web网页中使用jQuery加载模型与图纸

    在前一篇博客《C#开发BIMFACE系列49 Web网页集成BIMFACE应用的技术方案》中介绍了目前市场主流的Web开发技术与应用框架,其中前端脚本的应用在国...

    张传宁IT讲堂
  • C#开发BIMFACE系列51 Web网页中使用Vue.js加载模型与图纸

    在前一篇博客《C#开发BIMFACE系列50 Web网页中使用jQuery加载模型与图纸》中详细介绍了在网页中使用jQuery加载模型与图纸

    张传宁IT讲堂
  • C#开发BIMFACE系列29 服务端API之获取模型数据14:获取图纸列表

    一个三维模型中可能包含对应多张二维图纸列表,本篇主要介绍如何获取模型文件对应的图纸列表。

    张传宁IT讲堂
  • C#开发BIMFACE系列1 BIMFACE 简介

    BIMFACE 是广联达公司旗下的一款具有完全自主知识产权的BIM轻量化引擎,建筑行业的软件开发者可在BIMFACE所提供的基础功能上进行二次开发,为终端用户提...

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

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

    张传宁IT讲堂
  • C#开发BIMFACE系列2 二次开发流程

      BIMFACE 平台是一个对外开放的平台,建筑行业的相关公司、软件公司或者有 BIM 业务需求的公司都可以注册成为开发者并使用其提供的强大功能。

    张传宁IT讲堂
  • C#开发BIMFACE系列45 服务端API之创建离线数据包

    BIMFACE的常规应用方式有公有云与私有化部署两种方式,并且浏览模型或者图纸需要使用ViewToken,ViewToken 有效期为12小时,过期后需要调用接...

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

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

    张传宁IT讲堂
  • C#开发BIMFACE系列40 服务端API之模型集成

      随着建筑信息化模型技术的发展,越来越多的人选择在云端浏览建筑模型。现阶段的云端模型浏览大多是基于文件级别,一次只可以浏览一个模型文件中的内容。而在工程项目模...

    张传宁IT讲堂

扫码关注云+社区

领取腾讯云代金券