xBIM 高級01 IFC多模型合併

  • 2019 年 10 月 4 日
  • 筆記

系列目錄 【已更新最新開發文章,點擊查看詳細】

多模型合併可以實現以下功能:

  • 覆蓋多個模型以表現得像一個模型
  • 統一訪問數據,就像它是單個模型一樣
  • 只讀。要修改模型的內容,您必須使用特定模型
  • 不限於單個模式(聯合IFC2x3 + IFC4→將其作為IFC4接口查詢)
  • IFC聯合可以存儲為單個IFC文件(在IfcStore中)
using System;  using Xbim.Common.Step21;  using Xbim.Ifc;  using Xbim.Ifc4.Interfaces;    namespace BasicExamples  {      public class FederationExample      {          public void CreateFederation()          {              var editor = new XbimEditorCredentials              {                  ApplicationDevelopersName = "You",                  ApplicationFullName = "Your app",                  ApplicationIdentifier = "Your app ID",                  ApplicationVersion = "4.0",                    EditorsFamilyName = "Santini Aichel",                  EditorsGivenName = "Johann Blasius",                  EditorsOrganisationName = "Independent Architecture"              };              using (var federation = IfcStore.Create(editor, IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel))              {                  federation.AddModelReference("SampleHouse.ifc", "Bob The Builder", "Original Constructor"); //IFC4                  federation.AddModelReference("SampleHouseExtension.ifc", "Tyna", "Extensions Builder"); //IFC2x3                    Console.WriteLine($"Model is federation: {federation.IsFederation}");                  Console.WriteLine($"Number of overall entities: {federation.FederatedInstances.Count}");                  Console.WriteLine($"Number of walls: {federation.FederatedInstances.CountOf<IIfcWall>()}");                  foreach (var refModel in federation.ReferencedModels)                  {                      Console.WriteLine();                      Console.WriteLine($"    Referenced model: {refModel.Name}");                      Console.WriteLine($"    Referenced model organization: {refModel.OwningOrganisation}");                      Console.WriteLine($"    Number of walls: {refModel.Model.Instances.CountOf<IIfcWall>()}");                  }                    // 保存為單一文件,工其他場景下使用                  federation.SaveAs("federation.ifc");              }          }      }  }

控制台輸出如下所示:

Model is federation: True  Number of overall entities: 50303  Number of walls: 8        Referenced model: SampleHouse.ifc      Referenced model organization: Bob The Builder      Number of walls: 5        Referenced model: SampleHouseExtension.ifc      Referenced model organization: Tyna      Number of walls: 3

保存為IFC文件的聯合設置如下所示。這個慣例純粹是我們的發明,所以它不適用於其他工具。但它允許您在系統中創建聯合,並在需要時再次重新打開它們。

ISO-10303-21;  HEADER;  FILE_DESCRIPTION ((''), '2;1');  FILE_NAME ('', '2016-10-27T13:14:43', (''), (''), 'Xbim File Processor version 3.2.0.0', 'Xbim version 3.2.0.0', '');  FILE_SCHEMA (('IFC4'));  ENDSEC;  DATA;  #1=IFCACTORROLE(.USERDEFINED.,'Original Constructor',$);  #2=IFCORGANIZATION($,'Bob The Builder',$,(#1),$);  #3=IFCDOCUMENTINFORMATION('1','SampleHouse.ifc',$,$,$,'XbimReferencedModel',$,$,#2,$,$,$,$,$,$,$,$);  #4=IFCACTORROLE(.USERDEFINED.,'Extensions Builder',$);  #5=IFCORGANIZATION($,'Tyna',$,(#4),$);  #6=IFCDOCUMENTINFORMATION('2','SampleHouseExtension.ifc',$,$,$,'XbimReferencedModel',$,$,#5,$,$,$,$,$,$,$,$);  ENDSEC;  END-ISO-10303-21;