Added preview of retractions and unretractions

This commit is contained in:
Enrico Turri 2018-01-08 16:05:01 +01:00
parent c9839dd7cc
commit 6a744238b9
8 changed files with 179 additions and 4 deletions

View file

@ -567,8 +567,18 @@ void GCodeAnalyzer::PreviewData::Travel::set_default()
is_visible = false;
}
const GCodeAnalyzer::PreviewData::Color GCodeAnalyzer::PreviewData::Retraction::Default_Color = GCodeAnalyzer::PreviewData::Color(1.0f, 1.0f, 1.0f, 1.0f);
GCodeAnalyzer::PreviewData::Retraction::Position::Position(const Point3& position, float width, float height)
: position(position)
, width(width)
, height(height)
{
}
void GCodeAnalyzer::PreviewData::Retraction::set_default()
{
color = Default_Color;
is_visible = false;
};
@ -582,6 +592,7 @@ void GCodeAnalyzer::PreviewData::set_default()
extrusion.set_default();
travel.set_default();
retraction.set_default();
unretraction.set_default();
}
void GCodeAnalyzer::PreviewData::reset()
@ -589,6 +600,7 @@ void GCodeAnalyzer::PreviewData::reset()
extrusion.layers.clear();
travel.polylines.clear();
retraction.positions.clear();
unretraction.positions.clear();
}
const GCodeAnalyzer::PreviewData::Color& GCodeAnalyzer::PreviewData::get_extrusion_role_color(ExtrusionRole role) const
@ -658,6 +670,9 @@ void GCodeAnalyzer::calc_gcode_preview_data(Print& print)
// calculates retractions
_calc_gcode_preview_retractions(print);
// calculates unretractions
_calc_gcode_preview_unretractions(print);
}
void GCodeAnalyzer::_process_gcode_line(GCodeReader&, const GCodeReader::GCodeLine& line)
@ -1259,10 +1274,24 @@ void GCodeAnalyzer::_calc_gcode_preview_retractions(Print& print)
for (const GCodeMove& move : retraction_moves->second)
{
print.gcode_preview.retraction.positions.emplace_back(scale_(move.start_position.x), scale_(move.start_position.y), scale_(move.start_position.z));
// store position
Point3 position(scale_(move.start_position.x), scale_(move.start_position.y), scale_(move.start_position.z));
print.gcode_preview.retraction.positions.emplace_back(position, move.data.width, move.data.height);
}
}
int a = 0;
void GCodeAnalyzer::_calc_gcode_preview_unretractions(Print& print)
{
TypeToMovesMap::iterator unretraction_moves = m_moves_map.find(GCodeMove::Unretract);
if (unretraction_moves == m_moves_map.end())
return;
for (const GCodeMove& move : unretraction_moves->second)
{
// store position
Point3 position(scale_(move.start_position.x), scale_(move.start_position.y), scale_(move.start_position.z));
print.gcode_preview.unretraction.positions.emplace_back(position, move.data.width, move.data.height);
}
}
GCodeAnalyzer::PreviewData::Color operator + (const GCodeAnalyzer::PreviewData::Color& c1, const GCodeAnalyzer::PreviewData::Color& c2)

View file

@ -375,7 +375,21 @@ public:
struct Retraction
{
Points3 positions;
static const Color Default_Color;
struct Position
{
Point3 position;
float width;
float height;
Position(const Point3& position, float width, float height);
};
typedef std::vector<Position> PositionsList;
PositionsList positions;
Color color;
bool is_visible;
void set_default();
@ -384,6 +398,7 @@ public:
Extrusion extrusion;
Travel travel;
Retraction retraction;
Retraction unretraction;
PreviewData();
@ -515,6 +530,7 @@ private:
void _calc_gcode_preview_extrusion_layers(Print& print);
void _calc_gcode_preview_travel(Print& print);
void _calc_gcode_preview_retractions(Print& print);
void _calc_gcode_preview_unretractions(Print& print);
};
GCodeAnalyzer::PreviewData::Color operator + (const GCodeAnalyzer::PreviewData::Color& c1, const GCodeAnalyzer::PreviewData::Color& c2);

View file

@ -98,6 +98,11 @@ void Print::set_gcode_preview_retractions_visible(bool visible)
{
gcode_preview.retraction.is_visible = visible;
}
void Print::set_gcode_preview_unretractions_visible(bool visible)
{
gcode_preview.unretraction.is_visible = visible;
}
#endif // ENRICO_GCODE_PREVIEW
//############################################################################################################

View file

@ -271,6 +271,7 @@ public:
bool is_gcode_preview_extrusion_role_enabled(ExtrusionRole role);
void set_gcode_preview_travel_visible(bool visible);
void set_gcode_preview_retractions_visible(bool visible);
void set_gcode_preview_unretractions_visible(bool visible);
#endif // ENRICO_GCODE_PREVIEW
//############################################################################################################