mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Merge remote-tracking branch 'origin/tm_sla_supports_backend' into dev_native
This commit is contained in:
		
						commit
						c6695538a9
					
				
					 5 changed files with 76 additions and 2 deletions
				
			
		|  | @ -196,6 +196,11 @@ void SLAPrint::process() | |||
|     } | ||||
| } | ||||
| 
 | ||||
| void SLAPrint::render_supports(SLASupportRenderer &renderer) | ||||
| { | ||||
|     std::cout << "Would show the SLA supports" << std::endl; | ||||
| } | ||||
| 
 | ||||
| SLAPrintObject::SLAPrintObject(SLAPrint *print, ModelObject *model_object): | ||||
|     Inherited(print), | ||||
|     m_model_object(model_object), | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ enum SLAPrintObjectStep { | |||
| }; | ||||
| 
 | ||||
| class SLAPrint; | ||||
| class GLCanvas; | ||||
| 
 | ||||
| using _SLAPrintObjectBase = | ||||
|     PrintObjectBaseWithState<SLAPrint, SLAPrintObjectStep, slaposCount>; | ||||
|  | @ -35,6 +36,7 @@ private: // Prevents erroneous use by other classes. | |||
| public: | ||||
|     const ModelObject*      model_object() const    { return m_model_object; } | ||||
|     ModelObject*            model_object()          { return m_model_object; } | ||||
|     TriangleMesh            support_mesh() const; | ||||
| 
 | ||||
|     // I refuse to grantee copying (Tamas)
 | ||||
|     SLAPrintObject(const SLAPrintObject&) = delete; | ||||
|  | @ -78,6 +80,37 @@ private: | |||
|     std::unique_ptr<SupportData> m_supportdata; | ||||
| }; | ||||
| 
 | ||||
| using PrintObjects = std::vector<SLAPrintObject*>; | ||||
| 
 | ||||
| class TriangleMesh; | ||||
| 
 | ||||
| class SLASupportRenderer { | ||||
| public: | ||||
| 
 | ||||
|     virtual ~SLASupportRenderer() {} | ||||
| 
 | ||||
|     enum Buttons { | ||||
|         LEFT, RIGHT, MIDDLE | ||||
|     }; | ||||
| 
 | ||||
|     enum MType { | ||||
|         ENGAGE, RELEASE, HOVER | ||||
|     }; | ||||
| 
 | ||||
|     struct MouseEvt { | ||||
|         Buttons button; MType type; | ||||
|     }; | ||||
| 
 | ||||
|     using ClickCb = std::function<void(MouseEvt)>; | ||||
|     using Mesh = TriangleMesh; | ||||
| 
 | ||||
|     virtual void add_pillar(const Mesh&, ClickCb on_mouse_evt) = 0; | ||||
|     virtual void add_head(const Mesh&, ClickCb on_mouse_evt) = 0; | ||||
|     virtual void add_bridge(const Mesh&, ClickCb on_mouse_evt) = 0; | ||||
|     virtual void add_junction(const Mesh&, ClickCb on_mouse_evt) = 0; | ||||
|     virtual void add_pad(const Mesh&, ClickCb on_mouse_evt) = 0; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief This class is the high level FSM for the SLA printing process. | ||||
|  * | ||||
|  | @ -108,11 +141,13 @@ public: | |||
|     ApplyStatus         apply(const Model &model, const DynamicPrintConfig &config) override; | ||||
|     void                process() override; | ||||
| 
 | ||||
|     void                render_supports(SLASupportRenderer& renderer); | ||||
| 
 | ||||
| private: | ||||
|     Model                           m_model; | ||||
|     SLAPrinterConfig                m_printer_config; | ||||
|     SLAMaterialConfig               m_material_config; | ||||
|     std::vector<SLAPrintObject*>	m_objects; | ||||
|     PrintObjects                    m_objects; | ||||
| 
 | ||||
| 	friend SLAPrintObject; | ||||
| }; | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| #include "GLGizmo.hpp" | ||||
| 
 | ||||
| #include "GUI.hpp" | ||||
| #include "GUI_App.hpp" | ||||
| 
 | ||||
| #include "../../libslic3r/Utils.hpp" | ||||
| 
 | ||||
|  | @ -1680,6 +1681,9 @@ void GLGizmoSlaSupports::clicked_on_object(const Vec2d& mouse_position) | |||
|         m_grabbers.push_back(Grabber()); | ||||
|         m_grabbers.back().center = new_pos.cast<double>(); | ||||
|         m_model_object->sla_support_points.push_back(new_pos); | ||||
| 
 | ||||
|         // This should trigger the support generation
 | ||||
|         wxGetApp().plater()->reslice(); | ||||
|     } | ||||
|     catch (...) {} | ||||
| } | ||||
|  | @ -1689,12 +1693,18 @@ void GLGizmoSlaSupports::delete_current_grabber(bool delete_all) | |||
|     if (delete_all) { | ||||
|         m_grabbers.clear(); | ||||
|         m_model_object->sla_support_points.clear(); | ||||
| 
 | ||||
|         // This should trigger the support generation
 | ||||
|         wxGetApp().plater()->reslice(); | ||||
|     } | ||||
|     else | ||||
|         if (m_hover_id != -1) { | ||||
|             m_grabbers.erase(m_grabbers.begin() + m_hover_id); | ||||
|             m_model_object->sla_support_points.erase(m_model_object->sla_support_points.begin() + m_hover_id); | ||||
|             m_hover_id = -1; | ||||
| 
 | ||||
|             // This should trigger the support generation
 | ||||
|             wxGetApp().plater()->reslice(); | ||||
|         } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -989,7 +989,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) : | |||
|     background_process.set_sliced_event(EVT_SLICING_COMPLETED); | ||||
|     background_process.set_finished_event(EVT_PROCESS_COMPLETED); | ||||
| 	// Default printer technology for default config.
 | ||||
| 	background_process.select_technology(wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology()); | ||||
|     background_process.select_technology(q->printer_technology()); | ||||
|     // Register progress callback from the Print class to the Platter.
 | ||||
|     print.set_status_callback([this](int percent, const std::string &message) { | ||||
|         wxCommandEvent event(EVT_PROGRESS_BAR); | ||||
|  | @ -1810,6 +1810,21 @@ void Plater::priv::on_process_completed(wxCommandEvent &evt) | |||
|     // refresh preview
 | ||||
|     if (this->preview != nullptr) | ||||
|         this->preview->reload_print(); | ||||
| 
 | ||||
|     // TODO: this needs to be implemented somehow
 | ||||
|     if(q->printer_technology() == PrinterTechnology::ptSLA) { | ||||
| 
 | ||||
|         class Renderer: public SLASupportRenderer { | ||||
|         public: | ||||
|             void add_pillar(const Mesh&, ClickCb ) override {} | ||||
|             void add_head(const Mesh&, ClickCb) override {} | ||||
|             void add_bridge(const Mesh&, ClickCb) override {} | ||||
|             void add_junction(const Mesh&, ClickCb) override {} | ||||
|             void add_pad(const Mesh&, ClickCb) override {} | ||||
|         } renderer; | ||||
| 
 | ||||
|         sla_print.render_supports(renderer); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Plater::priv::on_layer_editing_toggled(bool enable) | ||||
|  | @ -2363,6 +2378,11 @@ wxGLCanvas* Plater::canvas3D() | |||
|     return p->canvas3D; | ||||
| } | ||||
| 
 | ||||
| PrinterTechnology Plater::printer_technology() const | ||||
| { | ||||
|     return wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology(); | ||||
| } | ||||
| 
 | ||||
| void Plater::changed_object(int obj_idx) | ||||
| { | ||||
|     if (obj_idx < 0) | ||||
|  |  | |||
|  | @ -19,6 +19,8 @@ namespace Slic3r { | |||
| 
 | ||||
| class Model; | ||||
| class Print; | ||||
| class SLAPrint; | ||||
| 
 | ||||
| namespace GUI { | ||||
| 
 | ||||
| class MainFrame; | ||||
|  | @ -137,6 +139,8 @@ public: | |||
|     int get_selected_object_idx(); | ||||
|     bool is_single_full_object_selection(); | ||||
|     wxGLCanvas* canvas3D(); | ||||
| 
 | ||||
|     PrinterTechnology printer_technology() const; | ||||
| private: | ||||
|     struct priv; | ||||
|     std::unique_ptr<priv> p; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 tamasmeszaros
						tamasmeszaros