zoukankan      html  css  js  c++  java
  • xBIM 应用与学习 (二)

         目录 

    一、新建项目

        Visual Studio 新建项目、项目创建完成后 Nuget ,项目添加 Xbim.Essentials,那么如果项目需要几何引擎还需要集成 Xbim.Geometry。xBIM经过多年的发展,这两个包都比较稳定。

    • Package Manager 
       Install-Package Xbim.Essentials -Version 4.0.29  /  Install-Package Xbim.Geometry -Version 4.0.11
    • .NET CLI
        dotnet add package Xbim.Essentials --version 4.0.29  /dotnet add package Xbim.Geometry --version 4.0.1            

    二、创建凭证,打开文件

    用于IFC 文件保留所有实体的所有者历史信息; IfcOwnerHistory :定义所有的历史信息和识别相关。为了提供快速访问,它直接连接到所有独立的对象、关系和属性。

    var editor = new XbimEditorCredentials
    {
        ApplicationDevelopersName = "You", //应用开发商名称
        ApplicationFullName = "Your app",  //应用程序名称
        ApplicationIdentifier = "Your app ID", //应用程序标示符
        ApplicationVersion = "4.0", 
        //您的个人信息
        EditorsFamilyName = "lu",
        EditorsGivenName = "yongqiang",
        EditorsOrganisationName = "bim" 
    };

    IModel 在xBIM中的所有实现都是IDisposable这样的,建议在开发时应用 using

    using (var model = IfcStore.Open(fileName, editor, true))
    {
        //...do something with the model
    }

    IfcStore.Open()能识别别文件格式 .ifc,.ifczip,* .xml)和IFC版本(IFC2x3,IFC4)使用这个静态函数,它也决定是否应该使用内存模型或Esent数据库来存储数据。你可以使用额外的参数来明确你想要的。你也可以通过一个代表,报告进度。

    三、创建文件

          如果要从头开始创建新模型,也可以使用以下功能。在这种情况下,您必须指定应该使用哪个模式和存储,因为我们不知道您需要什么,模型需要从一开始就知道这两件事情。另外,请确保您为所创建的模型使用正确的模式名称空间,因为您无法在单个模型中混合来自多个模式的数据。

    IfcSchemaVersion.Ifc4 是枚举,代表IFC的版本,当前最新的版本是IFC 4
    using (var model = IfcStore.Create(editor, IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel))
    {
        //...do something with the model
    }

    如果要在模型中创建或修改任何内容,则必须使用事务。这些也应该在using语句中使用,以便在事件发生的时候有适当的回滚操作范围。您必须明确提交事务以保持更改。事务不能嵌套,所以当时总是只有一个事务。

    using (var txn = model.BeginTransaction("Hello Wall"))
    {
        //....do something in the scope of this transaction
        txn.Commit()
    }

    所有的相关实体都可以通过model.Instances来创建。这个是你在模型中获取、更改和常见新的实体的入口点。创建任何新的对象,你需要用到这个模板函数。

    var newWall = mode.Instances.New<IfcWall>();

    除了使用这个函数之外,不可能以任何其他方式创建新的实体。你会在上面的代码中看到,这个函数使用可选的类型化对象初始化器来设置对象的值。没有必要使用它们,但我个人喜欢它,因为我可以看到结果实体的结构。要找到您想要的实体,您将使用以下功能:

    var firstWall = model.Instances.FirstOrDefault<IfcWall>();  //获取默认的第一个
    var allWalls = model.Instances.OfType<IfcWall>(); //获取所有
    var specificWall = model.Instances.Where<IfcWall>(w => w.Name == "Brick wall");  //检索 墙的名称为 Brick wall 

    您可以看到,所有这些函数都是模板化的,所以它们使用对象的类型作为第一级过滤器。如果你知道你想要的类型,你应该总是指定它来提高性能。对于所有的搜索查询,您也可以使用接口来检索实体。我们在IFC2x3实体上实现了IFC4接口,这意味着您可以用一个代码库查询IFC2x3和IFC4 使用所有这些基本的东西,你的第一个简单的代码可能看起来像这样。因为它使用Xbim.Ifc4.Interfaces这个代码将同时适用于IFC2x3和IFC4。

    using Xbim.Ifc;
    using Xbim.Ifc4.Interfaces; //IFC4 接口 同样也适用于 IFC2x3 架构实现
    
    namespace BasicExamples
    {
        class QuickStart
        {
            public static void Start()
            {
                const string fileName = "SampleHouse.ifc"; //这是不带任何IFC3 x 3 或 IFC4 版本
                var editor = new XbimEditorCredentials
                {
                    ApplicationDevelopersName = "You",  // 应用开发商名称
                    ApplicationFullName = "Your app",   //应用程序名称
                    ApplicationIdentifier = "Your app ID",  //应用程序标识符
                    ApplicationVersion = "4.0",     //版本
                    //您的个人信息
                    EditorsFamilyName = "lu,
                    EditorsGivenName = "yongqiang",
                    EditorsOrganisationName = "个人、企业"  //组织机构
                };
                using (var model = IfcStore.Open(fileName, editor, true))
                {
                   //创建一个是事务
                    using (var txn = model.BeginTransaction("Quick start transaction"))
                    {
                        //获取模型中所有的墙
                        var walls = model.Instances.OfType<IIfcWall>();
    
                        //遍历所有的墙 并且改变他们的名称
                        foreach (var wall in walls)
                        {
                            wall.Name = "Iterated wall: " + wall.Name;
                        }
    
                        //提交事务 
                        txn.Commit();
                    }
    
                    //保存更改后的模型 IfcStore 可以使用的扩展名为 *.ifc, *.ifczip or *.ifcxml.
                    model.SaveAs("SampleHouse_Modified.ifc");
                }
            }
        }
    }
  • 相关阅读:
    June 26th 2017 Week 26th Monday
    June 25th 2017 Week 26th Sunday
    June 24th 2017 Week 25th Saturday
    June 23rd 2017 Week 25th Friday
    June 22nd 2017 Week 25th Thursday
    2018最佳网页设计:就是要你灵感爆棚!!!
    图片素材类Web原型制作分享-Pexels
    想要打动HR的心,UX设计师求职信究竟应该怎么写?
    【UXPA大赛企业专访】Mockplus:“设计替代开发”将成为现实
    2018年最好的医疗网站设计及配色赏析
  • 原文地址:https://www.cnblogs.com/w2011/p/8387862.html
Copyright © 2011-2022 走看看