mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 20:51:12 -06:00 
			
		
		
		
	Comments and SLA stage definitions.
This commit is contained in:
		
							parent
							
								
									97b3d94760
								
							
						
					
					
						commit
						d7baac59ef
					
				
					 3 changed files with 74 additions and 25 deletions
				
			
		|  | @ -1624,28 +1624,27 @@ void GLGizmoSlaSupports::update_mesh() | |||
| void GLGizmoSlaSupports::on_deactivate() { | ||||
|     if(!m_model_object) return; | ||||
| 
 | ||||
|     sla::Controller supportctl; | ||||
|     std::cout << "Generating supports:" << std::endl; | ||||
| //    sla::Controller supportctl;
 | ||||
| //    std::cout << "Generating supports:" << std::endl;
 | ||||
| 
 | ||||
|     // TODO: somehow get the global status indicator
 | ||||
|     supportctl.statuscb = [] (unsigned st, const std::string& msg) { | ||||
|         std::cout << st << "% "  << msg << std::endl; | ||||
|     }; | ||||
| //    // TODO: somehow get the global status indicator
 | ||||
| //    supportctl.statuscb = [] (unsigned st, const std::string& msg) {
 | ||||
| //        std::cout << st << "% "  << msg << std::endl;
 | ||||
| //    };
 | ||||
| 
 | ||||
|     TriangleMesh&& m = m_model_object->raw_mesh(); | ||||
|     auto&& trafo = m_model_object_matrix.cast<float>(); | ||||
|     m.transform(trafo); | ||||
|     auto emesh = sla::to_eigenmesh(m); | ||||
| //    TriangleMesh&& m = m_model_object->raw_mesh();
 | ||||
| //    m.transform(m_model_object_matrix);
 | ||||
| //    auto emesh = sla::to_eigenmesh(m);
 | ||||
| 
 | ||||
|     sla::SupportConfig cfg; | ||||
|     sla::PointSet input = sla::support_points(*m_model_object, 0 /*instance*/); | ||||
| //    sla::SupportConfig cfg;
 | ||||
| //    sla::PointSet input = sla::support_points(*m_model_object, 0 /*instance*/);
 | ||||
| 
 | ||||
|     sla::SLASupportTree stree(input, emesh, cfg, supportctl); | ||||
| //    sla::SLASupportTree stree(input, emesh, cfg, supportctl);
 | ||||
| 
 | ||||
|     TriangleMesh output; | ||||
|     stree.merged_mesh(output); | ||||
| //    TriangleMesh output;
 | ||||
| //    stree.merged_mesh(output);
 | ||||
| 
 | ||||
|     _3DScene::reload_scene(m_parent.get_wxglcanvas(), false); | ||||
| //    _3DScene::reload_scene(m_parent.get_wxglcanvas(), false);
 | ||||
| } | ||||
| 
 | ||||
| Vec3f GLGizmoSlaSupports::unproject_on_mesh(const Vec2d& mouse_pos) | ||||
|  |  | |||
|  | @ -1,7 +1,21 @@ | |||
| #include "SLAPrint.hpp" | ||||
| #include "GUI.hpp" | ||||
| 
 | ||||
| namespace Slic3r { | ||||
| 
 | ||||
| const std::string SLAPrint::m_stage_labels[] = { | ||||
|     "", // IDLE,
 | ||||
|     L("Finding best rotation"), // FIND_ROTATION,
 | ||||
|     L("Scanning model structure"), // SUPPORT_POINTS,
 | ||||
|     L("Generating support tree"), // SUPPORT_TREE,
 | ||||
|     L("Generating base pool"), // BASE_POOL,
 | ||||
|     L("Slicing model"), // SLICE_MODEL,
 | ||||
|     L("Slicing supports"), // SLICE_SUPPORTS,
 | ||||
|     L("Exporting layers"), // EXPORT,
 | ||||
|     L("Prepared for printing"), // DONE,
 | ||||
|     L("SLA print preparation aborted")  // ABORT,
 | ||||
| }; | ||||
| 
 | ||||
| void SLAPrint::synch() { | ||||
|     m_gcfg = m_config_reader(); | ||||
|     // TODO: check model objects and instances
 | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ class ModelInstance; | |||
| class GLCanvas3D; | ||||
| class DynamicPrintConfig; | ||||
| 
 | ||||
| // Ok, this will be the driver to create background threads. Possibly
 | ||||
| // This will be the driver to create background threads. Possibly
 | ||||
| // implemented using a BackgroundSlicingProcess or something derived from that
 | ||||
| // The methods should be thread safe, obviously...
 | ||||
| class BackgroundProcess { | ||||
|  | @ -23,14 +23,23 @@ public: | |||
| 
 | ||||
|     virtual ~BackgroundProcess() {} | ||||
| 
 | ||||
|     /// schedule a task on the background
 | ||||
|     virtual void schedule(std::function<void()> fn) = 0; | ||||
| 
 | ||||
|     /// Report status change, used inside the worker thread
 | ||||
|     virtual void status(unsigned st, const std::string& msg) = 0; | ||||
| 
 | ||||
|     /// Check whether the calculation was canceled from the UI. Called by the
 | ||||
|     /// worker thread
 | ||||
|     virtual bool is_canceled() = 0; | ||||
| 
 | ||||
|     /// Setting up a callback that transfers the input parameters to the worker
 | ||||
|     /// thread. Appropriate synchronization has to be implemented here. A simple
 | ||||
|     /// condition variable and mutex pair should do the job.
 | ||||
|     virtual void on_input_changed(std::function<void()> synchfn) = 0; | ||||
| 
 | ||||
|     /// Determine the state of the background process. If something is running
 | ||||
|     /// returns true. If no job is running, returns false.
 | ||||
|     virtual bool is_running() = 0; | ||||
| }; | ||||
| 
 | ||||
|  | @ -47,8 +56,9 @@ public: | |||
|  * triangle meshes or receiving the rendering canvas and drawing on that | ||||
|  * directly. | ||||
|  * | ||||
|  * TODO: This class has to be implement the Print interface (not defined yet) | ||||
|  * to be usable as the input to the BackgroundSlicingProcess. | ||||
|  * TODO: This class uses the BackgroundProcess interface to create workers and | ||||
|  * manage input change events. An appropriate implementation can be derived | ||||
|  * from BackgroundSlicingProcess which is now working only with the FDM Print. | ||||
|  */ | ||||
| class SLAPrint /* : public Print */ { | ||||
| public: | ||||
|  | @ -57,6 +67,7 @@ public: | |||
|         BLOCKING, NON_BLOCKING | ||||
|     }; | ||||
| 
 | ||||
|     // Global SLA printing configuration
 | ||||
|     struct GlobalConfig { | ||||
|         double width_mm; | ||||
|         double height_mm; | ||||
|  | @ -67,6 +78,9 @@ public: | |||
| 
 | ||||
| private: | ||||
| 
 | ||||
|     // There will be a support tree for every instance of every ModelObject
 | ||||
|     // because if the object is rotated differently, the support should also be
 | ||||
|     // very different
 | ||||
|     struct PrintObjectInstance { | ||||
|         Transform3f tr; | ||||
|         std::unique_ptr<sla::SLASupportTree> support_tree_ptr; | ||||
|  | @ -75,11 +89,14 @@ private: | |||
| 
 | ||||
|     using InstanceMap = std::unordered_map<ModelInstance*, PrintObjectInstance>; | ||||
| 
 | ||||
|     // Every ModelObject will have its PrintObject here. It will contain the
 | ||||
|     // cached index-triangle structure (emesh) and the map of the instance cache
 | ||||
|     struct PrintObject { | ||||
|         sla::EigenMesh3D emesh; | ||||
|         InstanceMap instances; | ||||
|     }; | ||||
| 
 | ||||
|     // Map definition for the print objects
 | ||||
|     using ObjectMap = std::unordered_map<ModelObject*, PrintObject>; | ||||
| 
 | ||||
|     // Input data channels: ***************************************************
 | ||||
|  | @ -88,11 +105,12 @@ private: | |||
| 
 | ||||
|     // something to read out the config profiles and return the values we need.
 | ||||
|     std::function<GlobalConfig()> m_config_reader; | ||||
| 
 | ||||
|     // ************************************************************************
 | ||||
| 
 | ||||
|     GlobalConfig m_gcfg; | ||||
|     ObjectMap m_data; | ||||
|     std::shared_ptr<BackgroundProcess> m_process; | ||||
|     GlobalConfig m_gcfg;        // The global SLA print config instance
 | ||||
|     ObjectMap m_data;           // The model data cache (PrintObject's)
 | ||||
|     std::shared_ptr<BackgroundProcess> m_process; // The scheduler
 | ||||
| 
 | ||||
|     // For now it will just stop the whole process and invalidate everything
 | ||||
|     void synch(); | ||||
|  | @ -108,11 +126,29 @@ private: | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     enum Stages { | ||||
|         IDLE, | ||||
|         FIND_ROTATION, | ||||
|         SUPPORT_POINTS, | ||||
|         SUPPORT_TREE, | ||||
|         BASE_POOL, | ||||
|         SLICE_MODEL, | ||||
|         SLICE_SUPPORTS, | ||||
|         EXPORT, | ||||
|         DONE, | ||||
|         ABORT, | ||||
|         NUM_STAGES | ||||
|     }; | ||||
| 
 | ||||
|     static const std::string m_stage_labels[NUM_STAGES]; | ||||
| 
 | ||||
|     bool run(); | ||||
| public: | ||||
| 
 | ||||
|     SLAPrint(const Model * model, | ||||
|                     std::function<SLAPrint::GlobalConfig(void)> cfgreader = [](){ return SLAPrint::GlobalConfig(); }, | ||||
|                     std::shared_ptr<BackgroundProcess> scheduler = {}): | ||||
|              std::function<SLAPrint::GlobalConfig(void)> cfgreader = | ||||
|                     [](){ return SLAPrint::GlobalConfig(); }, | ||||
|              std::shared_ptr<BackgroundProcess> scheduler = {}): | ||||
|         m_model(model), m_config_reader(cfgreader) | ||||
|     { | ||||
|         synch(); | ||||
|  | @ -123,7 +159,7 @@ public: | |||
|     // This will start the calculation using the
 | ||||
|     bool start(std::shared_ptr<BackgroundProcess> scheduler); | ||||
| 
 | ||||
|     // Get the full support structure (including the supports)
 | ||||
|     // Get the full support structure (including the base pool)
 | ||||
|     // This should block until the supports are not ready?
 | ||||
|     bool support_mesh(TriangleMesh& output, CallType calltype = BLOCKING); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 tamasmeszaros
						tamasmeszaros