internal override List<IBaseClassIfc> retrieveReference(IfcReference reference)
{
IfcReference ir = reference.InnerReference;
List<IBaseClassIfc> result = new List<IBaseClassIfc>();
if (ir == null)
{
if (string.Compare(reference.mAttributeIdentifier, "Quantities", true) == 0)
{
List<IfcPhysicalQuantity> quants = Quantities;
if (reference.mListPositions.Count == 0)
{
string name = reference.InstanceName;
if (!string.IsNullOrEmpty(name))
{
foreach (IfcPhysicalQuantity q in quants)
{
if (string.Compare(q.Name, name) == 0)
result.Add(q);
}
}
else
result.AddRange(quants);
}
else
{
foreach (int i in reference.mListPositions)
{
result.Add(quants[i - 1]);
}
}
return result;
}
}
if (string.Compare(reference.mAttributeIdentifier, "Quantities", true) == 0)
{
List<IfcPhysicalQuantity> quants = Quantities;
if (reference.mListPositions.Count == 0)
{
string name = reference.InstanceName;
if (string.IsNullOrEmpty(name))
{
foreach (IfcPhysicalQuantity q in quants)
result.AddRange(q.retrieveReference(reference.InnerReference));
}
else
{
foreach (IfcPhysicalQuantity q in quants)
{
if (string.Compare(name, q.Name) == 0)
result.AddRange(q.retrieveReference(reference.InnerReference));
}
}
}
else
{
foreach (int i in reference.mListPositions)
result.AddRange(quants[i - 1].retrieveReference(ir));
}
return result;
}
return base.retrieveReference(reference);
}
internal override bool isEmpty { get { return mQuantities.Count == 0; } }