目录

一、新建项目

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

  • Package Manager

     Install-Package Xbim.Essentials -Version 4.0.  /  Install-Package Xbim.Geometry -Version 4.0.
  • .NET CLI
      dotnet add package Xbim.Essentials --version 4.0.  /dotnet add package Xbim.Geometry --version 4.0.            

二、创建凭证,打开文件

用于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");
}
}
}
}

xBIM 应用与学习 (二)的更多相关文章

  1. xBIM 应用与学习 (一)

    目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...

  2. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  3. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  4. TweenMax动画库学习(二)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  5. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

  6. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  7. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  8. Quartz学习--二 Hello Quartz! 和源码分析

    Quartz学习--二  Hello Quartz! 和源码分析 三.  Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...

  9. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

随机推荐

  1. bzoj:3994:vijos1949: [SDOI2015]约数个数和

    Description  设d(x)为x的约数个数,给定N.M,求     Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M.   O ...

  2. java线程间通信:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...

  3. angular2 表单验证

    模版式表单 (1) angular遇到form自动接管,不想自动接管,添加ngNoForm,当标签为div时,但想被表单接管,添加ngForm; (2) ngForm可以被模版本地变量引用,以便在模版 ...

  4. 番外篇--Moddule Zero多租户管理

    番外篇--Moddule Zero多租户管理 2.1.1 关于多租户 强烈建议阅读这个文件前阅读多租户文档. 2.1.2 启用多租户 ASP.NET Boilerplate和module-zero可以 ...

  5. 2017-6-14 踩坑小结(Android文件读写 相关问题)

    填坑 getSlotFromBufferLocked: unknown buffer: 0xab7115e0 1. 在棉花糖(6.0)上莫名出现 未知缓冲 错误,百度了一下,貌似这个是Android6 ...

  6. Oracle:FOR循环语句练习

    --打印输出从1到10的正整数DECLARE v_i NUMBER(10) := 0;BEGIN LOOP v_i := v_i + 1; DBMS_OUTPUT.put_line(v_i); EXI ...

  7. 织梦dedecms如何去除版权中的Power by DedeCms

    很多站长在使用dedecms建站过程中,很多人都会调用到dedecms自带的powerby标签,这样在版权信息中就会多出Power by DedeCms这个连接.今天教大家如何去除. 工具/原料 de ...

  8. ngRx 官方示例分析 - 3. reducers

    上一篇:ngRx 官方示例分析 - 2. Action 管理 这里我们讨论 reducer. 如果你注意的话,会看到在不同的 Action 定义文件中,导出的 Action 类型名称都是 Action ...

  9. 优化表单数据的JS校验

    在平常的web开发中,我经常需要在客户端对表单的数据进行验证.比如,我们验证表单输入的内容不为空: ? <form action="" method="post&q ...

  10. Java中的对象Object方法之---wait()和notifiy()

    这一篇咋们继续,接着来介绍wait()和notify()方法,我们都知道这两个方法和之前介绍的方法不太一样,那就是这两个方法是对象Object上的,不属于Thread类上的.我们也知道这两个方法是实现 ...