Merge branch 'master' of https://github.com/prusa3d/Slic3r
This commit is contained in:
commit
6591620200
@ -56,7 +56,9 @@ namespace Slic3r {
|
|||||||
|
|
||||||
float GCodeTimeEstimator::Block::Trapezoid::speed_from_distance(float initial_feedrate, float distance, float acceleration)
|
float GCodeTimeEstimator::Block::Trapezoid::speed_from_distance(float initial_feedrate, float distance, float acceleration)
|
||||||
{
|
{
|
||||||
return ::sqrt(sqr(initial_feedrate) + 2.0f * acceleration * distance);
|
// to avoid invalid negative numbers due to numerical imprecision
|
||||||
|
float value = std::max(0.0f, sqr(initial_feedrate) + 2.0f * acceleration * distance);
|
||||||
|
return ::sqrt(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
float GCodeTimeEstimator::Block::move_length() const
|
float GCodeTimeEstimator::Block::move_length() const
|
||||||
@ -122,7 +124,9 @@ namespace Slic3r {
|
|||||||
|
|
||||||
float GCodeTimeEstimator::Block::max_allowable_speed(float acceleration, float target_velocity, float distance)
|
float GCodeTimeEstimator::Block::max_allowable_speed(float acceleration, float target_velocity, float distance)
|
||||||
{
|
{
|
||||||
return ::sqrt(sqr(target_velocity) - 2.0f * acceleration * distance);
|
// to avoid invalid negative numbers due to numerical imprecision
|
||||||
|
float value = std::max(0.0f, sqr(target_velocity) - 2.0f * acceleration * distance);
|
||||||
|
return ::sqrt(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
float GCodeTimeEstimator::Block::estimate_acceleration_distance(float initial_rate, float target_rate, float acceleration)
|
float GCodeTimeEstimator::Block::estimate_acceleration_distance(float initial_rate, float target_rate, float acceleration)
|
||||||
@ -149,6 +153,9 @@ namespace Slic3r {
|
|||||||
[this](GCodeReader &reader, const GCodeReader::GCodeLine &line)
|
[this](GCodeReader &reader, const GCodeReader::GCodeLine &line)
|
||||||
{ this->_process_gcode_line(reader, line); });
|
{ this->_process_gcode_line(reader, line); });
|
||||||
|
|
||||||
|
_calculate_time();
|
||||||
|
|
||||||
|
_reset_blocks();
|
||||||
_reset();
|
_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,6 +166,7 @@ namespace Slic3r {
|
|||||||
_parser.parse_file(file, boost::bind(&GCodeTimeEstimator::_process_gcode_line, this, _1, _2));
|
_parser.parse_file(file, boost::bind(&GCodeTimeEstimator::_process_gcode_line, this, _1, _2));
|
||||||
_calculate_time();
|
_calculate_time();
|
||||||
|
|
||||||
|
_reset_blocks();
|
||||||
_reset();
|
_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,6 +180,7 @@ namespace Slic3r {
|
|||||||
_parser.parse_line(line, action);
|
_parser.parse_line(line, action);
|
||||||
_calculate_time();
|
_calculate_time();
|
||||||
|
|
||||||
|
_reset_blocks();
|
||||||
_reset();
|
_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,6 +208,7 @@ namespace Slic3r {
|
|||||||
{
|
{
|
||||||
PROFILE_FUNC();
|
PROFILE_FUNC();
|
||||||
_calculate_time();
|
_calculate_time();
|
||||||
|
_reset_blocks();
|
||||||
_reset();
|
_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,6 +393,7 @@ namespace Slic3r {
|
|||||||
void GCodeTimeEstimator::reset()
|
void GCodeTimeEstimator::reset()
|
||||||
{
|
{
|
||||||
_time = 0.0f;
|
_time = 0.0f;
|
||||||
|
_reset_blocks();
|
||||||
_reset();
|
_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -412,8 +423,6 @@ namespace Slic3r {
|
|||||||
|
|
||||||
void GCodeTimeEstimator::_reset()
|
void GCodeTimeEstimator::_reset()
|
||||||
{
|
{
|
||||||
_blocks.clear();
|
|
||||||
|
|
||||||
_curr.reset();
|
_curr.reset();
|
||||||
_prev.reset();
|
_prev.reset();
|
||||||
|
|
||||||
@ -424,6 +433,11 @@ namespace Slic3r {
|
|||||||
set_additional_time(0.0f);
|
set_additional_time(0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GCodeTimeEstimator::_reset_blocks()
|
||||||
|
{
|
||||||
|
_blocks.clear();
|
||||||
|
}
|
||||||
|
|
||||||
void GCodeTimeEstimator::_calculate_time()
|
void GCodeTimeEstimator::_calculate_time()
|
||||||
{
|
{
|
||||||
_forward_pass();
|
_forward_pass();
|
||||||
@ -950,7 +964,7 @@ namespace Slic3r {
|
|||||||
void GCodeTimeEstimator::_simulate_st_synchronize()
|
void GCodeTimeEstimator::_simulate_st_synchronize()
|
||||||
{
|
{
|
||||||
_calculate_time();
|
_calculate_time();
|
||||||
_reset();
|
_reset_blocks();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodeTimeEstimator::_forward_pass()
|
void GCodeTimeEstimator::_forward_pass()
|
||||||
|
@ -7,6 +7,11 @@
|
|||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
|
|
||||||
|
//
|
||||||
|
// Some of the algorithms used by class GCodeTimeEstimator were inpired by
|
||||||
|
// Cura Engine's class TimeEstimateCalculator
|
||||||
|
// https://github.com/Ultimaker/CuraEngine/blob/master/src/timeEstimate.h
|
||||||
|
//
|
||||||
class GCodeTimeEstimator
|
class GCodeTimeEstimator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -241,6 +246,7 @@ namespace Slic3r {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void _reset();
|
void _reset();
|
||||||
|
void _reset_blocks();
|
||||||
|
|
||||||
// Calculates the time estimate
|
// Calculates the time estimate
|
||||||
void _calculate_time();
|
void _calculate_time();
|
||||||
|
Loading…
Reference in New Issue
Block a user