一、新建專案
Visual Studio 新建專案、專案建立完成後 Nuget ,專案新增 Xbim.Essentials,那麼如果專案需要幾何引擎還需要整合 Xbim.Geometry。xBIM經過多年的發展,這兩個包都比較穩定。
Package ManagerInstall-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 = "You FamilyName", EditorsGivenName = "You GivenName", 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>(); //檢索 牆的名稱為 Brick wall var specificWall = model.Instances.Where<IfcWall>(w => w.Name == "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"); } } }}