private IModel GetCobieModel(CobieConversionParams parameters) { var timer = new Stopwatch(); timer.Start(); var model = parameters.Source; if (model is IFederatedModel fm && fm.ReferencedModels.Count() > 1) { throw new NotImplementedException("Work to do on COBie Federated"); //see COBieLitConverter for Lite code } var cobie = parameters.NewCobieModel(); using (var txn = cobie.BeginTransaction("begin conversion")) { var exchanger = new IfcToCoBieExpressExchanger (model, cobie, parameters.ReportProgress, parameters.Filter, parameters.ConfigFile, parameters.ExtId, parameters.SysMode ); exchanger.Convert(); txn.Commit(); } timer.Stop(); parameters.ReportProgress(0, string.Format("Time to generate COBieLite data: {0} seconds", timer.Elapsed.TotalSeconds.ToString("F3"))); return(cobie); }
private List <CobieModel> GetCobieModels(IfcStore model, CobieConversionParams parameters) { List <CobieModel> cobieModels = new List <CobieModel>(); if (model.IsFederation == false) { var cobie = new CobieModel(); using (var txn = cobie.BeginTransaction("begin conversion")) { var exchanger = new IfcToCoBieExpressExchanger (model, cobie, Worker.ReportProgress, parameters.Filter, parameters.ConfigFile, parameters.ExtId, parameters.SysMode ); exchanger.Convert(); cobieModels.Add(cobie); txn.Commit(); } } else { throw new NotImplementedException("Work to do on COBie Federated"); //see COBieLitConverter for Lite code } return(cobieModels); }
public void ConvertIfcToCoBieExpress() { //const string input = @"c:\CODE\SampleData\LakesideRestaurant\LakesideRestaurant.ifc" ; //const string input = @"c:\CODE\XbimGit\XbimExchange\Xbim.COBie.Client\2012-03-23-Duplex-Design.ifc"; const string input = @"Duplex_MEP_20110907.ifc"; var inputInfo = new FileInfo(input); var ifc = IfcStore.Open(input); var inputCount = ifc.Instances.Count; var w = new Stopwatch(); var cobie = new CobieModel(); using (var txn = cobie.BeginTransaction("Duplex conversion")) { var exchanger = new IfcToCoBieExpressExchanger(ifc, cobie); w.Start(); exchanger.Convert(); w.Stop(); txn.Commit(); } var output = Path.ChangeExtension(input, ".cobie"); cobie.SaveAsStep21(output); //const string outputXml = "..\\..\\converted.xml"; //using (var outXml = File.Create(outputXml)) //{ // cobie.SaveAsXml(outXml, new XmlWriterSettings { IndentChars = " ", Indent = true }); // outXml.Close(); //} var outputInfo = new FileInfo(output); Console.WriteLine("Time to convert {0:N}MB file ({2} entities): {1}ms", inputInfo.Length / 1e6f, w.ElapsedMilliseconds, inputCount); Console.WriteLine("Resulting size: {0:N}MB ({1} entities)", outputInfo.Length / 1e6f, cobie.Instances.Count); using (var txn = cobie.BeginTransaction("Renaming")) { MakeUniqueNames <CobieFacility>(cobie); MakeUniqueNames <CobieFloor>(cobie); MakeUniqueNames <CobieSpace>(cobie); MakeUniqueNames <CobieZone>(cobie); MakeUniqueNames <CobieComponent>(cobie); MakeUniqueNames <CobieSystem>(cobie); MakeUniqueNames <CobieType>(cobie); txn.Commit(); } //save as XLSX output = Path.ChangeExtension(input, ".xlsx"); string report; cobie.ExportToTable(output, out report); }
public void ConvertIfcToCoBieExpress() { string input = Server.MapPath("~/ConversionFiles/") + Path.GetFileName(FileUploadIFC.PostedFile.FileName); //const string input = @"SampleHouse4.ifc"; var inputInfo = new FileInfo(input); var ifc = MemoryModel.OpenReadStep21(input); var inputCount = ifc.Instances.Count; var w = new Stopwatch(); var cobie = new CobieModel(); using (var txn = cobie.BeginTransaction("Sample house conversion")) { var exchanger = new IfcToCoBieExpressExchanger(ifc, cobie); w.Start(); exchanger.Convert(); w.Stop(); txn.Commit(); } var output = Path.ChangeExtension(input, ".cobie"); cobie.SaveAsStep21(output); var outputInfo = new FileInfo(output); Console.WriteLine("Time to convert {0:N}MB file ({2} entities): {1}ms", inputInfo.Length / 1e6f, w.ElapsedMilliseconds, inputCount); Console.WriteLine("Resulting size: {0:N}MB ({1} entities)", outputInfo.Length / 1e6f, cobie.Instances.Count); using (var txn = cobie.BeginTransaction("Renaming")) { MakeUniqueNames <CobieFacility>(cobie); MakeUniqueNames <CobieFloor>(cobie); MakeUniqueNames <CobieSpace>(cobie); MakeUniqueNames <CobieZone>(cobie); MakeUniqueNames <CobieComponent>(cobie); MakeUniqueNames <CobieSystem>(cobie); MakeUniqueNames <CobieType>(cobie); txn.Commit(); } //save as XLSX output = Path.ChangeExtension(input, ".xlsx"); cobie.ExportToTable(output, out string report); }
private static void ProcessFile(string fileName, ExchangeSettings settings) { var outDirectoryName = Path.GetDirectoryName(fileName); if (settings.OutputdDirectory != null) { outDirectoryName = settings.OutputdDirectory.FullName; } if (outDirectoryName == null) { return; } var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); var w = new Stopwatch(); w.Start(); Console.WriteLine("Reading " + fileName); using (var model = GetModel(fileName)) { if (model == null) { Console.WriteLine("No model to process. Press any key to exit"); Console.Read(); return; } Console.WriteLine("Model open in {0}ms", w.ElapsedMilliseconds); // wexbim w.Restart(); var wexBimFilename = GetSaveName(outDirectoryName, fileNameWithoutExtension, ".wexBIM"); Console.WriteLine("Creating " + wexBimFilename); var context = new Xbim3DModelContext(model); context.CreateContext(); using (var wexBiMfile = new FileStream(wexBimFilename, FileMode.Create, FileAccess.Write)) { using (var wexBimBinaryWriter = new BinaryWriter(wexBiMfile)) { model.SaveAsWexBim(wexBimBinaryWriter); wexBimBinaryWriter.Close(); } wexBiMfile.Close(); } Console.WriteLine("wexBIM model created in {0}ms", w.ElapsedMilliseconds); //now do COBieExpress // w.Restart(); Console.WriteLine("Creating CobieExpress memoryModel..."); var cobie = new MemoryModel(new EntityFactoryCobieExpress()); var cobieExpressFile = GetSaveName(outDirectoryName, fileNameWithoutExtension, ".cobie"); var cobieExpressXmlFile = GetSaveName(outDirectoryName, fileNameWithoutExtension, ".cobieXml"); var cobieExpressZipFile = GetSaveName(outDirectoryName, fileNameWithoutExtension, ".cobieZip"); using (var txn = cobie.BeginTransaction("IFC data in")) { var exchanger = new IfcToCoBieExpressExchanger(model, cobie); exchanger.Convert(); txn.Commit(); } Console.WriteLine("COBieExpress memoryModel created and commited in {0}ms...", w.ElapsedMilliseconds); w.Restart(); cobie.SaveAsStep21(File.Create(cobieExpressFile)); cobie.SaveAsStep21Zip(File.Create(cobieExpressZipFile)); cobie.SaveAsXml(File.Create(cobieExpressXmlFile), new XmlWriterSettings { Indent = true, IndentChars = "\t" }, XbimXmlSettings.IFC4Add2); Console.WriteLine("3 COBieExpress files (.cobie., cobieXml and .cobieZip) saved in {0}ms", w.ElapsedMilliseconds); //now do the DPoW files // w.Restart(); Console.WriteLine("Creating CobieLiteUK Model..."); var facilities = new List <Facility>(); var ifcToCoBieLiteUkExchanger = new IfcToCOBieLiteUkExchanger(model, facilities); facilities = ifcToCoBieLiteUkExchanger.Convert(); Console.WriteLine("{1} facilities converted in in {0}ms", w.ElapsedMilliseconds, facilities.Count ); var multipleFacilities = facilities.Count > 1; for (var index = 0; index < facilities.Count; index++) { w.Restart(); var facility = facilities[index]; var dpowNameExtension = "DPoW"; if (multipleFacilities) { dpowNameExtension += index + 1; } // write json var dPoWFile = GetSaveName(outDirectoryName, fileNameWithoutExtension + "_" + dpowNameExtension, ".json"); Console.Write("Creating " + dPoWFile + "..."); facility.WriteJson(dPoWFile); Console.WriteLine(" completed in {0}ms", w.ElapsedMilliseconds); // xlsx var cobieFile = Path.ChangeExtension(dPoWFile, "xlsx"); Console.WriteLine("Creating " + cobieFile + "..."); string error; facility.WriteCobie(cobieFile, out error); Console.WriteLine(" completed in {0}ms", w.ElapsedMilliseconds); if (!string.IsNullOrWhiteSpace(error)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("COBie Errors: " + error); Console.ResetColor(); } // dpow validation // if (!string.IsNullOrEmpty(settings.DpowRequirementFile)) { w.Restart(); Console.Write("Reading DPoW requirement file: " + settings.DpowRequirementFile + "..."); var req = Facility.ReadJson(settings.DpowRequirementFile); Console.WriteLine(" completed in {0}ms", w.ElapsedMilliseconds); w.Restart(); Console.Write("Validating DPOW..."); var validator = new FacilityValidator(); var result = validator.Validate(req, facility); Console.WriteLine(" completed in {0}ms", w.ElapsedMilliseconds); w.Restart(); var validationResults = Path.ChangeExtension(dPoWFile, "validationReport.xlsx"); Console.Write("writing validation report: " + validationResults); //create report using (var stream = File.Create(validationResults)) { var report = new ExcelValidationReport(); report.Create(result, stream, ExcelValidationReport.SpreadSheetFormat.Xlsx); stream.Close(); } Console.WriteLine(" completed in {0}ms", w.ElapsedMilliseconds); } // now attempt basic content validation and recovery // w.Restart(); Console.WriteLine("Validating and recovering..."); facility.ValidateUK2012(Console.Out, true); var cobieValidatedFile = Path.ChangeExtension(dPoWFile, "ValidationWithAttemptedRecovery.xlsx"); Console.ForegroundColor = ConsoleColor.DarkYellow; facility.WriteCobie(cobieValidatedFile, out error); Console.ResetColor(); Console.WriteLine("Completed in {0}ms", w.ElapsedMilliseconds); // now ifc // w.Restart(); dPoWFile = Path.ChangeExtension(dPoWFile, "ifc"); Console.Write("Creating " + dPoWFile + "..."); var credentials = new XbimEditorCredentials() { ApplicationDevelopersName = "XbimTeam", ApplicationFullName = "Xbim.Exchanger", EditorsOrganisationName = "Xbim Development Team", EditorsFamilyName = "Xbim Tester", ApplicationVersion = global::System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString() }; using (var ifcModel = IfcStore.Create(credentials, XbimSchemaVersion.Ifc2X3, XbimStoreType.EsentDatabase)) { using (var txn = ifcModel.BeginTransaction("Convert from COBieLiteUK")) { var coBieLiteUkToIIfcExchanger = new CoBieLiteUkToIfcExchanger(facility, ifcModel); coBieLiteUkToIIfcExchanger.Convert(); txn.Commit(); //var err = model.Validate(model.Instances, Console.Out); } ifcModel.SaveAs(dPoWFile, StorageType.Ifc); ifcModel.Close(); } Console.WriteLine(" completed in {0}ms", w.ElapsedMilliseconds); } model.Close(); } }
static void Main(string[] args) { if (args.Length < 1) { Console.WriteLine("No IIfc or xBim file specified"); return; } var fileName = args[0]; Console.WriteLine("Reading " + fileName); using (var model = GetModel(fileName)) { if (model == null) { Console.WriteLine("No model to process. Press any key to exit"); Console.Read(); return; } var context = new Xbim3DModelContext(model); context.CreateContext(); var wexBimFilename = Path.ChangeExtension(fileName, "wexBIM"); using (var wexBiMfile = new FileStream(wexBimFilename, FileMode.Create, FileAccess.Write)) { using (var wexBimBinaryWriter = new BinaryWriter(wexBiMfile)) { Console.WriteLine("Creating " + wexBimFilename); model.SaveAsWexBim(wexBimBinaryWriter); wexBimBinaryWriter.Close(); } wexBiMfile.Close(); } //now do COBieExpress var cobie = new MemoryModel(new EntityFactory()); var cobieExpressFile = Path.ChangeExtension(fileName, ".cobie"); var cobieExpressXmlFile = Path.ChangeExtension(fileName, ".cobieXml"); var cobieExpressZipFile = Path.ChangeExtension(fileName, ".cobieZip"); var w = new Stopwatch(); using (var txn = cobie.BeginTransaction("IFC data in")) { var exchanger = new IfcToCoBieExpressExchanger(model, cobie); w.Start(); exchanger.Convert(); w.Stop(); txn.Commit(); } Console.WriteLine("COBieExpress model created in {0}ms", w.ElapsedMilliseconds); cobie.SaveAsStep21(File.Create(cobieExpressFile)); cobie.SaveAsStep21Zip(File.Create(cobieExpressZipFile)); cobie.SaveAsXml(File.Create(cobieExpressXmlFile), new XmlWriterSettings { Indent = true, IndentChars = "\t" }); //now do the DPoW files var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); var fileDirectoryName = Path.GetDirectoryName(fileName); var facilities = new List <Facility>(); var ifcToCoBieLiteUkExchanger = new IfcToCOBieLiteUkExchanger(model, facilities); facilities = ifcToCoBieLiteUkExchanger.Convert(); var facilityNumber = 0; foreach (var facility in facilities) { var dpow = "DPoW"; if (facilities.Count > 1) { dpow += ++facilityNumber; } // ReSharper disable AssignNullToNotNullAttribute var dPoWFile = Path.Combine(fileDirectoryName, fileNameWithoutExtension + "_" + dpow); // ReSharper restore AssignNullToNotNullAttribute dPoWFile = Path.ChangeExtension(dPoWFile, "json"); Console.WriteLine("Creating " + dPoWFile); facility.WriteJson(dPoWFile); string cobieFile = Path.ChangeExtension(dPoWFile, "Xlsx"); Console.WriteLine("Creating " + cobieFile); string error; facility.WriteCobie(cobieFile, out error); if (!string.IsNullOrWhiteSpace(error)) { Console.WriteLine("COBie Errors: " + error); } dPoWFile = Path.ChangeExtension(dPoWFile, "xml"); Console.WriteLine("Creating " + dPoWFile); // facility.WriteXml(dPoWFile); var req = Facility.ReadJson(@"..\..\Tests\ValidationFiles\Lakeside_Restaurant-stage6-COBie.json"); var validator = new FacilityValidator(); var result = validator.Validate(req, facility); var verificationResults = Path.ChangeExtension(dPoWFile, "verified.xlsx"); Console.WriteLine("Creating " + verificationResults); //create report using (var stream = File.Create(verificationResults)) { var report = new ExcelValidationReport(); report.Create(result, stream, ExcelValidationReport.SpreadSheetFormat.Xlsx); stream.Close(); } facility.ValidateUK2012(Console.Out, true); string cobieValidatedFile = Path.ChangeExtension(dPoWFile, "Validated.Xlsx"); facility.WriteCobie(cobieValidatedFile, out error); dPoWFile = Path.ChangeExtension(dPoWFile, "xbim"); var credentials = new XbimEditorCredentials() { ApplicationDevelopersName = "XbimTeam", ApplicationFullName = "Xbim.Exchanger", EditorsOrganisationName = "Xbim Development Team", EditorsFamilyName = "Xbim Tester", ApplicationVersion = "3.0" }; Console.WriteLine("Creating " + dPoWFile); using ( var ifcModel = IfcStore.Create(credentials, IfcSchemaVersion.Ifc2X3, XbimStoreType.EsentDatabase)) { using (var txn = ifcModel.BeginTransaction("Convert from COBieLiteUK")) { var coBieLiteUkToIIfcExchanger = new CoBieLiteUkToIfcExchanger(facility, ifcModel); coBieLiteUkToIIfcExchanger.Convert(); txn.Commit(); //var err = model.Validate(model.Instances, Console.Out); } dPoWFile = Path.ChangeExtension(dPoWFile, "ifc"); Console.WriteLine("Creating " + dPoWFile); ifcModel.SaveAs(dPoWFile, IfcStorageType.Ifc); ifcModel.Close(); } } model.Close(); } Console.WriteLine("Press any key to exit"); Console.Read(); }