Tech ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED -> 1st installment: Allow to save/load empty projects
This commit is contained in:
parent
dfd946e7c9
commit
dbaaa35534
6 changed files with 43 additions and 2 deletions
src
|
@ -2577,9 +2577,16 @@ namespace Slic3r {
|
||||||
|
|
||||||
bool _3MF_Exporter::_add_build_to_model_stream(std::stringstream& stream, const BuildItemsList& build_items)
|
bool _3MF_Exporter::_add_build_to_model_stream(std::stringstream& stream, const BuildItemsList& build_items)
|
||||||
{
|
{
|
||||||
|
#if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
|
// This happens for empty projects
|
||||||
|
#endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
if (build_items.size() == 0) {
|
if (build_items.size() == 0) {
|
||||||
add_error("No build item found");
|
add_error("No build item found");
|
||||||
|
#if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
return false;
|
return false;
|
||||||
|
#endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
}
|
}
|
||||||
|
|
||||||
stream << " <" << BUILD_TAG << ">\n";
|
stream << " <" << BUILD_TAG << ">\n";
|
||||||
|
|
|
@ -161,8 +161,10 @@ Model Model::read_from_archive(const std::string& input_file, DynamicPrintConfig
|
||||||
if (!result)
|
if (!result)
|
||||||
throw Slic3r::RuntimeError("Loading of a model file failed.");
|
throw Slic3r::RuntimeError("Loading of a model file failed.");
|
||||||
|
|
||||||
|
#if !ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
if (model.objects.empty())
|
if (model.objects.empty())
|
||||||
throw Slic3r::RuntimeError("The supplied file couldn't be read because it's empty");
|
throw Slic3r::RuntimeError("The supplied file couldn't be read because it's empty");
|
||||||
|
#endif // !ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
|
|
||||||
for (ModelObject *o : model.objects)
|
for (ModelObject *o : model.objects)
|
||||||
{
|
{
|
||||||
|
|
|
@ -49,6 +49,8 @@
|
||||||
#define ENABLE_SINKING_CONTOURS (1 && ENABLE_2_4_0_ALPHA0)
|
#define ENABLE_SINKING_CONTOURS (1 && ENABLE_2_4_0_ALPHA0)
|
||||||
// Enable implementation of retract acceleration in gcode processor
|
// Enable implementation of retract acceleration in gcode processor
|
||||||
#define ENABLE_RETRACT_ACCELERATION (1 && ENABLE_2_4_0_ALPHA0)
|
#define ENABLE_RETRACT_ACCELERATION (1 && ENABLE_2_4_0_ALPHA0)
|
||||||
|
// Enable save and save as commands to be enabled also when the plater is empty and allow to load empty projects
|
||||||
|
#define ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED (1 && ENABLE_2_4_0_ALPHA0)
|
||||||
|
|
||||||
|
|
||||||
#endif // _prusaslicer_technologies_h_
|
#endif // _prusaslicer_technologies_h_
|
||||||
|
|
|
@ -4108,13 +4108,24 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
if (visible_volumes.empty())
|
if (visible_volumes.empty())
|
||||||
return;
|
return;
|
||||||
|
#endif // !ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
|
|
||||||
BoundingBoxf3 volumes_box;
|
BoundingBoxf3 volumes_box;
|
||||||
for (const GLVolume* vol : visible_volumes) {
|
#if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
volumes_box.merge(vol->transformed_bounding_box());
|
if (!visible_volumes.empty()) {
|
||||||
|
#endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
|
for (const GLVolume* vol : visible_volumes) {
|
||||||
|
volumes_box.merge(vol->transformed_bounding_box());
|
||||||
|
}
|
||||||
|
#if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
// This happens for empty projects
|
||||||
|
volumes_box = wxGetApp().plater()->get_bed().get_bounding_box(true);
|
||||||
|
#endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
|
|
||||||
Camera camera;
|
Camera camera;
|
||||||
camera.set_type(camera_type);
|
camera.set_type(camera_type);
|
||||||
|
|
|
@ -824,15 +824,26 @@ bool MainFrame::can_start_new_project() const
|
||||||
|
|
||||||
bool MainFrame::can_save() const
|
bool MainFrame::can_save() const
|
||||||
{
|
{
|
||||||
|
#if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
|
return (m_plater != nullptr) &&
|
||||||
|
!m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false) &&
|
||||||
|
!m_plater->get_project_filename().empty() && m_plater->is_project_dirty();
|
||||||
|
#else
|
||||||
return (m_plater != nullptr) && !m_plater->model().objects.empty() &&
|
return (m_plater != nullptr) && !m_plater->model().objects.empty() &&
|
||||||
!m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false) &&
|
!m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false) &&
|
||||||
!m_plater->get_project_filename().empty() && m_plater->is_project_dirty();
|
!m_plater->get_project_filename().empty() && m_plater->is_project_dirty();
|
||||||
|
#endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MainFrame::can_save_as() const
|
bool MainFrame::can_save_as() const
|
||||||
{
|
{
|
||||||
|
#if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
|
return (m_plater != nullptr) &&
|
||||||
|
!m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false);
|
||||||
|
#else
|
||||||
return (m_plater != nullptr) && !m_plater->model().objects.empty() &&
|
return (m_plater != nullptr) && !m_plater->model().objects.empty() &&
|
||||||
!m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false);
|
!m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false);
|
||||||
|
#endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainFrame::save_project()
|
void MainFrame::save_project()
|
||||||
|
|
|
@ -5587,8 +5587,16 @@ void Plater::export_amf()
|
||||||
|
|
||||||
bool Plater::export_3mf(const boost::filesystem::path& output_path)
|
bool Plater::export_3mf(const boost::filesystem::path& output_path)
|
||||||
{
|
{
|
||||||
|
#if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
|
if (p->model.objects.empty()) {
|
||||||
|
MessageDialog dialog(nullptr, _L("The plater is empty.\nConfirm you want to save the project ?"), _L("Save project"), wxYES_NO);
|
||||||
|
if (dialog.ShowModal() != wxID_YES)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#else
|
||||||
if (p->model.objects.empty())
|
if (p->model.objects.empty())
|
||||||
return false;
|
return false;
|
||||||
|
#endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
|
||||||
|
|
||||||
wxString path;
|
wxString path;
|
||||||
bool export_config = true;
|
bool export_config = true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue