mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	 9f96c8adec
			
		
	
	
		9f96c8adec
		
	
	
	
	
		
			
			Wipe tower is needed if support base and interface use different materials. Jira: STUDIO-1336 Change-Id: I006ece952aac1a0f0a57721c2cd1b52b2ceee28a (cherry picked from commit 1a387e4b1607dee36f5abe499892f027e244fbeb)
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #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<ModelInstance*> m_unarranged;
 | |
|     std::map<int, ArrangePolygons> m_selected_groups;   // groups of selected items for sequential printing
 | |
|     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<ProgressIndicator> 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<arrangement::ArrangePolygon> 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 get_arrange_params(Plater *p);
 | |
| 
 | |
| }} // namespace Slic3r::GUI
 | |
| 
 | |
| #endif // ARRANGEJOB_HPP
 |