ENH:Add 'Don't show again' to the step mesh

jira: STUDIO-8606
Change-Id: I2382b9052e2c994a458ad36ca61eb94c517927c6
(cherry picked from commit 0cce6619ce12aa8540f6dfca6d9ee79ffba65c19)
This commit is contained in:
Mack 2024-11-08 21:06:57 +08:00 committed by Noisyfox
parent 65e5b193e1
commit 0bc2444079
10 changed files with 154 additions and 76 deletions

View file

@ -1386,7 +1386,7 @@ int CLI::run(int argc, char **argv)
// BBS: adjust whebackup // BBS: adjust whebackup
//LoadStrategy strategy = LoadStrategy::LoadModel | LoadStrategy::LoadConfig|LoadStrategy::AddDefaultInstances; //LoadStrategy strategy = LoadStrategy::LoadModel | LoadStrategy::LoadConfig|LoadStrategy::AddDefaultInstances;
//if (load_aux) strategy = strategy | LoadStrategy::LoadAuxiliary; //if (load_aux) strategy = strategy | LoadStrategy::LoadAuxiliary;
model = Model::read_from_file(file, &config, &config_substitutions, strategy, &plate_data_src, &project_presets, &is_bbl_3mf, &file_version, nullptr, nullptr, nullptr, nullptr, nullptr, plate_to_slice); model = Model::read_from_file(file, &config, &config_substitutions, strategy, &plate_data_src, &project_presets, &is_bbl_3mf, &file_version, nullptr, nullptr, nullptr, plate_to_slice);
if (is_bbl_3mf) if (is_bbl_3mf)
{ {
if (!first_file) if (!first_file)

View file

@ -409,6 +409,14 @@ void AppConfig::set_defaults()
set_str("print", "timelapse", "1"); set_str("print", "timelapse", "1");
} }
if (get("enable_step_mesh_setting").empty()) {
set_bool("enable_step_mesh_setting", true);
}
if (get("linear_defletion", "angle_defletion").empty()) {
set("linear_defletion", "0.003");
set("angle_defletion", "0.5");
}
// Remove legacy window positions/sizes // Remove legacy window positions/sizes
erase("app", "main_frame_maximized"); erase("app", "main_frame_maximized");
erase("app", "main_frame_pos"); erase("app", "main_frame_pos");

View file

@ -4,6 +4,7 @@
#include "../libslic3r.h" #include "../libslic3r.h"
#include <map> #include <map>
#include <string> #include <string>
#include <cfloat>
namespace Slic3r { namespace Slic3r {

View file

@ -177,18 +177,67 @@ Model::~Model()
Slic3r::remove_backup(*this, true); Slic3r::remove_backup(*this, true);
} }
Model Model::read_from_step(const std::string& input_file,
LoadStrategy options,
ImportStepProgressFn stepFn,
StepIsUtf8Fn stepIsUtf8Fn,
std::function<int(Slic3r::Step&, double&, double&)> step_mesh_fn,
double linear_defletion,
double angle_defletion)
{
Model model;
bool result = false;
bool is_cb_cancel = false;
std::string message;
Step step_file(input_file);
step_file.load();
if (step_mesh_fn) {
if (step_mesh_fn(step_file, linear_defletion, angle_defletion) == -1) {
Model empty_model;
return empty_model;
}
}
result = load_step(input_file.c_str(), &model, is_cb_cancel, linear_defletion, angle_defletion, stepFn, stepIsUtf8Fn);
if (is_cb_cancel) {
Model empty_model;
return empty_model;
}
if (!result) {
if (message.empty())
throw Slic3r::RuntimeError(_L("Loading of a model file failed."));
else
throw Slic3r::RuntimeError(message);
}
if (model.objects.empty())
throw Slic3r::RuntimeError(_L("The supplied file couldn't be read because it's empty"));
for (ModelObject *o : model.objects)
o->input_file = input_file;
if (options & LoadStrategy::AddDefaultInstances)
model.add_default_instances();
return model;
}
// BBS: add part plate related logic // BBS: add part plate related logic
// BBS: backup & restore // BBS: backup & restore
// Loading model from a file, it may be a simple geometry file as STL or OBJ, however it may be a project file as well. // Loading model from a file, it may be a simple geometry file as STL or OBJ, however it may be a project file as well.
Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* config, ConfigSubstitutionContext* config_substitutions, Model Model::read_from_file(const std::string& input_file,
LoadStrategy options, PlateDataPtrs* plate_data, std::vector<Preset*>* project_presets, bool *is_xxx, Semver* file_version, Import3mfProgressFn proFn, DynamicPrintConfig* config,
ImportstlProgressFn stlFn, ConfigSubstitutionContext* config_substitutions,
ImportStepProgressFn stepFn, LoadStrategy options,
StepIsUtf8Fn stepIsUtf8Fn, PlateDataPtrs* plate_data,
BBLProject * project, std::vector<Preset*>* project_presets,
int plate_id, bool *is_xxx,
ObjImportColorFn objFn, Semver* file_version,
std::function<int(Slic3r::Step&, double&, double&)> step_mesh_fn) Import3mfProgressFn proFn,
ImportstlProgressFn stlFn,
BBLProject * project,
int plate_id,
ObjImportColorFn objFn)
{ {
Model model; Model model;
@ -212,20 +261,7 @@ Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* c
bool result = false; bool result = false;
bool is_cb_cancel = false; bool is_cb_cancel = false;
std::string message; std::string message;
if (boost::algorithm::iends_with(input_file, ".stp") || if (boost::algorithm::iends_with(input_file, ".stl"))
boost::algorithm::iends_with(input_file, ".step")) {
double linear_defletion = 0.003;
double angle_defletion = 0.5;
Step step_file(input_file);
step_file.load();
if (step_mesh_fn) {
if (step_mesh_fn(step_file, linear_defletion, angle_defletion) == -1) {
Model empty_model;
return empty_model;
}
}
result = load_step(input_file.c_str(), &model, is_cb_cancel, linear_defletion, angle_defletion, stepFn, stepIsUtf8Fn);
} else if (boost::algorithm::iends_with(input_file, ".stl"))
result = load_stl(input_file.c_str(), &model, nullptr, stlFn); result = load_stl(input_file.c_str(), &model, nullptr, stlFn);
else if (boost::algorithm::iends_with(input_file, ".oltp")) else if (boost::algorithm::iends_with(input_file, ".oltp"))
result = load_stl(input_file.c_str(), &model, nullptr, stlFn,256); result = load_stl(input_file.c_str(), &model, nullptr, stlFn,256);

View file

@ -6,6 +6,7 @@
#include "Geometry.hpp" #include "Geometry.hpp"
#include "ObjectID.hpp" #include "ObjectID.hpp"
#include "Point.hpp" #include "Point.hpp"
#include "AppConfig.hpp"
#include "PrintConfig.hpp" #include "PrintConfig.hpp"
#include "Slicing.hpp" #include "Slicing.hpp"
#include "SLA/SupportPoint.hpp" #include "SLA/SupportPoint.hpp"
@ -1530,6 +1531,14 @@ public:
OBJECTBASE_DERIVED_COPY_MOVE_CLONE(Model) OBJECTBASE_DERIVED_COPY_MOVE_CLONE(Model)
static Model read_from_step(const std::string& input_file,
LoadStrategy options,
ImportStepProgressFn stepFn,
StepIsUtf8Fn stepIsUtf8Fn,
std::function<int(Slic3r::Step&, double&, double&)> step_mesh_fn,
double linear_defletion,
double angle_defletion);
//BBS: add part plate related logic //BBS: add part plate related logic
// BBS: backup // BBS: backup
//BBS: is_xxx is used for is_bbs_3mf when loading 3mf, is used for is_inches when loading amf //BBS: is_xxx is used for is_bbs_3mf when loading 3mf, is used for is_inches when loading amf
@ -1539,12 +1548,9 @@ public:
LoadStrategy options = LoadStrategy::AddDefaultInstances, PlateDataPtrs* plate_data = nullptr, LoadStrategy options = LoadStrategy::AddDefaultInstances, PlateDataPtrs* plate_data = nullptr,
std::vector<Preset*>* project_presets = nullptr, bool* is_xxx = nullptr, Semver* file_version = nullptr, Import3mfProgressFn proFn = nullptr, std::vector<Preset*>* project_presets = nullptr, bool* is_xxx = nullptr, Semver* file_version = nullptr, Import3mfProgressFn proFn = nullptr,
ImportstlProgressFn stlFn = nullptr, ImportstlProgressFn stlFn = nullptr,
ImportStepProgressFn stepFn = nullptr,
StepIsUtf8Fn stepIsUtf8Fn = nullptr,
BBLProject * project = nullptr, BBLProject * project = nullptr,
int plate_id = 0, int plate_id = 0,
ObjImportColorFn objFn = nullptr, ObjImportColorFn objFn = nullptr
std::function<int(Slic3r::Step&, double&, double&)> step_mesh_fn = nullptr
); );
// BBS // BBS
static bool obj_import_vertex_color_deal(const std::vector<unsigned char> &vertex_filament_ids, const unsigned char &first_extruder_id, Model *model); static bool obj_import_vertex_color_deal(const std::vector<unsigned char> &vertex_filament_ids, const unsigned char &first_extruder_id, Model *model);

View file

@ -4156,45 +4156,22 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
filament_ids.clear(); filament_ids.clear();
} }
}; };
auto step_mesh = [this, &path, &is_user_cancel](Slic3r::Step& file, double& linear_value, double& angle_value)-> int { if (boost::algorithm::iends_with(path.string(), ".stp") ||
if (boost::iends_with(path.string(), ".step") || boost::algorithm::iends_with(path.string(), ".step")) {
boost::iends_with(path.string(), ".stp")){ double linear = std::stod(wxGetApp().app_config->get("linear_defletion"));
StepMeshDialog mesh_dlg(nullptr, file); double angle = std::stod(wxGetApp().app_config->get("angle_defletion"));
if (mesh_dlg.ShowModal() == wxID_OK) { model = Slic3r::Model:: read_from_step(path.string(), strategy,
linear_value = mesh_dlg.get_linear_defletion(); [this, &dlg, real_filename, &progress_percent, &file_percent, step_percent, INPUT_FILES_RATIO, total_files, i](int load_stage, int current, int total, bool &cancel)
angle_value = mesh_dlg.get_angle_defletion(); {
return 1; bool cont = true;
} float percent_float = (100.0f * (float)i / (float)total_files) + INPUT_FILES_RATIO * ((float)step_percent[load_stage] + (float)current * (float)(step_percent[load_stage + 1] - step_percent[load_stage]) / (float)total) / (float)total_files;
} BOOST_LOG_TRIVIAL(trace) << "load_step_file: percent(float)=" << percent_float << ", stage = " << load_stage << ", curr = " << current << ", total = " << total;
is_user_cancel = true; progress_percent = (int)percent_float;
return -1; wxString msg = wxString::Format(_L("Loading file: %s"), from_path(real_filename));
}; cont = dlg.Update(progress_percent, msg);
model = Slic3r::Model:: read_from_file( cancel = !cont;
path.string(), nullptr, nullptr, strategy, &plate_data, &project_presets, &is_xxx, &file_version, nullptr, },
[this, &dlg, real_filename, &progress_percent, &file_percent, INPUT_FILES_RATIO, total_files, i, &designer_model_id, &designer_country_code](int current, int total, bool &cancel, std::string &mode_id, std::string &code) [](int isUtf8StepFile) {
{
designer_model_id = mode_id;
designer_country_code = code;
bool cont = true;
float percent_float = (100.0f * (float)i / (float)total_files) + INPUT_FILES_RATIO * 100.0f * ((float)current / (float)total) / (float)total_files;
BOOST_LOG_TRIVIAL(trace) << "load_stl_file: percent(float)=" << percent_float << ", curr = " << current << ", total = " << total;
progress_percent = (int)percent_float;
wxString msg = wxString::Format(_L("Loading file: %s"), from_path(real_filename));
cont = dlg.Update(progress_percent, msg);
cancel = !cont;
},
[this, &dlg, real_filename, &progress_percent, &file_percent, step_percent, INPUT_FILES_RATIO, total_files, i](int load_stage, int current, int total, bool &cancel)
{
bool cont = true;
float percent_float = (100.0f * (float)i / (float)total_files) + INPUT_FILES_RATIO * ((float)step_percent[load_stage] + (float)current * (float)(step_percent[load_stage + 1] - step_percent[load_stage]) / (float)total) / (float)total_files;
BOOST_LOG_TRIVIAL(trace) << "load_step_file: percent(float)=" << percent_float << ", stage = " << load_stage << ", curr = " << current << ", total = " << total;
progress_percent = (int)percent_float;
wxString msg = wxString::Format(_L("Loading file: %s"), from_path(real_filename));
cont = dlg.Update(progress_percent, msg);
cancel = !cont;
},
[](int isUtf8StepFile) {
if (!isUtf8StepFile) { if (!isUtf8StepFile) {
const auto no_warn = wxGetApp().app_config->get_bool("step_not_utf8_no_warn"); const auto no_warn = wxGetApp().app_config->get_bool("step_not_utf8_no_warn");
if (!no_warn) { if (!no_warn) {
@ -4208,8 +4185,40 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
} }
} }
}, },
nullptr, 0, obj_color_fun, step_mesh); [this, &path, &is_user_cancel, &linear, &angle](Slic3r::Step& file, double& linear_value, double& angle_value)-> int {
if (wxGetApp().app_config->get_bool("enable_step_mesh_setting")) {
StepMeshDialog mesh_dlg(nullptr, file);
if (mesh_dlg.ShowModal() == wxID_OK) {
linear_value = mesh_dlg.get_linear_defletion();
angle_value = mesh_dlg.get_angle_defletion();
return 1;
}
}else {
linear_value = linear;
angle_value = angle;
return 1;
}
is_user_cancel = true;
return -1;
}, linear, angle);
}else {
model = Slic3r::Model:: read_from_file(
path.string(), nullptr, nullptr, strategy, &plate_data, &project_presets, &is_xxx, &file_version, nullptr,
[this, &dlg, real_filename, &progress_percent, &file_percent, INPUT_FILES_RATIO, total_files, i, &designer_model_id, &designer_country_code](int current, int total, bool &cancel, std::string &mode_id, std::string &code)
{
designer_model_id = mode_id;
designer_country_code = code;
bool cont = true;
float percent_float = (100.0f * (float)i / (float)total_files) + INPUT_FILES_RATIO * 100.0f * ((float)current / (float)total) / (float)total_files;
BOOST_LOG_TRIVIAL(trace) << "load_stl_file: percent(float)=" << percent_float << ", curr = " << current << ", total = " << total;
progress_percent = (int)percent_float;
wxString msg = wxString::Format(_L("Loading file: %s"), from_path(real_filename));
cont = dlg.Update(progress_percent, msg);
cancel = !cont;
},
nullptr, 0, obj_color_fun);
}
if (designer_model_id.empty() && boost::algorithm::iends_with(path.string(), ".stl")) { if (designer_model_id.empty() && boost::algorithm::iends_with(path.string(), ".stl")) {
read_binary_stl(path.string(), designer_model_id, designer_country_code); read_binary_stl(path.string(), designer_model_id, designer_country_code);
@ -5952,7 +5961,7 @@ void Plater::priv::reload_from_disk()
// BBS: backup // BBS: backup
new_model = Model::read_from_file(path, nullptr, nullptr, LoadStrategy::AddDefaultInstances | LoadStrategy::LoadModel, &plate_data, &project_presets, nullptr, new_model = Model::read_from_file(path, nullptr, nullptr, LoadStrategy::AddDefaultInstances | LoadStrategy::LoadModel, &plate_data, &project_presets, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, 0, obj_color_fun); nullptr, nullptr, nullptr, nullptr, 0, obj_color_fun);
for (ModelObject* model_object : new_model.objects) for (ModelObject* model_object : new_model.objects)
{ {
model_object->center_around_origin(); model_object->center_around_origin();

View file

@ -1171,6 +1171,7 @@ wxWindow* PreferencesDialog::create_general_page()
auto item_calc_mode = create_item_checkbox(_L("Flushing volumes: Auto-calculate every time the color changed."), page, _L("If enabled, auto-calculate every time the color changed."), 50, "auto_calculate"); auto item_calc_mode = create_item_checkbox(_L("Flushing volumes: Auto-calculate every time the color changed."), page, _L("If enabled, auto-calculate every time the color changed."), 50, "auto_calculate");
auto item_calc_in_long_retract = create_item_checkbox(_L("Flushing volumes: Auto-calculate every time when the filament is changed."), page, _L("If enabled, auto-calculate every time when filament is changed"), 50, "auto_calculate_when_filament_change"); auto item_calc_in_long_retract = create_item_checkbox(_L("Flushing volumes: Auto-calculate every time when the filament is changed."), page, _L("If enabled, auto-calculate every time when filament is changed"), 50, "auto_calculate_when_filament_change");
auto item_remember_printer_config = create_item_checkbox(_L("Remember printer configuration"), page, _L("If enabled, Orca will remember and switch filament/process configuration for each printer automatically."), 50, "remember_printer_config"); auto item_remember_printer_config = create_item_checkbox(_L("Remember printer configuration"), page, _L("If enabled, Orca will remember and switch filament/process configuration for each printer automatically."), 50, "remember_printer_config");
auto item_step_mesh_setting = create_item_checkbox(_L("Show the step mesh parameter setting dialog."), page, _L("If enabled,a parameter settings dialog will appear during STEP file import."), 50, "enable_step_mesh_setting");
auto item_multi_machine = create_item_checkbox(_L("Multi-device Management(Take effect after restarting Orca)."), page, _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), 50, "enable_multi_machine"); auto item_multi_machine = create_item_checkbox(_L("Multi-device Management(Take effect after restarting Orca)."), page, _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), 50, "enable_multi_machine");
auto item_auto_arrange = create_item_checkbox(_L("Auto arrange plate after cloning"), page, _L("Auto arrange plate after object cloning"), 50, "auto_arrange"); auto item_auto_arrange = create_item_checkbox(_L("Auto arrange plate after cloning"), page, _L("Auto arrange plate after object cloning"), 50, "auto_arrange");
auto title_presets = create_item_title(_L("Presets"), page, _L("Presets")); auto title_presets = create_item_title(_L("Presets"), page, _L("Presets"));
@ -1250,6 +1251,7 @@ wxWindow* PreferencesDialog::create_general_page()
sizer_page->Add(item_hints, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_hints, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_calc_in_long_retract, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_calc_in_long_retract, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_multi_machine, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_multi_machine, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_step_mesh_setting, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_auto_arrange, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_auto_arrange, 0, wxTOP, FromDIP(3));
sizer_page->Add(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20)); sizer_page->Add(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20));
sizer_page->Add(item_calc_mode, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_calc_mode, 0, wxTOP, FromDIP(3));

View file

@ -229,7 +229,9 @@ StepMeshDialog::StepMeshDialog(wxWindow* parent, Slic3r::Step& file)
wxBoxSizer* bSizer_button = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* bSizer_button = new wxBoxSizer(wxHORIZONTAL);
bSizer_button->SetMinSize(wxSize(FromDIP(100), -1)); bSizer_button->SetMinSize(wxSize(FromDIP(100), -1));
m_checkbox = new wxCheckBox(this, wxID_ANY, _L("Don't show again"), wxDefaultPosition, wxDefaultSize, 0);
bSizer_button->Add(m_checkbox, 0, wxALIGN_LEFT);
bSizer_button->AddStretchSpacer(1);
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(27, 136, 68), StateColor::Pressed), std::pair<wxColour, int>(wxColour(61, 203, 115), StateColor::Hovered), StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(27, 136, 68), StateColor::Pressed), std::pair<wxColour, int>(wxColour(61, 203, 115), StateColor::Hovered),
std::pair<wxColour, int>(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); std::pair<wxColour, int>(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal));
m_button_ok = new Button(this, _L("OK")); m_button_ok = new Button(this, _L("OK"));
@ -246,6 +248,12 @@ StepMeshDialog::StepMeshDialog(wxWindow* parent, Slic3r::Step& file)
stop_task(); stop_task();
if (validate_number_range(angle_input->GetTextCtrl()->GetValue(), 0.01, 1) && if (validate_number_range(angle_input->GetTextCtrl()->GetValue(), 0.01, 1) &&
validate_number_range(linear_input->GetTextCtrl()->GetValue(), 0.001, 0.1)) { validate_number_range(linear_input->GetTextCtrl()->GetValue(), 0.001, 0.1)) {
if (m_checkbox->IsChecked()) {
wxGetApp().app_config->set_bool("enable_step_mesh_setting", false);
}
wxGetApp().app_config->set("linear_defletion", std::to_string(get_linear_defletion()));
wxGetApp().app_config->set("angle_defletion", std::to_string(get_angle_defletion()));
EndModal(wxID_OK); EndModal(wxID_OK);
} }
SetFocusIgnoringChildren(); SetFocusIgnoringChildren();
@ -268,7 +276,7 @@ StepMeshDialog::StepMeshDialog(wxWindow* parent, Slic3r::Step& file)
EndModal(wxID_CANCEL); EndModal(wxID_CANCEL);
}); });
bSizer->Add(bSizer_button, 0, wxALIGN_RIGHT | wxRIGHT| wxBOTTOM, LEFT_RIGHT_PADING); bSizer->Add(bSizer_button, 1, wxEXPAND | wxALL, LEFT_RIGHT_PADING);
this->SetSizer(bSizer); this->SetSizer(bSizer);
update_mesh_number_text(); update_mesh_number_text();

View file

@ -2,6 +2,7 @@
#define _STEP_MESH_DIALOG_H_ #define _STEP_MESH_DIALOG_H_
#include <thread> #include <thread>
#include "GUI_App.hpp"
#include "GUI_Utils.hpp" #include "GUI_Utils.hpp"
#include "libslic3r/Format/STEP.hpp" #include "libslic3r/Format/STEP.hpp"
#include "Widgets/Button.hpp" #include "Widgets/Button.hpp"
@ -12,12 +13,18 @@ class StepMeshDialog : public Slic3r::GUI::DPIDialog
public: public:
StepMeshDialog(wxWindow* parent, Slic3r::Step& file); StepMeshDialog(wxWindow* parent, Slic3r::Step& file);
void on_dpi_changed(const wxRect& suggested_rect) override; void on_dpi_changed(const wxRect& suggested_rect) override;
inline double get_linear_init() {
return std::stod(Slic3r::GUI::wxGetApp().app_config->get("linear_defletion"));
}
inline double get_angle_init() {
return std::stod(Slic3r::GUI::wxGetApp().app_config->get("angle_defletion"));
}
inline double get_linear_defletion() { inline double get_linear_defletion() {
double value; double value;
if (m_linear_last.ToDouble(&value)) { if (m_linear_last.ToDouble(&value)) {
return value; return value;
}else { }else {
return 0.003; return get_linear_init();
} }
} }
inline double get_angle_defletion() { inline double get_angle_defletion() {
@ -25,15 +32,16 @@ public:
if (m_angle_last.ToDouble(&value)) { if (m_angle_last.ToDouble(&value)) {
return value; return value;
} else { } else {
return 0.5; return get_angle_init();
} }
} }
private: private:
Slic3r::Step& m_file; Slic3r::Step& m_file;
Button* m_button_ok = nullptr; Button* m_button_ok = nullptr;
Button* m_button_cancel = nullptr; Button* m_button_cancel = nullptr;
wxString m_linear_last = wxString::Format("%.3f", 0.003); wxCheckBox* m_checkbox = nullptr;
wxString m_angle_last = wxString::Format("%.2f", 0.5); wxString m_linear_last = wxString::Format("%.3f", get_linear_init());
wxString m_angle_last = wxString::Format("%.2f", get_angle_init());
wxStaticText* mesh_face_number_text; wxStaticText* mesh_face_number_text;
double m_last_linear; double m_last_linear;
double m_last_angle; double m_last_angle;

View file

@ -303,7 +303,7 @@ static void read_model_from_file(const std::string& input_file, Model& model)
std::vector<Preset *> project_presets; std::vector<Preset *> project_presets;
model = Model::read_from_file(input_file, &config, &config_substitutions, strategy, &plate_data_src, &project_presets, model = Model::read_from_file(input_file, &config, &config_substitutions, strategy, &plate_data_src, &project_presets,
&is_bbl_3mf, &file_version, nullptr, nullptr, nullptr, nullptr, nullptr, plate_to_slice); &is_bbl_3mf, &file_version, nullptr, nullptr, nullptr, plate_to_slice);
model.add_default_instances(); model.add_default_instances();
for (auto object : model.objects) for (auto object : model.objects)