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)图框需要有明确的图签字段。
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.SDK.NET
开源地址:https://gitee.com/NAlps/BIMFace.SDK
系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html
技术栈
1、Visual Studio、.NET Core/.NET、MVC、Web API、RESTful API、gRPC、SignalR、Java、Python
2、jQuery、Vue.js、Bootstrap、ElementUI
3、数据库:分库分表、读写分离、SQLServer、MySQL、PostgreSQL、Redis、MongoDB、ElasticSearch、达梦DM
4、架构:DDD、ABP、SpringBoot、jFinal
5、环境:跨平台、Windows、Linux、Nginx
6、移动App:Android、IOS、HarmonyOS、微信小程序、钉钉、uni-app、MAUI
分布式、高并发、云原生、微服务、Docker、CI/CD、DevOps、K8S;Dapr、RabbitMQ、Kafka、RPC、Elasticsearch。
欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。
出处:www.cnblogs.com/SavionZhang
作者:张传宁 技术顾问、培训讲师、微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。
专注于企业级通用开发平台、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。
多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。
熟悉中小企业软件开发过程:可行调研、需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业实现互联网转型升级全流程解决方案。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。
如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!