Auto color change: Fixed some cases:

* first layer is a little bit less than all another (like for elephant foot compensation)
* ignore small changes of the layer area
This commit is contained in:
YuSanka 2021-07-30 11:15:38 +02:00
parent 5aff44debe
commit 0bb5c2ef88
2 changed files with 12 additions and 1 deletions

View file

@ -2057,6 +2057,10 @@ void Control::auto_color_change()
break; break;
if (prev_area - cur_area > delta_area) { if (prev_area - cur_area > delta_area) {
// Check percent of the area decrease.
// Ignore it, if this value is less than 10%
if (cur_area / prev_area > 0.9)
continue;
int tick = get_tick_from_value(layer->print_z); int tick = get_tick_from_value(layer->print_z);
if (tick >= 0 && !m_ticks.has_tick(tick)) { if (tick >= 0 && !m_ticks.has_tick(tick)) {
if (m_mode == SingleExtruder) { if (m_mode == SingleExtruder) {

View file

@ -713,9 +713,16 @@ void Preview::update_layers_slider(const std::vector<double>& layers_z, bool kee
int i; int i;
for (i = 1; i < int(0.3 * num_layers); ++ i) { for (i = 1; i < int(0.3 * num_layers); ++ i) {
double cur_area = area(object->get_layer(i)->lslices); double cur_area = area(object->get_layer(i)->lslices);
if (cur_area != bottom_area && fabs(cur_area - bottom_area) > scale_(scale_(1))) if (cur_area != bottom_area && fabs(cur_area - bottom_area) > scale_(scale_(1))) {
// but due to the elephant foot compensation, the first layer may be slightly smaller than the others
if (i == 1 && fabs(cur_area - bottom_area) / bottom_area < 0.1) {
// So, let process this case and use second layer as a bottom
bottom_area = cur_area;
continue;
}
break; break;
} }
}
if (i < int(0.3 * num_layers)) if (i < int(0.3 * num_layers))
continue; continue;