From 665afc037542cdc068893233ddc349cfb036ed5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Mon, 30 Sep 2024 18:25:09 -0300 Subject: [PATCH] Wall preview decorator now show tris. --- .../bonsai/bim/module/model/decorator.py | 53 ++++++++++++++++--- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/decorator.py b/src/bonsai/bonsai/bim/module/model/decorator.py index 1f82fb337f..5f53effcd6 100644 --- a/src/bonsai/bonsai/bim/module/model/decorator.py +++ b/src/bonsai/bonsai/bim/module/model/decorator.py @@ -365,18 +365,25 @@ class PolylineDecorator: batch.draw(shader) def draw_product_preview(self, context): + def transparent_color(color, alpha=0.1): + color = [i for i in color] + color[3] = alpha + return color + self.addon_prefs = tool.Blender.get_addon_preferences() self.line_shader = gpu.shader.from_builtin("POLYLINE_UNIFORM_COLOR") self.line_shader.bind() # required to be able to change uniforms of the shader self.line_shader.uniform_float("viewportSize", (context.region.width, context.region.height)) self.shader = gpu.shader.from_builtin("UNIFORM_COLOR") - self.line_shader.uniform_float("lineWidth", 0.5) + self.line_shader.uniform_float("lineWidth", 2.0) decorator_color = self.addon_prefs.decorator_color_special polyline = context.scene.BIMPolylineProperties.polyline_point prop = context.scene.BIMPolylineProperties.product_preview points = [] - edges = [] + side_edges_1 = [] + side_edges_2 = [] + base_edges = [] for i in range(len(prop)): points.append(Vector((prop[i].x, prop[i].y, prop[i].z))) @@ -386,16 +393,46 @@ class PolylineDecorator: bottom_side_2 = [[i, (i + 1) % (n)] for i in range(n // 2, n - 1)] bottom_connections = [[i, n - i - 1] for i in range(n // 2)] bottom_loop = bottom_connections + bottom_side_1 + bottom_side_2 - edges.extend(bottom_loop) + side_edges_1.extend(bottom_side_1) + side_edges_2.extend(bottom_side_2) + base_edges.extend(bottom_loop) + upper_side_1 = [[i + n for i in edges] for edges in bottom_side_1] + upper_side_2 = [[i + n for i in edges] for edges in bottom_side_2] upper_loop = [[i + n for i in edges] for edges in bottom_loop] - edges.extend(upper_loop) + side_edges_1.extend(upper_side_1) + side_edges_2.extend(upper_side_2) + base_edges.extend(upper_loop) - vertical_connections = [[i, j] for i, j in zip(range(n), range(n, n * 2))] - edges.extend(vertical_connections) + loops = [side_edges_1, side_edges_2, base_edges] - if len(points) > 1: - self.draw_batch("LINES", points, decorator_color, edges) + all_edges = [] + all_tris = [] + for i, group in enumerate(loops): + bm = bmesh.new() + + new_verts = [bm.verts.new(v) for v in points] + new_edges = [bm.edges.new((new_verts[e[0]], new_verts[e[1]])) for e in group] + + bm.verts.index_update() + bm.edges.index_update() + + if i == 2: + new_faces = bmesh.ops.contextual_create(bm, geom=bm.edges) + new_faces = bmesh.ops.bridge_loops(bm, edges=bm.edges, use_pairs=True, use_cyclic=True) + + bm.verts.index_update() + bm.edges.index_update() + edges = [[v.index for v in e.verts] for e in bm.edges] + print(edges) + tris = [[l.vert.index for l in loop] for loop in bm.calc_loop_triangles()] + all_edges.extend(edges) + all_tris.extend(tris) + + all_edges = list(set(tuple(e) for e in all_edges)) + all_tris = list(set(tuple(t) for t in all_tris)) + self.draw_batch("LINES", points, decorator_color, all_edges) + self.draw_batch("TRIS", points, transparent_color(decorator_color), all_tris) def draw_input_ui(self, context): texts = {