diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 3bba4a772..415b61aeb 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -44,8 +44,7 @@ std::vector> decode_colors(const std::vector & static const float INV_255 = 1.0f / 255.0f; std::vector> output(colors.size(), { 0.0f, 0.0f, 0.0f }); - for (size_t i = 0; i < colors.size(); ++i) - { + for (size_t i = 0; i < colors.size(); ++i) { const std::string& color = colors[i]; const char* c = color.data() + 1; if ((color.size() == 7) && (color.front() == '#')) { @@ -293,11 +292,10 @@ void GCodeViewer::load(const GCodeProcessor::Result& gcode_result, const Print& const double margin = 10.0; Vec2d min(m_bounding_box.min(0) - margin, m_bounding_box.min(1) - margin); Vec2d max(m_bounding_box.max(0) + margin, m_bounding_box.max(1) + margin); - Pointfs bed_shape = { - { min(0), min(1) }, - { max(0), min(1) }, - { max(0), max(1) }, - { min(0), max(1) } }; + Pointfs bed_shape = { { min(0), min(1) }, + { max(0), min(1) }, + { max(0), max(1) }, + { min(0), max(1) } }; wxGetApp().plater()->set_bed_shape(bed_shape, "", ""); } #endif // ENABLE_GCODE_VIEWER_AS_STATE @@ -317,8 +315,7 @@ void GCodeViewer::refresh(const GCodeProcessor::Result& gcode_result, const std: // update ranges for coloring / legend m_extrusions.reset_ranges(); - for (size_t i = 0; i < m_vertices.vertices_count; ++i) - { + for (size_t i = 0; i < m_vertices.vertices_count; ++i) { // skip first vertex if (i == 0) continue; @@ -466,8 +463,7 @@ void GCodeViewer::init_shaders() unsigned char end_id = buffer_id(GCodeProcessor::EMoveType::Count); bool is_glsl_120 = wxGetApp().is_glsl_version_greater_or_equal_to(1, 20); - for (unsigned char i = begin_id; i < end_id; ++i) - { + for (unsigned char i = begin_id; i < end_id; ++i) { switch (buffer_type(i)) { case GCodeProcessor::EMoveType::Tool_change: { m_buffers[i].shader = is_glsl_120 ? "options_120_solid" : "options_110"; break; } @@ -530,8 +526,7 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) // indices data -> extract from result std::vector> indices(m_buffers.size()); - for (size_t i = 0; i < m_vertices.vertices_count; ++i) - { + for (size_t i = 0; i < m_vertices.vertices_count; ++i) { // skip first vertex if (i == 0) continue; @@ -560,10 +555,9 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) case GCodeProcessor::EMoveType::Travel: { if (prev.type != curr.type || !buffer.paths.back().matches(curr)) { - buffer.add_path(curr, static_cast(buffer_indices.size()), static_cast(i)); + buffer.add_path(curr, static_cast(buffer_indices.size()), static_cast(i - 1)); Path& last_path = buffer.paths.back(); last_path.first.position = prev.position; - last_path.first.s_id = static_cast(i - 1); buffer_indices.push_back(static_cast(i - 1)); } @@ -571,23 +565,18 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) buffer_indices.push_back(static_cast(i)); break; } - default: - { - break; - } + default: { break; } } } #if ENABLE_GCODE_VIEWER_STATISTICS - for (IBuffer& buffer : m_buffers) - { + for (IBuffer& buffer : m_buffers) { m_statistics.paths_size += SLIC3R_STDVEC_MEMSIZE(buffer.paths, Path); } #endif // ENABLE_GCODE_VIEWER_STATISTICS // indices data -> send data to gpu - for (size_t i = 0; i < m_buffers.size(); ++i) - { + for (size_t i = 0; i < m_buffers.size(); ++i) { IBuffer& buffer = m_buffers[i]; std::vector& buffer_indices = indices[i]; buffer.indices_count = buffer_indices.size(); @@ -605,8 +594,7 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) } // layers zs / roles / extruder ids / cp color ids -> extract from result - for (size_t i = 0; i < m_vertices.vertices_count; ++i) - { + for (size_t i = 0; i < m_vertices.vertices_count; ++i) { const GCodeProcessor::MoveVertex& move = gcode_result.moves[i]; if (move.type == GCodeProcessor::EMoveType::Extrude) m_layers_zs.emplace_back(static_cast(move.position[2])); @@ -655,8 +643,7 @@ void GCodeViewer::load_shells(const Print& print, bool initialized) // adds objects' volumes int object_id = 0; - for (const PrintObject* obj : print.objects()) - { + for (const PrintObject* obj : print.objects()) { const ModelObject* model_obj = obj->model_object(); std::vector instance_ids(model_obj->instances.size()); @@ -690,8 +677,7 @@ void GCodeViewer::load_shells(const Print& print, bool initialized) // remove modifiers while (true) { GLVolumePtrs::iterator it = std::find_if(m_shells.volumes.volumes.begin(), m_shells.volumes.volumes.end(), [](GLVolume* volume) { return volume->is_modifier; }); - if (it != m_shells.volumes.volumes.end()) - { + if (it != m_shells.volumes.volumes.end()) { delete (*it); m_shells.volumes.volumes.erase(it); } @@ -699,8 +685,7 @@ void GCodeViewer::load_shells(const Print& print, bool initialized) break; } - for (GLVolume* volume : m_shells.volumes.volumes) - { + for (GLVolume* volume : m_shells.volumes.volumes) { volume->zoom_to_volumes = false; volume->color[3] = 0.25f; volume->force_native_color = true; @@ -841,8 +826,8 @@ void GCodeViewer::render_toolpaths() const Transform3d inv_proj = camera.get_projection_matrix().inverse(); - auto render_options = [this, zoom, inv_proj, viewport, point_size, near_plane_height](const IBuffer& buffer, EOptionsColors colors_id, GLShaderProgram& shader) { - shader.set_uniform("uniform_color", Options_Colors[static_cast(colors_id)]); + auto render_as_points = [this, zoom, inv_proj, viewport, point_size, near_plane_height](const IBuffer& buffer, EOptionsColors color_id, GLShaderProgram& shader) { + shader.set_uniform("uniform_color", Options_Colors[static_cast(color_id)]); shader.set_uniform("zoom", zoom); #if ENABLE_GCODE_VIEWER_SHADERS_EDITOR shader.set_uniform("percent_outline_radius", 0.01f * static_cast(m_shaders_editor.percent_outline)); @@ -870,6 +855,18 @@ void GCodeViewer::render_toolpaths() const glsafe(::glDisable(GL_VERTEX_PROGRAM_POINT_SIZE)); }; + auto render_as_lines = [this](const IBuffer& buffer, GLShaderProgram& shader) { + for (const RenderPath& path : buffer.render_paths) + { + shader.set_uniform("uniform_color", path.color); +// glsafe(::glMultiDrawElements(GL_LINES, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_INT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size())); + glsafe(::glMultiDrawElements(GL_LINE_STRIP, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_INT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size())); +#if ENABLE_GCODE_VIEWER_STATISTICS + ++m_statistics.gl_multi_line_strip_calls_count; +#endif // ENABLE_GCODE_VIEWER_STATISTICS + } + }; + auto line_width = [zoom]() { return (zoom < 5.0) ? 1.0 : (1.0 + 5.0 * (zoom - 5.0) / (100.0 - 5.0)); }; @@ -902,62 +899,14 @@ void GCodeViewer::render_toolpaths() const switch (type) { - case GCodeProcessor::EMoveType::Tool_change: - { - render_options(buffer, EOptionsColors::ToolChanges, *shader); - break; - } - case GCodeProcessor::EMoveType::Color_change: - { - render_options(buffer, EOptionsColors::ColorChanges, *shader); - break; - } - case GCodeProcessor::EMoveType::Pause_Print: - { - render_options(buffer, EOptionsColors::PausePrints, *shader); - break; - } - case GCodeProcessor::EMoveType::Custom_GCode: - { - render_options(buffer, EOptionsColors::CustomGCodes, *shader); - break; - } - case GCodeProcessor::EMoveType::Retract: - { - render_options(buffer, EOptionsColors::Retractions, *shader); - break; - } - case GCodeProcessor::EMoveType::Unretract: - { - render_options(buffer, EOptionsColors::Unretractions, *shader); - break; - } + case GCodeProcessor::EMoveType::Tool_change: { render_as_points(buffer, EOptionsColors::ToolChanges, *shader); break; } + case GCodeProcessor::EMoveType::Color_change: { render_as_points(buffer, EOptionsColors::ColorChanges, *shader); break; } + case GCodeProcessor::EMoveType::Pause_Print: { render_as_points(buffer, EOptionsColors::PausePrints, *shader); break; } + case GCodeProcessor::EMoveType::Custom_GCode: { render_as_points(buffer, EOptionsColors::CustomGCodes, *shader); break; } + case GCodeProcessor::EMoveType::Retract: { render_as_points(buffer, EOptionsColors::Retractions, *shader); break; } + case GCodeProcessor::EMoveType::Unretract: { render_as_points(buffer, EOptionsColors::Unretractions, *shader); break; } case GCodeProcessor::EMoveType::Extrude: - { - for (const RenderPath& path : buffer.render_paths) - { - shader->set_uniform("uniform_color", path.color); - glsafe(::glMultiDrawElements(GL_LINE_STRIP, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_INT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size())); -#if ENABLE_GCODE_VIEWER_STATISTICS - ++m_statistics.gl_multi_line_strip_calls_count; -#endif // ENABLE_GCODE_VIEWER_STATISTICS - - } - break; - } - case GCodeProcessor::EMoveType::Travel: - { - for (const RenderPath& path : buffer.render_paths) - { - shader->set_uniform("uniform_color", path.color); - glsafe(::glMultiDrawElements(GL_LINE_STRIP, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_INT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size())); -#if ENABLE_GCODE_VIEWER_STATISTICS - ++m_statistics.gl_multi_line_strip_calls_count; -#endif // ENABLE_GCODE_VIEWER_STATISTICS - - } - break; - } + case GCodeProcessor::EMoveType::Travel: { render_as_lines(buffer, *shader); break; } } glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); @@ -1090,8 +1039,7 @@ void GCodeViewer::render_legend() const // draw text ImGui::Dummy({ icon_size, icon_size }); ImGui::SameLine(); - if (callback != nullptr) - { + if (callback != nullptr) { if (ImGui::MenuItem(label.c_str())) callback(); } @@ -1114,8 +1062,7 @@ void GCodeViewer::render_legend() const if (step_size == 0.0f) // single item use case add_range_item(0, range.min, decimals); - else - { + else { for (int i = static_cast(Range_Colors.size()) - 1; i >= 0; --i) { add_range_item(i, range.min + static_cast(i) * step_size, decimals); } @@ -1297,8 +1244,7 @@ void GCodeViewer::render_legend() const } // travel paths - if (m_buffers[buffer_id(GCodeProcessor::EMoveType::Travel)].visible) - { + if (m_buffers[buffer_id(GCodeProcessor::EMoveType::Travel)].visible) { switch (m_view_type) { case EViewType::Feedrate: @@ -1347,8 +1293,7 @@ void GCodeViewer::render_legend() const }; // options - if (any_option_visible()) - { + if (any_option_visible()) { // title ImGui::Spacing(); ImGui::Spacing(); @@ -1386,19 +1331,19 @@ void GCodeViewer::render_statistics() const imgui.text(std::string("Load time:")); ImGui::PopStyleColor(); ImGui::SameLine(offset); - imgui.text(std::to_string(m_statistics.load_time) + "ms"); + imgui.text(std::to_string(m_statistics.load_time) + " ms"); ImGui::PushStyleColor(ImGuiCol_Text, ORANGE); imgui.text(std::string("Resfresh time:")); ImGui::PopStyleColor(); ImGui::SameLine(offset); - imgui.text(std::to_string(m_statistics.refresh_time) + "ms"); + imgui.text(std::to_string(m_statistics.refresh_time) + " ms"); ImGui::PushStyleColor(ImGuiCol_Text, ORANGE); imgui.text(std::string("Resfresh paths time:")); ImGui::PopStyleColor(); ImGui::SameLine(offset); - imgui.text(std::to_string(m_statistics.refresh_paths_time) + "ms"); + imgui.text(std::to_string(m_statistics.refresh_paths_time) + " ms"); ImGui::Separator(); @@ -1496,11 +1441,9 @@ void GCodeViewer::render_shaders_editor() const case 2: { set_shader("options_120_solid"); break; } } - if (ImGui::CollapsingHeader("Options", ImGuiTreeNodeFlags_DefaultOpen)) - { + if (ImGui::CollapsingHeader("Options", ImGuiTreeNodeFlags_DefaultOpen)) { ImGui::SliderFloat("point size", &m_shaders_editor.point_size, 0.5f, 3.0f, "%.1f"); - if (m_shaders_editor.shader_version == 1) - { + if (m_shaders_editor.shader_version == 1) { ImGui::SliderInt("percent outline", &m_shaders_editor.percent_outline, 0, 50); ImGui::SliderInt("percent center", &m_shaders_editor.percent_center, 0, 50); }