From 60fa05a9134c4faca4135bb2231adf211a84a57b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 12 Feb 2023 18:58:49 +1100 Subject: [PATCH] Fix #2521. Fill areas have limited dissolve applied before rendering. --- .../blenderbim/bim/data/styles/default.css | 12 ++++++------ .../blenderbim/bim/module/drawing/svgwriter.py | 13 ++++++++++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/data/styles/default.css b/src/blenderbim/blenderbim/bim/data/styles/default.css index 36f81edcd3..09adb822bc 100644 --- a/src/blenderbim/blenderbim/bim/data/styles/default.css +++ b/src/blenderbim/blenderbim/bim/data/styles/default.css @@ -39,16 +39,16 @@ text { /* 2.5mm */ fill: black; stroke: none; font-family: 'OpenGost Type B TT'; .PredefinedType-BOUNDARY { fill: none; stroke: red; stroke-width: 1; stroke-dasharray: 12, 4, 3, 4, 3, 4; } .PredefinedType-BATTING { marker-start: url(#batting); stroke: none; } .PredefinedType-SEALANT { fill: url(#crosshatch1); stroke-width: 0.25; } -.PredefinedType-FILLAREA { fill: white; stroke: none; } +.PredefinedType-FILLAREA { fill: white; stroke: black; } .PredefinedType-BREAKLINE { fill: none; stroke: black; stroke-width: 0.25; marker-mid: url(#breakline-marker); } .PredefinedType-TEXT { fill: black; stroke: none; } path.PredefinedType-TEXTLEADER { marker-end: url(#leader-marker); } text.PredefinedType-TEXTLEADER { fill: black; stroke: none; } -text.title { /* 7mm */ fill: black; stroke: none; font-family: 'OpenGost Type B TT'; font-size: 11.55px; } -text.header { /* 5mm */ fill: black; stroke: none; font-family: 'OpenGost Type B TT'; font-size: 8.25px; } -text.large { /* 3.5mm */ fill: black; stroke: none; font-family: 'OpenGost Type B TT'; font-size: 5.78px; } -text.regular { /* 2.5mm */ fill: black; stroke: none; font-family: 'OpenGost Type B TT'; font-size: 4.13px; } -text.small { /* 1.8mm */ fill: black; stroke: none; font-family: 'OpenGost Type B TT'; font-size: 2.97px; } +text.title { /* 7mm */ font-size: 11.55px; } +text.header { /* 5mm */ font-size: 8.25px; } +text.large { /* 3.5mm */ font-size: 5.78px; } +text.regular { /* 2.5mm */ font-size: 4.13px; } +text.small { /* 1.8mm */ font-size: 2.97px; } .material-blank { fill: white; } .material-diagonal1 { fill: url(#diagonal1); } .material-diagonal2 { fill: url(#diagonal2); } diff --git a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py index 3a1810d5c1..ae1d1d64ae 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py @@ -31,6 +31,7 @@ import ifcopenshell.util.representation import blenderbim.tool as tool import blenderbim.bim.module.drawing.helper as helper import blenderbim.bim.module.drawing.annotation as annotation +from math import pi from mathutils import Vector from mathutils import geometry from blenderbim.bim.ifc import IfcStore @@ -290,16 +291,22 @@ class SvgWriter: # from Blender. In the future, it should probably come from IFC. if not isinstance(obj.data, bpy.types.Mesh): return + classes = self.get_attribute_classes(obj) if len(obj.data.polygons) == 0: self.draw_edge_annotation(obj, classes) return + + bm = bmesh.new() + bm.from_mesh(obj.data) + bmesh.ops.dissolve_limit(bm, angle_limit=pi / 180 * 1, verts=bm.verts, edges=bm.edges) + bm.faces.ensure_lookup_table() + x_offset = self.raw_width / 2 y_offset = self.raw_height / 2 matrix_world = obj.matrix_world - for polygon in obj.data.polygons: - points = [obj.data.vertices[v] for v in polygon.vertices] - projected_points = [self.project_point_onto_camera(matrix_world @ p.co.xyz) for p in points] + for face in bm.faces: + projected_points = [self.project_point_onto_camera(matrix_world @ p.co.xyz) for p in face.verts] projected_points.append(projected_points[0]) d = " ".join( [