From bf59871db5e80048cfbd5c012461173de09d6b5d Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Wed, 16 Nov 2022 21:50:52 +0100 Subject: [PATCH 1/3] Fix get_gross_side_area for Qto_WallBaseQuantities --- src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py b/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py index 2e61d74001..4b4b3c7696 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py +++ b/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py @@ -408,7 +408,7 @@ class QtoCalculator: bl_OBB_opening_object = self.get_OBB_object(bl_opening_obj) opening_area = self.get_lateral_area( #self.get_OBB_object(bl_opening_obj), angle_z1=angle_z1, angle_z2=angle_z2, exclude_end_areas=True - bl_OBB_opening_object, angle_z1=angle_z1, angle_z2=angle_z2, exclude_end_areas=True, + bl_OBB_opening_object, angle_z1=angle_z1, angle_z2=angle_z2, exclude_end_areas=True, main_axis = 'x', ) if opening_area >= min_area: total_opening_area += opening_area @@ -462,6 +462,7 @@ class QtoCalculator: total_opening_area = ( 0 if subtract_openings else self.get_opening_area(obj, angle_z1=angle_z1, angle_z2=angle_z2) ) + print(total_opening_area) polygons = obj.data.polygons for polygon in polygons: From 8f8940de2a70b09bf278c8fed020f3691b1ead09 Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Wed, 16 Nov 2022 21:56:29 +0100 Subject: [PATCH 2/3] Minor fix --- .../bim/module/pset/notes_about_mapped_calculated_quantities.txt | 1 + src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/pset/notes_about_mapped_calculated_quantities.txt b/src/blenderbim/blenderbim/bim/module/pset/notes_about_mapped_calculated_quantities.txt index d6a7e89ada..9a32b1f868 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/notes_about_mapped_calculated_quantities.txt +++ b/src/blenderbim/blenderbim/bim/module/pset/notes_about_mapped_calculated_quantities.txt @@ -8,6 +8,7 @@ This is in order to follow the native IFC approach. WALLS Walls quantities are calculated with the convention that the object main axis is the 'x'. +Also openings inside a wall have to main axis 'x' SLAB THICKNESS The slab thickness is defined as Width, following the IFC definition diff --git a/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py b/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py index 4b4b3c7696..bc8aac4234 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py +++ b/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py @@ -462,7 +462,6 @@ class QtoCalculator: total_opening_area = ( 0 if subtract_openings else self.get_opening_area(obj, angle_z1=angle_z1, angle_z2=angle_z2) ) - print(total_opening_area) polygons = obj.data.polygons for polygon in polygons: From 8c5883ffaa931aec66b8b9174b7fcdcc4d1fc8b6 Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Wed, 16 Nov 2022 22:28:10 +0100 Subject: [PATCH 3/3] Finish mapping Qto_DoorBaseQuantities and Qto_WindowBaseQuantities --- .../module/pset/calc_quantity_function_mapper.py | 16 ++++++++-------- .../notes_about_mapped_calculated_quantities.txt | 3 +++ .../blenderbim/bim/module/pset/qto_calculator.py | 5 +++++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/pset/calc_quantity_function_mapper.py b/src/blenderbim/blenderbim/bim/module/pset/calc_quantity_function_mapper.py index f25da588ec..a2f00eba76 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/calc_quantity_function_mapper.py +++ b/src/blenderbim/blenderbim/bim/module/pset/calc_quantity_function_mapper.py @@ -65,10 +65,10 @@ mapper = { 'GrossWeight' : None, }, 'Qto_DoorBaseQuantities' : { - 'Width' : None, - 'Height' : None, - 'Perimeter' : None, - 'Area' : None, + 'Width' : { "function_name" : "get_length", "args" : ", main_axis = 'x'"}, + 'Height' : "get_height", + 'Perimeter' : "get_rectangular_perimeter", + 'Area' : "get_net_side_area", }, 'Qto_DuctSegmentBaseQuantities' : { 'Length' : None, @@ -506,10 +506,10 @@ mapper = { 'GrossWeight' : None, }, 'Qto_WindowBaseQuantities' : { - 'Width' : None, - 'Height' : None, - 'Perimeter' : None, - 'Area' : None, + 'Width' : { "function_name" : "get_length", "args" : ", main_axis = 'x'"}, + 'Height' : "get_height", + 'Perimeter' : "get_rectangular_perimeter", + 'Area' : "get_net_side_area", }, 'Qto_SanitaryTerminalBaseQuantities' : { 'GrossWeight' : None, diff --git a/src/blenderbim/blenderbim/bim/module/pset/notes_about_mapped_calculated_quantities.txt b/src/blenderbim/blenderbim/bim/module/pset/notes_about_mapped_calculated_quantities.txt index 9a32b1f868..07c078bb13 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/notes_about_mapped_calculated_quantities.txt +++ b/src/blenderbim/blenderbim/bim/module/pset/notes_about_mapped_calculated_quantities.txt @@ -18,6 +18,9 @@ LATERAL AREA All lateral areas are counted, so for example also the inside surfaces. It shouldn't be like that so we should find a method to only external lateral area. +DOORS AND WINDOWS +Doors and Windows have to have the main axis along 'x' and the height is measured along 'z' axis + diff --git a/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py b/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py index bc8aac4234..884272dba1 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py +++ b/src/blenderbim/blenderbim/bim/module/pset/qto_calculator.py @@ -161,6 +161,11 @@ class QtoCalculator: self.delete_obj(gross_obj) return gross_perimeter + def get_rectangular_perimeter(self, obj): + length = self.get_length(obj, main_axis='x') + height = self.get_height(obj) + return (length+height)*2 + def get_lowest_polygons(self, o): lowest_polygons = [] lowest_z = None