From 1d447e6e23f417b0789b9eca24028c5d0baad448 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 14 Mar 2025 12:39:59 +0500 Subject: [PATCH] ifc5d.qto.IfcOpenshell - skip None values Just for consistency, in all other cases besides get_segment_length we were only preserving floats anyway --- src/ifc5d/ifc5d/qto.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ifc5d/ifc5d/qto.py b/src/ifc5d/ifc5d/qto.py index 84fa67879f..a71aa32942 100644 --- a/src/ifc5d/ifc5d/qto.py +++ b/src/ifc5d/ifc5d/qto.py @@ -304,7 +304,9 @@ class IfcOpenShell(QtoCalculator): results[element].setdefault(name, {}) for quantity, formula in quantities.items(): if formula == "get_segment_length": - results[element][name][quantity] = cls.get_segment_length(element) + value = cls.get_segment_length(element) + if value is None: + continue elif formula == "get_weight": value = cls.get_weight(element, geometry) if value is None: @@ -334,7 +336,13 @@ class IfcOpenShell(QtoCalculator): return iterators @classmethod - def get_segment_length(cls, element: ifcopenshell.entity_instance) -> float: + def get_segment_length(cls, element: ifcopenshell.entity_instance) -> Union[float, None]: + """Get segment length. + + :param element: IFC element entity. + :return: ``float`` segment length in project units + or ``None`` if element doesn't have a representation or it's not supported. + """ rep = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if rep and len(rep.Items or []) == 1 and rep.Items[0].is_a("IfcExtrudedAreaSolid"): item = rep.Items[0]