Merge pull request #2605 from maxfb87/mapping_quantities

Mapping quantities (see #2533)
This commit is contained in:
Massimo Fabbro
2022-11-19 17:28:29 +01:00
committed by GitHub
3 changed files with 18 additions and 9 deletions
@@ -65,10 +65,10 @@ mapper = {
'GrossWeight' : None, 'GrossWeight' : None,
}, },
'Qto_DoorBaseQuantities' : { 'Qto_DoorBaseQuantities' : {
'Width' : None, 'Width' : { "function_name" : "get_length", "args" : ", main_axis = 'x'"},
'Height' : None, 'Height' : "get_height",
'Perimeter' : None, 'Perimeter' : "get_rectangular_perimeter",
'Area' : None, 'Area' : "get_net_side_area",
}, },
'Qto_DuctSegmentBaseQuantities' : { 'Qto_DuctSegmentBaseQuantities' : {
'Length' : None, 'Length' : None,
@@ -506,10 +506,10 @@ mapper = {
'GrossWeight' : None, 'GrossWeight' : None,
}, },
'Qto_WindowBaseQuantities' : { 'Qto_WindowBaseQuantities' : {
'Width' : None, 'Width' : { "function_name" : "get_length", "args" : ", main_axis = 'x'"},
'Height' : None, 'Height' : "get_height",
'Perimeter' : None, 'Perimeter' : "get_rectangular_perimeter",
'Area' : None, 'Area' : "get_net_side_area",
}, },
'Qto_SanitaryTerminalBaseQuantities' : { 'Qto_SanitaryTerminalBaseQuantities' : {
'GrossWeight' : None, 'GrossWeight' : None,
@@ -8,6 +8,7 @@ This is in order to follow the native IFC approach.
WALLS WALLS
Walls quantities are calculated with the convention that the object main axis is the 'x'. 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 SLAB THICKNESS
The slab thickness is defined as Width, following the IFC definition The slab thickness is defined as Width, following the IFC definition
@@ -17,6 +18,9 @@ LATERAL AREA
All lateral areas are counted, so for example also the inside surfaces. 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. 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
@@ -161,6 +161,11 @@ class QtoCalculator:
self.delete_obj(gross_obj) self.delete_obj(gross_obj)
return gross_perimeter 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): def get_lowest_polygons(self, o):
lowest_polygons = [] lowest_polygons = []
lowest_z = None lowest_z = None
@@ -408,7 +413,7 @@ class QtoCalculator:
bl_OBB_opening_object = self.get_OBB_object(bl_opening_obj) bl_OBB_opening_object = self.get_OBB_object(bl_opening_obj)
opening_area = self.get_lateral_area( 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 #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: if opening_area >= min_area:
total_opening_area += opening_area total_opening_area += opening_area