Skip to content

Commit

Permalink
Fix Slider refresh data
Browse files Browse the repository at this point in the history
was sending gcode data when refreshing for a preview.
  • Loading branch information
supermerill committed Jun 5, 2024
1 parent 6c8a446 commit b9697d4
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 40 deletions.
71 changes: 32 additions & 39 deletions src/slic3r/GUI/GUI_Preview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -686,7 +686,7 @@ void Preview::check_layers_slider_values(std::vector<CustomGCode::Item>& ticks_f
m_schedule_background_process();
}

void Preview::update_layers_slider(const std::vector<double>& layers_z, bool keep_z_range)
void Preview::update_layers_slider(const std::vector<double>& layers_z, bool show_gcode_data, bool keep_z_range)
{
//lock rendering while updating
{
Expand All @@ -708,7 +708,7 @@ void Preview::update_layers_slider(const std::vector<double>& layers_z, bool kee

// Detect and set manipulation mode for double slider
update_layers_slider_mode();

Plater* plater = wxGetApp().plater();
CustomGCode::Info ticks_info_from_model = plater->model().custom_gcode_per_print_z;
if (wxGetApp().is_editor())
Expand Down Expand Up @@ -742,46 +742,36 @@ void Preview::update_layers_slider(const std::vector<double>& layers_z, bool kee
}
m_layers_slider->SetSelectionSpan(idx_low, idx_high);
m_layers_slider->SetTicksValues(ticks_info_from_model);

bool sla_print_technology = plater->printer_technology() == ptSLA;

bool sequential_print = wxGetApp().preset_bundle->fff_prints.get_edited_preset().config.opt_bool("complete_objects");
bool sla_print_technology = plater->printer_technology() == ptSLA;
m_layers_slider->SetDrawMode(sla_print_technology, sequential_print);
if (sla_print_technology)
m_layers_slider->SetLayersTimes(plater->sla_print().print_statistics().layers_times);
else {
if (plater->fff_print().print_statistics().is_computing_gcode || !plater->fff_print().finished()) {
//do not fetch uncomplete data
m_layers_slider->SetLayersTimes({}, 0);
if (show_gcode_data) {
if (sla_print_technology) {
m_layers_slider->SetLayersTimes(plater->sla_print().print_statistics().layers_times);
} else {
auto print_mode_stat = m_gcode_result->print_statistics.modes.front();
m_layers_slider->SetLayersTimes(print_mode_stat.layers_times, print_mode_stat.time);
if (plater->fff_print().print_statistics().is_computing_gcode || !plater->fff_print().finished()) {
// do not fetch uncomplete data
m_layers_slider->SetLayersTimes({}, 0);
} else {
auto print_mode_stat = m_gcode_result->print_statistics.modes.front();
m_layers_slider->SetLayersTimes(print_mode_stat.layers_times, print_mode_stat.time);
}
}
}
// create area array
//area not computed for sla_print_technology //TODO
if (!sla_print_technology){
if (plater->fff_print().print_statistics().is_computing_gcode || !plater->fff_print().finished()) {
//do not fetch uncomplete data
m_layers_slider->SetLayersAreas({});
} else {
const std::vector<std::pair<coordf_t, float>> &layerz_to_area = plater->fff_print().print_statistics().layer_area_stats;
std::vector<float> areas;
for(auto [z, area] : layerz_to_area)
areas.push_back(area);
m_layers_slider->SetLayersAreas(areas);
assert(areas.size() == m_gcode_result->print_statistics.modes.front().layers_times.size());
//auto objects = plater->fff_print().objects();
//for (auto object : objects) {
// for (auto layer : object->layers()) {
// assert(layer->print_z > 100);
// coord_t layer_z = 100*(coord_t(layer->print_z + 50)/100);
// int32_t area = layerz_to_area[layer_z];
// for (auto poly : layer->lslices) {
// area += poly.area();
// }
// layerz_to_area[layer_z] = area;
// }
//}
// area not computed for sla_print_technology //TODO
if (!sla_print_technology) {
if (plater->fff_print().print_statistics().is_computing_gcode || !plater->fff_print().finished()) {
// do not fetch uncomplete data
m_layers_slider->SetLayersAreas({});
} else {
const std::vector<std::pair<coordf_t, float>> &layerz_to_area =
plater->fff_print().print_statistics().layer_area_stats;
std::vector<float> areas;
for (auto [z, area] : layerz_to_area) areas.push_back(area);
m_layers_slider->SetLayersAreas(areas);
assert(areas.size() == m_gcode_result->print_statistics.modes.front().layers_times.size());
}
}
}

Expand Down Expand Up @@ -1066,6 +1056,7 @@ void Preview::load_print_as_fff(bool keep_z_range)
m_canvas->set_items_show(true, true);

m_canvas->set_selected_extruder(0);
bool gcode_not_extrusions = false;
if (current_force_state == ForceState::ForceGcode || (gcode_preview_data_valid && current_force_state != ForceState::ForceExtrusions)) {
// Load the real G-code preview.
if (current_force_state == ForceState::NoForce)
Expand All @@ -1077,6 +1068,7 @@ void Preview::load_print_as_fff(bool keep_z_range)
Refresh();
zs = m_canvas->get_gcode_layers_zs();
m_loaded = true;
gcode_not_extrusions = true;
}
else if (wxGetApp().is_editor()) {
// Load the initial preview based on slices, not the final G-code.
Expand All @@ -1087,6 +1079,7 @@ void Preview::load_print_as_fff(bool keep_z_range)
m_left_sizer->Layout();
Refresh();
zs = m_canvas->get_volumes_print_zs(true);
gcode_not_extrusions = false;
}

if (!zs.empty() && !m_keep_current_preview_type) {
Expand Down Expand Up @@ -1116,7 +1109,7 @@ void Preview::load_print_as_fff(bool keep_z_range)
hide_layers_slider();
m_canvas_widget->Refresh();
} else {
update_layers_slider(zs, keep_z_range);
update_layers_slider(zs, gcode_not_extrusions, keep_z_range);
}
}
}
Expand Down Expand Up @@ -1163,7 +1156,7 @@ void Preview::load_print_as_sla()
Refresh();

if (n_layers > 0)
update_layers_slider(zs);
update_layers_slider(zs, true);

m_loaded = true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/slic3r/GUI/GUI_Preview.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ Preview(wxWindow* parent, Bed3D& bed, Model* model, DynamicPrintConfig* config,
void check_layers_slider_values(std::vector<CustomGCode::Item>& ticks_from_model,
const std::vector<double>& layers_z);
void reset_layers_slider();
void update_layers_slider(const std::vector<double>& layers_z, bool keep_z_range = false);
void update_layers_slider(const std::vector<double>& layers_z, bool show_gcode_data = false, bool keep_z_range = false);
void update_layers_slider_mode();
// update vertical DoubleSlider after keyDown in canvas
void update_layers_slider_from_canvas(wxKeyEvent& event);
Expand Down

0 comments on commit b9697d4

Please sign in to comment.