Ejemplo n.º 1
0
        /// <summary>
        /// Create XLS file from ifc/xbim files
        /// </summary>
        /// <param name="parameters">Params</param>
        private IEnumerable <string> GenerateFile(CobieConversionParams parameters)
        {
            var ret         = new List <string>();
            var path        = Path.GetDirectoryName(parameters.OutputFileName);
            var cobieModels = GetCobieModels(parameters);

            var index = 1;

            foreach (var facilityType in cobieModels)
            {
                var bareFileName = Path.GetFileNameWithoutExtension(parameters.OutputFileName);
                if (cobieModels.Count > 1)
                {
                    bareFileName += "(" + index + ")";
                }
                Worker.ReportProgress(0, string.Format("Beginning facility '{0}'", bareFileName));

                var timer = new Stopwatch();
                timer.Start();

                var fullFileName = Path.Combine(path, bareFileName);

                switch (parameters.ExportFormat)
                {
                case ExportFormatEnum.XLS:
                case ExportFormatEnum.XLSX:
                    string report = string.Empty;
                    fullFileName = CreateExcelFile(fullFileName, parameters, facilityType, out report);
                    if (!String.IsNullOrEmpty(report) && parameters.Log)
                    {
                        var logFile = Path.ChangeExtension(fullFileName, ".validation.log");
                        Worker.ReportProgress(0, string.Format("Creating validation log file: {0}", logFile));
                        File.WriteAllText(logFile, report);
                    }
                    break;

                case ExportFormatEnum.STEP21:
                    fullFileName = CreateStepFile(fullFileName, parameters, facilityType);
                    break;

                case ExportFormatEnum.JSON:

                //break;
                case ExportFormatEnum.XML:

                //break;
                case ExportFormatEnum.IFC:
                default:
                    throw new NotImplementedException(String.Format("COBie Express does not currently support {0}", parameters.ExportFormat));
                    //break;
                }
                index++;
                timer.Stop();
                Worker.ReportProgress(0, string.Format("Time to save: {0} seconds", timer.Elapsed.TotalSeconds.ToString("F3")));
                ret.Add(fullFileName);
            }

            Worker.ReportProgress(0, "Finished COBie Generation");
            return(ret);
        }
Ejemplo n.º 2
0
        private void DoExport(object sender, RoutedEventArgs e)
        {
            btnGenerate.IsEnabled = false;

            if (_cobieWorker == null)
            {
                _cobieWorker = new CobieLiteConverter();
                _cobieWorker.Worker.ProgressChanged    += WorkerProgressChanged;
                _cobieWorker.Worker.RunWorkerCompleted += WorkerCompleted;
            }

            // get Excel File Type
            var excelType      = GetExcelType();
            var v              = new FileInfo(Model.FileName);
            var exportFileName = Path.ChangeExtension(Path.Combine(TxtFolderName.Text, v.Name), "tempExtension");

            // set parameters
            var conversionSettings = new CobieConversionParams
            {
                Source         = Model,
                OutputFileName = exportFileName,
                TemplateFile   = SelectedTemplate,
                ExportFormat   = excelType,
                ExtId          = (UseExternalIds.IsChecked != null && UseExternalIds.IsChecked.Value)
                    ? EntityIdentifierMode.IfcEntityLabels
                    : EntityIdentifierMode.GloballyUniqueIds,
                SysMode    = SetSystemMode(),
                Filter     = _assetfilters,
                ConfigFile = ConfigFile.FullName,
                Log        = true
            };

            // run worker
            _cobieWorker.Run(conversionSettings);
        }
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Generate Facilities for a xbim or ifc type file
 /// </summary>
 /// <param name="sourceFile"></param>
 /// <param name="parameters"></param>
 /// <returns></returns>
 private List <Facility> GetFacilitiesFromIfcStoreFilename(string sourceFile, CobieConversionParams parameters)
 {
     using (var model = IfcStore.Open(sourceFile))
     {
         var facilities = GetFacilities(model, parameters);
         return(facilities);
     }
 }
Ejemplo n.º 6
0
        /// <summary>
        /// Generate a Step File
        /// </summary>
        /// <param name="fileName">Root file name</param>
        /// <param name="parameters">Params</param>
        /// <param name="cobie"></param>
        /// <returns>file name</returns>
        private string CreateStepFile(string fileName, CobieConversionParams parameters, CobieModel cobie)
        {
            //set export file name
            var stepName = Path.ChangeExtension(fileName, ".cobie");

            cobie.SaveAsStep21(stepName);
            return(stepName);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Generate a Excel File
        /// </summary>
        /// <param name="fileName">Root file name</param>
        /// <param name="parameters">Params</param>
        /// <param name="cobie"></param>
        /// <param name="report"></param>
        /// <returns>file name</returns>
        private string CreateExcelFile(string fileName, CobieConversionParams parameters, CobieModel cobie, out string report)
        {
            //set export file name
            var excelType = (ExcelTypeEnum)Enum.Parse(typeof(ExcelTypeEnum), parameters.ExportFormat.ToString(), true);
            var excelName = Path.ChangeExtension(fileName, excelType == ExcelTypeEnum.XLS ? ".xls" : ".xlsx");

            cobie.ExportToTable(excelName, out report);
            return(excelName);
        }
 /// <summary>
 /// Run the worker
 /// </summary>
 /// <param name="args"></param>
 public async Task <IModel> Run(CobieConversionParams args)
 {
     if (args.ReportProgress == null)
     {
         args.ReportProgress = (int percentProgress, object userState) => { }
     }
     ;
     return(await Task.Run <IModel>(() => {
         return GetCobieModel(args);
     }));
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Generate a Excel File
        /// </summary>
        /// <param name="fileName">Root file name</param>
        /// <param name="parameters">Params</param>
        /// <param name="facility">Facility</param>
        /// <returns>file name</returns>
        private string CreateExcelFile(string fileName, CobieConversionParams parameters, Facility facility)
        {
            var excelType = (ExcelTypeEnum)Enum.Parse(typeof(ExcelTypeEnum), parameters.ExportFormat.ToString(), true);
            var excelName = Path.ChangeExtension(fileName, excelType == ExcelTypeEnum.XLS ? ".xls" : ".xlsx");

            // Worker.ReportProgress(0, string.Format("Creating file: {0}", excelName));
            using (var file = File.Create(excelName))
            {
                facility.ReportProgress.Progress = Worker.ReportProgress;
                string msg;
                facility.WriteCobie(file, excelType, out msg, parameters.Filter, parameters.TemplateFile);
            }
            //_worker.ReportProgress(0, msg); //removed for now, kill app for some reason
            return(excelName);
        }
Ejemplo n.º 10
0
        private List <Facility> GetFacilities(CobieConversionParams parameters)
        {
            List <Facility> ret   = null;
            var             timer = new Stopwatch();

            timer.Start();
            if (parameters.Source is string)
            {
                var sourceFile = (string)parameters.Source;
                if (!File.Exists(sourceFile))
                {
                    string message = string.Format("Source file not found {0}", sourceFile);
                    Worker.ReportProgress(0, message);
                    Logger.Error(message);
                    return(null);
                }
                var fileExt = Path.GetExtension(sourceFile);
                switch (fileExt.ToLowerInvariant())
                {
                case ".xls":
                case ".xlsx":
                    ret = GetFacilitiesFromExcelFilename(sourceFile, parameters.TemplateFile);
                    break;

                case ".json":
                    ret = GetFacilitiesFromJsonFilename(sourceFile);
                    break;

                case ".xml":
                    ret = GetFacilitiesFromXmlFilename(sourceFile);
                    break;

                default:
                    ret = GetFacilitiesFromIfcStoreFilename(sourceFile, parameters);
                    break;
                }
            }
            else if (parameters.Source is IfcStore)
            {
                ret = GetFacilities((IfcStore)parameters.Source, parameters);
            }

            timer.Stop();
            Worker.ReportProgress(0, string.Format("Time to generate COBieLite data: {0} seconds", timer.Elapsed.TotalSeconds.ToString("F3")));
            return(ret);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Create XLS file from ifc/xbim files
        /// </summary>
        /// <param name="parameters">Params</param>
        private IEnumerable <string> GenerateFile(CobieConversionParams parameters)
        {
            var ret  = new List <string>();
            var path = Path.GetDirectoryName(parameters.OutputFileName);

            Debug.Assert(path != null);
            var facilities = GetFacilities(parameters);

            var index = 1;

            foreach (var facilityType in facilities)
            {
                var bareFileName = Path.GetFileNameWithoutExtension(parameters.OutputFileName);
                if (facilities.Count > 1)
                {
                    bareFileName += "(" + index + ")";
                }
                Worker.ReportProgress(0, string.Format("Beginning facility '{0}'", bareFileName));

                var timer = new Stopwatch();
                timer.Start();

                var fullFileName = Path.Combine(path, bareFileName);
                if (parameters.Log)
                {
                    var logFile = Path.ChangeExtension(fullFileName, ".validation.log");
                    Worker.ReportProgress(0, string.Format("Creating validation log file: {0}", logFile));
                    using (var log = File.CreateText(logFile))
                    {
                        facilityType.ValidateUK2012(log, false);
                    }

                    Worker.ReportProgress(0, string.Format("Time to validate: {0} seconds", timer.Elapsed.TotalSeconds.ToString("F3")));
                    timer.Restart();
                }
                switch (parameters.ExportFormat)
                {
                case ExportFormatEnum.XLS:
                case ExportFormatEnum.XLSX:
                    fullFileName = CreateExcelFile(fullFileName, parameters, facilityType);
                    break;

                case ExportFormatEnum.JSON:
                    fullFileName = CreateJsonFile(fullFileName, facilityType);
                    break;

                case ExportFormatEnum.XML:
                    fullFileName = CreateXmlFile(fullFileName, facilityType);
                    break;

                case ExportFormatEnum.STEP21:
                    throw new NotSupportedException("COBie lite does not have a STEP21 option");

                case ExportFormatEnum.IFC:
                default:
                    fullFileName = CreateIfcFile(fullFileName, facilityType);
                    break;
                }
                index++;
                timer.Stop();
                Worker.ReportProgress(0, string.Format("Time to save: {0} seconds", timer.Elapsed.TotalSeconds.ToString("F3")));
                ret.Add(fullFileName);
            }



            Worker.ReportProgress(0, "Finished COBie Generation");
            return(ret);
        }
Ejemplo n.º 12
0
 /// <summary>
 /// Run the worker
 /// </summary>
 /// <param name="args"></param>
 public void Run(CobieConversionParams args)
 {
     Worker.RunWorkerAsync(args);
 }
Ejemplo n.º 13
0
        private List <Facility> GetFacilities(IfcStore model, CobieConversionParams parameters)
        {
            var facilities = new List <Facility>();

            if (model.IsFederation == false)
            {
                var ifcToCoBieLiteUkExchanger = new IfcToCOBieLiteUkExchanger(
                    model,
                    facilities,
                    Worker.ReportProgress,
                    parameters.Filter,
                    parameters.ConfigFile,
                    parameters.ExtId,
                    parameters.SysMode
                    );
                facilities = ifcToCoBieLiteUkExchanger.Convert();
            }
            else
            {
                var roles           = model.GetFederatedFileRoles();
                var fedFilters      = parameters.Filter.SetFedModelFilter(roles);
                var rolesFacilities = new Dictionary <RoleFilter, List <Facility> >();
                foreach (var filter in fedFilters)
                {
                    var ifcToCoBieLiteUkExchanger = new IfcToCOBieLiteUkExchanger(
                        filter.Key.Model,
                        new List <Facility>(),
                        Worker.ReportProgress,
                        filter.Value,
                        parameters.ConfigFile,
                        parameters.ExtId,
                        parameters.SysMode
                        );
                    ifcToCoBieLiteUkExchanger.ReportProgress.Progress = Worker.ReportProgress;
                    var rolesFacility = ifcToCoBieLiteUkExchanger.Convert();

                    //facilities.AddRange(rolesFacility);
                    if (rolesFacilities.ContainsKey(filter.Value.AppliedRoles))
                    {
                        rolesFacilities[filter.Value.AppliedRoles].AddRange(rolesFacility);
                    }
                    else
                    {
                        rolesFacilities.Add(filter.Value.AppliedRoles, rolesFacility);
                    }
                }
                var fedFacilities =
                    rolesFacilities.OrderByDescending(d => d.Key.HasFlag(RoleFilter.Architectural))
                    .SelectMany(p => p.Value)
                    .ToList();
                if (!fedFacilities.Any())
                {
                    return(facilities);
                }
                var baseFacility = fedFacilities.First();
                fedFacilities.RemoveAt(0);
                if (parameters.Log)
                {
                    var logfile = Path.ChangeExtension(model.FileName, "merge.log");
                    using (var sw = new StreamWriter(logfile))
                    {
                        sw.AutoFlush = true;
                        foreach (var mergeFacility in fedFacilities)
                        {
                            baseFacility.Merge(mergeFacility, sw);
                        }
                    }
                }
                else
                {
                    foreach (var mergeFacility in fedFacilities)
                    {
                        baseFacility.Merge(mergeFacility);
                    }
                }
                facilities.Add(baseFacility);
            }
            return(facilities);
        }
        /// <summary>
        /// On Click Generate Button
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGenerate_Click(object sender, EventArgs e)
        {
            if (chkBoxFlipFilter.Checked)
            {
                // ReSharper disable LocalizableElement
                var result = MessageBox.Show(
                    "Flip Filter is ticked, this will show only excluded items, Do you want to continue",
                    "Warning", MessageBoxButtons.YesNo);
                if (result == DialogResult.No)
                {
                    return;
                }
            }
            btnGenerate.Enabled = false;

            //get required type of COBie
            COBieType cobieType;

            Enum.TryParse <COBieType>(cmBoxCOBieType.SelectedValue.ToString(), out cobieType);

            if (cobieType == COBieType.COBieLiteUK)
            {
                if (_cobieWorker == null || !(_cobieWorker is CobieLiteConverter))
                {
                    _cobieWorker = new CobieLiteConverter();
                    _cobieWorker.Worker.ProgressChanged    += WorkerProgressChanged;
                    _cobieWorker.Worker.RunWorkerCompleted += WorkerCompleted;
                }
            }
            else if (cobieType == COBieType.COBieExpress)
            {
                if (_cobieWorker == null || !(_cobieWorker is CobieExpressConverter))
                {
                    _cobieWorker = new CobieExpressConverter();
                    _cobieWorker.Worker.ProgressChanged    += WorkerProgressChanged;
                    _cobieWorker.Worker.RunWorkerCompleted += WorkerCompleted;
                }
            }
            else
            {
                throw new ArgumentException("Unknown COBieType requested");
            }
            //get Excel File Type
            var excelType = GetExcelType();
            //set filters
            var filterRoles = SetRoles();

            if (!chkBoxNoFilter.Checked)
            {
                _assetfilters.ApplyRoleFilters(filterRoles);
                _assetfilters.FlipResult = chkBoxFlipFilter.Checked;
            }

            //set parameters
            var conversionSettings = new CobieConversionParams
            {
                Source         = txtPath.Text,
                OutputFileName = Path.ChangeExtension(txtPath.Text, "Cobie"),
                TemplateFile   = txtTemplate.Text,
                ExportFormat   = excelType,
                ExtId          = chkBoxIds.Checked ? EntityIdentifierMode.IfcEntityLabels : EntityIdentifierMode.GloballyUniqueIds,
                SysMode        = SetSystemMode(),
                Filter         = chkBoxNoFilter.Checked ? new OutPutFilters() : _assetfilters,
                ConfigFile     = ConfigFile.FullName,
                Log            = chkBoxLog.Checked
            };

            //run worker
            _cobieWorker.Run(conversionSettings);
        }
Ejemplo n.º 15
0
 private List <CobieModel> GetCobieModelsFromIfcStoreFilename(string sourceFile, CobieConversionParams parameters)
 {
     using (var model = IfcStore.Open(sourceFile))
     {
         return(GetCobieModels(model, parameters));
     }
 }