xBIM 基礎02 快速入門


一、新建項目

  Visual Studio 新建項目、項目創建完成后 Nuget ,項目添加 Xbim.Essentials,那么如果項目需要幾何引擎還需要集成 Xbim.Geometry。xBIM背后有多年的發展,這兩個包都很成熟,非常穩定。

由於選擇了Xbim.Essentials 5.0.213版本,其依賴性較多

安裝該dll后,引用了很多dll

二、創建憑證,打開文件

首先,您應該創建憑據,用於 在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數據庫來存儲數據。您可以使用其他參數來明確說出您想要的內容。您還可以傳入將報告進度的委托。

三、創建文件

   如果要從頭開始創建新模型,也可以使用以下功能。在這種情況下,您必須指定應該使用哪個架構和存儲,因為我們不知道您需要什么,並且模型需要從一開始就知道這兩件事。還要確保為您創建的模型使用正確的模式名稱空間,因為您無法在單個模型中混合來自多個模式的數據。

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

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

  如果要在模型中創建或修改任何內容,則必須使用事務。這些也應該在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>();

  除了使用此功能之外,無法以任何其他方式創建新實體。您將在上面的代碼中看到,此函數使用可選的類型化對象初始值設定項來設置對象的值。沒有必要使用它們,但我個人喜歡它,因為我可以看到結果實體的結構。要查找所需的實體,您將使用以下功能:除了使用此功能之外,無法以任何其他方式創建新實體。您將在上面的代碼中看到,此函數使用可選的類型化對象初始值設定項來設置對象的值。沒有必要使用它們,但我個人喜歡它,因為我可以看到結果實體的結構。要查找所需的實體,您將使用以下功能:

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     }
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM