2018-09-17 10:15:11 +00:00
|
|
|
#ifndef slic3r_Plater_hpp_
|
|
|
|
#define slic3r_Plater_hpp_
|
|
|
|
|
|
|
|
#include <memory>
|
2018-10-08 17:14:55 +00:00
|
|
|
#include <vector>
|
2018-10-04 09:12:55 +00:00
|
|
|
#include <boost/filesystem/path.hpp>
|
2018-09-17 10:15:11 +00:00
|
|
|
|
|
|
|
#include <wx/panel.h>
|
2018-10-09 10:41:05 +00:00
|
|
|
#include <wx/bmpcbox.h>
|
2018-09-17 10:15:11 +00:00
|
|
|
|
|
|
|
#include "Preset.hpp"
|
2020-04-23 16:47:51 +00:00
|
|
|
#include "Selection.hpp"
|
2018-09-17 10:15:11 +00:00
|
|
|
|
2020-02-28 13:29:53 +00:00
|
|
|
#include "libslic3r/BoundingBox.hpp"
|
2020-04-23 16:56:09 +00:00
|
|
|
#include "Jobs/Job.hpp"
|
2020-01-31 15:50:11 +00:00
|
|
|
#include "wxExtensions.hpp"
|
2020-04-03 08:01:23 +00:00
|
|
|
#include "Search.hpp"
|
2019-02-19 14:15:27 +00:00
|
|
|
|
2018-10-04 09:12:55 +00:00
|
|
|
class wxButton;
|
2019-04-24 23:45:00 +00:00
|
|
|
class ScalableButton;
|
2018-11-09 17:39:07 +00:00
|
|
|
class wxScrolledWindow;
|
2018-11-26 13:41:58 +00:00
|
|
|
class wxString;
|
2018-10-04 09:12:55 +00:00
|
|
|
|
2018-09-17 10:15:11 +00:00
|
|
|
namespace Slic3r {
|
2018-10-04 14:43:10 +00:00
|
|
|
|
|
|
|
class Model;
|
2019-02-21 10:40:56 +00:00
|
|
|
class ModelObject;
|
2018-10-11 11:22:36 +00:00
|
|
|
class Print;
|
2018-11-12 16:35:57 +00:00
|
|
|
class SLAPrint;
|
2020-01-23 10:22:06 +00:00
|
|
|
enum SLAPrintObjectStep : unsigned int;
|
2018-11-12 16:35:57 +00:00
|
|
|
|
2019-07-19 09:12:38 +00:00
|
|
|
namespace UndoRedo {
|
2020-02-28 13:29:53 +00:00
|
|
|
class Stack;
|
|
|
|
struct Snapshot;
|
|
|
|
}
|
2019-07-19 09:12:38 +00:00
|
|
|
|
2018-09-17 10:15:11 +00:00
|
|
|
namespace GUI {
|
|
|
|
|
|
|
|
class MainFrame;
|
2018-10-03 13:14:52 +00:00
|
|
|
class ConfigOptionsGroup;
|
2018-10-04 14:43:10 +00:00
|
|
|
class ObjectManipulation;
|
2018-11-09 17:39:07 +00:00
|
|
|
class ObjectSettings;
|
2019-05-28 14:38:04 +00:00
|
|
|
class ObjectLayers;
|
2018-10-05 21:29:15 +00:00
|
|
|
class ObjectList;
|
2018-11-23 11:47:32 +00:00
|
|
|
class GLCanvas3D;
|
2019-09-27 12:52:19 +00:00
|
|
|
class Mouse3DController;
|
2020-02-28 13:29:53 +00:00
|
|
|
struct Camera;
|
2020-03-25 13:41:47 +00:00
|
|
|
class Bed3D;
|
|
|
|
class GLToolbar;
|
2018-10-03 13:14:52 +00:00
|
|
|
|
|
|
|
using t_optgroups = std::vector <std::shared_ptr<ConfigOptionsGroup>>;
|
2018-09-17 10:15:11 +00:00
|
|
|
|
2018-10-04 09:12:55 +00:00
|
|
|
class Plater;
|
2019-03-01 10:00:34 +00:00
|
|
|
enum class ActionButtonType : int;
|
2018-10-04 09:12:55 +00:00
|
|
|
|
2020-01-31 15:50:11 +00:00
|
|
|
class PresetComboBox : public PresetBitmapComboBox
|
2018-10-09 10:41:05 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
PresetComboBox(wxWindow *parent, Preset::Type preset_type);
|
|
|
|
~PresetComboBox();
|
|
|
|
|
2019-04-24 23:45:00 +00:00
|
|
|
ScalableButton* edit_btn { nullptr };
|
2019-03-18 14:10:40 +00:00
|
|
|
|
2019-03-22 14:45:51 +00:00
|
|
|
enum LabelItemType {
|
2019-06-04 16:01:41 +00:00
|
|
|
LABEL_ITEM_MARKER = 0xffffff01,
|
|
|
|
LABEL_ITEM_WIZARD_PRINTERS,
|
|
|
|
LABEL_ITEM_WIZARD_FILAMENTS,
|
|
|
|
LABEL_ITEM_WIZARD_MATERIALS,
|
|
|
|
|
|
|
|
LABEL_ITEM_MAX,
|
2019-03-22 14:45:51 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
void set_label_marker(int item, LabelItemType label_item_type = LABEL_ITEM_MARKER);
|
2018-10-10 11:53:45 +00:00
|
|
|
void set_extruder_idx(const int extr_idx) { extruder_idx = extr_idx; }
|
|
|
|
int get_extruder_idx() const { return extruder_idx; }
|
2019-04-23 14:33:06 +00:00
|
|
|
int em_unit() const { return m_em_unit; }
|
2020-03-23 21:47:35 +00:00
|
|
|
void check_selection(int selection);
|
2018-10-09 10:41:05 +00:00
|
|
|
|
2019-04-24 23:45:00 +00:00
|
|
|
void msw_rescale();
|
2019-04-13 21:46:52 +00:00
|
|
|
|
2018-10-09 10:41:05 +00:00
|
|
|
private:
|
|
|
|
typedef std::size_t Marker;
|
|
|
|
|
|
|
|
Preset::Type preset_type;
|
|
|
|
int last_selected;
|
2018-10-10 11:53:45 +00:00
|
|
|
int extruder_idx = -1;
|
2019-04-23 14:33:06 +00:00
|
|
|
int m_em_unit;
|
2018-10-09 10:41:05 +00:00
|
|
|
};
|
|
|
|
|
2018-09-17 10:15:11 +00:00
|
|
|
class Sidebar : public wxPanel
|
|
|
|
{
|
2019-03-01 11:03:14 +00:00
|
|
|
ConfigOptionMode m_mode;
|
2018-09-17 10:15:11 +00:00
|
|
|
public:
|
2018-10-04 09:12:55 +00:00
|
|
|
Sidebar(Plater *parent);
|
2018-09-17 10:15:11 +00:00
|
|
|
Sidebar(Sidebar &&) = delete;
|
|
|
|
Sidebar(const Sidebar &) = delete;
|
|
|
|
Sidebar &operator=(Sidebar &&) = delete;
|
|
|
|
Sidebar &operator=(const Sidebar &) = delete;
|
|
|
|
~Sidebar();
|
|
|
|
|
2018-10-10 11:53:45 +00:00
|
|
|
void init_filament_combo(PresetComboBox **combo, const int extr_idx);
|
2019-09-06 15:46:55 +00:00
|
|
|
void remove_unused_filament_combos(const size_t current_extruder_count);
|
2019-04-10 07:56:32 +00:00
|
|
|
void update_all_preset_comboboxes();
|
2018-09-17 10:15:11 +00:00
|
|
|
void update_presets(Slic3r::Preset::Type preset_type);
|
2019-03-01 11:03:14 +00:00
|
|
|
void update_mode_sizer() const;
|
|
|
|
void update_reslice_btn_tooltip() const;
|
2019-04-24 23:45:00 +00:00
|
|
|
void msw_rescale();
|
2020-04-24 09:01:14 +00:00
|
|
|
void search();
|
2020-03-28 18:39:24 +00:00
|
|
|
void jump_to_option(size_t selected);
|
2018-10-03 13:14:52 +00:00
|
|
|
|
2018-10-09 10:41:05 +00:00
|
|
|
ObjectManipulation* obj_manipul();
|
2018-10-05 21:29:15 +00:00
|
|
|
ObjectList* obj_list();
|
2018-11-09 17:39:07 +00:00
|
|
|
ObjectSettings* obj_settings();
|
2019-05-28 14:38:04 +00:00
|
|
|
ObjectLayers* obj_layers();
|
2018-11-09 17:39:07 +00:00
|
|
|
wxScrolledWindow* scrolled_panel();
|
2019-03-13 12:13:18 +00:00
|
|
|
wxPanel* presets_panel();
|
2018-10-03 13:14:52 +00:00
|
|
|
|
2019-01-15 08:31:53 +00:00
|
|
|
ConfigOptionsGroup* og_freq_chng_params(const bool is_fff);
|
2018-10-03 13:14:52 +00:00
|
|
|
wxButton* get_wiping_dialog_button();
|
2019-09-06 15:46:55 +00:00
|
|
|
void update_objects_list_extruder_column(size_t extruders_count);
|
2018-11-13 11:19:56 +00:00
|
|
|
void show_info_sizer();
|
2018-10-31 11:26:57 +00:00
|
|
|
void show_sliced_info_sizer(const bool show);
|
2019-09-26 14:33:55 +00:00
|
|
|
void update_sliced_info_sizer();
|
2018-10-08 17:14:55 +00:00
|
|
|
void enable_buttons(bool enable);
|
2019-03-01 10:00:34 +00:00
|
|
|
void set_btn_label(const ActionButtonType btn_type, const wxString& label) const;
|
2019-04-24 17:03:05 +00:00
|
|
|
bool show_reslice(bool show) const;
|
|
|
|
bool show_export(bool show) const;
|
|
|
|
bool show_send(bool show) const;
|
2019-12-10 16:31:27 +00:00
|
|
|
bool show_disconnect(bool show)const;
|
2020-01-02 15:30:28 +00:00
|
|
|
bool show_export_removable(bool show) const;
|
2018-10-09 10:41:05 +00:00
|
|
|
bool is_multifilament();
|
2019-03-01 11:03:14 +00:00
|
|
|
void update_mode();
|
2020-03-16 11:49:39 +00:00
|
|
|
bool is_collapsed();
|
|
|
|
void collapse(bool collapse);
|
2020-04-13 15:55:38 +00:00
|
|
|
void update_searcher();
|
2020-04-29 17:10:13 +00:00
|
|
|
void update_ui_from_settings();
|
2018-10-04 14:43:10 +00:00
|
|
|
|
2020-03-28 18:39:24 +00:00
|
|
|
std::vector<PresetComboBox*>& combos_filament();
|
2020-04-13 15:55:38 +00:00
|
|
|
Search::OptionsSearcher& get_searcher();
|
2020-03-28 18:39:24 +00:00
|
|
|
std::string& get_search_line();
|
|
|
|
|
2018-09-17 10:15:11 +00:00
|
|
|
private:
|
|
|
|
struct priv;
|
|
|
|
std::unique_ptr<priv> p;
|
|
|
|
};
|
|
|
|
|
|
|
|
class Plater: public wxPanel
|
|
|
|
{
|
|
|
|
public:
|
2018-12-11 09:33:11 +00:00
|
|
|
using fs_path = boost::filesystem::path;
|
|
|
|
|
2018-09-17 10:15:11 +00:00
|
|
|
Plater(wxWindow *parent, MainFrame *main_frame);
|
|
|
|
Plater(Plater &&) = delete;
|
|
|
|
Plater(const Plater &) = delete;
|
|
|
|
Plater &operator=(Plater &&) = delete;
|
|
|
|
Plater &operator=(const Plater &) = delete;
|
|
|
|
~Plater();
|
|
|
|
|
|
|
|
Sidebar& sidebar();
|
2018-10-11 11:22:36 +00:00
|
|
|
Model& model();
|
2018-12-03 12:14:28 +00:00
|
|
|
const Print& fff_print() const;
|
|
|
|
Print& fff_print();
|
|
|
|
const SLAPrint& sla_print() const;
|
|
|
|
SLAPrint& sla_print();
|
2018-09-17 10:15:11 +00:00
|
|
|
|
2019-05-14 08:30:14 +00:00
|
|
|
void new_project();
|
2018-11-15 14:27:39 +00:00
|
|
|
void load_project();
|
2019-07-12 13:36:01 +00:00
|
|
|
void load_project(const wxString& filename);
|
2020-04-29 17:10:13 +00:00
|
|
|
void add_model(bool imperial_units = false);
|
2020-04-13 10:31:37 +00:00
|
|
|
void import_sl1_archive();
|
2018-11-16 08:26:41 +00:00
|
|
|
void extract_config_from_project();
|
2018-10-17 10:17:25 +00:00
|
|
|
|
2020-04-29 17:10:13 +00:00
|
|
|
std::vector<size_t> load_files(const std::vector<boost::filesystem::path>& input_files, bool load_model = true, bool load_config = true, bool imperial_units = false);
|
2019-01-09 09:43:17 +00:00
|
|
|
// To be called when providing a list of files to the GUI slic3r on command line.
|
2020-04-29 17:10:13 +00:00
|
|
|
std::vector<size_t> load_files(const std::vector<std::string>& input_files, bool load_model = true, bool load_config = true, bool imperial_units = false);
|
2018-09-17 10:15:11 +00:00
|
|
|
|
2018-11-21 12:32:24 +00:00
|
|
|
void update();
|
2019-05-13 16:58:56 +00:00
|
|
|
void stop_jobs();
|
2018-10-17 10:59:58 +00:00
|
|
|
void select_view(const std::string& direction);
|
2018-12-04 12:55:25 +00:00
|
|
|
void select_view_3D(const std::string& name);
|
2019-01-03 11:59:06 +00:00
|
|
|
|
2019-08-20 07:01:09 +00:00
|
|
|
bool is_preview_shown() const;
|
|
|
|
bool is_preview_loaded() const;
|
|
|
|
bool is_view3D_shown() const;
|
|
|
|
|
2020-02-04 13:42:26 +00:00
|
|
|
bool are_view3D_labels_shown() const;
|
|
|
|
void show_view3D_labels(bool show);
|
|
|
|
|
2020-03-16 11:49:39 +00:00
|
|
|
bool is_sidebar_collapsed() const;
|
2020-04-29 13:58:57 +00:00
|
|
|
void collapse_sidebar(bool show);
|
2020-03-16 11:49:39 +00:00
|
|
|
|
2020-03-13 14:09:07 +00:00
|
|
|
#if ENABLE_SLOPE_RENDERING
|
|
|
|
bool is_view3D_slope_shown() const;
|
|
|
|
void show_view3D_slope(bool show);
|
|
|
|
|
|
|
|
bool is_view3D_layers_editing_enabled() const;
|
|
|
|
#endif // ENABLE_SLOPE_RENDERING
|
|
|
|
|
2018-12-04 10:14:39 +00:00
|
|
|
// Called after the Preferences dialog is closed and the program settings are saved.
|
|
|
|
// Update the UI based on the current preferences.
|
|
|
|
void update_ui_from_settings();
|
2018-10-17 10:59:58 +00:00
|
|
|
|
2018-11-21 14:28:35 +00:00
|
|
|
void select_all();
|
2019-05-14 09:57:39 +00:00
|
|
|
void deselect_all();
|
2018-10-04 09:12:55 +00:00
|
|
|
void remove(size_t obj_idx);
|
2018-11-22 10:31:53 +00:00
|
|
|
void reset();
|
2019-05-02 11:52:13 +00:00
|
|
|
void reset_with_confirm();
|
2018-11-13 13:17:35 +00:00
|
|
|
void delete_object_from_model(size_t obj_idx);
|
2018-10-04 09:12:55 +00:00
|
|
|
void remove_selected();
|
2018-10-18 13:09:41 +00:00
|
|
|
void increase_instances(size_t num = 1);
|
|
|
|
void decrease_instances(size_t num = 1);
|
2018-10-25 19:13:45 +00:00
|
|
|
void set_number_of_copies(/*size_t num*/);
|
2018-11-21 14:47:41 +00:00
|
|
|
bool is_selection_empty() const;
|
2019-05-22 12:42:38 +00:00
|
|
|
void scale_selection_to_fit_print_volume();
|
2020-05-20 18:07:31 +00:00
|
|
|
void convert_unit(bool from_imperial_unit);
|
2018-10-08 17:14:55 +00:00
|
|
|
|
2018-11-26 09:56:07 +00:00
|
|
|
void cut(size_t obj_idx, size_t instance_idx, coordf_t z, bool keep_upper = true, bool keep_lower = true, bool rotate_lower = false);
|
2018-10-18 13:13:38 +00:00
|
|
|
|
2020-01-02 15:30:28 +00:00
|
|
|
void export_gcode(bool prefer_removable = true);
|
2019-05-02 11:46:39 +00:00
|
|
|
void export_stl(bool extended = false, bool selection_only = false);
|
2018-10-04 09:12:55 +00:00
|
|
|
void export_amf();
|
2018-11-15 14:27:39 +00:00
|
|
|
void export_3mf(const boost::filesystem::path& output_path = boost::filesystem::path());
|
2019-09-19 07:09:11 +00:00
|
|
|
void reload_from_disk();
|
2020-01-31 11:15:04 +00:00
|
|
|
void reload_all_from_disk();
|
2019-08-20 09:33:58 +00:00
|
|
|
bool has_toolpaths_to_export() const;
|
|
|
|
void export_toolpaths_to_obj() const;
|
2018-09-17 10:15:11 +00:00
|
|
|
void reslice();
|
2019-08-23 13:53:45 +00:00
|
|
|
void reslice_SLA_supports(const ModelObject &object, bool postpone_error_messages = false);
|
2020-01-23 10:22:06 +00:00
|
|
|
void reslice_SLA_hollowing(const ModelObject &object, bool postpone_error_messages = false);
|
|
|
|
void reslice_SLA_until_step(SLAPrintObjectStep step, const ModelObject &object, bool postpone_error_messages = false);
|
2018-10-31 14:41:27 +00:00
|
|
|
void changed_object(int obj_idx);
|
2019-04-15 13:40:40 +00:00
|
|
|
void changed_objects(const std::vector<size_t>& object_idxs);
|
2019-06-26 07:48:52 +00:00
|
|
|
void schedule_background_process(bool schedule = true);
|
2020-03-12 15:11:25 +00:00
|
|
|
bool is_background_process_update_scheduled() const;
|
2019-06-26 07:48:52 +00:00
|
|
|
void suppress_background_process(const bool stop_background_process) ;
|
2019-01-30 15:27:07 +00:00
|
|
|
void fix_through_netfabb(const int obj_idx, const int vol_idx = -1);
|
2018-10-04 09:12:55 +00:00
|
|
|
void send_gcode();
|
2019-12-11 11:28:51 +00:00
|
|
|
void eject_drive();
|
2018-10-10 11:53:45 +00:00
|
|
|
|
2019-07-02 14:42:23 +00:00
|
|
|
void take_snapshot(const std::string &snapshot_name);
|
|
|
|
void take_snapshot(const wxString &snapshot_name);
|
2019-07-04 08:45:41 +00:00
|
|
|
void undo();
|
|
|
|
void redo();
|
2019-07-09 18:45:00 +00:00
|
|
|
void undo_to(int selection);
|
|
|
|
void redo_to(int selection);
|
2019-07-09 13:27:28 +00:00
|
|
|
bool undo_redo_string_getter(const bool is_undo, int idx, const char** out_text);
|
2019-07-20 12:03:34 +00:00
|
|
|
void undo_redo_topmost_string_getter(const bool is_undo, std::string& out_text);
|
2020-04-20 19:46:16 +00:00
|
|
|
bool search_string_getter(int idx, const char** label, const char** tooltip);
|
2019-07-26 11:44:33 +00:00
|
|
|
// For the memory statistics.
|
|
|
|
const Slic3r::UndoRedo::Stack& undo_redo_stack_main() const;
|
|
|
|
// Enter / leave the Gizmos specific Undo / Redo stack. To be used by the SLA support point editing gizmo.
|
|
|
|
void enter_gizmos_stack();
|
|
|
|
void leave_gizmos_stack();
|
2019-07-02 14:42:23 +00:00
|
|
|
|
2019-09-06 15:46:55 +00:00
|
|
|
void on_extruders_change(size_t extruders_count);
|
2018-10-17 09:12:38 +00:00
|
|
|
void on_config_change(const DynamicPrintConfig &config);
|
2019-09-30 11:59:26 +00:00
|
|
|
void force_filament_colors_update();
|
2020-01-24 14:16:28 +00:00
|
|
|
void force_print_bed_update();
|
2019-02-19 13:57:59 +00:00
|
|
|
// On activating the parent window.
|
|
|
|
void on_activate();
|
2019-09-30 12:03:50 +00:00
|
|
|
std::vector<std::string> get_extruder_colors_from_plater_config() const;
|
2019-11-07 12:51:54 +00:00
|
|
|
std::vector<std::string> get_colors_for_color_print() const;
|
2018-10-11 13:57:09 +00:00
|
|
|
|
2018-12-07 16:50:48 +00:00
|
|
|
void update_object_menu();
|
2020-02-28 10:19:46 +00:00
|
|
|
void show_action_buttons(const bool is_ready_to_slice) const;
|
2018-12-07 16:50:48 +00:00
|
|
|
|
2019-05-15 12:09:16 +00:00
|
|
|
wxString get_project_filename(const wxString& extension = wxEmptyString) const;
|
|
|
|
void set_project_filename(const wxString& filename);
|
|
|
|
|
2018-11-15 14:27:39 +00:00
|
|
|
bool is_export_gcode_scheduled() const;
|
2020-04-23 16:47:51 +00:00
|
|
|
|
|
|
|
const Selection& get_selection() const;
|
2018-11-01 11:33:56 +00:00
|
|
|
int get_selected_object_idx();
|
2018-11-13 14:24:05 +00:00
|
|
|
bool is_single_full_object_selection() const;
|
2018-11-23 11:47:32 +00:00
|
|
|
GLCanvas3D* canvas3D();
|
2020-01-21 13:07:13 +00:00
|
|
|
GLCanvas3D* get_current_canvas3D();
|
2019-09-19 10:30:16 +00:00
|
|
|
BoundingBoxf bed_shape_bb() const;
|
2020-04-23 16:47:51 +00:00
|
|
|
|
|
|
|
void arrange();
|
|
|
|
void find_new_position(const ModelInstancePtrs &instances, coord_t min_d);
|
2018-11-12 16:35:57 +00:00
|
|
|
|
2020-01-03 10:41:29 +00:00
|
|
|
void set_current_canvas_as_dirty();
|
2020-03-04 14:19:48 +00:00
|
|
|
void unbind_canvas_event_handlers();
|
2020-04-01 07:58:31 +00:00
|
|
|
void reset_canvas_volumes();
|
2020-01-03 10:41:29 +00:00
|
|
|
|
2018-12-03 12:14:28 +00:00
|
|
|
PrinterTechnology printer_technology() const;
|
2020-04-23 16:47:51 +00:00
|
|
|
const DynamicPrintConfig * config() const;
|
2018-12-03 12:14:28 +00:00
|
|
|
void set_printer_technology(PrinterTechnology printer_technology);
|
|
|
|
|
2019-04-10 06:40:58 +00:00
|
|
|
void copy_selection_to_clipboard();
|
|
|
|
void paste_from_clipboard();
|
2020-04-22 13:46:23 +00:00
|
|
|
void search(bool plater_is_active);
|
2019-04-10 06:40:58 +00:00
|
|
|
|
2019-03-14 12:54:05 +00:00
|
|
|
bool can_delete() const;
|
|
|
|
bool can_delete_all() const;
|
|
|
|
bool can_increase_instances() const;
|
|
|
|
bool can_decrease_instances() const;
|
2019-05-13 12:27:51 +00:00
|
|
|
bool can_set_instance_to_object() const;
|
|
|
|
bool can_fix_through_netfabb() const;
|
2019-03-14 12:54:05 +00:00
|
|
|
bool can_split_to_objects() const;
|
|
|
|
bool can_split_to_volumes() const;
|
|
|
|
bool can_arrange() const;
|
|
|
|
bool can_layers_editing() const;
|
2019-06-24 11:21:05 +00:00
|
|
|
bool can_paste_from_clipboard() const;
|
|
|
|
bool can_copy_to_clipboard() const;
|
2019-07-08 08:57:35 +00:00
|
|
|
bool can_undo() const;
|
|
|
|
bool can_redo() const;
|
2019-09-19 07:09:11 +00:00
|
|
|
bool can_reload_from_disk() const;
|
2019-03-14 12:54:05 +00:00
|
|
|
|
2019-04-24 23:45:00 +00:00
|
|
|
void msw_rescale();
|
2019-04-16 08:05:45 +00:00
|
|
|
|
2019-12-10 09:56:21 +00:00
|
|
|
bool init_view_toolbar();
|
|
|
|
|
2019-07-02 13:49:18 +00:00
|
|
|
const Camera& get_camera() const;
|
2020-03-10 12:02:39 +00:00
|
|
|
Camera& get_camera();
|
2020-03-02 09:58:46 +00:00
|
|
|
|
|
|
|
const Bed3D& get_bed() const;
|
|
|
|
Bed3D& get_bed();
|
|
|
|
|
|
|
|
const GLToolbar& get_view_toolbar() const;
|
|
|
|
GLToolbar& get_view_toolbar();
|
|
|
|
|
2019-09-27 12:52:19 +00:00
|
|
|
const Mouse3DController& get_mouse3d_controller() const;
|
|
|
|
Mouse3DController& get_mouse3d_controller();
|
2019-07-02 13:49:18 +00:00
|
|
|
|
2020-02-04 14:24:35 +00:00
|
|
|
void set_bed_shape() const;
|
|
|
|
|
2020-03-02 09:58:46 +00:00
|
|
|
// ROII wrapper for suppressing the Undo / Redo snapshot to be taken.
|
2019-07-17 13:48:53 +00:00
|
|
|
class SuppressSnapshots
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
SuppressSnapshots(Plater *plater) : m_plater(plater)
|
|
|
|
{
|
|
|
|
m_plater->suppress_snapshots();
|
|
|
|
}
|
|
|
|
~SuppressSnapshots()
|
|
|
|
{
|
|
|
|
m_plater->allow_snapshots();
|
|
|
|
}
|
|
|
|
private:
|
|
|
|
Plater *m_plater;
|
|
|
|
};
|
|
|
|
|
|
|
|
// ROII wrapper for taking an Undo / Redo snapshot while disabling the snapshot taking by the methods called from inside this snapshot.
|
|
|
|
class TakeSnapshot
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
TakeSnapshot(Plater *plater, const wxString &snapshot_name) : m_plater(plater)
|
|
|
|
{
|
|
|
|
m_plater->take_snapshot(snapshot_name);
|
|
|
|
m_plater->suppress_snapshots();
|
|
|
|
}
|
|
|
|
~TakeSnapshot()
|
|
|
|
{
|
|
|
|
m_plater->allow_snapshots();
|
|
|
|
}
|
|
|
|
private:
|
|
|
|
Plater *m_plater;
|
|
|
|
};
|
|
|
|
|
2020-03-20 12:41:36 +00:00
|
|
|
bool inside_snapshot_capture();
|
|
|
|
|
2020-03-12 15:05:39 +00:00
|
|
|
// Wrapper around wxWindow::PopupMenu to suppress error messages popping out while tracking the popup menu.
|
|
|
|
bool PopupMenu(wxMenu *menu, const wxPoint& pos = wxDefaultPosition);
|
|
|
|
bool PopupMenu(wxMenu *menu, int x, int y) { return this->PopupMenu(menu, wxPoint(x, y)); }
|
|
|
|
|
2018-09-17 10:15:11 +00:00
|
|
|
private:
|
|
|
|
struct priv;
|
|
|
|
std::unique_ptr<priv> p;
|
2019-06-26 07:48:52 +00:00
|
|
|
|
2020-03-12 15:05:39 +00:00
|
|
|
// Set true during PopupMenu() tracking to suppress immediate error message boxes.
|
|
|
|
// The error messages are collected to m_tracking_popup_menu_error_message instead and these error messages
|
|
|
|
// are shown after the pop-up dialog closes.
|
|
|
|
bool m_tracking_popup_menu = false;
|
|
|
|
wxString m_tracking_popup_menu_error_message;
|
|
|
|
|
2019-07-17 13:48:53 +00:00
|
|
|
void suppress_snapshots();
|
|
|
|
void allow_snapshots();
|
|
|
|
|
2019-06-26 07:48:52 +00:00
|
|
|
friend class SuppressBackgroundProcessingUpdate;
|
2018-09-17 10:15:11 +00:00
|
|
|
};
|
|
|
|
|
2019-06-26 07:48:52 +00:00
|
|
|
class SuppressBackgroundProcessingUpdate
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
SuppressBackgroundProcessingUpdate();
|
|
|
|
~SuppressBackgroundProcessingUpdate();
|
|
|
|
private:
|
2020-03-12 15:11:25 +00:00
|
|
|
bool m_was_scheduled;
|
2019-06-26 07:48:52 +00:00
|
|
|
};
|
2018-09-17 10:15:11 +00:00
|
|
|
|
2020-04-23 16:47:51 +00:00
|
|
|
} // namespace GUI
|
|
|
|
} // namespace Slic3r
|
2018-09-17 10:15:11 +00:00
|
|
|
|
|
|
|
#endif
|