mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Merge remote-tracking branch 'remotes/origin/master' into vb_picking_fix
This commit is contained in:
		
						commit
						abd89e4f9a
					
				
					 2 changed files with 23 additions and 13 deletions
				
			
		|  | @ -442,6 +442,7 @@ std::vector<GCode::LayerToPrint> GCode::collect_layers_to_print(const PrintObjec | |||
|     // Pair the object layers with the support layers by z.
 | ||||
|     size_t idx_object_layer  = 0; | ||||
|     size_t idx_support_layer = 0; | ||||
|     const LayerToPrint* last_extrusion_layer = nullptr; | ||||
|     while (idx_object_layer < object.layers().size() || idx_support_layer < object.support_layers().size()) { | ||||
|         LayerToPrint layer_to_print; | ||||
|         layer_to_print.object_layer  = (idx_object_layer < object.layers().size()) ? object.layers()[idx_object_layer ++] : nullptr; | ||||
|  | @ -456,17 +457,25 @@ std::vector<GCode::LayerToPrint> GCode::collect_layers_to_print(const PrintObjec | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // Let's make sure that the last layer is not empty, so we don't build on top of it.
 | ||||
|         if (! layers_to_print.empty() | ||||
|          && ((layer_to_print.object_layer && layer_to_print.object_layer->has_extrusions()) | ||||
|           || (layer_to_print.support_layer && layer_to_print.support_layer->has_extrusions())) | ||||
|          && (! layers_to_print.back().object_layer  || ! layers_to_print.back().object_layer->has_extrusions()) | ||||
|          && (! layers_to_print.back().support_layer || ! layers_to_print.back().support_layer->has_extrusions())) | ||||
|             throw std::runtime_error(_(L("Empty layers detected, the output would not be printable.")) + "\n\n" + | ||||
|                                      _(L("Object name: ")) + object.model_object()->name + "\n" + _(L("Print z: ")) + | ||||
|                                      std::to_string(layers_to_print.back().print_z())); | ||||
| 
 | ||||
|         layers_to_print.emplace_back(layer_to_print); | ||||
| 
 | ||||
|         // In case there are extrusions on this layer, check there is a layer to lay it on.
 | ||||
|         if ((layer_to_print.object_layer && layer_to_print.object_layer->has_extrusions()) | ||||
|          || (layer_to_print.support_layer && layer_to_print.support_layer->has_extrusions())) { | ||||
|             double support_contact_z = (last_extrusion_layer && last_extrusion_layer->support_layer) | ||||
|                                        ? object.config().support_material_contact_distance | ||||
|                                        : 0.; | ||||
|             double maximal_print_z = (last_extrusion_layer ? last_extrusion_layer->print_z() : 0.) | ||||
|                                     + layer_to_print.layer()->height | ||||
|                                     + support_contact_z; | ||||
| 
 | ||||
|             if (layer_to_print.print_z() > maximal_print_z + EPSILON) | ||||
|                 throw std::runtime_error(_(L("Empty layers detected, the output would not be printable.")) + "\n\n" + | ||||
|                                          _(L("Object name: ")) + object.model_object()->name + "\n" + _(L("Print z: ")) + | ||||
|                                          std::to_string(layers_to_print.back().print_z())); | ||||
|             // Remember last layer with extrusions.
 | ||||
|             last_extrusion_layer = &layers_to_print.back(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return layers_to_print; | ||||
|  | @ -766,7 +775,7 @@ void GCode::_do_export(Print &print, FILE *file) | |||
|         mm3_per_mm.erase(std::remove_if(mm3_per_mm.begin(), mm3_per_mm.end(), [](double v) { return v < 0.000001; }), mm3_per_mm.end()); | ||||
|         if (! mm3_per_mm.empty()) { | ||||
|             // In order to honor max_print_speed we need to find a target volumetric
 | ||||
|             // speed that we can use throughout the print. So we define this target 
 | ||||
|             // speed that we can use throughout the print. So we define this target 
 | ||||
|             // volumetric speed as the volumetric speed produced by printing the 
 | ||||
|             // smallest cross-section at the maximum speed: any larger cross-section
 | ||||
|             // will need slower feedrates.
 | ||||
|  | @ -833,7 +842,7 @@ void GCode::_do_export(Print &print, FILE *file) | |||
|             _writeln(file, GCodeTimeEstimator::Silent_First_M73_Output_Placeholder_Tag); | ||||
|     } | ||||
| 
 | ||||
|     // Prepare the helper object for replacing placeholders in custom G-code and output filename.
 | ||||
|     // Prepare the helper object for replacing placeholders in custom G-code and output filename.
 | ||||
|     m_placeholder_parser = print.placeholder_parser(); | ||||
|     m_placeholder_parser.update_timestamp(); | ||||
|     print.update_object_placeholders(m_placeholder_parser.config_writable(), ".gcode"); | ||||
|  | @ -2617,7 +2626,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, | |||
|             EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm | ||||
|         ); | ||||
|     } | ||||
|     double F = speed * 60;  // convert mm/sec to mm/min
 | ||||
|     double F = speed * 60;  // convert mm/sec to mm/min
 | ||||
|      | ||||
|     // extrude arc or line
 | ||||
|     if (m_enable_extrusion_role_markers) | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ | |||
| #include <string> | ||||
| #include <vector> | ||||
| #include <thread> | ||||
| #include <atomic> | ||||
| 
 | ||||
| class wxImage; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bubnikv
						bubnikv