#162 temperature view in slice preview

This commit is contained in:
supermerill 2020-08-19 16:32:13 +02:00
parent f5dd32d969
commit f741e28031
6 changed files with 87 additions and 20 deletions

View File

@ -22,6 +22,7 @@ static const unsigned int DEFAULT_COLOR_PRINT_ID = 0;
static const Slic3r::Vec3d DEFAULT_START_POSITION = Slic3r::Vec3d(0.0f, 0.0f, 0.0f); static const Slic3r::Vec3d DEFAULT_START_POSITION = Slic3r::Vec3d(0.0f, 0.0f, 0.0f);
static const float DEFAULT_START_EXTRUSION = 0.0f; static const float DEFAULT_START_EXTRUSION = 0.0f;
static const float DEFAULT_FAN_SPEED = 0.0f; static const float DEFAULT_FAN_SPEED = 0.0f;
static const float DEFAULT_EXTRUDER_TEMP = 0.0f;
static const float DEFAULT_LAYER_DURATION = 0.0f; static const float DEFAULT_LAYER_DURATION = 0.0f;
static const float DEFAULT_LAYER_ELAPSED_TIME = 0.0f; static const float DEFAULT_LAYER_ELAPSED_TIME = 0.0f;
@ -48,13 +49,15 @@ GCodeAnalyzer::Metadata::Metadata()
, height(GCodeAnalyzer::Default_Height) , height(GCodeAnalyzer::Default_Height)
, feedrate(DEFAULT_FEEDRATE) , feedrate(DEFAULT_FEEDRATE)
, fan_speed(DEFAULT_FAN_SPEED) , fan_speed(DEFAULT_FAN_SPEED)
, extruder_temp(DEFAULT_EXTRUDER_TEMP)
, layer_duration(DEFAULT_LAYER_DURATION) , layer_duration(DEFAULT_LAYER_DURATION)
, layer_elapsed_time(DEFAULT_LAYER_ELAPSED_TIME) , layer_elapsed_time(DEFAULT_LAYER_ELAPSED_TIME)
, cp_color_id(DEFAULT_COLOR_PRINT_ID) , cp_color_id(DEFAULT_COLOR_PRINT_ID)
{ {
} }
GCodeAnalyzer::Metadata::Metadata(ExtrusionRole extrusion_role, unsigned int extruder_id, double mm3_per_mm, float width, float height, float feedrate, float fan_speed, float layer_duration, float layer_elapsed_time, unsigned int cp_color_id) GCodeAnalyzer::Metadata::Metadata(ExtrusionRole extrusion_role, unsigned int extruder_id, double mm3_per_mm, float width, float height, float feedrate,
float fan_speed, float extruder_temp, float layer_duration, float layer_elapsed_time, unsigned int cp_color_id)
: extrusion_role(extrusion_role) : extrusion_role(extrusion_role)
, extruder_id(extruder_id) , extruder_id(extruder_id)
, mm3_per_mm(mm3_per_mm) , mm3_per_mm(mm3_per_mm)
@ -62,6 +65,7 @@ GCodeAnalyzer::Metadata::Metadata(ExtrusionRole extrusion_role, unsigned int ext
, height(height) , height(height)
, feedrate(feedrate) , feedrate(feedrate)
, fan_speed(fan_speed) , fan_speed(fan_speed)
, extruder_temp(extruder_temp)
, layer_duration(layer_duration) , layer_duration(layer_duration)
, layer_elapsed_time(layer_elapsed_time) , layer_elapsed_time(layer_elapsed_time)
, cp_color_id(cp_color_id) , cp_color_id(cp_color_id)
@ -91,6 +95,9 @@ bool GCodeAnalyzer::Metadata::operator != (const GCodeAnalyzer::Metadata& other)
if (fan_speed != other.fan_speed) if (fan_speed != other.fan_speed)
return true; return true;
if (extruder_temp != other.extruder_temp)
return true;
if (layer_duration != other.layer_duration) if (layer_duration != other.layer_duration)
return true; return true;
@ -102,9 +109,9 @@ bool GCodeAnalyzer::Metadata::operator != (const GCodeAnalyzer::Metadata& other)
GCodeAnalyzer::GCodeMove::GCodeMove(GCodeMove::EType type, ExtrusionRole extrusion_role, unsigned int extruder_id, double mm3_per_mm, GCodeAnalyzer::GCodeMove::GCodeMove(GCodeMove::EType type, ExtrusionRole extrusion_role, unsigned int extruder_id, double mm3_per_mm,
float width, float height, float feedrate, const Vec3d& start_position, const Vec3d& end_position, float delta_extruder, float width, float height, float feedrate, const Vec3d& start_position, const Vec3d& end_position, float delta_extruder,
float fan_speed, float layer_duration, float layer_elapsed_time, unsigned int cp_color_id) float fan_speed, float extruder_temp, float layer_duration, float layer_elapsed_time, unsigned int cp_color_id)
: type(type) : type(type)
, data(extrusion_role, extruder_id, mm3_per_mm, width, height, feedrate, fan_speed, layer_duration, layer_elapsed_time, cp_color_id) , data(extrusion_role, extruder_id, mm3_per_mm, width, height, feedrate, fan_speed, extruder_temp, layer_duration, layer_elapsed_time, cp_color_id)
, start_position(start_position) , start_position(start_position)
, end_position(end_position) , end_position(end_position)
, delta_extruder(delta_extruder) , delta_extruder(delta_extruder)
@ -142,6 +149,7 @@ void GCodeAnalyzer::reset()
_set_start_position(DEFAULT_START_POSITION); _set_start_position(DEFAULT_START_POSITION);
_set_start_extrusion(DEFAULT_START_EXTRUSION); _set_start_extrusion(DEFAULT_START_EXTRUSION);
_set_fan_speed(DEFAULT_FAN_SPEED); _set_fan_speed(DEFAULT_FAN_SPEED);
_set_extruder_temp(DEFAULT_EXTRUDER_TEMP);
_set_layer_duration(DEFAULT_LAYER_DURATION); _set_layer_duration(DEFAULT_LAYER_DURATION);
_reset_axes_position(); _reset_axes_position();
_reset_axes_origin(); _reset_axes_origin();
@ -271,6 +279,12 @@ void GCodeAnalyzer::_process_gcode_line(GCodeReader&, const GCodeReader::GCodeLi
_processM83(line); _processM83(line);
break; break;
} }
case 104: //set extruder temp
case 109:
{
_processM104orM109(line);
break;
}
case 106: // Set fan speed case 106: // Set fan speed
{ {
_processM106(line); _processM106(line);
@ -491,6 +505,15 @@ void GCodeAnalyzer::_processM83(const GCodeReader::GCodeLine& line)
_set_e_local_positioning_type(Relative); _set_e_local_positioning_type(Relative);
} }
void GCodeAnalyzer::_processM104orM109(const GCodeReader::GCodeLine& line)
{
float new_temp;
if (line.has_value('S', new_temp))
{
_set_extruder_temp(new_temp);
}
}
void GCodeAnalyzer::_processM106(const GCodeReader::GCodeLine& line) void GCodeAnalyzer::_processM106(const GCodeReader::GCodeLine& line)
{ {
if (!line.has('P')) if (!line.has('P'))
@ -850,6 +873,16 @@ float GCodeAnalyzer::_get_feedrate() const
return m_state.data.feedrate; return m_state.data.feedrate;
} }
void GCodeAnalyzer::_set_extruder_temp(float new_temperature)
{
m_state.data.extruder_temp = new_temperature;
}
float GCodeAnalyzer::_get_extruder_temp() const
{
return m_state.data.extruder_temp;
}
void GCodeAnalyzer::_set_fan_speed(float fan_speed_percentage) void GCodeAnalyzer::_set_fan_speed(float fan_speed_percentage)
{ {
m_state.data.fan_speed = fan_speed_percentage; m_state.data.fan_speed = fan_speed_percentage;
@ -959,7 +992,7 @@ void GCodeAnalyzer::_store_move(GCodeAnalyzer::GCodeMove::EType type)
Vec3d end_position = _get_end_position() + extruder_offset; Vec3d end_position = _get_end_position() + extruder_offset;
it->second.emplace_back(type, _get_extrusion_role(), extruder_id, _get_mm3_per_mm(), it->second.emplace_back(type, _get_extrusion_role(), extruder_id, _get_mm3_per_mm(),
_get_width(), _get_height(), _get_feedrate(), start_position, end_position, _get_delta_extrusion(), _get_width(), _get_height(), _get_feedrate(), start_position, end_position, _get_delta_extrusion(),
_get_fan_speed(), _get_layer_duration(), m_state.data.layer_elapsed_time, _get_cp_color_id()); _get_fan_speed(), _get_extruder_temp(), _get_layer_duration(), m_state.data.layer_elapsed_time, _get_cp_color_id());
} }
bool GCodeAnalyzer::_is_valid_extrusion_role(int value) const bool GCodeAnalyzer::_is_valid_extrusion_role(int value) const
@ -1003,6 +1036,7 @@ void GCodeAnalyzer::_calc_gcode_preview_extrusion_layers(GCodePreviewData& previ
path.extruder_id = data.extruder_id; path.extruder_id = data.extruder_id;
path.cp_color_id = data.cp_color_id; path.cp_color_id = data.cp_color_id;
path.fan_speed = data.fan_speed; path.fan_speed = data.fan_speed;
path.extruder_temp = data.extruder_temp;
path.layer_duration = data.layer_duration; path.layer_duration = data.layer_duration;
path.elapsed_time = data.layer_elapsed_time; path.elapsed_time = data.layer_elapsed_time;
} }
@ -1023,6 +1057,7 @@ void GCodeAnalyzer::_calc_gcode_preview_extrusion_layers(GCodePreviewData& previ
GCodePreviewData::MultiRange<GCodePreviewData::FeedrateKind> feedrate_range; GCodePreviewData::MultiRange<GCodePreviewData::FeedrateKind> feedrate_range;
GCodePreviewData::Range volumetric_rate_range; GCodePreviewData::Range volumetric_rate_range;
GCodePreviewData::Range fan_speed_range; GCodePreviewData::Range fan_speed_range;
GCodePreviewData::Range extruder_temp_range;
GCodePreviewData::Range layer_duration_range; GCodePreviewData::Range layer_duration_range;
GCodePreviewData::Range elapsed_time_range; GCodePreviewData::Range elapsed_time_range;
@ -1069,6 +1104,7 @@ void GCodeAnalyzer::_calc_gcode_preview_extrusion_layers(GCodePreviewData& previ
feedrate_range.update_from(move.data.feedrate, GCodePreviewData::FeedrateKind::EXTRUSION); feedrate_range.update_from(move.data.feedrate, GCodePreviewData::FeedrateKind::EXTRUSION);
volumetric_rate_range.update_from(volumetric_rate); volumetric_rate_range.update_from(volumetric_rate);
fan_speed_range.update_from(move.data.fan_speed); fan_speed_range.update_from(move.data.fan_speed);
extruder_temp_range.update_from(move.data.extruder_temp);
layer_duration_range.update_from(move.data.layer_duration); layer_duration_range.update_from(move.data.layer_duration);
elapsed_time_range.update_from(move.data.layer_elapsed_time); elapsed_time_range.update_from(move.data.layer_elapsed_time);
} }
@ -1090,6 +1126,7 @@ void GCodeAnalyzer::_calc_gcode_preview_extrusion_layers(GCodePreviewData& previ
preview_data.ranges.feedrate.update_from(feedrate_range); preview_data.ranges.feedrate.update_from(feedrate_range);
preview_data.ranges.volumetric_rate.update_from(volumetric_rate_range); preview_data.ranges.volumetric_rate.update_from(volumetric_rate_range);
preview_data.ranges.fan_speed.update_from(fan_speed_range); preview_data.ranges.fan_speed.update_from(fan_speed_range);
preview_data.ranges.extruder_temp.update_from(extruder_temp_range);
preview_data.ranges.layer_duration.update_from(layer_duration_range); preview_data.ranges.layer_duration.update_from(layer_duration_range);
preview_data.ranges.elapsed_time.update_from(elapsed_time_range); preview_data.ranges.elapsed_time.update_from(elapsed_time_range);

View File

@ -60,13 +60,15 @@ public:
float height; // mm float height; // mm
float feedrate; // mm/s float feedrate; // mm/s
float fan_speed; // percentage float fan_speed; // percentage
float extruder_temp; //oC
float layer_duration; //s float layer_duration; //s
float layer_elapsed_time; //s float layer_elapsed_time; //s
unsigned int cp_color_id; unsigned int cp_color_id;
Metadata(); Metadata();
Metadata(ExtrusionRole extrusion_role, unsigned int extruder_id, double mm3_per_mm, Metadata(ExtrusionRole extrusion_role, unsigned int extruder_id, double mm3_per_mm,
float width, float height, float feedrate, float fan_speed, float layer_duration, float layer_elapsed_time, unsigned int cp_color_id); float width, float height, float feedrate, float fan_speed, float extruder_temp,
float layer_duration, float layer_elapsed_time, unsigned int cp_color_id);
bool operator != (const Metadata& other) const; bool operator != (const Metadata& other) const;
}; };
@ -92,7 +94,7 @@ public:
GCodeMove(EType type, ExtrusionRole extrusion_role, unsigned int extruder_id, double mm3_per_mm, GCodeMove(EType type, ExtrusionRole extrusion_role, unsigned int extruder_id, double mm3_per_mm,
float width, float height, float feedrate, const Vec3d& start_position, const Vec3d& end_position, float delta_extruder, float width, float height, float feedrate, const Vec3d& start_position, const Vec3d& end_position, float delta_extruder,
float fan_speed, float layer_duration, float layer_elapsed_time, unsigned int cp_color_id); float fan_speed, float extruder_temp, float layer_duration, float layer_elapsed_time, unsigned int cp_color_id);
GCodeMove(EType type, const Metadata& data, const Vec3d& start_position, const Vec3d& end_position, float delta_extruder); GCodeMove(EType type, const Metadata& data, const Vec3d& start_position, const Vec3d& end_position, float delta_extruder);
}; };
@ -188,6 +190,9 @@ private:
// Set extruder to relative mode // Set extruder to relative mode
void _processM83(const GCodeReader::GCodeLine& line); void _processM83(const GCodeReader::GCodeLine& line);
// Extruder temperature change
void _processM104orM109(const GCodeReader::GCodeLine& line);
// Set fan speed // Set fan speed
void _processM106(const GCodeReader::GCodeLine& line); void _processM106(const GCodeReader::GCodeLine& line);
@ -265,6 +270,9 @@ private:
void _set_feedrate(float feedrate_mm_sec); void _set_feedrate(float feedrate_mm_sec);
float _get_feedrate() const; float _get_feedrate() const;
void _set_extruder_temp(float new_temperature);
float _get_extruder_temp() const;
void _set_fan_speed(float fan_speed_percentage); void _set_fan_speed(float fan_speed_percentage);
float _get_fan_speed() const; float _get_fan_speed() const;

View File

@ -263,6 +263,7 @@ void GCodePreviewData::reset()
ranges.fan_speed.reset(); ranges.fan_speed.reset();
ranges.volumetric_rate.reset(); ranges.volumetric_rate.reset();
ranges.fan_speed.reset(); ranges.fan_speed.reset();
ranges.extruder_temp.reset();
ranges.layer_duration.reset(); ranges.layer_duration.reset();
ranges.elapsed_time.reset(); ranges.elapsed_time.reset();
extrusion.layers.clear(); extrusion.layers.clear();
@ -301,6 +302,11 @@ Color GCodePreviewData::get_fan_speed_color(float fan_speed) const
return ranges.fan_speed.get_color_at(fan_speed); return ranges.fan_speed.get_color_at(fan_speed);
} }
Color GCodePreviewData::get_extruder_temp_color(float temp) const
{
return ranges.extruder_temp.get_color_at(temp);
}
Color GCodePreviewData::get_layer_duration_color(float layer_time) const Color GCodePreviewData::get_layer_duration_color(float layer_time) const
{ {
return ranges.layer_duration.get_color_at(layer_time); return ranges.layer_duration.get_color_at(layer_time);
@ -501,6 +507,11 @@ GCodePreviewData::LegendItemsList GCodePreviewData::get_legend_items(const std::
Helper::FillListFromRange(items, ranges.fan_speed, 0, 1.0f); Helper::FillListFromRange(items, ranges.fan_speed, 0, 1.0f);
break; break;
} }
case Extrusion::ExtruderTemp:
{
Helper::FillListFromRange(items, ranges.extruder_temp, 0, 1.0f);
break;
}
case Extrusion::LayerTime: case Extrusion::LayerTime:
{ {
Helper::FillListFromRange(items, ranges.layer_duration, 1, 1.0f, true); Helper::FillListFromRange(items, ranges.layer_duration, 1, 1.0f, true);

View File

@ -201,6 +201,8 @@ public:
MultiRange<FeedrateKind> feedrate; MultiRange<FeedrateKind> feedrate;
// Color mapping by fan speed. // Color mapping by fan speed.
Range fan_speed; Range fan_speed;
// Color mapping by fan speed.
Range extruder_temp;
// Color mapping by layer time. // Color mapping by layer time.
Range layer_duration; Range layer_duration;
// Color mapping by time. // Color mapping by time.
@ -235,6 +237,7 @@ public:
Tool, Tool,
Filament, Filament,
ColorPrint, ColorPrint,
ExtruderTemp,
Num_View_Types Num_View_Types
}; };
@ -261,6 +264,8 @@ public:
uint32_t cp_color_id; uint32_t cp_color_id;
// Fan speed for the extrusion, used for visualization purposes. // Fan speed for the extrusion, used for visualization purposes.
float fan_speed; float fan_speed;
// Temperature of the extuder
float extruder_temp;
// Layer time for the extrusion, used for visualization purposes. // Layer time for the extrusion, used for visualization purposes.
float layer_duration; float layer_duration;
// time since print start, used for visualization purposes. // time since print start, used for visualization purposes.
@ -390,6 +395,7 @@ public:
Color get_width_color(float width) const; Color get_width_color(float width) const;
Color get_feedrate_color(float feedrate) const; Color get_feedrate_color(float feedrate) const;
Color get_fan_speed_color(float fan_speed) const; Color get_fan_speed_color(float fan_speed) const;
Color get_extruder_temp_color(float temp) const;
Color get_layer_duration_color(float layer_time) const; Color get_layer_duration_color(float layer_time) const;
Color get_layer_duration_log_color(float layer_time) const; Color get_layer_duration_log_color(float layer_time) const;
Color get_elapsed_time_color(float elapsed_time) const; Color get_elapsed_time_color(float elapsed_time) const;

View File

@ -6207,6 +6207,8 @@ void GLCanvas3D::_load_gcode_extrusion_paths(const GCodePreviewData& preview_dat
return path.feedrate; return path.feedrate;
case GCodePreviewData::Extrusion::FanSpeed: case GCodePreviewData::Extrusion::FanSpeed:
return path.fan_speed; return path.fan_speed;
case GCodePreviewData::Extrusion::ExtruderTemp:
return path.extruder_temp;
case GCodePreviewData::Extrusion::LayerTime: case GCodePreviewData::Extrusion::LayerTime:
return path.layer_duration; return path.layer_duration;
case GCodePreviewData::Extrusion::LayerTimeLog: case GCodePreviewData::Extrusion::LayerTimeLog:
@ -6241,6 +6243,8 @@ void GLCanvas3D::_load_gcode_extrusion_paths(const GCodePreviewData& preview_dat
return data.get_feedrate_color(value); return data.get_feedrate_color(value);
case GCodePreviewData::Extrusion::FanSpeed: case GCodePreviewData::Extrusion::FanSpeed:
return data.get_fan_speed_color(value); return data.get_fan_speed_color(value);
case GCodePreviewData::Extrusion::ExtruderTemp:
return data.get_extruder_temp_color(value);
case GCodePreviewData::Extrusion::LayerTime: case GCodePreviewData::Extrusion::LayerTime:
return data.get_layer_duration_color(value); return data.get_layer_duration_color(value);
case GCodePreviewData::Extrusion::LayerTimeLog: case GCodePreviewData::Extrusion::LayerTimeLog:

View File

@ -252,6 +252,7 @@ bool Preview::init(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view
m_choice_view_type->Append(_(L("Tool"))); m_choice_view_type->Append(_(L("Tool")));
m_choice_view_type->Append(_(L("Filament"))); m_choice_view_type->Append(_(L("Filament")));
m_choice_view_type->Append(_(L(width_screen == tiny ? "Color":"Color Print"))); m_choice_view_type->Append(_(L(width_screen == tiny ? "Color":"Color Print")));
m_choice_view_type->Append(_(L((width_screen == tiny ? "Temp" : "Temperature"))));
m_choice_view_type->SetSelection(0); m_choice_view_type->SetSelection(0);
m_label_show_features = new wxStaticText(this, wxID_ANY, _(L("Show"))); m_label_show_features = new wxStaticText(this, wxID_ANY, _(L("Show")));