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.
|
// Pair the object layers with the support layers by z.
|
||||||
size_t idx_object_layer = 0;
|
size_t idx_object_layer = 0;
|
||||||
size_t idx_support_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()) {
|
while (idx_object_layer < object.layers().size() || idx_support_layer < object.support_layers().size()) {
|
||||||
LayerToPrint layer_to_print;
|
LayerToPrint layer_to_print;
|
||||||
layer_to_print.object_layer = (idx_object_layer < object.layers().size()) ? object.layers()[idx_object_layer ++] : nullptr;
|
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);
|
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;
|
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());
|
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()) {
|
if (! mm3_per_mm.empty()) {
|
||||||
// In order to honor max_print_speed we need to find a target volumetric
|
// 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
|
// volumetric speed as the volumetric speed produced by printing the
|
||||||
// smallest cross-section at the maximum speed: any larger cross-section
|
// smallest cross-section at the maximum speed: any larger cross-section
|
||||||
// will need slower feedrates.
|
// 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);
|
_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 = print.placeholder_parser();
|
||||||
m_placeholder_parser.update_timestamp();
|
m_placeholder_parser.update_timestamp();
|
||||||
print.update_object_placeholders(m_placeholder_parser.config_writable(), ".gcode");
|
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
|
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
|
// extrude arc or line
|
||||||
if (m_enable_extrusion_role_markers)
|
if (m_enable_extrusion_role_markers)
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
#include <atomic>
|
||||||
|
|
||||||
class wxImage;
|
class wxImage;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue