xBIM 基础02 快速入门

1、新建项目

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

因为选择了Xbim.Essentials 5.0.213版本,其依赖性较多git

安装该dll后,引用了不少dll数据库

2、建立凭证,打开文件

首先,您应该建立凭据,用于 在IFC世界中保留全部实体的全部者历史记录。架构

 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语句中使用它们,以下所示:函数

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数据库来存储数据。您可使用其余参数来明确说出您想要的内容。您还能够传入将报告进度的委托。性能

3、建立文件

   若是要从头开始建立新模型,也可使用如下功能。在这种状况下,您必须指定应该使用哪一个架构和存储,由于咱们不知道您须要什么,而且模型须要从一开始就知道这两件事。还要确保为您建立的模型使用正确的模式名称空间,由于您没法在单个模型中混合来自多个模式的数据。ui

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

1 using (var model = IfcStore.Create(editor, IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel))
2 {
3     //...do something with the model
4 }

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

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

全部与实体相关的操做均可经过IModel.Instances建立。这是您在模型中获取,更改和建立新实体的访问入口。要建立任何新对象,请使用此模板化函数。code

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

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

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

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。

 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     }
 
相关文章
相关标签/搜索