xBIM 基础16 IFC的空间层次结构
本篇介绍如何从文件中检索空间结构。IFC中的空间结构表示层次结构的嵌套结构,表示项目,站点,建筑物,楼层和空间。如果您查看IFC文档, 您会发现建筑物可以包含楼层以及其他建筑物,楼层可以包含空间以及其他楼层等。此类关系也使用IfcRelAggregates建模, 但如果要查找特定空间结构中包含的元素,则将其建模为 IfcRelContainedInSpatialStructure, 因此它取决于您要查找的内容。下面的示例演示如何使用上述两种关系搜索和遍历数据以获得完整的层次结构。
using System; using System.Linq; using Xbim.Ifc; using Xbim.Ifc4.Interfaces; namespace BasicExamples { class SpatialStructureExample { public static void Show() { const string file = "SampleHouse.ifc"; using (var model = IfcStore.Open(file)) { var project = model.Instances.FirstOrDefault<IIfcProject>(); PrintHierarchy(project, 0); } } private static void PrintHierarchy(IIfcObjectDefinition o, int level) { Console.WriteLine(string.Format("{0}{1} [{2}]", GetIndent(level), o.Name, o.GetType().Name)); // 只有空间元素可以包含建筑元素 var spatialElement = o as IIfcSpatialStructureElement; if (spatialElement != null) { // 使用 IfcRelContainedInSpatialElement 获取包含的元素 var containedElements = spatialElement.ContainsElements.SelectMany(rel => rel.RelatedElements); foreach (var element in containedElements) Console.WriteLine(string.Format("{0} ->{1} [{2}]", GetIndent(level), element.Name, element.GetType().Name)); } // 使用 IfcRelAggregares 获取空间结构元素的空间分解 foreach (var item in o.IsDecomposedBy.SelectMany(r => r.RelatedObjects)) PrintHierarchy(item, level +1); } private static string GetIndent(int level) { var indent = ""; for (int i = 0; i < level; i++) indent += " "; return indent; } } }
输出结果如下:
Project Number [IfcProject] Default [IfcSite] [IfcBuilding] Ground Floor [IfcBuildingStorey] ->Basic Wall:Wall-Ext_102Bwk-75Ins-100LBlk-12P:285330 [IfcWall] ->Basic Wall:Wall-Ext_102Bwk-75Ins-100LBlk-12P:285395 [IfcWall] ->Basic Wall:Wall-Ext_102Bwk-75Ins-100LBlk-12P:285459 [IfcWall] ->Curtain Wall:Curtain_Wall-Exterior_Glazing:285582 [IfcCurtainWall] ->Curtain Wall:Curtain_Wall-Exterior_Glazing:285684 [IfcCurtainWall] ->Basic Wall:Wall-Partn_12P-70MStd-12P:285792 [IfcWallStandardCase] ->Basic Wall:Wall-Partn_12P-70MStd-12P:285846 [IfcWallStandardCase] ->Doors_ExtDbl_Flush:1810x2110mm:285860 [IfcDoor] ->Doors_IntSgl:810x2110mm:285959 [IfcDoor] ->Doors_IntSgl:810x2110mm:285996 [IfcDoor] ->Windows_Sgl_Plain:1810x1210mm:286105 [IfcWindow] ->Windows_Sgl_Plain:1810x1210mm:286188 [IfcWindow] ->Windows_Sgl_Plain:1810x1210mm:286238 [IfcWindow] ->Compound Ceiling:Plain:286319 [IfcCovering] ->Compound Ceiling:Plain:286329 [IfcCovering] ->Compound Ceiling:Plain:286337 [IfcCovering] ->Floor:Floor-Grnd-Susp_65Scr-80Ins-100Blk-75PC:286349 [IfcSlab] ->Windows_Sgl_Plain:1810x1210mm:287567 [IfcWindow] 1 - Living room [IfcSpace] ->Furniture_Table_Dining_w-Chairs_Rectangular:2000x1000x750mm_w-6_Seats:289768 [IfcFurniture] ->Chair - Dining:Chair - Dining:289769 [IfcFurniture] ->Chair - Dining:Chair - Dining:289770 [IfcFurniture] ->Chair - Dining:Chair - Dining:289771 [IfcFurniture] ->Chair - Dining:Chair - Dining:289772 [IfcFurniture] ->Chair - Dining:Chair - Dining:290097 [IfcFurniture] ->Chair - Dining:Chair - Dining:290098 [IfcFurniture] ->Furniture_Couch_Viper:2290x950x340mm:290852 [IfcFurniture] ->Furniture_Chair_Viper:1120x940x350mm:291916 [IfcFurniture] ->Furniture_Chair_Viper:1120x940x350mm:292127 [IfcFurniture] ->Furniture_Table_Coffee_1:1200x550x450mm:293046 [IfcFurniture] ->Furniture_Piano:1370x600x1170mm:293961 [IfcFurniture] 2 - Bedroom [IfcSpace] ->Furniture_Desk:1525x762mm:287689 [IfcFurniture] ->Furniture_Bed_1:1525x2007x355mm-Queen:295878 [IfcFurniture] 3 - Entrance hall [IfcSpace] Roof [IfcBuildingStorey] ->Basic Roof:Roof_Flat-4Felt-150Ins-50Scr-150Conc-12Plr:286419 [IfcRoof] ->Floor:Simple floor:295048 [IfcSlab] 4 - Roof [IfcSpace]
成在管理,败在经验;嬴在选择,输在不学! 贵在坚持!
个人作品
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联系。共同交流、互相学习。
如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!