#ifndef ARRANGEJOB_HPP #define ARRANGEJOB_HPP #include "PlaterJob.hpp" #include "slic3r/GUI/Plater.hpp" #include "libslic3r/Arrange.hpp" #include "libslic3r/Model.hpp" namespace Slic3r { class ModelInstance; namespace GUI { class ArrangeJob : public PlaterJob { using ArrangePolygon = arrangement::ArrangePolygon; using ArrangePolygons = arrangement::ArrangePolygons; //BBS: add locked logic ArrangePolygons m_selected, m_unselected, m_unprintable, m_locked; std::vector m_unarranged; std::map m_selected_groups; // groups of selected items for sequential printing std::vector m_uncompatible_plates; // plate indices with different printing sequence than global arrangement::ArrangeParams params; int current_plate_index = 0; Polygon bed_poly; // clear m_selected and m_unselected, reserve space for next usage void clear_input(); // Prepare the selected and unselected items separately. If nothing is // selected, behaves as if everything would be selected. void prepare_selected(); void prepare_all(); //BBS:prepare the items from current selected partplate void prepare_partplate(); void prepare_wipe_tower(); ArrangePolygon prepare_arrange_polygon(void* instance); protected: void prepare() override; void check_unprintable(); void on_exception(const std::exception_ptr &) override; void process() override; public: ArrangeJob(std::shared_ptr pri, Plater *plater) : PlaterJob{std::move(pri), plater} {} int status_range() const override { // ensure finalize() is called after all operations in process() is finished. return int(m_selected.size() + m_unprintable.size() + 1); } void finalize() override; }; std::optional get_wipe_tower_arrangepoly(const Plater &); // The gap between logical beds in the x axis expressed in ratio of // the current bed width. static const constexpr double LOGICAL_BED_GAP = 1. / 5.; //BBS: add sudoku-style strides for x and y // Stride between logical beds double bed_stride_x(const Plater* plater); double bed_stride_y(const Plater* plater); arrangement::ArrangeParams init_arrange_params(Plater *p); }} // namespace Slic3r::GUI #endif // ARRANGEJOB_HPP