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     }
 
相關文章
相關標籤/搜索