diff --git a/src/slic3r/GUI/ArrangeHelper.cpp b/src/libslic3r/ArrangeHelper.cpp similarity index 97% rename from src/slic3r/GUI/ArrangeHelper.cpp rename to src/libslic3r/ArrangeHelper.cpp index b5f5699376..1f68f8f841 100644 --- a/src/slic3r/GUI/ArrangeHelper.cpp +++ b/src/libslic3r/ArrangeHelper.cpp @@ -8,13 +8,15 @@ #include #include "boost/regex.hpp" +#include "boost/property_tree/json_parser.hpp" +#include "boost/algorithm/string/replace.hpp"" namespace Slic3r { -static Sequential::PrinterGeometry get_printer_geometry(const DynamicPrintConfig& config) +static Sequential::PrinterGeometry get_printer_geometry(const ConfigBase& config) { enum ShapeType { BOX, @@ -228,7 +230,7 @@ static std::vector get_objects_to_print(const Model& -void arrange_model_sequential(Model& model, const DynamicPrintConfig& config) +void arrange_model_sequential(Model& model, const ConfigBase& config) { SeqArrange seq_arrange(model, config); seq_arrange.process_seq_arrange([](int) {}); @@ -237,7 +239,7 @@ void arrange_model_sequential(Model& model, const DynamicPrintConfig& config) -SeqArrange::SeqArrange(const Model& model, const DynamicPrintConfig& config) +SeqArrange::SeqArrange(const Model& model, const ConfigBase& config) { m_printer_geometry = get_printer_geometry(config); m_solver_configuration = get_solver_config(m_printer_geometry); @@ -304,7 +306,7 @@ void SeqArrange::apply_seq_arrange(Model& model) const -bool check_seq_printability(const Model& model, const DynamicPrintConfig& config) +bool check_seq_printability(const Model& model, const ConfigBase& config) { Sequential::PrinterGeometry printer_geometry = get_printer_geometry(config); Sequential::SolverConfiguration solver_config = get_solver_config(printer_geometry); diff --git a/src/slic3r/GUI/ArrangeHelper.hpp b/src/libslic3r/ArrangeHelper.hpp similarity index 72% rename from src/slic3r/GUI/ArrangeHelper.hpp rename to src/libslic3r/ArrangeHelper.hpp index c9b1983df6..91a0921967 100644 --- a/src/slic3r/GUI/ArrangeHelper.hpp +++ b/src/libslic3r/ArrangeHelper.hpp @@ -1,5 +1,5 @@ -#ifndef slic3r_Arrange_Helper_hpp -#define slic3r_Arrange_Helper_hpp +#ifndef libslic3r_Arrange_Helper_hpp +#define libslic3r_Arrange_Helper_hpp #include "libseqarrange/seq_interface.hpp" @@ -8,10 +8,10 @@ namespace Slic3r { class Model; - class DynamicPrintConfig; + class ConfigBase; - void arrange_model_sequential(Model& model, const DynamicPrintConfig& config); - bool check_seq_printability(const Model& model, const DynamicPrintConfig& config); + void arrange_model_sequential(Model& model, const ConfigBase& config); + bool check_seq_printability(const Model& model, const ConfigBase& config); // This is just a helper class to collect data for seq. arrangement, running the arrangement @@ -19,7 +19,7 @@ namespace Slic3r { // into a separate thread without copying the Model or sharing it with UI thread. class SeqArrange { public: - explicit SeqArrange(const Model& model, const DynamicPrintConfig& config); + explicit SeqArrange(const Model& model, const ConfigBase& config); void process_seq_arrange(std::function progress_fn); void apply_seq_arrange(Model& model) const; diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 3d79437076..c3ab9c3a17 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -34,6 +34,8 @@ set(SLIC3R_SOURCES AABBTreeLines.hpp AABBMesh.hpp AABBMesh.cpp + ArrangeHelper.cpp + ArrangeHelper.hpp Algorithm/LineSegmentation/LineSegmentation.cpp Algorithm/LineSegmentation/LineSegmentation.hpp Algorithm/PathSorting.hpp @@ -603,6 +605,7 @@ target_link_libraries(libslic3r PUBLIC agg ankerl boost_headeronly + libseqarrange ) if (APPLE) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 5b40ab7d8f..b62827f799 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -37,6 +37,7 @@ #include "Utils.hpp" #include "BuildVolume.hpp" #include "format.hpp" +#include "ArrangeHelper.hpp" #include @@ -462,7 +463,7 @@ std::string Print::validate(std::vector* warnings) const return _u8L("The supplied settings will cause an empty print."); if (m_config.complete_objects) { - if (false) // LUKAS: To be fixed in the next commit. + if (! check_seq_printability(m_model, m_config)) return _u8L("Some objects are too close; your extruder will collide with them."); } diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 739b6032bb..1645f3ccad 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -17,8 +17,6 @@ set(SLIC3R_GUI_SOURCES pchheader.hpp GUI/AboutDialog.cpp GUI/AboutDialog.hpp - GUI/ArrangeHelper.cpp - GUI/ArrangeHelper.hpp GUI/ArrangeSettingsDialogImgui.hpp GUI/ArrangeSettingsDialogImgui.cpp GUI/UserAccountCommunication.cpp @@ -457,7 +455,6 @@ target_link_libraries( stb_dxt fastfloat boost_headeronly - libseqarrange ) if (MSVC) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 40b15aaa30..0ac25ee39d 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -44,7 +44,7 @@ #include "I18N.hpp" #include "NotificationManager.hpp" #include "format.hpp" -#include "ArrangeHelper.hpp" +#include "libslic3r/ArrangeHelper.hpp" #include "slic3r/GUI/BitmapCache.hpp" #include "slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp" @@ -2143,33 +2143,6 @@ void GLCanvas3D::render() if (show_imgui_demo_window) ImGui::ShowDemoWindow(); #endif // SHOW_IMGUI_DEMO_WINDOW - - - - { - // This is just temporary pipe to export data to the separate arrange algorithm - // and importing the result back. TESTING ONLY !!! - static auto time_start = std::chrono::high_resolution_clock::now(); - auto time_now = std::chrono::high_resolution_clock::now(); - int time_limit_s = 1; - static bool last_res = 0; - bool valid = std::chrono::duration_cast(time_now - time_start).count() < time_limit_s; - - ImGui::Begin("TESTING ONLY (arrange)"); - if (ImGui::Button("Test seq printability:")) { - last_res = check_seq_printability(wxGetApp().plater()->model(), *m_config); - time_start = std::chrono::high_resolution_clock::now(); - } - ImGui::SameLine(); - ImGui::TextColored((valid && last_res ? ImVec4(0.,1.,0.,1.) : (valid ? ImVec4(1.,0.,0.,1.) : ImVec4(0.5,.5,0.5,1.))) , "\u25a0"); - ImGui::Text("(So far, multiple beds are not accounted for.)"); - ImGui::End(); - } - - - - - const bool is_looking_downward = camera.is_looking_downward(); // draw scene diff --git a/src/slic3r/GUI/Jobs/SeqArrangeJob.cpp b/src/slic3r/GUI/Jobs/SeqArrangeJob.cpp index 5cd54a9403..63d788bc58 100644 --- a/src/slic3r/GUI/Jobs/SeqArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/SeqArrangeJob.cpp @@ -1,6 +1,7 @@ #include "SeqArrangeJob.hpp" -#include "slic3r/GUI/ArrangeHelper.hpp" +#include "libslic3r/ArrangeHelper.hpp" + #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 1531841986..dd27b21659 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -139,7 +139,7 @@ #include "PresetArchiveDatabase.hpp" #include "BulkExportDialog.hpp" -#include "ArrangeHelper.hpp" +#include "libslic3r/ArrangeHelper.hpp" #ifdef __APPLE__ #include "Gizmos/GLGizmosManager.hpp"