diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 2869f11c83..8b3b375131 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -150,9 +150,20 @@ void BackgroundSlicingProcess::process_fff() if (! m_export_path.empty()) { wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id)); +#if ENABLE_GCODE_WINDOW + // let the gcode window to unmap the temporary .gcode file (m_temp_output_path) + // because the scripts may want to modify it + GUI::wxGetApp().plater()->stop_mapping_gcode_window(); +#endif // ENABLE_GCODE_WINDOW + m_print->set_status(95, _utf8(L("Running post-processing scripts"))); run_post_process_scripts(m_temp_output_path, m_fff_print->full_print_config()); - + +#if ENABLE_GCODE_WINDOW + // let the gcode window to reload and remap the temporary .gcode file (m_temp_output_path) + GUI::wxGetApp().plater()->start_mapping_gcode_window(); +#endif // ENABLE_GCODE_WINDOW + //FIXME localize the messages // Perform the final post-processing of the export path by applying the print statistics over the file name. std::string export_path = m_fff_print->print_statistics().finalize_output_path(m_export_path); diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 2ced8e6015..b18a9a0e08 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -280,6 +280,9 @@ void GCodeViewer::SequentialView::GCodeWindow::load_gcode() if (m_filename.empty()) return; + if (m_file.is_open()) + return; + try { // generate mapping for accessing data in file by line number @@ -1124,6 +1127,18 @@ void GCodeViewer::export_toolpaths_to_obj(const char* filename) const fclose(fp); } +#if ENABLE_GCODE_WINDOW +void GCodeViewer::start_mapping_gcode_window() +{ + m_sequential_view.gcode_window.load_gcode(); +} + +void GCodeViewer::stop_mapping_gcode_window() +{ + m_sequential_view.gcode_window.stop_mapping_file(); +} +#endif // ENABLE_GCODE_WINDOW + void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) { // max index buffer size, in bytes diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index d5c793e62c..bfdbfa12f6 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -561,7 +561,6 @@ public: void render(float top, float bottom, uint64_t curr_line_id) const; - private: void stop_mapping_file(); }; #endif // ENABLE_GCODE_WINDOW @@ -681,6 +680,8 @@ public: void export_toolpaths_to_obj(const char* filename) const; #if ENABLE_GCODE_WINDOW + void start_mapping_gcode_window(); + void stop_mapping_gcode_window(); void toggle_gcode_window_visibility() { m_sequential_view.gcode_window.toggle_visibility(); } #endif // ENABLE_GCODE_WINDOW diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 88a3bf6fa0..e8e4caed90 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1124,6 +1124,18 @@ int GLCanvas3D::check_volumes_outside_state() const return (int)state; } +#if ENABLE_GCODE_WINDOW +void GLCanvas3D::start_mapping_gcode_window() +{ + m_gcode_viewer.start_mapping_gcode_window(); +} + +void GLCanvas3D::stop_mapping_gcode_window() +{ + m_gcode_viewer.stop_mapping_gcode_window(); +} +#endif // ENABLE_GCODE_WINDOW + void GLCanvas3D::toggle_sla_auxiliaries_visibility(bool visible, const ModelObject* mo, int instance_idx) { m_render_sla_auxiliaries = visible; diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index e684281344..94630b0f74 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -547,6 +547,11 @@ public: const GCodeViewer::SequentialView& get_gcode_sequential_view() const { return m_gcode_viewer.get_sequential_view(); } void update_gcode_sequential_view_current(unsigned int first, unsigned int last) { m_gcode_viewer.update_sequential_view_current(first, last); } +#if ENABLE_GCODE_WINDOW + void start_mapping_gcode_window(); + void stop_mapping_gcode_window(); +#endif // ENABLE_GCODE_WINDOW + void toggle_sla_auxiliaries_visibility(bool visible, const ModelObject* mo = nullptr, int instance_idx = -1); void toggle_model_objects_visibility(bool visible, const ModelObject* mo = nullptr, int instance_idx = -1); void update_instance_printable_state_for_object(size_t obj_idx); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index c09dc512cc..ca87e244b5 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5946,6 +5946,18 @@ BoundingBoxf Plater::bed_shape_bb() const return p->bed_shape_bb(); } +#if ENABLE_GCODE_WINDOW +void Plater::start_mapping_gcode_window() +{ + p->preview->get_canvas3d()->start_mapping_gcode_window(); +} + +void Plater::stop_mapping_gcode_window() +{ + p->preview->get_canvas3d()->stop_mapping_gcode_window(); +} +#endif // ENABLE_GCODE_WINDOW + void Plater::arrange() { p->m_ui_jobs.arrange(); diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index e6a5160f32..9fc424e830 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -276,6 +276,11 @@ public: GLCanvas3D* get_current_canvas3D(); BoundingBoxf bed_shape_bb() const; +#if ENABLE_GCODE_WINDOW + void start_mapping_gcode_window(); + void stop_mapping_gcode_window(); +#endif // ENABLE_GCODE_WINDOW + void arrange(); void find_new_position(const ModelInstancePtrs &instances);