首頁>技術>

一、新建專案

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 = "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");            }        }    }}

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 淺析 React / Vue 跨端渲染原理與實現