/// <summary> /// Create the COBieBuilder, holds COBieWorkBook /// </summary> /// <param name="parameters">Params</param> /// <returns>COBieBuilder</returns> private COBieBuilder GenerateCOBieWorkBook(Params parameters) { COBieBuilder builder = null; LogBackground(String.Format("Loading model {0}...", Path.GetFileName(parameters.ModelFile))); using (var model = IfcStore.Open(parameters.ModelFile)) { // Build context var context = new COBieContext(_worker.ReportProgress); context.TemplateFileName = parameters.TemplateFile; context.Model = model; context.MapMergeRoles[model] = Roles; context.Exclude = UserFilters; Model = model; //used to check we close file on Close event //Create Scene, required for Coordinates sheet if (!SkipGeoChkBox.Checked) { GenerateGeometry(context); } // Create COBieReader LogBackground("Generating COBie data..."); builder = new COBieBuilder(context); } return(builder); }
/// <summary> /// Create XLS file from ifc/xbim files /// </summary> /// <param name="parameters">Params</param> private void GenerateCOBieFile(Params parameters) { string outputFile = Path.ChangeExtension(parameters.ModelFile, ".xls"); Stopwatch timer = new Stopwatch(); timer.Start(); COBieBuilder builder = GenerateCOBieWorkBook(parameters); timer.Stop(); LogBackground(String.Format("Time to generate COBie data = {0} seconds", timer.Elapsed.TotalSeconds.ToString("F3"))); // Export LogBackground(String.Format("Formatting as {1} using {0} template...", Path.GetFileName(parameters.TemplateFile), parameters.IsXLSX ? "XLSX" : "XLS")); COBieXLSXSerialiser serialiser = new COBieXLSXSerialiser(outputFile, parameters.TemplateFile); serialiser.Excludes = UserFilters; serialiser.IsXlsx = parameters.IsXLSX; builder.Export(serialiser); LogBackground(String.Format("Export Complete: {0}", outputFile)); Process.Start(serialiser.FileName); LogBackground("Finished COBie Generation"); }
/// <summary> /// Create the COBieBuilder, holds COBieWorkBook /// </summary> /// <param name="parameters">Params</param> /// <returns>COBieBuilder</returns> private COBieWorkbook GenerateFederatedCOBieWorkBook(Params parameters) { var xbimFile = parameters.ModelFile; COBieBuilder builder = null; COBieWorkbook fedWorkBook = null; var workbooks = new List <COBieWorkbook>(); LogBackground(String.Format("Loading federated model {0}...", xbimFile)); using (var model = IfcStore.Open(xbimFile)) { Model = model; //used to check we close file on Close event // Build context on the XBimF model to link roles var context = new COBieContext(_worker.ReportProgress) { TemplateFileName = parameters.TemplateFile, Model = model, Exclude = UserFilters }; foreach (var modelRoles in context.MapMergeRoles) { var refModel = modelRoles.Key; var roles = modelRoles.Value; var refContext = new COBieContext(_worker.ReportProgress) { TemplateFileName = parameters.TemplateFile, Model = (IfcStore)refModel }; refContext.MapMergeRoles[refModel] = roles; refContext.Exclude = UserFilters; // Create COBieReader LogBackground("Generating COBie data..."); builder = new COBieBuilder(refContext); workbooks.Add(builder.Workbook); } } if (workbooks.Count > 1) { var fedCOBie = new FederateCOBie(_worker.ReportProgress); fedWorkBook = fedCOBie.Merge(workbooks); } else if (workbooks.Count == 1) { fedWorkBook = workbooks[0]; } return(fedWorkBook); }
/// <summary> /// Create the COBieBuilder, holds COBieWorkBook /// </summary> /// <param name="parameters">Params</param> /// <returns>COBieBuilder</returns> private COBieWorkbook GenerateFederatedCOBieWorkBook(Params parameters) { string xbimFile = parameters.ModelFile; COBieBuilder builder = null; COBieWorkbook fedWorkBook = null; List <COBieWorkbook> workbooks = new List <COBieWorkbook>(); LogBackground(String.Format("Loading federated model {0}...", xbimFile)); using (XbimModel model = new XbimModel()) { model.Open(xbimFile, XbimDBAccess.ReadWrite); Model = model; //used to check we close file on Close event // Build context on the XBimF model to link roles COBieContext context = new COBieContext(_worker.ReportProgress); context.TemplateFileName = parameters.TemplateFile; context.Model = model; context.Exclude = UserFilters; foreach (var ModelRoles in context.MapMergeRoles) { XbimModel refModel = ModelRoles.Key; COBieMergeRoles roles = ModelRoles.Value; COBieContext refContext = new COBieContext(_worker.ReportProgress); refContext.TemplateFileName = parameters.TemplateFile; refContext.Model = refModel; refContext.MapMergeRoles[refModel] = roles; refContext.Exclude = UserFilters; // Create COBieReader LogBackground("Generating COBie data..."); builder = new COBieBuilder(refContext); workbooks.Add(builder.Workbook); } } if (workbooks.Count > 1) { FederateCOBie fedCOBie = new FederateCOBie(_worker.ReportProgress); fedWorkBook = fedCOBie.Merge(workbooks); } else if (workbooks.Count == 1) { fedWorkBook = workbooks[0]; } return(fedWorkBook); }
/// <summary> /// Create the COBieBuilder, holds COBieWorkBook /// </summary> /// <param name="parameters">Params</param> /// <returns>COBieBuilder</returns> private COBieBuilder GenerateCOBieWorkBook(Params parameters) { string xbimFile = string.Empty; string fileExt = Path.GetExtension(parameters.ModelFile); COBieBuilder builder = null; LogBackground(String.Format("Loading model {0}...", Path.GetFileName(parameters.ModelFile))); using (XbimModel model = new XbimModel()) { if ((fileExt.Equals(".xbim", StringComparison.OrdinalIgnoreCase)) || (fileExt.Equals(".xbimf", StringComparison.OrdinalIgnoreCase)) ) { xbimFile = parameters.ModelFile; model.Open(xbimFile, XbimDBAccess.ReadWrite); //model.CacheStart(); } else //ifc file { xbimFile = Path.ChangeExtension(parameters.ModelFile, "xBIM"); model.CreateFrom(parameters.ModelFile, xbimFile, _worker.ReportProgress, true, false); } //model.Open(xbimFile, XbimDBAccess.ReadWrite); // Build context COBieContext context = new COBieContext(_worker.ReportProgress); context.TemplateFileName = parameters.TemplateFile; context.Model = model; context.MapMergeRoles[model] = Roles; context.Exclude = UserFilters; Model = model; //used to check we close file on Close event //Create Scene, required for Coordinates sheet if (!SkipGeoChkBox.Checked) { GenerateGeometry(context); } // Create COBieReader LogBackground("Generating COBie data..."); builder = new COBieBuilder(context); } return(builder); }
/// <summary> /// Generate a COBieWorkbook from ifc/xbim/xls files /// </summary> /// <param name="parameters">MergeParams</param> /// <returns>COBieWorkbook</returns> private COBieWorkbook GetWorkBook(MergeParams parameters) { string mainFile = parameters.ModelFile; string mainExt = Path.GetExtension(mainFile).ToLower(); COBieWorkbook workBook = null; if (mainExt == ".xls") { COBieXLSDeserialiser deSerialiser = new COBieXLSDeserialiser(mainFile); workBook = deSerialiser.Deserialise(); } else if ((mainExt == ".ifc") || (mainExt == ".xbim")) { COBieBuilder builder = GenerateCOBieWorkBook(parameters); workBook = builder.Workbook; } return(workBook); }
/// <summary> /// Performs the export /// </summary> /// <returns>True on success, false on error.</returns> private bool ExportCoBie() { if (!Directory.Exists(TxtFolderName.Text)) { try { Directory.CreateDirectory(TxtFolderName.Text); } catch (Exception) { MessageBox.Show("Error creating directory. Select a different location."); return(false); } } var fName = Model.FileName; if (string.IsNullOrEmpty(fName)) { fName = "Unnamed"; } var f = new FileInfo(Path.ChangeExtension(fName, ".xls")); var outputFile = Path.Combine(TxtFolderName.Text, f.Name); // configure settings for exporter var ass = System.Reflection.Assembly.GetAssembly(GetType()); if (_parentWindow == null) { Log.LogError("attempt to locate DiskLess assembly without a valid IXbimXplorerPluginMasterWindow."); return(false); } var assemblyFile = _parentWindow.GetAssemblyLocation(ass); var pluginDir = new FileInfo(assemblyFile).Directory; if (pluginDir == null) { Log.LogError("Failed to determine plugin folder under IXbimXplorerPluginMasterWindow."); return(false); } var templateFileName = Path.Combine( pluginDir.FullName, CoBieTemplate); var context = new COBieContext { TemplateFileName = templateFileName, Model = Model, Exclude = UserFilters }; // setting culture for thread; the current one will be restored later. CultureInfo exisitingCultureInfo = null; try { var ci = new CultureInfo("en-GB"); exisitingCultureInfo = Thread.CurrentThread.CurrentUICulture; Thread.CurrentThread.CurrentUICulture = ci; } catch (Exception ex) { Log.LogError(0, ex, "CurrentUICulture could not be set to en-GB."); } // actual export code var builder = new COBieBuilder(context); var serialiser = new COBieXLSSerialiser(outputFile, context.TemplateFileName) { Excludes = UserFilters }; builder.Export(serialiser); // restoring culture for thread; try { if (exisitingCultureInfo != null) { Thread.CurrentThread.CurrentUICulture = exisitingCultureInfo; } } catch (Exception ex) { Log.LogError(0, ex, "CurrentUICulture could not restored."); } if (ChkOpenExcel.IsChecked.HasValue && ChkOpenExcel.IsChecked.Value) { Process.Start(outputFile); } return(true); }
/// <summary> /// Performs the export /// </summary> /// <returns>True on success, false on error.</returns> private bool ExportCoBie() { if (!Directory.Exists(TxtFolderName.Text)) { try { Directory.CreateDirectory(TxtFolderName.Text); } catch (Exception) { MessageBox.Show("Error creating directory. Select a different location."); return(false); } } var f = new FileInfo(Path.ChangeExtension(Model.FileName, ".xls")); var outputFile = Path.Combine(TxtFolderName.Text, f.Name); var context = new COBieContext { TemplateFileName = CoBieTemplate, Model = Model, Exclude = UserFilters }; // setting culture for thread; the current one will be restored later. CultureInfo exisitingCultureInfo = null; try { var ci = new CultureInfo("en-GB"); exisitingCultureInfo = Thread.CurrentThread.CurrentUICulture; Thread.CurrentThread.CurrentUICulture = ci; } catch (Exception ex) { Log.Error("CurrentUICulture could not be set to en-GB.", ex); } // actual export code var builder = new COBieBuilder(context); var serialiser = new COBieXLSSerialiser(outputFile, context.TemplateFileName) { Excludes = UserFilters }; builder.Export(serialiser); // restoring culture for thread; try { if (exisitingCultureInfo != null) { Thread.CurrentThread.CurrentUICulture = exisitingCultureInfo; } } catch (Exception ex) { Log.Error("CurrentUICulture could not restored.", ex); } if (ChkOpenExcel.IsChecked.HasValue && ChkOpenExcel.IsChecked.Value) { Process.Start(outputFile); } return(true); }
/// <summary> /// Create the COBieBuilder, holds COBieWorkBook /// </summary> /// <param name="parameters">Params</param> /// <returns>COBieBuilder</returns> private COBieBuilder GenerateCOBieWorkBook(Params parameters) { string xbimFile = string.Empty; string fileExt = Path.GetExtension(parameters.ModelFile); COBieBuilder builder = null; LogBackground(String.Format("Loading model {0}...", Path.GetFileName(parameters.ModelFile))); using (XbimModel model = new XbimModel()) { if ((fileExt.Equals(".xbim", StringComparison.OrdinalIgnoreCase)) || (fileExt.Equals(".xbimf", StringComparison.OrdinalIgnoreCase)) ) { xbimFile = parameters.ModelFile; model.Open(xbimFile, XbimDBAccess.ReadWrite); //model.CacheStart(); } else //ifc file { xbimFile = Path.ChangeExtension(parameters.ModelFile, "xBIM"); model.CreateFrom(parameters.ModelFile, xbimFile, _worker.ReportProgress, true, false); } //model.Open(xbimFile, XbimDBAccess.ReadWrite); // Build context COBieContext context = new COBieContext(_worker.ReportProgress); context.TemplateFileName = parameters.TemplateFile; context.Model = model; context.MapMergeRoles[model] = Roles; context.Exclude = UserFilters; Model = model; //used to check we close file on Close event //Create Scene, required for Coordinates sheet if (!SkipGeoChkBox.Checked) { GenerateGeometry(context); } // Create COBieReader LogBackground("Generating COBie data..."); builder = new COBieBuilder(context); } return builder; }
/// <summary> /// Create the COBieBuilder, holds COBieWorkBook /// </summary> /// <param name="parameters">Params</param> /// <returns>COBieBuilder</returns> private COBieWorkbook GenerateFederatedCOBieWorkBook(Params parameters) { string xbimFile = parameters.ModelFile; COBieBuilder builder = null; COBieWorkbook fedWorkBook = null; List<COBieWorkbook> workbooks = new List<COBieWorkbook>(); LogBackground(String.Format("Loading federated model {0}...", xbimFile)); using (XbimModel model = new XbimModel()) { model.Open(xbimFile, XbimDBAccess.ReadWrite); Model = model; //used to check we close file on Close event // Build context on the XBimF model to link roles COBieContext context = new COBieContext(_worker.ReportProgress); context.TemplateFileName = parameters.TemplateFile; context.Model = model; context.Exclude = UserFilters; foreach (var ModelRoles in context.MapMergeRoles) { XbimModel refModel = ModelRoles.Key; COBieMergeRoles roles = ModelRoles.Value; COBieContext refContext = new COBieContext(_worker.ReportProgress); refContext.TemplateFileName = parameters.TemplateFile; refContext.Model = refModel; refContext.MapMergeRoles[refModel] = roles; refContext.Exclude = UserFilters; // Create COBieReader LogBackground("Generating COBie data..."); builder = new COBieBuilder(refContext); workbooks.Add(builder.Workbook); } } if (workbooks.Count > 1) { FederateCOBie fedCOBie = new FederateCOBie(_worker.ReportProgress); fedWorkBook = fedCOBie.Merge(workbooks); } else if (workbooks.Count == 1) { fedWorkBook = workbooks[0]; } return fedWorkBook; }