From e0e1e2b68218e4092d0871a55c7a0d39febde7d3 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Tue, 26 Mar 2019 10:38:50 +0100 Subject: [PATCH] Improved SLA layer view: Low layer shall be rendered from the slice above, triangulated slices are shifted slightly away from the clipping planes. FDM: Ported a "(bridged)" G-code comment from upstream. --- src/libslic3r/GCode.cpp | 3 +++ src/libslic3r/SLAPrint.hpp | 8 ++++---- src/slic3r/GUI/GLCanvas3D.cpp | 17 +++++++++++------ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 94be37b21..d9f907f03 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -2408,6 +2408,9 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, { std::string gcode; + if (is_bridge(path.role())) + description += " (bridge)"; + // go to first point of extrusion path if (!m_last_pos_defined || m_last_pos != path.first_point()) { gcode += this->travel_to( diff --git a/src/libslic3r/SLAPrint.hpp b/src/libslic3r/SLAPrint.hpp index fbe2821b2..d98f04294 100644 --- a/src/libslic3r/SLAPrint.hpp +++ b/src/libslic3r/SLAPrint.hpp @@ -350,10 +350,10 @@ public: } const PrintObjects& objects() const { return m_objects; } - const SLAPrintConfig& print_config() const { return m_print_config; } - const SLAPrinterConfig& printer_config() const { return m_printer_config; } - const SLAMaterialConfig& material_config() const { return m_material_config; } - + const SLAPrintConfig& print_config() const { return m_print_config; } + const SLAPrinterConfig& printer_config() const { return m_printer_config; } + const SLAMaterialConfig& material_config() const { return m_material_config; } + const SLAPrintObjectConfig& default_object_config() const { return m_default_object_config; } std::string output_filename() const override; diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 8be187dec..2718eac6c 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -5009,23 +5009,28 @@ void GLCanvas3D::_render_sla_slices() const if ((bottom_obj_triangles.empty() || bottom_sup_triangles.empty() || top_obj_triangles.empty() || top_sup_triangles.empty()) && obj->is_step_done(slaposIndexSlices)) { + double layer_height = print->default_object_config().layer_height.value; double initial_layer_height = print->material_config().initial_layer_height.value; LevelID key_zero = obj->get_slice_records().begin()->key(); - LevelID key_low = LevelID((clip_min_z - initial_layer_height) / SCALING_FACTOR) + key_zero; + // Slice at the center of the slab starting at clip_min_z will be rendered for the lower plane. + LevelID key_low = LevelID((clip_min_z - initial_layer_height + layer_height) / SCALING_FACTOR) + key_zero; + // Slice at the center of the slab ending at clip_max_z will be rendered for the upper plane. LevelID key_high = LevelID((clip_max_z - initial_layer_height) / SCALING_FACTOR) + key_zero; auto slice_range = obj->get_slice_records(key_low - LevelID(SCALED_EPSILON), key_high - LevelID(SCALED_EPSILON)); auto it_low = slice_range.begin(); auto it_high = std::prev(slice_range.end()); - + // Offset to avoid OpenGL Z fighting between the object's horizontal surfaces and the triangluated surfaces of the cuts. + double plane_shift_z = 0.002f; + if (! it_low.is_end() && it_low->key() < key_low + LevelID(SCALED_EPSILON)) { const ExPolygons& obj_bottom = obj->get_slices_from_record(it_low, soModel); const ExPolygons& sup_bottom = obj->get_slices_from_record(it_low, soSupport); // calculate model bottom cap if (bottom_obj_triangles.empty() && !obj_bottom.empty()) - bottom_obj_triangles = triangulate_expolygons_3d(obj_bottom, clip_min_z, true); + bottom_obj_triangles = triangulate_expolygons_3d(obj_bottom, clip_min_z - plane_shift_z, true); // calculate support bottom cap if (bottom_sup_triangles.empty() && !sup_bottom.empty()) - bottom_sup_triangles = triangulate_expolygons_3d(sup_bottom, clip_min_z, true); + bottom_sup_triangles = triangulate_expolygons_3d(sup_bottom, clip_min_z - plane_shift_z, true); } if (! it_high.is_end() && it_high->key() < key_high + LevelID(SCALED_EPSILON)) { @@ -5033,10 +5038,10 @@ void GLCanvas3D::_render_sla_slices() const const ExPolygons& sup_top = obj->get_slices_from_record(it_high, soSupport); // calculate model top cap if (top_obj_triangles.empty() && !obj_top.empty()) - top_obj_triangles = triangulate_expolygons_3d(obj_top, clip_max_z, false); + top_obj_triangles = triangulate_expolygons_3d(obj_top, clip_max_z + plane_shift_z, false); // calculate support top cap if (top_sup_triangles.empty() && !sup_top.empty()) - top_sup_triangles = triangulate_expolygons_3d(sup_top, clip_max_z, false); + top_sup_triangles = triangulate_expolygons_3d(sup_top, clip_max_z + plane_shift_z, false); } }