static void Main(string[] args) { var serviceProvider = ConfigureServices(); SetupXbimLogging(serviceProvider); // Configure the app to use Esent when appropriate IfcStore.ModelProviderFactory.UseHeuristicModelProvider(); var settings = new ExchangeSettings(); var someAction = false; foreach (var arg in args) { if (!settings.IsOption(arg)) { ProcessFile(arg, settings); someAction = true; } } if (settings.DisplayVersion) { someAction = true; } if (!someAction) { Console.WriteLine("No Ifc or xBim file specified"); Console.WriteLine("Usage: Xbim.Exchange.exe [/out:<OutputFolder>] [/req:<DPoWRequirementFile>] <IfcFileName>"); Console.WriteLine("\t<IfcFileName> non-optional, full or relative path to the ifc model to process."); Console.WriteLine("\t<DPoWRequirementFile> full or relative path to the Json DPoW requirement file for a single stage."); Console.WriteLine("\t<OutputFolder> full path of the output folder where to write the files."); } Console.WriteLine("Press any key to exit"); Console.Read(); }
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(); } }