mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Tech ENABLE_FIX_PREVIEW_OPTIONS_Z - Enable fixing the z position of seams (and other options) in preview
This commit is contained in:
		
							parent
							
								
									0da0a7b2a0
								
							
						
					
					
						commit
						6f678c09d1
					
				
					 4 changed files with 78 additions and 0 deletions
				
			
		|  | @ -828,6 +828,9 @@ bool GCodeProcessor::contains_reserved_tags(const std::string& gcode, unsigned i | |||
| } | ||||
| 
 | ||||
| GCodeProcessor::GCodeProcessor() | ||||
| #if ENABLE_FIX_PREVIEW_OPTIONS_Z | ||||
| : m_options_z_corrector(m_result) | ||||
| #endif // ENABLE_FIX_PREVIEW_OPTIONS_Z
 | ||||
| { | ||||
|     reset(); | ||||
|     m_time_processor.machines[static_cast<size_t>(PrintEstimatedStatistics::ETimeMode::Normal)].line_m73_main_mask = "M73 P%s R%s\n"; | ||||
|  | @ -1202,6 +1205,10 @@ void GCodeProcessor::reset() | |||
|     m_last_default_color_id = 0; | ||||
| #endif // ENABLE_FIX_IMPORTING_COLOR_PRINT_VIEW_INTO_GCODEVIEWER
 | ||||
| 
 | ||||
| #if ENABLE_FIX_PREVIEW_OPTIONS_Z | ||||
|     m_options_z_corrector.reset(); | ||||
| #endif // ENABLE_FIX_PREVIEW_OPTIONS_Z
 | ||||
| 
 | ||||
| #if ENABLE_GCODE_VIEWER_DATA_CHECKING | ||||
|     m_mm3_per_mm_compare.reset(); | ||||
|     m_height_compare.reset(); | ||||
|  | @ -1781,6 +1788,9 @@ void GCodeProcessor::process_tags(const std::string_view comment) | |||
| #if ENABLE_FIX_IMPORTING_COLOR_PRINT_VIEW_INTO_GCODEVIEWER | ||||
|             CustomGCode::Item item = { static_cast<double>(m_end_position[2]), CustomGCode::ColorChange, extruder_id + 1, color, "" }; | ||||
|             m_result.custom_gcode_per_print_z.emplace_back(item); | ||||
| #if ENABLE_FIX_PREVIEW_OPTIONS_Z | ||||
|             m_options_z_corrector.set(); | ||||
| #endif // ENABLE_FIX_PREVIEW_OPTIONS_Z
 | ||||
|             process_custom_gcode_time(CustomGCode::ColorChange); | ||||
|             process_filaments(CustomGCode::ColorChange); | ||||
| #endif // ENABLE_FIX_IMPORTING_COLOR_PRINT_VIEW_INTO_GCODEVIEWER
 | ||||
|  | @ -1800,6 +1810,9 @@ void GCodeProcessor::process_tags(const std::string_view comment) | |||
| #if ENABLE_FIX_IMPORTING_COLOR_PRINT_VIEW_INTO_GCODEVIEWER | ||||
|         CustomGCode::Item item = { static_cast<double>(m_end_position[2]), CustomGCode::PausePrint, m_extruder_id + 1, "", "" }; | ||||
|         m_result.custom_gcode_per_print_z.emplace_back(item); | ||||
| #if ENABLE_FIX_PREVIEW_OPTIONS_Z | ||||
|         m_options_z_corrector.set(); | ||||
| #endif // ENABLE_FIX_PREVIEW_OPTIONS_Z
 | ||||
| #endif // ENABLE_FIX_IMPORTING_COLOR_PRINT_VIEW_INTO_GCODEVIEWER
 | ||||
|         process_custom_gcode_time(CustomGCode::PausePrint); | ||||
|         return; | ||||
|  | @ -1811,6 +1824,9 @@ void GCodeProcessor::process_tags(const std::string_view comment) | |||
| #if ENABLE_FIX_IMPORTING_COLOR_PRINT_VIEW_INTO_GCODEVIEWER | ||||
|         CustomGCode::Item item = { static_cast<double>(m_end_position[2]), CustomGCode::Custom, m_extruder_id + 1, "", "" }; | ||||
|         m_result.custom_gcode_per_print_z.emplace_back(item); | ||||
| #if ENABLE_FIX_PREVIEW_OPTIONS_Z | ||||
|         m_options_z_corrector.set(); | ||||
| #endif // ENABLE_FIX_PREVIEW_OPTIONS_Z
 | ||||
| #endif // ENABLE_FIX_IMPORTING_COLOR_PRINT_VIEW_INTO_GCODEVIEWER
 | ||||
|         return; | ||||
|     } | ||||
|  | @ -2391,7 +2407,9 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) | |||
|         else { | ||||
|             if (m_end_position[Z] > m_extruded_last_z + EPSILON) { | ||||
|                 m_height = m_end_position[Z] - m_extruded_last_z; | ||||
| #if !ENABLE_FIX_PREVIEW_OPTIONS_Z | ||||
|                 m_extruded_last_z = m_end_position[Z]; | ||||
| #endif // !ENABLE_FIX_PREVIEW_OPTIONS_Z
 | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  | @ -2401,6 +2419,11 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) | |||
|         if (m_end_position[Z] == 0.0f) | ||||
|             m_end_position[Z] = m_height; | ||||
| 
 | ||||
| #if ENABLE_FIX_PREVIEW_OPTIONS_Z | ||||
|         m_extruded_last_z = m_end_position[Z]; | ||||
|         m_options_z_corrector.update(m_height); | ||||
| #endif // ENABLE_FIX_PREVIEW_OPTIONS_Z
 | ||||
| 
 | ||||
| #if ENABLE_GCODE_VIEWER_DATA_CHECKING | ||||
|         m_height_compare.update(m_height, m_extrusion_role); | ||||
| #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
 | ||||
|  |  | |||
|  | @ -390,6 +390,45 @@ namespace Slic3r { | |||
|             bool has_first_vertex() const { return m_first_vertex.has_value(); } | ||||
|         }; | ||||
| 
 | ||||
| #if ENABLE_FIX_PREVIEW_OPTIONS_Z | ||||
|         // Helper class used to fix the z for color change, pause print and
 | ||||
|         // custom gcode markes
 | ||||
|         class OptionsZCorrector | ||||
|         { | ||||
|             Result& m_result; | ||||
|             std::optional<size_t> m_move_id; | ||||
|             std::optional<size_t> m_custom_gcode_per_print_z_id; | ||||
| 
 | ||||
|         public: | ||||
|             explicit OptionsZCorrector(Result& result) : m_result(result) { | ||||
|             } | ||||
| 
 | ||||
|             void set() { | ||||
|                 m_move_id = m_result.moves.size() - 1; | ||||
|                 m_custom_gcode_per_print_z_id = m_result.custom_gcode_per_print_z.size() - 1; | ||||
|             } | ||||
| 
 | ||||
|             void update(float height) { | ||||
|                 if (!m_move_id.has_value() || !m_custom_gcode_per_print_z_id.has_value()) | ||||
|                     return; | ||||
| 
 | ||||
|                 const Vec3f position = m_result.moves.back().position; | ||||
| 
 | ||||
|                 MoveVertex& move = m_result.moves.emplace_back(m_result.moves[m_move_id.value()]); | ||||
|                 move.position = position; | ||||
|                 move.height = height; | ||||
|                 m_result.moves.erase(m_result.moves.begin() + m_move_id.value()); | ||||
|                 m_result.custom_gcode_per_print_z[m_custom_gcode_per_print_z_id.value()].print_z = position.z(); | ||||
|                 reset(); | ||||
|             } | ||||
| 
 | ||||
|             void reset() { | ||||
|                 m_move_id.reset(); | ||||
|                 m_custom_gcode_per_print_z_id.reset(); | ||||
|             } | ||||
|         }; | ||||
| #endif // ENABLE_FIX_PREVIEW_OPTIONS_Z
 | ||||
| 
 | ||||
| #if ENABLE_GCODE_VIEWER_DATA_CHECKING | ||||
|         struct DataChecker | ||||
|         { | ||||
|  | @ -494,6 +533,9 @@ namespace Slic3r { | |||
|         CpColor m_cp_color; | ||||
|         bool m_use_volumetric_e; | ||||
|         SeamsDetector m_seams_detector; | ||||
| #if ENABLE_FIX_PREVIEW_OPTIONS_Z | ||||
|         OptionsZCorrector m_options_z_corrector; | ||||
| #endif // ENABLE_FIX_PREVIEW_OPTIONS_Z
 | ||||
| #if ENABLE_FIX_IMPORTING_COLOR_PRINT_VIEW_INTO_GCODEVIEWER | ||||
|         size_t m_last_default_color_id; | ||||
| #endif // ENABLE_FIX_IMPORTING_COLOR_PRINT_VIEW_INTO_GCODEVIEWER
 | ||||
|  |  | |||
|  | @ -57,4 +57,13 @@ | |||
| #define ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED (1 && ENABLE_2_4_0_ALPHA0) | ||||
| 
 | ||||
| 
 | ||||
| //====================
 | ||||
| // 2.4.0.alpha2 techs
 | ||||
| //====================
 | ||||
| #define ENABLE_2_4_0_ALPHA2 1 | ||||
| 
 | ||||
| // Enable fixing the z position of color change, pause print and custom gcode markers in preview
 | ||||
| #define ENABLE_FIX_PREVIEW_OPTIONS_Z (1 && ENABLE_SEAMS_USING_MODELS && ENABLE_FIX_IMPORTING_COLOR_PRINT_VIEW_INTO_GCODEVIEWER && ENABLE_2_4_0_ALPHA2) | ||||
| 
 | ||||
| 
 | ||||
| #endif // _prusaslicer_technologies_h_
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 enricoturri1966
						enricoturri1966