Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >xBIM 基础02 快速入门

xBIM 基础02 快速入门

作者头像
张传宁IT讲堂
发布于 2019-09-17 09:33:02
发布于 2019-09-17 09:33:02
85600
代码可运行
举报
运行总次数:0
代码可运行

系列目录 【已更新最新开发文章,点击查看详细】

一、新建项目

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

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

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

二、创建凭证,打开文件

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1         /// <summary>
 2         ///  创建凭证
 3         /// </summary>
 4         /// <returns></returns>
 5         public static XbimEditorCredentials CreateCredentials()
 6         {
 7             XbimEditorCredentials editor = new XbimEditorCredentials
 8             {
 9                 ApplicationDevelopersName = "NJQY",                             //应用开发商名称
10                 ApplicationFullName = "SparkDigitalReview",                     //应用程序名称
11                 ApplicationIdentifier = "NJQYf43a-faa7-4a49-b06d-4cb21f81d220", //应用程序标示符,通过Guid来表示
12                 ApplicationVersion = "4.0",
13 
14                 //个人信息
15                 EditorsFamilyName = "Zhang",
16                 EditorsGivenName = "ChuanNing",
17                 EditorsOrganisationName = "bim"
18             };
19 
20             return editor;
21         }

xBIM中所有对IModel接口的所有实现都是可释放的(IDisposable),所以总是应该在using语句中使用它们,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 using (var model = IfcStore.Open(fileName, editor, true))
2 {
3     //...do something with the model
4 }

IfcStore.Open()足够智能识别文件格式( .ifc,.ifczip,*。xml)和IFC版本(IFC2x3,IFC4)。使用此静态函数,它还决定是否应使用内存模型或Esent数据库来存储数据。您可以使用其他参数来明确说出您想要的内容。您还可以传入将报告进度的委托。

三、创建文件

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

IfcSchemaVersion.Ifc4 是枚举,代表IFC的版本,当前最新的版本是IFC 4

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 using (var model = IfcStore.Create(editor, IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel))
2 {
3     //...do something with the model
4 }

  如果要在模型中创建或修改任何内容,则必须使用事务。这些也应该在using语句中使用,因此它们具有适当的范围,以便在发生某些情况时进行最终回滚操作。您必须明确提交事务以保留更改。事务不能嵌套,因此当时总是只有一个事务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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实体,则会抛出运行时异常。】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var newWall = mode.Instances.New<IfcWall>();

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 var firstWall = model.Instances.FirstOrDefault<IfcWall>();
2 var allWalls = model.Instances.OfType<IfcWall>();
3 var specificWall = model.Instances.Where<IfcWall>(w => w.Name == "Brick wall");

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 public class QuickStart
 2     {
 3         public static void Start()
 4         {
 5             const string fileName = "SampleHouse.ifc"; //可以是 IFC2x3 或者 IFC4 格式的文件
 6             var credentials = XBIMUtility.CreateCredentials();
 7 
 8             using (var model = IfcStore.Open(fileName, credentials))
 9             {
10                 using (var txn = model.BeginTransaction("Quick start transaction"))
11                 {
12                     // 获取模型中所有的墙
13                     var walls = model.Instances.OfType<IIfcWall>();
14 
15                     // 遍历所有的墙 并且改变他们的名称
16                     foreach (var wall in walls)
17                     {
18                         wall.Name = "Iterated wall: " + wall.Name;
19                     }
20 
21                     // 提交事务 
22                     txn.Commit();
23                 }
24 
25                 // 保存更改后的模型。 IfcStore 可以使用的扩展名为 *.ifc, *.ifczip or *.ifcxml.
26                 model.SaveAs("SampleHouse_Modified.ifc");
27             }
28         }
29     }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
xBIM 基础03 基本模型操作
  本篇将使用基本的代码示例来表示如何使用xBIM。我们将介绍持久存储的四个基本功能,即 CRUD(创建,检索,更新和删除)。以下示例通常适用于IFC4,但您也可以使用IFC2x3。实际上大多数代码都是IFC版本不可知的,因为它使用的IFC4接口也适用于IFC2x3。用于开发这些示例的示例数据可以在此处下载 。
张传宁IT讲堂
2019/09/17
1K0
xBIM 高级02 插入复制功能
  IFC 模型中的合并和删除实体是一个非常重要的任务,因为 IFC 不是一个分层结构。它是一个复杂的结构,具有潜在的循环关系,是一个双向导航。在单个实体上执行这些任务并不是问题(您可以将其想象为STEP21文件中的一行)。
张传宁IT讲堂
2019/09/17
6510
xBIM 高级03 更改日志创建
  模型中发生的每一个变化都是事务的一部分,这是我们设计的核心。所有事务都是由 IModel 的实现创建的,并且从中被弱引用,因此当使用 using 语句模型时,只要保留事务,就只保留对该事务的引用。这意味着有一个单一的点,所有的变化都在发生,我们可以用它们来做一些事情。
张传宁IT讲堂
2019/09/17
3610
xBIM 基础14 使用LINQ实现最佳性能(优化查询)
LINQ代表语言集成查询,它是3.5版以来的.NET Framework的一部分。它实现延迟执行,这意味着您可以链接查询语句,并且在您实际迭代结果之前它将不执行任何操作。您可以使用LINQ作为一个特定的语言,也可以使用扩展方法,从 System.Linq 延伸 IEnumerable<T> 的接口,并能得到参数作为lambda表达式。我们更喜欢后一种方法,但它是等效的。以下示例显示了两种变体都做同样的事情。两个查询的结果都是枚举具有任何开口的墙的全局唯一ID。
张传宁IT讲堂
2019/09/17
1K0
xBIM 基础05 3D墙案例
  使用编码的形式去生成一堵墙的模型需要做很多的工作。 1 using System; 2 using System.Collections.Generic; 3 using System.Diagnostics; 4 using System.Linq; 5 using Xbim.Common; 6 using Xbim.Common.Step21; 7 using Xbim.Ifc; 8 using Xbim.IO; 9 using Xbim.Ifc4.ActorR
张传宁IT讲堂
2019/09/17
1.2K0
xBIM 基础06 将STEP物理文件转换为XML
  STEP,它是Standard for the Exchange of Product model data的缩写。 产品数据交换标准STEP (Product data exchange standard STEP) 指国际标准化组织(ISO)制定的系列标准ISO 10303 《产品数据的表达与交换》。这个标准的主要目的是解决制造业中计算机环境下的设计和制造(CAD/CAM)的数据交换和企业数据共享的问题。中国陆续将其制定为同名国家标准,标准号为GB/T 16656。
张传宁IT讲堂
2019/09/17
1.6K0
xBIM 基础06 将STEP物理文件转换为XML
xBIM 高级01 IFC多模型合并
保存为IFC文件的联合设置如下所示。这个惯例纯粹是我们的发明,所以它不适用于其他工具。但它允许您在系统中创建联合,并在需要时再次重新打开它们。
张传宁IT讲堂
2019/09/17
7810
xBIM 基础15 IFC导出Excel报表
  本篇将向您展示从IFC文件读取数据所需的一些概念。它使用IFC4接口,适用于IFC2x3和IFC4型号。要创建Excel文件,我们使用NPOI。在这个例子中你只需要 xBIM Essentials 组件。包含样本数据的所有代码均可在此处获得。
张传宁IT讲堂
2019/09/17
8740
xBIM 基础15 IFC导出Excel报表
xBIM 实战04 在WinForm窗体中实现IFC模型的加载与浏览
  WPF底层使用 DirectX 进行图形渲染。DirectX 能理解可由显卡直接渲染的高层元素,如纹理和渐变,所以 DirectX 效率更高。而 GDI/GDI+不理解这些高层元素,因此必须将他们转换成逐像素指令,而通过现代显卡渲染这些指令更慢。WinForm 的绘图技术使用的就是GDI/GDI+技术。但是xBIM并没有提供专门针对传统 WinForm 技术的的模型查看器。如果确实需要在传统的 WinForm 窗体中也要加载并显示BIM(.ifc格式)模型文件该如何处理呢?
张传宁IT讲堂
2019/09/17
1.4K0
xBIM 实战04 在WinForm窗体中实现IFC模型的加载与浏览
xBIM 基础07 创建WebBIM文件
  xBIM项目提供了一个IFC文件的Web查看器。当你想把IFC转换成紧凑的WexBIM时,需要 xBIM Essentials 和 xBIM Geometry 。下面是用于将完整的IFC文件转换为WexBIM文件的非常简单的代码。因为XBIM是一个工具包,所以有很多方法可以为高级部署定制/过滤WEXBIM文件,但这比这个简单的转换要复杂得多:
张传宁IT讲堂
2019/09/17
5030
xBIM 基础08 WeXplorer 简介
  WeXplorer 是 XBIM 工具包的可视化部分,它使用预处理的 WexBIM 文件在 Web 上处理 IFC 数据的可视化。 它使用像 WebGL 这样的尖端 Web 技术,所以它无法在旧浏览器中运行,Chrome或Mozzilla,IE11和其他支持该技术的应用程序都可以很好地工作。使用 xBIM Essentials 和 xBIM Geometry 创建优化的和可视化压缩的 WexBIM 文件。WeXplorer 还包含 xBrowser 用于可视化来自 JSON 的 COBIRET 数据。
张传宁IT讲堂
2019/09/17
9620
xBIM 实战03 使用WPF技术实现IFC模型的加载与浏览
  WPF应用程序在底层使用 DirectX ,无论设计复杂的3D图形(这是 DirectX 的特长所在)还是绘制简单的按钮与文本,所有绘图工作都是通过 DirectX 管线完成的。在硬件加速方面也带来了好处,DirectX 在渲染图形时会将尽可能多的工作递交给图形处理单元(GPU)去处理,GPU是显卡的专用处理器。
张传宁IT讲堂
2019/09/17
9250
xBIM 实战03 使用WPF技术实现IFC模型的加载与浏览
xBIM 基础16 IFC的空间层次结构
本篇介绍如何从文件中检索空间结构。IFC中的空间结构表示层次结构的嵌套结构,表示项目,站点,建筑物,楼层和空间。如果您查看IFC文档, 您会发现建筑物可以包含楼层以及其他建筑物,楼层可以包含空间以及其他楼层等。此类关系也使用IfcRelAggregates建模, 但如果要查找特定空间结构中包含的元素,则将其建模为 IfcRelContainedInSpatialStructure, 因此它取决于您要查找的内容。下面的示例演示如何使用上述两种关系搜索和遍历数据以获得完整的层次结构。
张传宁IT讲堂
2019/09/17
9860
xBIM 基础01 简介
  BIM(Building Information Modelling)建筑信息模型,xBIM(eXtensible Building Information Modelling)可扩展的建筑信息模型。它是一个.NET 开源软件开发BIM工具包,支持BuildingSmart数据模型(又名工业基础类IFC)
张传宁IT讲堂
2019/09/17
2.2K0
xBIM 基础01  简介
xBIM 实战01 在浏览器中加载IFC模型文件
  由于WexXplorer 加载的是 .wexBIM格式的文件或者文件流,所以需要在Web.config文件中添加如下配置
张传宁IT讲堂
2019/09/17
1.2K0
xBIM 实战01 在浏览器中加载IFC模型文件
xBIM 基础09 WeXplorer 基本应用
  在本教程中,将学习如何创建最基本和最直接的查看器。 除了展示建筑模型外,不做其他任何操作。它将只使用内置导航,但是不会对按钮做出事件响应。
张传宁IT讲堂
2019/09/17
7050
xBIM 基础10 WeXplorer 浏览器检查
  在上一篇 《xBIM基础 09 WeXplorer 基本应用》 已经提到,查看器不会在所有浏览器的所有设备上运行。为了操作效率和简单,决定使用最新技术 。浏览器应该满足几个先决条件才能运行查看器。请不要放弃检查浏览器的版本,它可以运行在带有 Chrome 或 Mozilla 的几年前的个人电脑上,并将运行在平板电脑和移动设备上。主要制约因素是关于IE 的,直到 IE11才支持 WebGL。为了开发与用户体验更友好,查看器有一个静态功能来检查它的运行要求。
张传宁IT讲堂
2019/09/17
4560
xBIM 基础11 WeXplorer 常用事件
  本篇将介绍查看器在不同场合触发的事件。所有这些都记录在xViewer中。 如果您从Web服务器运行本教程,可以在此处查看完整的实例。并且确保您的网络服务器设置为作为静态内容提供wexBIM文件。
张传宁IT讲堂
2019/09/17
4990
xBIM 基础11 WeXplorer 常用事件
xBIM 实战02 在浏览器中加载IFC模型文件并设置特效
都是通过 xbim-viewer.js 中的 API 来设置以达到一定的效果。代码如下:
张传宁IT讲堂
2019/09/17
1.5K0
xBIM 实战02 在浏览器中加载IFC模型文件并设置特效
xBIM 基础04 日志操作
  xBIM使用Log4Net来记录异常不适合的处理错误和警告。它在xBIM几何引擎中被大量使用来记录所有几何错误。如果您的文件看起来不太正确,则应始终先检查日志。Log4Net有许多可能的配置,包括记录到控制台,创建连续或滚动日志文件等。这里可以找到一些例子。在控制台中编写所有彩色日志消息的最基本配置可能如下所示:
张传宁IT讲堂
2019/09/17
4390
相关推荐
xBIM 基础03 基本模型操作
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验