Fix remove_bottom_points function

This commit is contained in:
tamasmeszaros 2020-06-02 17:28:46 +02:00
parent f202d11e35
commit 38239f09e3
4 changed files with 18 additions and 22 deletions

View file

@ -29,13 +29,13 @@ struct SupportPoint
float pos_y, float pos_y,
float pos_z, float pos_z,
float head_radius, float head_radius,
bool new_island) bool new_island = false)
: pos(pos_x, pos_y, pos_z) : pos(pos_x, pos_y, pos_z)
, head_front_radius(head_radius) , head_front_radius(head_radius)
, is_new_island(new_island) , is_new_island(new_island)
{} {}
SupportPoint(Vec3f position, float head_radius, bool new_island) SupportPoint(Vec3f position, float head_radius, bool new_island = false)
: pos(position) : pos(position)
, head_front_radius(head_radius) , head_front_radius(head_radius)
, is_new_island(new_island) , is_new_island(new_island)

View file

@ -523,15 +523,12 @@ void SupportPointGenerator::uniformly_cover(const ExPolygons& islands, Structure
} }
} }
void remove_bottom_points(std::vector<SupportPoint> &pts, double gnd_lvl, double tolerance) void remove_bottom_points(std::vector<SupportPoint> &pts, float lvl)
{ {
// get iterator to the reorganized vector end // get iterator to the reorganized vector end
auto endit = auto endit = std::remove_if(pts.begin(), pts.end(), [lvl]
std::remove_if(pts.begin(), pts.end(), (const sla::SupportPoint &sp) {
[tolerance, gnd_lvl](const sla::SupportPoint &sp) { return sp.pos.z() <= lvl;
double diff = std::abs(gnd_lvl -
double(sp.pos(Z)));
return diff <= tolerance;
}); });
// erase all elements after the new end // erase all elements after the new end

View file

@ -214,7 +214,7 @@ private:
std::mt19937 m_rng; std::mt19937 m_rng;
}; };
void remove_bottom_points(std::vector<SupportPoint> &pts, double gnd_lvl, double tolerance); void remove_bottom_points(std::vector<SupportPoint> &pts, float lvl);
}} // namespace Slic3r::sla }} // namespace Slic3r::sla

View file

@ -360,18 +360,6 @@ void SLAPrint::Steps::support_points(SLAPrintObject &po)
// removed them on purpose. No calculation will be done. // removed them on purpose. No calculation will be done.
po.m_supportdata->pts = po.transformed_support_points(); po.m_supportdata->pts = po.transformed_support_points();
} }
// If the zero elevation mode is engaged, we have to filter out all the
// points that are on the bottom of the object
if (is_zero_elevation(po.config())) {
double tolerance = po.config().pad_enable.getBool() ?
po.m_config.pad_wall_thickness.getFloat() :
po.m_config.support_base_height.getFloat();
remove_bottom_points(po.m_supportdata->pts,
po.m_supportdata->emesh.ground_level(),
tolerance);
}
} }
void SLAPrint::Steps::support_tree(SLAPrintObject &po) void SLAPrint::Steps::support_tree(SLAPrintObject &po)
@ -383,6 +371,17 @@ void SLAPrint::Steps::support_tree(SLAPrintObject &po)
if (pcfg.embed_object) if (pcfg.embed_object)
po.m_supportdata->emesh.ground_level_offset(pcfg.wall_thickness_mm); po.m_supportdata->emesh.ground_level_offset(pcfg.wall_thickness_mm);
// If the zero elevation mode is engaged, we have to filter out all the
// points that are on the bottom of the object
if (is_zero_elevation(po.config())) {
double discard = po.config().pad_enable.getBool() ?
po.m_config.pad_wall_height.getFloat() :
po.m_config.support_base_height.getFloat() ;
remove_bottom_points(po.m_supportdata->pts,
float(po.m_supportdata->emesh.ground_level() + discard));
}
po.m_supportdata->cfg = make_support_cfg(po.m_config); po.m_supportdata->cfg = make_support_cfg(po.m_config);
// po.m_supportdata->emesh.load_holes(po.transformed_drainhole_points()); // po.m_supportdata->emesh.load_holes(po.transformed_drainhole_points());