Added progress dialog for adding parts from files
This commit is contained in:
parent
b748f36246
commit
b6634b2ea0
2 changed files with 21 additions and 25 deletions
src/slic3r/GUI
|
@ -2133,12 +2133,11 @@ void ObjectList::load_subobject(ModelVolumeType type)
|
||||||
if (m_objects_model->GetItemType(item)&itInstance)
|
if (m_objects_model->GetItemType(item)&itInstance)
|
||||||
item = m_objects_model->GetItemById(obj_idx);
|
item = m_objects_model->GetItemById(obj_idx);
|
||||||
|
|
||||||
take_snapshot(_(L("Load Part")));
|
take_snapshot(_L("Load Part"));
|
||||||
|
|
||||||
std::vector<std::pair<wxString, bool>> volumes_info;
|
std::vector<std::pair<wxString, bool>> volumes_info;
|
||||||
load_part((*m_objects)[obj_idx], volumes_info, type);
|
load_part((*m_objects)[obj_idx], volumes_info, type);
|
||||||
|
|
||||||
|
|
||||||
changed_object(obj_idx);
|
changed_object(obj_idx);
|
||||||
if (type == ModelVolumeType::MODEL_PART)
|
if (type == ModelVolumeType::MODEL_PART)
|
||||||
// update printable state on canvas
|
// update printable state on canvas
|
||||||
|
@ -2164,23 +2163,30 @@ void ObjectList::load_part( ModelObject* model_object,
|
||||||
|
|
||||||
wxArrayString input_files;
|
wxArrayString input_files;
|
||||||
wxGetApp().import_model(parent, input_files);
|
wxGetApp().import_model(parent, input_files);
|
||||||
|
|
||||||
|
wxProgressDialog dlg(_L("Loading") + dots, "", 100, wxGetApp().plater(), wxPD_AUTO_HIDE);
|
||||||
|
wxBusyCursor busy;
|
||||||
|
|
||||||
for (size_t i = 0; i < input_files.size(); ++i) {
|
for (size_t i = 0; i < input_files.size(); ++i) {
|
||||||
std::string input_file = input_files.Item(i).ToUTF8().data();
|
std::string input_file = input_files.Item(i).ToUTF8().data();
|
||||||
|
|
||||||
|
dlg.Update(static_cast<int>(100.0f * static_cast<float>(i) / static_cast<float>(input_files.size())),
|
||||||
|
_L("Loading file") + ": " + from_path(boost::filesystem::path(input_file).filename()));
|
||||||
|
dlg.Fit();
|
||||||
|
|
||||||
Model model;
|
Model model;
|
||||||
try {
|
try {
|
||||||
model = Model::read_from_file(input_file);
|
model = Model::read_from_file(input_file);
|
||||||
}
|
}
|
||||||
catch (std::exception &e) {
|
catch (std::exception &e) {
|
||||||
auto msg = _(L("Error!")) + " " + input_file + " : " + e.what() + ".";
|
auto msg = _L("Error!") + " " + input_file + " : " + e.what() + ".";
|
||||||
show_error(parent, msg);
|
show_error(parent, msg);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto object : model.objects) {
|
for (auto object : model.objects) {
|
||||||
Vec3d delta = Vec3d::Zero();
|
Vec3d delta = Vec3d::Zero();
|
||||||
if (model_object->origin_translation != Vec3d::Zero())
|
if (model_object->origin_translation != Vec3d::Zero()) {
|
||||||
{
|
|
||||||
object->center_around_origin();
|
object->center_around_origin();
|
||||||
delta = model_object->origin_translation - object->origin_translation;
|
delta = model_object->origin_translation - object->origin_translation;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2142,8 +2142,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||||
for (size_t i = 0; i < input_files.size(); ++i) {
|
for (size_t i = 0; i < input_files.size(); ++i) {
|
||||||
const auto &path = input_files[i];
|
const auto &path = input_files[i];
|
||||||
const auto filename = path.filename();
|
const auto filename = path.filename();
|
||||||
const auto dlg_info = _L("Loading file") + ": " + from_path(filename);
|
dlg.Update(static_cast<int>(100.0f * static_cast<float>(i) / static_cast<float>(input_files.size())), _L("Loading file") + ": " + from_path(filename));
|
||||||
dlg.Update(static_cast<int>(100.0f * static_cast<float>(i) / static_cast<float>(input_files.size())), dlg_info);
|
|
||||||
dlg.Fit();
|
dlg.Fit();
|
||||||
|
|
||||||
const bool type_3mf = std::regex_match(path.string(), pattern_3mf);
|
const bool type_3mf = std::regex_match(path.string(), pattern_3mf);
|
||||||
|
@ -2164,12 +2163,10 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||||
PrinterTechnology printer_technology = Preset::printer_technology(config_loaded);
|
PrinterTechnology printer_technology = Preset::printer_technology(config_loaded);
|
||||||
|
|
||||||
// We can't to load SLA project if there is at least one multi-part object on the bed
|
// We can't to load SLA project if there is at least one multi-part object on the bed
|
||||||
if (printer_technology == ptSLA)
|
if (printer_technology == ptSLA) {
|
||||||
{
|
|
||||||
const ModelObjectPtrs& objects = q->model().objects;
|
const ModelObjectPtrs& objects = q->model().objects;
|
||||||
for (auto object : objects)
|
for (auto object : objects)
|
||||||
if (object->volumes.size() > 1)
|
if (object->volumes.size() > 1) {
|
||||||
{
|
|
||||||
Slic3r::GUI::show_info(nullptr,
|
Slic3r::GUI::show_info(nullptr,
|
||||||
_L("You cannot load SLA project with a multi-part object on the bed") + "\n\n" +
|
_L("You cannot load SLA project with a multi-part object on the bed") + "\n\n" +
|
||||||
_L("Please check your object list before preset changing."),
|
_L("Please check your object list before preset changing."),
|
||||||
|
@ -2188,8 +2185,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||||
this->model.custom_gcode_per_print_z = model.custom_gcode_per_print_z;
|
this->model.custom_gcode_per_print_z = model.custom_gcode_per_print_z;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (load_config)
|
if (load_config) {
|
||||||
{
|
|
||||||
if (!config.empty()) {
|
if (!config.empty()) {
|
||||||
Preset::normalize(config);
|
Preset::normalize(config);
|
||||||
PresetBundle* preset_bundle = wxGetApp().preset_bundle;
|
PresetBundle* preset_bundle = wxGetApp().preset_bundle;
|
||||||
|
@ -2264,8 +2260,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (load_model)
|
if (load_model) {
|
||||||
{
|
|
||||||
// The model should now be initialized
|
// The model should now be initialized
|
||||||
|
|
||||||
auto convert_from_imperial_units = [](Model& model, bool only_small_volumes) {
|
auto convert_from_imperial_units = [](Model& model, bool only_small_volumes) {
|
||||||
|
@ -2315,8 +2310,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||||
else if ((wxGetApp().get_mode() == comSimple) && (type_3mf || type_any_amf) && model_has_advanced_features(model)) {
|
else if ((wxGetApp().get_mode() == comSimple) && (type_3mf || type_any_amf) && model_has_advanced_features(model)) {
|
||||||
wxMessageDialog msg_dlg(q, _L("This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?")+"\n",
|
wxMessageDialog msg_dlg(q, _L("This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?")+"\n",
|
||||||
_L("Detected advanced data"), wxICON_WARNING | wxYES | wxNO);
|
_L("Detected advanced data"), wxICON_WARNING | wxYES | wxNO);
|
||||||
if (msg_dlg.ShowModal() == wxID_YES)
|
if (msg_dlg.ShowModal() == wxID_YES) {
|
||||||
{
|
|
||||||
Slic3r::GUI::wxGetApp().save_mode(comAdvanced);
|
Slic3r::GUI::wxGetApp().save_mode(comAdvanced);
|
||||||
view3D->set_as_dirty();
|
view3D->set_as_dirty();
|
||||||
}
|
}
|
||||||
|
@ -2331,8 +2325,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||||
}
|
}
|
||||||
|
|
||||||
// check multi-part object adding for the SLA-printing
|
// check multi-part object adding for the SLA-printing
|
||||||
if (printer_technology == ptSLA)
|
if (printer_technology == ptSLA) {
|
||||||
{
|
|
||||||
for (auto obj : model.objects)
|
for (auto obj : model.objects)
|
||||||
if ( obj->volumes.size()>1 ) {
|
if ( obj->volumes.size()>1 ) {
|
||||||
Slic3r::GUI::show_error(nullptr,
|
Slic3r::GUI::show_error(nullptr,
|
||||||
|
@ -2368,23 +2361,20 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||||
obj_idxs.insert(obj_idxs.end(), loaded_idxs.begin(), loaded_idxs.end());
|
obj_idxs.insert(obj_idxs.end(), loaded_idxs.begin(), loaded_idxs.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (load_model)
|
if (load_model) {
|
||||||
{
|
|
||||||
wxGetApp().app_config->update_skein_dir(input_files[input_files.size() - 1].parent_path().string());
|
wxGetApp().app_config->update_skein_dir(input_files[input_files.size() - 1].parent_path().string());
|
||||||
// XXX: Plater.pm had @loaded_files, but didn't seem to fill them with the filenames...
|
// XXX: Plater.pm had @loaded_files, but didn't seem to fill them with the filenames...
|
||||||
statusbar()->set_status_text(_L("Loaded"));
|
statusbar()->set_status_text(_L("Loaded"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// automatic selection of added objects
|
// automatic selection of added objects
|
||||||
if (!obj_idxs.empty() && (view3D != nullptr))
|
if (!obj_idxs.empty() && view3D != nullptr) {
|
||||||
{
|
|
||||||
// update printable state for new volumes on canvas3D
|
// update printable state for new volumes on canvas3D
|
||||||
wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_objects(obj_idxs);
|
wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_objects(obj_idxs);
|
||||||
|
|
||||||
Selection& selection = view3D->get_canvas3d()->get_selection();
|
Selection& selection = view3D->get_canvas3d()->get_selection();
|
||||||
selection.clear();
|
selection.clear();
|
||||||
for (size_t idx : obj_idxs)
|
for (size_t idx : obj_idxs) {
|
||||||
{
|
|
||||||
selection.add_object((unsigned int)idx, false);
|
selection.add_object((unsigned int)idx, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue