diff --git a/src/blenderbim/blenderbim/bim/module/qto/operator.py b/src/blenderbim/blenderbim/bim/module/qto/operator.py index 3df920b1c4..ed9957768c 100644 --- a/src/blenderbim/blenderbim/bim/module/qto/operator.py +++ b/src/blenderbim/blenderbim/bim/module/qto/operator.py @@ -172,7 +172,7 @@ class QuantifyObjects(bpy.types.Operator): PsetData.load(self.file, obj.BIMObjectProperties.ifc_definition_id) return {"FINISHED"} -class AssignPsetQto(bpy.types.Operator): +class AssignPsetQto(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.assign_pset_qto" bl_label = "Assign Pset Qto" bl_options = {"REGISTER", "UNDO"} @@ -182,11 +182,11 @@ class AssignPsetQto(bpy.types.Operator): def poll(cls, context): return context.active_object and context.selected_objects - def execute(self, context): + def _execute(self, context): core.assign_pset_qto(tool.Qto, selected_objects = context.selected_objects) return {"FINISHED"} -class CalculateAllQtos(bpy.types.Operator): +class CalculateAllQtos(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.calculate_all_qtos" bl_label = "Calculate All Qtos" bl_options = {"REGISTER", "UNDO"} @@ -196,6 +196,6 @@ class CalculateAllQtos(bpy.types.Operator): def poll(cls, context): return context.active_object and context.selected_objects - def execute(self, context): + def _execute(self, context): core.calculate_all_qtos(tool.Qto, selected_objects = context.selected_objects) return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/core/qto.py b/src/blenderbim/blenderbim/core/qto.py index 92284b925e..e8d97058fc 100644 --- a/src/blenderbim/blenderbim/core/qto.py +++ b/src/blenderbim/blenderbim/core/qto.py @@ -23,20 +23,17 @@ def calculate_circle_radius(qto, obj=None): return result def assign_pset_qto(qto, selected_objects): - for object in selected_objects: - qto.set_active_object(object) - qto.assign_pset_qto_to_selected_object(object) + for obj in selected_objects: + qto.assign_pset_qto_to_selected_object(obj) def calculate_all_qtos(qto, selected_objects): - for object in selected_objects: - qto.set_active_object(object) - - if not qto.get_pset_qto_object_ifc_info(object): - print("There is no pset qto instance associated to object " + object.name) + for obj in selected_objects: + if not qto.get_pset_qto_object_ifc_info(obj): + print(f"There is no pset qto instance associated to object {obj.name}") continue - pset_qto_properties = qto.get_pset_qto_properties(object) + pset_qto_properties = qto.get_pset_qto_properties(obj) - calculated_quantities = qto.get_calculated_quantities(object, pset_qto_properties) + calculated_quantities = qto.get_calculated_quantities(obj, pset_qto_properties) - qto.edit_qto(object, calculated_quantities) + qto.edit_qto(obj, calculated_quantities) diff --git a/src/blenderbim/blenderbim/tool/qto.py b/src/blenderbim/blenderbim/tool/qto.py index 855a47ec05..739b6e958a 100644 --- a/src/blenderbim/blenderbim/tool/qto.py +++ b/src/blenderbim/blenderbim/tool/qto.py @@ -42,47 +42,43 @@ class Qto(blenderbim.core.tool.Qto): bpy.context.scene.BIMQtoProperties.qto_result = str(round(result, 3)) @classmethod - def set_active_object(cls, object): - bpy.context.view_layer.objects.active = object + def get_pset_qto_object_ifc_info(cls, obj): + element = tool.Ifc.get_entity(obj) + pset_qto_ifc_info = ifcopenshell.util.element.get_psets(element, qtos_only = True) + return pset_qto_ifc_info @classmethod - def get_pset_qto_object_ifc_info(cls, object): - element = tool.Ifc.get_entity(object) - pset_qto_ifc_instance = ifcopenshell.util.element.get_psets(element, qtos_only = True) - return pset_qto_ifc_instance - - @classmethod - def get_pset_qto_properties(cls, object): + def get_pset_qto_properties(cls, obj): file = tool.Ifc.get() schema = file.schema pset_qto = util.pset.PsetQto(schema) - pset_qto_name = cls.get_pset_qto_name(object) + pset_qto_name = cls.get_pset_qto_name(obj) pset_qto_properties = pset_qto.get_by_name(pset_qto_name).get_info()['HasPropertyTemplates'] return pset_qto_properties @classmethod - def get_pset_qto_name(cls, object): - applicable_pset_names = cls.get_applicable_pset_names(object) + def get_pset_qto_name(cls, obj): + applicable_pset_names = cls.get_applicable_pset_names(obj) for applicable_pset_name in applicable_pset_names: if 'Qto_' in applicable_pset_name: pset_qto_name = applicable_pset_name return pset_qto_name @classmethod - def get_applicable_pset_names(cls, object): + def get_applicable_pset_names(cls, obj): file = tool.Ifc.get() schema = file.schema pset_qto = util.pset.PsetQto(schema) - entity = tool.Ifc.get_entity(object) + entity = tool.Ifc.get_entity(obj) ifc_object_type = entity.get_info()['type'] applicable_pset_names = pset_qto.get_applicable_names(ifc_object_type) return applicable_pset_names @classmethod - def edit_qto(cls, object, calculated_quantities): + def edit_qto(cls, obj, calculated_quantities): file = tool.Ifc.get() - pset_qto_id = cls.get_pset_qto_id(object) - pset_qto_name = cls.get_pset_qto_name(object) + pset_qto_id = cls.get_pset_qto_id(obj) + pset_qto_name = cls.get_pset_qto_name(obj) ifcopenshell.api.run("pset.edit_qto", file, @@ -90,46 +86,42 @@ class Qto(blenderbim.core.tool.Qto): ) @classmethod - def get_pset_qto_id(cls, object): + def get_pset_qto_id(cls, obj): file = tool.Ifc.get() - pset_qto_name = cls.get_pset_qto_name(object) - pset_qto_object_ifc_instance = cls.get_pset_qto_object_ifc_info(object) - pset_qto_id = file.by_id(pset_qto_object_ifc_instance[pset_qto_name]['id']) + pset_qto_name = cls.get_pset_qto_name(obj) + pset_qto_object_ifc_info = cls.get_pset_qto_object_ifc_info(obj) + pset_qto_id = file.by_id(pset_qto_object_ifc_info[pset_qto_name]['id']) return pset_qto_id @classmethod - def get_pset_qto_name(cls, object): - applicable_pset_names = cls.get_applicable_pset_names(object) + def get_pset_qto_name(cls, obj): + applicable_pset_names = cls.get_applicable_pset_names(obj) for applicable_pset_name in applicable_pset_names: if 'Qto_' in applicable_pset_name: pset_qto_name = applicable_pset_name return pset_qto_name @classmethod - def get_new_quantity(cls, object, quantity_name, alternative_prop_names): + def get_new_quantity(cls, obj, quantity_name, alternative_prop_names): calculator = QtoCalculator() - new_quantity = calculator.guess_quantity(quantity_name, alternative_prop_names, object) + new_quantity = calculator.guess_quantity(quantity_name, alternative_prop_names, obj) return new_quantity - @classmethod - def get_non_calculated_value(cls): - return 0 - @classmethod def get_rounded_value(cls, new_quantity): return round(new_quantity, 3) @classmethod - def get_calculated_quantities(cls, object, pset_qto_properties): + def get_calculated_quantities(cls, obj, pset_qto_properties): calculated_quantities = {} for pset_qto_property in pset_qto_properties: quantity_name = pset_qto_property.get_info()['Name'] alternative_prop_names = [p.get_info()['Name'] for p in pset_qto_properties] - new_quantity = cls.get_new_quantity(object, quantity_name, alternative_prop_names) + new_quantity = cls.get_new_quantity(obj, quantity_name, alternative_prop_names) if not new_quantity: - new_quantity = cls.get_non_calculated_value() + new_quantity = 0 else: new_quantity = cls.get_rounded_value(new_quantity) @@ -138,10 +130,10 @@ class Qto(blenderbim.core.tool.Qto): return calculated_quantities @classmethod - def assign_pset_qto_to_selected_object(cls, object): + def assign_pset_qto_to_selected_object(cls, obj): file = tool.Ifc.get() - entity = tool.Ifc.get_entity(object) - pset_qto_name = cls.get_pset_qto_name(object) + entity = tool.Ifc.get_entity(obj) + pset_qto_name = cls.get_pset_qto_name(obj) ifcopenshell.api.run( "pset.add_qto", file,