目錄
一、新建項目
Visual Studio 新建項目、項目創建完成后 Nuget ,項目添加 Xbim.Essentials,那么如果項目需要幾何引擎還需要集成 Xbim.Geometry。xBIM經過多年的發展,這兩個包都比較穩定。
- Package Manager
Install-Package Xbim.Essentials -Version 4.0.29 / Install-Package Xbim.Geometry -Version 4.0.11
- .NET CLI
dotnet add package Xbim.Essentials --version 4.0.29 /dotnet add package Xbim.Geometry --version 4.0.1
二、創建憑證,打開文件
用於IFC 文件保留所有實體的所有者歷史信息; IfcOwnerHistory :定義所有的歷史信息和識別相關。為了提供快速訪問,它直接連接到所有獨立的對象、關系和屬性。
var editor = new XbimEditorCredentials { ApplicationDevelopersName = "You", //應用開發商名稱 ApplicationFullName = "Your app", //應用程序名稱 ApplicationIdentifier = "Your app ID", //應用程序標示符 ApplicationVersion = "4.0", //您的個人信息 EditorsFamilyName = "lu", EditorsGivenName = "yongqiang", EditorsOrganisationName = "bim" };
IModel
在xBIM中的所有實現都是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() }
所有的相關實體都可以通過model.Instances來創建。這個是你在模型中獲取、更改和常見新的實體的入口點。創建任何新的對象,你需要用到這個模板函數。
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"); //檢索 牆的名稱為 Brick wall
您可以看到,所有這些函數都是模板化的,所以它們使用對象的類型作為第一級過濾器。如果你知道你想要的類型,你應該總是指定它來提高性能。對於所有的搜索查詢,您也可以使用接口來檢索實體。我們在IFC2x3實體上實現了IFC4接口,這意味着您可以用一個代碼庫查詢IFC2x3和IFC4 。使用所有這些基本的東西,你的第一個簡單的代碼可能看起來像這樣。因為它使用Xbim.Ifc4.Interfaces
這個代碼將同時適用於IFC2x3和IFC4。
using Xbim.Ifc; using Xbim.Ifc4.Interfaces; //IFC4 接口 同樣也適用於 IFC2x3 架構實現 namespace BasicExamples { class QuickStart { public static void Start() { const string fileName = "SampleHouse.ifc"; //這是不帶任何IFC3 x 3 或 IFC4 版本 var editor = new XbimEditorCredentials { ApplicationDevelopersName = "You", // 應用開發商名稱 ApplicationFullName = "Your app", //應用程序名稱 ApplicationIdentifier = "Your app ID", //應用程序標識符 ApplicationVersion = "4.0", //版本 //您的個人信息 EditorsFamilyName = "lu, EditorsGivenName = "yongqiang", EditorsOrganisationName = "個人、企業" //組織機構 }; using (var model = IfcStore.Open(fileName, editor, true)) { //創建一個是事務 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"); } } } }