/// <summary> /// Add system group and fill with data from COBieSystemRow /// </summary> /// <param name="row">COBieSystemRow holding the data</param> private void AddSystem(COBieSystemRow row) { //we are merging so check for an existing item name, assume the same item as should be the same building if (CheckIfExistOnMerge <IfcSystem>(row.Name)) { string testName = row.Name.ToLower().Trim(); IfcSystemObj = Model.FederatedInstances.Where <IfcSystem>(bs => bs.Name.ToString().ToLower().Trim() == testName).FirstOrDefault(); return;//we have it so no need to create } IfcSystemObj = GetGroupInstance(row.ExtObject);//Model.Instances.New<IfcSystem>(); IfcSystemObj.Name = row.Name; //Add Created By, Created On and ExtSystem to Owner History. SetUserHistory(IfcSystemObj, row.ExtSystem, row.CreatedBy, row.CreatedOn); //using statement will set the Model.OwnerHistoryAddObject to IfcSystemObj.OwnerHistory as OwnerHistoryAddObject is used upon any property changes, //then swaps the original OwnerHistoryAddObject back in the dispose, so set any properties within the using statement using (COBieXBimEditScope context = new COBieXBimEditScope(Model, IfcSystemObj.OwnerHistory)) { //Add Category AddCategory(row.Category, IfcSystemObj); //Add GlobalId AddGlobalId(row.ExtIdentifier, IfcSystemObj); //Add Description if (ValidateString(row.Description)) { IfcSystemObj.Description = row.Description; } } }
/// <summary> /// Create and setup objects held in the System COBieSheet /// </summary> /// <param name="cOBieSheet">COBieSheet of COBieSystemRow to read data from</param> public void SerialiseSystem(COBieSheet <COBieSystemRow> cOBieSheet) { using (ITransaction trans = Model.BeginTransaction("Add System")) { try { int count = 1; ProgressIndicator.ReportMessage("Starting Systems..."); ProgressIndicator.Initialise("Creating Systems", cOBieSheet.RowCount); for (int i = 0; i < cOBieSheet.RowCount; i++) { BumpTransaction(trans, count); count++; ProgressIndicator.IncrementAndUpdate(); COBieSystemRow row = cOBieSheet[i]; if (ValidateString(row.Name)) { if ((IfcSystemObj == null) || (row.Name.ToLower() != IfcSystemObj.Name.ToString().ToLower()) ) { AddSystem(row); AddProducts(row); SystemProdutIndex = 1; } else { AddProducts(row); } } } ProgressIndicator.Finalise(); trans.Commit(); } catch (Exception) { //TODO: Catch with logger? throw; } } }
/// <summary> /// Add products to system group and fill with data from COBieSystemRow /// </summary> /// <param name="row">COBieSystemRow holding the data</param> private void AddProducts(COBieSystemRow row) { string componentNames = row.ComponentNames; using (COBieXBimEditScope context = new COBieXBimEditScope(Model, IfcSystemObj.OwnerHistory)) { List <IfcProduct> ifcProductList = new List <IfcProduct>(); //check to see is the component name is a single component List <string> compNames = new List <string>(); string testCompName = componentNames.ToLower().Trim(); IfcProduct ifcProduct = Model.FederatedInstances.OfType <IfcProduct>().Where(p => p.Name.ToString().ToLower().Trim() == testCompName).FirstOrDefault(); if (ifcProduct != null) { compNames.Add(componentNames); } else { compNames = SplitTheString(componentNames); //multiple components in string } foreach (string componentName in compNames) { ifcProduct = null; if (ValidateString(componentName)) { string compName = componentName.ToLower().Trim(); ifcProduct = Model.FederatedInstances.OfType <IfcProduct>().Where(p => p.Name.ToString().ToLower().Trim() == compName).FirstOrDefault(); if (ifcProduct != null) { ifcProductList.Add(ifcProduct); } } if (ifcProduct == null) { string elementTypeName = GetPrefixType(componentName); if (string.IsNullOrEmpty(elementTypeName)) { elementTypeName = "IfcDistributionElement"; } ifcProduct = COBieXBimComponent.GetElementInstance(elementTypeName, Model); if (ifcProduct != null) { if (string.IsNullOrEmpty(componentName) || (componentName == Constants.DEFAULT_STRING)) { ifcProduct.Name = ""; //row.Name + " " + SystemProdutIndex.ToString(); SystemProdutIndex++; } else { ifcProduct.Name = componentName; } ifcProduct.Description = "Created to maintain relationship with System object from COBie information"; ifcProductList.Add(ifcProduct); } } } if (ifcProductList.Count == 0) //no products created so create an IfcDistributionElement as place holder { ifcProduct = COBieXBimComponent.GetElementInstance("IfcDistributionElement", Model); if (ifcProduct != null) { ifcProduct.Name = ""; // row.Name + " " + SystemProdutIndex.ToString(); ; ifcProduct.Description = "Created to maintain relationship with System object from COBie information"; ifcProductList.Add(ifcProduct); } } //if we have found product then add to the IfcSystem group foreach (IfcProduct ifcProd in ifcProductList) { if (IfcSystemObj.IsGroupedBy != null) //if we already have a IfcRelAssignsToGroup assigned to IsGroupedBy { if (!IfcSystemObj.IsGroupedBy.RelatedObjects.Contains(ifcProd)) //check to see if product already exists in group { IfcSystemObj.AddObjectToGroup(ifcProd); //if not add } } else { IfcSystemObj.AddObjectToGroup(ifcProd); } } } }