From 54b104b822372aa9c52366d170f29b117c77dadf Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 22 Oct 2024 16:15:09 +0500 Subject: [PATCH] fix not working bim.generate_space because of the units mismatch Not sure when this occurred but get_bmesh_from_polygon was expecting Polygon in project units but it was SI. Since it's probably better to move everything to SI, added an option to specify whether polygon is in SI or not. --- src/bonsai/bonsai/core/spatial.py | 2 +- src/bonsai/bonsai/core/tool.py | 2 +- src/bonsai/bonsai/tool/spatial.py | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/core/spatial.py b/src/bonsai/bonsai/core/spatial.py index 8765493d4c..43e680cb74 100644 --- a/src/bonsai/bonsai/core/spatial.py +++ b/src/bonsai/bonsai/core/spatial.py @@ -178,7 +178,7 @@ def generate_space(ifc: tool.Ifc, model: tool.Model, root: tool.Root, spatial: t if not space_polygon: return - bm = spatial.get_bmesh_from_polygon(space_polygon, h=h) + bm = spatial.get_bmesh_from_polygon(space_polygon, h=h, polygon_is_si=True) mesh = spatial.get_named_mesh_from_bmesh(name="Space", bmesh=bm) diff --git a/src/bonsai/bonsai/core/tool.py b/src/bonsai/bonsai/core/tool.py index f1dc7f4d12..afa5cd2418 100644 --- a/src/bonsai/bonsai/core/tool.py +++ b/src/bonsai/bonsai/core/tool.py @@ -930,7 +930,7 @@ class Spatial: def get_purged_inner_holes_poly(cls, union_geom, min_area): pass def get_poly_valid_interior_list(cls, poly, min_area, interiors_list): pass def get_buffered_poly_from_linear_ring(cls, linear_ring): pass - def get_bmesh_from_polygon(cls, poly, h): pass + def get_bmesh_from_polygon(cls, poly, h, polygon_is_si=False): pass def get_named_obj_from_bmesh(cls, name, bmesh): pass def get_named_obj_from_mesh(cls, name, mesh): pass def get_named_mesh_from_bmesh(cls, name, bmesh): pass diff --git a/src/bonsai/bonsai/tool/spatial.py b/src/bonsai/bonsai/tool/spatial.py index 0c012977b3..ec33e79597 100644 --- a/src/bonsai/bonsai/tool/spatial.py +++ b/src/bonsai/bonsai/tool/spatial.py @@ -893,14 +893,18 @@ class Spatial(bonsai.core.tool.Spatial): return poly @classmethod - def get_bmesh_from_polygon(cls, poly: Polygon, h: float) -> bmesh.types.BMesh: + def get_bmesh_from_polygon(cls, poly: Polygon, h: float, polygon_is_si: bool = False) -> bmesh.types.BMesh: + """ + :param h: Height, in meters. + :param polygon_is_si: Should be True if `poly` is defined in meters. + """ mat = Matrix() bm = bmesh.new() bm.verts.index_update() bm.edges.index_update() mat_invert = mat.inverted() - si_conversion = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + si_conversion = 1.0 if polygon_is_si else ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) new_verts = [ bm.verts.new(mat_invert @ (Vector([v[0], v[1], 0]) * si_conversion)) for v in poly.exterior.coords[0:-1] ]