private void SetUp(string filename) { if (!string.IsNullOrEmpty(filename) && (Path.GetExtension(filename).ToUpper() == ".XBIMF") ) { try { FileInfo file = new FileInfo(filename); if (file.Exists) { using (FederatedModel fedModel = new FederatedModel(file)) { if (fedModel.Model.IsFederation) { txtAuthor.Text = fedModel.Author; txtOrg.Text = fedModel.Organisation; txtPrj.Text = fedModel.ProjectName; FileRoles = fedModel.RefModelRoles.ToDictionary(m => new FileInfo(m.Key.DatabaseName), m => m.Value); RefModels = new BindingList <FileInfo>(FileRoles.Keys.ToList()); this.Text += " : " + file.Name; FileName = filename; rolesList.Enabled = true; } } } } catch (System.ArgumentException Ex) //bad paths etc.. { toolStripLabel.Text = Ex.Message; } } }
/// <summary> /// Create Federation file /// </summary> /// <param name="file">FileInfo</param> /// <param name="author">Authors name</param> /// <param name="organisation">Organisation name</param> /// <param name="prjName">Project name</param> private void CreateFedFile(FileInfo file, string author, string organisation, string prjName) { using (FederatedModel fedModel = new FederatedModel(file, author, organisation, prjName)) { foreach (var item in FileRoles) { fedModel.AddRefModel(item.Key, organisation, item.Value); } } }
/// <summary> /// On Click Browse Model File Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnBrowse_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "All XBim Files|*.ifc;*.ifcxml;*.ifczip;*.xbim;*.xbimf|IFC Files|*.ifc;*.ifcxml;*.ifczip|Xbim Files|*.xbim|Xbim Federated Files|*.xbimf|Excel Files|*.xls;*.xlsx|Json Files|*.json|Xml Files|*.xml"; // dlg.Title = "Choose a source file"; dlg.CheckFileExists = true; // Show open file dialog box if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { txtPath.Text = dlg.FileName; string fileExt = Path.GetExtension(txtPath.Text); MapRefModelsRoles.Clear(); if (fileExt.Equals(".xbimf", StringComparison.OrdinalIgnoreCase)) { using (var fedModel = new FederatedModel(new FileInfo(txtPath.Text))) { if (fedModel.Model.IsFederation) { MapRefModelsRoles = fedModel.RefModelRoles.ToDictionary(m => new FileInfo(m.Key.DatabaseName), m => m.Value); } else { throw new XbimException(string.Format("Model is not Federated: {0}", fedModel.FileNameXbimf)); } } } rolesList.Enabled = !(fileExt.Equals(".xbimf", StringComparison.OrdinalIgnoreCase) || fileExt.Equals(".json", StringComparison.OrdinalIgnoreCase) || fileExt.Equals(".xml", StringComparison.OrdinalIgnoreCase) || fileExt.Equals(".xls", StringComparison.OrdinalIgnoreCase) || fileExt.Equals(".xlsx", StringComparison.OrdinalIgnoreCase) ); chkBoxOpenFile.Enabled = cmboxFiletype.Text.Equals("XLS", StringComparison.OrdinalIgnoreCase) || cmboxFiletype.Text.Equals("XLSX", StringComparison.OrdinalIgnoreCase); chkBoxOpenFile.Checked = chkBoxOpenFile.Enabled; } }
/// <summary> /// Generate Facilities for a xbimf federated file /// </summary> /// <param name="parameters"></param> /// <returns></returns> private List <Facility> GenerateFedFacility(Params parameters) { var facilities = new List <Facility>(); try { using (var fedModel = new FederatedModel(new FileInfo(parameters.ModelFile))) { if (fedModel.Model.IsFederation) { Dictionary <XbimModel, OutPutFilters> FedFilters = parameters.Filter.SetFedModelFilter <XbimModel>(fedModel.RefModelRoles); Dictionary <RoleFilter, List <Facility> > RolesFacilities = new Dictionary <RoleFilter, List <Facility> >(); foreach (var item in FedFilters) { var ifcToCoBieLiteUkExchanger = new IfcToCOBieLiteUkExchanger(item.Key, new List <Facility>(), Worker.ReportProgress, item.Value, parameters.ConfigFile, parameters.ExtId, parameters.SysMode); ifcToCoBieLiteUkExchanger.ReportProgress.Progress = Worker.ReportProgress; var rolesFacility = ifcToCoBieLiteUkExchanger.Convert(); //facilities.AddRange(rolesFacility); if (RolesFacilities.ContainsKey(item.Value.AppliedRoles)) { RolesFacilities[item.Value.AppliedRoles].AddRange(rolesFacility); } else { RolesFacilities.Add(item.Value.AppliedRoles, rolesFacility); } } var fedFacilities = RolesFacilities.OrderByDescending(d => d.Key.HasFlag(RoleFilter.Architectural)).SelectMany(p => p.Value).ToList(); //pull architectural roles facilities to the top //fedFacilities = RolesFacilities.Values.SelectMany(f => f).OrderByDescending(f => f.AssetTypes.Count).ToList(); //pull facility with largest number of AssetTypes to the top //fedFacilities = RolesFacilities.Values.SelectMany(f => f).ToList(); //flatten value lists if (fedFacilities.Any()) { Facility baseFacility = fedFacilities.First(); fedFacilities.RemoveAt(0); if (parameters.Log) { var logfile = Path.ChangeExtension(parameters.ModelFile, "merge.log"); using (StreamWriter sw = new StreamWriter(logfile)) //using (StreamWriter sw = new StreamWriter(Console.OpenStandardOutput())) //to debug console **slow** { sw.AutoFlush = true; foreach (Facility mergeFacility in fedFacilities) { baseFacility.Merge(mergeFacility, sw); } } } else { foreach (Facility mergeFacility in fedFacilities) { baseFacility.Merge(mergeFacility, null); } } facilities.Add(baseFacility); } } else { throw new XbimException(string.Format("Model is not Federated: {0}", fedModel.FileNameXbimf)); } } } catch (ArgumentException Ex) //bad paths etc.. { Worker.ReportProgress(0, Ex.Message); } catch (XbimException Ex) //not federated { Worker.ReportProgress(0, Ex.Message); } return(facilities); }
/// <summary> /// Generate Facilities for a xbimf federated file /// </summary> /// <param name="parameters"></param> /// <returns></returns> private List<Facility> GenerateFedFacility(Params parameters) { var facilities = new List<Facility>(); try { using (var fedModel = new FederatedModel(new FileInfo(parameters.ModelFile))) { if (fedModel.Model.IsFederation) { Dictionary<XbimModel, OutPutFilters> FedFilters = parameters.Filter.SetFedModelFilter<XbimModel>(fedModel.RefModelRoles); Dictionary<RoleFilter, List<Facility>> RolesFacilities = new Dictionary<RoleFilter, List<Facility>>(); foreach (var item in FedFilters) { var ifcToCoBieLiteUkExchanger = new IfcToCOBieLiteUkExchanger(item.Key, new List<Facility>(), Worker.ReportProgress, item.Value, parameters.ConfigFile, parameters.ExtId, parameters.SysMode); ifcToCoBieLiteUkExchanger.ReportProgress.Progress = Worker.ReportProgress; var rolesFacility = ifcToCoBieLiteUkExchanger.Convert(); //facilities.AddRange(rolesFacility); if (RolesFacilities.ContainsKey(item.Value.AppliedRoles)) { RolesFacilities[item.Value.AppliedRoles].AddRange(rolesFacility); } else { RolesFacilities.Add(item.Value.AppliedRoles, rolesFacility); } } var fedFacilities = RolesFacilities.OrderByDescending(d => d.Key.HasFlag(RoleFilter.Architectural)).SelectMany(p => p.Value).ToList(); //pull architectural roles facilities to the top //fedFacilities = RolesFacilities.Values.SelectMany(f => f).OrderByDescending(f => f.AssetTypes.Count).ToList(); //pull facility with largest number of AssetTypes to the top //fedFacilities = RolesFacilities.Values.SelectMany(f => f).ToList(); //flatten value lists if (fedFacilities.Any()) { Facility baseFacility = fedFacilities.First(); fedFacilities.RemoveAt(0); if (parameters.Log) { var logfile = Path.ChangeExtension(parameters.ModelFile, "merge.log"); using (StreamWriter sw = new StreamWriter(logfile)) //using (StreamWriter sw = new StreamWriter(Console.OpenStandardOutput())) //to debug console **slow** { sw.AutoFlush = true; foreach (Facility mergeFacility in fedFacilities) { baseFacility.Merge(mergeFacility, sw); } } } else { foreach (Facility mergeFacility in fedFacilities) { baseFacility.Merge(mergeFacility, null); } } facilities.Add(baseFacility); } } else { throw new XbimException(string.Format("Model is not Federated: {0}", fedModel.FileNameXbimf)); } } } catch (ArgumentException Ex) //bad paths etc.. { Worker.ReportProgress(0, Ex.Message); } catch (XbimException Ex) //not federated { Worker.ReportProgress(0, Ex.Message); } return facilities; }