diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index dc7a2ec9ac..11b59f4282 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -295,6 +295,9 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode static float last_window_width = 0.0f; static size_t last_text_length = 0; static bool properties_shown = false; + + const std::string NA_TXT = _u8L("N/A"); + const char* NA_CSTR = NA_TXT.c_str(); if (viewer != nullptr) { ImGuiWrapper& imgui = *wxGetApp().imgui(); @@ -316,19 +319,32 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode vertex = viewer->get_vertex_at(vertex_id); } - char buf[1024]; + const bool is_extrusion = vertex.is_extrusion(); + char buf[1024]; char valBuf[32]; sprintf(buf, "X: %.3f, Y: %.3f, Z: %.3f Speed: %.0f ", vertex.position[0], vertex.position[1], vertex.position[2], vertex.feedrate); switch (view_type) { case libvgcode::EViewType::Height: { - sprintf(buf, "%s %s%.2f", buf, _u8L("Height: ").c_str(), vertex.height); + if (is_extrusion) + sprintf(valBuf, "%.2f", vertex.height); + else + sprintf(valBuf, "%s", NA_CSTR); + sprintf(buf, "%s %s%s", buf, _u8L("Height: ").c_str(), valBuf); break; } case libvgcode::EViewType::Width: { - sprintf(buf, "%s %s%.2f", buf, _u8L("Width: ").c_str(), vertex.width); + if (is_extrusion) + sprintf(valBuf, "%.2f", vertex.width); + else + sprintf(valBuf, "%s", NA_CSTR); + sprintf(buf, "%s %s%s", buf, _u8L("Width: ").c_str(), valBuf); break; } case libvgcode::EViewType::VolumetricFlowRate: { - sprintf(buf, "%s %s%.2f", buf, _u8L("Flow: ").c_str(), vertex.volumetric_rate()); + if (is_extrusion) + sprintf(valBuf, "%.2f", vertex.volumetric_rate()); + else + sprintf(valBuf, "%s", NA_CSTR); + sprintf(buf, "%s %s%s", buf, _u8L("Flow: ").c_str(), valBuf); break; } case libvgcode::EViewType::FanSpeed: { @@ -353,7 +369,8 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode break; } case libvgcode::EViewType::ActualVolumetricFlowRate: { - sprintf(buf, "%s %s%.2f", buf, _u8L("Actual Flow: ").c_str(), vertex.actual_volumetric_rate()); + // Don't display the actual flow, since it only gives data for the end of a segment + // sprintf(buf, "%s %s%.2f", buf, _u8L("Actual Flow: ").c_str(), vertex.actual_volumetric_rate()); break; } case libvgcode::EViewType::ActualSpeed: { @@ -367,7 +384,7 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode ImGuiWrapper::text(std::string(buf)); if (view_type == libvgcode::EViewType::FeatureType) { ImGui::SameLine(); - ImGuiWrapper::text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, to_string(vertex.role).c_str()); + ImGuiWrapper::text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, vertex.is_extrusion() ? to_string(vertex.role).c_str() : NA_CSTR); } ImGui::SameLine(); if (imgui.image_button(properties_shown ? ImGui::HorizontalHide : ImGui::HorizontalShow, properties_shown ? _u8L("Hide properties") : _u8L("Show properties"))) { @@ -390,32 +407,32 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode append_table_row(_u8L("Type"), [&vertex]() { ImGuiWrapper::text(_u8L(to_string(vertex.type))); }); - append_table_row(_u8L("Feature type"), [&vertex]() { + append_table_row(_u8L("Feature type"), [&vertex, NA_TXT]() { std::string text; if (vertex.is_extrusion()) text = _u8L(to_string(vertex.role)); else - text = _u8L("N/A"); + text = NA_TXT; ImGuiWrapper::text(text); }); - append_table_row(_u8L("Width") + " (" + _u8L("mm") + ")", [&vertex, &buff]() { + append_table_row(_u8L("Width") + " (" + _u8L("mm") + ")", [&vertex, &buff, NA_TXT]() { std::string text; if (vertex.is_extrusion()) { sprintf(buff, "%.3f", vertex.width); text = std::string(buff); } else - text = _u8L("N/A"); + text = NA_TXT; ImGuiWrapper::text(text); }); - append_table_row(_u8L("Height") + " (" + _u8L("mm") + ")", [&vertex, &buff]() { + append_table_row(_u8L("Height") + " (" + _u8L("mm") + ")", [&vertex, &buff, NA_TXT]() { std::string text; if (vertex.is_extrusion()) { sprintf(buff, "%.3f", vertex.height); text = std::string(buff); } else - text = _u8L("N/A"); + text = NA_TXT; ImGuiWrapper::text(text); }); append_table_row(_u8L("Layer"), [&vertex, &buff]() { @@ -428,14 +445,14 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode const std::string text = std::string(buff); ImGuiWrapper::text(text); }); - append_table_row(_u8L("Volumetric flow rate") + " (" + _u8L("mm³/s") + ")", [&vertex, &buff]() { + append_table_row(_u8L("Volumetric flow rate") + " (" + _u8L("mm³/s") + ")", [&vertex, &buff, NA_TXT]() { std::string text; if (vertex.is_extrusion()) { sprintf(buff, "%.3f", vertex.volumetric_rate()); text = std::string(buff); } else - text = _u8L("N/A"); + text = NA_TXT; ImGuiWrapper::text(text); }); append_table_row(_u8L("Fan speed") + " (" + _u8L("%") + ")", [&vertex, &buff]() {