一、新建项目

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

由于选择了Xbim.Essentials 5.0.213版本,其依赖性较多

安装该dll后,引用了很多dll

二、创建凭证,打开文件

首先,您应该创建凭据,用于 在IFC世界中保留所有实体的所有者历史记录。

         /// <summary>
/// 创建凭证
/// </summary>
/// <returns></returns>
public static XbimEditorCredentials CreateCredentials()
{
XbimEditorCredentials editor = new XbimEditorCredentials
{
ApplicationDevelopersName = "NJQY", //应用开发商名称
ApplicationFullName = "SparkDigitalReview", //应用程序名称
ApplicationIdentifier = "NJQYf43a-faa7-4a49-b06d-4cb21f81d220", //应用程序标示符,通过Guid来表示
ApplicationVersion = "4.0", //个人信息
EditorsFamilyName = "Zhang",
EditorsGivenName = "ChuanNing",
EditorsOrganisationName = "bim"
}; return editor;
}

xBIM中所有对IModel接口的所有实现都是可释放的(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()
}

所有与实体相关的操作都可通过IModel.Instances创建。这是您在模型中获取,更改和创建新实体的访问入口。要创建任何新对象,请使用此模板化函数。

【您始终必须指定要创建的非抽象类型。这是在xBIM中构建的,如果不这样,就会出现编译时错误。每个模型都是特定于模式的,因此它是IFC2x3或IFC4或其他特定模式。IfcStore使它更容易,因为它可以打开两个IFC版本,并会告诉你它是什么,但是当你想要创建数据时,请确保你不要搞砸你的using陈述。如果您尝试使用初始化为IFC2x3的模型创建IFC4实体,则会抛出运行时异常。】

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");

您可以看到所有这些函数都是模板化的,因此它们使用对象的类型作为第一级过滤器。如果您知道所需的类型,则应始终指定它以提高性能。对于所有搜索查询,您还可以使用接口来检索实体。我们在IFC2x3实体上实现了IFC4接口,这意味着您可以使用单个代码库查询IFC2x3和IFC4 。

使用所有这些基本的东西,您的第一个简单代码可能如下所示。因为它使用Xbim.Ifc4.Interfaces,此代码将同时适用于IFC2x3和IFC4。

 public class QuickStart
{
public static void Start()
{
const string fileName = "SampleHouse.ifc"; //可以是 IFC2x3 或者 IFC4 格式的文件
var credentials = XBIMUtility.CreateCredentials(); using (var model = IfcStore.Open(fileName, credentials))
{
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 基础02 快速入门的更多相关文章

  1. Objective-C基础语法快速入门

    Objective-C基础语法快速入门 2010-11-04 16:32 折酷吧 zheku8 字号:T | T 假如我们对面向对象的思维已经C语言都很熟悉的话,对于我们学习Objective-C将会 ...

  2. 【个人笔记】003-PHP基础-01-PHP快速入门-03-PHP环境搭建

    003-PHP基础-01-PHP快速入门 03-PHP环境搭建 1.客户端(浏览器) IE FireFox CHROME Opera Safari 2.服务器 是运行网站的基本 是放置程序代码的地方 ...

  3. 【个人笔记】002-PHP基础-01-PHP快速入门-02-PHP语言相关介绍输

    002-PHP基础-01-PHP快速入门 02-PHP语言相关介绍 1.PHP是什么 Hypertext Preprocessor超文本预处理器 是一种通用开源脚本语言 Personal Home P ...

  4. 【个人笔记】001-PHP基础-01-PHP快速入门-01-PHP职业路线及PHP前景

    001-PHP基础-01-PHP快速入门 01-PHP职业路线及PHP前景 PHP职业路线 PHP初级工程师 1年以下 3k-6k PHP中级工程师 1-3年6k-10k PHP高级工程师 3年以上  ...

  5. php编程零基础如何快速入门。门头沟编程

    昨天遇到一个人,说知道thinktphp,不过几年前的事了. 我先跟他讲了下,xyhcms后台功能,各个版块,以及数据库都介绍了一下. 跟他说了一个功能现场实现,说了实现方法. 然后上机操作,发现他表 ...

  6. JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务

    JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...

  7. springboot笔记02——快速入门quickstart

    前言 学习一个新的框架,往往会用一个quickstart快速入门,这次就写一下springboot的quickstart程序. 开发环境 JDK 1.8 Springboot 2.1.6 Maven ...

  8. Java基础组件快速入门

    最近需要上线很多新的JAVA项目,然而很多JAVA的相关库都不太熟悉,项目实现起来遇到了不小阻力,熬了好几天夜.现在手头的工作基本完成了,因此打算好好来归纳下java的相关工具库,将来需要借助你们,好 ...

  9. 【零基础】快速入门爬虫框架HtmlUnit

    迅速的HtmlUnit htmlunit是一款开源的web页面分析工具,理论上来说htmlunit应用于网页的自动化测试,但是相对来说更多人使用它来进行小型爬虫的快速开发.使用htmlunit进行爬虫 ...

随机推荐

  1. 【原创】python中文编码问题深入分析(三):python2.7文件读写中文编码问题

    上一篇文章介绍和分析了python2.7中使用print遇到的中文编码问题的原因和解决方案,本篇主要介绍一下python2.7中执行文件读写可能遇到的编码问题. 1.文件读取 假如我们读取一个文件,文 ...

  2. Unity与Android通信的中间件

    2.1.1 Fragment和Activity都需要实现的接口——IBaseView/** * Description:Basic interface of all {@link Activity} ...

  3. JAVA版CORBA程序

    1.题目分析题目1.Java版CORBA程序1——HelloWorld编写实现显示“Hello,World!+班级+中文姓名”字符串.题目2.JAVA版CORBA程序2——Counter编写实现连加. ...

  4. 【转载自JHBlogs的博客】postman接口自动化,环境变量的用法详解(附postman常用的方法)

    在实现接口自动测试的时候,会经常遇到接口参数依赖的问题,例如调取登录接口的时候,需要先获取登录的key值,而每次请求返回的key值又是不一样的,那么这种情况下,要实现接口的自动化,就要用到postma ...

  5. 【剑指Offer】49、把字符串转换成整数

      题目描述:   将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字 ...

  6. NOIP2016 DAY2 T3 愤怒的小鸟

    传送门 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0)(0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的 ...

  7. Python学习笔记之类与对象

    这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...

  8. elementUI 时间选择器,时间选择快捷键

    elementUI的时间快捷键,使用属性:picker-options="pickerOptions",由于pickerOptions的定义很长,也在其他地方共用,因此建议提取出来 ...

  9. 4.Thymeleaf的常用标签

    一.常用标签 二.foreach案例 1.创建项目 2. 创建Student.java package cn.kgc.pojo; /** * Created by Administrator on 2 ...

  10. Shell入门基础

    Shell的Helloworld #!/bin/bash echo "helloworld taosir" 执行方式 方式一:用 bash 或 sh 的相对或绝对路径(不用赋予脚本 ...