一、新建项目

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

最新文章

  1. iOS开发系列--地图与定位
  2. Redis安装测试(待完善)
  3. Lua 与 Redis
  4. eap-tls
  5. Ansible-Tower快速入门-3.快速开始【翻译】
  6. win10 下runtime error 解决办法
  7. 用python画xy散点图
  8. [原创]用C++类实现单向链表的增删查和反转操作
  9. Android Studio-设置快速修复错误提示代码
  10. 使用Git Bash for Windows
  11. IOS基础之 (十) 内存管理
  12. IT技术人士 不能一辈子靠技术生存
  13. linux下如何执行PHP脚本
  14. [LeetCode] 55. Jump Game 解题思路
  15. Linux下rar unrar的安装
  16. Ubuntu14.0.4 64位安装Chrome浏览器
  17. 探索Oracle之数据库升级七 11gR2 to 12c 升级完毕后插入PDB
  18. JDK动态代理机制
  19. hibernate 配置文件
  20. Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to ;XX.XX.XX.XX:6379] with root cause

热门文章

  1. Deutsch lernen (12)
  2. springboot:基础学习一 linux下后台启动springboot项目
  3. 通俗易懂之SpringMVC&amp;Struts2前端拦截器详解
  4. [frontend] 根据文字长度 自适应宽度 自适应高度+ Uncaught ReferenceError: xxx is not defined at HTMLDivElement.onclick
  5. Linux思维导图之inode、mv、cp和硬软链接
  6. Golang - 开篇必须吹牛逼
  7. JAVA关键技术
  8. QT5.4.1在ARM开发板上不能显示汉字
  9. 在Win32 Application 环境下实现MFC窗口的创建
  10. CodeForces 396C On Changing Tree