阅读 71

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

在上一篇博客《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}/split12         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         try21         {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             else31             {32                 response = new SplitDrawingResponse33                 {34                     Message = httpResult.RefText35                 };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}/split10         string url = string.Format(BIMFaceConstants.API_HOST + "/files/{0}/split", fileId);11 12         BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders();13         headers.AddOAuth2Header(accessToken);14 15         try16         {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             else26             {27                 response = new SplitDrawingResponse28                 {29                     Message = httpResult.RefText30                 };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}/frames10         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         try16         {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             else26             {27                 response = new SplitDrawingResultResponse28                 {29                     Message = httpResult.RefText30                 };31             }32 33             return response;34         }35         catch (Exception ex)36         {37             throw new BIMFaceException("[获取图纸拆分结果]发生异常!", ex);38         }39     }

复制代码

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

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

成在管理,败在经验;嬴在选择,输在不学!  贵在坚持!

 

欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。

   

 个人作品

   

    1、BIMFace.Community.SDK.NET

     开源地址:https://gitee.com/NAlps/BIMFace.SDK

     系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html

     系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html

   

    2、ZCN.NET.Common

     开源地址:https://gitee.com/NAlps/zcn.net.common

 技术栈

   

 1、Visual Studio、.C#/.NET、.NET Core、MVC、Web API、RESTful API、gRPC、SignalR、Python

 2、jQuery、Vue.js、Bootstrap

 3、数据库:SQLServer、MySQL、PostgreSQL、Oracle、SQLite、Redis、MongoDB、ElasticSearch、TiDB、达梦DM、人大金仓、 神通、南大通用 GBase、华为 GaussDB 、腾讯 TDSQL 、阿里 PolarDB、蚂蚁金服 OceanBase、东软 OpenBASE、浪潮云溪数据库 ZNBase

 4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分库分表、读写分离

 5、架构:领域驱动设计 DDD、ABP

 6、环境:跨平台、Windows、Linux(CentOS、麒麟、统信UOS、深度Linux)、maxOS、IIS、Nginx、Apach

 7、移动App:Android、IOS、HarmonyOS、微信、小程序、快应用、Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、Smobiler

   

 云原生、微服务、Docker、CI/CD、DevOps、K8S;

 Dapr、RabbitMQ、Kafka、分布式、大数据、高并发、负载均衡、中间件、RPC、ELK;

 .NET + Docker + jenkins + Github + Harbor + K8S;

出处:www.cnblogs.com/SavionZhang

作者:张传宁  


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐