mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-12 06:32:09 +00:00
Fix some errors and update notes
This commit is contained in:
committed by
Dion Moult
parent
4d4ab63404
commit
20f4737ffd
@@ -378,13 +378,13 @@ mapper = {
|
|||||||
'Length' : None,
|
'Length' : None,
|
||||||
},
|
},
|
||||||
'Qto_WallBaseQuantities' : {
|
'Qto_WallBaseQuantities' : {
|
||||||
'Length' : "get_length",
|
'Length' : { "function_name" : "get_length", "args" : ", main_axis = 'x'"},
|
||||||
'Width' : "get_width",
|
'Width' : "get_width",
|
||||||
'Height' : "get_height",
|
'Height' : "get_height",
|
||||||
'GrossFootprintArea' : "get_gross_footprint_area",
|
'GrossFootprintArea' : "get_gross_footprint_area",
|
||||||
'NetFootprintArea' : "get_net_footprint_area",
|
'NetFootprintArea' : "get_net_footprint_area",
|
||||||
'GrossSideArea' : { "function_name" : "get_half_lateral_area", "args" : ", exclude_end_areas = True, subtract_openings = False" },
|
'GrossSideArea' : { "function_name" : "get_half_lateral_area", "args" : ", exclude_end_areas = True, subtract_openings = False, main_axis = 'x'" },
|
||||||
'NetSideArea' : { "function_name" : "get_half_lateral_area", "args" : ", exclude_end_areas = True" },
|
'NetSideArea' : { "function_name" : "get_half_lateral_area", "args" : ", exclude_end_areas = True, main_axis = 'x'" },
|
||||||
'GrossVolume' : "get_gross_volume",
|
'GrossVolume' : "get_gross_volume",
|
||||||
'NetVolume' : "get_net_volume",
|
'NetVolume' : "get_net_volume",
|
||||||
'GrossWeight' : None,
|
'GrossWeight' : None,
|
||||||
|
|||||||
+6
-3
@@ -6,14 +6,17 @@ without the related IFC opening.
|
|||||||
So, if an object is created lets say with a hole but without defining the opening, the hole is counted into net volume (so get volume and net volume are the same).
|
So, if an object is created lets say with a hole but without defining the opening, the hole is counted into net volume (so get volume and net volume are the same).
|
||||||
This is in order to follow the native IFC approach.
|
This is in order to follow the native IFC approach.
|
||||||
|
|
||||||
WALLS AND BEAM LENGTH, HEIGHT, WIDTH AND LATERAL AREA
|
WALLS
|
||||||
These dimensions are calculated with the convention that the object can have main axis along x or z.
|
Walls quantities are calculated with the convention that the object main axis is the 'x'.
|
||||||
The same with lateral area.
|
|
||||||
|
|
||||||
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
|
||||||
Also, note that these dimensions are calculated only if the slab is prismatic.
|
Also, note that these dimensions are calculated only if the slab is prismatic.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -95,12 +95,12 @@ class QtoCalculator:
|
|||||||
z = (Vector(o.bound_box[1]) - Vector(o.bound_box[0])).length
|
z = (Vector(o.bound_box[1]) - Vector(o.bound_box[0])).length
|
||||||
return max(x, y, z)
|
return max(x, y, z)
|
||||||
|
|
||||||
def get_length(self, o, vg_index=None):
|
def get_length(self, o, vg_index=None, main_axis: str = ""):
|
||||||
if vg_index is None:
|
if vg_index is None:
|
||||||
x = (Vector(o.bound_box[4]) - Vector(o.bound_box[0])).length
|
x = (Vector(o.bound_box[4]) - Vector(o.bound_box[0])).length
|
||||||
y = (Vector(o.bound_box[3]) - Vector(o.bound_box[0])).length
|
y = (Vector(o.bound_box[3]) - Vector(o.bound_box[0])).length
|
||||||
z = (Vector(o.bound_box[1]) - Vector(o.bound_box[0])).length
|
z = (Vector(o.bound_box[1]) - Vector(o.bound_box[0])).length
|
||||||
if self.get_object_main_axis(o) == "x":
|
if self.get_object_main_axis(o) == "x" or main_axis=="x":
|
||||||
return max(x, y)
|
return max(x, y)
|
||||||
if self.get_object_main_axis(o) == "z":
|
if self.get_object_main_axis(o) == "z":
|
||||||
return max(z, x)
|
return max(z, x)
|
||||||
@@ -423,6 +423,7 @@ class QtoCalculator:
|
|||||||
exclude_side_areas: bool = False,
|
exclude_side_areas: bool = False,
|
||||||
angle_z1: int = 45,
|
angle_z1: int = 45,
|
||||||
angle_z2: int = 135,
|
angle_z2: int = 135,
|
||||||
|
main_axis: str = "",
|
||||||
):
|
):
|
||||||
"""_summary_
|
"""_summary_
|
||||||
|
|
||||||
@@ -439,15 +440,15 @@ class QtoCalculator:
|
|||||||
y_axis = [0, 1, 0]
|
y_axis = [0, 1, 0]
|
||||||
z_axis = [0, 0, 1]
|
z_axis = [0, 0, 1]
|
||||||
|
|
||||||
if self.get_object_main_axis(obj) == "x":
|
if self.get_object_main_axis(obj) == "x" or main_axis == "x":
|
||||||
main_axis = x_axis
|
main_axis = x_axis
|
||||||
side_axis = y_axis
|
side_axis = y_axis
|
||||||
top_axis = z_axis
|
top_axis = z_axis
|
||||||
if self.get_object_main_axis(obj) == "z":
|
elif self.get_object_main_axis(obj) == "z":
|
||||||
main_axis = z_axis
|
main_axis = z_axis
|
||||||
side_axis = x_axis
|
side_axis = x_axis
|
||||||
top_axis = y_axis
|
top_axis = y_axis
|
||||||
if self.get_object_main_axis(obj) == "y":
|
elif self.get_object_main_axis(obj) == "y":
|
||||||
main_axis = y_axis
|
main_axis = y_axis
|
||||||
side_axis = z_axis
|
side_axis = z_axis
|
||||||
top_axis = x_axis
|
top_axis = x_axis
|
||||||
@@ -481,6 +482,7 @@ class QtoCalculator:
|
|||||||
exclude_side_areas: bool = False,
|
exclude_side_areas: bool = False,
|
||||||
angle_z1: int = 45,
|
angle_z1: int = 45,
|
||||||
angle_z2: int = 135,
|
angle_z2: int = 135,
|
||||||
|
main_axis: str = "",
|
||||||
):
|
):
|
||||||
"""_summary_
|
"""_summary_
|
||||||
|
|
||||||
@@ -499,7 +501,7 @@ class QtoCalculator:
|
|||||||
|
|
||||||
gross_obj = bpy.data.objects.new("MyObject", gross_mesh)
|
gross_obj = bpy.data.objects.new("MyObject", gross_mesh)
|
||||||
|
|
||||||
gross_lateral_area = self.get_lateral_area(gross_obj, subtract_openings, exclude_end_areas, exclude_side_areas, angle_z1, angle_z2 )
|
gross_lateral_area = self.get_lateral_area(gross_obj, subtract_openings, exclude_end_areas, exclude_side_areas, angle_z1, angle_z2, main_axis )
|
||||||
|
|
||||||
self.delete_obj(gross_obj)
|
self.delete_obj(gross_obj)
|
||||||
self.delete_mesh(gross_mesh)
|
self.delete_mesh(gross_mesh)
|
||||||
@@ -515,6 +517,7 @@ class QtoCalculator:
|
|||||||
exclude_side_areas: bool = False,
|
exclude_side_areas: bool = False,
|
||||||
angle_z1: int = 45,
|
angle_z1: int = 45,
|
||||||
angle_z2: int = 135,
|
angle_z2: int = 135,
|
||||||
|
main_axis: str = "",
|
||||||
):
|
):
|
||||||
"""_summary_:
|
"""_summary_:
|
||||||
:param blender-object obj: blender object, bpy.types.Object
|
:param blender-object obj: blender object, bpy.types.Object
|
||||||
|
|||||||
Reference in New Issue
Block a user