#1153 svg subtraction settings

This commit is contained in:
Thomas Krijnen
2021-11-02 08:57:00 +01:00
parent fc424ebd6b
commit be9ef33932
2 changed files with 29 additions and 1 deletions
+12 -1
View File
@@ -926,7 +926,18 @@ void SvgSerializer::write(const geometry_data& data) {
TopoDS_Shape* compound_to_hlr = &compound_to_use;
TopoDS_Shape subtracted_shape;
if (any_in_front && any_behind && data.product->declaration().is("IfcSlab") && is_floor_plan_) {
bool should_subtract = false;
if (subtraction_settings_ == ON_SLABS_AT_FLOORPLANS) {
should_subtract = data.product->declaration().is("IfcSlab") && is_floor_plan_;
} else if (subtraction_settings_ == ON_SLABS_AND_WALLS) {
should_subtract = data.product->declaration().is("IfcSlab") || data.product->declaration().is("IfcWall");
} else if (subtraction_settings_ == ALWAYS) {
should_subtract = true;
}
if (any_in_front && any_behind && should_subtract) {
// This is currently only for slanted roof slabs on floor plans
bool should_cut = false;
TopExp_Explorer exp(compound_to_use, TopAbs_FACE);
+17
View File
@@ -123,6 +123,12 @@ struct drawing_meta {
std::array<std::array<double, 3>, 3> matrix_3;
};
enum subtract_before_project {
ON_SLABS_AT_FLOORPLANS,
ON_SLABS_AND_WALLS,
ALWAYS
};
typedef boost::variant<
boost::blank,
Handle(HLRBRep_Algo),
@@ -182,6 +188,8 @@ protected:
void draw_hlr(const gp_Pln& pln, const drawing_key& drawing_name);
subtract_before_project subtraction_settings_;
public:
SvgSerializer(const stream_or_filename& out_filename, const SerializerSettings& settings)
: WriteOnlyGeometrySerializer(settings)
@@ -210,6 +218,7 @@ public:
, ycoords_begin(0)
, radii_begin(0)
, namespace_prefix_("data-")
, subtraction_settings_(ON_SLABS_AT_FLOORPLANS)
{}
void addXCoordinate(const boost::shared_ptr<util::string_buffer::float_item>& fi) { xcoords.push_back(fi); }
void addYCoordinate(const boost::shared_ptr<util::string_buffer::float_item>& fi) { ycoords.push_back(fi); }
@@ -309,6 +318,14 @@ public:
deferred_section_data_->push_back(vertical_section{ gp_Pln(gp_Ax3(pos, dir, ref)), name, include_projection });
}
void setSubtractionSettings(subtract_before_project sbp) {
subtraction_settings_ = sbp;
}
subtract_before_project getSubtractionSettings() const {
return subtraction_settings_;
}
protected:
std::string writeMetadata(const drawing_meta& m);
};