ENH: optimize layer time(log) display

Change-Id: Ibb43561f11dfd1c63b3a0da75a3cb10b95afc71e
This commit is contained in:
liz.li 2023-02-13 10:49:29 +08:00 committed by Lane.Wei
parent e69c0ed7f6
commit e1f97681f4
2 changed files with 5 additions and 22 deletions

View File

@ -77,8 +77,6 @@ static std::string get_view_type_string(GCodeViewer::EViewType view_type)
return _u8L("Filament");
else if (view_type == GCodeViewer::EViewType::LayerTime)
return _u8L("Layer Time");
else if (view_type == GCodeViewer::EViewType::LayerTimeLog)
return _u8L("Layer Time (log)");
return "";
}
@ -282,12 +280,13 @@ float GCodeViewer::Extrusions::Range::get_value_at_step(int step) const {
if (!log_scale)
return min + static_cast<float>(step) * step_size();
else
// calculate log-average
{
float min_range = min;
if (min_range == 0)
min_range = 0.0001f;
float step_size = std::log(max / min_range) / (static_cast<float>(Range_Colors.size()) - 1.0f);
return std::log(min) + static_cast<float>(step) * step_size;
return std::exp(std::log(min) + static_cast<float>(step) * step_size);
}
}
GCodeViewer::SequentialRangeCap::~SequentialRangeCap() {
@ -380,7 +379,6 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he
std::string speed = ImGui::ColorMarkerStart + _u8L("Speed: ") + ImGui::ColorMarkerEnd;
std::string flow = ImGui::ColorMarkerStart + _u8L("Flow: ") + ImGui::ColorMarkerEnd;
std::string layer_time = ImGui::ColorMarkerStart + _u8L("Layer Time: ") + ImGui::ColorMarkerEnd;
std::string layer_time_log = ImGui::ColorMarkerStart + _u8L("Layer Time(log): ") + ImGui::ColorMarkerEnd;
std::string fanspeed = ImGui::ColorMarkerStart + _u8L("Fan Speed: ") + ImGui::ColorMarkerEnd;
std::string temperature = ImGui::ColorMarkerStart + _u8L("Temperature: ") + ImGui::ColorMarkerEnd;
const float item_size = imgui.calc_text_size("X: 000.000 ").x;
@ -394,7 +392,7 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he
if (view_type == EViewType::FeatureType || view_type == EViewType::ColorPrint)
show_extra_text = false;
// Feedrate and LayerTime shall always show extra text
else if (view_type == EViewType::Feedrate || view_type == EViewType::LayerTime || view_type == EViewType::LayerTimeLog)
else if (view_type == EViewType::Feedrate || view_type == EViewType::LayerTime)
show_extra_text = true;
if (show_extra_text)
{
@ -461,13 +459,6 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he
imgui.text(buf);
break;
}
case EViewType::LayerTimeLog: {
ImGui::SameLine(window_padding + item_size + item_spacing);
sprintf(buf, "%s%.1f", layer_time_log.c_str(), std::log(m_curr_move.layer_duration));
ImGui::PushItemWidth(item_size);
imgui.text(buf);
break;
}
default:
break;
}
@ -932,7 +923,6 @@ void GCodeViewer::update_by_mode(ConfigOptionMode mode)
view_type_items.push_back(EViewType::Width);
view_type_items.push_back(EViewType::VolumetricRate);
view_type_items.push_back(EViewType::LayerTime);
view_type_items.push_back(EViewType::LayerTimeLog);
view_type_items.push_back(EViewType::FanSpeed);
view_type_items.push_back(EViewType::Temperature);
if (mode == ConfigOptionMode::comDevelop) {
@ -1172,7 +1162,6 @@ void GCodeViewer::refresh(const GCodeProcessorResult& gcode_result, const std::v
if (curr.layer_duration > 0.f) {
m_extrusions.ranges.layer_duration.update_from(curr.layer_duration);
m_extrusions.ranges.layer_duration_log.update_from(curr.layer_duration);
}
[[fallthrough]];
}
@ -3256,7 +3245,6 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
case EViewType::FanSpeed: { color = m_extrusions.ranges.fan_speed.get_color_at(path.fan_speed); break; }
case EViewType::Temperature: { color = m_extrusions.ranges.temperature.get_color_at(path.temperature); break; }
case EViewType::LayerTime: { color = m_extrusions.ranges.layer_duration.get_color_at(path.layer_time); break; }
case EViewType::LayerTimeLog: { color = m_extrusions.ranges.layer_duration_log.get_color_at(path.layer_time); break; }
case EViewType::VolumetricRate: { color = m_extrusions.ranges.volumetric_rate.get_color_at(path.volumetric_rate); break; }
case EViewType::Tool: { color = m_tools.m_tool_colors[path.extruder_id]; break; }
case EViewType::ColorPrint: {
@ -4533,7 +4521,6 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
case EViewType::Temperature: { imgui.title(_u8L("Temperature (°C)")); break; }
case EViewType::VolumetricRate: { imgui.title(_u8L("Volumetric flow rate (mm³/s)")); break; }
case EViewType::LayerTime: { imgui.title(_u8L("Layer Time (s)")); break; }
case EViewType::LayerTimeLog: { imgui.title(_u8L("Layer Time (log) (s)")); break; }
case EViewType::Tool:
{
@ -4689,7 +4676,6 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
case EViewType::FanSpeed: { append_range(m_extrusions.ranges.fan_speed, 0); break; }
case EViewType::Temperature: { append_range(m_extrusions.ranges.temperature, 0); break; }
case EViewType::LayerTime: { append_range(m_extrusions.ranges.layer_duration, 1); break; }
case EViewType::LayerTimeLog: { append_range(m_extrusions.ranges.layer_duration_log, 1); break; }
case EViewType::VolumetricRate: { append_range(m_extrusions.ranges.volumetric_rate, 2); break; }
case EViewType::Tool:
{

View File

@ -408,7 +408,7 @@ class GCodeViewer
min = std::min(min, value);
max = std::max(max, value);
}
void reset(bool log = false) { min = FLT_MAX; max = -FLT_MAX; count = 0; log_scale = false; log_scale = log; }
void reset(bool log = false) { min = FLT_MAX; max = -FLT_MAX; count = 0; log_scale = log; }
float step_size() const;
Color get_color_at(float value) const;
@ -432,7 +432,6 @@ class GCodeViewer
Range temperature;
// Color mapping by layer time.
Range layer_duration;
Range layer_duration_log;
void reset() {
height.reset();
width.reset();
@ -440,8 +439,7 @@ class GCodeViewer
fan_speed.reset();
volumetric_rate.reset();
temperature.reset();
layer_duration.reset();
layer_duration_log.reset(true);
layer_duration.reset(true);
}
};
@ -721,7 +719,6 @@ public:
ColorPrint,
FilamentId,
LayerTime,
LayerTimeLog,
Count
};