Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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");
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        /// <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);
        }
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
        /// <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);
        }
Exemplo n.º 9
0
        /// <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;
        }
Exemplo n.º 10
0
        /// <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;
        }