From 8ca344259f6956b3f640bbd078a2019f457a5f42 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 14 Mar 2025 10:56:23 +0500 Subject: [PATCH] bim.perform_quantity_take_off - support fallback calculator in ifc4x3 too --- src/bonsai/bonsai/bim/module/qto/operator.py | 2 +- src/bonsai/bonsai/bim/module/qto/prop.py | 6 +----- src/bonsai/bonsai/tool/qto.py | 10 +++++++++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/qto/operator.py b/src/bonsai/bonsai/bim/module/qto/operator.py index 09f29ea1af..1d57e51227 100644 --- a/src/bonsai/bonsai/bim/module/qto/operator.py +++ b/src/bonsai/bonsai/bim/module/qto/operator.py @@ -191,7 +191,7 @@ class PerformQuantityTakeOff(bpy.types.Operator, tool.Ifc.Operator): not_quantified_elements = run_quantification(props.qto_rule, elements) if props.fallback and not_quantified_elements: - alternative_rules = next(rule for rule in ifc5d.qto.rules if rule != props.qto_rule) + alternative_rules = next(rule for rule in tool.Qto.get_qto_rules() if rule != props.qto_rule) not_quantified_elements = run_quantification(alternative_rules, not_quantified_elements) not_quantified_message = tool.Qto.get_not_quantified_elements_message(not_quantified_elements) diff --git a/src/bonsai/bonsai/bim/module/qto/prop.py b/src/bonsai/bonsai/bim/module/qto/prop.py index fa90ba6f27..23f6f707c5 100644 --- a/src/bonsai/bonsai/bim/module/qto/prop.py +++ b/src/bonsai/bonsai/bim/module/qto/prop.py @@ -38,12 +38,8 @@ CALCULATOR_FUNCTION_ENUM_ITEMS: list[Union[tuple[str, str, str], None]] = [] def get_qto_rule(self: "BIMQtoProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]: - ifc_file = tool.Ifc.get() - is_ifc4x3 = ifc_file.schema == "IFC4X3" results: list[tuple[str, str, str]] = [] - for rule_id, rule in ifc5d.qto.rules.items(): - if rule_id.startswith("IFC4X3") != is_ifc4x3: - continue + for rule_id, rule in tool.Qto.get_qto_rules().items(): results.append((rule_id, rule["name"], rule["description"])) return results diff --git a/src/bonsai/bonsai/tool/qto.py b/src/bonsai/bonsai/tool/qto.py index 60985b5cb3..fdd9c038d7 100644 --- a/src/bonsai/bonsai/tool/qto.py +++ b/src/bonsai/bonsai/tool/qto.py @@ -25,7 +25,7 @@ import ifcopenshell import ifcopenshell.util.unit import ifcopenshell.util.element from mathutils import Vector -from typing import Optional, Union, Literal, TYPE_CHECKING +from typing import Optional, Union, Literal, TYPE_CHECKING, Any if TYPE_CHECKING: from bonsai.bim.module.qto.prop import BIMQtoProperties @@ -168,6 +168,14 @@ class Qto(bonsai.core.tool.Qto): ) return result + @classmethod + def get_qto_rules(cls) -> dict[str, dict[str, Any]]: + import ifc5d.qto + + ifc_file = tool.Ifc.get() + is_ifc4x3 = ifc_file.schema == "IFC4X3" + return {rule_id: rule for rule_id, rule in ifc5d.qto.rules.items() if rule_id.startswith("IFC4X3") == is_ifc4x3} + @classmethod def get_not_quantified_elements_message(cls, not_quantified_elements: set[ifcopenshell.entity_instance]) -> str: not_quantified_message = ""