mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-12-05 16:51:07 -07:00
First complete working version
This commit is contained in:
parent
5aba047275
commit
d663947a0c
6 changed files with 42 additions and 63 deletions
|
|
@ -1873,15 +1873,14 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
|
|||
|
||||
if (print.config().spiral_mode.value)
|
||||
m_spiral_vase = make_unique<SpiralVase>(print.config());
|
||||
//#ifdef HAS_PRESSURE_EQUALIZER
|
||||
//if (print.config().max_volumetric_extrusion_rate_slope_positive.value > 0 ||
|
||||
// print.config().max_volumetric_extrusion_rate_slope_negative.value > 0)
|
||||
const GCodeConfig& tmp_config = print.config();
|
||||
m_pressure_equalizer = make_unique<PressureEqualizer>(print.config());
|
||||
m_enable_extrusion_role_markers = (bool)m_pressure_equalizer;
|
||||
//#else /* HAS_PRESSURE_EQUALIZER */
|
||||
// m_enable_extrusion_role_markers = false;
|
||||
//#endif /* HAS_PRESSURE_EQUALIZER */
|
||||
|
||||
if (print.config().max_volumetric_extrusion_rate_slope_positive.value > 0 ||
|
||||
print.config().max_volumetric_extrusion_rate_slope_negative.value > 0){
|
||||
m_pressure_equalizer = make_unique<PressureEqualizer>(print.config());
|
||||
m_enable_extrusion_role_markers = (bool)m_pressure_equalizer;
|
||||
} else
|
||||
m_enable_extrusion_role_markers = false;
|
||||
|
||||
|
||||
file.write_format("; HEADER_BLOCK_START\n");
|
||||
// Write information on the generator.
|
||||
|
|
@ -2389,10 +2388,6 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
|
|||
file.write("M1003 S0\n");
|
||||
}
|
||||
}
|
||||
#ifdef HAS_PRESSURE_EQUALIZER
|
||||
if (m_pressure_equalizer)
|
||||
file.write(m_pressure_equalizer->process("", true));
|
||||
#endif /* HAS_PRESSURE_EQUALIZER */
|
||||
++ finished_objects;
|
||||
// Flag indicating whether the nozzle temperature changes from 1st to 2nd layer were performed.
|
||||
// Reset it when starting another object from 1st layer.
|
||||
|
|
@ -2460,10 +2455,6 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
|
|||
file.write("M1003 S0\n");
|
||||
}
|
||||
}
|
||||
#ifdef HAS_PRESSURE_EQUALIZER
|
||||
if (m_pressure_equalizer)
|
||||
file.write(m_pressure_equalizer->process("", true));
|
||||
#endif /* HAS_PRESSURE_EQUALIZER */
|
||||
if (m_wipe_tower)
|
||||
// Purge the extruder, pull out the active filament.
|
||||
file.write(m_wipe_tower->finalize(*this));
|
||||
|
|
@ -2666,10 +2657,14 @@ void GCode::process_layers(
|
|||
});
|
||||
|
||||
// The pipeline elements are joined using const references, thus no copying is performed.
|
||||
if (m_spiral_vase)
|
||||
if (m_spiral_vase && m_pressure_equalizer)
|
||||
tbb::parallel_pipeline(12, generator & spiral_mode & pressure_equalizer & cooling & fan_mover & output);
|
||||
else
|
||||
else if (m_spiral_vase)
|
||||
tbb::parallel_pipeline(12, generator & spiral_mode & cooling & fan_mover & output);
|
||||
else if (m_pressure_equalizer)
|
||||
tbb::parallel_pipeline(12, generator & pressure_equalizer & cooling & fan_mover & output);
|
||||
else
|
||||
tbb::parallel_pipeline(12, generator & cooling & fan_mover & output);
|
||||
}
|
||||
|
||||
// Process all layers of a single object instance (sequential mode) with a parallel pipeline:
|
||||
|
|
@ -3899,14 +3894,6 @@ LayerResult GCode::process_layer(
|
|||
// Flush the cooling buffer at each object layer or possibly at the last layer, even if it contains just supports (This should not happen).
|
||||
object_layer || last_layer);
|
||||
|
||||
#ifdef HAS_PRESSURE_EQUALIZER
|
||||
// Apply pressure equalization if enabled;
|
||||
// printf("G-code before filter:\n%s\n", gcode.c_str());
|
||||
if (m_pressure_equalizer)
|
||||
gcode = m_pressure_equalizer->process(gcode.c_str(), false);
|
||||
// printf("G-code after filter:\n%s\n", out.c_str());
|
||||
#endif /* HAS_PRESSURE_EQUALIZER */
|
||||
|
||||
file.write(gcode);
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ static const std::string EXTERNAL_PERIMETER_TAG = ";_EXTERNAL_PERIMETER";
|
|||
|
||||
// Maximum segment length to split a long segment if the initial and the final flow rate differ.
|
||||
// Smaller value means a smoother transition between two different flow rates.
|
||||
static constexpr float max_segment_length = 0.5f;
|
||||
static constexpr float max_segment_length = 1.f;
|
||||
|
||||
// For how many GCode lines back will adjust a flow rate from the latest line.
|
||||
// Bigger values affect the GCode export speed a lot, and smaller values could
|
||||
|
|
@ -64,12 +64,10 @@ PressureEqualizer::PressureEqualizer(const Slic3r::GCodeConfig &config) : m_use_
|
|||
// Volumetric rate of a 0.45mm x 0.2mm extrusion at 20mm/s XY movement: 0.45*0.2*20*60=1.8*60 = 108 mm^3/min
|
||||
// Slope of the volumetric rate, changing from 20mm/s to 60mm/s over 2 seconds: (5.4-1.8)*60*60/2=60*60*1.8 = 6480 mm^3/min^2 = 1.8 mm^3/s^2
|
||||
|
||||
//---IG
|
||||
//m_max_volumetric_extrusion_rate_slope_positive = float(config.max_volumetric_extrusion_rate_slope_positive.value) * 60.f * 60.f;
|
||||
//m_max_volumetric_extrusion_rate_slope_negative = float(config.max_volumetric_extrusion_rate_slope_negative.value) * 60.f * 60.f;
|
||||
|
||||
m_max_volumetric_extrusion_rate_slope_positive = float(320) * 60.f * 60.f;
|
||||
m_max_volumetric_extrusion_rate_slope_negative = float(320) * 60.f * 60.f;
|
||||
if(config.max_volumetric_extrusion_rate_slope_positive.value > 0 || config.max_volumetric_extrusion_rate_slope_negative.value > 0){
|
||||
m_max_volumetric_extrusion_rate_slope_positive = float(config.max_volumetric_extrusion_rate_slope_positive.value) * 60.f * 60.f;
|
||||
m_max_volumetric_extrusion_rate_slope_negative = float(config.max_volumetric_extrusion_rate_slope_negative.value) * 60.f * 60.f;
|
||||
}
|
||||
|
||||
for (ExtrusionRateSlope &extrusion_rate_slope : m_max_volumetric_extrusion_rate_slopes) {
|
||||
extrusion_rate_slope.negative = m_max_volumetric_extrusion_rate_slope_negative;
|
||||
|
|
|
|||
|
|
@ -725,9 +725,7 @@ static std::vector<std::string> s_Preset_print_options {
|
|||
"ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing",
|
||||
"max_travel_detour_distance",
|
||||
"fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance",
|
||||
#ifdef HAS_PRESSURE_EQUALIZER
|
||||
"max_volumetric_extrusion_rate_slope_positive", "max_volumetric_extrusion_rate_slope_negative",
|
||||
#endif /* HAS_PRESSURE_EQUALIZER */
|
||||
"inner_wall_speed", "outer_wall_speed", "sparse_infill_speed", "internal_solid_infill_speed",
|
||||
"top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed",
|
||||
"bridge_speed", "internal_bridge_speed", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed",
|
||||
|
|
|
|||
|
|
@ -2470,29 +2470,27 @@ def = this->add("filament_loading_speed", coFloats);
|
|||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloats { 0. });
|
||||
|
||||
#ifdef HAS_PRESSURE_EQUALIZER
|
||||
//def = this->add("max_volumetric_extrusion_rate_slope_positive", coFloat);
|
||||
//def->label = L("Max volumetric slope positive");
|
||||
//def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate. "
|
||||
// "A value of 1.8 mm³/s² ensures, that a change from the extrusion rate "
|
||||
// "of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) "
|
||||
// "to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds.");
|
||||
//def->sidetext = L("mm³/s²");
|
||||
//def->min = 0;
|
||||
//def->mode = comAdvanced;
|
||||
//def->set_default_value(new ConfigOptionFloat(0));
|
||||
def = this->add("max_volumetric_extrusion_rate_slope_positive", coFloat);
|
||||
def->label = L("Max volumetric slope positive");
|
||||
def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate. "
|
||||
"A value of 1.8 mm³/s² ensures, that a change from the extrusion rate "
|
||||
"of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) "
|
||||
"to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds.");
|
||||
def->sidetext = L("mm³/s²");
|
||||
def->min = 0;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(0));
|
||||
|
||||
//def = this->add("max_volumetric_extrusion_rate_slope_negative", coFloat);
|
||||
//def->label = L("Max volumetric slope negative");
|
||||
//def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate. "
|
||||
// "A value of 1.8 mm³/s² ensures, that a change from the extrusion rate "
|
||||
// "of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) "
|
||||
// "to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds.");
|
||||
//def->sidetext = L("mm³/s²");
|
||||
//def->min = 0;
|
||||
//def->mode = comAdvanced;
|
||||
//def->set_default_value(new ConfigOptionFloat(0));
|
||||
#endif /* HAS_PRESSURE_EQUALIZER */
|
||||
def = this->add("max_volumetric_extrusion_rate_slope_negative", coFloat);
|
||||
def->label = L("Max volumetric slope negative");
|
||||
def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate. "
|
||||
"A value of 1.8 mm³/s² ensures, that a change from the extrusion rate "
|
||||
"of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) "
|
||||
"to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds.");
|
||||
def->sidetext = L("mm³/s²");
|
||||
def->min = 0;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(0));
|
||||
|
||||
def = this->add("fan_min_speed", coInts);
|
||||
def->label = L("Fan speed");
|
||||
|
|
|
|||
|
|
@ -884,8 +884,8 @@ PRINT_CONFIG_CLASS_DEFINE(
|
|||
|
||||
((ConfigOptionString, layer_change_gcode))
|
||||
//#ifdef HAS_PRESSURE_EQUALIZER
|
||||
// ((ConfigOptionFloat, max_volumetric_extrusion_rate_slope_positive))
|
||||
// ((ConfigOptionFloat, max_volumetric_extrusion_rate_slope_negative))
|
||||
((ConfigOptionFloat, max_volumetric_extrusion_rate_slope_positive))
|
||||
((ConfigOptionFloat, max_volumetric_extrusion_rate_slope_negative))
|
||||
//#endif
|
||||
((ConfigOptionPercents, retract_before_wipe))
|
||||
((ConfigOptionFloats, retraction_length))
|
||||
|
|
|
|||
|
|
@ -1995,11 +1995,9 @@ void TabPrint::build()
|
|||
optgroup->append_single_option_line("top_surface_jerk");
|
||||
optgroup->append_single_option_line("initial_layer_jerk");
|
||||
optgroup->append_single_option_line("travel_jerk");
|
||||
|
||||
#ifdef HAS_PRESSURE_EQUALIZER
|
||||
|
||||
optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope_positive");
|
||||
optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope_negative");
|
||||
#endif /* HAS_PRESSURE_EQUALIZER */
|
||||
|
||||
page = add_options_page(L("Support"), "support");
|
||||
optgroup = page->new_optgroup(L("Support"), L"param_support");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue