From 23d096be0790fbb261e4aa78fb2b248d0caca801 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sat, 29 Jul 2023 10:07:33 +0800 Subject: [PATCH] SVG serialization UnifyInputs option --- src/serializers/SvgSerializer.cpp | 10 +++++++++- src/serializers/SvgSerializer.h | 11 +++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/serializers/SvgSerializer.cpp b/src/serializers/SvgSerializer.cpp index 17e81b66ef..18a2aa72ca 100644 --- a/src/serializers/SvgSerializer.cpp +++ b/src/serializers/SvgSerializer.cpp @@ -81,6 +81,7 @@ #include "../ifcparse/IfcGlobalId.h" #include "../ifcgeom/kernels/opencascade/base_utils.h" +#include "../ifcgeom/kernels/opencascade/boolean_utils.h" #include "../ifcgeom/kernels/opencascade/OpenCascadeConversionResult.h" #include @@ -1191,7 +1192,14 @@ void SvgSerializer::write(const geometry_data& data) { // Iterate over components of compound to have better chance of matching section edges to closed wires for (; it.More(); it.Next(), ++dash_it) { - const TopoDS_Shape& subshape = it.Value(); + const TopoDS_Shape& subshape_before_unification = it.Value(); + TopoDS_Shape subshape; + + if (unify_inputs_) { + subshape = IfcGeom::util::unify(subshape_before_unification, 1. - 6); + } else { + subshape = subshape_before_unification; + } Bnd_Box bb; try { diff --git a/src/serializers/SvgSerializer.h b/src/serializers/SvgSerializer.h index 1d2ac91d2e..e0e90fc910 100644 --- a/src/serializers/SvgSerializer.h +++ b/src/serializers/SvgSerializer.h @@ -43,6 +43,7 @@ #include #include #include +#include #if OCC_VERSION_HEX >= 0x70300 #include @@ -517,6 +518,7 @@ protected: bool use_namespace_, use_hlr_poly_, use_prefiltering_, always_project_, polygonal_; bool emit_building_storeys_; bool no_css_; + bool unify_inputs_; int profile_threshold_; @@ -568,6 +570,7 @@ public: , polygonal_(false) , emit_building_storeys_(true) , no_css_(false) + , unify_inputs_(false) , profile_threshold_(-1) , file(0) , storey_(0) @@ -664,6 +667,14 @@ public: no_css_ = b; } + void setUnifyInputs(bool b) { + unify_inputs_ = b; + } + + bool getUnifyInputs() const { + return unify_inputs_; + } + void setScale(double s) { scale_ = s; } void setDrawingCenter(double x, double y) { center_x_ = x; center_y_ = y;