From 562c32b96ed8a75afd94244d629982f5b8d99c94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Mon, 27 Jan 2025 18:58:02 -0300 Subject: [PATCH] Fix issue where area measurement lines where not showing correctly. --- src/bonsai/bonsai/bim/module/project/decorator.py | 14 +++++++++----- src/bonsai/bonsai/tool/polyline.py | 3 ++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/project/decorator.py b/src/bonsai/bonsai/bim/module/project/decorator.py index 0c297551b1..cd00264224 100644 --- a/src/bonsai/bonsai/bim/module/project/decorator.py +++ b/src/bonsai/bonsai/bim/module/project/decorator.py @@ -279,11 +279,13 @@ class MeasureDecorator: bm.verts.index_update() bm.edges.index_update() + verts = bm.verts + edges = bm.edges tris = [[loop.vert.index for loop in triangles] for triangles in bm.calc_loop_triangles()] bm.free() - return tris, center + return {"verts": verts, "edges": edges, "tris": tris} def draw_text_background(self, context, coords_dim, text_dim): padding = 5 @@ -319,6 +321,8 @@ class MeasureDecorator: all_positions = [] for i in range(len(polyline_points)): + if i < 2 and measure_type == "AREA": + continue if i == 0: continue dim_text_pos = (Vector(polyline_points[i].position) + Vector(polyline_points[i - 1].position)) / 2 @@ -364,7 +368,7 @@ class MeasureDecorator: # Area if measure_type == "AREA" and polyline_data.area: if len(polyline_verts) < 3: - return + continue center = sum(polyline_verts, Vector()) / len(polyline_verts) # Center between all polyline points if polyline_verts[0] == polyline_verts[-1]: center = sum(polyline_verts[:-1], Vector()) / len( @@ -382,7 +386,7 @@ class MeasureDecorator: # Length if measure_type in {"POLYLINE", "AREA"}: if len(polyline_verts) < 3: - return + continue total_length_text_coords = view3d_utils.location_3d_to_region_2d(region, rv3d, polyline_verts[-1]) blf.position(self.font_id, total_length_text_coords[0], total_length_text_coords[1], 0) value = polyline_data.total_length @@ -442,10 +446,10 @@ class MeasureDecorator: # Area highlight if polyline_data: - _, area = tool.Polyline.validate_input(polyline_data.area, "AREA") + area = polyline_data.area.split(" ")[0] if area: if float(area) > 0: - tris = self.calculate_polygon(polyline_verts) + tris = self.calculate_polygon(polyline_verts)["tris"] self.draw_batch("TRIS", polyline_verts, transparent_color(decorator_color_special), tris) # Draw polyline with selected points diff --git a/src/bonsai/bonsai/tool/polyline.py b/src/bonsai/bonsai/tool/polyline.py index 13ef80b471..a3585c5a9d 100644 --- a/src/bonsai/bonsai/tool/polyline.py +++ b/src/bonsai/bonsai/tool/polyline.py @@ -312,7 +312,6 @@ class Polyline(bonsai.core.tool.Polyline): @classmethod def validate_input(cls, input_number: str, input_type: InputType) -> tuple[bool, str]: """ - :return: Tuple with a boolean indicating if the input is valid and the final string output. Distance units converted to meters, angles input/output is in degrees. @@ -558,6 +557,8 @@ class Polyline(bonsai.core.tool.Polyline): measurement_data = bpy.context.scene.BIMPolylineProperties.measurement_polyline.add() measurement_type = bpy.context.scene.MeasureToolSettings.measurement_type measurement_data.measurement_type = measurement_type + if measurement_type == "AREA" and len(polyline_points) < 3: + return for point in polyline_points: measurement_point = measurement_data.polyline_points.add() measurement_point.x = point.x