private void AddQuantityPSet(IIfcElementQuantity pSet, IIfcUnitAssignment modelUnits) { if (pSet == null) { return; } if (modelUnits == null) { throw new ArgumentNullException(nameof(modelUnits)); } foreach (var item in pSet.Quantities.OfType <IIfcPhysicalSimpleQuantity>()) // currently only handles IfcPhysicalSimpleQuantity { _quantities.Add(new PropertyItem { PropertySetName = pSet.Name, Name = item.Name, Value = GetValueString(item, modelUnits) }); } }
public static void ResolveQuantitySet(IfcStore ifcStore) { Dictionary <IfcObject, List <IfcPropertySet> > qSetsByIfcObject = new Dictionary <IfcObject, List <IfcPropertySet> >(); using (var txn = ifcStore.BeginTransaction("QuantitySet Creation Ifc2x3")) { List <IIfcRelDefinesByProperties> relProps = ifcStore.Instances.OfType <IIfcRelDefinesByProperties>() .Where(relProp => relProp.RelatingPropertyDefinition.Name.ToString().Contains("BaseQuantities")).ToList(); foreach (IIfcRelDefinesByProperties relProp in relProps) { IEnumerable <IIfcRelDefinesByProperties> propertyDefinitionOf = relProp.RelatingPropertyDefinition.PropertyDefinitionOf; foreach (IIfcRelDefinesByProperties relation in propertyDefinitionOf) { if (relation.RelatingPropertyDefinition is IIfcElementQuantity) { IIfcElementQuantity qset = (IIfcElementQuantity)relation.RelatingPropertyDefinition; IfcPropertySet pset = ifcStore.Instances.New <IfcPropertySet>(pSet => { pSet.Name = qset.Name.ToString().StartsWith("Qto_") ? "LIBAL_" + qset.Name.ToString() : "LIBAL_Qto_" + qset.Name.ToString(); Xbim.Common.IItemSet <IIfcPhysicalQuantity> quantities = qset.Quantities; foreach (IIfcPhysicalQuantity quan in quantities) { var value = resolveValue(quan); var unit = resolveUnit(quan); var name = quan.Name.ToString(); if (value != null) { pSet.HasProperties.Add(ifcStore.Instances.New <IfcPropertySingleValue>(p => { p.Name = name; p.NominalValue = value; p.Unit = unit; })); } } }); Xbim.Common.IItemSet <IIfcObject> relatedObjects = relation.RelatedObjects; foreach (IfcObject ifcObject in relatedObjects) { if (!qSetsByIfcObject.ContainsKey(ifcObject)) { qSetsByIfcObject.Add(ifcObject, new List <IfcPropertySet>()); } List <IfcPropertySet> psets = qSetsByIfcObject[ifcObject]; psets.Add(pset); } } } } txn.Commit(); } using (var txn = ifcStore.BeginTransaction("QuantitySet Reference Creation Ifc2x3")) { foreach (IfcObject key in qSetsByIfcObject.Keys) { List <IfcPropertySet> psets = qSetsByIfcObject[key]; foreach (IfcPropertySet pset in psets) { var pSetRel = ifcStore.Instances.New <IfcRelDefinesByProperties>(r => { r.RelatingPropertyDefinition = pset; }); pSetRel.RelatedObjects.Add(key); } } txn.Commit(); } }