/// <summary> /// Get the Category for the IfcTypeObject /// </summary> /// <param name="type">IfcTypeObject</param> /// <returns>string of the category</returns> public string GetCategory(COBieDataPropertySetValues allPropertyValues) { string categoryRef = GetCategoryClassification(allPropertyValues.CurrentObject); if (!string.IsNullOrEmpty(categoryRef)) { return(categoryRef); } //Try by PropertySet as fallback //filter list for front end category List <string> categoriesCode = new List <string>() { "OmniClass Table 13 Category", "OmniClass Number", "OmniClass_Number", "Assembly_Code", "Assembly Code", "Uniclass Code", "Uniclass_Code", "Category_Code", "Category Code", "Classification Code", "Classification_Code" }; //filter list for back end category List <string> categoriesDesc = new List <string>() { "OmniClass Title", "OmniClass_Title", "Assembly_Description", "Assembly Description", "UniclassDescription", "Uniclass_Description", "Category Description", "Category_Description", "Classification Description", "Classification_Description" }; List <string> categoriesTest = new List <string>(); categoriesCode.AddRange(categoriesDesc); IEnumerable <IfcPropertySingleValue> properties = allPropertyValues.ObjProperties.OfType <IfcPropertySingleValue>(); if (properties.Any()) { properties = from psetval in properties where categoriesTest.Contains(psetval.Name.ToString()) select psetval; } //second fall back on objects defined by this type, see if they hold a category on the first related object to this type if (!properties.Any()) { Dictionary <IfcPropertySet, IEnumerable <IfcSimpleProperty> > propertysets = allPropertyValues.GetRelatedProperties(allPropertyValues.CurrentObject as IfcTypeObject); if (propertysets != null) { properties = (from dic in propertysets from psetval in dic.Value where categoriesTest.Contains(psetval.Name.ToString()) select psetval).OfType <IfcPropertySingleValue>(); } } string value = ""; if (properties.Any()) { string conCatChar = " : "; string code = properties.Where(p => p.NominalValue != null && categoriesCode.Contains(p.Name)).Select(p => p.NominalValue.ToString()).FirstOrDefault(); string description = properties.Where(p => p.NominalValue != null && categoriesDesc.Contains(p.Name)).Select(p => p.NominalValue.ToString()).FirstOrDefault(); if (!string.IsNullOrEmpty(code)) { value += code; } if (!string.IsNullOrEmpty(description)) { value += conCatChar + description; } } if (string.IsNullOrEmpty(value)) { return(Constants.DEFAULT_STRING); } else { return(value); } }