diff --git a/src/blenderbim/blenderbim/bim/data/assets/symbols.svg b/src/blenderbim/blenderbim/bim/data/assets/symbols.svg index a657f279c0..efcf0ddd77 100644 --- a/src/blenderbim/blenderbim/bim/data/assets/symbols.svg +++ b/src/blenderbim/blenderbim/bim/data/assets/symbols.svg @@ -41,4 +41,17 @@ + + + + + + + + + + + + + diff --git a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py index d88375283b..9248017edb 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py @@ -332,9 +332,10 @@ class SvgWriter: return classes = self.get_attribute_classes(obj) - if len(obj.data.polygons) == 0: - self.draw_edge_annotation(obj, classes) - return + if len(obj.data.vertices) and not len(obj.data.edges): + return self.draw_point_annotation(obj, classes) + elif len(obj.data.polygons) == 0: + return self.draw_edge_annotation(obj, classes) bm = bmesh.new() bm.from_mesh(obj.data) @@ -837,6 +838,26 @@ class SvgWriter: self.svg.add(tag) line_number += len(tag.elements) + def draw_point_annotation(self, obj, classes): + x_offset = self.raw_width / 2 + y_offset = self.raw_height / 2 + + matrix_world = obj.matrix_world + projected_points = [self.project_point_onto_camera(matrix_world @ v.co) for v in obj.data.vertices] + + element = tool.Ifc.get_entity(obj) + svg_id = str(ifcopenshell.util.element.get_predefined_type(element)) + + # EPset_AnnotationSurveyArea is not standard! See bSI-4.3 proposal #660. + point_type = ifcopenshell.util.element.get_pset(element, "EPset_AnnotationSurveyArea", "PointType") + if point_type: + svg_id += f"-{point_type}" + + for symbol_position in projected_points: + symbol_position = Vector(((x_offset + symbol_position.x), (y_offset - symbol_position.y))) + symbol_position_svg = symbol_position * self.svg_scale + self.svg.add(self.svg.use(f"#{svg_id}", insert=symbol_position_svg)) + def draw_break_annotations(self, obj): x_offset = self.raw_width / 2 y_offset = self.raw_height / 2