Fix remove_bottom_points function
This commit is contained in:
parent
f202d11e35
commit
38239f09e3
4 changed files with 18 additions and 22 deletions
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue