SLA support points - minor adjustments
This commit is contained in:
parent
24a0fdb844
commit
fab3025107
@ -111,8 +111,11 @@ void SLAAutoSupports::process(const std::vector<ExPolygons>& slices, const std::
|
|||||||
m_structures_new.back().structures_below.push_back(&s);
|
m_structures_new.back().structures_below.push_back(&s);
|
||||||
|
|
||||||
coord_t centroids_dist = (bottom->contour.centroid() - polygon.contour.centroid()).norm();
|
coord_t centroids_dist = (bottom->contour.centroid() - polygon.contour.centroid()).norm();
|
||||||
float mult = std::min(1.f, 1.f - std::min(1.f, (1600.f * layer_height) * (float)(centroids_dist * centroids_dist) / (float)bottom->area()));
|
|
||||||
s.supports_force *= mult;
|
// Penalization resulting from centroid offset:
|
||||||
|
s.supports_force *= std::min(1.f, 1.f - std::min(1.f, (1600.f * layer_height) * (float)(centroids_dist * centroids_dist) / (float)bottom->area()));
|
||||||
|
|
||||||
|
// Penalization resulting from increasing polygon area:
|
||||||
s.supports_force *= std::min(1.f, 20.f * ((float)bottom->area() / (float)polygon.area()));
|
s.supports_force *= std::min(1.f, 20.f * ((float)bottom->area() / (float)polygon.area()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -165,10 +168,10 @@ void SLAAutoSupports::process(const std::vector<ExPolygons>& slices, const std::
|
|||||||
}
|
}
|
||||||
|
|
||||||
e = diff_ex(ExPolygons{*s.polygon}, e);
|
e = diff_ex(ExPolygons{*s.polygon}, e);
|
||||||
|
|
||||||
|
// Penalization resulting from large diff from the last layer:
|
||||||
s.supports_force /= std::max(1., (layer_height / 0.3f) * (e_area / (s.polygon->area()*SCALING_FACTOR*SCALING_FACTOR)));
|
s.supports_force /= std::max(1., (layer_height / 0.3f) * (e_area / (s.polygon->area()*SCALING_FACTOR*SCALING_FACTOR)));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ( (s.polygon->area() * pow(SCALING_FACTOR, 2)) * m_config.tear_pressure > s.supports_force) {
|
if ( (s.polygon->area() * pow(SCALING_FACTOR, 2)) * m_config.tear_pressure > s.supports_force) {
|
||||||
ExPolygons::iterator largest_it = std::max_element(e.begin(), e.end(), [](const ExPolygon& a, const ExPolygon& b) { return a.area() < b.area(); });
|
ExPolygons::iterator largest_it = std::max_element(e.begin(), e.end(), [](const ExPolygon& a, const ExPolygon& b) { return a.area() < b.area(); });
|
||||||
if (!e.empty())
|
if (!e.empty())
|
||||||
@ -215,7 +218,7 @@ void SLAAutoSupports::uniformly_cover(const ExPolygon& island, Structure& struct
|
|||||||
|
|
||||||
std::vector<Vec3d> island_new_points;
|
std::vector<Vec3d> island_new_points;
|
||||||
const BoundingBox& bb = get_extents(island);
|
const BoundingBox& bb = get_extents(island);
|
||||||
const int refused_limit = 30;
|
const int refused_limit = 30 * ((float)bb.size()(0)*bb.size()(1) / (float)island.area());
|
||||||
int refused_points = 0;
|
int refused_points = 0;
|
||||||
while (refused_points < refused_limit) {
|
while (refused_points < refused_limit) {
|
||||||
Point out;
|
Point out;
|
||||||
|
@ -1941,6 +1941,7 @@ void GLGizmoSlaSupports::update_mesh()
|
|||||||
|
|
||||||
// we'll now reload Grabbers (selection might have changed):
|
// we'll now reload Grabbers (selection might have changed):
|
||||||
m_grabbers.clear();
|
m_grabbers.clear();
|
||||||
|
m_editing_mode_cache = m_model_object->sla_support_points;
|
||||||
|
|
||||||
for (const sla::SupportPoint& point : m_editing_mode_cache) {
|
for (const sla::SupportPoint& point : m_editing_mode_cache) {
|
||||||
m_grabbers.push_back(Grabber());
|
m_grabbers.push_back(Grabber());
|
||||||
@ -2044,7 +2045,7 @@ void GLGizmoSlaSupports::delete_current_grabber(bool delete_all)
|
|||||||
// wxGetApp().plater()->reslice();
|
// wxGetApp().plater()->reslice();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_parent.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS));
|
//m_parent.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS));
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGizmoSlaSupports::on_update(const UpdateData& data, const GLCanvas3D::Selection& selection)
|
void GLGizmoSlaSupports::on_update(const UpdateData& data, const GLCanvas3D::Selection& selection)
|
||||||
@ -2203,17 +2204,17 @@ RENDER_AGAIN:
|
|||||||
|
|
||||||
|
|
||||||
if (remove_all_points) {
|
if (remove_all_points) {
|
||||||
force_refresh = true;
|
force_refresh = false;
|
||||||
|
m_parent.reload_scene(true);
|
||||||
delete_current_grabber(true);
|
delete_current_grabber(true);
|
||||||
/*if (first_run) {
|
if (first_run) {
|
||||||
first_run = false;
|
first_run = false;
|
||||||
goto RENDER_AGAIN;
|
goto RENDER_AGAIN;
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (force_refresh) {
|
if (force_refresh)
|
||||||
m_parent.reload_scene(true);
|
m_parent.reload_scene(true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif // ENABLE_IMGUI
|
#endif // ENABLE_IMGUI
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user