From 391c53a8da83c350c2913066a4e4d187581414ab Mon Sep 17 00:00:00 2001 From: ExPikaPaka Date: Thu, 1 Oct 2026 09:15:15 +0200 Subject: [PATCH 001/137] Take the print config by reference while simplifying extrusions simplify_path, simplify_multi_path and simplify_loop each copied the whole PrintConfig, 10520 bytes with around 200 heap owning members, once per extrusion entity, from inside the parallel_for over all layers. LayerRegion.cpp already binds a reference a few hundred lines above. Three more sites in Layer.cpp do the same thing. The tree support changes in the same area: draw_circles() dropped layers from an owning vector without deleting them, so every re-slice leaked the layers above the topmost overhang. std::stable_partition rather than std::remove_if, because remove_if leaves moved-from duplicates of kept pointers in the tail and deleting those would be a double free. The collision and avoidance accessors returned ExPolygons by value out of a cache that hands them out by reference, several times per node per layer. The preview cache is released when the support step finishes instead of at the start of the next slice; nothing reads it in between. set_shared_object() now releases the layers the object still owns before it starts aliasing another object's. Both clear functions are no-ops once the alias is set, so this cannot free the sharee's layers. PrintObjectSlice.cpp: eps was a function local static inside a parallel_for, so slice_closing_radius was latched once per process. This one changes output for projects that override it per object, or on a re-slice after editing it. The old behaviour was undefined: whichever object won the race set it for the session. --- src/libslic3r/Layer.cpp | 6 ++-- src/libslic3r/LayerRegion.cpp | 6 ++-- src/libslic3r/Print.cpp | 24 ++++++++------- src/libslic3r/PrintObject.cpp | 3 ++ src/libslic3r/PrintObjectSlice.cpp | 2 +- src/libslic3r/Support/TreeSupport.cpp | 42 ++++++++------------------- src/libslic3r/Support/TreeSupport.hpp | 4 +-- 7 files changed, 37 insertions(+), 50 deletions(-) diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 7bdef5a4ff..cec91c4ede 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -360,7 +360,7 @@ void Layer::simplify_support_entity_collection(ExtrusionEntityCollection* entity //BBS: method to simplify support path void Layer::simplify_support_path(ExtrusionPath * path) { - const auto print_config = this->object()->print()->config(); + const PrintConfig &print_config = this->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); @@ -375,7 +375,7 @@ void Layer::simplify_support_path(ExtrusionPath * path) //BBS: method to simplify support path void Layer::simplify_support_multi_path(ExtrusionMultiPath* multipath) { - const auto print_config = this->object()->print()->config(); + const PrintConfig &print_config = this->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); @@ -392,7 +392,7 @@ void Layer::simplify_support_multi_path(ExtrusionMultiPath* multipath) //BBS: method to simplify support path void Layer::simplify_support_loop(ExtrusionLoop* loop) { - const auto print_config = this->object()->print()->config(); + const PrintConfig &print_config = this->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); diff --git a/src/libslic3r/LayerRegion.cpp b/src/libslic3r/LayerRegion.cpp index 6f868ba095..7780c0b63b 100644 --- a/src/libslic3r/LayerRegion.cpp +++ b/src/libslic3r/LayerRegion.cpp @@ -1074,7 +1074,7 @@ void LayerRegion::simplify_entity_collection(ExtrusionEntityCollection* entity_c void LayerRegion::simplify_path(ExtrusionPath* path) { - const auto print_config = this->layer()->object()->print()->config(); + const PrintConfig &print_config = this->layer()->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); @@ -1092,7 +1092,7 @@ void LayerRegion::simplify_path(ExtrusionPath* path) void LayerRegion::simplify_multi_path(ExtrusionMultiPath* multipath) { - const auto print_config = this->layer()->object()->print()->config(); + const PrintConfig &print_config = this->layer()->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); @@ -1112,7 +1112,7 @@ void LayerRegion::simplify_multi_path(ExtrusionMultiPath* multipath) void LayerRegion::simplify_loop(ExtrusionLoop* loop) { - const auto print_config = this->layer()->object()->print()->config(); + const PrintConfig &print_config = this->layer()->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 5f5592cfce..2d11f975dc 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -2604,6 +2604,11 @@ void Print::auto_assign_extruders(ModelObject* model_object) const void PrintObject::set_shared_object(PrintObject *object) { + // Orca: from now on m_layers / m_support_layers only alias the shared object's layers, so release the + // ones this object still owns (it may have sliced itself before it became shareable again). + // Both are no-ops once m_shared_object is set, so this cannot free layers owned by another object. + clear_support_layers(); + clear_layers(); m_shared_object = object; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": this=%1%, found shared object from %2%")%this%m_shared_object; } @@ -4329,9 +4334,9 @@ bool Print::is_dynamic_group_reorder() const return true; } -int Print::get_filament_config_indx(int filament_id, int layer_id, bool use_cache) +int Print::get_filament_config_indx(int filament_id, int layer_id) { - return get_config_index(filament_id, layer_id, m_config.filament_extruder_variant.values, m_filament_self_index, use_cache ? &m_filament_index_map : nullptr); + return get_config_index(filament_id, layer_id, m_config.filament_extruder_variant.values, m_filament_self_index, m_filament_index_map); } void Print::update_filament_self_index_cache() @@ -4374,7 +4379,7 @@ int Print::get_nozzle_config_index(int filament_id, int layer_id) return get_config_index(filament_id, layer_id, m_default_region_config.print_extruder_variant.values, m_default_region_config.print_extruder_id.values, m_nozzle_index_map); } -int Print::get_config_index(int filament_id, int layer_id, const std::vector &variant_list, const std::vector& self_index_list, FilamentIndexMap *index_map) +int Print::get_config_index(int filament_id, int layer_id, const std::vector &variant_list, const std::vector& self_index_list, FilamentIndexMap &index_map) { auto group_result = get_layered_nozzle_group_result(); // Orca: defensive — when no grouping producer has published a result yet, fall back to the @@ -4385,8 +4390,7 @@ int Print::get_config_index(int filament_id, int layer_id, const std::vectorextruder_id)); NozzleVolumeType nozzle_volume_type = nozzle_info->volume_type; - if (!index_map) - return get_config_index_base(nozzle_volume_type, extruder_type, filament_id + 1, variant_list, self_index_list); FilamentIndexKey key{filament_id, extruder_type, nozzle_volume_type}; - auto iter = index_map->find(key); - if (iter == index_map->end()) { + auto iter = index_map.find(key); + if (iter == index_map.end()) { int index = get_config_index_base(nozzle_volume_type, extruder_type, filament_id + 1, variant_list, self_index_list); - (*index_map)[key] = index; + index_map[key] = index; return index; } else { - return iter->second; + return index_map[key]; } } diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 3b7e889472..e9b3e0379b 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -987,6 +987,9 @@ void PrintObject::generate_support_material() this->_generate_support_material(); m_print->throw_if_canceled(); } + // Orca: the tree support collision/avoidance caches and support nodes are only used while this step runs + // (detect_overhangs() rebuilds them from scratch), so don't keep them resident until the next slice. + this->clear_tree_support_preview_cache(); this->set_done(posSupportMaterial); } } diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 14bd65c9cf..36f0afa1ba 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -1346,7 +1346,7 @@ void PrintObject::slice_volumes() if (min_growth < 0.f || elfoot > 0.f) { // Apply the negative XY compensation. (the ones that is <0) ExPolygons trimming; - static const float eps = float(scale_(m_config.slice_closing_radius.value) * 1.5); + const float eps = float(scale_(m_config.slice_closing_radius.value) * 1.5); if (elfoot > 0.f) { ExPolygons expolygons_to_compensate = offset_ex(layer->merged(eps), -eps); lslices_elfoot_uncompensated[layer_id] = expolygons_to_compensate; diff --git a/src/libslic3r/Support/TreeSupport.cpp b/src/libslic3r/Support/TreeSupport.cpp index 519b6e826e..4da67f68a3 100644 --- a/src/libslic3r/Support/TreeSupport.cpp +++ b/src/libslic3r/Support/TreeSupport.cpp @@ -1820,37 +1820,15 @@ coordf_t TreeSupport::get_radius(const SupportNode* node) return node->radius; } -ExPolygons TreeSupport::get_avoidance(coordf_t radius, size_t obj_layer_nr) +// Orca: these are hit up to several times per node per layer in drop_nodes(), so hand out a +// reference into the TreeSupportData cache instead of copying the ExPolygons out of it. +const ExPolygons& TreeSupport::get_avoidance(coordf_t radius, size_t obj_layer_nr) { -#if USE_SUPPORT_3D - if (m_model_volumes) { - bool on_build_plate = m_object_config->support_on_build_plate_only.value; - const Polygons& avoid_polys = m_model_volumes->getAvoidance(radius, obj_layer_nr, TreeSupport3D::TreeModelVolumes::AvoidanceType::FastSafe, on_build_plate, true); - ExPolygons expolys; - for (auto& poly : avoid_polys) - expolys.emplace_back(std::move(poly)); - return expolys; - } - return ExPolygons(); -#else return m_ts_data->get_avoidance(radius, obj_layer_nr); -#endif } -ExPolygons TreeSupport::get_collision(coordf_t radius, size_t layer_nr) +const ExPolygons& TreeSupport::get_collision(coordf_t radius, size_t layer_nr) { -#if USE_SUPPORT_3D - if (m_model_volumes) { - bool on_build_plate = m_object_config->support_on_build_plate_only.value; - const Polygons& collision_polys = m_model_volumes->getCollision(radius, layer_nr, true); - ExPolygons expolys; - for (auto& poly : collision_polys) - expolys.emplace_back(std::move(poly)); - return expolys; - } -#else return m_ts_data->get_collision(radius, layer_nr); -#endif - return ExPolygons(); } Polygons TreeSupport::get_collision_polys(coordf_t radius, size_t layer_nr) { @@ -2639,7 +2617,11 @@ void TreeSupport::draw_circles() #endif // SUPPORT_TREE_DEBUG_TO_SVG SupportLayerPtrs& ts_layers = m_object->support_layers(); - auto iter = std::remove_if(ts_layers.begin(), ts_layers.end(), [](SupportLayer* ts_layer) { return ts_layer->height < EPSILON; }); + // Orca: the vector owns its layers, so the dropped ones have to be deleted, not just unlinked. + // std::stable_partition (unlike std::remove_if) leaves exactly the dropped layers in the tail. + auto iter = std::stable_partition(ts_layers.begin(), ts_layers.end(), [](SupportLayer* ts_layer) { return ts_layer->height >= EPSILON; }); + for (auto it = iter; it != ts_layers.end(); ++it) + delete *it; ts_layers.erase(iter, ts_layers.end()); for (int layer_nr = 0; layer_nr < ts_layers.size(); layer_nr++) { ts_layers[layer_nr]->upper_layer = layer_nr != ts_layers.size() - 1 ? ts_layers[layer_nr + 1] : nullptr; @@ -2882,7 +2864,7 @@ void TreeSupport::drop_nodes() //Insert a completely new node and let both original nodes fade. Point next_position = (node.position + neighbours[0]) / 2; //Average position of the two nodes. coordf_t next_radius = calc_radius(node.dist_mm_to_top+height_next); - auto avoid_layer = get_avoidance(next_radius, obj_layer_nr_next); + const ExPolygons& avoid_layer = get_avoidance(next_radius, obj_layer_nr_next); if (group_index == 0) { //Avoid collisions. @@ -3069,7 +3051,7 @@ void TreeSupport::drop_nodes() } #endif coordf_t next_radius = calc_radius(node.dist_mm_to_top + height_next); - auto avoidance_next = get_avoidance(next_radius, obj_layer_nr_next); + const ExPolygons& avoidance_next = get_avoidance(next_radius, obj_layer_nr_next); Point to_outside = projection_onto(avoidance_next, node.position); Point direction_to_outer = to_outside - node.position; @@ -3123,7 +3105,7 @@ void TreeSupport::drop_nodes() if (is_outside) { next_layer_vertex = candidate_vertex; } } } - auto next_collision = get_collision(0, obj_layer_nr_next); + const ExPolygons& next_collision = get_collision(0, obj_layer_nr_next); const bool to_buildplate = !is_inside_ex(m_ts_data->m_layer_outlines[obj_layer_nr_next], next_layer_vertex); // don't increase radius if next node will collide partially with the object (STUDIO-7883) to_outside = projection_onto(next_collision, next_layer_vertex); diff --git a/src/libslic3r/Support/TreeSupport.hpp b/src/libslic3r/Support/TreeSupport.hpp index bd5a154e26..e2b3921b82 100644 --- a/src/libslic3r/Support/TreeSupport.hpp +++ b/src/libslic3r/Support/TreeSupport.hpp @@ -511,9 +511,9 @@ private: coordf_t calc_branch_radius(coordf_t base_radius, coordf_t mm_to_top, double diameter_angle_scale_factor, bool use_min_distance=true); coordf_t calc_radius(coordf_t mm_to_top); coordf_t get_radius(const SupportNode* node); - ExPolygons get_avoidance(coordf_t radius, size_t obj_layer_nr); + const ExPolygons& get_avoidance(coordf_t radius, size_t obj_layer_nr); // layer's expolygon expanded by radius+m_xy_distance - ExPolygons get_collision(coordf_t radius, size_t layer_nr); + const ExPolygons& get_collision(coordf_t radius, size_t layer_nr); // get Polygons instead of ExPolygons Polygons get_collision_polys(coordf_t radius, size_t layer_nr); From bea412fddfa894143cfa641fd1ab24e7c478a496 Mon Sep 17 00:00:00 2001 From: ExPikaPaka Date: Thu, 1 Oct 2026 09:15:15 +0200 Subject: [PATCH 002/137] Move the G-code processing result instead of copying it GCodeProcessorResult declares a copy assignment, which suppresses the implicit move assignment, so `*result = std::move(processor.extract_result())` binds to the copy and duplicates the whole moves array: 96 bytes per move, measured at 147.7 MiB in one allocation for a 597k facet model at 0.08 mm, with the source staying alive until the export returns. Add the move assignment. It assigns exactly the same 39 members in the same order as the copy, including the ones the copy deliberately leaves alone, so a target that carries its own filament maps and nozzle type keeps them. A move constructor is intentionally not added: the type holds a std::mutex, so it is neither copy nor move constructible today and a partial one would leave ten members uninitialised. reset() now releases the two print sized vectors rather than clearing them. Its callers are the paths that discard a result, so the memory went back only at the next slice. ViewerImpl::reset() does the same for the two vectors sized by the print, which is what keeps a discarded preview resident, and counts m_vertices_colors in the reported CPU memory, where it was missing. --- src/libslic3r/GCode/GCodeProcessor.cpp | 8 +++-- src/libslic3r/GCode/GCodeProcessor.hpp | 50 ++++++++++++++++++++++++++ src/libvgcode/src/ViewerImpl.cpp | 9 +++-- 3 files changed, 62 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index e03be228d0..505a28335d 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -2582,8 +2582,12 @@ void GCodeProcessorResult::reset() { //BBS: add mutex for protection of gcode result lock(); - moves.clear(); - lines_ends.clear(); + // release rather than clear: these two are sized by the print - one entry per move and one + // per g-code line - and a reset is where the memory is expected to go back to the allocator + // (see BackgroundSlicingProcess::apply()). The capacity would not be reused anyway: the + // result is refilled by move-assigning the processor's own result. + moves = std::vector(); + lines_ends = std::vector(); printable_area = Pointfs(); //BBS: add bed exclude area bed_exclude_area = Pointfs(); diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 192a80a43d..a99a5188d6 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -369,6 +369,56 @@ class Print; initial_layer_time = other.initial_layer_time; #if ENABLE_GCODE_VIEWER_STATISTICS time = other.time; +#endif + return *this; + } + // Orca: the user-declared copy assignment above suppresses the implicit move assignment, so + // `*result = std::move(processor.extract_result())` used to deep copy 'moves' (one MoveVertex + // per move, gigabytes on a large print) while the source stayed alive. This moves exactly the + // same members as the copy above, with the same omissions, so the members the copy leaves + // untouched on the target are left untouched here too. + GCodeProcessorResult& operator=(GCodeProcessorResult &&other) + { + filename = std::move(other.filename); + id = other.id; + moves = std::move(other.moves); + lines_ends = std::move(other.lines_ends); + printable_area = std::move(other.printable_area); + bed_exclude_area = std::move(other.bed_exclude_area); + wrapping_exclude_area = std::move(other.wrapping_exclude_area); + toolpath_outside = other.toolpath_outside; + label_object_enabled = other.label_object_enabled; + long_retraction_when_cut = other.long_retraction_when_cut; + timelapse_warning_code = other.timelapse_warning_code; + printable_height = other.printable_height; + settings_ids = std::move(other.settings_ids); + filaments_count = other.filaments_count; + extruder_colors = std::move(other.extruder_colors); + filament_diameters = std::move(other.filament_diameters); + filament_densities = std::move(other.filament_densities); + filament_costs = std::move(other.filament_costs); + print_statistics = std::move(other.print_statistics); + custom_gcode_per_print_z = std::move(other.custom_gcode_per_print_z); + spiral_vase_mode = other.spiral_vase_mode; + warnings = std::move(other.warnings); + bed_type = other.bed_type; + gcode_check_result = std::move(other.gcode_check_result); + limit_filament_maps = std::move(other.limit_filament_maps); + filament_printable_reuslt = std::move(other.filament_printable_reuslt); + nozzle_group_result = std::move(other.nozzle_group_result); + extruder_types = std::move(other.extruder_types); + printer_extruder_variant = std::move(other.printer_extruder_variant); + printer_extruder_id = std::move(other.printer_extruder_id); + layer_filaments = std::move(other.layer_filaments); + filament_change_sequence = std::move(other.filament_change_sequence); + used_mixed_filaments = std::move(other.used_mixed_filaments); + nozzle_change_sequence = std::move(other.nozzle_change_sequence); + optimal_assignment = std::move(other.optimal_assignment); + filament_change_count_map = std::move(other.filament_change_count_map); + skippable_part_time = std::move(other.skippable_part_time); + initial_layer_time = other.initial_layer_time; +#if ENABLE_GCODE_VIEWER_STATISTICS + time = other.time; #endif return *this; } diff --git a/src/libvgcode/src/ViewerImpl.cpp b/src/libvgcode/src/ViewerImpl.cpp index 8212717931..e3e106bb59 100644 --- a/src/libvgcode/src/ViewerImpl.cpp +++ b/src/libvgcode/src/ViewerImpl.cpp @@ -883,15 +883,17 @@ void ViewerImpl::reset() m_used_extruders.clear(); m_total_time = { 0.0f, 0.0f }; m_travels_time = { 0.0f, 0.0f }; - m_vertices.clear(); - m_vertices_colors.clear(); // swap rather than clear: these are sized by the print, and a reset means the memory // should go back, not sit reserved until the next load + std::vector().swap(m_vertices); + std::vector().swap(m_vertices_colors); for (std::vector& times : m_layer_start_times) std::vector().swap(times); std::vector().swap(m_layer_first_vertex); std::vector().swap(m_colors_scratch); - m_valid_lines_bitset.clear(); + // BitSet::clear() only zeroes the bits, it keeps the blocks allocated; load() builds a new + // bitset anyway and it is never read while m_vertices is empty + m_valid_lines_bitset = BitSet<>(); #if VGCODE_ENABLE_COG_AND_TOOL_MARKERS m_cog_marker.reset(); #endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS @@ -1812,6 +1814,7 @@ size_t ViewerImpl::get_used_cpu_memory() const ret += sizeof(m_extrusion_roles_colors); ret += sizeof(m_options_colors); ret += STDVEC_MEMSIZE(m_vertices, PathVertex); + ret += STDVEC_MEMSIZE(m_vertices_colors, float); for (const std::vector& times : m_layer_start_times) ret += STDVEC_MEMSIZE(times, float); ret += STDVEC_MEMSIZE(m_layer_first_vertex, uint32_t); From fcb1f62bd93cd89bb822bb10d258fec138731ab7 Mon Sep 17 00:00:00 2001 From: ExPikaPaka Date: Mon, 5 Oct 2026 08:36:22 +0200 Subject: [PATCH 003/137] Save texture displacement in the project file A painted relief did not survive closing the project: nothing about the feature was written to the .3mf, so the layers, their textures and the paint mask were all lost on save. The layer struct's cereal save()/load() serve the undo/redo stack only, which is one session and one binary stream. Write the layer stack and the per-volume options as JSON in the archive, and each layer's texture as the image file it was loaded from, both referenced by path - the same split EmbossShape already makes for its SVG. The image stays out of the XML deliberately: it is binary and routinely megabytes, and base64 in an attribute would bloat the one file every reader parses just to list the objects. JSON rather than the cereal stream next to it because that one is positional and unversioned, which would make every future field a project-breaking change; an unknown key is ignored and a missing one keeps its default, so a project written by either side keeps loading. The paint masks go in as one attribute per layer slot, mirroring paint_color. Older readers ignore attributes they do not know, so a project written here still opens in a build without the feature - it loses the relief, which is all it could have done with it anyway. The layers are restored while the volume is being built rather than after the archive is walked: volumes are constructed only once the whole archive has been read, so a hook placed after the walk ran before any volume existed and restored nothing. --- src/libslic3r/Format/bbs_3mf.cpp | 152 ++++++++++- src/libslic3r/TextureDisplacement.cpp | 242 ++++++++++++++++++ src/libslic3r/TextureDisplacement.hpp | 17 ++ tests/libslic3r/test_texture_displacement.cpp | 136 ++++++++++ 4 files changed, 546 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 160c169d69..72e3d979da 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -298,6 +298,13 @@ static constexpr const char* CUSTOM_SUPPORTS_ATTR = "paint_supports"; static constexpr const char* CUSTOM_FUZZY_SKIN_ATTR = "paint_fuzzy_skin"; static constexpr const char* CUSTOM_SEAM_ATTR = "paint_seam"; static constexpr const char* MMU_SEGMENTATION_ATTR = "paint_color"; +// Texture displacement. One paint mask per layer slot, mirroring paint_color; the layer stack itself is +// a JSON file in the archive, named by the volume metadata key below (see add_texture_displacement()). +static constexpr const char* TEXTURE_DISPLACEMENT_ATTRS[Slic3r::TEXTURE_DISPLACEMENT_MAX_LAYERS] = { + "paint_texture_0", "paint_texture_1", "paint_texture_2", "paint_texture_3", + "paint_texture_4", "paint_texture_5", "paint_texture_6", "paint_texture_7" }; +static constexpr const char* TEXTURE_DISPLACEMENT_KEY = "texture_displacement"; +static constexpr const char* TEXTURE_DISPLACEMENT_DIR = "Metadata/texture_displacement/"; // BBS static constexpr const char* FACE_PROPERTY_ATTR = "face_property"; @@ -785,6 +792,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::vector custom_seam; std::vector mmu_segmentation; std::vector fuzzy_skin; + // One per texture displacement layer slot, each parallel to `triangles` like the masks above. + std::vector texture_displacement[TEXTURE_DISPLACEMENT_MAX_LAYERS]; // BBS std::vector face_properties; @@ -805,6 +814,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) custom_seam.clear(); mmu_segmentation.clear(); fuzzy_skin.clear(); + for (std::vector &slot : texture_displacement) + slot.clear(); } }; @@ -1138,6 +1149,11 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) /*IdToSlaSupportPointsMap m_sla_support_points; IdToSlaDrainHolesMap m_sla_drain_holes;*/ PathToEmbossShapeFileMap m_path_to_emboss_shape_files; + // Texture displacement: every file under Metadata/texture_displacement/, by archive path. Volumes + // are built only after the whole archive has been walked, so by the time a volume names its JSON + // every file it could refer to is already in here, whatever order the archive happened to be in. + std::map m_texture_displacement_files; + void _apply_texture_displacement(ModelVolume &volume, const std::string &json_path); std::string m_curr_metadata_name; std::string m_curr_characters; std::string m_name; @@ -2004,6 +2020,13 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) else if (_is_svg_shape_file(name)) { _extract_embossed_svg_shape_file(name, archive, stat); } + else if (boost::algorithm::istarts_with(name, TEXTURE_DISPLACEMENT_DIR)) { + std::string contents(stat.m_uncomp_size, '\0'); + if (mz_zip_reader_extract_to_mem(&archive, stat.m_file_index, contents.data(), stat.m_uncomp_size, 0)) + m_texture_displacement_files.emplace(name, std::move(contents)); + else + add_error("Error while reading texture displacement data"); + } else if (!dont_load_config && boost::algorithm::iequals(name, SLICE_INFO_CONFIG_FILE)) { m_parsing_slice_info = true; //extract slice info from archive @@ -3239,6 +3262,41 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } }*/ + // Restores one volume's texture displacement stack from the JSON it named. Called while the volume is + // being built, which is after the whole archive has been walked - so every file it can refer to is + // already extracted, and no deferral is needed. + // + // A missing or malformed JSON leaves the volume with no layers but keeps the paint mask it already + // loaded, which is the same state as a project saved by a build without the feature: recoverable by + // picking the texture again rather than a hard failure. + void _BBS_3MF_Importer::_apply_texture_displacement(ModelVolume &volume, const std::string &json_path) + { + const auto json = m_texture_displacement_files.find(json_path); + if (json == m_texture_displacement_files.end()) { + add_error("Missing texture displacement data: " + json_path); + return; + } + std::vector layers; + TextureDisplacementOptions options; + if (!texture_displacement_layers_from_json(json->second, layers, options)) { + add_error("Malformed texture displacement data: " + json_path); + return; + } + for (TextureDisplacementLayer &layer : layers) { + if (layer.path_in_3mf.empty()) + continue; + const auto image = m_texture_displacement_files.find(layer.path_in_3mf); + if (image == m_texture_displacement_files.end()) { + add_error("Missing texture displacement image: " + layer.path_in_3mf); + continue; + } + layer.image_data = std::make_shared>(image->second.begin(), + image->second.end()); + } + volume.texture_displacement_layers = std::move(layers); + volume.texture_displacement_options = options; + } + void _BBS_3MF_Importer::_extract_embossed_svg_shape_file(const std::string &filename, mz_zip_archive &archive, const mz_zip_archive_file_stat &stat){ assert(m_path_to_emboss_shape_files.find(filename) == m_path_to_emboss_shape_files.end()); auto file = std::make_unique(stat.m_uncomp_size, '\0'); @@ -3888,6 +3946,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_curr_object->geometry.custom_seam.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_SEAM_ATTR)); m_curr_object->geometry.mmu_segmentation.push_back(bbs_get_attribute_value_string(attributes, num_attributes, MMU_SEGMENTATION_ATTR)); m_curr_object->geometry.fuzzy_skin.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_FUZZY_SKIN_ATTR)); + for (int slot = 0; slot < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++slot) + m_curr_object->geometry.texture_displacement[slot].push_back( + bbs_get_attribute_value_string(attributes, num_attributes, TEXTURE_DISPLACEMENT_ATTRS[slot])); // BBS m_curr_object->geometry.face_properties.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FACE_PROPERTY_ATTR)); } @@ -5214,6 +5275,18 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) volume->mmu_segmentation_facets.touch(); volume->fuzzy_skin_facets.shrink_to_fit(); volume->fuzzy_skin_facets.touch(); + for (int slot = 0; slot < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++slot) { + const std::vector &mask = sub_object->geometry.texture_displacement[slot]; + if (mask.empty()) + continue; // written by a build without the feature + FacetsAnnotation &facets = volume->texture_displacement_facet(slot); + facets.reserve(triangles_count); + for (size_t i = 0; i < triangles_count && i < mask.size(); ++i) + if (!mask[i].empty()) + facets.set_triangle_from_string(i, mask[i]); + facets.shrink_to_fit(); + facets.touch(); + } } volume->set_type(volume_data->part_type); @@ -5229,6 +5302,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) for (const Metadata& metadata : volume_data->metadata) { if (metadata.key == NAME_KEY) volume->name = metadata.value; + else if (metadata.key == TEXTURE_DISPLACEMENT_KEY) + _apply_texture_displacement(*volume, metadata.value); //else if ((metadata.key == MODIFIER_KEY) && (metadata.value == "1")) // volume->set_type(ModelVolumeType::PARAMETER_MODIFIER); //for old format @@ -5393,12 +5468,28 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) volume->seam_facets.shrink_to_fit(); volume->mmu_segmentation_facets.shrink_to_fit(); + for (int slot = 0; slot < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++slot) { + const std::vector &mask = geometry.texture_displacement[slot]; + if (mask.empty()) + continue; // written by a build without the feature + FacetsAnnotation &facets = volume->texture_displacement_facet(slot); + facets.reserve(triangles_count); + for (size_t i = 0; i < triangles_count; ++i) { + const size_t index = volume_data.first_triangle_id + i; + if (index < mask.size() && !mask[index].empty()) + facets.set_triangle_from_string(i, mask[index]); + } + facets.shrink_to_fit(); + facets.touch(); + } volume->set_type(volume_data.part_type); // apply the remaining volume's metadata for (const Metadata& metadata : volume_data.metadata) { if (metadata.key == NAME_KEY) volume->name = metadata.value; + else if (metadata.key == TEXTURE_DISPLACEMENT_KEY) + _apply_texture_displacement(*volume, metadata.value); //else if ((metadata.key == MODIFIER_KEY) && (metadata.value == "1")) // volume->set_type(ModelVolumeType::PARAMETER_MODIFIER); //for old format @@ -5695,6 +5786,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) current_object->geometry.custom_seam.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_SEAM_ATTR)); current_object->geometry.mmu_segmentation.push_back(bbs_get_attribute_value_string(attributes, num_attributes, MMU_SEGMENTATION_ATTR)); current_object->geometry.fuzzy_skin.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_FUZZY_SKIN_ATTR)); + for (int slot = 0; slot < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++slot) + current_object->geometry.texture_displacement[slot].push_back( + bbs_get_attribute_value_string(attributes, num_attributes, TEXTURE_DISPLACEMENT_ATTRS[slot])); // BBS current_object->geometry.face_properties.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FACE_PROPERTY_ATTR)); } @@ -6698,6 +6792,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " \n"; stream << " \n"; stream << " \n"; + stream << " \n"; + stream << " \n"; + stream << " \n"; stream << " \n"; stream << ""; @@ -7541,6 +7638,20 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) output_buffer += "\""; } + // One attribute per texture displacement layer slot. Older readers ignore attributes they do + // not know, so a project written here still opens in a build without the feature - it just + // loses the paint, which is also all it could have done with it. + for (int slot = 0; slot < TEXTURE_DISPLACEMENT_MAX_LAYERS; ++slot) { + const std::string texture_paint = volume->texture_displacement_facet(slot).get_triangle_as_string(i); + if (texture_paint.empty()) + continue; + output_buffer += " "; + output_buffer += TEXTURE_DISPLACEMENT_ATTRS[slot]; + output_buffer += "=\""; + output_buffer += texture_paint; + output_buffer += "\""; + } + // BBS if (i < its.properties.size()) { std::string prop_str = its.properties[i].to_string(); @@ -7990,7 +8101,44 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return file_path; } - bool _BBS_3MF_Exporter::_add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const ObjectToObjectDataMap &objects_data, const DynamicPrintConfig& config, int export_plate_idx, bool save_gcode, bool use_loaded_id) + // Writes a volume's texture displacement stack into the archive and points the volume's metadata at it. +// The layer settings go in as JSON and each layer's texture as the image file it was loaded from, both +// referenced by path - the same split EmbossShape makes for its SVG. The image deliberately stays out of +// the XML: it is binary and routinely megabytes, and base64 in an attribute would bloat the one file +// every reader has to parse just to list the objects. +static void add_texture_displacement(std::stringstream &stream, const ModelVolume &volume, mz_zip_archive &archive, + const std::string &id) +{ + if (volume.texture_displacement_layers.empty()) + return; + + // A copy, because path_in_3mf is only meaningful inside the archive being written and the volume + // being exported is const (and may be saved again, elsewhere, with different paths). + std::vector layers = volume.texture_displacement_layers; + for (TextureDisplacementLayer &layer : layers) { + layer.path_in_3mf.clear(); + if (!layer.image_data || layer.image_data->empty()) + continue; + std::string ext = boost::filesystem::path(layer.path).extension().string(); + boost::to_lower(ext); + if (ext != ".png" && ext != ".jpg" && ext != ".jpeg") + ext = ".png"; // the library ships PNG; anything unrecognised is stored under a type a reader expects + const std::string path = std::string(TEXTURE_DISPLACEMENT_DIR) + id + "_" + std::to_string(layer.slot) + ext; + // No deflate: PNG and JPEG are already compressed, so a second pass only costs time. + if (mz_zip_writer_add_mem(&archive, path.c_str(), layer.image_data->data(), layer.image_data->size(), + MZ_NO_COMPRESSION)) + layer.path_in_3mf = path; + } + + const std::string json = texture_displacement_layers_to_json(layers, volume.texture_displacement_options); + const std::string json_path = std::string(TEXTURE_DISPLACEMENT_DIR) + id + ".json"; + if (!mz_zip_writer_add_mem(&archive, json_path.c_str(), json.data(), json.size(), MZ_DEFAULT_COMPRESSION)) + return; + stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << TEXTURE_DISPLACEMENT_KEY << "\" " + << VALUE_ATTR << "=\"" << xml_escape(json_path) << "\"/>\n"; +} + +bool _BBS_3MF_Exporter::_add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const ObjectToObjectDataMap &objects_data, const DynamicPrintConfig& config, int export_plate_idx, bool save_gcode, bool use_loaded_id) { std::stringstream stream; // Store mesh transformation in full precision, as the volumes are stored transformed and they need to be transformed back @@ -8101,6 +8249,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (const std::optional &es = volume->emboss_shape; es.has_value()) { to_xml(stream, *es, *volume, archive, m_fullpath_sources); } + + add_texture_displacement(stream, *volume, archive, std::to_string(volume->id().id)); if (const std::optional &tc = volume->text_configuration; tc.has_value()) diff --git a/src/libslic3r/TextureDisplacement.cpp b/src/libslic3r/TextureDisplacement.cpp index 862c6c9044..86ae498567 100644 --- a/src/libslic3r/TextureDisplacement.cpp +++ b/src/libslic3r/TextureDisplacement.cpp @@ -14,6 +14,7 @@ #include #include #include +#include "nlohmann/json.hpp" #include #include #include @@ -5041,4 +5042,245 @@ indexed_triangle_set cut_mesh_at_steps(const indexed_triangle_set &mesh, const s return out; } +// --------------------------------------------------------------------------------------------- +// Project persistence. See the declarations in TextureDisplacement.hpp for why this is JSON rather +// than the cereal stream next to them. +// --------------------------------------------------------------------------------------------- +namespace { + +nlohmann::json vec2_to_json(const Vec2f &v) { return nlohmann::json::array({ v.x(), v.y() }); } +nlohmann::json vec3_to_json(const Vec3f &v) { return nlohmann::json::array({ v.x(), v.y(), v.z() }); } + +Vec2f vec2_from_json(const nlohmann::json &j, const Vec2f &fallback) +{ + if (!j.is_array() || j.size() != 2) + return fallback; + return Vec2f(j[0].get(), j[1].get()); +} +Vec3f vec3_from_json(const nlohmann::json &j, const Vec3f &fallback) +{ + if (!j.is_array() || j.size() != 3) + return fallback; + return Vec3f(j[0].get(), j[1].get(), j[2].get()); +} + +// Reads key `k` into `out` when it is present and of the expected type, leaving `out` alone otherwise. +// That "leave it alone" is the whole point: every member starts at its struct default, so a project +// written by an older build simply keeps the defaults for whatever it did not know about. +template void read(const nlohmann::json &j, const char *k, T &out) +{ + const auto it = j.find(k); + if (it == j.end()) + return; + try { + out = it->get(); + } catch (...) { + } +} +void read_enum(const nlohmann::json &j, const char *k, int &out) +{ + const auto it = j.find(k); + if (it != j.end() && it->is_number_integer()) + out = it->get(); +} + +} // namespace + +std::string texture_displacement_layers_to_json(const std::vector &layers, + const TextureDisplacementOptions &options) +{ + nlohmann::json root; + root["version"] = 1; + + nlohmann::json &opt = root["options"]; + opt["displace_border"] = options.displace_border; + opt["smooth_enabled"] = options.smooth_enabled; + opt["smooth_strength"] = options.smooth_strength; + opt["smooth_iterations"] = options.smooth_iterations; + opt["smooth_skip_border"] = options.smooth_skip_border; + opt["pipeline_v2"] = options.pipeline_v2; + opt["v2_refine_mm"] = options.v2_refine_mm; + opt["v2_regularize"] = options.v2_regularize; + opt["v2_max_triangles_k"] = options.v2_max_triangles_k; + opt["v2_relocate"] = options.v2_relocate; + opt["v2_flip_edges"] = options.v2_flip_edges; + opt["color_mix_enabled"] = options.color_mix_enabled; + opt["color_mix_mode"] = int(options.color_mix_mode); + opt["color_despeckle"] = options.color_despeckle; + + nlohmann::json &arr = root["layers"]; + arr = nlohmann::json::array(); + for (const TextureDisplacementLayer &l : layers) { + nlohmann::json j; + j["slot"] = l.slot; + j["name"] = l.name; + j["path"] = l.path; + j["path_in_3mf"] = l.path_in_3mf; + + j["depth_mm"] = l.depth_mm; + j["tiling_scale"] = l.tiling_scale; + j["rotation_deg"] = l.rotation_deg; + j["offset"] = vec2_to_json(l.offset); + j["invert"] = l.invert; + j["midlevel"] = l.midlevel; + j["smoothing"] = l.smoothing; + + j["edge_smoothing"] = l.edge_smoothing; + j["edge_smoothing_amount"] = l.edge_smoothing_amount; + j["auto_connect_islands"] = l.auto_connect_islands; + + j["tile_enabled"] = l.tile_enabled; + j["tile_method"] = int(l.tile_method); + j["projection_method"] = int(l.projection_method); + j["blend_mode"] = int(l.blend_mode); + j["color_enabled"] = l.color_enabled; + + j["lscm_seam_angle_deg"] = l.lscm_seam_angle_deg; + j["island_padding_mm"] = l.island_padding_mm; + + j["view_project_right"] = vec3_to_json(l.view_project_right); + j["view_project_up"] = vec3_to_json(l.view_project_up); + j["view_project_projective"] = l.view_project_projective; + j["view_project_matrix"] = l.view_project_matrix; + + // Flat pairs rather than nested arrays: shorter, and the reader can simply ignore a trailing + // odd element instead of having to validate every sub-array. + nlohmann::json &seams = j["lscm_seam_edges"]; + seams = nlohmann::json::array(); + for (const auto &[a, b] : l.lscm_seam_edges) { + seams.push_back(a); + seams.push_back(b); + } + + nlohmann::json &islands = j["islands"]; + islands = nlohmann::json::array(); + for (const TextureIsland &island : l.islands) + islands.push_back(nlohmann::json::array( + { island.offset.x(), island.offset.y(), island.rotation_deg, island.scale })); + + j["island_groups"] = l.island_groups; + + nlohmann::json &overrides = j["lscm_uv_overrides"]; + overrides = nlohmann::json::array(); + for (const auto &[key, uv] : l.lscm_uv_overrides) + overrides.push_back(nlohmann::json::array({ key, uv.x(), uv.y() })); + + arr.push_back(std::move(j)); + } + return root.dump(); +} + +bool texture_displacement_layers_from_json(const std::string &text, + std::vector &layers, + TextureDisplacementOptions &options) +{ + nlohmann::json root; + try { + root = nlohmann::json::parse(text); + } catch (...) { + return false; + } + if (!root.is_object()) + return false; + + TextureDisplacementOptions out_options; + if (const auto it = root.find("options"); it != root.end() && it->is_object()) { + const nlohmann::json &opt = *it; + read(opt, "displace_border", out_options.displace_border); + read(opt, "smooth_enabled", out_options.smooth_enabled); + read(opt, "smooth_strength", out_options.smooth_strength); + read(opt, "smooth_iterations", out_options.smooth_iterations); + read(opt, "smooth_skip_border", out_options.smooth_skip_border); + read(opt, "pipeline_v2", out_options.pipeline_v2); + read(opt, "v2_refine_mm", out_options.v2_refine_mm); + read(opt, "v2_regularize", out_options.v2_regularize); + read(opt, "v2_max_triangles_k", out_options.v2_max_triangles_k); + read(opt, "v2_relocate", out_options.v2_relocate); + read(opt, "v2_flip_edges", out_options.v2_flip_edges); + read(opt, "color_mix_enabled", out_options.color_mix_enabled); + read(opt, "color_despeckle", out_options.color_despeckle); + int mix_mode = int(out_options.color_mix_mode); + read_enum(opt, "color_mix_mode", mix_mode); + out_options.color_mix_mode = ColorMixMode(std::clamp(mix_mode, 0, 2)); + } + + std::vector out_layers; + if (const auto it = root.find("layers"); it != root.end() && it->is_array()) { + for (const nlohmann::json &j : *it) { + if (!j.is_object()) + continue; + TextureDisplacementLayer l; + read(j, "slot", l.slot); + read(j, "name", l.name); + read(j, "path", l.path); + read(j, "path_in_3mf", l.path_in_3mf); + + read(j, "depth_mm", l.depth_mm); + read(j, "tiling_scale", l.tiling_scale); + read(j, "rotation_deg", l.rotation_deg); + if (const auto o = j.find("offset"); o != j.end()) + l.offset = vec2_from_json(*o, l.offset); + read(j, "invert", l.invert); + read(j, "midlevel", l.midlevel); + read(j, "smoothing", l.smoothing); + + read(j, "edge_smoothing", l.edge_smoothing); + read(j, "edge_smoothing_amount", l.edge_smoothing_amount); + read(j, "auto_connect_islands", l.auto_connect_islands); + + read(j, "tile_enabled", l.tile_enabled); + read(j, "color_enabled", l.color_enabled); + int tile_method = int(l.tile_method), projection = int(l.projection_method), blend = int(l.blend_mode); + read_enum(j, "tile_method", tile_method); + read_enum(j, "projection_method", projection); + read_enum(j, "blend_mode", blend); + l.tile_method = TextureTileMethod(tile_method); + l.projection_method = TextureProjectionMethod(std::clamp(projection, 0, 4)); + l.blend_mode = TextureBlendMode(blend); + + read(j, "lscm_seam_angle_deg", l.lscm_seam_angle_deg); + read(j, "island_padding_mm", l.island_padding_mm); + + if (const auto v = j.find("view_project_right"); v != j.end()) + l.view_project_right = vec3_from_json(*v, l.view_project_right); + if (const auto v = j.find("view_project_up"); v != j.end()) + l.view_project_up = vec3_from_json(*v, l.view_project_up); + read(j, "view_project_projective", l.view_project_projective); + if (const auto v = j.find("view_project_matrix"); v != j.end() && v->is_array() && v->size() == 12) + for (size_t i = 0; i < 12; ++i) + l.view_project_matrix[i] = (*v)[i].get(); + + if (const auto v = j.find("lscm_seam_edges"); v != j.end() && v->is_array()) + for (size_t i = 0; i + 1 < v->size(); i += 2) + l.lscm_seam_edges.emplace_back((*v)[i].get(), (*v)[i + 1].get()); + + if (const auto v = j.find("islands"); v != j.end() && v->is_array()) + for (const nlohmann::json &e : *v) { + if (!e.is_array() || e.size() != 4) + continue; + TextureIsland island; + island.offset = Vec2f(e[0].get(), e[1].get()); + island.rotation_deg = e[2].get(); + island.scale = e[3].get(); + l.islands.push_back(island); + } + + read(j, "island_groups", l.island_groups); + + if (const auto v = j.find("lscm_uv_overrides"); v != j.end() && v->is_array()) + for (const nlohmann::json &e : *v) { + if (!e.is_array() || e.size() != 3) + continue; + l.lscm_uv_overrides.emplace_back(e[0].get(), Vec2f(e[1].get(), e[2].get())); + } + + out_layers.push_back(std::move(l)); + } + } + + layers = std::move(out_layers); + options = out_options; + return true; +} + } // namespace Slic3r diff --git a/src/libslic3r/TextureDisplacement.hpp b/src/libslic3r/TextureDisplacement.hpp index e97178abca..154ae540c0 100644 --- a/src/libslic3r/TextureDisplacement.hpp +++ b/src/libslic3r/TextureDisplacement.hpp @@ -420,6 +420,23 @@ struct TextureDisplacementOptions } }; +// Project persistence (see bbs_3mf.cpp). The layer stack and the per-volume options are written to the +// .3mf as JSON rather than through the cereal save()/load() above: those two are positional and +// unversioned, which is right for the undo/redo stack they serve (one session, one binary) but would +// make every future field a project-breaking change. A JSON object tolerates both directions - an +// unknown key is ignored, a missing one keeps the member's default - so old projects keep loading and +// new ones degrade gracefully in older builds. +// +// The texture image itself is *not* in here. It is a binary blob that belongs in the archive as a file +// of its own, exactly as EmbossShape stores its SVG; `path_in_3mf` names that file, and the caller is +// responsible for writing it and for filling `image_data` back in on load. +std::string texture_displacement_layers_to_json(const std::vector &layers, + const TextureDisplacementOptions &options); +// Returns false and leaves both outputs untouched when the text is not valid JSON. +bool texture_displacement_layers_from_json(const std::string &text, + std::vector &layers, + TextureDisplacementOptions &options); + // How much detail a height texture carries: central differences of the grey image, the mean gradient // and the share of texels steeper than 30 grey levels, mapped to how many texels one mesh edge may // span (1 for a hard-edged image, 4 for a smooth one). Cached per image, like the decode. diff --git a/tests/libslic3r/test_texture_displacement.cpp b/tests/libslic3r/test_texture_displacement.cpp index 04713d3fd9..609a0571ab 100644 --- a/tests/libslic3r/test_texture_displacement.cpp +++ b/tests/libslic3r/test_texture_displacement.cpp @@ -2112,3 +2112,139 @@ TEST_CASE("A second bake beside a first comes out as fine as a single bake", "[T CHECK(second <= single * 5 / 4); } + +// The .3mf stores the layer stack as JSON (see texture_displacement_layers_to_json). Two properties +// matter: everything the UV editor and the panel can set has to survive a round trip, and a document +// written by a build that knew fewer fields has to keep loading, with the missing ones left at their +// defaults rather than zeroed. +TEST_CASE("Texture displacement layers survive a JSON round trip", "[TextureDisplacement]") +{ + std::vector layers(2); + TextureDisplacementLayer &a = layers[0]; + a.slot = 0; + a.name = "Bark"; + a.path = "/textures/bark.png"; + a.depth_mm = 1.25f; + a.tiling_scale = 7.5f; + a.rotation_deg = 30.f; + a.offset = Vec2f(0.25f, -0.5f); + a.invert = true; + a.midlevel = 0.125f; + a.smoothing = 0.75f; + a.edge_smoothing = true; + a.edge_smoothing_amount = 0.25f; + a.auto_connect_islands = false; + a.tile_enabled = false; + a.tile_method = TextureTileMethod::Mirror; + a.projection_method = TextureProjectionMethod::LSCM; + a.blend_mode = TextureBlendMode::Subtract; + a.color_enabled = true; + a.lscm_seam_angle_deg = 45.f; + a.island_padding_mm = 0.5f; + a.lscm_seam_edges = { { 1, 2 }, { 3, 5 } }; + a.islands = { TextureIsland{ Vec2f(1.f, 2.f), 15.f, 1.5f }, TextureIsland{} }; + a.island_groups = { 0, 0 }; + a.lscm_uv_overrides = { { -4, Vec2f(0.5f, 0.75f) } }; + + TextureDisplacementLayer &b = layers[1]; + b.slot = 1; + b.projection_method = TextureProjectionMethod::ViewProjected; + b.view_project_right = Vec3f(0.f, 1.f, 0.f); + b.view_project_up = Vec3f(0.f, 0.f, 1.f); + b.view_project_projective = true; + for (size_t i = 0; i < b.view_project_matrix.size(); ++i) + b.view_project_matrix[i] = float(i) + 0.5f; + + TextureDisplacementOptions options; + options.displace_border = false; + options.smooth_enabled = true; + options.smooth_strength = 0.6f; + options.smooth_iterations = 5; + options.pipeline_v2 = false; + options.v2_max_triangles_k = 250; + options.color_mix_mode = ColorMixMode::XYDither; + options.color_despeckle = 4; + + const std::string json = texture_displacement_layers_to_json(layers, options); + + std::vector read_layers; + TextureDisplacementOptions read_options; + REQUIRE(texture_displacement_layers_from_json(json, read_layers, read_options)); + REQUIRE(read_layers.size() == layers.size()); + + const TextureDisplacementLayer &ra = read_layers[0]; + CHECK(ra.name == a.name); + CHECK(ra.path == a.path); + CHECK(ra.depth_mm == Approx(a.depth_mm)); + CHECK(ra.tiling_scale == Approx(a.tiling_scale)); + CHECK(ra.rotation_deg == Approx(a.rotation_deg)); + CHECK(ra.offset.isApprox(a.offset)); + CHECK(ra.invert == a.invert); + CHECK(ra.midlevel == Approx(a.midlevel)); + CHECK(ra.smoothing == Approx(a.smoothing)); + CHECK(ra.edge_smoothing == a.edge_smoothing); + CHECK(ra.edge_smoothing_amount == Approx(a.edge_smoothing_amount)); + CHECK(ra.auto_connect_islands == a.auto_connect_islands); + CHECK(ra.tile_enabled == a.tile_enabled); + CHECK(ra.tile_method == a.tile_method); + CHECK(ra.projection_method == a.projection_method); + CHECK(ra.blend_mode == a.blend_mode); + CHECK(ra.color_enabled == a.color_enabled); + CHECK(ra.lscm_seam_angle_deg == Approx(a.lscm_seam_angle_deg)); + CHECK(ra.island_padding_mm == Approx(a.island_padding_mm)); + CHECK(ra.lscm_seam_edges == a.lscm_seam_edges); + REQUIRE(ra.islands.size() == a.islands.size()); + CHECK(ra.islands[0].offset.isApprox(a.islands[0].offset)); + CHECK(ra.islands[0].rotation_deg == Approx(a.islands[0].rotation_deg)); + CHECK(ra.islands[0].scale == Approx(a.islands[0].scale)); + CHECK(ra.island_groups == a.island_groups); + REQUIRE(ra.lscm_uv_overrides.size() == 1); + CHECK(ra.lscm_uv_overrides[0].first == -4); + CHECK(ra.lscm_uv_overrides[0].second.isApprox(Vec2f(0.5f, 0.75f))); + + const TextureDisplacementLayer &rb = read_layers[1]; + CHECK(rb.projection_method == TextureProjectionMethod::ViewProjected); + CHECK(rb.view_project_right.isApprox(b.view_project_right)); + CHECK(rb.view_project_up.isApprox(b.view_project_up)); + CHECK(rb.view_project_projective); + CHECK(rb.view_project_matrix == b.view_project_matrix); + + CHECK(read_options.displace_border == options.displace_border); + CHECK(read_options.smooth_enabled == options.smooth_enabled); + CHECK(read_options.smooth_strength == Approx(options.smooth_strength)); + CHECK(read_options.smooth_iterations == options.smooth_iterations); + CHECK(read_options.pipeline_v2 == options.pipeline_v2); + CHECK(read_options.v2_max_triangles_k == options.v2_max_triangles_k); + CHECK(read_options.color_mix_mode == options.color_mix_mode); + CHECK(read_options.color_despeckle == options.color_despeckle); +} + +TEST_CASE("Texture displacement JSON keeps defaults for keys it does not carry", "[TextureDisplacement]") +{ + // What a build that knew fewer fields would have written: one layer, almost nothing set. + const std::string sparse = R"({"version":1,"layers":[{"slot":2,"name":"Old","depth_mm":0.75}]})"; + + std::vector layers; + TextureDisplacementOptions options; + REQUIRE(texture_displacement_layers_from_json(sparse, layers, options)); + REQUIRE(layers.size() == 1); + + const TextureDisplacementLayer &l = layers[0]; + const TextureDisplacementLayer fresh; + const TextureDisplacementOptions defaults; + CHECK(l.slot == 2); + CHECK(l.name == "Old"); + CHECK(l.depth_mm == Approx(0.75f)); + // Everything absent keeps the struct's own default rather than becoming zero. + CHECK(l.tiling_scale == Approx(fresh.tiling_scale)); + CHECK(l.auto_connect_islands == fresh.auto_connect_islands); + CHECK(l.tile_enabled == fresh.tile_enabled); + CHECK(l.projection_method == fresh.projection_method); + CHECK(l.lscm_seam_angle_deg == Approx(fresh.lscm_seam_angle_deg)); + CHECK(options.color_mix_mode == defaults.color_mix_mode); + CHECK(options.pipeline_v2 == defaults.pipeline_v2); + + std::vector unused_layers; + TextureDisplacementOptions unused_options; + CHECK(!texture_displacement_layers_from_json("not json at all", unused_layers, unused_options)); +} From fbf4652e12d864411ea6fbc92554cdecb069bbd6 Mon Sep 17 00:00:00 2001 From: ExPikaPaka Date: Fri, 9 Oct 2026 09:05:42 +0200 Subject: [PATCH 004/137] Fix the build and clang-tidy failures in the persistence change The round-trip test named a TextureTileMethod enumerator that does not exist (MirroredRepeat, not Mirror) and used a bare Approx, which Catch2 v3 keeps in its own namespace. The rest of the file compares floats with WithinAbs, so these follow it rather than reaching for Catch::Approx. bbs_3mf.cpp reads and writes the layer JSON but picked up the declarations through another header, and the same for boost::to_lower. --- src/libslic3r/Format/bbs_3mf.cpp | 2 ++ tests/libslic3r/test_texture_displacement.cpp | 30 +++++++++---------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 14e8468cfe..0241692e7b 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -21,6 +21,7 @@ #include "libslic3r/BrimEarsPoint.hpp" #include "libslic3r/Config.hpp" #include "libslic3r/CustomGCode.hpp" +#include "libslic3r/TextureDisplacement.hpp" #include "libslic3r_version.h" #include "bbs_3mf.hpp" @@ -32,6 +33,7 @@ #include #include #include +#include #include #include #include diff --git a/tests/libslic3r/test_texture_displacement.cpp b/tests/libslic3r/test_texture_displacement.cpp index 0c6aa0e94b..29e6540c0a 100644 --- a/tests/libslic3r/test_texture_displacement.cpp +++ b/tests/libslic3r/test_texture_displacement.cpp @@ -2158,7 +2158,7 @@ TEST_CASE("Texture displacement layers survive a JSON round trip", "[TextureDisp a.edge_smoothing_amount = 0.25f; a.auto_connect_islands = false; a.tile_enabled = false; - a.tile_method = TextureTileMethod::Mirror; + a.tile_method = TextureTileMethod::MirroredRepeat; a.projection_method = TextureProjectionMethod::LSCM; a.blend_mode = TextureBlendMode::Subtract; a.color_enabled = true; @@ -2198,28 +2198,28 @@ TEST_CASE("Texture displacement layers survive a JSON round trip", "[TextureDisp const TextureDisplacementLayer &ra = read_layers[0]; CHECK(ra.name == a.name); CHECK(ra.path == a.path); - CHECK(ra.depth_mm == Approx(a.depth_mm)); - CHECK(ra.tiling_scale == Approx(a.tiling_scale)); - CHECK(ra.rotation_deg == Approx(a.rotation_deg)); + CHECK_THAT(ra.depth_mm, WithinAbs(a.depth_mm, 1e-6f)); + CHECK_THAT(ra.tiling_scale, WithinAbs(a.tiling_scale, 1e-6f)); + CHECK_THAT(ra.rotation_deg, WithinAbs(a.rotation_deg, 1e-6f)); CHECK(ra.offset.isApprox(a.offset)); CHECK(ra.invert == a.invert); - CHECK(ra.midlevel == Approx(a.midlevel)); - CHECK(ra.smoothing == Approx(a.smoothing)); + CHECK_THAT(ra.midlevel, WithinAbs(a.midlevel, 1e-6f)); + CHECK_THAT(ra.smoothing, WithinAbs(a.smoothing, 1e-6f)); CHECK(ra.edge_smoothing == a.edge_smoothing); - CHECK(ra.edge_smoothing_amount == Approx(a.edge_smoothing_amount)); + CHECK_THAT(ra.edge_smoothing_amount, WithinAbs(a.edge_smoothing_amount, 1e-6f)); CHECK(ra.auto_connect_islands == a.auto_connect_islands); CHECK(ra.tile_enabled == a.tile_enabled); CHECK(ra.tile_method == a.tile_method); CHECK(ra.projection_method == a.projection_method); CHECK(ra.blend_mode == a.blend_mode); CHECK(ra.color_enabled == a.color_enabled); - CHECK(ra.lscm_seam_angle_deg == Approx(a.lscm_seam_angle_deg)); - CHECK(ra.island_padding_mm == Approx(a.island_padding_mm)); + CHECK_THAT(ra.lscm_seam_angle_deg, WithinAbs(a.lscm_seam_angle_deg, 1e-6f)); + CHECK_THAT(ra.island_padding_mm, WithinAbs(a.island_padding_mm, 1e-6f)); CHECK(ra.lscm_seam_edges == a.lscm_seam_edges); REQUIRE(ra.islands.size() == a.islands.size()); CHECK(ra.islands[0].offset.isApprox(a.islands[0].offset)); - CHECK(ra.islands[0].rotation_deg == Approx(a.islands[0].rotation_deg)); - CHECK(ra.islands[0].scale == Approx(a.islands[0].scale)); + CHECK_THAT(ra.islands[0].rotation_deg, WithinAbs(a.islands[0].rotation_deg, 1e-6f)); + CHECK_THAT(ra.islands[0].scale, WithinAbs(a.islands[0].scale, 1e-6f)); CHECK(ra.island_groups == a.island_groups); REQUIRE(ra.lscm_uv_overrides.size() == 1); CHECK(ra.lscm_uv_overrides[0].first == -4); @@ -2234,7 +2234,7 @@ TEST_CASE("Texture displacement layers survive a JSON round trip", "[TextureDisp CHECK(read_options.displace_border == options.displace_border); CHECK(read_options.smooth_enabled == options.smooth_enabled); - CHECK(read_options.smooth_strength == Approx(options.smooth_strength)); + CHECK_THAT(read_options.smooth_strength, WithinAbs(options.smooth_strength, 1e-6f)); CHECK(read_options.smooth_iterations == options.smooth_iterations); CHECK(read_options.pipeline_v2 == options.pipeline_v2); CHECK(read_options.v2_max_triangles_k == options.v2_max_triangles_k); @@ -2257,13 +2257,13 @@ TEST_CASE("Texture displacement JSON keeps defaults for keys it does not carry", const TextureDisplacementOptions defaults; CHECK(l.slot == 2); CHECK(l.name == "Old"); - CHECK(l.depth_mm == Approx(0.75f)); + CHECK_THAT(l.depth_mm, WithinAbs(0.75f, 1e-6f)); // Everything absent keeps the struct's own default rather than becoming zero. - CHECK(l.tiling_scale == Approx(fresh.tiling_scale)); + CHECK_THAT(l.tiling_scale, WithinAbs(fresh.tiling_scale, 1e-6f)); CHECK(l.auto_connect_islands == fresh.auto_connect_islands); CHECK(l.tile_enabled == fresh.tile_enabled); CHECK(l.projection_method == fresh.projection_method); - CHECK(l.lscm_seam_angle_deg == Approx(fresh.lscm_seam_angle_deg)); + CHECK_THAT(l.lscm_seam_angle_deg, WithinAbs(fresh.lscm_seam_angle_deg, 1e-6f)); CHECK(options.color_mix_mode == defaults.color_mix_mode); CHECK(options.pipeline_v2 == defaults.pipeline_v2); From 8ecfee6a2160d5a30d622573da62d82a6a10f476 Mon Sep 17 00:00:00 2001 From: ExPikaPaka Date: Fri, 9 Oct 2026 09:35:35 +0200 Subject: [PATCH 005/137] Save where the panel was left, and recover a texture the archive lacks The project carried the layer stack but not the user's place in it: a reopened project landed on slot 0 in Standard, whatever they had been editing. The active layer and Standard/Pro now live on the volume, next to the rest of its options, and come back with it. Docked/undocked goes to the application config instead - it describes the user's window, not the model, so opening someone else's project must not move their panel. A layer whose image_data was empty at save time was written with no texture and came back with none. It now falls back to the file the layer came from, which the importer put in the user's own texture library, so a project reopened on the same machine keeps its pixels. The texture is always stored as .png: the importer converts whatever the user picked, so the extension was being taken from a name that no longer described the bytes. Also adds v2_flip_edges to the cereal field list, which the undo stack was silently dropping. --- src/libslic3r/Format/bbs_3mf.cpp | 44 +++++++++++++------ src/libslic3r/TextureDisplacement.cpp | 6 +++ src/libslic3r/TextureDisplacement.hpp | 9 +++- .../GUI/Gizmos/GLGizmoTextureDisplacement.cpp | 30 +++++++++++++ .../GUI/Gizmos/GLGizmoTextureDisplacement.hpp | 10 ++++- tests/libslic3r/test_texture_displacement.cpp | 7 +++ 6 files changed, 89 insertions(+), 17 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 0241692e7b..d5895603e6 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -33,7 +33,6 @@ #include #include #include -#include #include #include #include @@ -64,6 +63,7 @@ #include #include #include +#include #include #include #include @@ -3346,16 +3346,34 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) add_error("Malformed texture displacement data: " + json_path); return; } + // A layer the archive carries no image for - saved while its texture had not been loaded, or + // written by a build that stored only the path - falls back to the file it came from. The + // importer copies every texture into the user's own library, so that path resolves on the + // machine the project was made on and quietly resolves nowhere else, which is the old + // behaviour: settings restored, pixels not. + const auto load_image_from_disk = [](TextureDisplacementLayer &layer) { + boost::system::error_code ec; + if (layer.path.empty() || !boost::filesystem::is_regular_file(layer.path, ec) || ec) + return; + boost::nowide::ifstream file(layer.path, std::ios::binary); + if (!file.good()) + return; + std::vector bytes((std::istreambuf_iterator(file)), std::istreambuf_iterator()); + if (!bytes.empty()) + layer.image_data = std::make_shared>(std::move(bytes)); + }; + for (TextureDisplacementLayer &layer : layers) { - if (layer.path_in_3mf.empty()) - continue; - const auto image = m_texture_displacement_files.find(layer.path_in_3mf); - if (image == m_texture_displacement_files.end()) { + if (!layer.path_in_3mf.empty()) { + if (const auto image = m_texture_displacement_files.find(layer.path_in_3mf); + image != m_texture_displacement_files.end()) { + layer.image_data = std::make_shared>(image->second.begin(), + image->second.end()); + continue; + } add_error("Missing texture displacement image: " + layer.path_in_3mf); - continue; } - layer.image_data = std::make_shared>(image->second.begin(), - image->second.end()); + load_image_from_disk(layer); } volume.texture_displacement_layers = std::move(layers); volume.texture_displacement_options = options; @@ -8183,12 +8201,10 @@ static void add_texture_displacement(std::stringstream &stream, const ModelVolum layer.path_in_3mf.clear(); if (!layer.image_data || layer.image_data->empty()) continue; - std::string ext = boost::filesystem::path(layer.path).extension().string(); - boost::to_lower(ext); - if (ext != ".png" && ext != ".jpg" && ext != ".jpeg") - ext = ".png"; // the library ships PNG; anything unrecognised is stored under a type a reader expects - const std::string path = std::string(TEXTURE_DISPLACEMENT_DIR) + id + "_" + std::to_string(layer.slot) + ext; - // No deflate: PNG and JPEG are already compressed, so a second pass only costs time. + // Always .png: the importer converts whatever the user picked (jpg, bmp, ...) to an 8-bit + // greyscale PNG, so image_data is PNG whatever layer.path happens to be named. + const std::string path = std::string(TEXTURE_DISPLACEMENT_DIR) + id + "_" + std::to_string(layer.slot) + ".png"; + // No deflate: a PNG is already compressed, so a second pass only costs time. if (mz_zip_writer_add_mem(&archive, path.c_str(), layer.image_data->data(), layer.image_data->size(), MZ_NO_COMPRESSION)) layer.path_in_3mf = path; diff --git a/src/libslic3r/TextureDisplacement.cpp b/src/libslic3r/TextureDisplacement.cpp index c89ee713e3..1b910e1006 100644 --- a/src/libslic3r/TextureDisplacement.cpp +++ b/src/libslic3r/TextureDisplacement.cpp @@ -5207,6 +5207,8 @@ std::string texture_displacement_layers_to_json(const std::vector out_layers; diff --git a/src/libslic3r/TextureDisplacement.hpp b/src/libslic3r/TextureDisplacement.hpp index 7c724b900b..c6ebe6c416 100644 --- a/src/libslic3r/TextureDisplacement.hpp +++ b/src/libslic3r/TextureDisplacement.hpp @@ -412,12 +412,19 @@ struct TextureDisplacementOptions // finer than the mesh leaves behind, without eating features that are genuinely a facet wide. int color_despeckle = 2; + // Where the panel was left, rather than anything the bake reads. It lives with the volume because + // that is what it describes: reopening a project should put the user back on the layer they were + // editing, in the mode they were editing it in, not on slot 0 in Standard. + int active_slot = 0; + int panel_mode = 0; // 0 Standard, 1 Pro + template void serialize(Archive &ar) { int mix_mode = int(color_mix_mode); ar(displace_border, smooth_enabled, smooth_strength, smooth_iterations, smooth_skip_border, pipeline_v2, v2_refine_mm, v2_regularize, v2_max_triangles_k, - v2_relocate, color_mix_enabled, mix_mode, color_despeckle); + v2_relocate, v2_flip_edges, color_mix_enabled, mix_mode, color_despeckle, + active_slot, panel_mode); color_mix_mode = ColorMixMode(mix_mode); } }; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp index c467a7768d..3a4a32d00b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp @@ -3329,6 +3329,7 @@ const ModelVolume* GLGizmoTextureDisplacement::texture_volume() const void GLGizmoTextureDisplacement::update_model_object() { + store_panel_state(); bool updated = false; ModelObject *mo = m_c->selection_info()->model_object(); int idx = -1; @@ -3364,6 +3365,24 @@ void GLGizmoTextureDisplacement::update_from_model_object(bool first_update) { wxBusyCursor wait; + // Opening the gizmo puts the panel back where it was left: the layer and the mode come off the + // volume, because they are the user's place in this model's stack, and the dock state off the + // application config, because it is about their window. Only on open - this also runs on an + // undo/redo and on a layer switch, where overriding what the user is doing now would be wrong. + if (first_update) { + if (const ModelVolume *mv = texture_volume(); mv != nullptr) { + const TextureDisplacementOptions &opts = mv->texture_displacement_options; + m_panel_mode = std::clamp(opts.panel_mode, 0, 1); + // Only if that slot still holds a layer: the stack can have been edited by anything that + // does not go through the panel, and a selection pointing at nothing shows an empty panel. + const auto &stack = mv->texture_displacement_layers; + if (std::any_of(stack.begin(), stack.end(), + [&opts](const TextureDisplacementLayer &l) { return l.slot == opts.active_slot; })) + m_active_layer_slot = opts.active_slot; + } + m_undocked = wxGetApp().app_config->get_bool(UNDOCKED_CONFIG_KEY); + } + const ModelObject *mo = m_c->selection_info()->model_object(); m_triangle_selectors.clear(); @@ -3409,6 +3428,14 @@ void GLGizmoTextureDisplacement::update_from_model_object(bool first_update) rebuild_preview(); } +void GLGizmoTextureDisplacement::store_panel_state() +{ + if (ModelVolume *mv = texture_volume(); mv != nullptr) { + mv->texture_displacement_options.active_slot = m_active_layer_slot; + mv->texture_displacement_options.panel_mode = m_panel_mode; + } +} + void GLGizmoTextureDisplacement::set_active_layer(int slot) { if (slot == m_active_layer_slot) @@ -3417,6 +3444,7 @@ void GLGizmoTextureDisplacement::set_active_layer(int slot) // reflect - otherwise they would be silently lost. update_model_object(); m_active_layer_slot = slot; + store_panel_state(); update_from_model_object(false); // The on-canvas gizmo (if on) is anchored to whichever layer is active - keep it in sync // instead of leaving it pointing at the previous layer's (now stale) paint patch. @@ -5590,6 +5618,7 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float "not what you wanted and you know why.")); if (clicked && !on) { m_panel_mode = m; + store_panel_state(); if (!pro_mode()) { // Leaving the subdivision preview open would strand a wireframe whose controls just // disappeared, so close it as part of the switch. @@ -5612,6 +5641,7 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float _L("Detach this panel so it can be dragged anywhere over the 3D view, or dock it back beside " "the toolbar."))) m_undocked = !m_undocked; + wxGetApp().app_config->set_bool(UNDOCKED_CONFIG_KEY, m_undocked); } ImGui::Separator(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp index 2c6f5bc6c7..32dd66c99c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp @@ -206,6 +206,9 @@ private: // Standard is active so what Preview shows is always what Bake will do. Returns true if it actually // changed something, so the caller can invalidate the preview. bool apply_standard_mode_presets(ModelVolume *mv); + // Copies the panel's own state (active layer, Standard/Pro) onto the volume, so the project file + // can carry it. Cheap and idempotent - called wherever either of the two changes. + void store_panel_state(); // Standard mode's Bake: remesh to an even density, refine where the texture bends, then displace. // The order matters and is the whole reason this is one button - a height map can only move // existing vertices, so the mesh has to be prepared first, and remeshing after painting would drop @@ -904,9 +907,12 @@ private: PatchUnwrap m_uv_editor_unwrap; // When set, the panel is a free-floating window the user can drag anywhere (with a title bar to - // grab), instead of being pinned to the right of the gizmo toolbar. Persisted across gizmo - // open/close within a session, so the choice sticks while working. + // grab), instead of being pinned to the right of the gizmo toolbar. Kept in the application + // config rather than in the project: it describes the user's window, not the model, so opening + // someone else's project must not move their panel. bool m_undocked = false; + // The config key behind m_undocked. + static constexpr const char *UNDOCKED_CONFIG_KEY = "texture_displacement_panel_undocked"; // Smooth scrolling for the panel body (everything between the header and the pinned Bake footer). // ImGui jumps a fixed number of lines per wheel notch, which on tall layer cards reads as a hard diff --git a/tests/libslic3r/test_texture_displacement.cpp b/tests/libslic3r/test_texture_displacement.cpp index 29e6540c0a..0e617a17f1 100644 --- a/tests/libslic3r/test_texture_displacement.cpp +++ b/tests/libslic3r/test_texture_displacement.cpp @@ -2187,6 +2187,8 @@ TEST_CASE("Texture displacement layers survive a JSON round trip", "[TextureDisp options.v2_max_triangles_k = 250; options.color_mix_mode = ColorMixMode::XYDither; options.color_despeckle = 4; + options.active_slot = 3; + options.panel_mode = 1; const std::string json = texture_displacement_layers_to_json(layers, options); @@ -2240,6 +2242,9 @@ TEST_CASE("Texture displacement layers survive a JSON round trip", "[TextureDisp CHECK(read_options.v2_max_triangles_k == options.v2_max_triangles_k); CHECK(read_options.color_mix_mode == options.color_mix_mode); CHECK(read_options.color_despeckle == options.color_despeckle); + // Where the panel was left comes back with the rest, so a reopened project is on the same layer. + CHECK(read_options.active_slot == options.active_slot); + CHECK(read_options.panel_mode == options.panel_mode); } TEST_CASE("Texture displacement JSON keeps defaults for keys it does not carry", "[TextureDisplacement]") @@ -2266,6 +2271,8 @@ TEST_CASE("Texture displacement JSON keeps defaults for keys it does not carry", CHECK_THAT(l.lscm_seam_angle_deg, WithinAbs(fresh.lscm_seam_angle_deg, 1e-6f)); CHECK(options.color_mix_mode == defaults.color_mix_mode); CHECK(options.pipeline_v2 == defaults.pipeline_v2); + CHECK(options.active_slot == defaults.active_slot); + CHECK(options.panel_mode == defaults.panel_mode); std::vector unused_layers; TextureDisplacementOptions unused_options; From ed1f3e52c91843323052d881a307020b2324383b Mon Sep 17 00:00:00 2001 From: ExPikaPaka Date: Mon, 12 Oct 2026 07:57:07 +0200 Subject: [PATCH 006/137] Texture displacement: typed values on every panel slider Every slider in the texture displacement panel now takes an exact number, either by Ctrl+clicking the track or through a small edit icon at its right end. Both routes end in ImGui's own temp-input mode: the icon only asks ImGui to focus the slider, which is what turns it into an input box, so the parsing, the clamping and the Enter/click-away behaviour stay ImGui's rather than becoming a second implementation. The mechanism lives in one helper, typed_row(), with a float and an int form over it. float_row() and int_row() are thin wrappers on those, and the six sliders that previously built their widget inline (brush size, smart fill angle, edge fade amount, remesh sharp angle, refine resolution and the uniform triangle budget) now go through the same path. Each slider carries a tooltip with its description and its range. The range is derived from the bounds and the format string the slider is already given, so no row states them twice and the tooltip cannot drift from the track. The tooltip allows hovering while disabled, since several rows are drawn inside disabled_begin(), where a greyed slider is exactly when the explanation is wanted. The panel's "?" popup gains an entry for each of the two ways in, appended to every tool's shortcut list and shown on their own when no painting tool is selected, where that popup was previously empty. --- .../GUI/Gizmos/GLGizmoTextureDisplacement.cpp | 333 ++++++++++++------ .../GUI/Gizmos/GLGizmoTextureDisplacement.hpp | 9 + 2 files changed, 225 insertions(+), 117 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp index 96af821505..4d9540bc09 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp @@ -494,7 +494,17 @@ bool GLGizmoTextureDisplacement::on_init() {ctrl + _L("Mouse wheel"), m_desc["gap_area"]}, toggle_wireframe_shortcut }; - + + // Both ways into the same input box on any slider in the panel: ImGui turns a slider into one when + // it is Ctrl+clicked or when it is given the keyboard focus, which is what the edit icon asks for. + m_desc["type_value"] = _L("Type an exact value into a slider"); + m_shortcuts_sliders = { + {ctrl + _L("Left mouse button"), m_desc["type_value"]}, + {_L("Edit icon at a slider's right end"), m_desc["type_value"]}, + }; + for (std::vector> *list : {&m_shortcuts_brush, &m_shortcuts_bucket_fill, &m_shortcuts_gap_fill}) + list->insert(list->end(), m_shortcuts_sliders.begin(), m_shortcuts_sliders.end()); + return true; } @@ -3680,6 +3690,8 @@ void GLGizmoTextureDisplacement::ensure_panel_icons() "texture_displacement_adjust.svg", "canvas_drag.svg", "texture_displacement_move_up.svg", "texture_displacement_move_down.svg", "texture_displacement_drag.svg", "texture_displacement_select_all.svg", "texture_displacement_erase_all.svg", + // The "type a value instead" icon at the right end of every slider. + "edit.svg", }; std::vector paths; paths.reserve(names.size()); @@ -5919,8 +5931,8 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float } return s + "..."; }; - // Label column + a slider filling the rest of the row, value printed inside the track. Ctrl+click on - // any of these types a value in. `right_inset` keeps a layer card's inner padding. + // Label column + a slider filling the rest of the row, value printed inside the track. + // `right_inset` keeps a layer card's inner padding. const auto slider_label = [&](const wxString &label) { const float x0 = ImGui::GetCursorPosX(); ImGui::AlignTextToFramePadding(); @@ -5928,17 +5940,107 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float ImGui::SameLine(); ImGui::SetCursorPosX(std::max(ImGui::GetCursorPosX(), x0 + label_w)); }; + + // ---- Typed values on sliders ---- + // Every slider in the panel goes through typed_slider(), so all of them take a number the same + // two ways: Ctrl+click on the track, or the edit icon at the right end for the same box without + // the modifier. Both end up in ImGui's own "temp input" mode - the icon only asks ImGui to focus + // the slider, which is what turns it into an input box (see SliderScalar) - so the parsing, + // the clamping and the Enter/click-away behaviour are ImGui's, not a second implementation. + + // Retires a click whose row is no longer being drawn - the panel changed mode in between - so that + // it cannot fire later when that row comes back. Before any row is drawn, so a live one still wins. + if (!m_slider_type_request.empty() && ImGui::GetFrameCount() > m_slider_type_request_frame + 1) + m_slider_type_request.clear(); + + // Exactly as tall as the slider it sits beside, so it lines up with the track without the row + // having to be re-centred around it; icon_button() pads the glyph itself down to about 0.7 of this. + const float edit_icon_w = frame_h; + // What the slider's own width has to give up for the icon beside it. + const float edit_icon_room = edit_icon_w + gap_s; + + // One end of a range, through the slider's own format, so the bounds in the tooltip read exactly + // like the value in the track. A parenthesised note in the format - "(auto)" - is dropped: it + // describes the current state, not the bound. + const auto fmt_bound = [](const char *format, auto v) { + char buf[64]; + std::snprintf(buf, sizeof(buf), format, v); + std::string out(buf); + const size_t paren = out.find('('); + if (paren != std::string::npos) + out.erase(paren); + while (!out.empty() && out.back() == ' ') + out.pop_back(); + return out; + }; + const auto range_text = [](const std::string &lo, const std::string &hi) { + return Slic3r::format(_u8L("Range: %1% to %2%"), lo, hi); + }; + const auto edit_icon_tip = [&](const std::string &range) { + return _u8L("Type a value instead of dragging. Ctrl+click on the slider does the same.") + "\n\n" + range; + }; + + // Draws `slider` at `item_w` (SetNextItemWidth's convention: negative measures back from the right + // edge, and the caller has already left edit_icon_room in it), then the edit icon. `tip` and the + // range go on both. Returns whatever the slider returned. + const auto typed_row = [&](const char *id, float item_w, const wxString &tip, const std::string &range, + const std::function &slider) -> bool { + // Deferred from the click a frame ago: SetKeyboardFocusHere() is a request for the *next* + // frame, so it has to be issued before the slider it names, not from the icon beside it. + if (m_slider_type_request == id) { + ImGui::SetKeyboardFocusHere(); + m_slider_type_request.clear(); + m_parent.set_as_dirty(); // the focus only lands on a frame that actually gets drawn + } + ImGui::SetNextItemWidth(item_w); + const bool changed = slider(); + // AllowWhenDisabled: several of these rows are drawn inside disabled_begin(), and a greyed + // slider is exactly when the user needs to be told what it is and why it is not moving. + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { + wxString full = tip; + if (!full.IsEmpty()) + full += "\n\n"; + m_imgui->tooltip(full + from_u8(range), wrap_w); + } + // SameLine() puts the cursor back at the slider's own top (ItemSize records the Y the item was + // drawn at), so an icon of the same height lands on the track wherever the row placed it. + ImGui::SameLine(0.f, gap_s); + if (icon_button(int(ImGui::GetID(id)), "edit.svg", edit_icon_w, _L("Edit"), from_u8(edit_icon_tip(range)))) { + m_slider_type_request = id; + m_slider_type_request_frame = ImGui::GetFrameCount(); + m_parent.set_as_dirty(); // the next frame is where the request above is turned into focus + } + return changed; + }; + + // The two forms every slider in the panel is one of. They derive the range from the bounds they are + // already given, so no row states its bounds or its format twice and the tooltip cannot drift from + // the track. `item_w` is as typed_row() takes it. + const auto typed_slider = [&](const char *id, float item_w, float *v, float v_min, float v_max, const char *format, + bool log, const wxString &tip) -> bool { + return typed_row(id, item_w, tip, range_text(fmt_bound(format, v_min), fmt_bound(format, v_max)), [&] { + return ImGui::SliderFloat(id, v, v_min, v_max, format, + ImGuiSliderFlags_AlwaysClamp | (log ? ImGuiSliderFlags_Logarithmic : 0)); + }); + }; + const auto typed_slider_int = [&](const char *id, float item_w, int *v, int v_min, int v_max, const char *format, + bool log, const wxString &tip) -> bool { + return typed_row(id, item_w, tip, range_text(fmt_bound(format, v_min), fmt_bound(format, v_max)), [&] { + return ImGui::SliderInt(id, v, v_min, v_max, format, + ImGuiSliderFlags_AlwaysClamp | (log ? ImGuiSliderFlags_Logarithmic : 0)); + }); + }; + + // Label column + the slider filling the rest of the row. const auto float_row = [&](const char *id, const wxString &label, float *v, float v_min, float v_max, const char *format, - bool log, float right_inset) -> bool { + bool log, float right_inset, const wxString &tip) -> bool { slider_label(label); - ImGui::SetNextItemWidth(-std::max(right_inset, 1.f)); - return ImGui::SliderFloat(id, v, v_min, v_max, format, ImGuiSliderFlags_AlwaysClamp | (log ? ImGuiSliderFlags_Logarithmic : 0)); + return typed_slider(id, -(std::max(right_inset, 1.f) + edit_icon_room), v, v_min, v_max, format, log, tip); }; const auto int_row = [&](const char *id, const wxString &label, int *v, int v_min, int v_max, const char *format, - float right_inset) -> bool { + float right_inset, const wxString &tip) -> bool { slider_label(label); - ImGui::SetNextItemWidth(-std::max(right_inset, 1.f)); - return ImGui::SliderInt(id, v, v_min, v_max, format, ImGuiSliderFlags_AlwaysClamp); + return typed_slider_int(id, -(std::max(right_inset, 1.f) + edit_icon_room), v, v_min, v_max, format, false, tip); }; const auto layer_name = [](const TextureDisplacementLayer &l) { return l.name.empty() ? Slic3r::format(_u8L("Layer %1%"), l.slot + 1) : l.name; @@ -6160,11 +6262,10 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float const auto centre_on_row = [&](float h) { ImGui::SetCursorPosY(row_y + std::round((icon_md - h) * 0.5f)); }; vsep(icon_md); if (is_brush_mode) { - ImGui::SetNextItemWidth(std::max(1.f, row_end - ImGui::GetCursorPosX() - (3.f * gap_s + 1.f + 2.f * icon_sm))); centre_on_row(frame_h); - ImGui::SliderFloat("##cursor_radius", &m_cursor_radius, CursorRadiusMin, CursorRadiusMax, "%.2f mm", - ImGuiSliderFlags_AlwaysClamp); - hover_tip(m_desc.at("cursor_size")); + typed_slider("##cursor_radius", + std::max(1.f, row_end - ImGui::GetCursorPosX() - (3.f * gap_s + 1.f + 2.f * icon_sm) - edit_icon_room), + &m_cursor_radius, CursorRadiusMin, CursorRadiusMax, "%.2f mm", false, m_desc.at("cursor_size")); vsep(icon_sm); const bool is_circle = m_cursor_type == TriangleSelector::CursorType::CIRCLE; centre_on_row(icon_sm); @@ -6177,11 +6278,10 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float _L("Sphere - paints only within a ball around the point under the cursor"))) m_cursor_type = TriangleSelector::CursorType::SPHERE; } else if (is_area_mode) { - ImGui::SetNextItemWidth(std::max(1.f, row_end - ImGui::GetCursorPosX())); centre_on_row(frame_h); - ImGui::SliderFloat("##smart_fill_angle", &m_smart_fill_angle, SmartFillAngleMin, SmartFillAngleMax, "%.0f°", - ImGuiSliderFlags_AlwaysClamp); - hover_tip(_u8L("Angle threshold - the fill stops at edges sharper than this")); + typed_slider("##smart_fill_angle", std::max(1.f, row_end - ImGui::GetCursorPosX() - edit_icon_room), + &m_smart_fill_angle, SmartFillAngleMin, SmartFillAngleMax, "%.0f°", false, + _L("Angle threshold - the fill stops at edges sharper than this")); } else { centre_on_row(frame_h); ImGui::AlignTextToFramePadding(); @@ -6451,16 +6551,16 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float // The three controls nearly every layer needs; everything else waits behind "More settings". // Depth and tile size are logarithmic, so both ends of their wide ranges stay usable. - m_preview_params_dirty |= float_row("##depth", _L("Depth"), &layer.depth_mm, 0.01f, 10.f, "%.3f mm", true, card_pad); - hover_tip(_u8L("Height of the relief: how far white in the texture lifts the surface, in " - "millimetres. Black does not move it at all, unless Midlevel says otherwise.")); - m_preview_params_dirty |= float_row("##tile_size", _L("Tile size"), &layer.tiling_scale, 0.2f, 200.f, "%.2f mm", true, card_pad); - hover_tip(_u8L("How wide one copy of the texture is on the model. Smaller repeats the pattern " - "more often and makes its detail finer; with Tile off, this is the size of the " - "single copy.")); - m_preview_params_dirty |= float_row("##rotation", _L("Rotation"), &layer.rotation_deg, 0.f, 360.f, "%.0f°", false, card_pad); - hover_tip(_u8L("Turns the texture on the surface, in degrees - for lining a pattern up with an " - "edge of the model.")); + m_preview_params_dirty |= float_row("##depth", _L("Depth"), &layer.depth_mm, 0.01f, 10.f, "%.3f mm", true, card_pad, + _L("Height of the relief: how far white in the texture lifts the surface, in " + "millimetres. Black does not move it at all, unless Midlevel says otherwise.")); + m_preview_params_dirty |= float_row("##tile_size", _L("Tile size"), &layer.tiling_scale, 0.2f, 200.f, "%.2f mm", true, card_pad, + _L("How wide one copy of the texture is on the model. Smaller repeats the pattern " + "more often and makes its detail finer; with Tile off, this is the size of the " + "single copy.")); + m_preview_params_dirty |= float_row("##rotation", _L("Rotation"), &layer.rotation_deg, 0.f, 360.f, "%.0f°", false, card_pad, + _L("Turns the texture on the surface, in degrees - for lining a pattern up with an " + "edge of the model.")); if (m_layer_expanded[size_t(layer.slot)]) { { @@ -6475,22 +6575,22 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float // Midlevel: the height that means "don't move". At 0 the surface only ever bulges outwards; // at 0.5 mid-grey is neutral and darker texels cut inwards. - m_preview_params_dirty |= float_row("##midlevel", _L("Midlevel"), &layer.midlevel, 0.f, 10.f, "%.2f", false, card_pad); - hover_tip(_u8L("Which gray stays where the surface already is. At 0 the texture only pushes " - "outwards; at 0.5 mid-gray stays put, so darker grays cut in and lighter ones " - "still push out - one image both embosses and engraves.\n\n" - "What cuts in has to fit: inside a sharp corner or through a thin wall, a deep " - "cut can pass through the other side.")); + m_preview_params_dirty |= float_row("##midlevel", _L("Midlevel"), &layer.midlevel, 0.f, 10.f, "%.2f", false, card_pad, + _L("Which gray stays where the surface already is. At 0 the texture only pushes " + "outwards; at 0.5 mid-gray stays put, so darker grays cut in and lighter ones " + "still push out - one image both embosses and engraves.\n\n" + "What cuts in has to fit: inside a sharp corner or through a thin wall, a deep " + "cut can pass through the other side.")); if (layer.midlevel > 0.f && layer.depth_mm > 1.f) { ImGui::PushTextWrapPos(content_rx - card_pad); m_imgui->warning_text(_L("Deep inward displacement may self-intersect.")); ImGui::PopTextWrapPos(); } - m_preview_params_dirty |= float_row("##smoothing", _L("Smoothing"), &layer.smoothing, 0.f, 1.f, "%.2f", false, card_pad); - hover_tip(_u8L("Blurs the image before it is used, which rounds off hard steps and removes " - "speckle from a noisy photo. Raise it if the relief looks harsh or grainy; it " - "costs fine detail.")); + m_preview_params_dirty |= float_row("##smoothing", _L("Smoothing"), &layer.smoothing, 0.f, 1.f, "%.2f", false, card_pad, + _L("Blurs the image before it is used, which rounds off hard steps and removes " + "speckle from a noisy photo. Raise it if the relief looks harsh or grainy; it " + "costs fine detail.")); // Edge fade: the relief flattens toward the boundary of the painted area. m_preview_params_dirty |= m_imgui->bbl_checkbox(_L("Edge fade") + "##edge_smoothing", layer.edge_smoothing); @@ -6498,12 +6598,11 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float "blends into the bare surface instead of stopping at a step.")); ImGui::SameLine(); m_imgui->disabled_begin(!layer.edge_smoothing); - ImGui::SetNextItemWidth(-card_pad); - m_preview_params_dirty |= ImGui::SliderFloat("##edge_amount", &layer.edge_smoothing_amount, 0.02f, 1.f, "%.2f", - ImGuiSliderFlags_AlwaysClamp); + m_preview_params_dirty |= typed_slider("##edge_amount", -(card_pad + edit_icon_room), + &layer.edge_smoothing_amount, 0.02f, 1.f, "%.2f", false, + _L("How far in the fade reaches, as a share of the painted area. Small " + "values soften a narrow band at the edge; 1 flattens almost all of it.")); m_imgui->disabled_end(); - hover_tip(_u8L("How far in the fade reaches, as a share of the painted area. Small values " - "soften a narrow band at the edge; 1 flattens almost all of it.")); // Invert and Colours share a row. { @@ -6548,19 +6647,19 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float // Every mix can become a filament slot, and there are only so many beside the // physical filaments. const int max_mixes = std::max(1, int(EnforcerBlockerType::ExtruderMax) - int(m_palette_filaments.size())); - if (int_row("##color_mix_count", _L("Mixed colors"), &opts.color_mix_count, 1, max_mixes, "%d", card_pad)) + if (int_row("##color_mix_count", _L("Mixed colors"), &opts.color_mix_count, 1, max_mixes, "%d", card_pad, + _L("The most mixed filaments a bake may add. They are picked from the " + "texture's colors, and only the ones the bake actually uses are created."))) m_preview_params_dirty = true; - hover_tip(_u8L("The most mixed filaments a bake may add. They are picked from the " - "texture's colors, and only the ones the bake actually uses are created.")); // After the slider, so a change shows in the same frame. ImGui::TextDisabled("%s", Slic3r::format(_u8L("%1% printable colors from %2% filaments"), int(cached_palette().size()), int(m_palette_filaments.size())).c_str()); } - if (int_row("##color_despeckle", _L("Denoise"), &opts.color_despeckle, 0, 6, "%d", card_pad)) - m_preview_params_dirty = true; - hover_tip(_u8L("Cleans up single stray triangles of the wrong color, which detail finer " + if (int_row("##color_despeckle", _L("Denoise"), &opts.color_despeckle, 0, 6, "%d", card_pad, + _L("Cleans up single stray triangles of the wrong color, which detail finer " "than the mesh leaves behind. Raise it if the result looks speckled, " - "lower it if small features are being swallowed.")); + "lower it if small features are being swallowed."))) + m_preview_params_dirty = true; } } @@ -6665,10 +6764,10 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float "gets the texture, and its border becomes the edge of the projection.")); if (projector_open) { - if (int_row("##projector_opacity", _L("Opacity"), &m_projector_opacity, 20, 255, "%d", card_pad)) + if (int_row("##projector_opacity", _L("Opacity"), &m_projector_opacity, 20, 255, "%d", card_pad, + _L("How solid the frame window looks while you place it. Lower to see the " + "model through it; it does not affect the result."))) m_projector_frame->set_opacity(m_projector_opacity); - hover_tip(_u8L("How solid the frame window looks while you place it. Lower to see the " - "model through it; it does not affect the result.")); if (m_imgui->button(_u8L("Apply projection frame"))) { const int painted_count = apply_projection_frame(); @@ -6969,57 +7068,57 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float // pattern can sample four points that all happen to land at similar heights, report no error, // and stall before refinement ever starts. if (float_row("##subdiv_target", m_subdivide_feature ? _L("Max edge") : _L("Target edge"), &m_subdivide_target_mm, - 0.001f, 20.f, "%.3f mm", true, 0.f)) + 0.001f, 20.f, "%.3f mm", true, 0.f, + m_subdivide_feature ? + _L("No triangle in the painted area stays larger than this, even where the texture " + "is flat. Keep it near the size of the smallest feature you want to come out.") : + _L("Triangles in the painted area are split until none is larger than this. Smaller " + "means finer detail and, fast, a lot more triangles."))) preview_live(); - hover_tip(m_subdivide_feature ? - _u8L("No triangle in the painted area stays larger than this, even where the texture " - "is flat. Keep it near the size of the smallest feature you want to come out.") : - _u8L("Triangles in the painted area are split until none is larger than this. Smaller " - "means finer detail and, fast, a lot more triangles.")); if (m_subdivide_feature) { - if (float_row("##subdiv_detail", _L("Detail"), &m_subdivide_detail_mm, 0.001f, 1.f, "%.3f mm", true, 0.f)) + if (float_row("##subdiv_detail", _L("Detail"), &m_subdivide_detail_mm, 0.001f, 1.f, "%.3f mm", true, 0.f, + _L("How far the mesh may sit from the shape the texture describes, in millimetres. " + "Smaller follows fine detail and costs triangles; larger only chases the big " + "features."))) preview_live(); - hover_tip(_u8L("How far the mesh may sit from the shape the texture describes, in millimetres. " - "Smaller follows fine detail and costs triangles; larger only chases the big " - "features.")); - if (float_row("##subdiv_min", _L("Min edge"), &m_subdivide_min_edge_mm, 0.001f, 20.f, "%.3f mm", true, 0.f)) + if (float_row("##subdiv_min", _L("Min edge"), &m_subdivide_min_edge_mm, 0.001f, 20.f, "%.3f mm", true, 0.f, + _L("A floor on triangle size, so a sharp step in the texture cannot be chased " + "forever. Lower it for finer relief, raise it if the count runs away at hard " + "edges."))) preview_live(); - hover_tip(_u8L("A floor on triangle size, so a sharp step in the texture cannot be chased " - "forever. Lower it for finer relief, raise it if the count runs away at hard " - "edges.")); } // Applies in both adaptive sub-modes: it is about the step the bake puts at the paint's edge, which // exists whether or not "Follow texture detail" is on. 0 turns the band off. - if (float_row("##subdiv_border", _L("Edge detail"), &m_subdivide_border_mm, 0.f, 5.f, "%.3f mm", false, 0.f)) + if (float_row("##subdiv_border", _L("Edge detail"), &m_subdivide_border_mm, 0.f, 5.f, "%.3f mm", false, 0.f, + _L("Triangle size along the outline of the painted area, where the relief drops back to the " + "bare surface. Lower it if that rim looks jagged; it only costs triangles along the " + "outline. 0 turns it off."))) preview_live(); - hover_tip(_u8L("Triangle size along the outline of the painted area, where the relief drops back to the " - "bare surface. Lower it if that rim looks jagged; it only costs triangles along the " - "outline. 0 turns it off.")); // Only worth showing when a layer is actually colouring: with no colour there is no boundary for it // to refine and the control would do nothing whatever it is set to. if (mv != nullptr && any_layer_colors(*mv)) { - if (float_row("##subdiv_color", _L("Color detail"), &m_subdivide_color_mm, 0.f, 5.f, "%.3f mm", false, 0.f)) + if (float_row("##subdiv_color", _L("Color detail"), &m_subdivide_color_mm, 0.f, 5.f, "%.3f mm", false, 0.f, + _L("Triangle size where two colors meet. Each triangle prints in one filament, so a " + "color edge can only be as sharp as the triangles along it - and nothing else " + "refines there, since the surface is flat across a change of color. 0 turns it off."))) preview_live(); - hover_tip(_u8L("Triangle size where two colors meet. Each triangle prints in one filament, so a " - "color edge can only be as sharp as the triangles along it - and nothing else " - "refines there, since the surface is flat across a change of color. 0 turns it off.")); } ImGui::TextDisabled("%s", _u8L("Triangle budget: set with Triangles, below.").c_str()); if (m_subdivide_editing && m_subdivide_preview_tris > 0) m_imgui->text(Slic3r::format(_u8L("Preview: %1% triangles"), m_subdivide_preview_tris)); } else { - if (int_row("##subdiv_steps", _L("Steps"), &m_subdivide_count, 0, 5, "%d", 0.f)) { + if (int_row("##subdiv_steps", _L("Steps"), &m_subdivide_count, 0, 5, "%d", 0.f, + _L("Splits every triangle of the model into four, this many times over. Each step " + "quadruples the count - 3 turns 100 k triangles into 6.4 M - so prefer refining " + "only the painted area unless you need the whole model finer."))) { if (m_subdivide_editing) rebuild_subdivide_preview(); // a count of 0 clears the preview, it doesn't compute one m_parent.set_as_dirty(); } - hover_tip(_u8L("Splits every triangle of the model into four, this many times over. Each step " - "quadruples the count - 3 turns 100 k triangles into 6.4 M - so prefer refining " - "only the painted area unless you need the whole model finer.")); } { @@ -7081,9 +7180,9 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float } m_remesh_target_edge_mm = cnt > 0 ? std::clamp(float(sum / double(cnt)), 0.1f, 20.f) : 1.f; } - float_row("##remesh_edge", _L("Target edge"), &m_remesh_target_edge_mm, 0.1f, 20.f, "%.2f mm", true, 0.f); - hover_tip(_u8L("Triangle size the whole model is rebuilt with, in millimetres. Displacement works best on an " - "even mesh; this is what makes one out of an uneven import.")); + float_row("##remesh_edge", _L("Target edge"), &m_remesh_target_edge_mm, 0.1f, 20.f, "%.2f mm", true, 0.f, + _L("Triangle size the whole model is rebuilt with, in millimetres. Displacement works best on an " + "even mesh; this is what makes one out of an uneven import.")); m_imgui->bbl_checkbox(_L("Keep sharp edges") + "##remesh_sharp", m_remesh_keep_sharp_edges); hover_tip(_u8L("Holds hard edges and open borders in place while the rest is remeshed. Without it " @@ -7091,11 +7190,10 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float "a cube comes back with wobbly edges.")); ImGui::SameLine(); m_imgui->disabled_begin(!m_remesh_keep_sharp_edges); - ImGui::SetNextItemWidth(-1.f); - ImGui::SliderFloat("##remesh_sharp_angle", &m_remesh_sharp_angle_deg, 5.f, 90.f, "%.0f°", ImGuiSliderFlags_AlwaysClamp); - m_imgui->disabled_end(); - hover_tip(_u8L("How sharp a fold has to be, in degrees, before the remesher treats it as an edge worth " + typed_slider("##remesh_sharp_angle", -(1.f + edit_icon_room), &m_remesh_sharp_angle_deg, 5.f, 90.f, "%.0f°", false, + _L("How sharp a fold has to be, in degrees, before the remesher treats it as an edge worth " "keeping. Lower protects more of the model's shape; higher rebuilds more of it evenly.")); + m_imgui->disabled_end(); m_imgui->disabled_begin(mv == nullptr || busy); if (ImGui::Button(_u8L("Remesh").c_str())) @@ -7123,16 +7221,16 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float "on a layer is a different thing: it blurs the image before it is used.")); if (opts.smooth_enabled) { float percent = opts.smooth_strength * 100.f; - if (float_row("##dispsmooth", _L_CONTEXT("Strength", "Texture Displacement"), &percent, 1.f, 100.f, "%.0f %%", false, 0.f)) { + if (float_row("##dispsmooth", _L_CONTEXT("Strength", "Texture Displacement"), &percent, 1.f, 100.f, "%.0f %%", false, 0.f, + _L("How far each pass pulls a vertex towards its neighbours. High values round the " + "relief off quickly; low values need more passes but keep more of the detail."))) { opts.smooth_strength = std::clamp(percent / 100.f, 0.01f, 1.f); m_preview_params_dirty = true; } - hover_tip(_u8L("How far each pass pulls a vertex towards its neighbours. High values round the " - "relief off quickly; low values need more passes but keep more of the detail.")); - if (int_row("##dispsmoothit", _L("Passes"), &opts.smooth_iterations, 1, 10, "%d", 0.f)) + if (int_row("##dispsmoothit", _L("Passes"), &opts.smooth_iterations, 1, 10, "%d", 0.f, + _L("How many smoothing passes to run. More passes spread the smoothing further across " + "the surface; Strength decides how much each one moves."))) m_preview_params_dirty = true; - hover_tip(_u8L("How many smoothing passes to run. More passes spread the smoothing further across " - "the surface; Strength decides how much each one moves.")); m_preview_params_dirty |= m_imgui->bbl_checkbox(_L("Ignore outer ring"), opts.smooth_skip_border); hover_tip(_u8L("Keeps the outer ring of the painted area out of the smoothing. Its neighbours " @@ -7175,16 +7273,16 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float int shown_k = auto_budget ? v2_recommendation(*mv).budget_k : opts.v2_max_triangles_k; m_imgui->disabled_begin(auto_budget); // TRN Slider value: %d is the triangle budget in thousands - if (int_row("##v2budget", _L("Budget"), &shown_k, 0, 4000, auto_budget ? _u8L("%d k (auto)").c_str() : "%d k", 0.f)) { + if (int_row("##v2budget", _L("Budget"), &shown_k, 0, 4000, auto_budget ? _u8L("%d k (auto)").c_str() : "%d k", 0.f, + _L("How many thousand triangles this bake may spend on the area you painted. " + "Relief already baked into the rest of the model is kept on top of it, so a " + "second bake somewhere else gets the same budget as the first. Raise it if the " + "warning below Resolution says the detail will not fit; 0 keeps every triangle " + "the refinement produced, however many that is."))) { opts.v2_max_triangles_k = shown_k; m_preview_params_dirty = true; } m_imgui->disabled_end(); - hover_tip(_u8L("How many thousand triangles this bake may spend on the area you painted. " - "Relief already baked into the rest of the model is kept on top of it, so a " - "second bake somewhere else gets the same budget as the first. Raise it if the " - "warning below Resolution says the detail will not fit; 0 keeps every triangle " - "the refinement produced, however many that is.")); } if (SHOW_PIPELINE_DEV_CONTROLS && opts.pipeline_v2) { // Keeping the relief above the plate is not a checkbox: it is unconditional, in both pipelines @@ -7291,26 +7389,28 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float "default. Untick to set both yourself - worth doing for a texture much finer or " "much coarser than the part it sits on.")); ImGui::SameLine(); - ImGui::SetNextItemWidth(x0 + panel_w - ImGui::GetCursorPosX()); float shown = auto_res ? rec.edge_mm : opts.v2_refine_mm; + // Held in a local: the format outlives the call that reads it, and the slider and the + // range in its tooltip are then formatted the same way. + const std::string v2edge_format = auto_res ? _u8L("%.2f mm (auto)") : std::string("%.2f mm"); + const wxString v2edge_tip = + auto_res && rec.edge_mm > 0.f ? + from_u8(Slic3r::format(_u8L("Chosen from the size of the model: %1$.2f mm triangles, " + "budget %2% k. Untick Auto to set them yourself."), + rec.edge_mm, rec.budget_k)) : + _L("How fine the mesh is made under the paint, in millimetres. It has to be " + "smaller than the detail you want out of the texture - a 0.5 mm groove needs " + "triangles well under 0.5 mm. Smaller costs triangles fast: halving it needs " + "four times as many, and once they no longer fit the budget the bake simplifies " + "back down and the detail goes with it."); m_imgui->disabled_begin(busy || auto_res); - if (ImGui::SliderFloat("##v2edge", &shown, 0.02f, 2.f, auto_res ? _u8L("%.2f mm (auto)").c_str() : "%.2f mm", - ImGuiSliderFlags_AlwaysClamp | ImGuiSliderFlags_Logarithmic)) { + if (typed_slider("##v2edge", x0 + panel_w - ImGui::GetCursorPosX() - edit_icon_room, &shown, 0.02f, 2.f, + v2edge_format.c_str(), true, v2edge_tip)) { opts.v2_refine_mm = shown; m_preview_params_dirty = true; m_parent.set_as_dirty(); } m_imgui->disabled_end(); - if (auto_res && rec.edge_mm > 0.f) - hover_tip(Slic3r::format(_u8L("Chosen from the size of the model: %1$.2f mm triangles, " - "budget %2% k. Untick Auto to set them yourself."), - rec.edge_mm, rec.budget_k)); - else - hover_tip(_u8L("How fine the mesh is made under the paint, in millimetres. It has to be " - "smaller than the detail you want out of the texture - a 0.5 mm groove needs " - "triangles well under 0.5 mm. Smaller costs triangles fast: halving it needs " - "four times as many, and once they no longer fit the budget the bake simplifies " - "back down and the detail goes with it.")); // What this resolution costs over what is painted, against what the budget allows. Refining // past the budget is not an error - the bake simplifies back down to it - but the result @@ -7342,18 +7442,17 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float m_imgui->text(_L("Triangles")); ImGui::SameLine(); ImGui::SetCursorPosX(std::max(ImGui::GetCursorPosX(), x0 + label_w)); - ImGui::SetNextItemWidth(x0 + panel_w - ImGui::GetCursorPosX()); m_imgui->disabled_begin(busy); - if (ImGui::SliderInt("##subdivbudget", &m_subdivide_budget_k, 10, 2000, "+%d k", - ImGuiSliderFlags_AlwaysClamp | ImGuiSliderFlags_Logarithmic)) { + if (typed_slider_int("##subdivbudget", x0 + panel_w - ImGui::GetCursorPosX() - edit_icon_room, + &m_subdivide_budget_k, 10, 2000, "+%d k", true, + _L("How many thousand triangles the refinement may add to the model. The triangle " + "that fits worst is always split first, so even a run that spends the lot has " + "spent it where it shows most. Raise it if the relief still looks coarse."))) { if (m_subdivide_editing) rebuild_subdivide_preview(); m_parent.set_as_dirty(); } m_imgui->disabled_end(); - hover_tip(_u8L("How many thousand triangles the refinement may add to the model. The triangle " - "that fits worst is always split first, so even a run that spends the lot has " - "spent it where it shows most. Raise it if the relief still looks coarse.")); } const float button_h = std::round(frame_h * 1.25f); @@ -7372,7 +7471,7 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float : m_tool_type == ToolType::SMART_FILL ? m_shortcuts_bucket_fill : m_tool_type == ToolType::BRUSH ? m_shortcuts_brush : m_tool_type == ToolType::GAP_FILL ? m_shortcuts_gap_fill - : std::vector>{}; + : m_shortcuts_sliders; // the sliders are there whether or not a painting tool is ImGui::SetCursorPosY(row_y + (row_h - icon_h) * .5f); // center vertically ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(int(m_imgui->scaled(.5f)), style.ItemSpacing.y)); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp index 48e0ab72f6..ce2a7f2b9d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp @@ -404,6 +404,12 @@ private: // Per slot: whether the layer's card shows every setting or only Depth, Tile size and Rotation. // Panel state only, not saved with the project. std::array m_layer_expanded{}; + // The slider whose edit icon was just clicked, as its ImGui id, and the frame it was clicked on. + // The row acts on it on the next frame - ImGui's keyboard-focus request only takes effect a frame + // later - and clears it; the frame number is what retires a request whose row has gone off screen + // in the meantime. Panel state only, not saved with the project. + std::string m_slider_type_request; + int m_slider_type_request_frame = 0; // "Adjust Texture" mode: instead of painting, dragging an on-canvas handle changes the active // layer's offset. The handle is a flat panel lying in the paint patch's own tangent plane @@ -1016,6 +1022,9 @@ private: std::vector> m_shortcuts_bucket_fill; // Contains all shortcuts in the format of {shortcut, description}, e.g. {alt + _L("Left mouse button"), _L("Part_selection")} std::vector> m_shortcuts_gap_fill; + // The two ways every slider in the panel takes a typed value. They hold whatever tool is selected, + // so they are tacked onto each of the lists above and stand on their own when no tool is active. + std::vector> m_shortcuts_sliders; // Icons for the panel's icon buttons (tools, views, mapping, tiling, layer actions). Loaded through IconManager with // the same colour/monochrome variants the main toolbar uses, so an inactive button shows the icon in From 56b559d36a6d67ab706ad60aaea343f9667c62b7 Mon Sep 17 00:00:00 2001 From: ExPikaPaka Date: Mon, 12 Oct 2026 07:57:50 +0200 Subject: [PATCH 007/137] Fix texture projection UV orientation An image laid onto a model came out upside down under the ordinary box (tri-planar) projection, and on three of a cube's six faces it was also mirrored left to right, which reads as a 180 degree rotation. DecodedHeightTexture::sample() defines v = 0 as the height map's first pixel row, i.e. its top. Every projection built v from world +Z, so v grew upward and the image landed bottom row up. The one path that was already right is the projective "project from view" matrix, which measures window y downward. Both halves of the box basis were wrong: - v is now negated on all three world planes, so the top of an image sits at the top of the model. - u now carries a sign for the side of the plane the face is on, chosen so that u x v == -normal. Without it the two faces sharing a plane get one u and one of them is mirrored. The sign flips exactly where that plane's blend weight (the fourth power of a normal component) reaches zero, so the blended tri-planar sum stays continuous and the hard axis switch the old code removed does not come back. The same v convention was missing from the other mapping modes: cylindrical (which also had a left handed frame, right x up rather than up x right, so its wrap ran mirrored), spherical, the affine branch of view projection, and the flat chart fallback of the LSCM unwrap, which now reuses the box basis so a cube face unwraps to the orientation tri-planar would have given it. The basis table is exported as box_projection_axes() and the gizmo's adjust_tangent_basis() calls it instead of restating it, so the placement ring and offset handle cannot drift from the bake. All four preview shaders get the matching change, including projection_axes(), whose tangent and bitangent have to flip with the coordinate or the relief shading inverts. Re-baking an existing project now places its texture upright, so it will differ from how it looked before. Geometry already baked into a 3mf is untouched, so nothing changes until the user re-bakes. Verified by measuring the sampled texture row and column against world position for every mapping mode on all six faces of a cube, and by a full bake of a quadrant coded image, which lands each quadrant within 1e-3 mm of its expected depth. --- .../110/texture_displacement_shaded.fs | 52 +-- .../110/texture_displacement_uvcheck.fs | 20 +- .../140/texture_displacement_shaded.fs | 52 +-- .../140/texture_displacement_uvcheck.fs | 20 +- src/libslic3r/TextureDisplacement.cpp | 125 +++++-- src/libslic3r/TextureDisplacement.hpp | 21 +- .../GUI/Gizmos/GLGizmoTextureDisplacement.cpp | 20 +- .../GUI/Gizmos/GLGizmoTextureDisplacement.hpp | 4 +- tests/libslic3r/test_texture_displacement.cpp | 315 ++++++++++++++++++ 9 files changed, 538 insertions(+), 91 deletions(-) diff --git a/resources/shaders/110/texture_displacement_shaded.fs b/resources/shaders/110/texture_displacement_shaded.fs index 0b9192749c..93449af5d4 100644 --- a/resources/shaders/110/texture_displacement_shaded.fs +++ b/resources/shaders/110/texture_displacement_shaded.fs @@ -72,17 +72,21 @@ varying float weight; varying float island_active; varying vec2 vertex_uv; -// The cylinder's own frame, built exactly as libslic3r's project_cylindrical() builds it - including -// the handedness, which comes out left-handed for an axis of +Z. Copied rather than "corrected", so -// the preview wraps the texture the same way round as the bake. +// The cylinder's own frame, built exactly as libslic3r's project_cylindrical() builds it - right +// handed, so the angle taken from it grows anticlockwise about the axis, which seen from outside the +// cylinder is to the viewer's right rather than mirrored. void cylinder_frame(out vec3 up, out vec3 right, out vec3 fwd) { up = (length(patch_axis) > 1e-8) ? normalize(patch_axis) : vec3(0.0, 0.0, 1.0); vec3 arbitrary = (abs(up.z) < 0.9) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); right = normalize(cross(up, arbitrary)); - fwd = normalize(cross(right, up)); + fwd = normalize(cross(up, right)); } +// Which side of a world plane a face is on, with zero counting as the positive side. Not GLSL's own +// sign(), which returns 0 there and would collapse the coordinate onto a line. +float box_face_sign(float n) { return n >= 0.0 ? 1.0 : -1.0; } + // The raw, millimetre-valued projection of `p` (a position in the texture frame), before the layer's // tiling/rotation/aspect/offset - a term-for-term transcription of libslic3r's project_planar(), // project_cylindrical() and project_spherical(). `n` is read by the planar mode only. @@ -94,7 +98,7 @@ vec2 projection_raw(vec3 p, vec3 n) vec3 rel = p - patch_center; float x = dot(rel, right); float y = dot(rel, fwd); - return vec2(atan(y, x) * sqrt(x * x + y * y), dot(rel, up)); + return vec2(atan(y, x) * sqrt(x * x + y * y), -dot(rel, up)); } if (projection_mode == 2) { // Spherical: (longitude, latitude) * radius vec3 rel = p - patch_center; @@ -102,10 +106,18 @@ vec2 projection_raw(vec3 p, vec3 n) if (radius < 1e-8) return vec2(0.0); vec3 dir = rel / radius; - return vec2(atan(dir.y, dir.x), asin(clamp(dir.z, -1.0, 1.0))) * radius; + return vec2(atan(dir.y, dir.x), -asin(clamp(dir.z, -1.0, 1.0))) * radius; } - vec3 an = abs(n); // Triplanar: drop the dominant normal axis - return (an.x >= an.y && an.x >= an.z) ? p.yz : ((an.y >= an.x && an.y >= an.z) ? p.xz : p.xy); + // Triplanar: drop the dominant normal axis. v is negated so the image's first pixel row (v = 0) + // sits at the top of the model instead of upside down, and u is flipped on the far side of each + // plane so the two faces sharing it are not mirror images. libslic3r's box_plane_yz() and its two + // siblings, term for term. + vec3 an = abs(n); + if (an.x >= an.y && an.x >= an.z) + return vec2(box_face_sign(n.x) * p.y, -p.z); + if (an.y >= an.x && an.y >= an.z) + return vec2(-box_face_sign(n.y) * p.x, -p.z); + return vec2(box_face_sign(n.z) * p.x, -p.y); } // The two surface directions projection_raw()'s u and v run along at `p`, plus how many raw units one @@ -124,7 +136,7 @@ void projection_axes(vec3 p, vec3 n, out vec3 t, out vec3 b, out vec2 units_per_ vec2 xy = vec2(dot(rel, right), dot(rel, fwd)); float r = length(xy); t = (r > 1e-6) ? (fwd * xy.x - right * xy.y) / r : right; // circumferential: u runs along it - b = up; // v is the distance along the axis + b = -up; // v is the distance *against* the axis return; } if (projection_mode == 2) { @@ -133,20 +145,20 @@ void projection_axes(vec3 p, vec3 n, out vec3 t, out vec3 b, out vec2 units_per_ vec3 dir = (r > 1e-8) ? rel / r : vec3(0.0, 0.0, 1.0); float c = length(dir.xy); // cos(latitude) t = (c > 1e-6) ? vec3(-dir.y, dir.x, 0.0) / c : vec3(1.0, 0.0, 0.0); - b = cross(dir, t); // increasing latitude, unit length + b = -cross(dir, t); // v grows away from the pole, unit length units_per_mm = vec2(1.0 / max(c, 1e-3), 1.0); return; } - vec3 an = abs(n); - if (an.x >= an.y && an.x >= an.z) { // planar = p.yz - t = vec3(0.0, 1.0, 0.0); - b = vec3(0.0, 0.0, 1.0); - } else if (an.y >= an.x && an.y >= an.z) { // planar = p.xz - t = vec3(1.0, 0.0, 0.0); - b = vec3(0.0, 0.0, 1.0); - } else { // planar = p.xy - t = vec3(1.0, 0.0, 0.0); - b = vec3(0.0, 1.0, 0.0); + vec3 an = abs(n); // the same signed basis projection_raw() uses + if (an.x >= an.y && an.x >= an.z) { // planar = (+-y, -z) + t = vec3(0.0, box_face_sign(n.x), 0.0); + b = vec3(0.0, 0.0, -1.0); + } else if (an.y >= an.x && an.y >= an.z) { // planar = (+-x, -z) + t = vec3(-box_face_sign(n.y), 0.0, 0.0); + b = vec3(0.0, 0.0, -1.0); + } else { // planar = (+-x, -y) + t = vec3(box_face_sign(n.z), 0.0, 0.0); + b = vec3(0.0, -1.0, 0.0); } } diff --git a/resources/shaders/110/texture_displacement_uvcheck.fs b/resources/shaders/110/texture_displacement_uvcheck.fs index f9e998adc2..37fd1826f2 100644 --- a/resources/shaders/110/texture_displacement_uvcheck.fs +++ b/resources/shaders/110/texture_displacement_uvcheck.fs @@ -36,14 +36,20 @@ varying vec4 world_pos; varying float distortion; varying vec2 vertex_uv; +// Right handed (up x right), like libslic3r's project_cylindrical(), so the angle taken from it grows +// anticlockwise about the axis - to the viewer's right when seen from outside the cylinder. void cylinder_frame(out vec3 up, out vec3 right, out vec3 fwd) { up = (length(patch_axis) > 1e-8) ? normalize(patch_axis) : vec3(0.0, 0.0, 1.0); vec3 arbitrary = (abs(up.z) < 0.9) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); right = normalize(cross(up, arbitrary)); - fwd = normalize(cross(right, up)); + fwd = normalize(cross(up, right)); } +// Which side of a world plane a face is on, with zero counting as the positive side. Not GLSL's own +// sign(), which returns 0 there and would collapse the coordinate onto a line. +float box_face_sign(float n) { return n >= 0.0 ? 1.0 : -1.0; } + // Term for term libslic3r's project_planar() / project_cylindrical() / project_spherical(), in mm. vec2 projection_raw(vec3 p, vec3 n) { @@ -53,7 +59,7 @@ vec2 projection_raw(vec3 p, vec3 n) vec3 rel = p - patch_center; float x = dot(rel, right); float y = dot(rel, fwd); - return vec2(atan(y, x) * sqrt(x * x + y * y), dot(rel, up)); + return vec2(atan(y, x) * sqrt(x * x + y * y), -dot(rel, up)); } if (projection_mode == 2) { vec3 rel = p - patch_center; @@ -61,10 +67,16 @@ vec2 projection_raw(vec3 p, vec3 n) if (radius < 1e-8) return vec2(0.0); vec3 dir = rel / radius; - return vec2(atan(dir.y, dir.x), asin(clamp(dir.z, -1.0, 1.0))) * radius; + return vec2(atan(dir.y, dir.x), -asin(clamp(dir.z, -1.0, 1.0))) * radius; } + // v negated so the image's first pixel row sits at the top of the model, u flipped on the far side + // of each plane so the two faces sharing it are not mirror images - see libslic3r's box_plane_yz(). vec3 an = abs(n); - return (an.x >= an.y && an.x >= an.z) ? p.yz : ((an.y >= an.x && an.y >= an.z) ? p.xz : p.xy); + if (an.x >= an.y && an.x >= an.z) + return vec2(box_face_sign(n.x) * p.y, -p.z); + if (an.y >= an.x && an.y >= an.z) + return vec2(-box_face_sign(n.y) * p.x, -p.z); + return vec2(box_face_sign(n.z) * p.x, -p.y); } vec2 project_uv(vec3 p, vec3 n) diff --git a/resources/shaders/140/texture_displacement_shaded.fs b/resources/shaders/140/texture_displacement_shaded.fs index 911a919aaf..9398b21102 100644 --- a/resources/shaders/140/texture_displacement_shaded.fs +++ b/resources/shaders/140/texture_displacement_shaded.fs @@ -138,17 +138,21 @@ in vec2 vertex_uv; out vec4 out_color; -// The cylinder's own frame, built exactly as libslic3r's project_cylindrical() builds it - including -// the handedness, which comes out left-handed for an axis of +Z. Copied rather than "corrected", so -// the preview wraps the texture the same way round as the bake. +// The cylinder's own frame, built exactly as libslic3r's project_cylindrical() builds it - right +// handed, so the angle taken from it grows anticlockwise about the axis, which seen from outside the +// cylinder is to the viewer's right rather than mirrored. void cylinder_frame(out vec3 up, out vec3 right, out vec3 fwd) { up = (length(patch_axis) > 1e-8) ? normalize(patch_axis) : vec3(0.0, 0.0, 1.0); vec3 arbitrary = (abs(up.z) < 0.9) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); right = normalize(cross(up, arbitrary)); - fwd = normalize(cross(right, up)); + fwd = normalize(cross(up, right)); } +// Which side of a world plane a face is on, with zero counting as the positive side. Not GLSL's own +// sign(), which returns 0 there and would collapse the coordinate onto a line. +float box_face_sign(float n) { return n >= 0.0 ? 1.0 : -1.0; } + // The raw, millimetre-valued projection of `p` (a position in the texture frame), before the layer's // tiling/rotation/aspect/offset - a term-for-term transcription of libslic3r's project_planar(), // project_cylindrical() and project_spherical(). `n` is read by the planar mode only. @@ -160,7 +164,7 @@ vec2 projection_raw(vec3 p, vec3 n) vec3 rel = p - patch_center; float x = dot(rel, right); float y = dot(rel, fwd); - return vec2(atan(y, x) * sqrt(x * x + y * y), dot(rel, up)); + return vec2(atan(y, x) * sqrt(x * x + y * y), -dot(rel, up)); } if (projection_mode == 2) { // Spherical: (longitude, latitude) * radius vec3 rel = p - patch_center; @@ -168,10 +172,18 @@ vec2 projection_raw(vec3 p, vec3 n) if (radius < 1e-8) return vec2(0.0); vec3 dir = rel / radius; - return vec2(atan(dir.y, dir.x), asin(clamp(dir.z, -1.0, 1.0))) * radius; + return vec2(atan(dir.y, dir.x), -asin(clamp(dir.z, -1.0, 1.0))) * radius; } - vec3 an = abs(n); // Triplanar: drop the dominant normal axis - return (an.x >= an.y && an.x >= an.z) ? p.yz : ((an.y >= an.x && an.y >= an.z) ? p.xz : p.xy); + // Triplanar: drop the dominant normal axis. v is negated so the image's first pixel row (v = 0) + // sits at the top of the model instead of upside down, and u is flipped on the far side of each + // plane so the two faces sharing it are not mirror images. libslic3r's box_plane_yz() and its two + // siblings, term for term. + vec3 an = abs(n); + if (an.x >= an.y && an.x >= an.z) + return vec2(box_face_sign(n.x) * p.y, -p.z); + if (an.y >= an.x && an.y >= an.z) + return vec2(-box_face_sign(n.y) * p.x, -p.z); + return vec2(box_face_sign(n.z) * p.x, -p.y); } // The two surface directions projection_raw()'s u and v run along at `p`, plus how many raw units one @@ -190,7 +202,7 @@ void projection_axes(vec3 p, vec3 n, out vec3 t, out vec3 b, out vec2 units_per_ vec2 xy = vec2(dot(rel, right), dot(rel, fwd)); float r = length(xy); t = (r > 1e-6) ? (fwd * xy.x - right * xy.y) / r : right; // circumferential: u runs along it - b = up; // v is the distance along the axis + b = -up; // v is the distance *against* the axis return; } if (projection_mode == 2) { @@ -199,20 +211,20 @@ void projection_axes(vec3 p, vec3 n, out vec3 t, out vec3 b, out vec2 units_per_ vec3 dir = (r > 1e-8) ? rel / r : vec3(0.0, 0.0, 1.0); float c = length(dir.xy); // cos(latitude) t = (c > 1e-6) ? vec3(-dir.y, dir.x, 0.0) / c : vec3(1.0, 0.0, 0.0); - b = cross(dir, t); // increasing latitude, unit length + b = -cross(dir, t); // v grows away from the pole, unit length units_per_mm = vec2(1.0 / max(c, 1e-3), 1.0); return; } - vec3 an = abs(n); - if (an.x >= an.y && an.x >= an.z) { // planar = p.yz - t = vec3(0.0, 1.0, 0.0); - b = vec3(0.0, 0.0, 1.0); - } else if (an.y >= an.x && an.y >= an.z) { // planar = p.xz - t = vec3(1.0, 0.0, 0.0); - b = vec3(0.0, 0.0, 1.0); - } else { // planar = p.xy - t = vec3(1.0, 0.0, 0.0); - b = vec3(0.0, 1.0, 0.0); + vec3 an = abs(n); // the same signed basis projection_raw() uses + if (an.x >= an.y && an.x >= an.z) { // planar = (+-y, -z) + t = vec3(0.0, box_face_sign(n.x), 0.0); + b = vec3(0.0, 0.0, -1.0); + } else if (an.y >= an.x && an.y >= an.z) { // planar = (+-x, -z) + t = vec3(-box_face_sign(n.y), 0.0, 0.0); + b = vec3(0.0, 0.0, -1.0); + } else { // planar = (+-x, -y) + t = vec3(box_face_sign(n.z), 0.0, 0.0); + b = vec3(0.0, -1.0, 0.0); } } diff --git a/resources/shaders/140/texture_displacement_uvcheck.fs b/resources/shaders/140/texture_displacement_uvcheck.fs index e6fc8036da..34f80df2bd 100644 --- a/resources/shaders/140/texture_displacement_uvcheck.fs +++ b/resources/shaders/140/texture_displacement_uvcheck.fs @@ -47,14 +47,20 @@ in vec2 vertex_uv; out vec4 out_color; +// Right handed (up x right), like libslic3r's project_cylindrical(), so the angle taken from it grows +// anticlockwise about the axis - to the viewer's right when seen from outside the cylinder. void cylinder_frame(out vec3 up, out vec3 right, out vec3 fwd) { up = (length(patch_axis) > 1e-8) ? normalize(patch_axis) : vec3(0.0, 0.0, 1.0); vec3 arbitrary = (abs(up.z) < 0.9) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); right = normalize(cross(up, arbitrary)); - fwd = normalize(cross(right, up)); + fwd = normalize(cross(up, right)); } +// Which side of a world plane a face is on, with zero counting as the positive side. Not GLSL's own +// sign(), which returns 0 there and would collapse the coordinate onto a line. +float box_face_sign(float n) { return n >= 0.0 ? 1.0 : -1.0; } + // Term for term libslic3r's project_planar() / project_cylindrical() / project_spherical(), in mm. vec2 projection_raw(vec3 p, vec3 n) { @@ -64,7 +70,7 @@ vec2 projection_raw(vec3 p, vec3 n) vec3 rel = p - patch_center; float x = dot(rel, right); float y = dot(rel, fwd); - return vec2(atan(y, x) * sqrt(x * x + y * y), dot(rel, up)); + return vec2(atan(y, x) * sqrt(x * x + y * y), -dot(rel, up)); } if (projection_mode == 2) { vec3 rel = p - patch_center; @@ -72,10 +78,16 @@ vec2 projection_raw(vec3 p, vec3 n) if (radius < 1e-8) return vec2(0.0); vec3 dir = rel / radius; - return vec2(atan(dir.y, dir.x), asin(clamp(dir.z, -1.0, 1.0))) * radius; + return vec2(atan(dir.y, dir.x), -asin(clamp(dir.z, -1.0, 1.0))) * radius; } + // v negated so the image's first pixel row sits at the top of the model, u flipped on the far side + // of each plane so the two faces sharing it are not mirror images - see libslic3r's box_plane_yz(). vec3 an = abs(n); - return (an.x >= an.y && an.x >= an.z) ? p.yz : ((an.y >= an.x && an.y >= an.z) ? p.xz : p.xy); + if (an.x >= an.y && an.x >= an.z) + return vec2(box_face_sign(n.x) * p.y, -p.z); + if (an.y >= an.x && an.y >= an.z) + return vec2(-box_face_sign(n.y) * p.x, -p.z); + return vec2(box_face_sign(n.z) * p.x, -p.y); } vec2 project_uv(vec3 p, vec3 n) diff --git a/src/libslic3r/TextureDisplacement.cpp b/src/libslic3r/TextureDisplacement.cpp index ec9d9a2e11..40416e7277 100644 --- a/src/libslic3r/TextureDisplacement.cpp +++ b/src/libslic3r/TextureDisplacement.cpp @@ -491,6 +491,57 @@ V2Resolution recommend_v2_resolution(const indexed_triangle_set return out; } +namespace { +// Which side of a world plane a face is on, with an exactly zero component counted as the positive +// side. The tie never shows: a normal component of zero carries zero tri-planar blend weight (see +// triplanar_weights()), so the plane it orients contributes nothing at that point. +inline float box_face_sign(float n) { return n >= 0.f ? 1.f : -1.f; } + +// The box projection's 2D basis for one of the three world planes, oriented the way a viewer +// standing outside the model sees that face. +// +// v runs *down* the image, because that is what v means to the sampler: v = 0 is the texture's first +// pixel row, i.e. its top (DecodedHeightTexture::sample(); the UV editor negates Y on screen for the +// same reason, see UVEditorCanvas::render()). So v = -z on the four upright planes and v = -y on the +// horizontal one, which is what puts the top of an image at the top of the model rather than +// upside down. +// +// u then has to depend on which *side* of the plane the face is on, or one of the two faces sharing +// a plane comes out left-right mirrored: with a single u per plane, a portrait image reads upright on +// +X and 180 degrees round on -X. Fixing that is the sign below, chosen so that u x v == -normal, +// i.e. (right, down, into the surface) is right-handed for a viewer outside: +// +// face u v face u v face u v +// +X +y -z +Y -x -z +Z +x -y +// -X -y -z -Y +x -z -Z -x -y +// +// The sign flips where its own normal component crosses zero, and the blend weight of the plane it +// belongs to is exactly zero there, so the blended tri-planar sum stays continuous across the flip - +// it is not a return of the hard axis switch described on TextureProjectionMethod::Triplanar. +inline Vec2f box_plane_yz(const Vec3f &p, float nx) { return Vec2f(box_face_sign(nx) * p.y(), -p.z()); } +inline Vec2f box_plane_xz(const Vec3f &p, float ny) { return Vec2f(-box_face_sign(ny) * p.x(), -p.z()); } +inline Vec2f box_plane_xy(const Vec3f &p, float nz) { return Vec2f(box_face_sign(nz) * p.x(), -p.y()); } +} // namespace + +void box_projection_axes(const Vec3f &normal, Vec3f &u_axis, Vec3f &v_axis) +{ + // The same table as box_plane_yz()/box_plane_xz()/box_plane_xy(), handed out as a pair of world + // directions for the plane the normal is closest to. Two shapes of one table, because the bake's + // hot path wants the closed form and the GUI wants the axes; the test suite checks them against + // each other so they cannot drift apart. + const Vec3f n = normal.cwiseAbs(); + if (n.x() >= n.y() && n.x() >= n.z()) { + u_axis = box_face_sign(normal.x()) * Vec3f::UnitY(); + v_axis = -Vec3f::UnitZ(); + } else if (n.y() >= n.x() && n.y() >= n.z()) { + u_axis = -box_face_sign(normal.y()) * Vec3f::UnitX(); + v_axis = -Vec3f::UnitZ(); + } else { + u_axis = box_face_sign(normal.z()) * Vec3f::UnitX(); + v_axis = -Vec3f::UnitY(); + } +} + Vec2f project_planar(const Vec3f &position, const Vec3f &normal) { // Planar-project onto the two axes orthogonal to the dominant component of `normal`. Called @@ -501,23 +552,26 @@ Vec2f project_planar(const Vec3f &position, const Vec3f &normal) // other face in the same patch - exactly the bug an earlier version of this feature had). const Vec3f n = normal.cwiseAbs(); if (n.x() >= n.y() && n.x() >= n.z()) - return Vec2f(position.y(), position.z()); + return box_plane_yz(position, normal.x()); if (n.y() >= n.x() && n.y() >= n.z()) - return Vec2f(position.x(), position.z()); - return Vec2f(position.x(), position.y()); + return box_plane_xz(position, normal.y()); + return box_plane_xy(position, normal.z()); } namespace { // Wrapped around patch_axis, centered at patch_center. u is the arc length (mm) around the axis at -// this point's own radius, v is the signed distance along the axis - a reasonable approximation -// for roughly cylindrical selections, not an exact fit for arbitrary geometry. +// this point's own radius, v is the distance along the axis, measured *against* it - a reasonable +// approximation for roughly cylindrical selections, not an exact fit for arbitrary geometry. Vec2f project_cylindrical(const Vec3f &position, const Vec3f &patch_center, const Vec3f &patch_axis) { Vec3f up = patch_axis; up = (up.norm() > 1e-8f) ? Vec3f(up.normalized()) : Vec3f::UnitZ(); const Vec3f arbitrary = (std::abs(up.dot(Vec3f::UnitZ())) < 0.9f) ? Vec3f::UnitZ() : Vec3f::UnitX(); const Vec3f right = Vec3f(up.cross(arbitrary).normalized()); - const Vec3f fwd = Vec3f(right.cross(up).normalized()); + // up x right, not right x up: that makes (right, fwd, up) right-handed, so the angle below grows + // anticlockwise about the axis - which, seen from outside the cylinder, is to the viewer's right. + // The other way round the texture wraps on mirrored, as if seen through the model from behind. + const Vec3f fwd = Vec3f(up.cross(right).normalized()); const Vec3f rel = position - patch_center; const float along_axis = rel.dot(up); @@ -526,7 +580,9 @@ Vec2f project_cylindrical(const Vec3f &position, const Vec3f &patch_center, cons const float radius = std::sqrt(x * x + y * y); const float angle = std::atan2(y, x); - return Vec2f(angle * radius, along_axis); + // Negated, like every other projection's v: v = 0 is the texture's top row, so v has to grow + // *down* the axis for the top of the image to sit at the top of the model. + return Vec2f(angle * radius, -along_axis); } // Longitude/latitude around patch_center. u/v are scaled by this point's own distance from the @@ -542,7 +598,9 @@ Vec2f project_spherical(const Vec3f &position, const Vec3f &patch_center) const Vec3f dir = rel / radius; const float longitude = std::atan2(dir.y(), dir.x()); const float latitude = std::asin(std::clamp(dir.z(), -1.f, 1.f)); - return Vec2f(longitude, latitude) * radius; + // Longitude already grows to the right as seen from outside; latitude grows toward the north + // pole, so it is negated to put the image's top row (v = 0) at the top of the model. + return Vec2f(longitude, -latitude) * radius; } // CGAL's LSCM parameterizer expects a clean mesh with no isolated (unreferenced) vertices - but @@ -837,9 +895,26 @@ std::vector segment_into_charts(const indexed_triangle_set &mesh, const std // solve at all, and why this also serves as the fallback for a chart LSCM cannot handle. std::vector project_to_tangent_plane(const indexed_triangle_set &chart, const Vec3f &normal) { - const Vec3f seed = (std::abs(normal.z()) < 0.9f) ? Vec3f::UnitZ() : Vec3f::UnitX(); - const Vec3f u = Vec3f(seed.cross(normal).normalized()); - const Vec3f v = Vec3f(normal.cross(u).normalized()); + // Oriented like the box projection (see box_projection_axes()), so a chart reads the right way up + // and unmirrored instead of being flattened to whichever basis a cross product happened to give. + // For a chart whose normal *is* a world axis - a cube face, which is the common case once the + // seam angle has cut the patch along its sharp edges - this is exactly the box basis, so such a + // face unwraps to the same orientation Triplanar would have given it. + Vec3f u, v; + box_projection_axes(normal, u, v); + // The box axes lie in the tangent plane already when the normal is a world axis; for any other + // normal, u is squared up against it and v follows. u x v == -normal keeps the chart the way + // round a viewer outside the model sees it (a plain normal x u would mirror it). + u = u - normal * normal.dot(u); + if (u.norm() <= 1e-6f) { + // Out of reach for a unit normal - the box basis puts u perpendicular to the normal's own + // dominant axis, so the two can never be within 45 degrees of each other - but a caller + // handing over an unnormalized normal should still get a usable basis rather than a NaN. + const Vec3f seed = (std::abs(normal.z()) < 0.9f) ? Vec3f::UnitZ() : Vec3f::UnitX(); + u = seed.cross(normal); + } + u = Vec3f(u.normalized()); + v = Vec3f(u.cross(normal).normalized()); std::vector uvs(chart.vertices.size()); for (size_t i = 0; i < chart.vertices.size(); ++i) @@ -1814,8 +1889,10 @@ float sample_layer_height(const DecodedHeightTexture &texture, const TextureDisp return texture.sample(uv, layer.tile_enabled, layer.tile_method); } // Flat projection onto the captured projector plane. Single-valued per point, so unlike - // blended triplanar it is one sample, and it is what "project from view" places. - return sample_at(Vec2f(position.dot(layer.view_project_right), position.dot(layer.view_project_up))); + // blended triplanar it is one sample, and it is what "project from view" places. The + // projector's up axis is negated because v runs *down* the image (v = 0 is its first pixel + // row), the same reason the projective branch above measures window y downward. + return sample_at(Vec2f(position.dot(layer.view_project_right), -position.dot(layer.view_project_up))); case TextureProjectionMethod::LSCM: // no usable unwrap for this patch - fall back to Triplanar case TextureProjectionMethod::Triplanar: default: break; @@ -1830,14 +1907,15 @@ float sample_layer_height(const DecodedHeightTexture &texture, const TextureDisp const float w_sum = w.x() + w.y() + w.z(); if (w_sum < 1e-8f) // Degenerate normal: no axis is meaningfully dominant, so no blend is meaningful either. - return sample_at(Vec2f(position.x(), position.y())); + return sample_at(box_plane_xy(position, normal.z())); w /= w_sum; - // Each plane drops the axis it is named for, matching project_planar()'s own convention (which - // the GUI's on-canvas placement gizmo also relies on). - return w.x() * sample_at(Vec2f(position.y(), position.z())) + - w.y() * sample_at(Vec2f(position.x(), position.z())) + - w.z() * sample_at(Vec2f(position.x(), position.y())); + // Each plane drops the axis it is named for and is oriented for the side of that plane the normal + // points to, matching project_planar()'s own convention (which the GUI's on-canvas placement + // gizmo also relies on). See box_plane_yz() for why the orientation is not simply (y, z). + return w.x() * sample_at(box_plane_yz(position, normal.x())) + + w.y() * sample_at(box_plane_xz(position, normal.y())) + + w.z() * sample_at(box_plane_xy(position, normal.z())); } bool sample_layer_color(const DecodedHeightTexture &texture, const TextureDisplacementLayer &layer, @@ -1899,7 +1977,8 @@ bool sample_layer_color(const DecodedHeightTexture &texture, const TextureDispla out = texture.sample_color(uv, layer.tile_enabled, layer.tile_method); return true; } else { - const Vec2f p(position.dot(layer.view_project_right), position.dot(layer.view_project_up)); + // Negated up, exactly as sample_layer_height() does it. + const Vec2f p(position.dot(layer.view_project_right), -position.dot(layer.view_project_up)); if (!covered(p)) return false; out = sample_at(p); @@ -1915,7 +1994,7 @@ bool sample_layer_color(const DecodedHeightTexture &texture, const TextureDispla Vec3f w = triplanar_weights(normal); const float w_sum = w.x() + w.y() + w.z(); if (w_sum < 1e-8f) { - const Vec2f p(position.x(), position.y()); + const Vec2f p = box_plane_xy(position, normal.z()); if (!covered(p)) return false; out = sample_at(p); @@ -1926,8 +2005,8 @@ bool sample_layer_color(const DecodedHeightTexture &texture, const TextureDispla // A blend of three planes is only "not covered" where *every* contributing plane is outside the // placement; where some are, the covered ones are renormalised so the colour does not fade toward // black at the edge of an untiled tri-planar layer. - const std::array planes = { Vec2f(position.y(), position.z()), Vec2f(position.x(), position.z()), - Vec2f(position.x(), position.y()) }; + const std::array planes = { box_plane_yz(position, normal.x()), box_plane_xz(position, normal.y()), + box_plane_xy(position, normal.z()) }; Vec3f acc = Vec3f::Zero(); float acc_w = 0.f; for (int i = 0; i < 3; ++i) diff --git a/src/libslic3r/TextureDisplacement.hpp b/src/libslic3r/TextureDisplacement.hpp index d61739c7d8..f096c847ad 100644 --- a/src/libslic3r/TextureDisplacement.hpp +++ b/src/libslic3r/TextureDisplacement.hpp @@ -524,11 +524,24 @@ struct TextureColorSettings bool empty() const { return palette.empty(); } }; +// The two world directions the box projection takes its u and v along on a face whose outward +// normal is `normal`: the plane is the one that normal is closest to, and the pair is oriented as a +// viewer standing outside the model sees it - u to their right, v *down* the image, which is the +// direction v runs in the texture (v = 0 is the image's first pixel row, see +// DecodedHeightTexture::sample()). So an image comes out the way it looks in a file manager rather +// than upside down, and it is not mirrored on the three faces facing the other way. +// +// Exposed because the GUI needs the same basis for the on-canvas "adjust texture placement" gizmo +// (its ring's zero angle and its offset handle's plane), and it must not be a second, drifting copy +// of the table. +void box_projection_axes(const Vec3f &normal, Vec3f &u_axis, Vec3f &v_axis); + // Raw dominant-axis planar projection of `position` (in mm, not yet scaled/rotated/offset by any -// layer), dropping the axis position that best aligns with `normal`. Exposed on its own (rather -// than only inline inside project_texture_displacement_uv()) so GUI code - the on-canvas -// "adjust texture placement" gizmo - can map a dragged 3D point into the exact same 2D space -// tiling_scale/rotation_deg/offset operate in, without duplicating the axis-selection logic. +// layer), dropping the axis position that best aligns with `normal`. Equivalent to projecting onto +// box_projection_axes()' pair. Exposed on its own (rather than only inline inside +// project_texture_displacement_uv()) so GUI code - the on-canvas "adjust texture placement" gizmo - +// can map a dragged 3D point into the exact same 2D space tiling_scale/rotation_deg/offset operate +// in, without duplicating the axis-selection logic. Vec2f project_planar(const Vec3f &position, const Vec3f &normal); // Applies a layer's tiling_scale/rotation_deg/offset to an already-projected planar coordinate diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp index 96af821505..d39785ade7 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp @@ -1252,8 +1252,9 @@ std::vector GLGizmoTextureDisplacement::compute_layer_vertex_uvs(const in uv[vi] = Vec2f(-1e6f, -1e6f); continue; } + // Negated up, as sample_layer_height()'s affine branch has it: v runs down the image. const Vec2f planar(patch.vertices[vi].dot(layer.view_project_right), - patch.vertices[vi].dot(layer.view_project_up)); + -patch.vertices[vi].dot(layer.view_project_up)); uv[vi] = apply_uv_transform(planar, layer, aspect); } return uv; @@ -3292,19 +3293,10 @@ Vec3f GLGizmoTextureDisplacement::adjust_handle_center(const TextureDisplacement void GLGizmoTextureDisplacement::adjust_tangent_basis(Vec3f &u_axis, Vec3f &v_axis) const { - // Mirrors project_planar()'s own dominant-axis choice exactly, so the ring's "0 degrees" and - // the offset handle's plane always agree with what project_texture_displacement_uv() does. - const Vec3f n = m_adjust_anchor_normal.cwiseAbs(); - if (n.x() >= n.y() && n.x() >= n.z()) { - u_axis = Vec3f::UnitY(); - v_axis = Vec3f::UnitZ(); - } else if (n.y() >= n.x() && n.y() >= n.z()) { - u_axis = Vec3f::UnitX(); - v_axis = Vec3f::UnitZ(); - } else { - u_axis = Vec3f::UnitX(); - v_axis = Vec3f::UnitY(); - } + // libslic3r's own basis, asked for rather than restated here, so the ring's "0 degrees" and the + // offset handle's plane always agree with what project_texture_displacement_uv() does - including + // v pointing *down* the texture and u flipping on the far side of each plane. + box_projection_axes(m_adjust_anchor_normal, u_axis, v_axis); } void GLGizmoTextureDisplacement::render_adjust_texture_gizmo() diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp index 48e0ab72f6..4e2fcefccb 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp @@ -423,8 +423,8 @@ private: // obvious whether the next stroke adds paint (default) or erases it (Shift). Uses ImGui's // foreground draw list, so it must be called from inside the gizmo's ImGui frame. void render_paint_cursor_hint(); - // Mesh-local tangent-plane basis at m_adjust_anchor_normal, matching project_planar()'s - // dominant-axis convention so dragging on-canvas maps consistently onto offset. + // Mesh-local tangent-plane basis at m_adjust_anchor_normal: box_projection_axes(), so dragging + // on-canvas maps consistently onto offset whichever face the anchor is on. void adjust_tangent_basis(Vec3f &u_axis, Vec3f &v_axis) const; // The plane a drag is measured against: the paint patch's anchor, lifted clear of the surface. diff --git a/tests/libslic3r/test_texture_displacement.cpp b/tests/libslic3r/test_texture_displacement.cpp index 485f4f2a0f..37745beaa0 100644 --- a/tests/libslic3r/test_texture_displacement.cpp +++ b/tests/libslic3r/test_texture_displacement.cpp @@ -2174,3 +2174,318 @@ TEST_CASE("whether a layer's texture has colour agrees with its decode", "[Textu CHECK_FALSE(height_texture_has_color(TextureDisplacementLayer{})); } + +// --------------------------------------------------------------------------------------------- +// UV orientation: which way up a texture lands on the model. +// +// v = 0 is the height map's *first* pixel row, i.e. its top (DecodedHeightTexture::sample(), and +// the UV editor negates Y on screen for the same reason). So "the image is the right way up" is the +// statement that the row a point samples gets *lower* as the point moves up the face, and "it is +// not left-right mirrored" is that the column gets higher as the point moves to the right of a +// viewer standing outside the model. Both are measured below by sampling a ramp whose value says +// which row (or column) it came from, which settles the question without having to reason about the +// uv transform at all. + +static constexpr int RAMP_N = 64; // the ramp texture's size, in texels +static constexpr float RAMP_TILING = 40.f; // mm per tile +static constexpr float CUBE_HALF = 5.f; // half extent of the cube the probes walk over +// How far a probe steps off a face centre. Short on purpose: the cylindrical and spherical u is an +// arc length (angle * radius), so a long step also changes the radius, and that term swamps the +// angular one. It is symmetric about the face centre, so at a short step it cancels between the two +// readings a check compares. +static constexpr float RAMP_STEP = 1.f; +// What one step's worth of travel is in ramp rows: 2 * RAMP_STEP mm of separation, RAMP_N texels per +// RAMP_TILING mm. Halved as the margin a check demands, so "flat" cannot pass as either direction. +static constexpr double RAMP_MARGIN = RAMP_N * RAMP_STEP / RAMP_TILING; + +// A height map whose rows (or columns) carry a linear ramp: row r holds 3 + 4r, so the sampled +// height identifies the row. Built directly rather than through a PNG because these tests are about +// the projection, not the decoder - decode_height_texture() has its own tests. +static DecodedHeightTexture ramp_texture(bool by_row) +{ + DecodedHeightTexture t; + t.width = t.height = RAMP_N; + t.pixels.resize(size_t(RAMP_N) * size_t(RAMP_N)); + for (int y = 0; y < RAMP_N; ++y) + for (int x = 0; x < RAMP_N; ++x) + t.pixels[size_t(y) * size_t(RAMP_N) + size_t(x)] = uint8_t(3 + 4 * (by_row ? y : x)); + return t; +} + +// uv 0.5 at the cube's centre, and a tile wide enough that every point the probes visit stays well +// inside the one tile - so no reading is a wrapped-around neighbour of the one it is compared with. +static TextureDisplacementLayer ramp_layer(TextureProjectionMethod method) +{ + TextureDisplacementLayer layer; + layer.projection_method = method; + layer.tiling_scale = RAMP_TILING; + layer.offset = Vec2f(0.5f, 0.5f); + layer.depth_mm = 1.f; + return layer; +} + +// Which row (or column) of `ramp` the layer reads at `p`. Fractional, because a point between two +// texels reads the ramp between them; only the direction it moves in matters here. +static double ramp_index(const DecodedHeightTexture &ramp, const TextureDisplacementLayer &layer, const Vec3f &p, + const Vec3f &n, const Vec3f ¢er = Vec3f(Vec3f::Zero()), + const Vec3f &axis = Vec3f(Vec3f::UnitZ())) +{ + return (double(sample_layer_height(ramp, layer, p, n, center, axis, nullptr)) * 255.0 - 3.0) / 4.0; +} + +// How a viewer standing outside the model sees a face: their right, and their up. Up is world +Z on +// the four upright faces; on the top and bottom, where +Z is edge on, it is world +Y. +static void outside_viewer_frame(const Vec3f &n, Vec3f &right, Vec3f &up) +{ + up = (std::abs(n.z()) < 0.9f) ? Vec3f(0.f, 0.f, 1.f) : Vec3f(0.f, 1.f, 0.f); + right = Vec3f((-n).cross(up).normalized()); +} + +static const std::array, 6> CUBE_FACES = { { + { "+X", Vec3f(1.f, 0.f, 0.f) }, + { "-X", Vec3f(-1.f, 0.f, 0.f) }, + { "+Y", Vec3f(0.f, 1.f, 0.f) }, + { "-Y", Vec3f(0.f, -1.f, 0.f) }, + { "+Z", Vec3f(0.f, 0.f, 1.f) }, + { "-Z", Vec3f(0.f, 0.f, -1.f) }, +} }; + +TEST_CASE("the box projection lands a texture upright and unmirrored on all six faces of a cube", + "[TextureDisplacement]") +{ + const DecodedHeightTexture rows = ramp_texture(true); + const DecodedHeightTexture cols = ramp_texture(false); + const TextureDisplacementLayer layer = ramp_layer(TextureProjectionMethod::Triplanar); + + for (const auto &[name, n] : CUBE_FACES) { + DYNAMIC_SECTION("face " << name) + { + Vec3f right, up; + outside_viewer_frame(n, right, up); + const Vec3f centre = n * CUBE_HALF; + + // Upright: the row read near the top of the face is nearer the image's first row. + const double row_up = ramp_index(rows, layer, centre + up * RAMP_STEP, n); + const double row_down = ramp_index(rows, layer, centre - up * RAMP_STEP, n); + INFO("row at the top of the face " << row_up << ", at the bottom " << row_down); + CHECK(row_down - row_up > RAMP_MARGIN); + + // Unmirrored: the column read to the viewer's right is further into the image. Without a + // per-side sign this fails on exactly the three faces facing away - -X, +Y and -Z - which + // is the mirroring a bare v flip leaves behind. + const double col_left = ramp_index(cols, layer, centre - right * RAMP_STEP, n); + const double col_right = ramp_index(cols, layer, centre + right * RAMP_STEP, n); + INFO("column at the left of the face " << col_left << ", at the right " << col_right); + CHECK(col_right - col_left > RAMP_MARGIN); + } + } +} + +TEST_CASE("every projection method lands a texture upright on an upright face", "[TextureDisplacement]") +{ + const DecodedHeightTexture rows = ramp_texture(true); + // ViewProjected is one flat projection from the captured camera rather than a per-face map, so its + // "up" is the projector's own (view_project_up), which the default capture puts at +Y. + const auto method = GENERATE(TextureProjectionMethod::Triplanar, TextureProjectionMethod::Cylindrical, + TextureProjectionMethod::Spherical, TextureProjectionMethod::ViewProjected); + const TextureDisplacementLayer layer = ramp_layer(method); + + for (const auto &[name, n] : CUBE_FACES) { + // Only the four upright faces: on the top and bottom a cylinder's v is constant (they are its + // caps) and a sphere's is at an extremum (they are its poles), so neither says anything about + // which way up the image is. + if (std::abs(n.z()) > 0.9f) + continue; + DYNAMIC_SECTION("method " << int(method) << ", face " << name) + { + const Vec3f up = (method == TextureProjectionMethod::ViewProjected) ? layer.view_project_up : + Vec3f(0.f, 0.f, 1.f); + const Vec3f centre = n * CUBE_HALF; + const double row_up = ramp_index(rows, layer, centre + up * RAMP_STEP, n); + const double row_down = ramp_index(rows, layer, centre - up * RAMP_STEP, n); + INFO("row at the top " << row_up << ", at the bottom " << row_down); + CHECK(row_down - row_up > RAMP_MARGIN); + } + } +} + +TEST_CASE("the cylindrical and spherical wraps run left to right as seen from outside", "[TextureDisplacement]") +{ + const DecodedHeightTexture cols = ramp_texture(false); + const auto method = GENERATE(TextureProjectionMethod::Cylindrical, TextureProjectionMethod::Spherical); + const TextureDisplacementLayer layer = ramp_layer(method); + + for (const auto &[name, n] : CUBE_FACES) { + // The caps and poles are out, as above - u is undefined on the axis. So is whichever face the + // atan2 branch cut runs through, where u jumps from +pi to -pi: that is a real seam in both + // projections, and a reading taken across it compares two opposite sides of the model. + if (std::abs(n.z()) > 0.9f) + continue; + const bool on_the_cut = (method == TextureProjectionMethod::Cylindrical) ? (n.y() < -0.9f) : (n.x() < -0.9f); + if (on_the_cut) + continue; + DYNAMIC_SECTION("method " << int(method) << ", face " << name) + { + Vec3f right, up; + outside_viewer_frame(n, right, up); + const Vec3f centre = n * CUBE_HALF; + const double col_left = ramp_index(cols, layer, centre - right * RAMP_STEP, n); + const double col_right = ramp_index(cols, layer, centre + right * RAMP_STEP, n); + INFO("column at the left " << col_left << ", at the right " << col_right); + CHECK(col_right - col_left > RAMP_MARGIN); + } + } +} + +TEST_CASE("an unwrapped cube's flat charts are laid out the right way up", "[TextureDisplacement]") +{ + indexed_triangle_set cube = its_make_cube(2. * CUBE_HALF, 2. * CUBE_HALF, 2. * CUBE_HALF); + for (Vec3f &v : cube.vertices) + v -= Vec3f(CUBE_HALF, CUBE_HALF, CUBE_HALF); + + const PatchUnwrap unwrap = compute_patch_unwrap(cube, LSCM_DEFAULT_SEAM_ANGLE_DEG); + REQUIRE_FALSE(unwrap.empty()); + REQUIRE(unwrap.chart_count == 6); // one flat chart per face, cut at the 90-degree edges + + // Each chart carries one face. The four upright ones span world Z, and their v has to grow + // downwards like every other projection's - whatever the packing then did with the island. + int upright_charts = 0; + for (int c = 0; c < unwrap.chart_count; ++c) { + int top = -1, bottom = -1; + for (size_t i = 0; i < unwrap.uvs.size(); ++i) { + if (unwrap.vertex_chart[i] != c) + continue; + const float z = cube.vertices[size_t(unwrap.source_vertex[i])].z(); + if (top < 0 || z > cube.vertices[size_t(unwrap.source_vertex[size_t(top)])].z()) + top = int(i); + if (bottom < 0 || z < cube.vertices[size_t(unwrap.source_vertex[size_t(bottom)])].z()) + bottom = int(i); + } + REQUIRE(top >= 0); + REQUIRE(bottom >= 0); + const float v_top = unwrap.uvs[size_t(top)].y(), v_bottom = unwrap.uvs[size_t(bottom)].y(); + if (std::abs(v_top - v_bottom) < 1e-3f) + continue; // a cap: the whole chart is at one height, so it has no up + ++upright_charts; + DYNAMIC_SECTION("chart " << c) + { + INFO("v at the chart's topmost vertex " << v_top << ", at its bottommost " << v_bottom); + CHECK(v_bottom - v_top > 1.f); + } + } + CHECK(upright_charts == 4); // the four sides; the top and bottom faces are the caps skipped above +} + +TEST_CASE("project_planar agrees with the box projection's own axes", "[TextureDisplacement]") +{ + // The two express the same table in different shapes - one a pair of world axes for the GUI, the + // other the closed form the bake's hot path uses - so they are checked against each other here + // rather than left to drift apart. + const Vec3f p(2.f, -3.f, 7.f); + for (const auto &[name, n] : CUBE_FACES) { + DYNAMIC_SECTION("face " << name) + { + Vec3f u_axis, v_axis; + box_projection_axes(n, u_axis, v_axis); + const Vec2f planar = project_planar(p, n); + CHECK_THAT(planar.x(), WithinAbs(p.dot(u_axis), 1e-5f)); + CHECK_THAT(planar.y(), WithinAbs(p.dot(v_axis), 1e-5f)); + // Right-handed for a viewer outside the model: u to their right, v down, so u x v points + // into the surface. Getting this wrong is exactly what mirrors a face. + CHECK_THAT(u_axis.cross(v_axis).dot(n), WithinAbs(-1.f, 1e-5f)); + } + } +} + +// An image with a different value in each quadrant, so one bake says both which way up it landed +// and whether it came out mirrored. Distinct enough that a wrong quadrant cannot be mistaken for the +// right one: top-left 255, top-right 170, bottom-left 85, bottom-right 0. +static std::shared_ptr> make_quadrant_marker_png(size_t w = 32, size_t h = 32) +{ + std::vector pixels(w * h); + for (size_t y = 0; y < h; ++y) + for (size_t x = 0; x < w; ++x) + pixels[y * w + x] = (y < h / 2) ? ((x < w / 2) ? 255 : 170) : ((x < w / 2) ? 85 : 0); + const boost::filesystem::path tmp_path = boost::filesystem::temp_directory_path() + / boost::filesystem::unique_path("texdisp_test_%%%%%%%%.png"); + REQUIRE(Slic3r::png::write_gray_to_file(tmp_path.string(), w, h, pixels)); + + std::vector bytes; + { + std::ifstream ifs(tmp_path.string(), std::ios::binary); + bytes.assign(std::istreambuf_iterator(ifs), std::istreambuf_iterator()); + } + boost::system::error_code ec; + boost::filesystem::remove(tmp_path, ec); + + REQUIRE_FALSE(bytes.empty()); + return std::make_shared>(std::move(bytes)); +} + +TEST_CASE("baking an asymmetric image puts the top of the image at the top of the model", "[TextureDisplacement]") +{ + // An upright wall in the plane y = 0, facing -Y, tessellated so that each of the image's four + // quadrants gets a vertex at its centre. A flat sheet rather than a cube because every vertex + // normal is then exactly the face normal, which is what makes the expected depth below an exact + // number instead of a tri-planar blend of three of them. + constexpr int STEPS = 4; // cells per side, so 5x5 vertices + constexpr float SPAN = 20.f; // mm, the wall's width and height + indexed_triangle_set wall; + for (int j = 0; j <= STEPS; ++j) + for (int i = 0; i <= STEPS; ++i) + wall.vertices.emplace_back(-SPAN / 2.f + SPAN * float(i) / float(STEPS), 0.f, + SPAN * float(j) / float(STEPS)); + const auto at = [](int i, int j) { return j * (STEPS + 1) + i; }; + for (int j = 0; j < STEPS; ++j) + for (int i = 0; i < STEPS; ++i) { + // Wound so that (+x) x (+z) = -y: the wall faces -Y, away from the origin. + wall.indices.emplace_back(at(i, j), at(i + 1, j), at(i + 1, j + 1)); + wall.indices.emplace_back(at(i, j), at(i + 1, j + 1), at(i, j + 1)); + } + + TextureDisplacementFacetsData facets{}; + facets[0] = paint_whole_mesh(wall); + + TextureDisplacementLayer layer; + layer.slot = 0; + layer.projection_method = TextureProjectionMethod::Triplanar; + layer.image_data = make_quadrant_marker_png(); + layer.depth_mm = 2.f; + // The wall is 20 mm across and one tile is 40 mm, so it covers the middle half of the image in + // both axes: the quadrant boundaries land on x = 0 and z = 10, and the probed vertices sit a + // whole number of texels away from both. + layer.tiling_scale = 40.f; + layer.offset = Vec2f(0.5f, 0.75f); + // A single decal rather than a repeat, so that getting the orientation wrong cannot be masked by + // the wrap bringing the flipped coordinate back into the image at a plausible-looking row. With + // tiling off, uv stays inside [0.25, 0.75] in both axes only while v runs the right way. + layer.tile_enabled = false; + + const indexed_triangle_set result = build_texture_displacement(wall, { layer }, facets, classic_options()); + REQUIRE(result.vertices.size() == wall.vertices.size()); + + // Seen from outside this face the viewer's right is +X and their up is +Z, so the image's + // top-left quadrant has to land at low x and high z. Each entry: the vertex, and the image value + // whose quadrant it must have read. + const std::array, 4> expected = { { + { "top-left (255)", 1, 3, 255 }, + { "top-right (170)", 3, 3, 170 }, + { "bottom-left (85)", 1, 1, 85 }, + { "bottom-right (0)", 3, 1, 0 }, + } }; + + for (const auto &[name, i, j, value] : expected) { + DYNAMIC_SECTION("quadrant " << name) + { + const size_t vi = size_t(at(i, j)); + // The whole displacement is along -Y, so this is the relief's height at that vertex. + const float raised = wall.vertices[vi].y() - result.vertices[vi].y(); + INFO("vertex at " << wall.vertices[vi].x() << ", " << wall.vertices[vi].z()); + CHECK_THAT(raised, WithinAbs(layer.depth_mm * float(value) / 255.f, 1e-3f)); + // Nothing moved sideways or vertically: a mirrored or rotated basis would still have + // displaced along the normal, so this is here to catch the relief leaning instead. + CHECK_THAT(result.vertices[vi].x(), WithinAbs(wall.vertices[vi].x(), 1e-4f)); + CHECK_THAT(result.vertices[vi].z(), WithinAbs(wall.vertices[vi].z(), 1e-4f)); + } + } +} From 3f78959a0c2028922b1452e3bd4a9128046725aa Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 12 Oct 2026 17:47:04 +0800 Subject: [PATCH 008/137] Harden loading and saving of texture displacement in projects A project no longer reads texture files from outside its archive, and a malformed value or layer slot drops only the texture layers instead of failing the whole load. Copies of an object that share a mesh keep their own texture paint when saved, and projects without texture paint no longer use extra memory to load. --- src/libslic3r/Format/bbs_3mf.cpp | 62 +++--- src/libslic3r/TextureDisplacement.cpp | 131 ++++++------ src/libslic3r/TextureDisplacement.hpp | 5 +- tests/libslic3r/test_3mf.cpp | 191 ++++++++++++++++-- tests/libslic3r/test_texture_displacement.cpp | 29 +++ 5 files changed, 311 insertions(+), 107 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 62fe3c91e4..24c2c027e5 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -64,7 +64,6 @@ #include #include #include -#include #include #include #include @@ -856,7 +855,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::vector custom_seam; std::vector mmu_segmentation; std::vector fuzzy_skin; - // One per texture displacement layer slot, each parallel to `triangles` like the masks above. + // One per texture displacement layer slot, indexed like `triangles` but stored only as far as the + // slot's last painted triangle: empty when the slot has no paint, which is nearly every file. std::vector texture_displacement[TEXTURE_DISPLACEMENT_MAX_LAYERS]; // BBS std::vector face_properties; @@ -3355,34 +3355,20 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) add_error("Malformed texture displacement data: " + json_path); return; } - // A layer the archive carries no image for - saved while its texture had not been loaded, or - // written by a build that stored only the path - falls back to the file it came from. The - // importer copies every texture into the user's own library, so that path resolves on the - // machine the project was made on and quietly resolves nowhere else, which is the old - // behaviour: settings restored, pixels not. - const auto load_image_from_disk = [](TextureDisplacementLayer &layer) { - boost::system::error_code ec; - if (layer.path.empty() || !boost::filesystem::is_regular_file(layer.path, ec) || ec) - return; - boost::nowide::ifstream file(layer.path, std::ios::binary); - if (!file.good()) - return; - std::vector bytes((std::istreambuf_iterator(file)), std::istreambuf_iterator()); - if (!bytes.empty()) - layer.image_data = std::make_shared>(std::move(bytes)); - }; - + // The archive is the only source of a layer's pixels. `path` comes from the project file, so loading + // the project must never read the file it names: that would let whoever made the project pick any + // local (or, on Windows, network) file to read, and the next save would embed it in the archive. + // `path` stays a label of where the texture came from; a layer the archive carries no image for + // loads without one, its settings intact, until the user picks a texture again. for (TextureDisplacementLayer &layer : layers) { - if (!layer.path_in_3mf.empty()) { - if (const auto image = m_texture_displacement_files.find(layer.path_in_3mf); - image != m_texture_displacement_files.end()) { - layer.image_data = std::make_shared>(image->second.begin(), - image->second.end()); - continue; - } + if (layer.path_in_3mf.empty()) + continue; + const auto image = m_texture_displacement_files.find(layer.path_in_3mf); + if (image == m_texture_displacement_files.end()) { add_error("Missing texture displacement image: " + layer.path_in_3mf); + continue; } - load_image_from_disk(layer); + layer.image_data = std::make_shared>(image->second.begin(), image->second.end()); } volume.texture_displacement_layers = std::move(layers); volume.texture_displacement_options = options; @@ -4045,8 +4031,11 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_curr_object->geometry.mmu_segmentation.push_back(bbs_get_attribute_value_string(attributes, num_attributes, MMU_SEGMENTATION_ATTR)); m_curr_object->geometry.fuzzy_skin.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_FUZZY_SKIN_ATTR)); for (int slot = 0; slot < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++slot) - m_curr_object->geometry.texture_displacement[slot].push_back( - bbs_get_attribute_value_string(attributes, num_attributes, TEXTURE_DISPLACEMENT_ATTRS[slot])); + if (const char *paint = bbs_get_attribute_value_charptr(attributes, num_attributes, TEXTURE_DISPLACEMENT_ATTRS[slot])) { + std::vector &mask = m_curr_object->geometry.texture_displacement[slot]; + mask.resize(m_curr_object->geometry.triangles.size()); + mask.back() = paint; + } // BBS m_curr_object->geometry.face_properties.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FACE_PROPERTY_ATTR)); } @@ -5401,7 +5390,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) for (int slot = 0; slot < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++slot) { const std::vector &mask = sub_object->geometry.texture_displacement[slot]; if (mask.empty()) - continue; // written by a build without the feature + continue; // no triangle painted on this slot FacetsAnnotation &facets = volume->texture_displacement_facet(slot); facets.reserve(triangles_count); for (size_t i = 0; i < triangles_count && i < mask.size(); ++i) @@ -5917,8 +5906,11 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) current_object->geometry.mmu_segmentation.push_back(bbs_get_attribute_value_string(attributes, num_attributes, MMU_SEGMENTATION_ATTR)); current_object->geometry.fuzzy_skin.push_back(bbs_get_attribute_value_string(attributes, num_attributes, CUSTOM_FUZZY_SKIN_ATTR)); for (int slot = 0; slot < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++slot) - current_object->geometry.texture_displacement[slot].push_back( - bbs_get_attribute_value_string(attributes, num_attributes, TEXTURE_DISPLACEMENT_ATTRS[slot])); + if (const char *paint = bbs_get_attribute_value_charptr(attributes, num_attributes, TEXTURE_DISPLACEMENT_ATTRS[slot])) { + std::vector &mask = current_object->geometry.texture_displacement[slot]; + mask.resize(current_object->geometry.triangles.size()); + mask.back() = paint; + } // BBS current_object->geometry.face_properties.push_back(bbs_get_attribute_value_string(attributes, num_attributes, FACE_PROPERTY_ATTR)); } @@ -7349,10 +7341,14 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (iter != m_shared_meshes.end()) { const ModelVolume* shared_volume = iter->second.second; + bool same_texture_paint = true; + for (int slot = 0; slot < int(TEXTURE_DISPLACEMENT_MAX_LAYERS) && same_texture_paint; ++slot) + same_texture_paint = shared_volume->texture_displacement_facet(slot).equals(volume->texture_displacement_facet(slot)); if ((shared_volume->supported_facets.equals(volume->supported_facets)) && (shared_volume->seam_facets.equals(volume->seam_facets)) && (shared_volume->mmu_segmentation_facets.equals(volume->mmu_segmentation_facets)) - && (shared_volume->fuzzy_skin_facets.equals(volume->fuzzy_skin_facets))) + && (shared_volume->fuzzy_skin_facets.equals(volume->fuzzy_skin_facets)) + && same_texture_paint) { auto data = iter->second.first; const_cast<_BBS_3MF_Exporter *>(this)->m_volume_paths.insert({volume, {data->sub_path, data->volumes_objectID.find(iter->second.second)->second}}); diff --git a/src/libslic3r/TextureDisplacement.cpp b/src/libslic3r/TextureDisplacement.cpp index 80aa313f9b..4e99f97a5a 100644 --- a/src/libslic3r/TextureDisplacement.cpp +++ b/src/libslic3r/TextureDisplacement.cpp @@ -5334,77 +5334,88 @@ bool texture_displacement_layers_from_json(const std::string } std::vector out_layers; - if (const auto it = root.find("layers"); it != root.end() && it->is_array()) { - for (const nlohmann::json &j : *it) { - if (!j.is_object()) - continue; - TextureDisplacementLayer l; - read(j, "slot", l.slot); - read(j, "name", l.name); - read(j, "path", l.path); - read(j, "path_in_3mf", l.path_in_3mf); + // read() skips a value of the wrong type, but the vector, matrix, seam, island and UV-override arrays + // below read their numbers with get<>(), which throws on one; that rejects the document, like text that + // does not parse. + try { + if (const auto it = root.find("layers"); it != root.end() && it->is_array()) { + for (const nlohmann::json &j : *it) { + if (!j.is_object()) + continue; + TextureDisplacementLayer l; + read(j, "slot", l.slot); + // The panel and the paint masks are indexed by slot, so a layer without a valid one rejects the + // document rather than reaching them. + if (l.slot < 0 || l.slot >= int(TEXTURE_DISPLACEMENT_MAX_LAYERS)) + return false; + read(j, "name", l.name); + read(j, "path", l.path); + read(j, "path_in_3mf", l.path_in_3mf); - read(j, "depth_mm", l.depth_mm); - read(j, "tiling_scale", l.tiling_scale); - read(j, "rotation_deg", l.rotation_deg); - if (const auto o = j.find("offset"); o != j.end()) - l.offset = vec2_from_json(*o, l.offset); - read(j, "invert", l.invert); - read(j, "midlevel", l.midlevel); - read(j, "smoothing", l.smoothing); + read(j, "depth_mm", l.depth_mm); + read(j, "tiling_scale", l.tiling_scale); + read(j, "rotation_deg", l.rotation_deg); + if (const auto o = j.find("offset"); o != j.end()) + l.offset = vec2_from_json(*o, l.offset); + read(j, "invert", l.invert); + read(j, "midlevel", l.midlevel); + read(j, "smoothing", l.smoothing); - read(j, "edge_smoothing", l.edge_smoothing); - read(j, "edge_smoothing_amount", l.edge_smoothing_amount); - read(j, "auto_connect_islands", l.auto_connect_islands); + read(j, "edge_smoothing", l.edge_smoothing); + read(j, "edge_smoothing_amount", l.edge_smoothing_amount); + read(j, "auto_connect_islands", l.auto_connect_islands); - read(j, "tile_enabled", l.tile_enabled); - read(j, "color_enabled", l.color_enabled); - int tile_method = int(l.tile_method), projection = int(l.projection_method), blend = int(l.blend_mode); - read_enum(j, "tile_method", tile_method); - read_enum(j, "projection_method", projection); - read_enum(j, "blend_mode", blend); - l.tile_method = TextureTileMethod(tile_method); - l.projection_method = TextureProjectionMethod(std::clamp(projection, 0, 4)); - l.blend_mode = TextureBlendMode(blend); + read(j, "tile_enabled", l.tile_enabled); + read(j, "color_enabled", l.color_enabled); + int tile_method = int(l.tile_method), projection = int(l.projection_method), blend = int(l.blend_mode); + read_enum(j, "tile_method", tile_method); + read_enum(j, "projection_method", projection); + read_enum(j, "blend_mode", blend); + l.tile_method = TextureTileMethod(tile_method); + l.projection_method = TextureProjectionMethod(std::clamp(projection, 0, 4)); + l.blend_mode = TextureBlendMode(blend); - read(j, "lscm_seam_angle_deg", l.lscm_seam_angle_deg); - read(j, "island_padding_mm", l.island_padding_mm); + read(j, "lscm_seam_angle_deg", l.lscm_seam_angle_deg); + read(j, "island_padding_mm", l.island_padding_mm); - if (const auto v = j.find("view_project_right"); v != j.end()) - l.view_project_right = vec3_from_json(*v, l.view_project_right); - if (const auto v = j.find("view_project_up"); v != j.end()) - l.view_project_up = vec3_from_json(*v, l.view_project_up); - read(j, "view_project_projective", l.view_project_projective); - if (const auto v = j.find("view_project_matrix"); v != j.end() && v->is_array() && v->size() == 12) - for (size_t i = 0; i < 12; ++i) - l.view_project_matrix[i] = (*v)[i].get(); + if (const auto v = j.find("view_project_right"); v != j.end()) + l.view_project_right = vec3_from_json(*v, l.view_project_right); + if (const auto v = j.find("view_project_up"); v != j.end()) + l.view_project_up = vec3_from_json(*v, l.view_project_up); + read(j, "view_project_projective", l.view_project_projective); + if (const auto v = j.find("view_project_matrix"); v != j.end() && v->is_array() && v->size() == 12) + for (size_t i = 0; i < 12; ++i) + l.view_project_matrix[i] = (*v)[i].get(); - if (const auto v = j.find("lscm_seam_edges"); v != j.end() && v->is_array()) - for (size_t i = 0; i + 1 < v->size(); i += 2) - l.lscm_seam_edges.emplace_back((*v)[i].get(), (*v)[i + 1].get()); + if (const auto v = j.find("lscm_seam_edges"); v != j.end() && v->is_array()) + for (size_t i = 0; i + 1 < v->size(); i += 2) + l.lscm_seam_edges.emplace_back((*v)[i].get(), (*v)[i + 1].get()); - if (const auto v = j.find("islands"); v != j.end() && v->is_array()) - for (const nlohmann::json &e : *v) { - if (!e.is_array() || e.size() != 4) - continue; - TextureIsland island; - island.offset = Vec2f(e[0].get(), e[1].get()); - island.rotation_deg = e[2].get(); - island.scale = e[3].get(); - l.islands.push_back(island); - } + if (const auto v = j.find("islands"); v != j.end() && v->is_array()) + for (const nlohmann::json &e : *v) { + if (!e.is_array() || e.size() != 4) + continue; + TextureIsland island; + island.offset = Vec2f(e[0].get(), e[1].get()); + island.rotation_deg = e[2].get(); + island.scale = e[3].get(); + l.islands.push_back(island); + } - read(j, "island_groups", l.island_groups); + read(j, "island_groups", l.island_groups); - if (const auto v = j.find("lscm_uv_overrides"); v != j.end() && v->is_array()) - for (const nlohmann::json &e : *v) { - if (!e.is_array() || e.size() != 3) - continue; - l.lscm_uv_overrides.emplace_back(e[0].get(), Vec2f(e[1].get(), e[2].get())); - } + if (const auto v = j.find("lscm_uv_overrides"); v != j.end() && v->is_array()) + for (const nlohmann::json &e : *v) { + if (!e.is_array() || e.size() != 3) + continue; + l.lscm_uv_overrides.emplace_back(e[0].get(), Vec2f(e[1].get(), e[2].get())); + } - out_layers.push_back(std::move(l)); + out_layers.push_back(std::move(l)); + } } + } catch (const nlohmann::json::exception &) { + return false; } layers = std::move(out_layers); diff --git a/src/libslic3r/TextureDisplacement.hpp b/src/libslic3r/TextureDisplacement.hpp index e86b0c714c..36f66cc9fb 100644 --- a/src/libslic3r/TextureDisplacement.hpp +++ b/src/libslic3r/TextureDisplacement.hpp @@ -424,7 +424,10 @@ struct TextureDisplacementOptions // responsible for writing it and for filling `image_data` back in on load. std::string texture_displacement_layers_to_json(const std::vector &layers, const TextureDisplacementOptions &options); -// Returns false and leaves both outputs untouched when the text is not valid JSON. +// Returns false and leaves both outputs untouched when the text is not a valid JSON object, a number in a +// layer's vector, matrix, seam, island or UV-override array has the wrong type, or a layer's slot is +// missing or outside [0, TEXTURE_DISPLACEMENT_MAX_LAYERS). Any other value of the wrong type or shape +// keeps its default. bool texture_displacement_layers_from_json(const std::string &text, std::vector &layers, TextureDisplacementOptions &options); diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index f5ac340c58..a59800fafe 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -28,6 +28,7 @@ #include #include "libslic3r/TriangleMesh.hpp" #include "libslic3r/TriangleSelector.hpp" +#include "libslic3r/TextureDisplacement.hpp" #include #include #include @@ -38,6 +39,7 @@ #include #include #include +#include #include #include @@ -349,6 +351,24 @@ static bool replace_in_3mf_entry(const std::string& path, const std::string& suf return replaced; } +// Stores `model` as a one-plate project. +static void store_project(Model& model, const std::string& path, SaveStrategy strategy) +{ + ScopedTemporaryDir backup_dir("orca_paint_src"); + model.set_backup_path(backup_dir.string()); + + DynamicPrintConfig cfg; + PlateData plate; + plate.plate_index = 0; + StoreParams sp; + sp.path = path.c_str(); + sp.model = &model; + sp.config = &cfg; + sp.strategy = strategy; + sp.plate_data_list.push_back(&plate); + REQUIRE(store_bbs_3mf(sp)); +} + // Stores a one-plate project holding a cube whose first two facets are painted Extruder2 and // Extruder3, which the exporter writes as paint_color="8" and paint_color="0C". static void store_painted_cube(const std::string& path) @@ -363,19 +383,7 @@ static void store_painted_cube(const std::string& path) selector.set_facet(1, EnforcerBlockerType::Extruder3); REQUIRE(volume->mmu_segmentation_facets.set(selector)); } - ScopedTemporaryDir backup_dir("orca_paint_src"); - model.set_backup_path(backup_dir.string()); - - DynamicPrintConfig cfg; - PlateData plate; - plate.plate_index = 0; - StoreParams sp; - sp.path = path.c_str(); - sp.model = &model; - sp.config = &cfg; - sp.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; - sp.plate_data_list.push_back(&plate); - REQUIRE(store_bbs_3mf(sp)); + store_project(model, path, SaveStrategy::Zip64 | SaveStrategy::Silence); } // Loads `path` through the BBS importer into `model`, releasing the plates it returns. The @@ -501,6 +509,163 @@ TEST_CASE("A project with malformed paint data loads without the damaged facet", REQUIRE(selector.num_facets(EnforcerBlockerType::Extruder3) == 1); } +// Paints `triangles` of `volume` on texture displacement layer slot `slot`. +static void paint_texture_slot(ModelVolume& volume, int slot, std::initializer_list triangles) +{ + TriangleSelector selector(volume.mesh()); + for (const int triangle : triangles) + selector.set_facet(triangle, EnforcerBlockerType::ENFORCER); + REQUIRE(volume.texture_displacement_facet(slot).set(selector)); +} + +// Every triangle's texture paint on every slot, in the form the exporter writes it, so two volumes +// compare equal only when the same triangles are painted on the same slots. +static std::vector texture_paint(const ModelVolume& volume) +{ + std::vector paint; + for (int slot = 0; slot < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++slot) + for (size_t i = 0; i < volume.mesh().its.indices.size(); ++i) + paint.push_back(volume.texture_displacement_facet(slot).get_triangle_as_string(int(i))); + return paint; +} + +// A cube with one texture displacement layer in slot 2 and texture paint on gapped triangles of two +// slots. The layer's image bytes need not decode: the archive stores them as they are. +static ModelVolume& add_texture_displaced_cube(Model& model) +{ + ModelObject* object = model.add_object(); + ModelVolume* volume = object->add_volume(make_cube(10., 10., 10.)); + object->add_instance(); + + TextureDisplacementLayer layer; + layer.slot = 2; + layer.name = "Bark"; + layer.depth_mm = 1.25f; + layer.image_data = std::make_shared>(std::vector{ 0x89, 'P', 'N', 'G', 1, 2, 3 }); + volume->texture_displacement_layers.push_back(layer); + volume->texture_displacement_options.active_slot = 2; + + paint_texture_slot(*volume, 2, { 3, 7 }); + paint_texture_slot(*volume, 5, { 10 }); + return *volume; +} + +TEST_CASE("Texture displacement layers, textures and paint survive a project round trip", "[3mf]") +{ + // A single model file, and one file per object (read by a separate importer). + const SaveStrategy strategy = GENERATE(SaveStrategy::Zip64 | SaveStrategy::Silence, + SaveStrategy::Zip64 | SaveStrategy::Silence | SaveStrategy::SplitModel); + INFO("save strategy " << int(strategy)); + + ScopedTemporaryFile temp(".3mf"); + Model source; + const ModelVolume& painted = add_texture_displaced_cube(source); + const std::vector paint = texture_paint(painted); + REQUIRE(std::count_if(paint.begin(), paint.end(), [](const std::string& s) { return !s.empty(); }) == 3); + store_project(source, temp.string(), strategy); + + ScopedTemporaryDir backup_dir("orca_texdisp_dst"); + Model model; + REQUIRE(load_project(temp.string(), model, backup_dir)); + REQUIRE(model.objects.size() == 1); + const ModelVolume& volume = *model.objects.front()->volumes.front(); + + REQUIRE(volume.texture_displacement_layers.size() == 1); + const TextureDisplacementLayer& layer = volume.texture_displacement_layers.front(); + CHECK(layer.slot == 2); + CHECK(layer.name == "Bark"); + CHECK_THAT(layer.depth_mm, Catch::Matchers::WithinAbs(1.25f, 1e-6f)); + REQUIRE(layer.image_data); + CHECK(*layer.image_data == *painted.texture_displacement_layers.front().image_data); + CHECK(volume.texture_displacement_options.active_slot == 2); + CHECK(texture_paint(volume) == paint); +} + +TEST_CASE("Volumes sharing a mesh keep their own texture displacement paint", "[3mf]") +{ + Model source; + ModelObject* first_object = source.add_object(); + ModelVolume* first = first_object->add_volume(make_cube(10., 10., 10.)); + first_object->add_instance(); + ModelVolume* second = source.add_object(*first_object)->volumes.front(); + REQUIRE(second->mesh_ptr() == first->mesh_ptr()); + paint_texture_slot(*first, 0, { 3 }); + paint_texture_slot(*second, 0, { 7 }); + + // What a project save from the app uses: one file per object, an identical mesh written once. + ScopedTemporaryFile temp(".3mf"); + store_project(source, temp.string(), + SaveStrategy::Zip64 | SaveStrategy::Silence | SaveStrategy::SplitModel | SaveStrategy::ShareMesh); + + ScopedTemporaryDir backup_dir("orca_texdisp_dst"); + Model model; + REQUIRE(load_project(temp.string(), model, backup_dir)); + REQUIRE(model.objects.size() == 2); + CHECK(texture_paint(*model.objects[0]->volumes.front()) == texture_paint(*first)); + CHECK(texture_paint(*model.objects[1]->volumes.front()) == texture_paint(*second)); +} + +TEST_CASE("A texture displacement layer never loads its image from outside the project", "[3mf]") +{ + // A file the layer names, on the machine opening the project, that the project did not carry. + ScopedTemporaryFile texture(".png"); + { + boost::nowide::ofstream file(texture.string(), std::ios::binary); + file << "not part of the project"; + } + REQUIRE(boost::filesystem::file_size(texture.path()) > 0); + + Model source; + ModelObject* object = source.add_object(); + ModelVolume* volume = object->add_volume(make_cube(10., 10., 10.)); + object->add_instance(); + TextureDisplacementLayer layer; + layer.slot = 0; + layer.name = "Elsewhere"; + layer.path = texture.string(); + layer.depth_mm = 0.75f; + volume->texture_displacement_layers.push_back(layer); + + ScopedTemporaryFile temp(".3mf"); + store_project(source, temp.string(), SaveStrategy::Zip64 | SaveStrategy::Silence); + + ScopedTemporaryDir backup_dir("orca_texdisp_dst"); + Model model; + REQUIRE(load_project(temp.string(), model, backup_dir)); + REQUIRE(model.objects.size() == 1); + const std::vector& layers = model.objects.front()->volumes.front()->texture_displacement_layers; + REQUIRE(layers.size() == 1); + CHECK(layers.front().name == "Elsewhere"); + CHECK_THAT(layers.front().depth_mm, Catch::Matchers::WithinAbs(0.75f, 1e-6f)); + CHECK_FALSE(layers.front().image_data); +} + +TEST_CASE("A project with a malformed texture displacement value still loads", "[3mf][Regression]") +{ + const auto [from, to] = GENERATE(table({ + { "\"islands\":[]", "\"islands\":[[null,0,0,1]]" }, // a number that is null + { "\"slot\":2", "\"slot\":8" }, // a slot past the last + })); + INFO(from << " -> " << to); + + ScopedTemporaryFile temp(".3mf"); + Model source; + const ModelVolume& painted = add_texture_displaced_cube(source); + store_project(source, temp.string(), SaveStrategy::Zip64 | SaveStrategy::Silence); + REQUIRE(replace_in_3mf_entry(temp.string(), ".json", from, to)); + + ScopedTemporaryDir backup_dir("orca_texdisp_dst"); + Model model; + bool loaded = false; + REQUIRE_NOTHROW(loaded = load_project(temp.string(), model, backup_dir)); + REQUIRE(loaded); + REQUIRE(model.objects.size() == 1); + const ModelVolume& volume = *model.objects.front()->volumes.front(); + // The layer stack is dropped as a whole; the paint, stored apart from it, still loads. + CHECK(volume.texture_displacement_layers.empty()); + CHECK(texture_paint(volume) == texture_paint(painted)); +} + // The recipe lives only in the BBS-native backend, because that is the only one that runs: // store_bbs_3mf is the sole exporter the app calls, and 3mf.cpp's load_3mf is reached only for // files fingerprinted as PrusaSlicer's, which never carry a recipe. This locks in both halves: diff --git a/tests/libslic3r/test_texture_displacement.cpp b/tests/libslic3r/test_texture_displacement.cpp index fefc38ac33..f71c839c42 100644 --- a/tests/libslic3r/test_texture_displacement.cpp +++ b/tests/libslic3r/test_texture_displacement.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include "libslic3r/AABBMesh.hpp" @@ -2300,6 +2301,34 @@ TEST_CASE("Texture displacement JSON keeps defaults for keys it does not carry", CHECK(!texture_displacement_layers_from_json("not json at all", unused_layers, unused_options)); } +TEST_CASE("Texture displacement JSON with a wrong-typed element or an out-of-range slot is rejected", "[TextureDisplacement]") +{ + const std::string layer = GENERATE(as{}, + R"({"slot":0,"offset":["x",0]})", + R"({"slot":0,"view_project_right":[null,0,0]})", + R"({"slot":0,"view_project_matrix":[0,0,0,0,0,0,0,0,0,0,0,"x"]})", + R"({"slot":0,"lscm_seam_edges":[1,null]})", + R"({"slot":0,"islands":[[0,0,"x",1]]})", + R"({"slot":0,"lscm_uv_overrides":[[null,0,0]]})", + R"({"slot":8})", + R"({"slot":-1})", + R"({"slot":"x"})", + R"({"name":"No slot"})"); + INFO(layer); + + std::vector layers(1); + layers.front().name = "Kept"; + TextureDisplacementOptions options; + options.color_mix_count = 7; + + bool parsed = true; + REQUIRE_NOTHROW(parsed = texture_displacement_layers_from_json(R"({"version":1,"layers":[)" + layer + "]}", layers, options)); + CHECK_FALSE(parsed); + REQUIRE(layers.size() == 1); + CHECK(layers.front().name == "Kept"); + CHECK(options.color_mix_count == 7); +} + TEST_CASE("whether a layer's texture has colour agrees with its decode", "[TextureDisplacement]") { TextureDisplacementLayer gray; From c55f9c22518a2ea5c25387f5a7fabbf08ce3f57d Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Mon, 12 Oct 2026 18:31:03 +0800 Subject: [PATCH 009/137] Add a /bot fix-tidy Command That Suggests clang-tidy's Missing Includes (#16398) * Add a /bot fix-tidy Command That Pushes clang-tidy's Missing Includes A maintainer comments /bot fix-tidy on a PR. A read-only job runs scripts/run_clang_tidy.sh --fix on the PR's merge commit and returns the patch; a second job, which never runs the PR's code, accepts it only when it adds nothing but #include lines to C++ files the PR already changes, then commits it on the PR head and pushes with CLANG_TIDY_BOT_TOKEN. * Post clang-tidy's Fix as Review Suggestions Instead of Pushing It A failed clang-tidy check now runs once more with --fix and uploads the patch as the clang-tidy-fix artifact; the check still fails. /bot fix-tidy downloads that patch for the PR's latest commit, checks it adds only includes to C++ files the PR changes, and posts one review: a one-click suggestion for each include on a line the PR's diff shows, and the whole patch with a git apply command. Nothing is pushed and no PR code runs in the bot, so the PR's author can run it too and no token is needed. * Make the clang-tidy Fix in Its Own PR-Scoped Workflow on Request clang_tidy.yml is back to main's version. clang_tidy_fix.yml runs on every PR push but skips its job on the first attempt; /bot fix-tidy re-runs it, so run_clang_tidy.sh --fix runs in the PR's own context with a read-only token and the PR's cache, never main's, and the PR's author can ask for it. When that re-run finishes, the bot posts the patch as review suggestions as before. When the clang-tidy step fails, the bot also comments asking the author to run the script or the command, edits that comment on later failures, and deletes it once the check passes. * Give the clang-tidy Bot Write Access to PRs It Answers * Tell /bot fix-tidy Users How to Start a Fix Run When There Is None to Re-Run --- .github/workflows/clang_tidy_fix.yml | 65 ++++ .github/workflows/pr-tidy-bot.yml | 476 +++++++++++++++++++++++++++ 2 files changed, 541 insertions(+) create mode 100644 .github/workflows/clang_tidy_fix.yml create mode 100644 .github/workflows/pr-tidy-bot.yml diff --git a/.github/workflows/clang_tidy_fix.yml b/.github/workflows/clang_tidy_fix.yml new file mode 100644 index 0000000000..6339e17570 --- /dev/null +++ b/.github/workflows/clang_tidy_fix.yml @@ -0,0 +1,65 @@ +name: clang-tidy fix + +# Makes the missing-include fix that /bot fix-tidy (pr-tidy-bot.yml) posts on a +# pull request: scripts/run_clang_tidy.sh --fix on the merge commit the +# clang-tidy check runs on, uploaded as the clang-tidy-fix artifact. +# +# Every push to a PR starts this workflow, and its job skips on that first +# attempt. The bot re-runs it on request. A re-run keeps the pull_request +# context, so the PR's code runs with a read-only token, no secrets and the +# PR's own cache, never main's, whoever asked for it. +on: + pull_request: + branches: + - main + - release/* + +permissions: + contents: read + +jobs: + fix: + if: github.run_attempt > 1 + # A hosted runner, so nothing the PR's code leaves behind outlives the job. + runs-on: ubuntu-24.04 + timeout-minutes: 60 + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + lfs: 'false' + # The PR merge commit plus its first parent, the base it is diffed against. + fetch-depth: 2 + persist-credentials: false + + # Parsing needs the dependency headers, not a build of this PR's deps/, so + # a PR that changes deps/ falls back to the newest cache main has. + - name: Restore cached deps + uses: actions/cache/restore@v6 + with: + path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep + key: linux-clang-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }} + restore-keys: linux-clang-cache-orcaslicer_deps-build- + fail-on-cache-miss: true + + - name: Apt-Install Dependencies + uses: ./.github/actions/apt-install-deps + + # The status says whether findings remain that --fix cannot fix. + - name: Fix the changed lines + run: | + mkdir -p "$RUNNER_TEMP/clang-tidy-fix" + status=0 + scripts/run_clang_tidy.sh --base HEAD^1 --yes --fix || status=$? + echo "$status" > "$RUNNER_TEMP/clang-tidy-fix/status" + git -c core.quotePath=false diff --no-color --no-ext-diff --src-prefix=a/ --dst-prefix=b/ \ + > "$RUNNER_TEMP/clang-tidy-fix/fix.patch" + + - name: Upload the fix + uses: actions/upload-artifact@v7 + with: + name: clang-tidy-fix + path: ${{ runner.temp }}/clang-tidy-fix/ + retention-days: 7 + # A later re-run of the same run replaces the earlier fix. + overwrite: true diff --git a/.github/workflows/pr-tidy-bot.yml b/.github/workflows/pr-tidy-bot.yml new file mode 100644 index 0000000000..62f4a0002f --- /dev/null +++ b/.github/workflows/pr-tidy-bot.yml @@ -0,0 +1,476 @@ +name: PR clang-tidy Bot + +# Helps a pull request past the clang-tidy check. +# +# When the check fails on a PR's changes, a comment asks the author to fix it, +# either with scripts/run_clang_tidy.sh --fix or by commenting: +# /bot fix-tidy +# +# That command, from the PR's author or an account with write access, re-runs +# the PR's clang-tidy fix run (clang_tidy_fix.yml), which makes the fix in the +# PR's own context. When it finishes, the fix is posted as one review: each +# include whose place falls on a line the PR's diff shows is a suggestion GitHub +# can commit in one click, and the review's body holds the whole patch with a +# git apply command. Findings --fix cannot fix, such as a using in a header, +# are left for the check to report. +# +# No code from the PR runs here. Nothing is pushed, and the patch is only +# posted when every line it adds is an #include in a C++ file the PR changes. +# +# workflow_run matches the workflows by their name: keep "clang-tidy" and +# "clang-tidy fix" in step with clang_tidy.yml and clang_tidy_fix.yml, and +# TIDY_STEP below with the clang-tidy step's name in clang_tidy.yml. + +on: + issue_comment: + types: + - created + workflow_run: + workflows: + - clang-tidy + - clang-tidy fix + types: + - completed + +permissions: {} + +jobs: + request: + # Skips the job unless a PR comment mentions the command. + if: >- + github.repository == 'OrcaSlicer/OrcaSlicer' + && github.event_name == 'issue_comment' + && github.event.issue.pull_request != null + && contains(github.event.comment.body, '/bot fix-tidy') + permissions: + actions: write # re-run the fix run + pull-requests: write # react to and answer the comment, which is the PR's + issues: write # feedback comment + reactions + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Re-run the PR's clang-tidy fix + uses: actions/github-script@v9 + with: + script: | + const MARKER = ''; + const FIX_WORKFLOW = 'clang_tidy_fix.yml'; + + const { owner, repo } = context.repo; + const issue = context.payload.issue; + const comment = context.payload.comment; + + // Ignores a comment whose sender is not its author. + if (context.payload.sender.login !== comment.user.login || comment.user.type !== 'User') { + core.info('Ignoring a comment not written by its sender, or by a bot.'); + return; + } + + const commandLine = (comment.body || '') + .split('\n') + .map((line) => line.trim()) + .find((line) => /^\/bot\s+fix-tidy\b/i.test(line)); + if (!commandLine) { + core.info('No /bot fix-tidy command found.'); + return; + } + + const commenter = comment.user.login; + // Answers only the PR's author and maintainers, so the command cannot be used to spam. + if (commenter !== issue.user.login) { + const { data: access } = await github.rest.repos.getCollaboratorPermissionLevel({ owner, repo, username: commenter }); + if (!['admin', 'write'].includes(access.permission)) { + core.info(`Ignoring /bot fix-tidy from @${commenter}: not the PR's author and no write access.`); + return; + } + } + + const react = (content) => + github.rest.reactions.createForIssueComment({ owner, repo, comment_id: comment.id, content }); + async function refuse(reason) { + await react('-1'); + await github.rest.issues.createComment({ owner, repo, issue_number: issue.number, body: `${MARKER}\n@${commenter} ${reason}` }); + } + + await react('eyes'); + + if (!/^\/bot\s+fix-tidy$/i.test(commandLine)) { + return refuse('`/bot fix-tidy` takes no arguments.'); + } + + const { data: pr } = await github.rest.pulls.get({ owner, repo, pull_number: issue.number }); + if (pr.state !== 'open') { + return refuse('the PR is not open.'); + } + + const sha = pr.head.sha.slice(0, 10); + const { data: { workflow_runs: runs } } = await github.rest.actions.listWorkflowRuns({ + owner, repo, workflow_id: FIX_WORKFLOW, event: 'pull_request', head_sha: pr.head.sha, per_page: 1 + }); + const run = runs[0]; + // A PR last pushed before clang_tidy_fix.yml existed has no run to re-run. + if (!run) { + return refuse(`there is no clang-tidy fix run for ${sha}, the PR's latest commit. If you just pushed it, ` + + 'try again in a minute. Otherwise, push a commit or merge the base branch to start one, then comment `/bot fix-tidy` again.'); + } + if (run.status !== 'completed') { + // The first attempt is the one every push starts, and it makes no fix. + return refuse(run.run_attempt > 1 + ? `a clang-tidy fix for ${sha} is already [running](${run.html_url}). I'll post it when it finishes.` + : `the PR's checks on ${sha} are still starting. Comment \`/bot fix-tidy\` again in a minute.`); + } + // GitHub refuses to re-run a run created over 30 days ago. + try { + await github.rest.actions.reRunWorkflow({ owner, repo, run_id: run.id }); + } catch (error) { + core.warning(`Re-running ${run.html_url} failed: ${error.message}`); + return refuse(`GitHub won't re-run the [clang-tidy fix run](${run.html_url}) for ${sha} (${error.message}). ` + + 'Push a commit or merge the base branch to start a new one, then comment `/bot fix-tidy` again.'); + } + core.info(`Re-ran ${run.html_url}`); + + suggest: + # The fix run's re-runs only. Its first attempt makes no fix. + if: >- + github.repository == 'OrcaSlicer/OrcaSlicer' + && github.event_name == 'workflow_run' + && github.event.workflow_run.name == 'clang-tidy fix' + && github.event.workflow_run.event == 'pull_request' + && github.event.workflow_run.run_attempt > 1 + concurrency: + group: ${{ github.workflow }}-suggest-${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }} + cancel-in-progress: false + permissions: + actions: read # download the fix + contents: read # check out the PR head + pull-requests: write # the review + issues: write # feedback comment + reactions + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Find the PR and who asked + id: find + uses: actions/github-script@v9 + with: + script: | + const MARKER = ''; + const CPP = /^(src|tests)\/.+\.(cpp|cc|cxx|hpp|h|hxx)$/; + + const { owner, repo } = context.repo; + const run = context.payload.workflow_run; + + // workflow_run lists no PR for a fork's branch, so the PR is found by its branch. + const { data: prs } = await github.rest.pulls.list({ + owner, repo, state: 'open', head: `${run.head_repository.owner.login}:${run.head_branch}` + }); + const pr = prs[0]; + if (!pr) { + core.info('No open PR for this run.'); + return; + } + + // The latest /bot fix-tidy comment is the one this run answers. + const comments = await github.paginate(github.rest.issues.listComments, { owner, repo, issue_number: pr.number, per_page: 100 }); + const request = comments.reverse().find((c) => c.user.type === 'User' && /^\s*\/bot\s+fix-tidy\s*$/im.test(c.body || '')); + const mention = request ? `@${request.user.login} ` : ''; + async function refuse(reason) { + if (request) { + await github.rest.reactions.createForIssueComment({ owner, repo, comment_id: request.id, content: '-1' }); + } + await github.rest.issues.createComment({ owner, repo, issue_number: pr.number, body: `${MARKER}\n${mention}${reason}` }); + } + + if (pr.head.sha !== run.head_sha) { + return refuse('the PR changed while I was making its clang-tidy fix. Comment `/bot fix-tidy` again.'); + } + if (run.conclusion !== 'success') { + return refuse(`I couldn't make the clang-tidy fix. See the [run log](${run.html_url}).`); + } + + // The right-side lines of each changed C++ file's diff: the lines a + // review comment can be placed on. A file too large for GitHub to + // show its diff has none, and gets no suggestions. + const files = await github.paginate(github.rest.pulls.listFiles, { owner, repo, pull_number: pr.number, per_page: 100 }); + const ranges = {}; + for (const file of files) { + if (file.status === 'removed' || !CPP.test(file.filename)) { + continue; + } + ranges[file.filename] = [...(file.patch || '').matchAll(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/gm)] + .map((m) => [Number(m[1]), Number(m[1]) + Number(m[2] ?? 1) - 1]) + .filter(([first, last]) => last >= first); + } + + core.setOutput('pr', pr.number); + core.setOutput('head-sha', pr.head.sha); + core.setOutput('head-repo', run.head_repository.full_name); + core.setOutput('ranges', JSON.stringify(ranges)); + core.setOutput('mention', mention); + core.setOutput('request-id', request ? request.id : ''); + + - name: Download the fix + if: steps.find.outputs.pr != '' + uses: actions/download-artifact@v8 + with: + name: clang-tidy-fix + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ github.token }} + path: ${{ runner.temp }}/clang-tidy-fix + + # The PR's own files, only to apply the patch to. Nothing in them is run. + - name: Checkout the PR head + if: steps.find.outputs.pr != '' + uses: actions/checkout@v7 + with: + repository: ${{ steps.find.outputs.head-repo }} + ref: ${{ steps.find.outputs.head-sha }} + path: head + fetch-depth: 1 + lfs: 'false' + persist-credentials: false + sparse-checkout: | + src + tests + + # The fix was made on the PR's merge commit, so it is applied to the head + # and diffed again, giving line numbers in the PR's own files. + - name: Check the fix and place its suggestions + id: place + if: steps.find.outputs.pr != '' + env: + RANGES: ${{ steps.find.outputs.ranges }} + run: | + python3 -I - "$RUNNER_TEMP/clang-tidy-fix/fix.patch" head "$RUNNER_TEMP" <<'EOF' + import json, os, re, subprocess, sys + + patch_path, head, out = sys.argv[1:] + ranges = json.loads(os.environ["RANGES"]) + + def output(**values): + with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as f: + for key, value in values.items(): + f.write(f"{key}={value}\n") + + patch = open(patch_path, encoding="utf-8").read() + if not patch.strip(): + output(result="empty") + sys.exit() + + # Every line the patch adds must be an #include or blank, in a C++ file the + # PR changes, and it may not remove, create, rename or change the mode of + # anything. + include = re.compile(r'\s*#\s*include\s*(<[\w./+-]+>|"[\w./+-]+")\s*') + header = re.compile(r"(index [0-9a-f]+\.\.[0-9a-f]+( \d+)?|@@ -\d+(,\d+)? \+\d+(,\d+)? @@.*)") + problems = [] + path = None + for line in patch.splitlines(): + if line.startswith("diff --git "): + match = re.fullmatch(r"diff --git a/(.+) b/\1", line) + path = match.group(1) if match else None + if path not in ranges: + problems.append(f"{line}: not a C++ file the PR changes") + # git appends a tab to the --- and +++ lines of a path that contains a space. + elif line.removesuffix("\t") in (f"--- a/{path}", f"+++ b/{path}") or header.fullmatch(line): + pass + elif line.startswith(" ") or line == "\\ No newline at end of file": + pass + elif line.startswith("+") and (include.fullmatch(line[1:]) or not line[1:].strip()): + pass + else: + problems.append(f"{path}: {line}") + if problems: + for problem in problems: + print(f"::error::Refused patch line {problem}") + output(result="rejected") + sys.exit() + + if subprocess.run(["git", "-C", head, "apply", "--index", os.path.abspath(patch_path)]).returncode != 0: + output(result="apply-failed") + sys.exit() + + git = ["git", "-C", head, "-c", "core.quotePath=false", "diff", "--cached", "--no-color", "--no-ext-diff", + "--src-prefix=a/", "--dst-prefix=b/"] + with open(os.path.join(out, "head.patch"), "w", encoding="utf-8") as f: + f.write(subprocess.run(git, check=True, capture_output=True, encoding="utf-8").stdout) + + # Each run of added lines becomes one suggestion on the line it goes after + # (before, at the top of a file): that line, replaced by itself and the + # includes. It can only sit on a line the PR's diff shows. + hunks = [] + path = None + for line in subprocess.run(git + ["-U0"], check=True, capture_output=True, encoding="utf-8").stdout.splitlines(): + if line.startswith("diff --git "): + path = re.fullmatch(r"diff --git a/(.+) b/\1", line).group(1) + elif line.startswith("@@ "): + hunks.append((path, int(re.match(r"@@ -(\d+)", line).group(1)), [])) + elif hunks and line.startswith("+") and not line.startswith("+++ "): + hunks[-1][2].append(line[1:]) + + suggestions = [] + total = suggested = 0 + for path, after, added in hunks: + count = sum(bool(include.fullmatch(line)) for line in added) + total += count + original = subprocess.run(["git", "-C", head, "show", f"HEAD:{path}"], check=True, capture_output=True, + encoding="utf-8").stdout.splitlines() + line = max(after, 1) + if line > len(original) or not any(first <= line <= last for first, last in ranges[path]): + continue + body = "\n".join([original[line - 1], *added] if after else [*added, original[0]]) + # A fence longer than any run of backticks in the line it repeats. + fence = "`" * max([3] + [len(run) + 1 for run in re.findall(r"`+", body)]) + suggestions.append({"path": path, "line": line, "side": "RIGHT", + "body": f"{fence}suggestion\n{body}\n{fence}"}) + suggested += count + with open(os.path.join(out, "suggestions.json"), "w", encoding="utf-8") as f: + json.dump(suggestions, f) + output(result="ok", includes=total, suggested=suggested) + EOF + + - name: Post the fix + if: always() && steps.find.outputs.pr != '' + uses: actions/github-script@v9 + env: + PR: ${{ steps.find.outputs.pr }} + MENTION: ${{ steps.find.outputs.mention }} + REQUEST_ID: ${{ steps.find.outputs.request-id }} + HEAD_SHA: ${{ steps.find.outputs.head-sha }} + RESULT: ${{ steps.place.outputs.result }} + INCLUDES: ${{ steps.place.outputs.includes }} + SUGGESTED: ${{ steps.place.outputs.suggested }} + with: + script: | + const fs = require('fs'); + const path = require('path'); + const MARKER = ''; + // GitHub's limit on a review body is 65536 characters. + const MAX_PATCH = 60000; + + const { owner, repo } = context.repo; + const { PR, MENTION, REQUEST_ID, HEAD_SHA, RESULT, INCLUDES, SUGGESTED, RUNNER_TEMP } = process.env; + const issue_number = Number(PR); + const sha = HEAD_SHA.slice(0, 10); + const fixUrl = context.payload.workflow_run.html_url; + const runUrl = `${context.serverUrl}/${owner}/${repo}/actions/runs/${context.runId}`; + + const react = (content) => REQUEST_ID + ? github.rest.reactions.createForIssueComment({ owner, repo, comment_id: Number(REQUEST_ID), content }) + : Promise.resolve(); + async function reply(body, content) { + await react(content); + await github.rest.issues.createComment({ owner, repo, issue_number, body: `${MARKER}\n${MENTION}${body}` }); + } + + const read = (...parts) => fs.readFileSync(path.join(RUNNER_TEMP, ...parts), 'utf8'); + const passes = RESULT && read('clang-tidy-fix', 'status').trim() === '0'; + + if (RESULT === 'empty') { + return passes + ? reply(`clang-tidy passes on ${sha}. There is nothing to fix.`, '+1') + : reply(`clang-tidy has no automatic fix for what it reports on ${sha}. The findings, in the [fix run's log](${fixUrl}), need a manual edit.`, '-1'); + } + if (RESULT === 'rejected') { + return reply(`the clang-tidy fix changes more than includes, so I didn't post it. See the [run log](${runUrl}).`, '-1'); + } + if (RESULT === 'apply-failed') { + return reply(`the clang-tidy fix doesn't apply to ${sha}. Merge the base branch into the PR, then comment \`/bot fix-tidy\` again.`, '-1'); + } + if (RESULT !== 'ok') { + return reply(`something went wrong. See the [run log](${runUrl}).`, '-1'); + } + + const patch = read('head.patch'); + const suggestions = JSON.parse(read('suggestions.json')); + + const one = INCLUDES === '1'; + const includes = one ? '1 missing include' : `${INCLUDES} missing includes`; + const inline = SUGGESTED === '0' + ? (one ? 'It goes on a line this PR does not change, so I can\'t suggest it inline.' + : 'They go on lines this PR does not change, so I can\'t suggest them inline.') + : SUGGESTED === INCLUDES + ? (one ? 'It is suggested inline below.' : 'Each is suggested inline below.') + : `${SUGGESTED} of them are suggested inline below; the rest go on lines this PR does not change.`; + const remaining = passes + ? `With ${one ? 'it' : 'them'}, clang-tidy passes.` + : `Some findings remain that need a manual edit; see the [fix run's log](${fixUrl}).`; + // A fence longer than any run of backticks in the patch's context lines. + const fence = '`'.repeat(Math.max(3, ...[...patch.matchAll(/`+/g)].map((m) => m[0].length + 1))); + const apply = patch.length > MAX_PATCH + ? `The full patch is too large to show here. Download \`fix.patch\` from the [fix run](${fixUrl}) and run \`git apply fix.patch\`.` + : `To apply ${one ? 'it' : 'all of them'}, run this in your checkout of the PR branch:\n\n${fence}sh\ngit apply <<'EOF'\n${patch}EOF\n${fence}`; + const body = (withSuggestions) => `${MARKER}\n${MENTION}clang-tidy's fix for ${sha} adds ${includes}. ` + + `${withSuggestions ? `${inline} ` : ''}${remaining}\n\n${apply}`; + + const review = { owner, repo, pull_number: issue_number, commit_id: HEAD_SHA, event: 'COMMENT' }; + try { + await github.rest.pulls.createReview({ ...review, body: body(true), comments: suggestions }); + } catch (error) { + // A suggestion GitHub will not place still leaves the patch. + core.warning(`Posting the suggestions failed (${error.message}); posting the patch alone.`); + await github.rest.pulls.createReview({ ...review, body: body(false) }); + } + await react('+1'); + + nudge: + if: >- + github.repository == 'OrcaSlicer/OrcaSlicer' + && github.event_name == 'workflow_run' + && github.event.workflow_run.name == 'clang-tidy' + && github.event.workflow_run.event == 'pull_request' + concurrency: + group: ${{ github.workflow }}-nudge-${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }} + cancel-in-progress: false + permissions: + actions: read # the check's steps + pull-requests: write # comment on the PR + issues: write # the comment + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Ask for a fix when the check fails + uses: actions/github-script@v9 + with: + script: | + const MARKER = ''; + // The clang-tidy step's name in clang_tidy.yml. A failure in any other + // step is the CI's, not the PR's. + const TIDY_STEP = 'Run clang-tidy on the changed lines'; + + const { owner, repo } = context.repo; + const run = context.payload.workflow_run; + + // workflow_run lists no PR for a fork's branch, so the PR is found by its branch. + const { data: prs } = await github.rest.pulls.list({ + owner, repo, state: 'open', head: `${run.head_repository.owner.login}:${run.head_branch}` + }); + const pr = prs.find((p) => p.head.sha === run.head_sha); + if (!pr) { + core.info('No open PR at this run\'s commit; a newer run will answer.'); + return; + } + + const { data: { jobs } } = await github.rest.actions.listJobsForWorkflowRun({ owner, repo, run_id: run.id }); + const failed = jobs.some((job) => (job.steps || []).some((step) => step.name === TIDY_STEP && step.conclusion === 'failure')); + + const comments = await github.paginate(github.rest.issues.listComments, { owner, repo, issue_number: pr.number, per_page: 100 }); + const previous = comments.find((c) => c.user.type === 'Bot' && (c.body || '').startsWith(MARKER)); + + if (!failed) { + // Removes the request once the check passes. + if (previous && run.conclusion === 'success') { + await github.rest.issues.deleteComment({ owner, repo, comment_id: previous.id }); + } + return; + } + + const body = `${MARKER}\n@${pr.user.login} the clang-tidy check found problems in this PR's changes ` + + `at ${run.head_sha.slice(0, 10)} ([log](${run.html_url})). Missing includes can be fixed either way:\n\n` + + '- run `scripts/run_clang_tidy.sh --fix` (`scripts\\run_clang_tidy.ps1 -Fix` on Windows) and push the result, or\n' + + '- comment `/bot fix-tidy`, and I\'ll suggest the fix here for you to apply.\n\n' + + 'Other findings, such as a `using` in a header, need a manual edit.'; + // Edits the earlier request instead of posting another, so each push does not notify again. + if (previous) { + await github.rest.issues.updateComment({ owner, repo, comment_id: previous.id, body }); + } else { + await github.rest.issues.createComment({ owner, repo, issue_number: pr.number, body }); + } From 0cec10748e4466acdff48a9bc8aa9c1ec944fbd1 Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Mon, 12 Oct 2026 18:47:26 +0800 Subject: [PATCH 010/137] Remove the /bot fix-tidy clang-tidy Fix Bot (#16400) Its inline suggestions rarely apply: clang-tidy adds a missing include to the include block at the top of the file, which a PR seldom touches, and GitHub only accepts review suggestions on lines in the PR's diff. --- .github/workflows/clang_tidy_fix.yml | 65 ---- .github/workflows/pr-tidy-bot.yml | 476 --------------------------- 2 files changed, 541 deletions(-) delete mode 100644 .github/workflows/clang_tidy_fix.yml delete mode 100644 .github/workflows/pr-tidy-bot.yml diff --git a/.github/workflows/clang_tidy_fix.yml b/.github/workflows/clang_tidy_fix.yml deleted file mode 100644 index 6339e17570..0000000000 --- a/.github/workflows/clang_tidy_fix.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: clang-tidy fix - -# Makes the missing-include fix that /bot fix-tidy (pr-tidy-bot.yml) posts on a -# pull request: scripts/run_clang_tidy.sh --fix on the merge commit the -# clang-tidy check runs on, uploaded as the clang-tidy-fix artifact. -# -# Every push to a PR starts this workflow, and its job skips on that first -# attempt. The bot re-runs it on request. A re-run keeps the pull_request -# context, so the PR's code runs with a read-only token, no secrets and the -# PR's own cache, never main's, whoever asked for it. -on: - pull_request: - branches: - - main - - release/* - -permissions: - contents: read - -jobs: - fix: - if: github.run_attempt > 1 - # A hosted runner, so nothing the PR's code leaves behind outlives the job. - runs-on: ubuntu-24.04 - timeout-minutes: 60 - steps: - - name: Checkout - uses: actions/checkout@v7 - with: - lfs: 'false' - # The PR merge commit plus its first parent, the base it is diffed against. - fetch-depth: 2 - persist-credentials: false - - # Parsing needs the dependency headers, not a build of this PR's deps/, so - # a PR that changes deps/ falls back to the newest cache main has. - - name: Restore cached deps - uses: actions/cache/restore@v6 - with: - path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep - key: linux-clang-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }} - restore-keys: linux-clang-cache-orcaslicer_deps-build- - fail-on-cache-miss: true - - - name: Apt-Install Dependencies - uses: ./.github/actions/apt-install-deps - - # The status says whether findings remain that --fix cannot fix. - - name: Fix the changed lines - run: | - mkdir -p "$RUNNER_TEMP/clang-tidy-fix" - status=0 - scripts/run_clang_tidy.sh --base HEAD^1 --yes --fix || status=$? - echo "$status" > "$RUNNER_TEMP/clang-tidy-fix/status" - git -c core.quotePath=false diff --no-color --no-ext-diff --src-prefix=a/ --dst-prefix=b/ \ - > "$RUNNER_TEMP/clang-tidy-fix/fix.patch" - - - name: Upload the fix - uses: actions/upload-artifact@v7 - with: - name: clang-tidy-fix - path: ${{ runner.temp }}/clang-tidy-fix/ - retention-days: 7 - # A later re-run of the same run replaces the earlier fix. - overwrite: true diff --git a/.github/workflows/pr-tidy-bot.yml b/.github/workflows/pr-tidy-bot.yml deleted file mode 100644 index 62f4a0002f..0000000000 --- a/.github/workflows/pr-tidy-bot.yml +++ /dev/null @@ -1,476 +0,0 @@ -name: PR clang-tidy Bot - -# Helps a pull request past the clang-tidy check. -# -# When the check fails on a PR's changes, a comment asks the author to fix it, -# either with scripts/run_clang_tidy.sh --fix or by commenting: -# /bot fix-tidy -# -# That command, from the PR's author or an account with write access, re-runs -# the PR's clang-tidy fix run (clang_tidy_fix.yml), which makes the fix in the -# PR's own context. When it finishes, the fix is posted as one review: each -# include whose place falls on a line the PR's diff shows is a suggestion GitHub -# can commit in one click, and the review's body holds the whole patch with a -# git apply command. Findings --fix cannot fix, such as a using in a header, -# are left for the check to report. -# -# No code from the PR runs here. Nothing is pushed, and the patch is only -# posted when every line it adds is an #include in a C++ file the PR changes. -# -# workflow_run matches the workflows by their name: keep "clang-tidy" and -# "clang-tidy fix" in step with clang_tidy.yml and clang_tidy_fix.yml, and -# TIDY_STEP below with the clang-tidy step's name in clang_tidy.yml. - -on: - issue_comment: - types: - - created - workflow_run: - workflows: - - clang-tidy - - clang-tidy fix - types: - - completed - -permissions: {} - -jobs: - request: - # Skips the job unless a PR comment mentions the command. - if: >- - github.repository == 'OrcaSlicer/OrcaSlicer' - && github.event_name == 'issue_comment' - && github.event.issue.pull_request != null - && contains(github.event.comment.body, '/bot fix-tidy') - permissions: - actions: write # re-run the fix run - pull-requests: write # react to and answer the comment, which is the PR's - issues: write # feedback comment + reactions - runs-on: ubuntu-latest - timeout-minutes: 5 - steps: - - name: Re-run the PR's clang-tidy fix - uses: actions/github-script@v9 - with: - script: | - const MARKER = ''; - const FIX_WORKFLOW = 'clang_tidy_fix.yml'; - - const { owner, repo } = context.repo; - const issue = context.payload.issue; - const comment = context.payload.comment; - - // Ignores a comment whose sender is not its author. - if (context.payload.sender.login !== comment.user.login || comment.user.type !== 'User') { - core.info('Ignoring a comment not written by its sender, or by a bot.'); - return; - } - - const commandLine = (comment.body || '') - .split('\n') - .map((line) => line.trim()) - .find((line) => /^\/bot\s+fix-tidy\b/i.test(line)); - if (!commandLine) { - core.info('No /bot fix-tidy command found.'); - return; - } - - const commenter = comment.user.login; - // Answers only the PR's author and maintainers, so the command cannot be used to spam. - if (commenter !== issue.user.login) { - const { data: access } = await github.rest.repos.getCollaboratorPermissionLevel({ owner, repo, username: commenter }); - if (!['admin', 'write'].includes(access.permission)) { - core.info(`Ignoring /bot fix-tidy from @${commenter}: not the PR's author and no write access.`); - return; - } - } - - const react = (content) => - github.rest.reactions.createForIssueComment({ owner, repo, comment_id: comment.id, content }); - async function refuse(reason) { - await react('-1'); - await github.rest.issues.createComment({ owner, repo, issue_number: issue.number, body: `${MARKER}\n@${commenter} ${reason}` }); - } - - await react('eyes'); - - if (!/^\/bot\s+fix-tidy$/i.test(commandLine)) { - return refuse('`/bot fix-tidy` takes no arguments.'); - } - - const { data: pr } = await github.rest.pulls.get({ owner, repo, pull_number: issue.number }); - if (pr.state !== 'open') { - return refuse('the PR is not open.'); - } - - const sha = pr.head.sha.slice(0, 10); - const { data: { workflow_runs: runs } } = await github.rest.actions.listWorkflowRuns({ - owner, repo, workflow_id: FIX_WORKFLOW, event: 'pull_request', head_sha: pr.head.sha, per_page: 1 - }); - const run = runs[0]; - // A PR last pushed before clang_tidy_fix.yml existed has no run to re-run. - if (!run) { - return refuse(`there is no clang-tidy fix run for ${sha}, the PR's latest commit. If you just pushed it, ` + - 'try again in a minute. Otherwise, push a commit or merge the base branch to start one, then comment `/bot fix-tidy` again.'); - } - if (run.status !== 'completed') { - // The first attempt is the one every push starts, and it makes no fix. - return refuse(run.run_attempt > 1 - ? `a clang-tidy fix for ${sha} is already [running](${run.html_url}). I'll post it when it finishes.` - : `the PR's checks on ${sha} are still starting. Comment \`/bot fix-tidy\` again in a minute.`); - } - // GitHub refuses to re-run a run created over 30 days ago. - try { - await github.rest.actions.reRunWorkflow({ owner, repo, run_id: run.id }); - } catch (error) { - core.warning(`Re-running ${run.html_url} failed: ${error.message}`); - return refuse(`GitHub won't re-run the [clang-tidy fix run](${run.html_url}) for ${sha} (${error.message}). ` + - 'Push a commit or merge the base branch to start a new one, then comment `/bot fix-tidy` again.'); - } - core.info(`Re-ran ${run.html_url}`); - - suggest: - # The fix run's re-runs only. Its first attempt makes no fix. - if: >- - github.repository == 'OrcaSlicer/OrcaSlicer' - && github.event_name == 'workflow_run' - && github.event.workflow_run.name == 'clang-tidy fix' - && github.event.workflow_run.event == 'pull_request' - && github.event.workflow_run.run_attempt > 1 - concurrency: - group: ${{ github.workflow }}-suggest-${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }} - cancel-in-progress: false - permissions: - actions: read # download the fix - contents: read # check out the PR head - pull-requests: write # the review - issues: write # feedback comment + reactions - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - name: Find the PR and who asked - id: find - uses: actions/github-script@v9 - with: - script: | - const MARKER = ''; - const CPP = /^(src|tests)\/.+\.(cpp|cc|cxx|hpp|h|hxx)$/; - - const { owner, repo } = context.repo; - const run = context.payload.workflow_run; - - // workflow_run lists no PR for a fork's branch, so the PR is found by its branch. - const { data: prs } = await github.rest.pulls.list({ - owner, repo, state: 'open', head: `${run.head_repository.owner.login}:${run.head_branch}` - }); - const pr = prs[0]; - if (!pr) { - core.info('No open PR for this run.'); - return; - } - - // The latest /bot fix-tidy comment is the one this run answers. - const comments = await github.paginate(github.rest.issues.listComments, { owner, repo, issue_number: pr.number, per_page: 100 }); - const request = comments.reverse().find((c) => c.user.type === 'User' && /^\s*\/bot\s+fix-tidy\s*$/im.test(c.body || '')); - const mention = request ? `@${request.user.login} ` : ''; - async function refuse(reason) { - if (request) { - await github.rest.reactions.createForIssueComment({ owner, repo, comment_id: request.id, content: '-1' }); - } - await github.rest.issues.createComment({ owner, repo, issue_number: pr.number, body: `${MARKER}\n${mention}${reason}` }); - } - - if (pr.head.sha !== run.head_sha) { - return refuse('the PR changed while I was making its clang-tidy fix. Comment `/bot fix-tidy` again.'); - } - if (run.conclusion !== 'success') { - return refuse(`I couldn't make the clang-tidy fix. See the [run log](${run.html_url}).`); - } - - // The right-side lines of each changed C++ file's diff: the lines a - // review comment can be placed on. A file too large for GitHub to - // show its diff has none, and gets no suggestions. - const files = await github.paginate(github.rest.pulls.listFiles, { owner, repo, pull_number: pr.number, per_page: 100 }); - const ranges = {}; - for (const file of files) { - if (file.status === 'removed' || !CPP.test(file.filename)) { - continue; - } - ranges[file.filename] = [...(file.patch || '').matchAll(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/gm)] - .map((m) => [Number(m[1]), Number(m[1]) + Number(m[2] ?? 1) - 1]) - .filter(([first, last]) => last >= first); - } - - core.setOutput('pr', pr.number); - core.setOutput('head-sha', pr.head.sha); - core.setOutput('head-repo', run.head_repository.full_name); - core.setOutput('ranges', JSON.stringify(ranges)); - core.setOutput('mention', mention); - core.setOutput('request-id', request ? request.id : ''); - - - name: Download the fix - if: steps.find.outputs.pr != '' - uses: actions/download-artifact@v8 - with: - name: clang-tidy-fix - run-id: ${{ github.event.workflow_run.id }} - github-token: ${{ github.token }} - path: ${{ runner.temp }}/clang-tidy-fix - - # The PR's own files, only to apply the patch to. Nothing in them is run. - - name: Checkout the PR head - if: steps.find.outputs.pr != '' - uses: actions/checkout@v7 - with: - repository: ${{ steps.find.outputs.head-repo }} - ref: ${{ steps.find.outputs.head-sha }} - path: head - fetch-depth: 1 - lfs: 'false' - persist-credentials: false - sparse-checkout: | - src - tests - - # The fix was made on the PR's merge commit, so it is applied to the head - # and diffed again, giving line numbers in the PR's own files. - - name: Check the fix and place its suggestions - id: place - if: steps.find.outputs.pr != '' - env: - RANGES: ${{ steps.find.outputs.ranges }} - run: | - python3 -I - "$RUNNER_TEMP/clang-tidy-fix/fix.patch" head "$RUNNER_TEMP" <<'EOF' - import json, os, re, subprocess, sys - - patch_path, head, out = sys.argv[1:] - ranges = json.loads(os.environ["RANGES"]) - - def output(**values): - with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as f: - for key, value in values.items(): - f.write(f"{key}={value}\n") - - patch = open(patch_path, encoding="utf-8").read() - if not patch.strip(): - output(result="empty") - sys.exit() - - # Every line the patch adds must be an #include or blank, in a C++ file the - # PR changes, and it may not remove, create, rename or change the mode of - # anything. - include = re.compile(r'\s*#\s*include\s*(<[\w./+-]+>|"[\w./+-]+")\s*') - header = re.compile(r"(index [0-9a-f]+\.\.[0-9a-f]+( \d+)?|@@ -\d+(,\d+)? \+\d+(,\d+)? @@.*)") - problems = [] - path = None - for line in patch.splitlines(): - if line.startswith("diff --git "): - match = re.fullmatch(r"diff --git a/(.+) b/\1", line) - path = match.group(1) if match else None - if path not in ranges: - problems.append(f"{line}: not a C++ file the PR changes") - # git appends a tab to the --- and +++ lines of a path that contains a space. - elif line.removesuffix("\t") in (f"--- a/{path}", f"+++ b/{path}") or header.fullmatch(line): - pass - elif line.startswith(" ") or line == "\\ No newline at end of file": - pass - elif line.startswith("+") and (include.fullmatch(line[1:]) or not line[1:].strip()): - pass - else: - problems.append(f"{path}: {line}") - if problems: - for problem in problems: - print(f"::error::Refused patch line {problem}") - output(result="rejected") - sys.exit() - - if subprocess.run(["git", "-C", head, "apply", "--index", os.path.abspath(patch_path)]).returncode != 0: - output(result="apply-failed") - sys.exit() - - git = ["git", "-C", head, "-c", "core.quotePath=false", "diff", "--cached", "--no-color", "--no-ext-diff", - "--src-prefix=a/", "--dst-prefix=b/"] - with open(os.path.join(out, "head.patch"), "w", encoding="utf-8") as f: - f.write(subprocess.run(git, check=True, capture_output=True, encoding="utf-8").stdout) - - # Each run of added lines becomes one suggestion on the line it goes after - # (before, at the top of a file): that line, replaced by itself and the - # includes. It can only sit on a line the PR's diff shows. - hunks = [] - path = None - for line in subprocess.run(git + ["-U0"], check=True, capture_output=True, encoding="utf-8").stdout.splitlines(): - if line.startswith("diff --git "): - path = re.fullmatch(r"diff --git a/(.+) b/\1", line).group(1) - elif line.startswith("@@ "): - hunks.append((path, int(re.match(r"@@ -(\d+)", line).group(1)), [])) - elif hunks and line.startswith("+") and not line.startswith("+++ "): - hunks[-1][2].append(line[1:]) - - suggestions = [] - total = suggested = 0 - for path, after, added in hunks: - count = sum(bool(include.fullmatch(line)) for line in added) - total += count - original = subprocess.run(["git", "-C", head, "show", f"HEAD:{path}"], check=True, capture_output=True, - encoding="utf-8").stdout.splitlines() - line = max(after, 1) - if line > len(original) or not any(first <= line <= last for first, last in ranges[path]): - continue - body = "\n".join([original[line - 1], *added] if after else [*added, original[0]]) - # A fence longer than any run of backticks in the line it repeats. - fence = "`" * max([3] + [len(run) + 1 for run in re.findall(r"`+", body)]) - suggestions.append({"path": path, "line": line, "side": "RIGHT", - "body": f"{fence}suggestion\n{body}\n{fence}"}) - suggested += count - with open(os.path.join(out, "suggestions.json"), "w", encoding="utf-8") as f: - json.dump(suggestions, f) - output(result="ok", includes=total, suggested=suggested) - EOF - - - name: Post the fix - if: always() && steps.find.outputs.pr != '' - uses: actions/github-script@v9 - env: - PR: ${{ steps.find.outputs.pr }} - MENTION: ${{ steps.find.outputs.mention }} - REQUEST_ID: ${{ steps.find.outputs.request-id }} - HEAD_SHA: ${{ steps.find.outputs.head-sha }} - RESULT: ${{ steps.place.outputs.result }} - INCLUDES: ${{ steps.place.outputs.includes }} - SUGGESTED: ${{ steps.place.outputs.suggested }} - with: - script: | - const fs = require('fs'); - const path = require('path'); - const MARKER = ''; - // GitHub's limit on a review body is 65536 characters. - const MAX_PATCH = 60000; - - const { owner, repo } = context.repo; - const { PR, MENTION, REQUEST_ID, HEAD_SHA, RESULT, INCLUDES, SUGGESTED, RUNNER_TEMP } = process.env; - const issue_number = Number(PR); - const sha = HEAD_SHA.slice(0, 10); - const fixUrl = context.payload.workflow_run.html_url; - const runUrl = `${context.serverUrl}/${owner}/${repo}/actions/runs/${context.runId}`; - - const react = (content) => REQUEST_ID - ? github.rest.reactions.createForIssueComment({ owner, repo, comment_id: Number(REQUEST_ID), content }) - : Promise.resolve(); - async function reply(body, content) { - await react(content); - await github.rest.issues.createComment({ owner, repo, issue_number, body: `${MARKER}\n${MENTION}${body}` }); - } - - const read = (...parts) => fs.readFileSync(path.join(RUNNER_TEMP, ...parts), 'utf8'); - const passes = RESULT && read('clang-tidy-fix', 'status').trim() === '0'; - - if (RESULT === 'empty') { - return passes - ? reply(`clang-tidy passes on ${sha}. There is nothing to fix.`, '+1') - : reply(`clang-tidy has no automatic fix for what it reports on ${sha}. The findings, in the [fix run's log](${fixUrl}), need a manual edit.`, '-1'); - } - if (RESULT === 'rejected') { - return reply(`the clang-tidy fix changes more than includes, so I didn't post it. See the [run log](${runUrl}).`, '-1'); - } - if (RESULT === 'apply-failed') { - return reply(`the clang-tidy fix doesn't apply to ${sha}. Merge the base branch into the PR, then comment \`/bot fix-tidy\` again.`, '-1'); - } - if (RESULT !== 'ok') { - return reply(`something went wrong. See the [run log](${runUrl}).`, '-1'); - } - - const patch = read('head.patch'); - const suggestions = JSON.parse(read('suggestions.json')); - - const one = INCLUDES === '1'; - const includes = one ? '1 missing include' : `${INCLUDES} missing includes`; - const inline = SUGGESTED === '0' - ? (one ? 'It goes on a line this PR does not change, so I can\'t suggest it inline.' - : 'They go on lines this PR does not change, so I can\'t suggest them inline.') - : SUGGESTED === INCLUDES - ? (one ? 'It is suggested inline below.' : 'Each is suggested inline below.') - : `${SUGGESTED} of them are suggested inline below; the rest go on lines this PR does not change.`; - const remaining = passes - ? `With ${one ? 'it' : 'them'}, clang-tidy passes.` - : `Some findings remain that need a manual edit; see the [fix run's log](${fixUrl}).`; - // A fence longer than any run of backticks in the patch's context lines. - const fence = '`'.repeat(Math.max(3, ...[...patch.matchAll(/`+/g)].map((m) => m[0].length + 1))); - const apply = patch.length > MAX_PATCH - ? `The full patch is too large to show here. Download \`fix.patch\` from the [fix run](${fixUrl}) and run \`git apply fix.patch\`.` - : `To apply ${one ? 'it' : 'all of them'}, run this in your checkout of the PR branch:\n\n${fence}sh\ngit apply <<'EOF'\n${patch}EOF\n${fence}`; - const body = (withSuggestions) => `${MARKER}\n${MENTION}clang-tidy's fix for ${sha} adds ${includes}. ` + - `${withSuggestions ? `${inline} ` : ''}${remaining}\n\n${apply}`; - - const review = { owner, repo, pull_number: issue_number, commit_id: HEAD_SHA, event: 'COMMENT' }; - try { - await github.rest.pulls.createReview({ ...review, body: body(true), comments: suggestions }); - } catch (error) { - // A suggestion GitHub will not place still leaves the patch. - core.warning(`Posting the suggestions failed (${error.message}); posting the patch alone.`); - await github.rest.pulls.createReview({ ...review, body: body(false) }); - } - await react('+1'); - - nudge: - if: >- - github.repository == 'OrcaSlicer/OrcaSlicer' - && github.event_name == 'workflow_run' - && github.event.workflow_run.name == 'clang-tidy' - && github.event.workflow_run.event == 'pull_request' - concurrency: - group: ${{ github.workflow }}-nudge-${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }} - cancel-in-progress: false - permissions: - actions: read # the check's steps - pull-requests: write # comment on the PR - issues: write # the comment - runs-on: ubuntu-latest - timeout-minutes: 5 - steps: - - name: Ask for a fix when the check fails - uses: actions/github-script@v9 - with: - script: | - const MARKER = ''; - // The clang-tidy step's name in clang_tidy.yml. A failure in any other - // step is the CI's, not the PR's. - const TIDY_STEP = 'Run clang-tidy on the changed lines'; - - const { owner, repo } = context.repo; - const run = context.payload.workflow_run; - - // workflow_run lists no PR for a fork's branch, so the PR is found by its branch. - const { data: prs } = await github.rest.pulls.list({ - owner, repo, state: 'open', head: `${run.head_repository.owner.login}:${run.head_branch}` - }); - const pr = prs.find((p) => p.head.sha === run.head_sha); - if (!pr) { - core.info('No open PR at this run\'s commit; a newer run will answer.'); - return; - } - - const { data: { jobs } } = await github.rest.actions.listJobsForWorkflowRun({ owner, repo, run_id: run.id }); - const failed = jobs.some((job) => (job.steps || []).some((step) => step.name === TIDY_STEP && step.conclusion === 'failure')); - - const comments = await github.paginate(github.rest.issues.listComments, { owner, repo, issue_number: pr.number, per_page: 100 }); - const previous = comments.find((c) => c.user.type === 'Bot' && (c.body || '').startsWith(MARKER)); - - if (!failed) { - // Removes the request once the check passes. - if (previous && run.conclusion === 'success') { - await github.rest.issues.deleteComment({ owner, repo, comment_id: previous.id }); - } - return; - } - - const body = `${MARKER}\n@${pr.user.login} the clang-tidy check found problems in this PR's changes ` + - `at ${run.head_sha.slice(0, 10)} ([log](${run.html_url})). Missing includes can be fixed either way:\n\n` + - '- run `scripts/run_clang_tidy.sh --fix` (`scripts\\run_clang_tidy.ps1 -Fix` on Windows) and push the result, or\n' + - '- comment `/bot fix-tidy`, and I\'ll suggest the fix here for you to apply.\n\n' + - 'Other findings, such as a `using` in a header, need a manual edit.'; - // Edits the earlier request instead of posting another, so each push does not notify again. - if (previous) { - await github.rest.issues.updateComment({ owner, repo, comment_id: previous.id, body }); - } else { - await github.rest.issues.createComment({ owner, repo, issue_number: pr.number, body }); - } From 50957333239b5d5239c935bc31aaf55b2c07d64c Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Mon, 12 Oct 2026 18:52:53 +0800 Subject: [PATCH 011/137] Fix Include Guards Copied From Other Headers (#16368) TriangleMeshDeal.hpp reused Timer.hpp's guard and CloneDialog.hpp reused SingleChoiceDialog.hpp's, so including both headers of a pair silently dropped the second one. Use #pragma once instead. --- src/libslic3r/TriangleMeshDeal.hpp | 5 +---- src/slic3r/GUI/CloneDialog.hpp | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/TriangleMeshDeal.hpp b/src/libslic3r/TriangleMeshDeal.hpp index b1da431229..89d613bb85 100644 --- a/src/libslic3r/TriangleMeshDeal.hpp +++ b/src/libslic3r/TriangleMeshDeal.hpp @@ -1,5 +1,4 @@ -#ifndef libslic3r_Timer_hpp_ -#define libslic3r_Timer_hpp_ +#pragma once #include "TriangleMesh.hpp" @@ -10,5 +9,3 @@ public: static TriangleMesh smooth_triangle_mesh(const TriangleMesh &mesh,bool& ok); }; } // namespace Slic3r - -#endif // libslic3r_Timer_hpp_ diff --git a/src/slic3r/GUI/CloneDialog.hpp b/src/slic3r/GUI/CloneDialog.hpp index 7d83b93d62..3233eb3b36 100644 --- a/src/slic3r/GUI/CloneDialog.hpp +++ b/src/slic3r/GUI/CloneDialog.hpp @@ -1,5 +1,4 @@ -#ifndef slic3r_GUI_SingleChoice_hpp_ -#define slic3r_GUI_SingleChoice_hpp_ +#pragma once #include "GUI_Utils.hpp" #include "Plater.hpp" @@ -33,5 +32,3 @@ private: }; }} // namespace Slic3r::GUI - -#endif \ No newline at end of file From cccf53850e64a1abe8db4c29d8b1755ac9b8ccac Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Mon, 12 Oct 2026 18:53:32 +0800 Subject: [PATCH 012/137] Remove Never-Built and Stub Source Files (#16361) SysInfoDialog, JumpPointSearch and WebUpdatePlugin are in no CMake list on any platform, and nothing includes ConfigExceptions.hpp, wxinit.h or Utils/Profile.hpp. MultiTaskModel holds only empty namespaces. Also drop the empty GUI_App::system_info() and comments that still mention SysInfoDialog. --- src/libslic3r/JumpPointSearch.cpp | 349 ---------------------------- src/libslic3r/JumpPointSearch.hpp | 39 ---- src/libslic3r/Utils.hpp | 1 - src/libslic3r/utils.cpp | 4 +- src/slic3r/CMakeLists.txt | 3 - src/slic3r/GUI/ConfigExceptions.hpp | 19 -- src/slic3r/GUI/GUI_App.cpp | 6 - src/slic3r/GUI/GUI_App.hpp | 1 - src/slic3r/GUI/MultiTaskModel.cpp | 6 - src/slic3r/GUI/MultiTaskModel.hpp | 11 - src/slic3r/GUI/SysInfoDialog.cpp | 232 ------------------ src/slic3r/GUI/SysInfoDialog.hpp | 36 --- src/slic3r/GUI/WebUpdatePlugin.cpp | 0 src/slic3r/GUI/WebUpdatePlugin.hpp | 0 src/slic3r/GUI/wxinit.h | 15 -- src/slic3r/Utils/Profile.hpp | 19 -- 16 files changed, 1 insertion(+), 740 deletions(-) delete mode 100644 src/libslic3r/JumpPointSearch.cpp delete mode 100644 src/libslic3r/JumpPointSearch.hpp delete mode 100644 src/slic3r/GUI/ConfigExceptions.hpp delete mode 100644 src/slic3r/GUI/MultiTaskModel.cpp delete mode 100644 src/slic3r/GUI/MultiTaskModel.hpp delete mode 100644 src/slic3r/GUI/SysInfoDialog.cpp delete mode 100644 src/slic3r/GUI/SysInfoDialog.hpp delete mode 100644 src/slic3r/GUI/WebUpdatePlugin.cpp delete mode 100644 src/slic3r/GUI/WebUpdatePlugin.hpp delete mode 100644 src/slic3r/GUI/wxinit.h delete mode 100644 src/slic3r/Utils/Profile.hpp diff --git a/src/libslic3r/JumpPointSearch.cpp b/src/libslic3r/JumpPointSearch.cpp deleted file mode 100644 index 9eb18017fb..0000000000 --- a/src/libslic3r/JumpPointSearch.cpp +++ /dev/null @@ -1,349 +0,0 @@ -#include "JumpPointSearch.hpp" -#include "BoundingBox.hpp" -#include "ExPolygon.hpp" -#include "Point.hpp" -#include "libslic3r/AStar.hpp" -#include "libslic3r/KDTreeIndirect.hpp" -#include "libslic3r/Polygon.hpp" -#include "libslic3r/Polyline.hpp" -#include "libslic3r/libslic3r.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -//#define DEBUG_FILES -#ifdef DEBUG_FILES -#include "libslic3r/SVG.hpp" -#endif - -namespace Slic3r { - -// execute fn for each pixel on the line. If fn returns false, terminate the iteration -template void dda(coord_t x0, coord_t y0, coord_t x1, coord_t y1, const PointFn &fn) -{ - coord_t dx = abs(x1 - x0); - coord_t dy = abs(y1 - y0); - coord_t x = x0; - coord_t y = y0; - coord_t n = 1 + dx + dy; - coord_t x_inc = (x1 > x0) ? 1 : -1; - coord_t y_inc = (y1 > y0) ? 1 : -1; - coord_t error = dx - dy; - dx *= 2; - dy *= 2; - - for (; n > 0; --n) { - if (!fn(x, y)) return; - - if (error > 0) { - x += x_inc; - error -= dy; - } else { - y += y_inc; - error += dx; - } - } -} - -// will draw the line twice, second time with and offset of 1 in the direction of normal -// may call the fn on the same coordiantes multiple times! -template void double_dda_with_offset(coord_t x0, coord_t y0, coord_t x1, coord_t y1, const PointFn &fn) -{ - Vec2d normal = Point{y1 - y0, x1 - x0}.cast().normalized(); - normal.x() = ceil(normal.x()); - normal.y() = ceil(normal.y()); - Point start_offset = Point(x0, y0) + (normal).cast(); - Point end_offset = Point(x1, y1) + (normal).cast(); - - dda(x0, y0, x1, y1, fn); - dda(start_offset.x(), start_offset.y(), end_offset.x(), end_offset.y(), fn); -} - -template class JPSTracer -{ -public: - // Use incoming_dir [0,0] for starting points, so that all directions are checked from that point - struct Node - { - CellPositionType position; - CellPositionType incoming_dir; - }; - - JPSTracer(CellPositionType target, CellQueryFn is_passable) : target(target), is_passable(is_passable) {} - -private: - CellPositionType target; - CellQueryFn is_passable; // should return boolean whether the cell is passable or not - - CellPositionType find_jump_point(CellPositionType start, CellPositionType forward_dir) const - { - CellPositionType next = start + forward_dir; - while (next != target && is_passable(next) && !(is_jump_point(next, forward_dir))) { next = next + forward_dir; } - - if (is_passable(next)) { - return next; - } else { - return start; - } - } - - bool is_jump_point(CellPositionType pos, CellPositionType forward_dir) const - { - if (abs(forward_dir.x()) + abs(forward_dir.y()) == 2) { - // diagonal - CellPositionType horizontal_check_dir = CellPositionType{forward_dir.x(), 0}; - CellPositionType vertical_check_dir = CellPositionType{0, forward_dir.y()}; - - if (!is_passable(pos - horizontal_check_dir) && is_passable(pos + forward_dir - 2 * horizontal_check_dir)) { return true; } - - if (!is_passable(pos - vertical_check_dir) && is_passable(pos + forward_dir - 2 * vertical_check_dir)) { return true; } - - if (find_jump_point(pos, horizontal_check_dir) != pos) { return true; } - - if (find_jump_point(pos, vertical_check_dir) != pos) { return true; } - - return false; - } else { // horizontal or vertical - CellPositionType side_dir = CellPositionType(forward_dir.y(), forward_dir.x()); - - if (!is_passable(pos + side_dir) && is_passable(pos + forward_dir + side_dir)) { return true; } - - if (!is_passable(pos - side_dir) && is_passable(pos + forward_dir - side_dir)) { return true; } - - return false; - } - } - -public: - template void foreach_reachable(const Node &from, Fn &&fn) const - { - const CellPositionType & pos = from.position; - const CellPositionType & forward_dir = from.incoming_dir; - std::vector dirs_to_check{}; - - if (abs(forward_dir.x()) + abs(forward_dir.y()) == 0) { // special case for starting point - dirs_to_check = all_directions; - } else if (abs(forward_dir.x()) + abs(forward_dir.y()) == 2) { - // diagonal - CellPositionType horizontal_check_dir = CellPositionType{forward_dir.x(), 0}; - CellPositionType vertical_check_dir = CellPositionType{0, forward_dir.y()}; - - if (!is_passable(pos - horizontal_check_dir) && is_passable(pos + forward_dir - 2 * horizontal_check_dir)) { - dirs_to_check.push_back(forward_dir - 2 * horizontal_check_dir); - } - - if (!is_passable(pos - vertical_check_dir) && is_passable(pos + forward_dir - 2 * vertical_check_dir)) { - dirs_to_check.push_back(forward_dir - 2 * vertical_check_dir); - } - - dirs_to_check.push_back(horizontal_check_dir); - dirs_to_check.push_back(vertical_check_dir); - dirs_to_check.push_back(forward_dir); - - } else { // horizontal or vertical - CellPositionType side_dir = CellPositionType(forward_dir.y(), forward_dir.x()); - - if (!is_passable(pos + side_dir) && is_passable(pos + forward_dir + side_dir)) { dirs_to_check.push_back(forward_dir + side_dir); } - - if (!is_passable(pos - side_dir) && is_passable(pos + forward_dir - side_dir)) { dirs_to_check.push_back(forward_dir - side_dir); } - dirs_to_check.push_back(forward_dir); - } - - for (const CellPositionType &dir : dirs_to_check) { - CellPositionType jp = find_jump_point(pos, dir); - if (jp != pos) fn(Node{jp, dir}); - } - } - - float distance(Node a, Node b) const { return (a.position - b.position).template cast().norm(); } - - float goal_heuristic(Node n) const { return n.position == target ? -1.f : (target - n.position).template cast().norm(); } - - size_t unique_id(Node n) const { return (static_cast(uint16_t(n.position.x())) << 16) + static_cast(uint16_t(n.position.y())); } - - const std::vector all_directions{{1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}}; -}; - -void JPSPathFinder::clear() -{ - inpassable.clear(); - max_search_box.max = Pixel(std::numeric_limits::min(), std::numeric_limits::min()); - max_search_box.min = Pixel(std::numeric_limits::max(), std::numeric_limits::max()); - add_obstacles(bed_shape); -} - -void JPSPathFinder::add_obstacles(const Lines &obstacles) -{ - auto store_obstacle = [&](coord_t x, coord_t y) { - max_search_box.max.x() = std::max(max_search_box.max.x(), x); - max_search_box.max.y() = std::max(max_search_box.max.y(), y); - max_search_box.min.x() = std::min(max_search_box.min.x(), x); - max_search_box.min.y() = std::min(max_search_box.min.y(), y); - inpassable.insert(Pixel{x, y}); - return true; - }; - - for (const Line &l : obstacles) { - Pixel start = pixelize(l.a); - Pixel end = pixelize(l.b); - double_dda_with_offset(start.x(), start.y(), end.x(), end.y(), store_obstacle); - } -} - -Polyline JPSPathFinder::find_path(const Point &p0, const Point &p1) -{ - Pixel start = pixelize(p0); - Pixel end = pixelize(p1); - if (inpassable.empty() || (start - end).cast().norm() < 3.0) { return Polyline{p0, p1}; } - - if (inpassable.find(start) != inpassable.end()) { - dda(start.x(), start.y(), end.x(), end.y(), [&](coord_t x, coord_t y) { - if (inpassable.find(Pixel(x, y)) == inpassable.end() || start == end) { // new start not found yet, and xy passable - start = Pixel(x, y); - return false; - } - return true; - }); - } - - if (inpassable.find(end) != inpassable.end()) { - dda(end.x(), end.y(), start.x(), start.y(), [&](coord_t x, coord_t y) { - if (inpassable.find(Pixel(x, y)) == inpassable.end() || start == end) { // new start not found yet, and xy passable - end = Pixel(x, y); - return false; - } - return true; - }); - } - - BoundingBox search_box = max_search_box; - search_box.max -= Pixel(1, 1); - search_box.min += Pixel(1, 1); - - BoundingBox bounding_square(Points{start, end}); - bounding_square.max += Pixel(5, 5); - bounding_square.min -= Pixel(5, 5); - coord_t bounding_square_size = 2 * std::max(bounding_square.size().x(), bounding_square.size().y()); - bounding_square.max.x() += (bounding_square_size - bounding_square.size().x()) / 2; - bounding_square.min.x() -= (bounding_square_size - bounding_square.size().x()) / 2; - bounding_square.max.y() += (bounding_square_size - bounding_square.size().y()) / 2; - bounding_square.min.y() -= (bounding_square_size - bounding_square.size().y()) / 2; - - // Intersection - limit the search box to a square area around the start and end, to fasten the path searching - search_box.max = search_box.max.cwiseMin(bounding_square.max); - search_box.min = search_box.min.cwiseMax(bounding_square.min); - - auto cell_query = [&](Pixel pixel) { return search_box.contains(pixel) && (pixel == start || pixel == end || inpassable.find(pixel) == inpassable.end()); }; - - JPSTracer tracer(end, cell_query); - using QNode = astar::QNode>; - - std::unordered_map astar_cache{}; - std::vector> out_path; - std::vector out_nodes; - - if (!astar::search_route(tracer, {start, {0, 0}}, std::back_inserter(out_nodes), astar_cache)) { - // path not found - just reconstruct the best path from astar cache. - // Note that astar_cache is NOT empty - at least the starting point should always be there - auto coordiante_func = [&astar_cache](size_t idx, size_t dim) { return float(astar_cache[idx].node.position[dim]); }; - std::vector keys; - keys.reserve(astar_cache.size()); - for (const auto &pair : astar_cache) { keys.push_back(pair.first); } - KDTreeIndirect<2, float, decltype(coordiante_func)> kd_tree(coordiante_func, keys); - size_t closest_qnode = find_closest_point(kd_tree, end.cast()); - - out_path.push_back(end); - while (closest_qnode != astar::Unassigned) { - out_path.push_back(astar_cache[closest_qnode].node.position); - closest_qnode = astar_cache[closest_qnode].parent; - } - } else { - for (const auto &node : out_nodes) { out_path.push_back(node.position); } - out_path.push_back(start); - } - -#ifdef DEBUG_FILES - auto scaled_points = [](const Points &ps) { - Points r; - for (const Point &p : ps) { r.push_back(Point::new_scale(p.x(), p.y())); } - return r; - }; - auto scaled_point = [](const Point &p) { return Point::new_scale(p.x(), p.y()); }; - ::Slic3r::SVG svg(debug_out_path(("path_jps" + std::to_string(print_z) + "_" + std::to_string(rand() % 1000)).c_str()).c_str(), - BoundingBox(scaled_point(search_box.min), scaled_point(search_box.max))); - for (const auto &p : inpassable) { svg.draw(scaled_point(p), "black", scale_(0.4)); } - for (const auto &qn : astar_cache) { svg.draw(scaled_point(qn.second.node.position), "blue", scale_(0.3)); } - svg.draw(Polyline(scaled_points(out_path)), "yellow", scale_(0.25)); - svg.draw(scaled_point(end), "purple", scale_(0.4)); - svg.draw(scaled_point(start), "green", scale_(0.4)); -#endif - - std::vector> tmp_path; - tmp_path.reserve(out_path.size()); - // Some path found, reverse and remove points that do not change direction - std::reverse(out_path.begin(), out_path.end()); - { - tmp_path.push_back(out_path.front()); // first point - for (size_t i = 1; i < out_path.size() - 1; i++) { - if ((out_path[i] - out_path[i - 1]).cast().normalized() != (out_path[i + 1] - out_path[i]).cast().normalized()) { tmp_path.push_back(out_path[i]); } - } - tmp_path.push_back(out_path.back()); // last_point - out_path = tmp_path; - } - -#ifdef DEBUG_FILES - svg.draw(Polyline(scaled_points(out_path)), "orange", scale_(0.20)); -#endif - - tmp_path.clear(); - // remove redundant jump points - there are points that change direction but are not needed - this inefficiency arises from the - // usage of grid search The removal alg tries to find the longest Px Px+k path without obstacles. If Px Px+k+1 is blocked, it will - // insert the Px+k point to result and continue search from Px+k - { - tmp_path.push_back(out_path.front()); // first point - size_t index_of_last_stored_point = 0; - for (size_t i = 1; i < out_path.size(); i++) { - if (i - index_of_last_stored_point < 2) continue; - bool passable = true; - auto store_obstacle = [&](coord_t x, coord_t y) { - if (Pixel(x, y) != start && Pixel(x, y) != end && inpassable.find(Pixel(x, y)) != inpassable.end()) { - passable = false; - return false; - } - return true; - }; - dda(tmp_path.back().x(), tmp_path.back().y(), out_path[i].x(), out_path[i].y(), store_obstacle); - if (!passable) { - tmp_path.push_back(out_path[i - 1]); - index_of_last_stored_point = i - 1; - } - } - tmp_path.push_back(out_path.back()); // last_point - out_path = tmp_path; - } - -#ifdef DEBUG_FILES - svg.draw(Polyline(scaled_points(out_path)), "red", scale_(0.15)); - svg.Close(); -#endif - - // before returing the path, transform it from pixels back to points. - // Also replace the first and last pixel by input points so that result path patches input params exactly. - for (Pixel &p : out_path) { p = unpixelize(p); } - out_path.front() = p0; - out_path.back() = p1; - - return Polyline(out_path); -} - -} // namespace Slic3r diff --git a/src/libslic3r/JumpPointSearch.hpp b/src/libslic3r/JumpPointSearch.hpp deleted file mode 100644 index b5fbf6aaf0..0000000000 --- a/src/libslic3r/JumpPointSearch.hpp +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once -#include "Line.hpp" -#ifndef SRC_LIBSLIC3R_JUMPPOINTSEARCH_HPP_ -#define SRC_LIBSLIC3R_JUMPPOINTSEARCH_HPP_ - -#include "BoundingBox.hpp" -#include "Polygon.hpp" -#include "libslic3r/Layer.hpp" -#include "libslic3r/Point.hpp" -#include "libslic3r/Polyline.hpp" -#include "libslic3r/libslic3r.h" -#include -#include - -namespace Slic3r { - -class JPSPathFinder -{ - using Pixel = Point; - std::unordered_set inpassable; - coordf_t print_z; - BoundingBox max_search_box; - Lines bed_shape; - - const coord_t resolution = scaled(1.5); - Pixel pixelize(const Point &p) { return p / resolution; } - Point unpixelize(const Pixel &p) { return p * resolution; } - -public: - JPSPathFinder() = default; - void init_bed_shape(const Points &bed_shape) { this->bed_shape = (to_lines(Polygon{bed_shape})); }; - void clear(); - void add_obstacles(const Lines &obstacles); - Polyline find_path(const Point &start, const Point &end); -}; - -} // namespace Slic3r - -#endif /* SRC_LIBSLIC3R_JUMPPOINTSEARCH_HPP_ */ diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 24ebe9a337..d9d30573fc 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -109,7 +109,6 @@ extern std::string format_memsize_MB(size_t n); extern std::string format_memsize(size_t bytes, unsigned int decimals = 1); // Return string to be added to the boost::log output to inform about the current process memory allocation. // The string is non-empty if the loglevel >= info (3) or ignore_loglevel==true. -// Latter is used to get the memory info from SysInfoDialog. extern std::string log_memory_info(bool ignore_loglevel = false); extern void disable_multi_threading(); // Returns the size of physical memory (RAM) in bytes. diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index cd9ecf100d..e8cc1759d5 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -1744,9 +1744,7 @@ std::string format_diameter_to_str(double diameter, int precision) return oss.str(); } -// Returns platform-specific string to be used as log output or parsed in SysInfoDialog. -// The latter parses the string with (semi)colons as separators, it should look about as -// "desc1: value1; desc2: value2" or similar (spaces should not matter). +// Returns platform-specific string to be used as log output. std::string log_memory_info(bool ignore_loglevel) { std::string out; diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 65c8384ef2..dd13fd5353 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -416,8 +416,6 @@ set(SLIC3R_GUI_SOURCES GUI/MultiSendMachineModel.hpp GUI/MultiTaskManagerPage.cpp GUI/MultiTaskManagerPage.hpp - GUI/MultiTaskModel.cpp - GUI/MultiTaskModel.hpp GUI/NetworkTestDialog.cpp GUI/NetworkTestDialog.hpp GUI/Notebook.cpp @@ -802,7 +800,6 @@ set(SLIC3R_GUI_SOURCES Utils/PrintHost.hpp Utils/Process.cpp Utils/Process.hpp - Utils/Profile.hpp Utils/RaycastManager.cpp Utils/RaycastManager.hpp Utils/Repetier.cpp diff --git a/src/slic3r/GUI/ConfigExceptions.hpp b/src/slic3r/GUI/ConfigExceptions.hpp deleted file mode 100644 index e3c5b08cea..0000000000 --- a/src/slic3r/GUI/ConfigExceptions.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -#include "libslic3r/Exception.hpp" - -namespace Slic3r { - -class ConfigError : public Slic3r::RuntimeError { - using Slic3r::RuntimeError::RuntimeError; -}; - -namespace GUI { - -class ConfigGUITypeError : public ConfigError { - using ConfigError::ConfigError; -}; - -} // namespace GUI -} // namespace Slic3r diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 636ba985f5..11a436e1ae 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4862,12 +4862,6 @@ void GUI_App::recreate_GUI(const wxString &msg_name) BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "recreate_GUI exit"; } -void GUI_App::system_info() -{ - //SysInfoDialog dlg; - //dlg.ShowModal(); -} - void GUI_App::keyboard_shortcuts(ShortcutContext page, wxWindow* parent) { KBShortcutsDialog dlg(parent != nullptr ? parent : mainframe, page); diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 0a2ddc5f17..e03c3d280a 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -519,7 +519,6 @@ public: void check_printer_presets(); void recreate_GUI(const wxString& message); - void system_info(); void keyboard_shortcuts(ShortcutContext page, wxWindow* parent = nullptr); // the main frame when null void troubleshoot(); void load_project(wxWindow *parent, wxString& input_file) const; diff --git a/src/slic3r/GUI/MultiTaskModel.cpp b/src/slic3r/GUI/MultiTaskModel.cpp deleted file mode 100644 index b23468b93e..0000000000 --- a/src/slic3r/GUI/MultiTaskModel.cpp +++ /dev/null @@ -1,6 +0,0 @@ - -namespace Slic3r { -namespace GUI { - -} // namespace GUI -} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiTaskModel.hpp b/src/slic3r/GUI/MultiTaskModel.hpp deleted file mode 100644 index 6b233e9302..0000000000 --- a/src/slic3r/GUI/MultiTaskModel.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef slic3r_MultiTaskModel_hpp_ -#define slic3r_MultiTaskModel_hpp_ - -namespace Slic3r { -namespace GUI { - - -} // namespace GUI -} // namespace Slic3r - -#endif diff --git a/src/slic3r/GUI/SysInfoDialog.cpp b/src/slic3r/GUI/SysInfoDialog.cpp deleted file mode 100644 index 585767d318..0000000000 --- a/src/slic3r/GUI/SysInfoDialog.cpp +++ /dev/null @@ -1,232 +0,0 @@ -#include "SysInfoDialog.hpp" -#include "I18N.hpp" -#include "3DScene.hpp" -#include "GUI.hpp" -#include "../Utils/UndoRedo.hpp" -#include "Plater.hpp" - -#include - -#include - -#include -#include -#include "GUI_App.hpp" -#include "MainFrame.hpp" -#include "wxExtensions.hpp" -#include "libslic3r/BlacklistedLibraryCheck.hpp" -#include "libslic3r/Color.hpp" -#include "format.hpp" - -#ifdef _WIN32 - // The standard Windows includes. - #define WIN32_LEAN_AND_MEAN - #ifndef NOMINMAX - #define NOMINMAX - #endif - #include - #include -#endif /* _WIN32 */ - -namespace Slic3r { -namespace GUI { - -std::string get_main_info(bool format_as_html) -{ - std::stringstream out; - - std::string b_start = format_as_html ? "" : ""; - std::string b_end = format_as_html ? "" : ""; - std::string line_end = format_as_html ? "
" : "\n"; - - if (!format_as_html) - out << b_start << (wxGetApp().is_editor() ? SLIC3R_APP_FULL_NAME : GCODEVIEWER_APP_NAME) << b_end << line_end; - out << b_start << "Version: " << b_end << SLIC3R_VERSION << line_end; - out << b_start << "Build: " << b_end << (wxGetApp().is_editor() ? SLIC3R_BUILD_ID : GCODEVIEWER_BUILD_ID) << line_end; - out << line_end; - out << b_start << "Operating System: " << b_end << wxPlatformInfo::Get().GetOperatingSystemFamilyName() << line_end; - out << b_start << "System Architecture: " << b_end << wxPlatformInfo::Get().GetArchName() << line_end; - out << b_start << -#if defined _WIN32 - "Windows Version: " -#else - // Hopefully some kind of unix / linux. - "System Version: " -#endif - << b_end << wxPlatformInfo::Get().GetOperatingSystemDescription() << line_end; - out << b_start << "Total RAM size [MB]: " << b_end << Slic3r::format_memsize_MB(Slic3r::total_physical_memory()); - - return out.str(); -} - -std::string get_mem_info(bool format_as_html) -{ - std::stringstream out; - - std::string b_start = format_as_html ? "" : ""; - std::string b_end = format_as_html ? "" : ""; - std::string line_end = format_as_html ? "
" : "\n"; - - std::string mem_info_str = log_memory_info(true); - std::istringstream mem_info(mem_info_str); - std::string value; - while (std::getline(mem_info, value, ':')) { - out << b_start << (value+": ") << b_end; - std::getline(mem_info, value, ';'); - out << value << line_end; - } - - const Slic3r::UndoRedo::Stack &stack = wxGetApp().plater()->undo_redo_stack_main(); - out << b_start << "RAM size reserved for the Undo / Redo stack: " << b_end << Slic3r::format_memsize_MB(stack.get_memory_limit()) << line_end; - out << b_start << "RAM size occupied by the Undo / Redo stack: " << b_end << Slic3r::format_memsize_MB(stack.memsize()) << line_end << line_end; - - return out.str(); -} - -SysInfoDialog::SysInfoDialog() - : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, (wxGetApp().is_editor() ? wxString(SLIC3R_APP_FULL_NAME) : wxString(GCODEVIEWER_APP_NAME)) + " - " + _L("System Information"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) -{ - wxColour bgr_clr = wxGetApp().get_window_default_clr();//wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); - SetBackgroundColour(bgr_clr); - SetFont(wxGetApp().normal_font()); - - wxBoxSizer* hsizer = new wxBoxSizer(wxHORIZONTAL); - hsizer->SetMinSize(wxSize(50 * wxGetApp().em_unit(), -1)); - - auto main_sizer = new wxBoxSizer(wxVERTICAL); - main_sizer->Add(hsizer, 1, wxEXPAND | wxALL, 10); - - // logo - m_logo_bmp = ScalableBitmap(this, wxGetApp().logo_name(), 192); - m_logo = new wxStaticBitmap(this, wxID_ANY, m_logo_bmp.bmp()); - hsizer->Add(m_logo, 0, wxALIGN_CENTER_VERTICAL); - - wxBoxSizer* vsizer = new wxBoxSizer(wxVERTICAL); - hsizer->Add(vsizer, 1, wxEXPAND|wxLEFT, 20); - - // title - { - wxStaticText* title = new wxStaticText(this, wxID_ANY, wxGetApp().is_editor() ? SLIC3R_APP_FULL_NAME : GCODEVIEWER_APP_NAME, wxDefaultPosition, wxDefaultSize); - wxFont title_font = wxGetApp().bold_font(); - title_font.SetFamily(wxFONTFAMILY_ROMAN); - title_font.SetPointSize(22); - title->SetFont(title_font); - vsizer->Add(title, 0, wxEXPAND | wxTOP, wxGetApp().em_unit()/*50*/); - } - - // main_info_text - wxFont font = get_default_font(this); - const auto text_clr = wxGetApp().get_label_clr_default();//wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); - auto text_clr_str = encode_color(ColorRGB(text_clr.Red(), text_clr.Green(), text_clr.Blue())); - auto bgr_clr_str = encode_color(ColorRGB(bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue())); - - const int fs = font.GetPointSize() - 1; - int size[] = { static_cast(fs*1.5), static_cast(fs*1.4), static_cast(fs*1.3), fs, fs, fs, fs }; - - m_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_NEVER); - { - m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size); - m_html->SetBorders(2); - const auto text = wxString::Format( - "" - "" - "" - "%s" - "" - "" - "", bgr_clr_str, text_clr_str, text_clr_str, - get_main_info(true)); - m_html->SetPage(text); - vsizer->Add(m_html, 1, wxEXPAND | wxBOTTOM, wxGetApp().em_unit()); - } - - // opengl_info - m_opengl_info_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO); - { - m_opengl_info_html->SetMinSize(wxSize(-1, 16 * wxGetApp().em_unit())); - m_opengl_info_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size); - m_opengl_info_html->SetBorders(10); - wxString blacklisted_libraries_message; -#ifdef WIN32 - std::wstring blacklisted_libraries = BlacklistedLibraryCheck::get_instance().get_blacklisted_string().c_str(); - if (! blacklisted_libraries.empty()) - blacklisted_libraries_message = wxString("
") + _L("Blacklisted libraries loaded into OrcaSlicer process:") + "
" + blacklisted_libraries; -#endif // WIN32 - const auto text = GUI::format_wxstr( - "" - "" - "" - "%s
%s
%s
%s" - "
" - "" - "", bgr_clr_str, text_clr_str, text_clr_str, - blacklisted_libraries_message, - get_mem_info(true), wxGetApp().get_gl_info(false), - "" + _L("SIMD is supported:") + " " + Eigen::SimdInstructionSetsInUse()); - - m_opengl_info_html->SetPage(text); - main_sizer->Add(m_opengl_info_html, 1, wxEXPAND | wxBOTTOM, 15); - } - - wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxOK); - m_btn_copy_to_clipboard = new wxButton(this, wxID_ANY, _L("Copy to Clipboard"), wxDefaultPosition, wxDefaultSize); - - buttons->Insert(0, m_btn_copy_to_clipboard, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 5); - m_btn_copy_to_clipboard->Bind(wxEVT_BUTTON, &SysInfoDialog::onCopyToClipboard, this); - - this->SetEscapeId(wxID_OK); - this->Bind(wxEVT_BUTTON, &SysInfoDialog::onCloseDialog, this, wxID_OK); - main_sizer->Add(buttons, 0, wxEXPAND | wxRIGHT | wxBOTTOM, 3); - - wxGetApp().UpdateDlgDarkUI(this, true); - -// this->Bind(wxEVT_LEFT_DOWN, &SysInfoDialog::onCloseDialog, this); -// logo->Bind(wxEVT_LEFT_DOWN, &SysInfoDialog::onCloseDialog, this); - - SetSizer(main_sizer); - main_sizer->SetSizeHints(this); -} - -void SysInfoDialog::on_dpi_changed(const wxRect &suggested_rect) -{ - m_logo_bmp.msw_rescale(); - m_logo->SetBitmap(m_logo_bmp.bmp()); - - wxFont font = get_default_font(this); - const int fs = font.GetPointSize() - 1; - int font_size[] = { static_cast(fs*1.5), static_cast(fs*1.4), static_cast(fs*1.3), fs, fs, fs, fs }; - - m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), font_size); - m_html->Refresh(); - - const int& em = em_unit(); - - msw_buttons_rescale(this, em, { wxID_OK, m_btn_copy_to_clipboard->GetId() }); - - m_opengl_info_html->SetMinSize(wxSize(-1, 16 * em)); - m_opengl_info_html->SetFonts(font.GetFaceName(), font.GetFaceName(), font_size); - m_opengl_info_html->Refresh(); - - const wxSize& size = wxSize(65 * em, 55 * em); - - SetMinSize(size); - Fit(); - - Refresh(); -} - -void SysInfoDialog::onCopyToClipboard(wxEvent &) -{ - wxTheClipboard->Open(); - const auto text = get_main_info(false) + "\n" + wxGetApp().get_gl_info(true); - wxTheClipboard->SetData(new wxTextDataObject(text)); - wxTheClipboard->Close(); -} - -void SysInfoDialog::onCloseDialog(wxEvent &) -{ - this->EndModal(wxID_CLOSE); -} - -} // namespace GUI -} // namespace Slic3r diff --git a/src/slic3r/GUI/SysInfoDialog.hpp b/src/slic3r/GUI/SysInfoDialog.hpp deleted file mode 100644 index 25a59f0fa7..0000000000 --- a/src/slic3r/GUI/SysInfoDialog.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef slic3r_GUI_SysInfoDialog_hpp_ -#define slic3r_GUI_SysInfoDialog_hpp_ - -#include -#include -#include - -#include "GUI_Utils.hpp" -#include "wxExtensions.hpp" - -namespace Slic3r { -namespace GUI { - -class SysInfoDialog : public DPIDialog -{ - ScalableBitmap m_logo_bmp; - wxStaticBitmap* m_logo; - wxHtmlWindow* m_opengl_info_html; - wxHtmlWindow* m_html; - - wxButton* m_btn_copy_to_clipboard; - -public: - SysInfoDialog(); - -protected: - void on_dpi_changed(const wxRect &suggested_rect) override; - -private: - void onCopyToClipboard(wxEvent &); - void onCloseDialog(wxEvent &); -}; -} // namespace GUI -} // namespace Slic3r - -#endif diff --git a/src/slic3r/GUI/WebUpdatePlugin.cpp b/src/slic3r/GUI/WebUpdatePlugin.cpp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/slic3r/GUI/WebUpdatePlugin.hpp b/src/slic3r/GUI/WebUpdatePlugin.hpp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/slic3r/GUI/wxinit.h b/src/slic3r/GUI/wxinit.h deleted file mode 100644 index 4c5ab9fb36..0000000000 --- a/src/slic3r/GUI/wxinit.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef slic3r_wxinit_hpp_ -#define slic3r_wxinit_hpp_ - -#include -#include -#include - -// Perl redefines a _ macro, so we undef this one -#undef _ - -// We do want to use translation however, so define it as __ so we can do a find/replace -// later when we no longer need to undef _ -#define __(s) wxGetTranslation((s)) - -#endif diff --git a/src/slic3r/Utils/Profile.hpp b/src/slic3r/Utils/Profile.hpp deleted file mode 100644 index 5fb1e31167..0000000000 --- a/src/slic3r/Utils/Profile.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef slic3r_GUI_Profile_hpp_ -#define slic3r_GUI_Profile_hpp_ - -// Profiling support using the Shiny intrusive profiler -//#define SLIC3R_PROFILE_GUI -#if defined(SLIC3R_PROFILE) && defined(SLIC3R_PROFILE_GUI) - #include - #define SLIC3R_GUI_PROFILE_FUNC() PROFILE_FUNC() - #define SLIC3R_GUI_PROFILE_BLOCK(name) PROFILE_BLOCK(name) - #define SLIC3R_GUI_PROFILE_UPDATE() PROFILE_UPDATE() - #define SLIC3R_GUI_PROFILE_OUTPUT(x) PROFILE_OUTPUT(x) -#else - #define SLIC3R_GUI_PROFILE_FUNC() - #define SLIC3R_GUI_PROFILE_BLOCK(name) - #define SLIC3R_GUI_PROFILE_UPDATE() - #define SLIC3R_GUI_PROFILE_OUTPUT(x) -#endif - -#endif // slic3r_GUI_Profile_hpp_ From 7d4ec3494c1b4a62ad4f2d7df3b419941adcdba5 Mon Sep 17 00:00:00 2001 From: chenshj73 <88446331+chenshj73@users.noreply.github.com> Date: Mon, 12 Oct 2026 19:30:32 +0800 Subject: [PATCH 013/137] Fix H2C start G-code record-data comments --- resources/profiles/BBL.json | 2 +- .../Bambu Lab H2C 0.4 nozzle template machine_start_gcode.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 6c6567d37d..da56f36ccd 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "02.08.00.14", + "version": "02.08.00.15", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/machine/Bambu Lab H2C 0.4 nozzle template machine_start_gcode.json b/resources/profiles/BBL/machine/Bambu Lab H2C 0.4 nozzle template machine_start_gcode.json index 5132ccee2e..8d620f168d 100644 --- a/resources/profiles/BBL/machine/Bambu Lab H2C 0.4 nozzle template machine_start_gcode.json +++ b/resources/profiles/BBL/machine/Bambu Lab H2C 0.4 nozzle template machine_start_gcode.json @@ -2,5 +2,5 @@ "type": "machine", "name": "Bambu Lab H2C 0.4 nozzle template machine_start_gcode", "instantiation": "false", - "machine_start_gcode": ";===== machine: H2C =========================\n;===== date: 20260608 =====================\n\n;M1002 set_flag extrude_cali_flag=1\n;M1002 set_flag g29_before_print_flag=1\n;M1002 set_flag auto_cali_toolhead_offset_flag=1\n;M1002 set_flag build_plate_detect_flag=1\n\nM993 A0 B0 C0 ; nozzle cam detection not allowed.\n\nM400\n;M73 P99\n\nM960 S10 P1 ; ext fan led\n\n;=====printer start sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A53 B9 L99 C53 D9 M99 E53 F9 N99\nM1006 A56 B9 L99 C56 D9 M99 E56 F9 N99\nM1006 A61 B9 L99 C61 D9 M99 E61 F9 N99\nM1006 A53 B9 L99 C53 D9 M99 E53 F9 N99\nM1006 A56 B9 L99 C56 D9 M99 E56 F9 N99\nM1006 A61 B18 L99 C61 D18 M99 E61 F18 N99\nM1006 W\n;=====printer start sound ===================\n\n;===== reset machine status =================\nM204 S10000\nM630 S0 P0\n\nG90\nM17 D ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM1002 set_gcode_claim_speed_level 5 ;Reset speed level\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nG29.1 Z{+0.0} ; clear z-trim value first\nM983.1 M1\nM901 D4\nM481 S0 ; turn off cutter pos comp\nG28.140 D0; reset pre-extrude z pos\n;===== reset machine status =================\n\nM620 M ;enable remap\nM620 N ;enable hotend remap\nM620 T0 ;print tmpr\nM620 T1 ;sn -> pos\nM620 T2 ;filament_id\n\n;===== start to heat heatbed & hotend==========\n\n M104 O-80 A\n M140 D[bed_temperature_initial_layer_single]\n\n;===== start to heat heatbead & hotend==========\n\n;===== avoid end stop =================\nG91\nG380 S2 Z42 F1200\nG380 S2 Z-12 F1200\nG90\n;===== avoid end stop =================\n\n;==== set airduct mode ====\n\n{if (overall_chamber_temperature >= 40)}\n\n M145 P1 ; set airduct mode to heating mode for heating\n M106 P2 S0 ; turn off auxiliary fan\n M106 P3 S0 ; turn off chamber fan\n\n{else}\n M145 P0 ; set airduct mode to cooling mode for cooling\n M106 P2 S178 ; turn on auxiliary fan for cooling\n M106 P3 S127 ; turn on chamber fan for cooling\n\n M1002 gcode_claim_action : 29\n M191 S0 ; wait for chamber temp\n M106 P2 S0 ; turn off auxiliary fan\n {if (min_vitrification_temperature <= 50)}\n {if (nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.2)}\n M142 P1 R30 S35 T40 U0.3 V0.5 W0.8 O40 ; set PLA/TPU ND0.2 chamber autocooling\n {else}\n M142 P1 R30 S40 T45 U0.3 V0.5 W0.8 O45; set PLA/TPU ND0.4 chamber autocooling\n {endif}\n {else}\n {if (!is_all_bbl_filament)}\n M142 P1 R35 S40 T45 U0.3 V0.5 W0.8 O45 L1 ; set third-party PETG chamber autocooling\n {else}\n {if (nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.2)}\n M142 P1 R35 S45 T50 U0.3 V0.5 W0.8 O50 L1 ; set PETG ND0.2 chamber autocooling\n {else}\n M142 P1 R35 S50 T55 U0.3 V0.5 W0.8 O55 L1 ; set PETG ND0.4 chamber autocooling\n {endif}\n {endif}\n {endif}\n{if(cooling_filter_enabled)}\nM145.2 P0 F0\n{else}\nM145.2 P0 F1\n{endif}\n{endif}\n;==== set airduct mode ====\n\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\n;===== first homing start =====\nM1002 gcode_claim_action : 13\n\nM640 S\nM640.1 R\nM641\nG28 X T300\nT1000\n\nG150.3\nM972 S24 P0 T2000 ; live-view camera foolproof\nM972 S46 P0 T5000 ; vortek anti-collision\nM640.1 S\nM640.4\n{if (first_non_support_filaments[0] != -1)}\nM640 S\nM640.8 T A{first_non_support_filaments[0]} H{first_non_support_hotend[0]}\nM640.7 L\nM641\n{endif}\n\n\n{if wipe_tower_center_pos_valid}\n M620.14 X[wipe_tower_center_pos_x] Y[wipe_tower_center_pos_y]\n{else}\n M620.14 X95.5 Y336\n{endif}\n\n\nG150.1 F18000 ; wipe mouth to avoid filament stick to heatbed\nG150.3 F18000\nM400 P200\n\nM1002 gcode_claim_action : 74 ; Heatbed surface foreign object detection\nM104 S0\n{if curr_bed_type==\"Textured PEI Plate\"}\nM972 S26 P0 C0\n{else}\nM972 S36 P0 C0 X1\n{endif}\nM972 S35 P0 C0\n\nM972 S41 P0 T5000 ; trash can anti-collision\n\nM1009 Q1 L1\nG91\nG380 S2 Z30 F1200 ; lower heatbed to move toolhead\nG90\nG1 X175 Y160 F30000\nG28 Z P0 T250\nM1009 Q1 L0\n\n\n;===== first homing end =====\n\n;===== detection start =====\n\nM1002 judge_flag build_plate_detect_flag\nM104 S0\nM622 S1\n ;M1002 gcode_claim_action : 11 ; Indentifying build plate type\n M972 S19 P0 C0 ; heatbed presence detection\n M972 S31 P0 T5000 ; toolhead camera dirty detection\n ;M1002 gcode_claim_action : 73 ; Build plate alignment detection\n M972 S34 P0 T5000 ; heatbed plate offset detection\nM623\n\nM1002 gcode_claim_action : 72 ; Hotend Type Detection\nT1001\nM972 S14 P0 T5000 ; nozzle type detection\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_filament_id]} T{filament_map[initial_no_support_filament_id] % 2} ; rise temp in advance\n\nG151 P{filament_map[initial_no_support_filament_id] % 2} M ; plug the heat nozzle\n\n{if max_print_z >= 145}\nM1002 gcode_claim_action : 75 ; Heatbed underside foreign object detection\nG3811 Z{max_print_z} ; Detect obstacles at the bottom of the heated bed\n{endif}\n\n;===== detection end =====\n\nM400\n;M73 P99\n\n;===== prepare print temperature and material ==========\nM400\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on input shaping\n\nG29.2 S0 ; avoid invalid abl data\n\n{if ((filament_type[initial_no_support_filament_id] == \"PLA\") || (filament_type[initial_no_support_filament_id] == \"PLA-CF\") || (filament_type[initial_no_support_filament_id] == \"PETG\")) && (nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.2)}\nM620.10 A0 F74.8347 H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} T{flush_temperatures[initial_no_support_filament_id]} P{nozzle_temperature_initial_layer[initial_no_support_filament_id]} S1\nM620.10 A1 F74.8347 H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} T{flush_temperatures[initial_no_support_filament_id]} P{nozzle_temperature_initial_layer[initial_no_support_filament_id]} S1\n{else}\nM620.10 A0 F{flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60*0.8} H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} T{flush_temperatures[initial_no_support_filament_id]} P{nozzle_temperature_initial_layer[initial_no_support_filament_id]} S1\nM620.10 A1 F{flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60*0.8} H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} T{flush_temperatures[initial_no_support_filament_id]} P{nozzle_temperature_initial_layer[initial_no_support_filament_id]} S1\n{endif}\n\nM620.11 P1 I[initial_no_support_filament_id] B[initial_no_support_hotend] E0\n\n{if long_retraction_when_ec }\nM620.11 K1 I[initial_no_support_filament_id] B[initial_no_support_hotend] R{retraction_distance_when_ec} F{max((flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60), 200)}\n{else}\nM620.11 K0 I[initial_no_support_filament_id] B[initial_no_support_hotend] R0\n{endif}\n\nM628 S1\n{if filament_type[initial_no_support_filament_id] == \"TPU\"}\n M620.11 S0 L0 I[initial_no_support_filament_id] B[initial_no_support_hotend] E-{retraction_distances_when_cut[initial_no_support_filament_id]} F{flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60}\n{else}\n{if (filament_type[initial_no_support_filament_id] == \"PA\") || (filament_type[initial_no_support_filament_id] == \"PA-GF\")}\n M620.11 S1 L0 I[initial_no_support_filament_id] B[initial_no_support_hotend] R4 D2 E-{retraction_distances_when_cut[initial_no_support_filament_id]} F{flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60}\n{else}\n M620.11 S1 L0 I[initial_no_support_filament_id] B[initial_no_support_hotend] R10 D8 E-{retraction_distances_when_cut[initial_no_support_filament_id]} F{flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60}\n{endif}\n{endif}\nM629\n\nM620 S[initial_no_support_filament_id]A H[initial_no_support_hotend] ; switch material if AMS exist\nM1002 gcode_claim_action : 4\nM1002 set_filament_type:UNKNOWN\nM400\nT[initial_no_support_filament_id] H[initial_no_support_hotend]\nM400\nM628 S0\nM629\nM400\nM1002 set_filament_type:{filament_type[initial_no_support_filament_id]}\nM621 S[initial_no_support_filament_id]A\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_filament_id]}\nM400\nM106 P1 S0\n\nG91\nG1 Y-16 F60000\nG90\n\nG29.2 S1\n;===== prepare print temperature and material ==========\n\n\nM400\n;M73 P99\n\n;===== xy ofst cali start =====\n\nM1002 judge_flag auto_cali_toolhead_offset_flag\n\nM622 J2\n M1002 gcode_claim_action : 54\n M190 D[bed_temperature_initial_layer_single]\n\n M1002 gcode_claim_action : 39\n M620 D[initial_no_support_hotend]\n G383.3 U140 L{initial_no_support_filament_id}\nM623\n\nM622 J1\n M1002 gcode_claim_action : 54\n M190 D[bed_temperature_initial_layer_single]\n\n M1002 gcode_claim_action : 39\n M620 D[initial_no_support_hotend]\n G383 O2 U140 L{initial_no_support_filament_id}\nM623\n\n;===== xy ofst cali end =====\n\n;===== start to heat heatbed & hotend==========\n\n M1002 set_filament_type:{filament_type[initial_no_support_filament_id]}\n G150.3\n M104 S{nozzle_temperature_initial_layer[initial_no_support_filament_id]}\n M140 S[bed_temperature_initial_layer_single]\n\n ;===== set chamber temperature ==========\n {if (overall_chamber_temperature >= 40)}\n M145 P1 ; set airduct mode to heating mode\n M141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n {endif}\n ;===== set chamber temperature ==========\n\n;===== start to heat heatbead & hotend==========\n\n\n\nM400\n;M73 P99\n\n;===== auto extrude cali start =========================\nM975 S1\nM1002 judge_flag extrude_cali_flag\n\nM622 J0\n M983.3 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4} A0.4 ; cali dynamic extrusion compensation\nM623\n\nM622 J1\n M1002 set_filament_type:{filament_type[initial_no_support_filament_id]}\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_no_support_filament_id]}\n\n G90\n M83\n M983.3 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4} A0.4 ; cali dynamic extrusion compensation\n\n M400\n M106 P1 S255\n M400 S5\n M106 P1 S0\n G150.3\nM623\n\nM622 J2\n M1002 set_filament_type:{filament_type[initial_no_support_filament_id]}\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_no_support_filament_id]}\n\n G90\n M83\n M983.3 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4} A0.4 ; cali dynamic extrusion compensation\n\n M400\n M106 P1 S255\n M400 S5\n M106 P1 S0\n G150.3\nM623\n\n;===== auto extrude cali end =========================\n\n{if filament_type[initial_no_support_filament_id] == \"TPU\"}\n G150.2\n G150.1\n G150.2\n G150.1\n G150.2\n G150.1\n{else}\n G150.3\n M106 P1 S0\n M400 S2\n M109 S{nozzle_temperature[initial_no_support_filament_id]} ; wait tmpr to extrude\n M83\n {if(nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.8)}\n G1 E60 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n {else}\n G1 E45 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n {endif}\n G1 E-3 F1800\n M400 P500\n G150.2\n G150.1\n{endif}\n\nG91\nG1 Y-16 F12000 ; move away from the trash bin\nG90\n\nM400\n;M73 P99\n\n;===== wipe right nozzle start =====\n\nM1002 gcode_claim_action : 14\n G150 T{nozzle_temperature_initial_layer[initial_no_support_filament_id]}\n {if (overall_chamber_temperature >= 40)}\n G150 T{nozzle_temperature_initial_layer[initial_no_support_filament_id] - 80}\n {endif}\nM106 S255 ; turn on fan to cool the nozzle\n\n;===== wipe left nozzle end =====\n\nM400\n;M73 P99\n\nM1002 judge_flag auto_cali_toolhead_offset_flag\nM622 J0\n G91\n G1 Z5 F1200\n G90\n M1012.7\n G383.7 U140 J0\nM623\n\n{if (overall_chamber_temperature >= 40)}\n M1002 gcode_claim_action : 49\n M191 S[overall_chamber_temperature] ; wait for chamber temp\n{endif}\n\nM400\n;M73 P99\n\n;===== bed leveling ==================================\n\nM1002 judge_flag g29_before_print_flag\n\nM190 S[bed_temperature_initial_layer_single]; ensure bed temp\nM109 S140 A\nM106 S0 ; turn off fan , too noisy\n\nG91\nG1 Z10 F1200\n{if (first_non_support_filaments[0] != -1) && filament_type[initial_no_support_filament_id] != \"TPU\"}\nM640 S\nM640.7 U\nM640.7 L\nM640.2 R1\nM641\n{endif}\nG90\nG1 X175 Y160 F30000\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29.20 A3\n G29 A1 O X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]} R\n M400\nM623\n\nM622 J2\n M1002 gcode_claim_action : 1\n {if has_tpu_in_first_layer}\n G29.20 A3\n G29 A1 O X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]} R\n {else}\n G29.20 A4\n G29 A2 O X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]} R\n {endif}\n M400\nM623\n\nM622 J0\n G28 R\nM623\n\n;===== bed leveling end ================================\n\nG39.1 ; cali nozzle wrapped detection pos\n\nG90\nG1 Z5 F1200\nG1 X270 Y-0.5 F60000\nG28.140 S0 ; cali pre-extrude z pos\n\n;============switch again==================\nM211 X0 Y0 Z0 ;turn off soft endstop\nG91\nG1 Z6 F1200\nG90\nM1002 set_filament_type:{filament_type[initial_no_support_filament_id]}\nM620 S[initial_no_support_filament_id]A H[initial_no_support_hotend]\nM400\nT[initial_no_support_filament_id] H[initial_no_support_hotend]\nM400\nM628 S0\nM629\nM400\nM621 S[initial_no_support_filament_id]A\n\n;============switch again==================\n\nM400\n;M73 P99\n\nM141 S[overall_chamber_temperature]\n\n;===== mech mode sweep start =====\n M1002 gcode_claim_action : 3\n\n G90\n G1 Z5 F1200\n G1 X165 Y160 F20000\n M400 P200\n\n M970.3 Q1 A5 K0 O1\n M974 Q1 S2 P0\n\n M970.3 Q0 A5 K0 O1\n M974 Q0 S2 P0\n\n M970.2 Q2 K0 W38 Z0.01\n M974 Q2 S2 P0\n\n M975 S1\n;===== mech mode sweep end =====\n\n;===== wait temperature reaching the reference value =======\n\nM140 S[bed_temperature_initial_layer_single]\nM190 S[bed_temperature_initial_layer_single]\n\n ;========turn off light and fans =============\n M960 S1 P0 ; turn off laser\n M960 S2 P0 ; turn off laser\n M106 S0 ; turn off fan\n M106 P2 S0 ; turn off big fan\n ;==== set ext toodhead cooling fan ====\n {if (min_vitrification_temperature <= 50)}\n M106 P9 S255\n {endif}\n ;============set motor current==================\n M400 S1\n\n;===== wait temperature reaching the reference value =======\n\nM400\n;M73 P99\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n {if curr_bed_type==\"Textured PEI Plate\"}\n {if nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.2}\n G29.1 Z{-0.01} ; for Textured PEI Plate\n {else}\n G29.1 Z{-0.02} ; for Textured PEI Plate\n {endif}\n {else}\n {if nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.2}\n G29.1 Z{0.01}\n {endif}\n {endif}\nG150.1\n\nM975 S1 ; turn on mech mode supression\nM983.4 S1 ; turn on deformation compensation\nG29.2 S1 ; turn on pos comp\nG29.7 S1\n\nG90\nG1 Z5 F1200\nG1 Y295 F30000\nG1 Y265 F18000\n\n;===== nozzle load line ===============================\n G29.2 S1 ; ensure z comp turn on\n G90\n M83\n G1 Z5 F1200\n G1 X270 Y-0.5 F60000\n G28.14 R0\n G29.2 S0\n G91\n G1 Z0.8 F1200\n G90\n G1 X250 F60000\n M104 S{nozzle_temperature_initial_layer[initial_no_support_filament_id]}\n\n ========== record data ==========\n M1026\n M1012.8\n M1012.9\n G29.9\n ========== record data ==========\n\n M400 P50\n M500 D1\n M400 S3\n M109 S{nozzle_temperature_initial_layer[initial_no_support_filament_id]}\n M83\n{if nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.8}\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n{endif}\n{if (filament_type[initial_no_support_filament_id] == \"TPU\")}\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n{endif}\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n G1 X290 E10 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n G91\n G3 Z0.4 I1.217 J0 P1 F60000\n G90\n M83\n G29.2 S1 ; ensure z comp turn on\n;===== noozle load line end ===========================\n\nM400\n;M73 P99\n\nM993 A1 B1 C1 ; nozzle cam detection allowed.\n\n{if (filament_type[initial_no_support_filament_id] == \"TPU\")}\nM1015.3 S1;enable tpu clog detect\n{else}\nM1015.3 S0;disable tpu clog detect\n{endif}\n\n{if (filament_type[initial_no_support_filament_id] == \"PLA\") || (filament_type[initial_no_support_filament_id] == \"PETG\")\n || (filament_type[initial_no_support_filament_id] == \"PLA-CF\") || (filament_type[initial_no_support_filament_id] == \"PETG-CF\")}\nM1015.4 S1 K1 H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} ;enable E air printing detect\n{else}\nM1015.4 S0 K0 H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} ;disable E air printing detect\n{endif}\n\nM620.6 I[initial_no_support_filament_id] H[initial_no_support_hotend] W1 ;enable ams air printing detect\nM620 O1\n\nM211 Z1\nG29.99\nM1002 gcode_claim_action : 0\nM400\n" + "machine_start_gcode": ";===== machine: H2C =========================\n;===== date: 20260608 =====================\n\n;M1002 set_flag extrude_cali_flag=1\n;M1002 set_flag g29_before_print_flag=1\n;M1002 set_flag auto_cali_toolhead_offset_flag=1\n;M1002 set_flag build_plate_detect_flag=1\n\nM993 A0 B0 C0 ; nozzle cam detection not allowed.\n\nM400\n;M73 P99\n\nM960 S10 P1 ; ext fan led\n\n;=====printer start sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A53 B9 L99 C53 D9 M99 E53 F9 N99\nM1006 A56 B9 L99 C56 D9 M99 E56 F9 N99\nM1006 A61 B9 L99 C61 D9 M99 E61 F9 N99\nM1006 A53 B9 L99 C53 D9 M99 E53 F9 N99\nM1006 A56 B9 L99 C56 D9 M99 E56 F9 N99\nM1006 A61 B18 L99 C61 D18 M99 E61 F18 N99\nM1006 W\n;=====printer start sound ===================\n\n;===== reset machine status =================\nM204 S10000\nM630 S0 P0\n\nG90\nM17 D ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM1002 set_gcode_claim_speed_level 5 ;Reset speed level\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nG29.1 Z{+0.0} ; clear z-trim value first\nM983.1 M1\nM901 D4\nM481 S0 ; turn off cutter pos comp\nG28.140 D0; reset pre-extrude z pos\n;===== reset machine status =================\n\nM620 M ;enable remap\nM620 N ;enable hotend remap\nM620 T0 ;print tmpr\nM620 T1 ;sn -> pos\nM620 T2 ;filament_id\n\n;===== start to heat heatbed & hotend==========\n\n M104 O-80 A\n M140 D[bed_temperature_initial_layer_single]\n\n;===== start to heat heatbead & hotend==========\n\n;===== avoid end stop =================\nG91\nG380 S2 Z42 F1200\nG380 S2 Z-12 F1200\nG90\n;===== avoid end stop =================\n\n;==== set airduct mode ====\n\n{if (overall_chamber_temperature >= 40)}\n\n M145 P1 ; set airduct mode to heating mode for heating\n M106 P2 S0 ; turn off auxiliary fan\n M106 P3 S0 ; turn off chamber fan\n\n{else}\n M145 P0 ; set airduct mode to cooling mode for cooling\n M106 P2 S178 ; turn on auxiliary fan for cooling\n M106 P3 S127 ; turn on chamber fan for cooling\n\n M1002 gcode_claim_action : 29\n M191 S0 ; wait for chamber temp\n M106 P2 S0 ; turn off auxiliary fan\n {if (min_vitrification_temperature <= 50)}\n {if (nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.2)}\n M142 P1 R30 S35 T40 U0.3 V0.5 W0.8 O40 ; set PLA/TPU ND0.2 chamber autocooling\n {else}\n M142 P1 R30 S40 T45 U0.3 V0.5 W0.8 O45; set PLA/TPU ND0.4 chamber autocooling\n {endif}\n {else}\n {if (!is_all_bbl_filament)}\n M142 P1 R35 S40 T45 U0.3 V0.5 W0.8 O45 L1 ; set third-party PETG chamber autocooling\n {else}\n {if (nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.2)}\n M142 P1 R35 S45 T50 U0.3 V0.5 W0.8 O50 L1 ; set PETG ND0.2 chamber autocooling\n {else}\n M142 P1 R35 S50 T55 U0.3 V0.5 W0.8 O55 L1 ; set PETG ND0.4 chamber autocooling\n {endif}\n {endif}\n {endif}\n{if(cooling_filter_enabled)}\nM145.2 P0 F0\n{else}\nM145.2 P0 F1\n{endif}\n{endif}\n;==== set airduct mode ====\n\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\n;===== first homing start =====\nM1002 gcode_claim_action : 13\n\nM640 S\nM640.1 R\nM641\nG28 X T300\nT1000\n\nG150.3\nM972 S24 P0 T2000 ; live-view camera foolproof\nM972 S46 P0 T5000 ; vortek anti-collision\nM640.1 S\nM640.4\n{if (first_non_support_filaments[0] != -1)}\nM640 S\nM640.8 T A{first_non_support_filaments[0]} H{first_non_support_hotend[0]}\nM640.7 L\nM641\n{endif}\n\n\n{if wipe_tower_center_pos_valid}\n M620.14 X[wipe_tower_center_pos_x] Y[wipe_tower_center_pos_y]\n{else}\n M620.14 X95.5 Y336\n{endif}\n\n\nG150.1 F18000 ; wipe mouth to avoid filament stick to heatbed\nG150.3 F18000\nM400 P200\n\nM1002 gcode_claim_action : 74 ; Heatbed surface foreign object detection\nM104 S0\n{if curr_bed_type==\"Textured PEI Plate\"}\nM972 S26 P0 C0\n{else}\nM972 S36 P0 C0 X1\n{endif}\nM972 S35 P0 C0\n\nM972 S41 P0 T5000 ; trash can anti-collision\n\nM1009 Q1 L1\nG91\nG380 S2 Z30 F1200 ; lower heatbed to move toolhead\nG90\nG1 X175 Y160 F30000\nG28 Z P0 T250\nM1009 Q1 L0\n\n\n;===== first homing end =====\n\n;===== detection start =====\n\nM1002 judge_flag build_plate_detect_flag\nM104 S0\nM622 S1\n ;M1002 gcode_claim_action : 11 ; Indentifying build plate type\n M972 S19 P0 C0 ; heatbed presence detection\n M972 S31 P0 T5000 ; toolhead camera dirty detection\n ;M1002 gcode_claim_action : 73 ; Build plate alignment detection\n M972 S34 P0 T5000 ; heatbed plate offset detection\nM623\n\nM1002 gcode_claim_action : 72 ; Hotend Type Detection\nT1001\nM972 S14 P0 T5000 ; nozzle type detection\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_filament_id]} T{filament_map[initial_no_support_filament_id] % 2} ; rise temp in advance\n\nG151 P{filament_map[initial_no_support_filament_id] % 2} M ; plug the heat nozzle\n\n{if max_print_z >= 145}\nM1002 gcode_claim_action : 75 ; Heatbed underside foreign object detection\nG3811 Z{max_print_z} ; Detect obstacles at the bottom of the heated bed\n{endif}\n\n;===== detection end =====\n\nM400\n;M73 P99\n\n;===== prepare print temperature and material ==========\nM400\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on input shaping\n\nG29.2 S0 ; avoid invalid abl data\n\n{if ((filament_type[initial_no_support_filament_id] == \"PLA\") || (filament_type[initial_no_support_filament_id] == \"PLA-CF\") || (filament_type[initial_no_support_filament_id] == \"PETG\")) && (nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.2)}\nM620.10 A0 F74.8347 H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} T{flush_temperatures[initial_no_support_filament_id]} P{nozzle_temperature_initial_layer[initial_no_support_filament_id]} S1\nM620.10 A1 F74.8347 H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} T{flush_temperatures[initial_no_support_filament_id]} P{nozzle_temperature_initial_layer[initial_no_support_filament_id]} S1\n{else}\nM620.10 A0 F{flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60*0.8} H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} T{flush_temperatures[initial_no_support_filament_id]} P{nozzle_temperature_initial_layer[initial_no_support_filament_id]} S1\nM620.10 A1 F{flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60*0.8} H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} T{flush_temperatures[initial_no_support_filament_id]} P{nozzle_temperature_initial_layer[initial_no_support_filament_id]} S1\n{endif}\n\nM620.11 P1 I[initial_no_support_filament_id] B[initial_no_support_hotend] E0\n\n{if long_retraction_when_ec }\nM620.11 K1 I[initial_no_support_filament_id] B[initial_no_support_hotend] R{retraction_distance_when_ec} F{max((flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60), 200)}\n{else}\nM620.11 K0 I[initial_no_support_filament_id] B[initial_no_support_hotend] R0\n{endif}\n\nM628 S1\n{if filament_type[initial_no_support_filament_id] == \"TPU\"}\n M620.11 S0 L0 I[initial_no_support_filament_id] B[initial_no_support_hotend] E-{retraction_distances_when_cut[initial_no_support_filament_id]} F{flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60}\n{else}\n{if (filament_type[initial_no_support_filament_id] == \"PA\") || (filament_type[initial_no_support_filament_id] == \"PA-GF\")}\n M620.11 S1 L0 I[initial_no_support_filament_id] B[initial_no_support_hotend] R4 D2 E-{retraction_distances_when_cut[initial_no_support_filament_id]} F{flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60}\n{else}\n M620.11 S1 L0 I[initial_no_support_filament_id] B[initial_no_support_hotend] R10 D8 E-{retraction_distances_when_cut[initial_no_support_filament_id]} F{flush_volumetric_speeds[initial_no_support_filament_id]/2.4053*60}\n{endif}\n{endif}\nM629\n\nM620 S[initial_no_support_filament_id]A H[initial_no_support_hotend] ; switch material if AMS exist\nM1002 gcode_claim_action : 4\nM1002 set_filament_type:UNKNOWN\nM400\nT[initial_no_support_filament_id] H[initial_no_support_hotend]\nM400\nM628 S0\nM629\nM400\nM1002 set_filament_type:{filament_type[initial_no_support_filament_id]}\nM621 S[initial_no_support_filament_id]A\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_filament_id]}\nM400\nM106 P1 S0\n\nG91\nG1 Y-16 F60000\nG90\n\nG29.2 S1\n;===== prepare print temperature and material ==========\n\n\nM400\n;M73 P99\n\n;===== xy ofst cali start =====\n\nM1002 judge_flag auto_cali_toolhead_offset_flag\n\nM622 J2\n M1002 gcode_claim_action : 54\n M190 D[bed_temperature_initial_layer_single]\n\n M1002 gcode_claim_action : 39\n M620 D[initial_no_support_hotend]\n G383.3 U140 L{initial_no_support_filament_id}\nM623\n\nM622 J1\n M1002 gcode_claim_action : 54\n M190 D[bed_temperature_initial_layer_single]\n\n M1002 gcode_claim_action : 39\n M620 D[initial_no_support_hotend]\n G383 O2 U140 L{initial_no_support_filament_id}\nM623\n\n;===== xy ofst cali end =====\n\n;===== start to heat heatbed & hotend==========\n\n M1002 set_filament_type:{filament_type[initial_no_support_filament_id]}\n G150.3\n M104 S{nozzle_temperature_initial_layer[initial_no_support_filament_id]}\n M140 S[bed_temperature_initial_layer_single]\n\n ;===== set chamber temperature ==========\n {if (overall_chamber_temperature >= 40)}\n M145 P1 ; set airduct mode to heating mode\n M141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n {endif}\n ;===== set chamber temperature ==========\n\n;===== start to heat heatbead & hotend==========\n\n\n\nM400\n;M73 P99\n\n;===== auto extrude cali start =========================\nM975 S1\nM1002 judge_flag extrude_cali_flag\n\nM622 J0\n M983.3 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4} A0.4 ; cali dynamic extrusion compensation\nM623\n\nM622 J1\n M1002 set_filament_type:{filament_type[initial_no_support_filament_id]}\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_no_support_filament_id]}\n\n G90\n M83\n M983.3 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4} A0.4 ; cali dynamic extrusion compensation\n\n M400\n M106 P1 S255\n M400 S5\n M106 P1 S0\n G150.3\nM623\n\nM622 J2\n M1002 set_filament_type:{filament_type[initial_no_support_filament_id]}\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_no_support_filament_id]}\n\n G90\n M83\n M983.3 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4} A0.4 ; cali dynamic extrusion compensation\n\n M400\n M106 P1 S255\n M400 S5\n M106 P1 S0\n G150.3\nM623\n\n;===== auto extrude cali end =========================\n\n{if filament_type[initial_no_support_filament_id] == \"TPU\"}\n G150.2\n G150.1\n G150.2\n G150.1\n G150.2\n G150.1\n{else}\n G150.3\n M106 P1 S0\n M400 S2\n M109 S{nozzle_temperature[initial_no_support_filament_id]} ; wait tmpr to extrude\n M83\n {if(nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.8)}\n G1 E60 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n {else}\n G1 E45 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n {endif}\n G1 E-3 F1800\n M400 P500\n G150.2\n G150.1\n{endif}\n\nG91\nG1 Y-16 F12000 ; move away from the trash bin\nG90\n\nM400\n;M73 P99\n\n;===== wipe right nozzle start =====\n\nM1002 gcode_claim_action : 14\n G150 T{nozzle_temperature_initial_layer[initial_no_support_filament_id]}\n {if (overall_chamber_temperature >= 40)}\n G150 T{nozzle_temperature_initial_layer[initial_no_support_filament_id] - 80}\n {endif}\nM106 S255 ; turn on fan to cool the nozzle\n\n;===== wipe left nozzle end =====\n\nM400\n;M73 P99\n\nM1002 judge_flag auto_cali_toolhead_offset_flag\nM622 J0\n G91\n G1 Z5 F1200\n G90\n M1012.7\n G383.7 U140 J0\nM623\n\n{if (overall_chamber_temperature >= 40)}\n M1002 gcode_claim_action : 49\n M191 S[overall_chamber_temperature] ; wait for chamber temp\n{endif}\n\nM400\n;M73 P99\n\n;===== bed leveling ==================================\n\nM1002 judge_flag g29_before_print_flag\n\nM190 S[bed_temperature_initial_layer_single]; ensure bed temp\nM109 S140 A\nM106 S0 ; turn off fan , too noisy\n\nG91\nG1 Z10 F1200\n{if (first_non_support_filaments[0] != -1) && filament_type[initial_no_support_filament_id] != \"TPU\"}\nM640 S\nM640.7 U\nM640.7 L\nM640.2 R1\nM641\n{endif}\nG90\nG1 X175 Y160 F30000\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29.20 A3\n G29 A1 O X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]} R\n M400\nM623\n\nM622 J2\n M1002 gcode_claim_action : 1\n {if has_tpu_in_first_layer}\n G29.20 A3\n G29 A1 O X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]} R\n {else}\n G29.20 A4\n G29 A2 O X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]} R\n {endif}\n M400\nM623\n\nM622 J0\n G28 R\nM623\n\n;===== bed leveling end ================================\n\nG39.1 ; cali nozzle wrapped detection pos\n\nG90\nG1 Z5 F1200\nG1 X270 Y-0.5 F60000\nG28.140 S0 ; cali pre-extrude z pos\n\n;============switch again==================\nM211 X0 Y0 Z0 ;turn off soft endstop\nG91\nG1 Z6 F1200\nG90\nM1002 set_filament_type:{filament_type[initial_no_support_filament_id]}\nM620 S[initial_no_support_filament_id]A H[initial_no_support_hotend]\nM400\nT[initial_no_support_filament_id] H[initial_no_support_hotend]\nM400\nM628 S0\nM629\nM400\nM621 S[initial_no_support_filament_id]A\n\n;============switch again==================\n\nM400\n;M73 P99\n\nM141 S[overall_chamber_temperature]\n\n;===== mech mode sweep start =====\n M1002 gcode_claim_action : 3\n\n G90\n G1 Z5 F1200\n G1 X165 Y160 F20000\n M400 P200\n\n M970.3 Q1 A5 K0 O1\n M974 Q1 S2 P0\n\n M970.3 Q0 A5 K0 O1\n M974 Q0 S2 P0\n\n M970.2 Q2 K0 W38 Z0.01\n M974 Q2 S2 P0\n\n M975 S1\n;===== mech mode sweep end =====\n\n;===== wait temperature reaching the reference value =======\n\nM140 S[bed_temperature_initial_layer_single]\nM190 S[bed_temperature_initial_layer_single]\n\n ;========turn off light and fans =============\n M960 S1 P0 ; turn off laser\n M960 S2 P0 ; turn off laser\n M106 S0 ; turn off fan\n M106 P2 S0 ; turn off big fan\n ;==== set ext toodhead cooling fan ====\n {if (min_vitrification_temperature <= 50)}\n M106 P9 S255\n {endif}\n ;============set motor current==================\n M400 S1\n\n;===== wait temperature reaching the reference value =======\n\nM400\n;M73 P99\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n {if curr_bed_type==\"Textured PEI Plate\"}\n {if nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.2}\n G29.1 Z{-0.01} ; for Textured PEI Plate\n {else}\n G29.1 Z{-0.02} ; for Textured PEI Plate\n {endif}\n {else}\n {if nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.2}\n G29.1 Z{0.01}\n {endif}\n {endif}\nG150.1\n\nM975 S1 ; turn on mech mode supression\nM983.4 S1 ; turn on deformation compensation\nG29.2 S1 ; turn on pos comp\nG29.7 S1\n\nG90\nG1 Z5 F1200\nG1 Y295 F30000\nG1 Y265 F18000\n\n;===== nozzle load line ===============================\n G29.2 S1 ; ensure z comp turn on\n G90\n M83\n G1 Z5 F1200\n G1 X270 Y-0.5 F60000\n G28.14 R0\n G29.2 S0\n G91\n G1 Z0.8 F1200\n G90\n G1 X250 F60000\n M104 S{nozzle_temperature_initial_layer[initial_no_support_filament_id]}\n\n ;========== record data ==========\n M1026\n M1012.8\n M1012.9\n G29.9\n ;========== record data ==========\n\n M400 P50\n M500 D1\n M400 S3\n M109 S{nozzle_temperature_initial_layer[initial_no_support_filament_id]}\n M83\n{if nozzle_diameter_at_nozzle_id[initial_nozzle_id] == 0.8}\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n{endif}\n{if (filament_type[initial_no_support_filament_id] == \"TPU\")}\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n{endif}\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n G1 X290 E10 F{filament_max_volumetric_speed[initial_no_support_filament_id]/2.4053*60}\n G91\n G3 Z0.4 I1.217 J0 P1 F60000\n G90\n M83\n G29.2 S1 ; ensure z comp turn on\n;===== noozle load line end ===========================\n\nM400\n;M73 P99\n\nM993 A1 B1 C1 ; nozzle cam detection allowed.\n\n{if (filament_type[initial_no_support_filament_id] == \"TPU\")}\nM1015.3 S1;enable tpu clog detect\n{else}\nM1015.3 S0;disable tpu clog detect\n{endif}\n\n{if (filament_type[initial_no_support_filament_id] == \"PLA\") || (filament_type[initial_no_support_filament_id] == \"PETG\")\n || (filament_type[initial_no_support_filament_id] == \"PLA-CF\") || (filament_type[initial_no_support_filament_id] == \"PETG-CF\")}\nM1015.4 S1 K1 H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} ;enable E air printing detect\n{else}\nM1015.4 S0 K0 H{nozzle_diameter_at_nozzle_id[initial_nozzle_id]} ;disable E air printing detect\n{endif}\n\nM620.6 I[initial_no_support_filament_id] H[initial_no_support_hotend] W1 ;enable ams air printing detect\nM620 O1\n\nM211 Z1\nG29.99\nM1002 gcode_claim_action : 0\nM400\n" } From 1abd6649c750375ff1c09401aa1ac2339da11b7a Mon Sep 17 00:00:00 2001 From: ExPikaPaka Date: Mon, 12 Oct 2026 13:58:28 +0200 Subject: [PATCH 014/137] Put the UV orientation tests beside the projection tests They were appended at the end of test_texture_displacement.cpp, where every other open texture-displacement branch also appends, so the four of them cannot be merged in any order without a conflict in a file none of them really disagree about. Same tests, moved next to the patch-frame test they belong with. --- tests/libslic3r/test_texture_displacement.cpp | 630 +++++++++--------- 1 file changed, 315 insertions(+), 315 deletions(-) diff --git a/tests/libslic3r/test_texture_displacement.cpp b/tests/libslic3r/test_texture_displacement.cpp index 37745beaa0..03f27661bc 100644 --- a/tests/libslic3r/test_texture_displacement.cpp +++ b/tests/libslic3r/test_texture_displacement.cpp @@ -1652,6 +1652,321 @@ TEST_CASE("Per-corner LSCM UVs give each triangle its own island's placement", " CHECK(differs); } +// --------------------------------------------------------------------------------------------- +// UV orientation: which way up a texture lands on the model. +// +// v = 0 is the height map's *first* pixel row, i.e. its top (DecodedHeightTexture::sample(), and +// the UV editor negates Y on screen for the same reason). So "the image is the right way up" is the +// statement that the row a point samples gets *lower* as the point moves up the face, and "it is +// not left-right mirrored" is that the column gets higher as the point moves to the right of a +// viewer standing outside the model. Both are measured below by sampling a ramp whose value says +// which row (or column) it came from, which settles the question without having to reason about the +// uv transform at all. + +static constexpr int RAMP_N = 64; // the ramp texture's size, in texels +static constexpr float RAMP_TILING = 40.f; // mm per tile +static constexpr float CUBE_HALF = 5.f; // half extent of the cube the probes walk over +// How far a probe steps off a face centre. Short on purpose: the cylindrical and spherical u is an +// arc length (angle * radius), so a long step also changes the radius, and that term swamps the +// angular one. It is symmetric about the face centre, so at a short step it cancels between the two +// readings a check compares. +static constexpr float RAMP_STEP = 1.f; +// What one step's worth of travel is in ramp rows: 2 * RAMP_STEP mm of separation, RAMP_N texels per +// RAMP_TILING mm. Halved as the margin a check demands, so "flat" cannot pass as either direction. +static constexpr double RAMP_MARGIN = RAMP_N * RAMP_STEP / RAMP_TILING; + +// A height map whose rows (or columns) carry a linear ramp: row r holds 3 + 4r, so the sampled +// height identifies the row. Built directly rather than through a PNG because these tests are about +// the projection, not the decoder - decode_height_texture() has its own tests. +static DecodedHeightTexture ramp_texture(bool by_row) +{ + DecodedHeightTexture t; + t.width = t.height = RAMP_N; + t.pixels.resize(size_t(RAMP_N) * size_t(RAMP_N)); + for (int y = 0; y < RAMP_N; ++y) + for (int x = 0; x < RAMP_N; ++x) + t.pixels[size_t(y) * size_t(RAMP_N) + size_t(x)] = uint8_t(3 + 4 * (by_row ? y : x)); + return t; +} + +// uv 0.5 at the cube's centre, and a tile wide enough that every point the probes visit stays well +// inside the one tile - so no reading is a wrapped-around neighbour of the one it is compared with. +static TextureDisplacementLayer ramp_layer(TextureProjectionMethod method) +{ + TextureDisplacementLayer layer; + layer.projection_method = method; + layer.tiling_scale = RAMP_TILING; + layer.offset = Vec2f(0.5f, 0.5f); + layer.depth_mm = 1.f; + return layer; +} + +// Which row (or column) of `ramp` the layer reads at `p`. Fractional, because a point between two +// texels reads the ramp between them; only the direction it moves in matters here. +static double ramp_index(const DecodedHeightTexture &ramp, const TextureDisplacementLayer &layer, const Vec3f &p, + const Vec3f &n, const Vec3f ¢er = Vec3f(Vec3f::Zero()), + const Vec3f &axis = Vec3f(Vec3f::UnitZ())) +{ + return (double(sample_layer_height(ramp, layer, p, n, center, axis, nullptr)) * 255.0 - 3.0) / 4.0; +} + +// How a viewer standing outside the model sees a face: their right, and their up. Up is world +Z on +// the four upright faces; on the top and bottom, where +Z is edge on, it is world +Y. +static void outside_viewer_frame(const Vec3f &n, Vec3f &right, Vec3f &up) +{ + up = (std::abs(n.z()) < 0.9f) ? Vec3f(0.f, 0.f, 1.f) : Vec3f(0.f, 1.f, 0.f); + right = Vec3f((-n).cross(up).normalized()); +} + +static const std::array, 6> CUBE_FACES = { { + { "+X", Vec3f(1.f, 0.f, 0.f) }, + { "-X", Vec3f(-1.f, 0.f, 0.f) }, + { "+Y", Vec3f(0.f, 1.f, 0.f) }, + { "-Y", Vec3f(0.f, -1.f, 0.f) }, + { "+Z", Vec3f(0.f, 0.f, 1.f) }, + { "-Z", Vec3f(0.f, 0.f, -1.f) }, +} }; + +TEST_CASE("the box projection lands a texture upright and unmirrored on all six faces of a cube", + "[TextureDisplacement]") +{ + const DecodedHeightTexture rows = ramp_texture(true); + const DecodedHeightTexture cols = ramp_texture(false); + const TextureDisplacementLayer layer = ramp_layer(TextureProjectionMethod::Triplanar); + + for (const auto &[name, n] : CUBE_FACES) { + DYNAMIC_SECTION("face " << name) + { + Vec3f right, up; + outside_viewer_frame(n, right, up); + const Vec3f centre = n * CUBE_HALF; + + // Upright: the row read near the top of the face is nearer the image's first row. + const double row_up = ramp_index(rows, layer, centre + up * RAMP_STEP, n); + const double row_down = ramp_index(rows, layer, centre - up * RAMP_STEP, n); + INFO("row at the top of the face " << row_up << ", at the bottom " << row_down); + CHECK(row_down - row_up > RAMP_MARGIN); + + // Unmirrored: the column read to the viewer's right is further into the image. Without a + // per-side sign this fails on exactly the three faces facing away - -X, +Y and -Z - which + // is the mirroring a bare v flip leaves behind. + const double col_left = ramp_index(cols, layer, centre - right * RAMP_STEP, n); + const double col_right = ramp_index(cols, layer, centre + right * RAMP_STEP, n); + INFO("column at the left of the face " << col_left << ", at the right " << col_right); + CHECK(col_right - col_left > RAMP_MARGIN); + } + } +} + +TEST_CASE("every projection method lands a texture upright on an upright face", "[TextureDisplacement]") +{ + const DecodedHeightTexture rows = ramp_texture(true); + // ViewProjected is one flat projection from the captured camera rather than a per-face map, so its + // "up" is the projector's own (view_project_up), which the default capture puts at +Y. + const auto method = GENERATE(TextureProjectionMethod::Triplanar, TextureProjectionMethod::Cylindrical, + TextureProjectionMethod::Spherical, TextureProjectionMethod::ViewProjected); + const TextureDisplacementLayer layer = ramp_layer(method); + + for (const auto &[name, n] : CUBE_FACES) { + // Only the four upright faces: on the top and bottom a cylinder's v is constant (they are its + // caps) and a sphere's is at an extremum (they are its poles), so neither says anything about + // which way up the image is. + if (std::abs(n.z()) > 0.9f) + continue; + DYNAMIC_SECTION("method " << int(method) << ", face " << name) + { + const Vec3f up = (method == TextureProjectionMethod::ViewProjected) ? layer.view_project_up : + Vec3f(0.f, 0.f, 1.f); + const Vec3f centre = n * CUBE_HALF; + const double row_up = ramp_index(rows, layer, centre + up * RAMP_STEP, n); + const double row_down = ramp_index(rows, layer, centre - up * RAMP_STEP, n); + INFO("row at the top " << row_up << ", at the bottom " << row_down); + CHECK(row_down - row_up > RAMP_MARGIN); + } + } +} + +TEST_CASE("the cylindrical and spherical wraps run left to right as seen from outside", "[TextureDisplacement]") +{ + const DecodedHeightTexture cols = ramp_texture(false); + const auto method = GENERATE(TextureProjectionMethod::Cylindrical, TextureProjectionMethod::Spherical); + const TextureDisplacementLayer layer = ramp_layer(method); + + for (const auto &[name, n] : CUBE_FACES) { + // The caps and poles are out, as above - u is undefined on the axis. So is whichever face the + // atan2 branch cut runs through, where u jumps from +pi to -pi: that is a real seam in both + // projections, and a reading taken across it compares two opposite sides of the model. + if (std::abs(n.z()) > 0.9f) + continue; + const bool on_the_cut = (method == TextureProjectionMethod::Cylindrical) ? (n.y() < -0.9f) : (n.x() < -0.9f); + if (on_the_cut) + continue; + DYNAMIC_SECTION("method " << int(method) << ", face " << name) + { + Vec3f right, up; + outside_viewer_frame(n, right, up); + const Vec3f centre = n * CUBE_HALF; + const double col_left = ramp_index(cols, layer, centre - right * RAMP_STEP, n); + const double col_right = ramp_index(cols, layer, centre + right * RAMP_STEP, n); + INFO("column at the left " << col_left << ", at the right " << col_right); + CHECK(col_right - col_left > RAMP_MARGIN); + } + } +} + +TEST_CASE("an unwrapped cube's flat charts are laid out the right way up", "[TextureDisplacement]") +{ + indexed_triangle_set cube = its_make_cube(2. * CUBE_HALF, 2. * CUBE_HALF, 2. * CUBE_HALF); + for (Vec3f &v : cube.vertices) + v -= Vec3f(CUBE_HALF, CUBE_HALF, CUBE_HALF); + + const PatchUnwrap unwrap = compute_patch_unwrap(cube, LSCM_DEFAULT_SEAM_ANGLE_DEG); + REQUIRE_FALSE(unwrap.empty()); + REQUIRE(unwrap.chart_count == 6); // one flat chart per face, cut at the 90-degree edges + + // Each chart carries one face. The four upright ones span world Z, and their v has to grow + // downwards like every other projection's - whatever the packing then did with the island. + int upright_charts = 0; + for (int c = 0; c < unwrap.chart_count; ++c) { + int top = -1, bottom = -1; + for (size_t i = 0; i < unwrap.uvs.size(); ++i) { + if (unwrap.vertex_chart[i] != c) + continue; + const float z = cube.vertices[size_t(unwrap.source_vertex[i])].z(); + if (top < 0 || z > cube.vertices[size_t(unwrap.source_vertex[size_t(top)])].z()) + top = int(i); + if (bottom < 0 || z < cube.vertices[size_t(unwrap.source_vertex[size_t(bottom)])].z()) + bottom = int(i); + } + REQUIRE(top >= 0); + REQUIRE(bottom >= 0); + const float v_top = unwrap.uvs[size_t(top)].y(), v_bottom = unwrap.uvs[size_t(bottom)].y(); + if (std::abs(v_top - v_bottom) < 1e-3f) + continue; // a cap: the whole chart is at one height, so it has no up + ++upright_charts; + DYNAMIC_SECTION("chart " << c) + { + INFO("v at the chart's topmost vertex " << v_top << ", at its bottommost " << v_bottom); + CHECK(v_bottom - v_top > 1.f); + } + } + CHECK(upright_charts == 4); // the four sides; the top and bottom faces are the caps skipped above +} + +TEST_CASE("project_planar agrees with the box projection's own axes", "[TextureDisplacement]") +{ + // The two express the same table in different shapes - one a pair of world axes for the GUI, the + // other the closed form the bake's hot path uses - so they are checked against each other here + // rather than left to drift apart. + const Vec3f p(2.f, -3.f, 7.f); + for (const auto &[name, n] : CUBE_FACES) { + DYNAMIC_SECTION("face " << name) + { + Vec3f u_axis, v_axis; + box_projection_axes(n, u_axis, v_axis); + const Vec2f planar = project_planar(p, n); + CHECK_THAT(planar.x(), WithinAbs(p.dot(u_axis), 1e-5f)); + CHECK_THAT(planar.y(), WithinAbs(p.dot(v_axis), 1e-5f)); + // Right-handed for a viewer outside the model: u to their right, v down, so u x v points + // into the surface. Getting this wrong is exactly what mirrors a face. + CHECK_THAT(u_axis.cross(v_axis).dot(n), WithinAbs(-1.f, 1e-5f)); + } + } +} + +// An image with a different value in each quadrant, so one bake says both which way up it landed +// and whether it came out mirrored. Distinct enough that a wrong quadrant cannot be mistaken for the +// right one: top-left 255, top-right 170, bottom-left 85, bottom-right 0. +static std::shared_ptr> make_quadrant_marker_png(size_t w = 32, size_t h = 32) +{ + std::vector pixels(w * h); + for (size_t y = 0; y < h; ++y) + for (size_t x = 0; x < w; ++x) + pixels[y * w + x] = (y < h / 2) ? ((x < w / 2) ? 255 : 170) : ((x < w / 2) ? 85 : 0); + const boost::filesystem::path tmp_path = boost::filesystem::temp_directory_path() + / boost::filesystem::unique_path("texdisp_test_%%%%%%%%.png"); + REQUIRE(Slic3r::png::write_gray_to_file(tmp_path.string(), w, h, pixels)); + + std::vector bytes; + { + std::ifstream ifs(tmp_path.string(), std::ios::binary); + bytes.assign(std::istreambuf_iterator(ifs), std::istreambuf_iterator()); + } + boost::system::error_code ec; + boost::filesystem::remove(tmp_path, ec); + + REQUIRE_FALSE(bytes.empty()); + return std::make_shared>(std::move(bytes)); +} + +TEST_CASE("baking an asymmetric image puts the top of the image at the top of the model", "[TextureDisplacement]") +{ + // An upright wall in the plane y = 0, facing -Y, tessellated so that each of the image's four + // quadrants gets a vertex at its centre. A flat sheet rather than a cube because every vertex + // normal is then exactly the face normal, which is what makes the expected depth below an exact + // number instead of a tri-planar blend of three of them. + constexpr int STEPS = 4; // cells per side, so 5x5 vertices + constexpr float SPAN = 20.f; // mm, the wall's width and height + indexed_triangle_set wall; + for (int j = 0; j <= STEPS; ++j) + for (int i = 0; i <= STEPS; ++i) + wall.vertices.emplace_back(-SPAN / 2.f + SPAN * float(i) / float(STEPS), 0.f, + SPAN * float(j) / float(STEPS)); + const auto at = [](int i, int j) { return j * (STEPS + 1) + i; }; + for (int j = 0; j < STEPS; ++j) + for (int i = 0; i < STEPS; ++i) { + // Wound so that (+x) x (+z) = -y: the wall faces -Y, away from the origin. + wall.indices.emplace_back(at(i, j), at(i + 1, j), at(i + 1, j + 1)); + wall.indices.emplace_back(at(i, j), at(i + 1, j + 1), at(i, j + 1)); + } + + TextureDisplacementFacetsData facets{}; + facets[0] = paint_whole_mesh(wall); + + TextureDisplacementLayer layer; + layer.slot = 0; + layer.projection_method = TextureProjectionMethod::Triplanar; + layer.image_data = make_quadrant_marker_png(); + layer.depth_mm = 2.f; + // The wall is 20 mm across and one tile is 40 mm, so it covers the middle half of the image in + // both axes: the quadrant boundaries land on x = 0 and z = 10, and the probed vertices sit a + // whole number of texels away from both. + layer.tiling_scale = 40.f; + layer.offset = Vec2f(0.5f, 0.75f); + // A single decal rather than a repeat, so that getting the orientation wrong cannot be masked by + // the wrap bringing the flipped coordinate back into the image at a plausible-looking row. With + // tiling off, uv stays inside [0.25, 0.75] in both axes only while v runs the right way. + layer.tile_enabled = false; + + const indexed_triangle_set result = build_texture_displacement(wall, { layer }, facets, classic_options()); + REQUIRE(result.vertices.size() == wall.vertices.size()); + + // Seen from outside this face the viewer's right is +X and their up is +Z, so the image's + // top-left quadrant has to land at low x and high z. Each entry: the vertex, and the image value + // whose quadrant it must have read. + const std::array, 4> expected = { { + { "top-left (255)", 1, 3, 255 }, + { "top-right (170)", 3, 3, 170 }, + { "bottom-left (85)", 1, 1, 85 }, + { "bottom-right (0)", 3, 1, 0 }, + } }; + + for (const auto &[name, i, j, value] : expected) { + DYNAMIC_SECTION("quadrant " << name) + { + const size_t vi = size_t(at(i, j)); + // The whole displacement is along -Y, so this is the relief's height at that vertex. + const float raised = wall.vertices[vi].y() - result.vertices[vi].y(); + INFO("vertex at " << wall.vertices[vi].x() << ", " << wall.vertices[vi].z()); + CHECK_THAT(raised, WithinAbs(layer.depth_mm * float(value) / 255.f, 1e-3f)); + // Nothing moved sideways or vertically: a mirrored or rotated basis would still have + // displaced along the normal, so this is here to catch the relief leaning instead. + CHECK_THAT(result.vertices[vi].x(), WithinAbs(wall.vertices[vi].x(), 1e-4f)); + CHECK_THAT(result.vertices[vi].z(), WithinAbs(wall.vertices[vi].z(), 1e-4f)); + } + } +} + TEST_CASE("The Cylindrical/Spherical patch frame is the bake's own, so a preview can share it", "[TextureDisplacement]") { // The fast preview reconstructs these two projections in the fragment shader and needs the very @@ -2174,318 +2489,3 @@ TEST_CASE("whether a layer's texture has colour agrees with its decode", "[Textu CHECK_FALSE(height_texture_has_color(TextureDisplacementLayer{})); } - -// --------------------------------------------------------------------------------------------- -// UV orientation: which way up a texture lands on the model. -// -// v = 0 is the height map's *first* pixel row, i.e. its top (DecodedHeightTexture::sample(), and -// the UV editor negates Y on screen for the same reason). So "the image is the right way up" is the -// statement that the row a point samples gets *lower* as the point moves up the face, and "it is -// not left-right mirrored" is that the column gets higher as the point moves to the right of a -// viewer standing outside the model. Both are measured below by sampling a ramp whose value says -// which row (or column) it came from, which settles the question without having to reason about the -// uv transform at all. - -static constexpr int RAMP_N = 64; // the ramp texture's size, in texels -static constexpr float RAMP_TILING = 40.f; // mm per tile -static constexpr float CUBE_HALF = 5.f; // half extent of the cube the probes walk over -// How far a probe steps off a face centre. Short on purpose: the cylindrical and spherical u is an -// arc length (angle * radius), so a long step also changes the radius, and that term swamps the -// angular one. It is symmetric about the face centre, so at a short step it cancels between the two -// readings a check compares. -static constexpr float RAMP_STEP = 1.f; -// What one step's worth of travel is in ramp rows: 2 * RAMP_STEP mm of separation, RAMP_N texels per -// RAMP_TILING mm. Halved as the margin a check demands, so "flat" cannot pass as either direction. -static constexpr double RAMP_MARGIN = RAMP_N * RAMP_STEP / RAMP_TILING; - -// A height map whose rows (or columns) carry a linear ramp: row r holds 3 + 4r, so the sampled -// height identifies the row. Built directly rather than through a PNG because these tests are about -// the projection, not the decoder - decode_height_texture() has its own tests. -static DecodedHeightTexture ramp_texture(bool by_row) -{ - DecodedHeightTexture t; - t.width = t.height = RAMP_N; - t.pixels.resize(size_t(RAMP_N) * size_t(RAMP_N)); - for (int y = 0; y < RAMP_N; ++y) - for (int x = 0; x < RAMP_N; ++x) - t.pixels[size_t(y) * size_t(RAMP_N) + size_t(x)] = uint8_t(3 + 4 * (by_row ? y : x)); - return t; -} - -// uv 0.5 at the cube's centre, and a tile wide enough that every point the probes visit stays well -// inside the one tile - so no reading is a wrapped-around neighbour of the one it is compared with. -static TextureDisplacementLayer ramp_layer(TextureProjectionMethod method) -{ - TextureDisplacementLayer layer; - layer.projection_method = method; - layer.tiling_scale = RAMP_TILING; - layer.offset = Vec2f(0.5f, 0.5f); - layer.depth_mm = 1.f; - return layer; -} - -// Which row (or column) of `ramp` the layer reads at `p`. Fractional, because a point between two -// texels reads the ramp between them; only the direction it moves in matters here. -static double ramp_index(const DecodedHeightTexture &ramp, const TextureDisplacementLayer &layer, const Vec3f &p, - const Vec3f &n, const Vec3f ¢er = Vec3f(Vec3f::Zero()), - const Vec3f &axis = Vec3f(Vec3f::UnitZ())) -{ - return (double(sample_layer_height(ramp, layer, p, n, center, axis, nullptr)) * 255.0 - 3.0) / 4.0; -} - -// How a viewer standing outside the model sees a face: their right, and their up. Up is world +Z on -// the four upright faces; on the top and bottom, where +Z is edge on, it is world +Y. -static void outside_viewer_frame(const Vec3f &n, Vec3f &right, Vec3f &up) -{ - up = (std::abs(n.z()) < 0.9f) ? Vec3f(0.f, 0.f, 1.f) : Vec3f(0.f, 1.f, 0.f); - right = Vec3f((-n).cross(up).normalized()); -} - -static const std::array, 6> CUBE_FACES = { { - { "+X", Vec3f(1.f, 0.f, 0.f) }, - { "-X", Vec3f(-1.f, 0.f, 0.f) }, - { "+Y", Vec3f(0.f, 1.f, 0.f) }, - { "-Y", Vec3f(0.f, -1.f, 0.f) }, - { "+Z", Vec3f(0.f, 0.f, 1.f) }, - { "-Z", Vec3f(0.f, 0.f, -1.f) }, -} }; - -TEST_CASE("the box projection lands a texture upright and unmirrored on all six faces of a cube", - "[TextureDisplacement]") -{ - const DecodedHeightTexture rows = ramp_texture(true); - const DecodedHeightTexture cols = ramp_texture(false); - const TextureDisplacementLayer layer = ramp_layer(TextureProjectionMethod::Triplanar); - - for (const auto &[name, n] : CUBE_FACES) { - DYNAMIC_SECTION("face " << name) - { - Vec3f right, up; - outside_viewer_frame(n, right, up); - const Vec3f centre = n * CUBE_HALF; - - // Upright: the row read near the top of the face is nearer the image's first row. - const double row_up = ramp_index(rows, layer, centre + up * RAMP_STEP, n); - const double row_down = ramp_index(rows, layer, centre - up * RAMP_STEP, n); - INFO("row at the top of the face " << row_up << ", at the bottom " << row_down); - CHECK(row_down - row_up > RAMP_MARGIN); - - // Unmirrored: the column read to the viewer's right is further into the image. Without a - // per-side sign this fails on exactly the three faces facing away - -X, +Y and -Z - which - // is the mirroring a bare v flip leaves behind. - const double col_left = ramp_index(cols, layer, centre - right * RAMP_STEP, n); - const double col_right = ramp_index(cols, layer, centre + right * RAMP_STEP, n); - INFO("column at the left of the face " << col_left << ", at the right " << col_right); - CHECK(col_right - col_left > RAMP_MARGIN); - } - } -} - -TEST_CASE("every projection method lands a texture upright on an upright face", "[TextureDisplacement]") -{ - const DecodedHeightTexture rows = ramp_texture(true); - // ViewProjected is one flat projection from the captured camera rather than a per-face map, so its - // "up" is the projector's own (view_project_up), which the default capture puts at +Y. - const auto method = GENERATE(TextureProjectionMethod::Triplanar, TextureProjectionMethod::Cylindrical, - TextureProjectionMethod::Spherical, TextureProjectionMethod::ViewProjected); - const TextureDisplacementLayer layer = ramp_layer(method); - - for (const auto &[name, n] : CUBE_FACES) { - // Only the four upright faces: on the top and bottom a cylinder's v is constant (they are its - // caps) and a sphere's is at an extremum (they are its poles), so neither says anything about - // which way up the image is. - if (std::abs(n.z()) > 0.9f) - continue; - DYNAMIC_SECTION("method " << int(method) << ", face " << name) - { - const Vec3f up = (method == TextureProjectionMethod::ViewProjected) ? layer.view_project_up : - Vec3f(0.f, 0.f, 1.f); - const Vec3f centre = n * CUBE_HALF; - const double row_up = ramp_index(rows, layer, centre + up * RAMP_STEP, n); - const double row_down = ramp_index(rows, layer, centre - up * RAMP_STEP, n); - INFO("row at the top " << row_up << ", at the bottom " << row_down); - CHECK(row_down - row_up > RAMP_MARGIN); - } - } -} - -TEST_CASE("the cylindrical and spherical wraps run left to right as seen from outside", "[TextureDisplacement]") -{ - const DecodedHeightTexture cols = ramp_texture(false); - const auto method = GENERATE(TextureProjectionMethod::Cylindrical, TextureProjectionMethod::Spherical); - const TextureDisplacementLayer layer = ramp_layer(method); - - for (const auto &[name, n] : CUBE_FACES) { - // The caps and poles are out, as above - u is undefined on the axis. So is whichever face the - // atan2 branch cut runs through, where u jumps from +pi to -pi: that is a real seam in both - // projections, and a reading taken across it compares two opposite sides of the model. - if (std::abs(n.z()) > 0.9f) - continue; - const bool on_the_cut = (method == TextureProjectionMethod::Cylindrical) ? (n.y() < -0.9f) : (n.x() < -0.9f); - if (on_the_cut) - continue; - DYNAMIC_SECTION("method " << int(method) << ", face " << name) - { - Vec3f right, up; - outside_viewer_frame(n, right, up); - const Vec3f centre = n * CUBE_HALF; - const double col_left = ramp_index(cols, layer, centre - right * RAMP_STEP, n); - const double col_right = ramp_index(cols, layer, centre + right * RAMP_STEP, n); - INFO("column at the left " << col_left << ", at the right " << col_right); - CHECK(col_right - col_left > RAMP_MARGIN); - } - } -} - -TEST_CASE("an unwrapped cube's flat charts are laid out the right way up", "[TextureDisplacement]") -{ - indexed_triangle_set cube = its_make_cube(2. * CUBE_HALF, 2. * CUBE_HALF, 2. * CUBE_HALF); - for (Vec3f &v : cube.vertices) - v -= Vec3f(CUBE_HALF, CUBE_HALF, CUBE_HALF); - - const PatchUnwrap unwrap = compute_patch_unwrap(cube, LSCM_DEFAULT_SEAM_ANGLE_DEG); - REQUIRE_FALSE(unwrap.empty()); - REQUIRE(unwrap.chart_count == 6); // one flat chart per face, cut at the 90-degree edges - - // Each chart carries one face. The four upright ones span world Z, and their v has to grow - // downwards like every other projection's - whatever the packing then did with the island. - int upright_charts = 0; - for (int c = 0; c < unwrap.chart_count; ++c) { - int top = -1, bottom = -1; - for (size_t i = 0; i < unwrap.uvs.size(); ++i) { - if (unwrap.vertex_chart[i] != c) - continue; - const float z = cube.vertices[size_t(unwrap.source_vertex[i])].z(); - if (top < 0 || z > cube.vertices[size_t(unwrap.source_vertex[size_t(top)])].z()) - top = int(i); - if (bottom < 0 || z < cube.vertices[size_t(unwrap.source_vertex[size_t(bottom)])].z()) - bottom = int(i); - } - REQUIRE(top >= 0); - REQUIRE(bottom >= 0); - const float v_top = unwrap.uvs[size_t(top)].y(), v_bottom = unwrap.uvs[size_t(bottom)].y(); - if (std::abs(v_top - v_bottom) < 1e-3f) - continue; // a cap: the whole chart is at one height, so it has no up - ++upright_charts; - DYNAMIC_SECTION("chart " << c) - { - INFO("v at the chart's topmost vertex " << v_top << ", at its bottommost " << v_bottom); - CHECK(v_bottom - v_top > 1.f); - } - } - CHECK(upright_charts == 4); // the four sides; the top and bottom faces are the caps skipped above -} - -TEST_CASE("project_planar agrees with the box projection's own axes", "[TextureDisplacement]") -{ - // The two express the same table in different shapes - one a pair of world axes for the GUI, the - // other the closed form the bake's hot path uses - so they are checked against each other here - // rather than left to drift apart. - const Vec3f p(2.f, -3.f, 7.f); - for (const auto &[name, n] : CUBE_FACES) { - DYNAMIC_SECTION("face " << name) - { - Vec3f u_axis, v_axis; - box_projection_axes(n, u_axis, v_axis); - const Vec2f planar = project_planar(p, n); - CHECK_THAT(planar.x(), WithinAbs(p.dot(u_axis), 1e-5f)); - CHECK_THAT(planar.y(), WithinAbs(p.dot(v_axis), 1e-5f)); - // Right-handed for a viewer outside the model: u to their right, v down, so u x v points - // into the surface. Getting this wrong is exactly what mirrors a face. - CHECK_THAT(u_axis.cross(v_axis).dot(n), WithinAbs(-1.f, 1e-5f)); - } - } -} - -// An image with a different value in each quadrant, so one bake says both which way up it landed -// and whether it came out mirrored. Distinct enough that a wrong quadrant cannot be mistaken for the -// right one: top-left 255, top-right 170, bottom-left 85, bottom-right 0. -static std::shared_ptr> make_quadrant_marker_png(size_t w = 32, size_t h = 32) -{ - std::vector pixels(w * h); - for (size_t y = 0; y < h; ++y) - for (size_t x = 0; x < w; ++x) - pixels[y * w + x] = (y < h / 2) ? ((x < w / 2) ? 255 : 170) : ((x < w / 2) ? 85 : 0); - const boost::filesystem::path tmp_path = boost::filesystem::temp_directory_path() - / boost::filesystem::unique_path("texdisp_test_%%%%%%%%.png"); - REQUIRE(Slic3r::png::write_gray_to_file(tmp_path.string(), w, h, pixels)); - - std::vector bytes; - { - std::ifstream ifs(tmp_path.string(), std::ios::binary); - bytes.assign(std::istreambuf_iterator(ifs), std::istreambuf_iterator()); - } - boost::system::error_code ec; - boost::filesystem::remove(tmp_path, ec); - - REQUIRE_FALSE(bytes.empty()); - return std::make_shared>(std::move(bytes)); -} - -TEST_CASE("baking an asymmetric image puts the top of the image at the top of the model", "[TextureDisplacement]") -{ - // An upright wall in the plane y = 0, facing -Y, tessellated so that each of the image's four - // quadrants gets a vertex at its centre. A flat sheet rather than a cube because every vertex - // normal is then exactly the face normal, which is what makes the expected depth below an exact - // number instead of a tri-planar blend of three of them. - constexpr int STEPS = 4; // cells per side, so 5x5 vertices - constexpr float SPAN = 20.f; // mm, the wall's width and height - indexed_triangle_set wall; - for (int j = 0; j <= STEPS; ++j) - for (int i = 0; i <= STEPS; ++i) - wall.vertices.emplace_back(-SPAN / 2.f + SPAN * float(i) / float(STEPS), 0.f, - SPAN * float(j) / float(STEPS)); - const auto at = [](int i, int j) { return j * (STEPS + 1) + i; }; - for (int j = 0; j < STEPS; ++j) - for (int i = 0; i < STEPS; ++i) { - // Wound so that (+x) x (+z) = -y: the wall faces -Y, away from the origin. - wall.indices.emplace_back(at(i, j), at(i + 1, j), at(i + 1, j + 1)); - wall.indices.emplace_back(at(i, j), at(i + 1, j + 1), at(i, j + 1)); - } - - TextureDisplacementFacetsData facets{}; - facets[0] = paint_whole_mesh(wall); - - TextureDisplacementLayer layer; - layer.slot = 0; - layer.projection_method = TextureProjectionMethod::Triplanar; - layer.image_data = make_quadrant_marker_png(); - layer.depth_mm = 2.f; - // The wall is 20 mm across and one tile is 40 mm, so it covers the middle half of the image in - // both axes: the quadrant boundaries land on x = 0 and z = 10, and the probed vertices sit a - // whole number of texels away from both. - layer.tiling_scale = 40.f; - layer.offset = Vec2f(0.5f, 0.75f); - // A single decal rather than a repeat, so that getting the orientation wrong cannot be masked by - // the wrap bringing the flipped coordinate back into the image at a plausible-looking row. With - // tiling off, uv stays inside [0.25, 0.75] in both axes only while v runs the right way. - layer.tile_enabled = false; - - const indexed_triangle_set result = build_texture_displacement(wall, { layer }, facets, classic_options()); - REQUIRE(result.vertices.size() == wall.vertices.size()); - - // Seen from outside this face the viewer's right is +X and their up is +Z, so the image's - // top-left quadrant has to land at low x and high z. Each entry: the vertex, and the image value - // whose quadrant it must have read. - const std::array, 4> expected = { { - { "top-left (255)", 1, 3, 255 }, - { "top-right (170)", 3, 3, 170 }, - { "bottom-left (85)", 1, 1, 85 }, - { "bottom-right (0)", 3, 1, 0 }, - } }; - - for (const auto &[name, i, j, value] : expected) { - DYNAMIC_SECTION("quadrant " << name) - { - const size_t vi = size_t(at(i, j)); - // The whole displacement is along -Y, so this is the relief's height at that vertex. - const float raised = wall.vertices[vi].y() - result.vertices[vi].y(); - INFO("vertex at " << wall.vertices[vi].x() << ", " << wall.vertices[vi].z()); - CHECK_THAT(raised, WithinAbs(layer.depth_mm * float(value) / 255.f, 1e-3f)); - // Nothing moved sideways or vertically: a mirrored or rotated basis would still have - // displaced along the normal, so this is here to catch the relief leaning instead. - CHECK_THAT(result.vertices[vi].x(), WithinAbs(wall.vertices[vi].x(), 1e-4f)); - CHECK_THAT(result.vertices[vi].z(), WithinAbs(wall.vertices[vi].z(), 1e-4f)); - } - } -} From 714972821959aa4e566cb87107533dbfdec502cd Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 12 Oct 2026 20:27:37 +0800 Subject: [PATCH 015/137] Fix clang-cl dependency builds failing on a precompiled header from the compiler cache --- cmake/modules/ClangClShowIncludes.cmake | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmake/modules/ClangClShowIncludes.cmake b/cmake/modules/ClangClShowIncludes.cmake index 91b9a18069..fcc48fe3f7 100644 --- a/cmake/modules/ClangClShowIncludes.cmake +++ b/cmake/modules/ClangClShowIncludes.cmake @@ -1,10 +1,18 @@ # ccache does not parse the -clang: arguments CMake uses for clang-cl's gcc-style # depfile, so a cache hit writes the object and no depfile, and Ninja then records # no headers for that object. ccache reproduces /showIncludes output on a hit. +# +# Clang also records the modification time of every input in a precompiled header +# and rejects the header once one differs. ccache caches the compile that creates +# the header, so a tree that regenerates cmake_pch.cxx gets back a header stamped +# with the old file's time, and every compile that uses it fails. The build system +# already rebuilds the header when an input changes. This covers the dependencies, +# such as wxWidgets; PrecompiledHeader.cmake does the same for OrcaSlicer's targets. foreach (_lang C CXX) if (CMAKE_${_lang}_COMPILER_ID STREQUAL "Clang" AND CMAKE_${_lang}_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") set(CMAKE_DEPFILE_FLAGS_${_lang} "/showIncludes") set(CMAKE_${_lang}_DEPFILE_FORMAT msvc) + list(APPEND CMAKE_${_lang}_COMPILE_OPTIONS_CREATE_PCH -Xclang -fno-pch-timestamp) endif () endforeach () From 4f2d2ae11ae2ebbf11a58fec8f8b56b154540c9b Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Mon, 12 Oct 2026 23:17:41 +0800 Subject: [PATCH 016/137] Wait for the PR's Deps Cache in clang-tidy When deps/ Changes (#16374) * Wait for the PR's Deps Cache in clang-tidy When deps/ Changes * Fail the clang-tidy Deps Wait When Listing Caches Keeps Failing * Wait for Deps Through ci_deps_cache.sh in clang-tidy Reuse the macOS deps wait for Linux: the job names, workflow and cache ref are passed in, and a new 'own' mode waits for the PR's own build when it changes deps/. A PR that keeps deps/ now waits for a running base build with the same deps, and warns when it falls back to older ones. The wait ends as soon as the deps job fails. --- .github/workflows/clang_tidy.yml | 74 ++++++++++++++++++++++++++++++-- scripts/ci_deps_cache.sh | 60 ++++++++++++++++++-------- 2 files changed, 113 insertions(+), 21 deletions(-) diff --git a/.github/workflows/clang_tidy.yml b/.github/workflows/clang_tidy.yml index 2f27a0eaff..445f294fcc 100644 --- a/.github/workflows/clang_tidy.yml +++ b/.github/workflows/clang_tidy.yml @@ -16,6 +16,15 @@ on: permissions: contents: read + # Listing caches and builds while waiting for a deps cache. + actions: read + +# Read by scripts/ci_deps_cache.sh. +env: + REPO: ${{ github.repository }} + WORKFLOW: build_all.yml + BASE_REF: ${{ github.base_ref }} + JOB: build_linux (${{ vars.SELF_HOSTED && 'orca-lnx-server' || 'ubuntu-24.04' }}) concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number }} @@ -35,7 +44,7 @@ jobs: # The PR merge commit plus its first parent, the base it is diffed against. fetch-depth: 2 - - name: Look for changed C++ files + - name: Look for changed files id: changes run: | if git -c core.quotePath=false diff --name-only HEAD^1 -- src tests | grep -qE '\.(cpp|cc|cxx|hpp|h|hxx)$'; then @@ -43,18 +52,75 @@ jobs: else echo "No C++ changes under src/ or tests/." fi + if ! git diff --quiet HEAD^1 -- deps; then + echo "deps=true" >> "$GITHUB_OUTPUT" + fi + echo "deps-key=linux-clang-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }}" >> "$GITHUB_OUTPUT" - # Parsing needs the dependency headers, not a build of this PR's deps/, so - # a PR that changes deps/ falls back to the newest cache main has. + # Parsing needs the dependency headers, not a build of this PR's deps/. + # Without an exact match the job waits for the build that saves it: this + # PR's own when it changes deps/, otherwise a running push build of the + # base branch with the same deps. With neither, a PR that keeps deps/ + # falls back to the newest cache. - name: Restore cached deps + id: deps_cache if: steps.changes.outputs.cpp == 'true' uses: actions/cache/restore@v6 with: path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep - key: linux-clang-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }} + key: ${{ steps.changes.outputs.deps-key }} + + - name: Look for a build to wait for + id: wait_check + if: steps.changes.outputs.cpp == 'true' && steps.deps_cache.outputs.cache-hit != 'true' + env: + GH_TOKEN: ${{ github.token }} + HEAD_SHA: ${{ github.event.pull_request.head.sha }} + run: bash scripts/ci_deps_cache.sh ${{ steps.changes.outputs.deps == 'true' && 'own' || 'check' }} + + # Linux Build Deps takes about 35 minutes on GitHub-hosted runners. The + # wait ends early when the deps job fails. + - name: Wait for the deps cache + if: steps.wait_check.outputs.wait-for != '' + timeout-minutes: 100 + env: + GH_TOKEN: ${{ github.token }} + KEY: ${{ steps.changes.outputs.deps-key }} + CACHE_REF: ${{ steps.changes.outputs.deps == 'true' && github.ref || format('refs/heads/{0}', github.base_ref) }} + KEY_INPUTS: ${{ steps.wait_check.outputs.key-inputs }} + WAIT_FOR: ${{ steps.wait_check.outputs.wait-for }} + WAIT_SINCE: ${{ steps.wait_check.outputs.wait-since }} + WAIT_MINUTES: 90 + run: bash scripts/ci_deps_cache.sh wait + + - name: Restore the deps cache after waiting + id: waited_cache + if: steps.wait_check.outputs.wait-for != '' + uses: actions/cache/restore@v6 + with: + path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep + key: ${{ steps.changes.outputs.deps-key }} + + - name: Fail without this PR's deps cache + if: steps.changes.outputs.deps == 'true' && steps.wait_check.outcome == 'success' && steps.waited_cache.outputs.cache-hit != 'true' + run: | + echo "::error::No deps cache ${{ steps.changes.outputs.deps-key }}. Check this PR's Linux Build Deps job, then rerun clang-tidy." + exit 1 + + - name: Restore the newest cached deps + id: newest_cache + if: steps.changes.outputs.deps != 'true' && steps.wait_check.outcome == 'success' && steps.waited_cache.outputs.cache-hit != 'true' + uses: actions/cache/restore@v6 + with: + path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep + key: ${{ steps.changes.outputs.deps-key }} restore-keys: linux-clang-cache-orcaslicer_deps-build- fail-on-cache-miss: true + - name: Warn about older deps + if: steps.newest_cache.outcome == 'success' && steps.newest_cache.outputs.cache-hit != 'true' + run: echo "::warning title=Older deps::No cache matches this PR's deps/, so clang-tidy parsed against ${{ steps.newest_cache.outputs.cache-matched-key }}. If it reports errors in code that uses a dependency, rerun clang-tidy once the base branch's Build all has saved the new deps." + - name: Apt-Install Dependencies if: steps.changes.outputs.cpp == 'true' && !vars.SELF_HOSTED uses: ./.github/actions/apt-install-deps diff --git a/scripts/ci_deps_cache.sh b/scripts/ci_deps_cache.sh index a27b7e2522..0c3ae85415 100644 --- a/scripts/ci_deps_cache.sh +++ b/scripts/ci_deps_cache.sh @@ -1,21 +1,27 @@ #!/usr/bin/env bash -# Lets a pull request's macOS deps build wait for a push build of the base -# branch that builds the same deps, from a Linux job. `check` runs after a cache -# miss and names a queued or running base build with the same deps/ and .github/ -# to wait for, unless the pull request changes either. `wait` waits until that -# build saves KEY. actions/cache then confirms the entry can be restored. +# Lets a pull request's macOS deps build, or its clang-tidy job, wait for a +# build that saves the deps cache it needs, from a Linux job. `check` runs after +# a cache miss and names a queued or running push build of the base branch with +# the same deps/ and .github/ to wait for, unless the pull request changes either. +# `own` names the pull request's own build instead, for clang-tidy when the pull +# request changes deps/. `wait` waits until that build saves KEY under CACHE_REF, +# or its deps job fails. actions/cache then confirms the entry can be restored. # -# Environment: GH_TOKEN, REPO, WORKFLOW_REF and BASE_REF, plus KEY_INPUTS, -# WAIT_FOR, WAIT_SINCE, WAIT_MINUTES, KEY and ARCH for `wait`. +# Environment: GH_TOKEN, REPO, WORKFLOW_REF (or WORKFLOW, the build workflow's +# file name) and BASE_REF, plus HEAD_SHA for `own`, and KEY_INPUTS, WAIT_FOR, +# WAIT_SINCE, WAIT_MINUTES, KEY, CACHE_REF (default the base branch) and ARCH +# (or JOB, the matrix job's name) for `wait`. # Writes key-inputs, wait-for and wait-since to $GITHUB_OUTPUT. set -uo pipefail -workflow=${WORKFLOW_REF%%@*} -workflow=${workflow##*/} +workflow=${WORKFLOW_REF:-} +workflow=${workflow%%@*} +workflow=${WORKFLOW:-${workflow##*/}} # Must match the job names in build_all.yml, build_check_cache.yml and build_deps.yml. -check_job_name="build_macos_arch (${ARCH:-}) / Check Cache" -deps_job_name="build_macos_arch (${ARCH:-}) / Build Deps / Build Deps" +job=${JOB:-build_macos_arch (${ARCH:-})} +check_job_name="$job / Check Cache" +deps_job_name="$job / Build Deps / Build Deps" out() { echo "$1" >> "${GITHUB_OUTPUT:-/dev/stdout}"; } @@ -63,8 +69,27 @@ check() { fi } +own() { + out "key-inputs=$(local_key_inputs HEAD)" + local id + # The build can be created a moment after this job. + for _ in 1 2 3 4 5; do + id=$(gh api -X GET "repos/$REPO/actions/workflows/$workflow/runs" \ + -f head_sha="$HEAD_SHA" -f event=pull_request -f per_page=1 --jq '.workflow_runs[0].id // empty' < /dev/null) + [ -n "$id" ] && break + sleep 30 + done + if [ -n "$id" ]; then + echo "Waiting for the deps cache of build $id of this pull request." + out "wait-for=$id" + out "wait-since=$(date +%s)" + else + echo "No build of this pull request is building its deps." + fi +} + key_saved() { - gh cache list -R "$REPO" --ref "refs/heads/$BASE_REF" --key "$KEY" --json key < /dev/null \ + gh cache list -R "$REPO" --ref "${CACHE_REF:-refs/heads/$BASE_REF}" --key "$KEY" --json key < /dev/null \ | jq -e --arg key "$KEY" 'any(.[]; .key == $key)' > /dev/null } @@ -87,11 +112,11 @@ wait_for() { key_saved && { echo "Found $KEY."; return; } sleep 20 done - echo "Build $id of $BASE_REF finished its deps without saving $KEY." + echo "Build $id finished its deps without saving $KEY." return ;; "completed cancelled") ;; completed*) - echo "The deps job of build $id of $BASE_REF did not succeed." + echo "The deps job of build $id did not succeed." return ;; # The deps job exists only once the build's cache check has succeeded. "") @@ -100,7 +125,7 @@ wait_for() { completed*) check=$(jq -r --arg name "$check_job_name" 'first(.jobs[] | select(.name == $name) | .conclusion) // ""' <<< "$jobs") if [ -z "$warned" ] && { [ -z "$check" ] || [ "$check" = success ]; }; then - echo "::warning title=Deps wait::Build $id of $BASE_REF has no job named \"$deps_job_name\". If the build jobs were renamed, update scripts/ci_deps_cache.sh. This does not affect this pull request." + echo "::warning title=Deps wait::Build $id has no job named \"$deps_job_name\". If the build jobs were renamed, update scripts/ci_deps_cache.sh. This does not affect this pull request." warned=1 fi ;; *) @@ -118,11 +143,12 @@ wait_for() { seen="$seen $id" echo "Following build $id of $BASE_REF." done - echo "No build of $BASE_REF saved $KEY." + echo "No build saved $KEY." } case "${1:-}" in check) check ;; + own) own ;; wait) wait_for ;; - *) echo "usage: $0 check|wait" >&2; exit 2 ;; + *) echo "usage: $0 check|own|wait" >&2; exit 2 ;; esac From c6a338f35f975ac9a2bdcdbde6754d720e1fd170 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 12 Oct 2026 23:18:38 +0800 Subject: [PATCH 017/137] Fix stale paint highlights and textures in the texture displacement gizmo Erase whole model, Select whole model and Capture current view update the highlight at once. A stroke released outside the 3D view ends on the next mouse move, in every paint gizmo, instead of leaving the brush in its pressed colour. The layer textures no longer show an image that was replaced. --- src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp | 9 +++++++ .../GUI/Gizmos/GLGizmoTextureDisplacement.cpp | 26 +++++++++---------- .../GUI/Gizmos/GLGizmoTextureDisplacement.hpp | 23 ++++++++-------- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index 4bae9a28fe..388b04312d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -1036,6 +1036,11 @@ bool GLGizmoPainterBase::on_mouse(const wxMouseEvent &mouse_event) Vec2d mouse_pos = mouse_coord.cast(); if (mouse_event.Moving()) { + // No button is down, yet a stroke is still open: its release went elsewhere, as a paint drag does not + // capture the mouse. End the stroke as that release would have. + if (m_button_down != Button::None) + gizmo_event(m_button_down == Button::Left ? SLAGizmoEventType::LeftUp : SLAGizmoEventType::RightUp, mouse_pos, + mouse_event.ShiftDown(), mouse_event.AltDown(), false); gizmo_event(SLAGizmoEventType::Moving, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), false); return false; } @@ -1205,6 +1210,10 @@ void GLGizmoPainterBase::on_set_state() m_old_mo_id = -1; //m_iva.release_geometry(); m_triangle_selectors.clear(); + // A stroke still open goes with the selectors. Its state must not carry into the next session, where the + // first move would end it as if released and the first press would paint a line from its last position. + m_button_down = Button::None; + m_last_mouse_click = Vec2d::Zero(); //Camera& camera = wxGetApp().plater()->get_camera(); //camera.look_at(camera.get_position(), m_previous_target, Vec3d::UnitZ()); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp index 45ff19480f..048b005c69 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp @@ -1520,7 +1520,7 @@ void GLGizmoTextureDisplacement::render_shaded_preview_mesh() // is box-filtered down to 128 px for a ~48 px row, and feeding it to the shader cost the preview // three quarters of the height map's detail - and, since height_tex_texel is derived from it, also // flattened the shading gradient and made the parallax march skip itself at angles where it should - // run. Cached on the image_data pointer + smoothing, so no PNG is decoded per frame. + // run. Cached per image_data and smoothing, so no PNG is decoded per frame. GLTexture *tex = get_layer_height_texture(*layer); if (tex == nullptr || tex->get_width() <= 0 || tex->get_height() <= 0) return; @@ -4038,8 +4038,8 @@ void GLGizmoTextureDisplacement::remove_texture_layer(int slot) if (slot >= 0 && slot < int(TEXTURE_DISPLACEMENT_MAX_LAYERS)) { mv->texture_displacement_facet(slot).reset(); m_thumbnails[size_t(slot)].reset(); - m_thumbnail_source[size_t(slot)] = nullptr; - m_layer_expanded[size_t(slot)] = false; + m_thumbnail_source[size_t(slot)].reset(); + m_layer_expanded[size_t(slot)] = false; } if (m_picker_slot == slot) m_picker_slot = -1; @@ -4213,7 +4213,7 @@ int GLGizmoTextureDisplacement::select_visible_faces(const std::array selector.reset(); for (unsigned i : unobscured) selector.set_facet(int(front_facing[i]), EnforcerBlockerType::ENFORCER); - selector.request_update_render_data(); + selector.request_update_render_data(true); update_model_object(); m_parent.set_as_dirty(); @@ -4236,7 +4236,7 @@ void GLGizmoTextureDisplacement::select_whole_model() const size_t facet_count = v->mesh().its.indices.size(); for (size_t i = 0; i < facet_count; ++i) m_triangle_selectors[idx]->set_facet(int(i), EnforcerBlockerType::ENFORCER); - m_triangle_selectors[idx]->request_update_render_data(); + m_triangle_selectors[idx]->request_update_render_data(true); } update_model_object(); m_parent.set_as_dirty(); @@ -5342,7 +5342,7 @@ GLTexture *GLGizmoTextureDisplacement::get_layer_thumbnail(const TextureDisplace return nullptr; const size_t slot = size_t(layer.slot); - if (m_thumbnails[slot] && m_thumbnail_source[slot] == layer.image_data.get() && + if (m_thumbnails[slot] && m_thumbnail_source[slot].lock() == layer.image_data && m_thumbnail_smoothing[slot] == layer.smoothing) return m_thumbnails[slot].get(); @@ -5355,7 +5355,7 @@ GLTexture *GLGizmoTextureDisplacement::get_layer_thumbnail(const TextureDisplace return nullptr; m_thumbnails[slot] = std::move(texture); - m_thumbnail_source[slot] = layer.image_data.get(); + m_thumbnail_source[slot] = layer.image_data; m_thumbnail_smoothing[slot] = layer.smoothing; return m_thumbnails[slot].get(); } @@ -5364,17 +5364,17 @@ GLTexture *GLGizmoTextureDisplacement::get_layer_color_texture(const TextureDisp { if (layer.empty() || !layer.color_enabled) return nullptr; - if (m_color_tex && m_color_tex_source == layer.image_data.get() && m_color_tex_smoothing == layer.smoothing) + if (m_color_tex && m_color_tex_source.lock() == layer.image_data && m_color_tex_smoothing == layer.smoothing) return m_color_tex.get(); std::unique_ptr texture = upload_color_texture(decode_height_texture(layer), HEIGHT_TEX_MAX_PX); if (!texture) { m_color_tex.reset(); - m_color_tex_source = nullptr; + m_color_tex_source.reset(); return nullptr; } m_color_tex = std::move(texture); - m_color_tex_source = layer.image_data.get(); + m_color_tex_source = layer.image_data; m_color_tex_smoothing = layer.smoothing; return m_color_tex.get(); } @@ -5386,7 +5386,7 @@ GLTexture *GLGizmoTextureDisplacement::get_layer_height_texture(const TextureDis // One slot, not one per layer: the preview shader only ever shades the *active* layer, so a single // full-resolution upload is enough and the VRAM cost stays at one texture rather than eight. - if (m_height_tex && m_height_tex_source == layer.image_data.get() && m_height_tex_smoothing == layer.smoothing) + if (m_height_tex && m_height_tex_source.lock() == layer.image_data && m_height_tex_smoothing == layer.smoothing) return m_height_tex.get(); std::unique_ptr texture = upload_height_thumbnail(decode_height_texture(layer), HEIGHT_TEX_MAX_PX); @@ -5394,7 +5394,7 @@ GLTexture *GLGizmoTextureDisplacement::get_layer_height_texture(const TextureDis return nullptr; m_height_tex = std::move(texture); - m_height_tex_source = layer.image_data.get(); + m_height_tex_source = layer.image_data; m_height_tex_smoothing = layer.smoothing; return m_height_tex.get(); } @@ -6281,7 +6281,7 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float if (v->is_model_part()) { ++idx; m_triangle_selectors[idx]->reset(); - m_triangle_selectors[idx]->request_update_render_data(); + m_triangle_selectors[idx]->request_update_render_data(true); } update_model_object(); m_parent.set_as_dirty(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp index a520fba426..631254313c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp @@ -924,25 +924,26 @@ private: bool m_preview_job_pending = false; void queue_preview_job(); - // Per-slot GPU thumbnail cache for the layer list panel, keyed by the image_data pointer that - // was current the last time each thumbnail was built (see get_layer_thumbnail()). - std::array, TEXTURE_DISPLACEMENT_MAX_LAYERS> m_thumbnails; - std::array m_thumbnail_source{}; + // Per-slot GPU thumbnail cache for the layer list panel, each keyed by the image_data it was built from + // (see get_layer_thumbnail()). Held weakly rather than by address, as decode_height_texture()'s cache is: + // an image freed and replaced by another at the same address must not pass for it. + std::array, TEXTURE_DISPLACEMENT_MAX_LAYERS> m_thumbnails; + std::array>, TEXTURE_DISPLACEMENT_MAX_LAYERS> m_thumbnail_source; // The smoothing each cached thumbnail was built at, so a smoothing change re-uploads it. - std::array m_thumbnail_smoothing{}; + std::array m_thumbnail_smoothing{}; // Full-resolution height texture for the preview shader, keyed the same way (see // get_layer_height_texture()). A smoothing change re-uploads it, so the fast preview shows the // blur the bake will apply. - std::unique_ptr m_height_tex; - const void *m_height_tex_source = nullptr; - float m_height_tex_smoothing = -1.f; + std::unique_ptr m_height_tex; + std::weak_ptr> m_height_tex_source; + float m_height_tex_smoothing = -1.f; // The same, for the layer's *colour*, which the fast preview quantizes per fragment so it shows // the image at texel resolution rather than at the mesh's. Null for a grayscale texture. - std::unique_ptr m_color_tex; - const void *m_color_tex_source = nullptr; - float m_color_tex_smoothing = -1.f; + std::unique_ptr m_color_tex; + std::weak_ptr> m_color_tex_source; + float m_color_tex_smoothing = -1.f; // Library textures the picker has shown at least once, keyed by file path (see LibraryTexture). std::map m_library_textures; From 1a9201690da0f40c8d7c900357203a8d3317de3c Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Tue, 13 Oct 2026 00:09:18 +0800 Subject: [PATCH 018/137] Draw Preview Segments With 16-Bit Indices (#16389) The segment draw switched to an element buffer of 8-bit indices. GCN 1/2 GPUs cannot read 8-bit indices in hardware, so the driver converts them, and on a Mac Pro 2013 FirePro under Windows Boot Camp the toolpaths come out as scattered spikes. 16-bit indices are supported everywhere and keep the eight shader runs per segment. --- src/libvgcode/src/SegmentTemplate.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libvgcode/src/SegmentTemplate.cpp b/src/libvgcode/src/SegmentTemplate.cpp index f925e0a860..3887f4128f 100644 --- a/src/libvgcode/src/SegmentTemplate.cpp +++ b/src/libvgcode/src/SegmentTemplate.cpp @@ -21,7 +21,9 @@ namespace libvgcode { // the triangles that share it: the shader runs 8 times per segment instead of 24. static constexpr const std::array VERTEX_DATA = { 0, 1, 2, 3, 4, 5, 6, 7 }; -static constexpr const std::array INDEX_DATA = { +// 16-bit indices: GCN 1/2 GPUs have no 8-bit index support, and some of their drivers +// emulate it wrongly in instanced draws. +static constexpr const std::array INDEX_DATA = { 0, 1, 2, // front spike 0, 2, 3, // front spike 0, 3, 4, // right/bottom body @@ -37,7 +39,7 @@ void SegmentTemplate::init() if (m_vao_id != 0) return; - m_size_in_bytes_gpu += (VERTEX_DATA.size() + INDEX_DATA.size()) * sizeof(uint8_t); + m_size_in_bytes_gpu += VERTEX_DATA.size() * sizeof(uint8_t) + INDEX_DATA.size() * sizeof(uint16_t); int curr_vertex_array; glsafe(glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &curr_vertex_array)); @@ -61,7 +63,7 @@ void SegmentTemplate::init() // and restored together with the vao. glsafe(glGenBuffers(1, &m_ibo_id)); glsafe(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo_id)); - glsafe(glBufferData(GL_ELEMENT_ARRAY_BUFFER, INDEX_DATA.size() * sizeof(uint8_t), INDEX_DATA.data(), GL_STATIC_DRAW)); + glsafe(glBufferData(GL_ELEMENT_ARRAY_BUFFER, INDEX_DATA.size() * sizeof(uint16_t), INDEX_DATA.data(), GL_STATIC_DRAW)); glsafe(glBindBuffer(GL_ARRAY_BUFFER, curr_array_buffer)); glsafe(glBindVertexArray(curr_vertex_array)); @@ -94,7 +96,7 @@ void SegmentTemplate::render(size_t count) glsafe(glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &curr_vertex_array)); glsafe(glBindVertexArray(m_vao_id)); - glsafe(glDrawElementsInstanced(GL_TRIANGLES, static_cast(INDEX_DATA.size()), GL_UNSIGNED_BYTE, + glsafe(glDrawElementsInstanced(GL_TRIANGLES, static_cast(INDEX_DATA.size()), GL_UNSIGNED_SHORT, nullptr, static_cast(count))); glsafe(glBindVertexArray(curr_vertex_array)); } From 626350269737627e341b56dfbe2ad86971c9dc59 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 13 Oct 2026 00:15:07 +0800 Subject: [PATCH 019/137] Free a sharing object's own layers only when it takes over the shared ones --- src/libslic3r/Print.cpp | 14 +++-- src/libslic3r/Support/TreeSupport.cpp | 9 ++-- tests/fff_print/test_print.cpp | 76 +++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 9 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index b636345d60..e15d9b18cd 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -2971,11 +2971,6 @@ void Print::auto_assign_extruders(ModelObject* model_object) const void PrintObject::set_shared_object(PrintObject *object) { - // Orca: from now on m_layers / m_support_layers only alias the shared object's layers, so release the - // ones this object still owns (it may have sliced itself before it became shareable again). - // Both are no-ops once m_shared_object is set, so this cannot free layers owned by another object. - clear_support_layers(); - clear_layers(); m_shared_object = object; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": this=%1%, found shared object from %2%")%this%m_shared_object; } @@ -2996,6 +2991,15 @@ void PrintObject::clear_shared_object() void PrintObject::copy_layers_from_shared_object() { if (m_shared_object) { + // Orca: Print::process() calls this once per slice for each sharing object, after clear_shared_object() has + // emptied any earlier alias, so the vectors hold only layers this object sliced itself before it started sharing + // (or nothing). Free them here, as clear_support_layers() / clear_layers() would; those skip deletion while + // m_shared_object is set. The belt-only data they also free is always empty here, because belt printers never + // share layers. + for (SupportLayer *layer : m_support_layers) + delete layer; + for (Layer *layer : m_layers) + delete layer; m_layers.clear(); m_support_layers.clear(); diff --git a/src/libslic3r/Support/TreeSupport.cpp b/src/libslic3r/Support/TreeSupport.cpp index 41668e012c..5187e73a25 100644 --- a/src/libslic3r/Support/TreeSupport.cpp +++ b/src/libslic3r/Support/TreeSupport.cpp @@ -1976,8 +1976,8 @@ coordf_t TreeSupport::get_radius(const SupportNode* node) return node->radius; } -// Orca: these are hit up to several times per node per layer in drop_nodes(), so hand out a -// reference into the TreeSupportData cache instead of copying the ExPolygons out of it. +// Orca: drop_nodes() calls these several times per node per layer, so they return a reference into the +// TreeSupportData cache. The cache only ever inserts, so its entries never move while nodes drop in parallel. const ExPolygons& TreeSupport::get_avoidance(coordf_t radius, size_t obj_layer_nr) { return m_ts_data->get_avoidance(radius, obj_layer_nr); @@ -2805,9 +2805,10 @@ void TreeSupport::draw_circles() #endif // SUPPORT_TREE_DEBUG_TO_SVG SupportLayerPtrs& ts_layers = m_object->support_layers(); - // Orca: the vector owns its layers, so the dropped ones have to be deleted, not just unlinked. + // Orca: the vector owns its layers, so the dropped ones are deleted before they are erased. // std::stable_partition (unlike std::remove_if) leaves exactly the dropped layers in the tail. - auto iter = std::stable_partition(ts_layers.begin(), ts_layers.end(), [](SupportLayer* ts_layer) { return ts_layer->height >= EPSILON; }); + // Only heights below EPSILON are dropped; written as !(height < EPSILON), a NaN height is kept. + auto iter = std::stable_partition(ts_layers.begin(), ts_layers.end(), [](SupportLayer* ts_layer) { return !(ts_layer->height < EPSILON); }); for (auto it = iter; it != ts_layers.end(); ++it) delete *it; ts_layers.erase(iter, ts_layers.end()); diff --git a/tests/fff_print/test_print.cpp b/tests/fff_print/test_print.cpp index 58f8d12e39..4b76de4b55 100644 --- a/tests/fff_print/test_print.cpp +++ b/tests/fff_print/test_print.cpp @@ -43,6 +43,7 @@ #include "libslic3r/GCode/GCodeProcessor.hpp" #include "libslic3r/Exception.hpp" #include "libslic3r/LifecycleEvents.hpp" +#include "libslic3r/Utils.hpp" #include "test_helpers.hpp" #include "test_utils.hpp" @@ -156,6 +157,81 @@ SCENARIO("Changing the number of solid shell layers does not make all surfaces i } } +// Two copies of one object share a single slice. When a copy that has sliced itself becomes identical to an +// earlier object, it keeps its own layers while that object slices and only then takes the shared layers over. +TEST_CASE("An object that starts sharing another object's slices keeps its own layers until it takes them over", "[Print][Regression]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({ + { "layer_height", 0.2 }, + { "initial_layer_print_height", 0.2 }, + { "raft_layers", 1 }, // each object gets support layers of its own + { "sparse_infill_density", "20%" }, // object_a's override below differs from this + }); + // Activates the slicing-pipeline hook installed for the second slice below. + config.set_key_value("slicing_pipeline_plugin", new ConfigOptionStrings({"probe"})); + + Print print; + Model model; + init_print({cube(20)}, print, model, config); + ModelObject *object_a = model.objects.front(); + // add_object() gives the copy extruder 1, and objects only share slices when their configs match. + object_a->config.set_key_value("extruder", new ConfigOptionInt(1)); + ModelObject *object_b = model.add_object(*object_a); // shares object_a's mesh + for (ModelInstance *instance : object_b->instances) + instance->set_offset(instance->get_offset() + Vec3d(40., 0., 0.)); + // A per-object override makes the objects differ, so each slices itself. + object_a->config.set_key_value("sparse_infill_density", new ConfigOptionPercent(40)); + + print.apply(model, config); + print.process(); + REQUIRE(print.objects().size() == 2); + // The non-const accessors hand out the layer vectors themselves, which the checks below compare. + PrintObject *print_b = print.get_object(1); + REQUIRE(print_b->model_object()->id() == object_b->id()); // Print slices its own copy of the model + REQUIRE(print_b->get_shared_object() == nullptr); + const LayerPtrs own_layers = print_b->layers(); + const SupportLayerPtrs own_support_layers = print_b->support_layers(); + REQUIRE(!own_layers.empty()); + REQUIRE(!own_support_layers.empty()); + + // Without the override the objects are identical again: print_a redoes the steps the setting invalidated, + // and print_b shares it. + object_a->config.erase("sparse_infill_density"); + print.apply(model, config); + REQUIRE(print.objects().size() == 2); + PrintObject *print_a = print.get_object(0); + + // Erasing the override invalidates print_a's posPrepareInfill and the steps after it. Its hook is the first one + // print_a fires, and it runs after print_b starts sharing but before print_b takes the shared layers over. + bool hook_fired = false; + bool shared_while_a_runs = false; + bool kept_layers = false; + bool kept_support_layers = false; + { + Print::set_slicing_pipeline_hook_fn([&](Print &, const PrintObject *object, SlicingPipelineStepPlugin) { + if (object != print_a || hook_fired) + return; + hook_fired = true; + shared_while_a_runs = print_b->get_shared_object() == print_a; + kept_layers = print_b->layers() == own_layers; + kept_support_layers = print_b->support_layers() == own_support_layers; + }); + const ScopeGuard reset_hook([] { Print::set_slicing_pipeline_hook_fn(nullptr); }); + print.process(); + } + + REQUIRE(hook_fired); + CHECK(print.objects()[1] == print_b); + CHECK(shared_while_a_runs); + CHECK(kept_layers); + CHECK(kept_support_layers); + CHECK(print_b->get_shared_object() == print_a); + REQUIRE(!print_a->layers().empty()); + CHECK(print_b->layers() == print_a->layers()); + CHECK(print_b->support_layers() == print_a->support_layers()); +} + // --------------------------------------------------------------------------- // Print::validate() warning collection // From c63bd5d474e3d23ab30f7bcc557dbb672109d604 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 13 Oct 2026 00:18:51 +0800 Subject: [PATCH 020/137] Switch to the Fast view while UV islands are selected in the texture gizmo The island highlight was hidden under the Normal view's relief. Normal comes back once no island is selected, unless another view was picked in the meantime. --- .../GUI/Gizmos/GLGizmoTextureDisplacement.cpp | 86 ++++++++++++---- .../GUI/Gizmos/GLGizmoTextureDisplacement.hpp | 28 ++++++ src/slic3r/GUI/UVEditorCanvas.cpp | 7 +- src/slic3r/GUI/UVEditorCanvas.hpp | 4 +- tests/slic3rutils/CMakeLists.txt | 1 + .../slic3rutils/test_texture_island_view.cpp | 99 +++++++++++++++++++ 6 files changed, 203 insertions(+), 22 deletions(-) create mode 100644 tests/slic3rutils/test_texture_island_view.cpp diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp index 048b005c69..768f16f567 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp @@ -562,6 +562,11 @@ void GLGizmoTextureDisplacement::on_shutdown() m_shaded_island_delta = Eigen::Matrix::Identity(); m_island_drag_active = false; m_island_move_set.clear(); + // The pane closes below, taking the highlight with it, and the view must not open the next session in a + // Fast the user never picked. Set directly: nothing is to be queued against a gizmo that is closing. + if (m_island_view.switched) + m_use_shaded_preview = false; + m_island_view = IslandViewFollow{}; m_adjust_texture_mode = false; m_seam_edit_mode = false; m_adjust_drag_handle = AdjustHandle::None; @@ -727,18 +732,13 @@ void GLGizmoTextureDisplacement::render_painter_gizmo() // The UV editor's island selection, shown on the model. Polled here rather than pushed: the pane // changes its selection in its own mouse handling, and a compare of a few ints per frame is free. - { - const TextureDisplacementLayer *al = active_layer(); - const UVEditorCanvas *uv_canvas = wxGetApp().plater()->get_uv_editor_canvas(); - if (m_show_uv_editor && al != nullptr && al->projection_method == TextureProjectionMethod::LSCM && - uv_canvas != nullptr && !m_uv_editor_unwrap.empty()) { - if (uv_canvas->selected_islands() != m_island_overlay_selection) - rebuild_island_overlay(uv_canvas->selected_islands()); - render_island_overlay(); - } else if (m_island_overlay_glmodel.is_initialized()) { - m_island_overlay_glmodel.reset(); - m_island_overlay_selection.clear(); - } + if (const std::vector *islands = island_highlight_selection()) { + if (*islands != m_island_overlay_selection) + rebuild_island_overlay(*islands); + render_island_overlay(); + } else if (m_island_overlay_glmodel.is_initialized()) { + m_island_overlay_glmodel.reset(); + m_island_overlay_selection.clear(); } // Diagnostic overlays, drawn on top of whatever preview is active (both pull toward the camera @@ -1926,6 +1926,16 @@ void GLGizmoTextureDisplacement::render_paint_overlay(GLModel &overlay) shader->stop_using(); } +const std::vector *GLGizmoTextureDisplacement::island_highlight_selection() +{ + const TextureDisplacementLayer *al = active_layer(); + const UVEditorCanvas *uv_canvas = wxGetApp().plater()->get_uv_editor_canvas(); + if (m_show_uv_editor && al != nullptr && al->projection_method == TextureProjectionMethod::LSCM && + uv_canvas != nullptr && !m_uv_editor_unwrap.empty()) + return &uv_canvas->selected_islands(); + return nullptr; +} + void GLGizmoTextureDisplacement::rebuild_island_overlay(const std::vector &selection) { m_island_overlay_glmodel.reset(); @@ -2651,6 +2661,37 @@ void GLGizmoTextureDisplacement::apply_view_mode(int mode) m_parent.set_as_dirty(); } +int GLGizmoTextureDisplacement::view_mode() const +{ + return m_use_shaded_preview ? 1 : + m_uv_check_mode == UVCheckMode::Checker ? 2 : + m_uv_check_mode == UVCheckMode::Distortion ? 3 : 0; +} + +int GLGizmoTextureDisplacement::IslandViewFollow::step(bool shown_now, int view, bool debug_open) +{ + shown = shown_now; + if (!shown) { + // The view is back to Normal already if a debug stage took it, and Normal applied over a stage would + // queue a preview job that replaces the stage being inspected. + const bool restore = switched && view == 1; + switched = keep_normal = false; + return restore ? 0 : -1; + } + if (view != 0 || keep_normal || debug_open) + return -1; + switched = true; + return 1; +} + +void GLGizmoTextureDisplacement::follow_island_highlight() +{ + const std::vector *islands = island_highlight_selection(); + const int view = m_island_view.step(islands != nullptr && !islands->empty(), view_mode(), m_debug_stage >= 0); + if (view >= 0) + apply_view_mode(view); +} + void GLGizmoTextureDisplacement::push_uv_pane_state() { UVEditorCanvas *canvas = wxGetApp().plater()->get_uv_editor_canvas(); @@ -2891,7 +2932,8 @@ void GLGizmoTextureDisplacement::run_uv_command(int cmd, float value) rebuild_preview(); } } - // FrameAll/ToggleSnap are handled inside the canvas; ProjectFromView is not wired yet. + // FrameAll/ToggleSnap are handled inside the canvas; ProjectFromView is not wired yet. SelectionChanged + // only asks for this frame: follow_island_highlight() and the overlay read the selection back themselves. m_parent.set_as_dirty(); } @@ -5835,6 +5877,9 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float GizmoImguiBegin(get_name(), flags); ensure_panel_icons(); process_uv_commands(); // clicks from the UV editor pane, run here where the GL context is current + // After the pane's commands, which can close it or change the view, and before the View row, so the row + // lights the view this frame ends up in and a click on it has the last word. + follow_island_highlight(); const float previous_body_h = m_panel_body_h; const float previous_footer_h = m_panel_footer_h; @@ -6323,10 +6368,9 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float // ---- View: Normal / Fast / Checker / Distortion as one group, Wireframe on its own ---- // The underlying state stays m_use_shaded_preview + m_uv_check_mode. { - const int cur_mode = m_use_shaded_preview ? 1 : - m_uv_check_mode == UVCheckMode::Checker ? 2 : - m_uv_check_mode == UVCheckMode::Distortion ? 3 : 0; + const int cur_mode = view_mode(); int new_mode = cur_mode; + int picked = -1; // the button clicked, the active one included bool wf_toggle = false; bool open_uv_editor = false; // Checker and Distortion both draw *the unwrap* - the first the texture grid laid over it, the second @@ -6349,19 +6393,19 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float ImGui::SetCursorPosX(std::max(ImGui::GetCursorPosX(), x0 + m_imgui->scaled(2.6f))); if (icon_toggle(701, "texture_displacement_real_preview.svg", cur_mode == 0, icon_md, _L("Normal"), _L("Normal - the real geometry, exactly what Bake will produce. Slower to update"))) - new_mode = 0; + new_mode = picked = 0; ImGui::SameLine(0.f, gap_s); if (icon_toggle(702, "texture_displacement_fast_preview.svg", cur_mode == 1, icon_md, _L("Fast"), _L("Fast - the relief is only shaded on, not built, and only for the layer you are " "editing. Updates instantly while you paint"))) - new_mode = 1; + new_mode = picked = 1; ImGui::SameLine(0.f, gap_s); if (icon_toggle(703, "texture_displacement_checker.svg", cur_mode == 2, icon_md, _L("Checker"), _L("Checker - a test grid instead of the texture. Where the squares stay square the " "texture is undistorted; where they stretch, it will too. Opens the UV editor if " "it is closed"), uv_view_na)) { - new_mode = 2; + new_mode = picked = 2; open_uv_editor = true; } ImGui::SameLine(0.f, gap_s); @@ -6369,7 +6413,7 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float _L("Distortion - blue-to-red stretch heatmap over the unwrap. Opens the UV editor if " "it is closed"), uv_view_na)) { - new_mode = 3; + new_mode = picked = 3; open_uv_editor = true; } vsep(icon_md); @@ -6393,6 +6437,8 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float if (new_mode == cur_mode) update_uv_editor(); // otherwise apply_view_mode() below does it } + if (picked >= 0) + m_island_view.picked(picked); if (new_mode != cur_mode) apply_view_mode(new_mode); if (wf_toggle) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp index 631254313c..5b754edfe9 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp @@ -197,6 +197,27 @@ public: }; static PaintedColors painted_colors(const TriangleMesh &mesh, const TriangleSelector::TriangleSplittingData &paint); + // The view while the UV editor's selected islands are highlighted on the model. The highlight lies on the + // undisplaced surface, so the Normal view's relief hides it wherever it rises: Normal gives way to Fast + // while islands are selected and comes back once none are. A view the user clicks in the View row is + // theirs - the pane's background buttons are not a pick, Height only meaning "the texture view". + struct IslandViewFollow + { + bool shown = false; // the highlight, as of the last step() + bool switched = false; // Fast was switched on for the highlight, so Normal comes back once it is gone + bool keep_normal = false; // the user picked Normal in the View row while the highlight was shown + // The view to apply this frame (0 Normal, 1 Fast), or -1 for none. `view` is the one on screen, numbered as + // apply_view_mode() takes it; `debug_open` a debug stage on screen, which holds Normal itself. + int step(bool shown_now, int view, bool debug_open); + // A View row button clicked, the active one included. The row is drawn after step() in the same frame, + // so `shown` is this frame's. + void picked(int view) + { + switched = false; + keep_normal = shown && view == 0; + } + }; + void render_painter_gizmo() override; // Intercepts mouse input while "Adjust Texture" mode is on (dragging the on-canvas offset/ @@ -513,6 +534,11 @@ private: // The panel's view modes: 0 Normal, 1 Fast, 2 Checker, 3 Distortion. Shared by the View row and the pane's // background buttons, so both switch views the same way. void apply_view_mode(int mode); + // The view on screen, numbered as apply_view_mode() takes it. + int view_mode() const; + // Run once a frame, after the pane's commands: switches the view as m_island_view says. + void follow_island_highlight(); + IslandViewFollow m_island_view; // The pane header's thumbnail of the active layer's texture, rebuilt only when its image changes. static constexpr int UV_THUMB_PX = 64; const void *m_uv_thumb_source = nullptr; @@ -744,6 +770,8 @@ private: // in place. Rebuilt whenever the pane's selection differs from the one it was built for. GLModel m_island_overlay_glmodel; std::vector m_island_overlay_selection; + // The pane's selection while the overlay applies - the pane open over an unwrapped LSCM layer - else null. + const std::vector *island_highlight_selection(); void rebuild_island_overlay(const std::vector &selection); void render_island_overlay(); // Set on every paint event, cleared when the overlay is rebuilt in render_painter_gizmo(). Kept diff --git a/src/slic3r/GUI/UVEditorCanvas.cpp b/src/slic3r/GUI/UVEditorCanvas.cpp index 2432026689..a4a9901822 100644 --- a/src/slic3r/GUI/UVEditorCanvas.cpp +++ b/src/slic3r/GUI/UVEditorCanvas.cpp @@ -939,7 +939,8 @@ void UVEditorCanvas::on_mouse(wxMouseEvent &evt) m_active_edge = (hit.first >= 0 && is_edge_selected(hit)) ? hit : std::pair{ -1, -1 }; m_gesture = (m_active_edge.first >= 0) ? Gesture::MoveEdge : Gesture::Pan; } else { - const int hit = island_at(uv); + const std::vector selection_before = m_selection; + const int hit = island_at(uv); if (hit >= 0) { if (evt.ShiftDown()) { // Shift adds to the selection (and makes the clicked one the new primary). @@ -969,6 +970,10 @@ void UVEditorCanvas::on_mouse(wxMouseEvent &evt) m_selected_island = -1; } m_gesture = (m_selected_island >= 0) ? Gesture::MoveIsland : Gesture::Pan; + // The owner shows the selection on the model and would not hear of this click otherwise in time: a + // click that clears the selection starts no gesture, and one that sets it reports only on release. + if (m_selection != selection_before) + run_command(Command::SelectionChanged); } grab_mouse(); Refresh(); diff --git a/src/slic3r/GUI/UVEditorCanvas.hpp b/src/slic3r/GUI/UVEditorCanvas.hpp index 2fc1055cb8..a01d058983 100644 --- a/src/slic3r/GUI/UVEditorCanvas.hpp +++ b/src/slic3r/GUI/UVEditorCanvas.hpp @@ -108,10 +108,12 @@ public: // the command callback - the canvas has the selection and the view, the gizmo has the layer. // `value` carries the new setting for the Set* commands (an angle, a flag as 0/1, or an index into // SelectMode / Background) and is 0 otherwise. + // SelectionChanged is sent by the canvas itself when a click changes the island selection. It carries + // nothing: the owner reads selected_islands() back, and only needs telling that it should look. enum class Command { FrameAll, ToggleSnap, AverageScale, CutSelectedIsland, ProjectFromView, JoinSelected, UnjoinSelected, Unwrap, SetSeamAngle, SetConnectIslands, SetSelectMode, SetMarkSeams, SetSeamPath, ClearSeams, ClearUVEdits, - SetBackground, PickTexture, PaneClosed + SetBackground, PickTexture, PaneClosed, SelectionChanged }; void run_command(Command cmd, float value = 0.f); using CommandFn = std::function; diff --git a/tests/slic3rutils/CMakeLists.txt b/tests/slic3rutils/CMakeLists.txt index db56a510ac..2fe6512d9e 100644 --- a/tests/slic3rutils/CMakeLists.txt +++ b/tests/slic3rutils/CMakeLists.txt @@ -37,6 +37,7 @@ add_executable(${_TEST_NAME}_tests test_plugin_json_depth.cpp test_shortcuts.cpp test_texture_color_palette.cpp + test_texture_island_view.cpp test_file_url.cpp test_user_manager.cpp ../fff_print/test_helpers.cpp diff --git a/tests/slic3rutils/test_texture_island_view.cpp b/tests/slic3rutils/test_texture_island_view.cpp new file mode 100644 index 0000000000..9655c86115 --- /dev/null +++ b/tests/slic3rutils/test_texture_island_view.cpp @@ -0,0 +1,99 @@ +// How the texture displacement gizmo's view follows the UV editor's island highlight. The rules live in +// libslic3r_gui; this is the suite that links it. Same Windows include prologue as +// test_texture_color_palette.cpp (wx pulls in ; keep WIN32_LEAN_AND_MEAN / NOMINMAX ahead of it). +#ifdef WIN32 + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #ifndef NOMINMAX + #define NOMINMAX + #endif + #include +#endif + +#include +#include + +#include "slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp" + +using Follow = Slic3r::GUI::GLGizmoTextureDisplacement::IslandViewFollow; + +namespace { + +// The View row's indices, and step()'s "apply nothing". +constexpr int NORMAL = 0, FAST = 1, CHECKER = 2, DISTORTION = 3, NONE = -1; + +} // namespace + +TEST_CASE("a Normal view gives way to Fast while islands are selected and comes back once none are", "[TextureIslandView][TextureDisplacement]") +{ + Follow f; + CHECK(f.step(false, NORMAL, false) == NONE); + CHECK(f.step(true, NORMAL, false) == FAST); + CHECK(f.step(true, FAST, false) == NONE); + CHECK(f.step(false, FAST, false) == NORMAL); + CHECK(f.step(false, NORMAL, false) == NONE); +} + +TEST_CASE("a Fast, Checker or Distortion view is left alone by the island highlight", "[TextureIslandView][TextureDisplacement]") +{ + const int view = GENERATE(FAST, CHECKER, DISTORTION); + Follow f; + CHECK(f.step(true, view, false) == NONE); + CHECK(f.step(false, view, false) == NONE); +} + +TEST_CASE("arriving in Normal with islands already selected switches to Fast", "[TextureIslandView][TextureDisplacement]") +{ + // The pane's Height button over Checker lands in Normal with the islands still selected. + Follow f; + CHECK(f.step(true, CHECKER, false) == NONE); + CHECK(f.step(true, NORMAL, false) == FAST); + CHECK(f.step(false, FAST, false) == NORMAL); +} + +TEST_CASE("Normal picked while islands are selected stays until they are deselected", "[TextureIslandView][TextureDisplacement]") +{ + Follow f; + REQUIRE(f.step(true, NORMAL, false) == FAST); + f.picked(NORMAL); + CHECK(f.step(true, NORMAL, false) == NONE); + // A debug stage opening and closing over it changes nothing. + CHECK(f.step(true, NORMAL, true) == NONE); + CHECK(f.step(true, NORMAL, false) == NONE); + CHECK(f.step(false, NORMAL, false) == NONE); + CHECK(f.step(true, NORMAL, false) == FAST); +} + +TEST_CASE("Fast picked while it was switched on stays after deselecting", "[TextureIslandView][TextureDisplacement]") +{ + Follow f; + REQUIRE(f.step(true, NORMAL, false) == FAST); + f.picked(FAST); + CHECK(f.step(false, FAST, false) == NONE); +} + +TEST_CASE("Normal picked with nothing selected does not hold off the next switch", "[TextureIslandView][TextureDisplacement]") +{ + Follow f; + CHECK(f.step(false, NORMAL, false) == NONE); + f.picked(NORMAL); + CHECK(f.step(true, NORMAL, false) == FAST); +} + +TEST_CASE("a debug stage holds Normal while it is open, and the switch follows once it closes", "[TextureIslandView][TextureDisplacement]") +{ + Follow f; + REQUIRE(f.step(true, NORMAL, false) == FAST); + // The stage takes Normal itself, with the islands still selected. + CHECK(f.step(true, NORMAL, true) == NONE); + CHECK(f.step(true, NORMAL, false) == FAST); +} + +TEST_CASE("islands deselected while a debug stage is open apply no view over it", "[TextureIslandView][TextureDisplacement]") +{ + Follow f; + REQUIRE(f.step(true, NORMAL, false) == FAST); + CHECK(f.step(false, NORMAL, true) == NONE); + CHECK(f.step(false, NORMAL, false) == NONE); +} From 1494de66dec11be6c3a37f73cb78bf96c9e8009f Mon Sep 17 00:00:00 2001 From: Fernando Marino` Date: Mon, 12 Oct 2026 21:26:20 +0200 Subject: [PATCH 021/137] Bracket a toolchange's own gcode against FanMover splitting its moves (#15904) FanMover could split a move inside change_filament_gcode to place a delayed fan command. It computed the split point from the last position the G-code set, but on Bambu printers the firmware moves the head during the T command, so the inserted waypoint sent the head to a spot the template never visits (#15789). Both toolchange paths, set_extruder() and the Type1 append_tcr(), now wrap the template output in ;_FAN_MOVER_SKIP_START/END tags when fan speed-up or kick-start is on. FanMover keeps fan commands inside them where they are and drops the tags from the output. multifilament_config() also sizes the per-filament options that the wipe tower reads by index. --- src/libslic3r/GCode.cpp | 15 +++++- src/libslic3r/GCode/FanMover.cpp | 5 ++ tests/fff_print/test_helpers.cpp | 5 +- tests/fff_print/test_multifilament.cpp | 73 ++++++++++++++++++++++++++ 4 files changed, 96 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index ec7ef83a3d..b79a386324 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1033,6 +1033,15 @@ static std::vector get_path_of_change_filament(const Print& print) return buf; } + // FanMover consumes these markers (and drops them) to avoid splitting a G1 inside custom gcode. + // Only written when FanMover runs, the same gate as its construction in GCode::process_layers. + static std::string wrap_custom_gcode_for_fan_mover(const FullPrintConfig &config, const std::string &gcode) + { + if (config.fan_speedup_time.value == 0 && config.fan_kickstart.value <= 0) + return gcode; + return ";_FAN_MOVER_SKIP_START\n" + gcode + ";_FAN_MOVER_SKIP_END\n"; + } + std::string WipeTowerIntegration::append_tcr(GCode& gcodegen, const WipeTower::ToolChangeResult& tcr, int new_filament_id, double z) const { if (new_filament_id != -1 && new_filament_id != tcr.new_tool) @@ -1384,6 +1393,9 @@ static std::vector get_path_of_change_filament(const Print& print) toolchange_gcode_str = gcodegen.placeholder_parser_process("change_filament_gcode", change_filament_gcode, new_filament_id, &config); check_add_eol(toolchange_gcode_str); + // Type1 wipe tower path (every BBL printer): bracket the same way set_extruder() does, + // so FanMover doesn't split a G1 inside this custom gcode either. + toolchange_gcode_str = wrap_custom_gcode_for_fan_mover(gcodegen.config(), toolchange_gcode_str); //BBS { @@ -10895,7 +10907,8 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo toolchange_gcode_parsed = placeholder_parser_process("change_filament_gcode", change_filament_gcode, new_filament_id, &dyn_config); check_add_eol(toolchange_gcode_parsed); - gcode += toolchange_gcode_parsed; + // toolchange_gcode_parsed is still read below (get_last_z_from_gcode, custom_gcode_changes_tool). + gcode += wrap_custom_gcode_for_fan_mover(m_config, toolchange_gcode_parsed); //BBS { diff --git a/src/libslic3r/GCode/FanMover.cpp b/src/libslic3r/GCode/FanMover.cpp index d303cbbac6..d49ca8b114 100644 --- a/src/libslic3r/GCode/FanMover.cpp +++ b/src/libslic3r/GCode/FanMover.cpp @@ -445,6 +445,11 @@ void FanMover::_process_gcode_line(GCodeReader& reader, const GCodeReader::GCode std::string extrusion_string = line.raw().substr(6, line.raw().size() - 6); current_role = ExtrusionEntity::string_to_role(extrusion_string); } + if (line.raw().rfind(";_FAN_MOVER_SKIP_", 0) == 0) { + // Internal markers: read here, then dropped from the output. + m_is_custom_gcode = line.raw().rfind(";_FAN_MOVER_SKIP_START", 0) == 0; + time = -1; + } if (line.raw().size() > 16) { if (line.raw().rfind("; custom gcode", 0) != std::string::npos) { if (line.raw().rfind("; custom gcode end", 0) != std::string::npos) diff --git a/tests/fff_print/test_helpers.cpp b/tests/fff_print/test_helpers.cpp index c7302d4c4b..daa8132d5d 100644 --- a/tests/fff_print/test_helpers.cpp +++ b/tests/fff_print/test_helpers.cpp @@ -223,7 +223,10 @@ DynamicPrintConfig multifilament_config(unsigned int filaments, std::initializer // These are read by filament id during export but absent from filament_option_keys(), // so set_num_filaments leaves them size 1; size them too, else out-of-range access. const auto &defaults = FullPrintConfig::defaults(); - for (const char *key : { "filament_type", "filament_vendor", "filament_start_gcode" }) + for (const char *key : { "filament_type", "filament_vendor", "filament_start_gcode", "filament_change_length", "filament_change_length_nc", + "filament_ramming_travel_time", "filament_ramming_travel_time_nc", + "filament_ramming_volumetric_speed", "filament_ramming_volumetric_speed_nc", + "nozzle_temperature", "nozzle_temperature_initial_layer" }) static_cast(config.option(key, true))->resize(filaments, defaults.option(key)); // flush_volumes_matrix must be sized filaments*filaments or export rejects it. diff --git a/tests/fff_print/test_multifilament.cpp b/tests/fff_print/test_multifilament.cpp index e1f70571b8..54a98d2268 100644 --- a/tests/fff_print/test_multifilament.cpp +++ b/tests/fff_print/test_multifilament.cpp @@ -315,6 +315,79 @@ TEST_CASE("Per-object wall filament override is honored", "[MultiFilament]") CHECK(tools_for_role(gcode, "infill") == std::set{ 0 }); // infill not overridden: stays on F1 } +// FanMover's guard against splitting a G1 inside custom gcode keys off the ";_FAN_MOVER_SKIP_START/END" +// markers GCode::set_extruder() must emit around change_filament_gcode's output. Direct +// toolchanges and Type2's wipe-tower toolchange (append_tcr2() calls set_extruder()) both go +// through it; Type1's wipe-tower toolchange (WipeTowerIntegration::append_tcr(), append_tcr2's only +// sibling caller of change_filament_gcode) needs the same bracketing of its own. +TEST_CASE("Toolchange gcode is bracketed against FanMover splitting its moves", "[MultiFilament]") +{ + const std::string custom_gcode = "; fan full\nM106 P1 S255\nM400 S3\nG1 X77 F5000\nG1 X91 F3000\n"; + + // "direct": no prime tower, GCode::set_extruder() runs the toolchange. By-object sequencing + // with a per-object filament override is what makes one happen at all without a tower. + // "type1": a Type1 prime tower routes the toolchange through WipeTowerIntegration::append_tcr() + // instead (append_tcr2, Type2's equivalent, itself calls set_extruder() - so Type2 needs no + // separate case here). + const std::string path = GENERATE(as{}, "direct", "type1"); + CAPTURE(path); + + std::string gcode_str; + if (path == "direct") { + const std::vector> per_object_overrides = { + {}, { { "outer_wall_filament_id", "2" }, { "inner_wall_filament_id", "2" } } + }; + DynamicPrintConfig config = multifilament_config(2, { + { "skirt_loops", 0 }, + { "brim_type", "no_brim" }, + { "print_sequence", "by object" }, + { "change_filament_gcode", custom_gcode }, + { "fan_speedup_time", 0.5 }, + { "fan_kickstart", 0.1 }, + }); + gcode_str = slice_with_object_overrides({ cube(20), cube(20) }, config, per_object_overrides); + } else { + const std::vector> per_object_overrides = { + { { "extruder", "1" } }, { { "extruder", "2" } } + }; + DynamicPrintConfig config = multifilament_config(2, { + { "change_filament_gcode", custom_gcode }, + { "fan_speedup_time", 0.5 }, + { "fan_kickstart", 0.1 }, + { "enable_prime_tower", true }, + { "wipe_tower_type", "type1" }, + { "prime_tower_width", 35 }, + { "wipe_tower_x", 120 }, + { "wipe_tower_y", 120 }, + { "printable_area", "0x0,200x0,200x200,0x200" }, + { "skirt_loops", 0 }, + { "brim_type", "no_brim" }, + }); + gcode_str = slice_with_object_overrides({ cube(20), cube(20) }, config, per_object_overrides); + } + + // The resolved-settings config footer echoes "change_filament_gcode = ..." with its value + // escaped, so drop it before counting or its own copy of "G1 X77 F5000" is miscounted. + const size_t footer_start = gcode_str.find("; CONFIG_BLOCK_START"); + REQUIRE(footer_start != std::string::npos); + gcode_str.erase(footer_start); + + auto count_occurrences = [](const std::string &haystack, const std::string &needle) { + size_t count = 0, pos = 0; + while ((pos = haystack.find(needle, pos)) != std::string::npos) { + ++count; + pos += needle.size(); + } + return count; + }; + const size_t total_waypoints = count_occurrences(gcode_str, "G1 X77 F5000"); + const size_t bracketed = count_occurrences(gcode_str, "M400 S3\nG1 X77 F5000"); + REQUIRE(total_waypoints > 0); + CHECK(bracketed == total_waypoints); + // FanMover drops its own markers; only the start-of-print toolchange, which it never processes, keeps them. + CHECK(count_occurrences(gcode_str, ";_FAN_MOVER_SKIP_START") <= 1); +} + // With wait_for_temp_on_wipe_tower the blocking M109 moves from right after the Tn command to // a stop point parked beside the wipe tower (heat-up drool falls next to the tower, not onto // its top): tagged with _WAIT_FOR_TEMP_ON_WIPE_TOWER, after the toolchange and before the From f127b758ed9e82b4a1ac8f5040a32ee255e9bb5a Mon Sep 17 00:00:00 2001 From: packerlschupfer <83344883+packerlschupfer@users.noreply.github.com> Date: Mon, 12 Oct 2026 22:17:38 +0200 Subject: [PATCH 022/137] CLI: Don't rotate objects when arranging unless --allow-rotations is passed (#15033) The CLI's arrange no longer rotates objects unless --allow-rotations is passed, which matches the GUI's default. STL, OBJ and STEP inputs are arranged even without --arrange, so a part that only fits the bed when rotated now exits with -50 unless --allow-rotations is given. The CLI prints that reason to stderr. --- src/OrcaSlicer.cpp | 15 ++++- src/libslic3r/PrintConfig.cpp | 2 +- tests/cli/CMakeLists.txt | 8 +++ tests/cli/test_cli_arrange_rotations.sh | 89 +++++++++++++++++++++++++ 4 files changed, 111 insertions(+), 3 deletions(-) create mode 100755 tests/cli/test_cli_arrange_rotations.sh diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 1b764fe468..c42ae676cc 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -1463,7 +1463,7 @@ int CLI::run(int argc, char **argv) //int arrange_option; int plate_to_slice = 0, filament_count = 0, duplicate_count = 0, real_duplicate_count = 0, current_extruder_count = 1, new_extruder_count = 1, current_printer_variant_count = 1, current_print_variant_count = 1, new_printer_variant_count = 1; bool first_file = true, is_bbl_3mf = false, need_arrange = true, has_thumbnails = false, up_config_to_date = false, normative_check = true, duplicate_single_object = false, use_first_fila_as_default = false, minimum_save = false, enable_timelapse = false; - bool allow_rotations = true, skip_modified_gcodes = false, avoid_extrusion_cali_region = false, skip_useless_pick = false, allow_newer_file = false, current_is_multi_extruder = false, new_is_multi_extruder = false, allow_mix_temp = false, enable_wrapping_detect = false; + bool allow_rotations = false, skip_modified_gcodes = false, avoid_extrusion_cali_region = false, skip_useless_pick = false, allow_newer_file = false, current_is_multi_extruder = false, new_is_multi_extruder = false, allow_mix_temp = false, enable_wrapping_detect = false; Semver file_version; std::map orients_requirement; std::vector project_presets; @@ -5142,6 +5142,7 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << "finished model pre-process commands\n"; bool oriented_or_arranged = false; + bool arranged_without_rotations = false; //BBS: add orient and arrange logic here for (auto& model : m_models) { @@ -5409,6 +5410,7 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << boost::format("start plate %1%'s arranging...") % (i + 1); arrangement::arrange(selected, unselected, beds, arrange_cfg); //arrangement::arrange(unprintable, {}, beds, arrange_cfg); + arranged_without_rotations |= !arrange_cfg.allow_rotations; BOOST_LOG_TRIVIAL(info) << boost::format("finished plate %1%'s arranging") % (i + 1); //step-4: postprocess the bed index and result @@ -5881,6 +5883,7 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << boost::format("start %1% th arranging...")%arrange_count; arrangement::arrange(selected, unselected, beds, arrange_cfg); arrangement::arrange(unprintable, {}, beds, arrange_cfg); + arranged_without_rotations |= !arrange_cfg.allow_rotations; BOOST_LOG_TRIVIAL(info) << boost::format("finished %1% th arranging...")%arrange_count; //Step-4:postprocess by partplate list&&apply the result @@ -6425,7 +6428,15 @@ int CLI::run(int argc, char **argv) if (count == 0) { BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Nothing to be sliced, Either the print is empty or no object is fully inside the print volume before apply." << std::endl; - record_exit_reson(outfile_dir, CLI_NO_SUITABLE_OBJECTS, index+1, cli_errors[CLI_NO_SUITABLE_OBJECTS], sliced_info); + std::string no_objects_reason = cli_errors[CLI_NO_SUITABLE_OBJECTS]; + if (arranged_without_rotations) { + //ORCA: result.json is only written on Linux, so also print the reason to stderr. + no_objects_reason = "No object is fully inside the print volume. Arrange ran without rotations." + " If an object only fits the bed when rotated, pass --allow-rotations." + " Otherwise the plate is empty or an object is larger than the printable area or height."; + boost::nowide::cerr << "plate " << index+1 << ": " << no_objects_reason << std::endl; + } + record_exit_reson(outfile_dir, CLI_NO_SUITABLE_OBJECTS, index+1, no_objects_reason, sliced_info); flush_and_exit(CLI_NO_SUITABLE_OBJECTS); } else if ((plate_to_slice != 0) || pre_check) { diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 9e3958bc25..b081f14248 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -13085,7 +13085,7 @@ CLIMiscConfigDef::CLIMiscConfigDef() def = this->add("allow_rotations", coBool); def->label = L("Allow rotation when arranging"); def->tooltip = L("If enabled, Arrange will allow rotation when placing objects."); - def->set_default_value(new ConfigOptionBool(true)); + def->set_default_value(new ConfigOptionBool(false)); def = this->add("align_to_y_axis", coBool); def->label = L("Align to Y axis when arranging"); diff --git a/tests/cli/CMakeLists.txt b/tests/cli/CMakeLists.txt index dddebee566..d48fe479cf 100644 --- a/tests/cli/CMakeLists.txt +++ b/tests/cli/CMakeLists.txt @@ -31,6 +31,14 @@ set_tests_properties(cli_project_missing_keys PROPERTIES SKIP_RETURN_CODE 77 TIMEOUT 900) +add_test(NAME cli_arrange_rotations + COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/test_cli_arrange_rotations.sh $ ${ORCA_CLI_TEST_PYTHON} + ${CMAKE_SOURCE_DIR}/resources/profiles/BBL) +set_tests_properties(cli_arrange_rotations PROPERTIES + LABELS "CLI;RequiresApp" + SKIP_RETURN_CODE 77 + TIMEOUT 900) + add_test(NAME cli_malformed_input COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/test_cli_malformed_input.sh $ ${ORCA_CLI_TEST_PYTHON}) set_tests_properties(cli_malformed_input PROPERTIES diff --git a/tests/cli/test_cli_arrange_rotations.sh b/tests/cli/test_cli_arrange_rotations.sh new file mode 100755 index 0000000000..e0f9d33adc --- /dev/null +++ b/tests/cli/test_cli_arrange_rotations.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +# End-to-end check of the CLI's arrange rotation policy. +# +# Arrange is translate-only unless --allow-rotations is passed, so a bar that fits the bed only +# diagonally is not placed and the plate ends up with nothing fully inside the print volume. The +# run must then say that rotations were off, on stderr as well as in result.json, because +# result.json is written on Linux only. Passing the flag must place the same bar and slice it, and +# an object that fits axis-aligned must be unaffected by the default. +# +# usage: test_cli_arrange_rotations.sh +set -u + +BIN="${1:-}" +PY="${2:-python3}" +PROFILES="${3:-}" +# 77 is the test's SKIP_RETURN_CODE. +[ -x "$BIN" ] || { echo "SKIP: orca-slicer binary not found: $BIN"; exit 77; } +[ -d "$PROFILES" ] || { echo "FAIL: profiles directory not found: $PROFILES"; exit 1; } + +WORK="$(mktemp -d "${TMPDIR:-/tmp}/orca-cli-arrange-rotations.XXXXXX")" +trap 'rm -rf "$WORK"' EXIT + +# box : an ASCII STL box, so the test needs no fixture. +box() { + "$PY" - "$@" <<'EOF' +import sys + +out, sx, sy, sz = sys.argv[1], float(sys.argv[2]), float(sys.argv[3]), float(sys.argv[4]) +v = [(x, y, z) for z in (0, sz) for y in (0, sy) for x in (0, sx)] +with open(out, "w") as f: + f.write("solid box\n") + for a, b, c, d in ((0, 2, 3, 1), (4, 5, 7, 6), (0, 1, 5, 4), (2, 6, 7, 3), (0, 4, 6, 2), (1, 3, 7, 5)): + for tri in ((v[a], v[b], v[c]), (v[a], v[c], v[d])): + f.write("facet normal 0 0 0\nouter loop\n") + for p in tri: + f.write("vertex %g %g %g\n" % p) + f.write("endloop\nendfacet\n") + f.write("endsolid box\n") +EOF +} + +# Longer than the 256 mm bed edge, shorter than its 362 mm diagonal: it fits only turned. +box "$WORK/bar.stl" 300 10 5 +# Fits axis-aligned, so the default must not change anything for it. +box "$WORK/cube.stl" 10 10 10 + +# slice [option...] -> $WORK//{rc,stdout,stderr,result.json} +slice() { + local out="$WORK/$1" input="$2"; shift 2 + mkdir -p "$out" + timeout 300 "$BIN" --datadir "$out/datadir" \ + --load-settings "$PROFILES/machine/Bambu Lab X1 Carbon 0.4 nozzle.json;$PROFILES/process/0.20mm Standard @BBL X1C.json" \ + --load-defaultfila "$@" --slice 0 --outputdir "$out" "$input" \ + > "$out/stdout" 2> "$out/stderr" + echo "$?" > "$out/rc" +} + +# exit_code : the CLI's negative code as the shell saw it, e.g. -50 arrives as 206. +exit_code() { "$PY" -c "import sys; rc = int(open(sys.argv[1]).read()); print(rc - 256 if rc > 127 else rc)" "$WORK/$1/rc"; } + +fail() { echo "FAIL: $*"; exit 1; } + +# 1. Default: no flag, so no rotations, so the bar does not fit and the reason names rotation. +slice default "$WORK/bar.stl" +[ "$(exit_code default)" = "-50" ] || fail "default: expected -50, got $(exit_code default)" +grep -q "Arrange ran without rotations" "$WORK/default/stderr" \ + || fail "default: stderr does not mention rotations: $(cat "$WORK/default/stderr")" +"$PY" - "$WORK/default/result.json" <<'EOF' || exit 1 +import json, sys + +result = json.load(open(sys.argv[1])) +if result["return_code"] != -50: + sys.exit("FAIL: result.json return_code %s, expected -50" % result["return_code"]) +if "Arrange ran without rotations" not in result["error_string"]: + sys.exit("FAIL: result.json error_string does not mention rotations: %s" % result["error_string"]) +EOF + +# 2. The flag is coBool, so it takes no value: it must place the same bar and slice it. +slice rotations "$WORK/bar.stl" --allow-rotations +[ "$(exit_code rotations)" = "0" ] || fail "--allow-rotations: expected 0, got $(exit_code rotations); $(tail -n 5 "$WORK/rotations/stdout")" +[ -s "$WORK/rotations/plate_1.gcode" ] || fail "--allow-rotations: no g-code written" + +# 3. An object that fits axis-aligned is unaffected by the default, and says nothing about rotation. +slice cube "$WORK/cube.stl" +[ "$(exit_code cube)" = "0" ] || fail "cube: expected 0, got $(exit_code cube); $(tail -n 5 "$WORK/cube/stdout")" +[ -s "$WORK/cube/plate_1.gcode" ] || fail "cube: no g-code written" +grep -q "Arrange ran without rotations" "$WORK/cube/stderr" && fail "cube: unexpected rotation message on a successful run" + +echo "PASS: arrange rotation default, its failure message, and the opt-in flag" From 58a71331d0b89f6a664ee695d6614c38a076b62e Mon Sep 17 00:00:00 2001 From: Downtime Date: Mon, 12 Oct 2026 15:32:59 -0500 Subject: [PATCH 023/137] fix(gui): balance ImGui style stacks in gizmo windows (#16269) Pop the FramePadding style var before end() in the move and rotate gizmo windows. It was pushed inside the window and popped after End(), which failed ImGui's style stack check in Debug builds. --- src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp index bb76a171b8..be3e961e09 100644 --- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp +++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp @@ -925,8 +925,9 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper, m_last_active_item = current_active_id; last_move_input_window_width = ImGui::GetWindowWidth(); + ImGui::PopStyleVar(); imgui_wrapper->end(); - ImGui::PopStyleVar(2); + ImGui::PopStyleVar(); ImGuiWrapper::pop_toolbar_style(); } @@ -1131,10 +1132,11 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe m_last_active_item = current_active_id; last_rotate_input_window_width = ImGui::GetWindowWidth(); + ImGui::PopStyleVar(); imgui_wrapper->end(); // BBS - ImGui::PopStyleVar(2); + ImGui::PopStyleVar(); ImGuiWrapper::pop_toolbar_style(); } From f0e9cdc470f3eba904a9a6cc2109e3793522b103 Mon Sep 17 00:00:00 2001 From: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> Date: Mon, 12 Oct 2026 18:24:25 -0300 Subject: [PATCH 024/137] raft expansion (#16416) Update ConfigManipulation.cpp Co-authored-by: Accelerator <22743445+acceleratorlastorder@users.noreply.github.com> Co-authored-by: Ian Bassi <12130714+ianalexis@users.noreply.github.com> --- src/slic3r/GUI/ConfigManipulation.cpp | 4 ++++ src/slic3r/GUI/Tab.cpp | 1 + 2 files changed, 5 insertions(+) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index da5acf8272..cd7e44b5d6 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -1105,6 +1105,10 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in toggle_field("support_filament", have_support_material || have_skirt); toggle_line("raft_contact_distance", have_raft && !have_support_soluble); + // Orca:Hide raft expansion when raft is not enabled + toggle_line("raft_expansion", have_raft); + // Orca: Slim, Strong and Hybrid tree supports size their raft by first layer expansion only. + toggle_field("raft_expansion", !(is_tree(support_type) && (support_style == smsTreeSlim || support_style == smsTreeStrong || support_style == smsTreeHybrid))); // Orca: First-layer density is available for supports broadly. toggle_field("raft_first_layer_density", have_support_material); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 456bfb82fd..772d3efb5d 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -3098,6 +3098,7 @@ void TabPrint::build() optgroup = page->new_optgroup(L("Raft"), L"param_raft"); optgroup->append_single_option_line("raft_layers", "support_settings_raft"); optgroup->append_single_option_line("raft_contact_distance", "support_settings_raft"); + optgroup->append_single_option_line("raft_expansion", "support_settings_raft"); optgroup = page->new_optgroup(L("Filament for Supports"), L"param_support_filament"); optgroup->append_single_option_line("support_filament", "support_settings_filament#base"); From 3dd547c8be444585fdd3e954f097825ccf01f78b Mon Sep 17 00:00:00 2001 From: packerlschupfer <83344883+packerlschupfer@users.noreply.github.com> Date: Tue, 13 Oct 2026 01:23:55 +0200 Subject: [PATCH 025/137] CLI: Fix the -50 error reason assuming a 3mf upload (#16339) The reason recorded for CLI_NO_SUITABLE_OBJECTS (-50) assumed a 3mf being uploaded. The CLI also slices STL, OBJ and STEP input, so the reason now states what both -50 sites check: the plate is empty, or no object on it is both printable and fully inside the print volume. The exit code is unchanged. Adds tests/cli/test_cli_no_suitable_objects.sh. --- src/OrcaSlicer.cpp | 2 +- tests/cli/CMakeLists.txt | 8 +++ tests/cli/test_cli_no_suitable_objects.sh | 83 +++++++++++++++++++++++ 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100755 tests/cli/test_cli_no_suitable_objects.sh diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index c42ae676cc..0d0aea0954 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -206,7 +206,7 @@ std::map cli_errors = { {CLI_OBJECT_ORIENT_FAILED, "An error occurred when auto-orienting object(s)."}, {CLI_MODIFIED_PARAMS_TO_PRINTER, "Found modified parameter in printer preset in the 3mf file, which should not be changed."}, {CLI_FILE_VERSION_NOT_SUPPORTED, "Unsupported 3MF version. Please make sure the 3MF file was created with the official version of Bambu Studio, not a beta version."}, - {CLI_NO_SUITABLE_OBJECTS, "One of the plate is empty or has no object fully inside it. Please check that the 3mf contains no empty plate in Orca Slicer before uploading."}, + {CLI_NO_SUITABLE_OBJECTS, "The plate has nothing to slice: it is empty, or no object on it is both printable and fully inside the print volume."}, {CLI_VALIDATE_ERROR, "There are some incorrect slicing parameters in the 3mf. Please verify the slicing of all plates in Orca Slicer before uploading."}, {CLI_OBJECTS_PARTLY_INSIDE, "Some objects are located over the boundary of the heated bed."}, {CLI_EXPORT_CACHE_DIRECTORY_CREATE_FAILED, "Failed creating directory when exporting cache data."}, diff --git a/tests/cli/CMakeLists.txt b/tests/cli/CMakeLists.txt index d48fe479cf..3f2982c453 100644 --- a/tests/cli/CMakeLists.txt +++ b/tests/cli/CMakeLists.txt @@ -39,6 +39,14 @@ set_tests_properties(cli_arrange_rotations PROPERTIES SKIP_RETURN_CODE 77 TIMEOUT 900) +add_test(NAME cli_no_suitable_objects + COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/test_cli_no_suitable_objects.sh $ ${ORCA_CLI_TEST_PYTHON} + ${CMAKE_SOURCE_DIR}/resources/profiles/BBL) +set_tests_properties(cli_no_suitable_objects PROPERTIES + LABELS "CLI;RequiresApp" + SKIP_RETURN_CODE 77 + TIMEOUT 900) + add_test(NAME cli_malformed_input COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/test_cli_malformed_input.sh $ ${ORCA_CLI_TEST_PYTHON}) set_tests_properties(cli_malformed_input PROPERTIES diff --git a/tests/cli/test_cli_no_suitable_objects.sh b/tests/cli/test_cli_no_suitable_objects.sh new file mode 100755 index 0000000000..dad9dd4120 --- /dev/null +++ b/tests/cli/test_cli_no_suitable_objects.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# The reason recorded for CLI_NO_SUITABLE_OBJECTS (-50) has to fit the input the CLI was given. +# Any input format is arranged and sliced, so an object larger than the bed empties the plate just +# as a 3mf with an empty plate does, and the recorded reason must not send such a caller off to +# inspect a 3mf or an upload that is not part of their run. +# +# usage: test_cli_no_suitable_objects.sh +set -u + +BIN="${1:-}" +PY="${2:-python3}" +PROFILES="${3:-}" +# 77 is the test's SKIP_RETURN_CODE. +[ -x "$BIN" ] || { echo "SKIP: orca-slicer binary not found: $BIN"; exit 77; } +[ -d "$PROFILES" ] || { echo "FAIL: profiles directory not found: $PROFILES"; exit 1; } + +WORK="$(mktemp -d "${TMPDIR:-/tmp}/orca-cli-no-suitable-objects.XXXXXX")" +trap 'rm -rf "$WORK"' EXIT + +# box : an ASCII STL box, so the test needs no fixture. +box() { + "$PY" - "$@" <<'EOF' +import sys + +out, sx, sy, sz = sys.argv[1], float(sys.argv[2]), float(sys.argv[3]), float(sys.argv[4]) +v = [(x, y, z) for z in (0, sz) for y in (0, sy) for x in (0, sx)] +with open(out, "w") as f: + f.write("solid box\n") + for a, b, c, d in ((0, 2, 3, 1), (4, 5, 7, 6), (0, 1, 5, 4), (2, 6, 7, 3), (0, 4, 6, 2), (1, 3, 7, 5)): + for tri in ((v[a], v[b], v[c]), (v[a], v[c], v[d])): + f.write("facet normal 0 0 0\nouter loop\n") + for p in tri: + f.write("vertex %g %g %g\n" % p) + f.write("endloop\nendfacet\n") + f.write("endsolid box\n") +EOF +} + +# Wider than the 256 mm bed and wider than its 362 mm diagonal, so no placement can fit it. +box "$WORK/slab.stl" 400 400 5 +# Fits, so the run must succeed: proves the harness itself is sound. +box "$WORK/cube.stl" 10 10 10 + +# slice [option...] -> $WORK//{rc,stdout,stderr,result.json} +slice() { + local out="$WORK/$1" input="$2"; shift 2 + mkdir -p "$out" + timeout 300 "$BIN" --datadir "$out/datadir" \ + --load-settings "$PROFILES/machine/Bambu Lab X1 Carbon 0.4 nozzle.json;$PROFILES/process/0.20mm Standard @BBL X1C.json" \ + "$@" --slice 0 --outputdir "$out" "$input" \ + > "$out/stdout" 2> "$out/stderr" + echo "$?" > "$out/rc" +} + +# exit_code : the CLI's negative code as the shell saw it, e.g. -50 arrives as 206. +exit_code() { "$PY" -c "import sys; rc = int(open(sys.argv[1]).read()); print(rc - 256 if rc > 127 else rc)" "$WORK/$1/rc"; } + +fail() { echo "FAIL: $*"; exit 1; } + +# --allow-rotations keeps this on the generic reason: a translate-only arrange has its own, +# more specific one. The slab is wider than the 362 mm bed diagonal, so rotation cannot place it. +slice slab "$WORK/slab.stl" --allow-rotations +[ "$(exit_code slab)" = "-50" ] || fail "slab: expected -50, got $(exit_code slab); $(tail -n 5 "$WORK/slab/stdout")" +"$PY" - "$WORK/slab/result.json" <<'EOF' || exit 1 +import json, sys + +result = json.load(open(sys.argv[1])) +if result["return_code"] != -50: + sys.exit("FAIL: result.json return_code %s, expected -50" % result["return_code"]) +reason = result["error_string"] +if not reason.strip(): + sys.exit("FAIL: result.json carries no error_string") +# The run was handed an STL and asked for g-code: neither a 3mf nor an upload exists to check. +for word in ("3mf", "3MF", "upload"): + if word in reason: + sys.exit("FAIL: error_string mentions %r for an STL run: %s" % (word, reason)) +EOF + +slice cube "$WORK/cube.stl" +[ "$(exit_code cube)" = "0" ] || fail "cube: expected 0, got $(exit_code cube); $(tail -n 5 "$WORK/cube/stdout")" +[ -s "$WORK/cube/plate_1.gcode" ] || fail "cube: no g-code written" + +echo "PASS: the no-suitable-objects reason fits a non-3mf run" From a28c9c3a827bbae9a2fcfe0434bdfabaecdb91e4 Mon Sep 17 00:00:00 2001 From: Downtime Date: Mon, 12 Oct 2026 18:25:17 -0500 Subject: [PATCH 026/137] fix(gui): guard gizmo actions before deferred initialization (#16268) GLGizmosManager can be called while its gizmo list is empty, either at startup before the canvas has loaded the gizmos or after their init() failed. reset_all_states(), open_gizmo(), open_gizmo_by_shortcut() and activate_gizmo() now return early in that case. This fixes a Debug-build assert when a new project resets the gizmos at startup, and an out-of-bounds read in release builds when a gizmo shortcut key is pressed after gizmo init failed. activate_gizmo(Undefined) still returns true, since no gizmo is open. The reset_all_states() guard was first proposed in #16074 by kenrap. Co-authored-by: kenrap <101818165+kenrap@users.noreply.github.com> --- src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index d840754ac2..41d4811664 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -420,7 +420,10 @@ void GLGizmosManager::refresh_on_off_state() void GLGizmosManager::reset_all_states() { - if (! m_enabled || m_serializing) + // The restore/new-project event can run before deferred OpenGL resource + // loading has populated the gizmo list. There is nothing to reset until + // initialization completes. + if (! m_enabled || m_serializing || m_gizmos.empty()) return; const EType current = get_current_type(); @@ -435,6 +438,9 @@ void GLGizmosManager::reset_all_states() bool GLGizmosManager::open_gizmo(EType type) { + if (m_gizmos.empty()) + return false; + int idx = static_cast(type); // re-open same type cause closing @@ -522,7 +528,7 @@ bool GLGizmosManager::is_running() const bool GLGizmosManager::open_gizmo_by_shortcut(Shortcut shortcut) { - if (!m_enabled) + if (!m_enabled || m_gizmos.empty()) return false; // The text tool opens without a selection because it creates its own object. @@ -1427,10 +1433,12 @@ void GLGizmosManager::update_hover_state(const EType &type) bool GLGizmosManager::activate_gizmo(EType type) { - assert(!m_gizmos.empty()); - // already activated - if (m_current == type) return true; + if (m_current == type) + return true; + + if (m_gizmos.empty()) + return false; if (m_current != Undefined) { // clean up previous gizmo From 6700d4c5df1cde1a58d7f347928b0acf999fa307 Mon Sep 17 00:00:00 2001 From: Alexandre Folle de Menezes Date: Mon, 12 Oct 2026 20:57:57 -0300 Subject: [PATCH 027/137] Verify and improve AI pt_BR translations (#16377) --- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 1662 +------------------ 1 file changed, 85 insertions(+), 1577 deletions(-) diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 57860cf67d..b4d3f0f85b 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-10-11 16:21+0800\n" -"PO-Revision-Date: 2026-07-26 11:14-0300\n" +"PO-Revision-Date: 2026-10-11 16:22-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -251,7 +251,6 @@ msgstr "Padrão" msgid "TPU High Flow" msgstr "TPU Alto fluxo" -# AI Translated msgid "E3D High Flow" msgstr "E3D Alto Fluxo" @@ -519,7 +518,6 @@ msgstr "Pintar" msgid "Choose filament" msgstr "Escolher filamento" -# AI Translated msgid "Edge detection" msgstr "Detecção de arestas" @@ -1569,19 +1567,15 @@ msgstr "O traço da forma (%1%) é muito fino (largura mínima é %2% mm)." msgid "Stroke of shape (%1%) contains unsupported: %2%." msgstr "O traço da forma (%1%) contém não suportado: %2%." -# AI Translated msgid "Not valid state please report reproduction steps on github" msgstr "Estado inválido, informe os passos para reproduzir no GitHub" -# AI Translated msgid "No embossed file" msgstr "Nenhum arquivo em relevo" -# AI Translated msgid "Missing svg file in embossed shape" msgstr "Arquivo SVG ausente na forma em relevo" -# AI Translated msgid "Missing data of svg file" msgstr "Dados do arquivo SVG ausentes" @@ -1671,7 +1665,6 @@ msgstr "Espelhar horizontalmente" msgid "Change SVG Type" msgstr "Alterar tipo de SVG" -# AI Translated msgid "SVG shape" msgstr "Forma SVG" @@ -1704,14 +1697,12 @@ msgstr "Sem recurso" msgid "Vertex" msgstr "Vértice" -# AI Translated msgid "Edge" msgstr "Aresta" msgid "Plane" msgstr "Plano" -# AI Translated msgid "Point on edge" msgstr "Ponto na aresta" @@ -1721,7 +1712,6 @@ msgstr "Ponto no círculo" msgid "Point on plane" msgstr "Ponto no plano" -# AI Translated msgid "Center of edge" msgstr "Centro da aresta" @@ -1946,7 +1936,6 @@ msgstr "" "\n" "Abra apenas anexos de projetos em que você confia. Abrir mesmo assim?" -# AI Translated msgid "Open attachment" msgstr "Abrir anexo" @@ -3445,10 +3434,9 @@ msgstr "Verificar o estado dos serviços de sistema atuais" msgid "code" msgstr "código" -# AI Translated #. TRN Short for "description" of a connection error msgid "desc" -msgstr "desc." +msgstr "descr" #. TRN Short for "additional information" about a connection error msgid "info" @@ -4808,7 +4796,7 @@ msgid "" msgstr "" "A torre de purga não funciona quando a Altura de Camada Adaptativa ou a Altura de Camada de Suporte Independente está ativada.\n" "Qual você deseja manter?\n" -"SIM — Manter a Torre de Preparo\n" +"SIM — Manter a Torre de Purga\n" "NÃO — Manter a Altura de Camada Adaptativa e a Altura de Camada de Suporte Independente" msgid "" @@ -4819,7 +4807,7 @@ msgid "" msgstr "" "A torre de purga não funciona quando a Altura de Camada Adaptativa está ativa.\n" "Qual você deseja manter?\n" -"SIM — Manter a Torre de Preparo\n" +"SIM — Manter a Torre de Purga\n" "NÃO — Manter a Altura de Camada Adaptativa" msgid "" @@ -4830,7 +4818,7 @@ msgid "" msgstr "" "A torre de purga não funciona quando a Altura da Camada de Suporte Independente está ativa.\n" "Qual você deseja manter?\n" -"SIM — Manter a Torre de Preparo\n" +"SIM — Manter a Torre de Purga\n" "NÃO — Manter a Altura da Camada de Suporte Independente" msgid "" @@ -5777,7 +5765,7 @@ msgid "Printed up to layer %1%" msgstr "" msgid "Weight" -msgstr "" +msgstr "Peso" msgid "Volume" msgstr "Volume" @@ -5868,7 +5856,6 @@ msgctxt "Axis" msgid "Y" msgstr "Y" -# AI Translated msgctxt "Axis" msgid "Z" msgstr "Z" @@ -8159,7 +8146,7 @@ msgid "Tools" msgstr "Ferramentas" msgid "G-code" -msgstr "" +msgstr "G-code" msgid "How the mode is labeled in the plate's IDEX/IQEX mode selector. Required — a mode with no name cannot be selected." msgstr "" @@ -8461,7 +8448,7 @@ msgid "Enabling traditional timelapse photography may cause surface imperfection msgstr "A habilitação da fotografia tradicional em timelapse pode causar imperfeições na superfície. É recomendado mudar para o modo suave." msgid "Smooth mode for timelapse is enabled, but the prime tower is off, which may cause print defects. Please enable the prime tower, re-slice and print again." -msgstr "O modo suave para timelapse está ativado, mas a torre de purga está desativada, o que pode causar defeitos na impressão. Ative a torre de purga, fatie novamente e imprima de novo." +msgstr "O modo suave para timelapse está ativado, mas a torre de purga está desativada, o que pode causar defeitos na impressão. Ative a torre de purga, refatie e imprima de novo." msgid "Expand sidebar" msgstr "Expandir barra lateral" @@ -9073,7 +9060,7 @@ msgid "Unable to log in to the Flashforge printer." msgstr "Não é possível fazer login na impressora Flashforge." msgid "Is the printer ready? Is the print sheet in place, empty and clean?" -msgstr "A impressora está pronta? O folha de impressão está no lugar, vazia e limpa?" +msgstr "A impressora está pronta? A placa de impressão está no lugar, vazia e limpa?" msgid "Upload and Print" msgstr "Enviar e Imprimir" @@ -9600,7 +9587,7 @@ msgid "Auto slice after changes" msgstr "Fatiar automaticamente após mudanças" msgid "If enabled, OrcaSlicer will re-slice automatically whenever slicing-related settings change." -msgstr "Se ativado, o OrcaSlicer irá re-fatiar automaticamente sempre que as configurações relacionadas ao fatiamento forem alteradas." +msgstr "Se ativado, o OrcaSlicer irá refatiar automaticamente sempre que as configurações relacionadas ao fatiamento forem alteradas." msgid "Delay in seconds before auto slicing starts, allowing multiple edits to be grouped. Use 0 to slice immediately." msgstr "Atraso em segundos antes do início do fatiamento automático, permitindo que várias edições sejam agrupadas. Use 0 para fatiar imediatamente." @@ -10749,15 +10736,12 @@ msgstr "Descrição do erro" msgid "Extra info" msgstr "Informação extra" -# AI Translated msgid "The Filament Track Switch installed on the printer does not match the slicing file. Please re-slice to avoid print quality issues." -msgstr "O Filament Track Switch instalado na impressora não corresponde ao arquivo de fatiamento. Por favor, refaça o fatiamento para evitar problemas de qualidade de impressão." +msgstr "O Filament Track Switch instalado na impressora não corresponde ao arquivo de fatiamento. Por favor, refatie para evitar problemas de qualidade de impressão." -# AI Translated msgid "This print requires a Filament Track Switch. Please install it first." msgstr "Esta impressão requer um Filament Track Switch. Por favor, instale-o primeiro." -# AI Translated msgid "The Filament Track Switch has not been setup. Please setup it first." msgstr "O Filament Track Switch não foi configurado. Por favor, configure-o primeiro." @@ -10798,7 +10782,6 @@ msgstr "O filamento não corresponde ao filamento no espaço do AMS. Atualize o msgid "The selected printer (%s) is incompatible with the print file configuration (%s). Please adjust the printer preset in the prepare page or choose a compatible printer on this page." msgstr "A impressora selecionada (%s) é incompatível com a configuração do arquivo de impressão (%s). Ajuste a predefinição da impressora na página de preparo ou escolha uma impressora compatível nesta página." -# AI Translated #, c-format, boost-format msgid "The selected printer (%s) has an unknown model, so compatibility with the print file configuration (%s) cannot be verified. Please verify the printer preset before sending." msgstr "A impressora selecionada (%s) tem um modelo desconhecido, então a compatibilidade com a configuração do arquivo de impressão (%s) não pode ser verificada. Verifique a predefinição da impressora antes de enviar." @@ -10876,11 +10859,9 @@ msgstr "Limpar" msgid "Preparing print job" msgstr "Preparando trabalho de impressão" -# AI Translated msgid "Failed to upload the file to the printer's storage. Please try again." msgstr "Falha ao enviar o arquivo para o armazenamento da impressora. Tente novamente." -# AI Translated msgid "Send Failed" msgstr "Falha no envio" @@ -10891,11 +10872,9 @@ msgstr "O comprimento do nome excede o limite." msgid "Cost %dg filament and %d changes more than optimal grouping." msgstr "O custo de %dg de filamento e %d muda mais do que o agrupamento ideal." -# AI Translated msgid "Right-Ext" msgstr "Ext-Direita" -# AI Translated msgid "Left-Ext" msgstr "Ext-Esquerda" @@ -10916,7 +10895,7 @@ msgid "Please refresh the nozzle information and try again." msgstr "Por favor, atualize as informações do bico e tente novamente." msgid "Please re-slice to avoid filament waste." -msgstr "Por favor, fatie novamente para evitar desperdício de filamento." +msgstr "Por favor, refatie para evitar desperdício de filamento." msgid "The reported hotend information may be unreliable." msgstr "As informações reportadas sobre o hotend podem não ser confiáveis." @@ -11060,7 +11039,6 @@ msgstr "Não é possível enviar um trabalho de impressão para uma placa vazia. msgid "Storage needs to be inserted to record timelapse." msgstr "O armazenamento precisa estar inserido para gravar o timelapse." -# AI Translated msgid "The selected printer model could not be identified, so compatibility with the print file configuration cannot be verified. Please verify the printer preset before sending." msgstr "O modelo da impressora selecionada não pôde ser identificado, então a compatibilidade com a configuração do arquivo de impressão não pode ser verificada. Verifique a predefinição da impressora antes de enviar." @@ -11128,7 +11106,6 @@ msgstr "A impressora deve estar na mesma LAN do OrcaSlicer." msgid "The printer does not support sending to printer storage." msgstr "A impressora não suporta envio para o armazenamento da impressora." -# AI Translated msgid "Failed to initialize the printer file transfer. Please check the connection and try again." msgstr "Falha ao inicializar a transferência de arquivos da impressora. Verifique a conexão e tente novamente." @@ -11284,13 +11261,13 @@ msgid "A prime tower is required for clumping detection. There may be flaws on t msgstr "Uma torre de purga é necessária para a detecção de aglomeração. Podem ocorrer falhas no modelo sem a torre de purga. Tem certeza de que deseja desativar a torre de purga?" msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable?" -msgstr "Habilitar a altura Z precisa e a torre de preparação juntas pode causar erros de fatiamento. Deseja habilitar mesmo assim?" +msgstr "Habilitar a altura Z precisa e a torre de purga juntas pode causar erros de fatiamento. Deseja habilitar mesmo assim?" msgid "A prime tower is required for clumping detection. There may be flaws on the model without prime tower. Do you still want to enable clumping detection?" msgstr "Uma torre de purga é necessária para a detecção de aglomeração. Podem ocorrer falhas no modelo sem o Prime Tower. Tem certeza de que deseja ativar a detecção de aglomeração?" msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" -msgstr "Habilitar a altura Z precisa e a torre de preparação juntas pode causar erros de fatiamento. Deseja habilitar a altura Z precisa mesmo assim?" +msgstr "Habilitar a altura Z precisa e a torre de purga juntas pode causar erros de fatiamento. Deseja habilitar a altura Z precisa mesmo assim?" msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." msgstr "O timelapse suave precisa de uma torre de purga em todas as camadas, o que não é compatível com \"Sem camadas esparsas\". \"Sem camadas esparsas\" foi desativado." @@ -11404,10 +11381,9 @@ msgstr "Informação adicional:" msgid "vendor" msgstr "fornecedor" -# AI Translated #. TRN Short for "version" msgid "ver" -msgstr "versão" +msgstr "ver" msgid "printer model" msgstr "modelo de impressora" @@ -12526,11 +12502,9 @@ msgstr "[Ação Necessária] " msgid "[Action Required]" msgstr "[Ação Necessária]" -# AI Translated msgid "Printer update service is unavailable." msgstr "O serviço de atualização de impressoras não está disponível." -# AI Translated msgid "Failed to check for new printers." msgstr "Falha ao verificar novas impressoras." @@ -12546,12 +12520,10 @@ msgstr "Mover Vista" msgid "Rotate View" msgstr "Rotacionar Vista" -# AI Translated #, c-format, boost-format msgid "Use %s or %s, or a key that does not type a character." msgstr "Use %s ou %s, ou uma tecla que não digite um caractere." -# AI Translated msgctxt "Keyboard Shortcut" msgid "Key" msgstr "Tecla" @@ -12559,15 +12531,12 @@ msgstr "Tecla" msgid "Left mouse" msgstr "Mouse esquerdo" -# AI Translated msgid "Available anywhere in the window, even while typing in a text field." msgstr "Disponível em qualquer lugar da janela, mesmo ao digitar em um campo de texto." -# AI Translated msgid "Run favorite 1 to 10" msgstr "Executar favorito 1 a 10" -# AI Translated msgid "Pin or unpin the selected action" msgstr "Fixar ou desafixar a ação selecionada" @@ -12575,11 +12544,9 @@ msgctxt "Keyboard Shortcut" msgid "Tab" msgstr "Tab" -# AI Translated msgid "Switch to the next main tab" msgstr "Mudar para a próxima aba principal" -# AI Translated msgid "Available while the 3D view on the Prepare tab has focus." msgstr "Disponível enquanto a vista 3D da aba Preparar estiver em foco." @@ -12610,11 +12577,9 @@ msgstr "Mouse direito" msgid "Zoom View" msgstr "Aproximar Vista" -# AI Translated msgid "Painting" msgstr "Pintura" -# AI Translated msgid "Available while a painting gizmo is open: supports, seam, fuzzy skin or color painting." msgstr "Disponível enquanto um gizmo de pintura estiver aberto: suportes, costura, textura difusa ou pintura de cores." @@ -12627,7 +12592,6 @@ msgstr "Suporte/Pintura em cores: ajustar o raio da caneta" msgid "Objects list" msgstr "Lista de objetos" -# AI Translated msgid "Available while the object list has focus." msgstr "Disponível enquanto a lista de objetos estiver em foco." @@ -12647,43 +12611,35 @@ msgstr "Clique do mouse" msgid "Select the object/part and mouse click to change the name" msgstr "Selecione o objeto/peça e clique do mouse para mudar o nome" -# AI Translated msgid "Available while the 3D view on the Preview tab has focus." msgstr "Disponível enquanto a vista 3D da aba Pré-visualizar estiver em foco." msgid "Move slider 5x faster" -msgstr "Mover o controle deslizante 5 vezes mais rápido" +msgstr "Mover o controle deslizante 5x mais rápido" -# AI Translated msgid "Scroll slider 5x faster" -msgstr "Rolar o controle deslizante 5 vezes mais rápido" +msgstr "Rolar o controle deslizante 5x mais rápido" msgid "Not customizable" msgstr "Não personalizável" -# AI Translated #, c-format, boost-format msgid "%s is assigned to %s. Reassign it to %s?" msgstr "%s está atribuído a %s. Reatribuí-lo a %s?" -# AI Translated #, c-format, boost-format msgid "The default %s is assigned to %s. Reassign it to %s?" msgstr "O %s padrão está atribuído a %s. Reatribuí-lo a %s?" -# AI Translated msgid "Global shortcuts also apply while typing." msgstr "Os atalhos globais também funcionam durante a digitação." -# AI Translated msgid "A key that types a character cannot be a global shortcut." msgstr "Uma tecla que digita um caractere não pode ser um atalho global." -# AI Translated msgid "Esc cancels, Enter confirms." msgstr "Esc cancela, Enter confirma." -# AI Translated #, c-format, boost-format msgid "" "Press the new shortcut for\n" @@ -12692,20 +12648,16 @@ msgstr "" "Pressione o novo atalho para\n" "\"%s\"" -# AI Translated msgid "Unbind" msgstr "Desvincular" -# AI Translated msgid "The system uses this shortcut, so it cannot be assigned." msgstr "O sistema usa este atalho, então ele não pode ser atribuído." -# AI Translated #, c-format, boost-format msgid "Shift and Ctrl with this key belong to %s and cannot be assigned." msgstr "Shift e Ctrl com esta tecla pertencem a %s e não podem ser atribuídos." -# AI Translated #, c-format, boost-format msgid "Already assigned to %s. Press OK to reassign it." msgstr "Já atribuído a %s. Pressione OK para reatribuí-lo." @@ -12785,9 +12737,8 @@ msgstr "Abrir arquivo de certificado CA" msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate." msgstr "O arquivo CA HTTPS é opcional. É necessário apenas se você usar HTTPS com um certificado autoassinado." -# AI Translated msgid "This system uses HTTPS certificates from the system Certificate Store or Keychain. To use a custom CA file, import it there." -msgstr "Este sistema usa certificados HTTPS do repositório de certificados do sistema ou do Keychain. Para usar um arquivo CA personalizado, importe-o lá." +msgstr "Este sistema usa certificados HTTPS do Repositório de Certificados ou Chaveiro do sistema. Para usar um arquivo CA personalizado, importe-o lá." msgid "Printer model" msgstr "Modelo de impressora" @@ -12862,18 +12813,15 @@ msgstr "Laser 40W" msgid "Cutting Module" msgstr "Módulo de Corte" -# AI Translated msgid "Active Cutting Module" msgstr "Módulo de Corte Ativo" -# AI Translated msgid "Ultrasonic Cutting Module" msgstr "Módulo de Corte Ultrassônico" msgid "Auto Fire Extinguishing System" msgstr "Sistema Automático de Extinção de Incêndio" -# AI Translated msgid "Filament Track Switch" msgstr "Filament Track Switch" @@ -13018,32 +12966,26 @@ msgstr "Erro de agrupamento: %1% não pode ser colocado no bico direito" msgid "Group error in manual mode. Please check nozzle count or regroup." msgstr "Erro de agrupamento no modo manual. Por favor, verifique o número de bicos ou reagrupe." -# AI Translated #, boost-format msgid "failed to process some intersections (%1%)" msgstr "falha ao processar algumas interseções (%1%)" -# AI Translated #, boost-format msgid "multiple intersections with a perimeter, only one was used (%1%)" msgstr "múltiplas interseções com um perímetro, apenas uma foi usada (%1%)" -# AI Translated #, boost-format msgid "a perimeter is fully inside a modifier, the modifier was not applied to it (%1%)" -msgstr "um perímetro está totalmente dentro de um modificador; o modificador não foi aplicado a ele (%1%)" +msgstr "um perímetro está totalmente dentro de um modificador, o modificador não foi aplicado a ele (%1%)" -# AI Translated #, boost-format msgid "modifier \"%1%\" of \"%2%\" had no effect on the seam (it might not reach the centerline of the printed perimeter)" msgstr "o modificador \"%1%\" de \"%2%\" não teve efeito na costura (talvez não alcance a linha central do perímetro impresso)" -# AI Translated #, boost-format msgid "modifier \"%1%\" of \"%2%\" (%3% in total) had no effect on the seam (it might not reach the centerline of the printed perimeter)" msgstr "o modificador \"%1%\" de \"%2%\" (%3% no total) não teve efeito na costura (talvez não alcance a linha central do perímetro impresso)" -# AI Translated msgid "Seam placement may differ from expected." msgstr "A posição da costura pode diferir do esperado." @@ -13185,7 +13127,7 @@ msgid " is too close to clumping detection area, there may be collisions when pr msgstr " está muito perto da área de detecção de aglomeração, podendo haver colisões durante a impressão." msgid "Prime Tower" -msgstr "Torre de Preparo" +msgstr "Torre de Purga" msgid " is too close to others, and collisions may be caused.\n" msgstr " está muito perto de outros, e colisões podem ocorrer.\n" @@ -13267,7 +13209,7 @@ msgid "The project contains multiple managed belt purge towers. Reload the plate msgstr "" msgid "Enabling both precise Z height and the prime tower may cause slicing errors." -msgstr "Habilitar a altura Z precisa e a torre de preparação juntas pode causar erros de fatiamento." +msgstr "Habilitar a altura Z precisa e a torre de purga juntas pode causar erros de fatiamento." msgid "A prime tower is required for clumping detection; otherwise, there may be flaws on the model." msgstr "Uma torre de purga é necessária para a detecção de aglomeração, podem ocorrer falhas no modelo." @@ -14323,9 +14265,8 @@ msgstr "Combine várias bordas em uma só quando estiverem próximas umas das ou msgid "Brim ears" msgstr "Orelhas da borda" -# AI Translated msgid "Only draw brim over the sharp edges of the model." -msgstr "Desenhe a borda apenas sobre as arestas afiadas do modelo." +msgstr "Desenhe a borda apenas sobre as arestas vivas do modelo." msgid "Brim ear max angle" msgstr "Ângulo máximo da orelha da borda" @@ -14913,19 +14854,15 @@ msgstr "" "\n" "A taxa de fluxo final do objeto é este valor multiplicado pela taxa de fluxo do filamento." -# AI Translated msgid "Enable pressure advance" msgstr "Habilitar Pressure Advance" -# AI Translated msgid "Enable pressure advance, auto calibration result will be overwritten once enabled." msgstr "Habilitar Pressure Advance, o resultado da calibração automática será sobrescrito uma vez habilitado." -# AI Translated msgid "Pressure advance (Klipper) AKA Linear advance factor (Marlin)." -msgstr "Pressure Advance (Klipper), também conhecido como fator de Linear Advance (Marlin)." +msgstr "Pressure Advance (Klipper), também conhecido como Fator de Linear Advance (Marlin)." -# AI Translated msgid "Enable adaptive pressure advance (beta)" msgstr "Habilitar Pressure Advance adaptativo (beta)" @@ -14946,7 +14883,6 @@ msgstr "" "Quando habilitado, o valor do Pressure Advance acima é substituído. No entanto, um valor padrão razoável acima é fortemente recomendado para atuar como um fallback e para quando a ferramenta for trocada.\n" "\n" -# AI Translated msgid "Adaptive pressure advance measurements (beta)" msgstr "Medidas do Pressure Advance adaptativo (beta)" @@ -14975,7 +14911,6 @@ msgstr "" "2. Anote o valor de PA ideal para cada velocidade e aceleração de fluxo volumétrico. Você pode encontrar o número do fluxo selecionando fluxo no menu suspenso do esquema de cores e movendo o controle deslizante horizontal sobre as linhas do padrão de PA. O número deve estar visível na parte inferior da página. O valor de PA ideal deve diminuir quanto maior for o fluxo volumétrico. Se não estiver, confirme se sua extrusora está funcionando corretamente. Quanto mais lento e com menos aceleração você imprimir, maior será o intervalo de valores de PA aceitáveis. Se nenhuma diferença for visível, use o valor de PA do teste mais rápido\n" "3. Insira os tripletos de valores de PA, Fluxo e Acelerações na caixa de texto aqui e salve seu perfil de filamento." -# AI Translated msgid "Enable adaptive pressure advance within features (beta)" msgstr "Habilitar Pressure Advance adaptativo nos recursos (beta)" @@ -14992,9 +14927,8 @@ msgstr "" "\n" "Esta é uma opção experimental, pois se o perfil de PA não for definido com precisão, causará problemas de uniformidade." -# AI Translated msgid "Static pressure advance for bridges" -msgstr "Pressure Advance estático para pontes" +msgstr "Pressure advance estático para pontes" # AI Translated msgid "" @@ -15254,13 +15188,13 @@ msgid "Interface layer pre-extrusion distance" msgstr "Distância de pré-extrusão da camada de interface" msgid "Pre-extrusion distance for prime tower interface layer (where different materials meet)." -msgstr "Distância de pré-extrusão para a camada de interface da torre de preparação (onde diferentes materiais se encontram)." +msgstr "Distância de pré-extrusão para a camada de interface da torre de purga (onde diferentes materiais se encontram)." msgid "Interface layer pre-extrusion length" msgstr "Comprimento de pré-extrusão da camada de interface" msgid "Pre-extrusion length for prime tower interface layer (where different materials meet)." -msgstr "Comprimento de pré-extrusão para a camada de interface da torre de preparação (onde diferentes materiais se encontram)." +msgstr "Comprimento de pré-extrusão para a camada de interface da torre de purga (onde diferentes materiais se encontram)." msgid "Tower ironing area" msgstr "Area de alisamento da torre" @@ -15275,13 +15209,13 @@ msgid "Interface layer purge length" msgstr "Comprimento de purga da camada de interface" msgid "Purge length for prime tower interface layer (where different materials meet)." -msgstr "Comprimento de purga para a camada de interface da torre de preparação (onde diferentes materiais se encontram)." +msgstr "Comprimento de purga para a camada de interface da torre de purga (onde diferentes materiais se encontram)." msgid "Interface layer print temperature" msgstr "Temperatura de impressão da camada de interface" msgid "Print temperature for prime tower interface layer (where different materials meet). If set to -1, use max recommended nozzle temperature." -msgstr "Temperatura de impressão para a camada de interface da torre de preparação (onde diferentes materiais se encontram). Se definida como -1, use a temperatura máxima recomendada do bico." +msgstr "Temperatura de impressão para a camada de interface da torre de purga (onde diferentes materiais se encontram). Se definida como -1, use a temperatura máxima recomendada do bico." msgid "Speed of the last cooling move" msgstr "Velocidade do último movimento de resfriamento" @@ -15534,10 +15468,10 @@ msgid "Linear" msgstr "Linear" msgid "Quadratic" -msgstr "" +msgstr "Quadrático" msgid "Exponential" -msgstr "" +msgstr "Exponencial" msgid "Z-buckling bias optimization (experimental)" msgstr "Otimização de tendência à flambagem em Z (experimental)" @@ -16252,11 +16186,9 @@ msgstr "Preenchimento simétrico no eixo Y" msgid "If the model has two parts that are symmetric about the Y axis, and you want these parts to have symmetric textures, please click this option on one of the parts." msgstr "Se o modelo tiver duas partes simétricas em relação ao eixo Y e você quiser que essas partes tenham texturas simétricas, clique nesta opção em uma das partes." -# AI Translated msgid "Fill pattern tops" msgstr "Preencher os topos do padrão" -# AI Translated msgid "Choose this option if you want to completely fill in the tops of the infill pattern" msgstr "Escolha esta opção se quiser preencher completamente os topos do padrão de preenchimento" @@ -17295,7 +17227,6 @@ msgstr "Bowden" msgid "Hybrid" msgstr "Híbrido" -# AI Translated msgid "Extra High Flow" msgstr "Fluxo Extra Alto" @@ -17708,7 +17639,6 @@ msgstr "Passos de pré-aquecimento" msgid "Insert multiple preheat commands (e.g. M104.1). Only useful for Prusa XL. For other printers, please set it to 1." msgstr "Insire múltiplos comandos de pré-aquecimento (ex.: M104.1). Útil apenas para Prusa XL. Para outras impressoras, defina como 1." -# AI Translated msgid "G-code written at the very top of the output file, before any other content. Useful for adding metadata that printer firmware reads from the first lines of the file (e.g. estimated print time, filament usage). Supports placeholders like {print_time_total_sec}, {print_time_day}, {print_time_hour}, {print_time_minute}, {print_time_sec} and {used_filament_length}." msgstr "G-code escrito no início do arquivo de saída, antes de qualquer outro conteúdo. Útil para adicionar metadados que o firmware da impressora lê nas primeiras linhas do arquivo (ex.: tempo estimado de impressão, uso de filamento). Suporta marcadores como {print_time_total_sec}, {print_time_day}, {print_time_hour}, {print_time_minute}, {print_time_sec} e {used_filament_length}." @@ -17865,7 +17795,6 @@ msgstr "Sem camadas esparsas (beta)" msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." msgstr "Se ativado, a torre de purga não será impressa nas camadas sem mudanças de ferramenta. Nas camadas com mudança de ferramenta, a extrusora descerá para imprimir a torre de purga, de modo que a torre fica abaixo do modelo e a cabeça da ferramenta precisa descer até ela. Disposições em que isso colidiria com um objeto já impresso são rejeitadas. Não tem efeito com o timelapse suave nem com a detecção de aglomeração no bico, que precisam de uma torre em todas as camadas." -# AI Translated msgid "Combine sparse layers" msgstr "Combinar camadas esparsas" @@ -18662,11 +18591,9 @@ msgstr "Largura da nervura" msgid "Rib width is always less than half the prime tower side length." msgstr "A largura da nervura sempre é menor do que a metade da largura da torre de purga." -# AI Translated msgid "Fillet wall" msgstr "Parede com filete" -# AI Translated msgid "The wall of prime tower will fillet." msgstr "A parede da torre de purga terá um filete." @@ -19246,11 +19173,9 @@ msgstr "Permitir rotações ao arranjar" msgid "If enabled, Arrange will allow rotation when placing objects." msgstr "Se habilitado, o arranjo permitirá rotações ao posicionar objetos." -# AI Translated msgid "Align to Y axis when arranging" msgstr "Alinhar ao eixo Y ao organizar" -# AI Translated msgid "If enabled, Arrange will turn each object so its long side runs along the Y axis before placing it. When not given, it is on for i3 printers and off for the others, as in the GUI." msgstr "Se ativado, Organizar girará cada objeto para que seu lado mais longo fique ao longo do eixo Y antes de colocá-lo. Quando não informado, fica ativado para impressoras i3 e desativado para as demais, como na interface gráfica." @@ -19440,42 +19365,33 @@ msgstr "Fil. usado" msgid "Total length of filament used in the print." msgstr "Comprimento total de filamento usado na impressão." -# AI Translated msgid "Print time (total seconds)" msgstr "Tempo de impressão (total em segundos)" msgid "Total estimated print time in seconds. Replaced with actual value during post-processing." msgstr "Tempo total estimado de impressão em segundos. Substituído pelo valor real durante o pós-processamento." -# AI Translated msgid "Print time (days component)" msgstr "Tempo de impressão (componente de dias)" -# AI Translated msgid "Estimated print time day component (normal mode). Replaced with actual value during post-processing." msgstr "Componente de dias do tempo estimado de impressão (modo normal). Substituído pelo valor real durante o pós-processamento." -# AI Translated msgid "Print time (hours component)" msgstr "Tempo de impressão (componente de horas)" -# AI Translated msgid "Estimated print time hour component (normal mode). Replaced with actual value during post-processing." msgstr "Componente de horas do tempo estimado de impressão (modo normal). Substituído pelo valor real durante o pós-processamento." -# AI Translated msgid "Print time (minutes component)" msgstr "Tempo de impressão (componente de minutos)" -# AI Translated msgid "Estimated print time minute component (normal mode). Replaced with actual value during post-processing." msgstr "Componente de minutos do tempo estimado de impressão (modo normal). Substituído pelo valor real durante o pós-processamento." -# AI Translated msgid "Print time (seconds component)" msgstr "Tempo de impressão (componente de segundos)" -# AI Translated msgid "Estimated print time second component (normal mode). Replaced with actual value during post-processing." msgstr "Componente de segundos do tempo estimado de impressão (modo normal). Substituído pelo valor real durante o pós-processamento." @@ -19935,20 +19851,17 @@ msgstr "material com significativa contração/expansão térmica, como…" msgid "materials with inaccurate filament diameter" msgstr "materiais com diâmetro de filamento impreciso" -# AI Translated #, boost-format msgid "%1% Flow Rate Calibrated" -msgstr "%1% Taxa de fluxo calibrada" +msgstr "%1% Taxa de Fluxo Calibrada" -# AI Translated #, boost-format msgid "%1% Temperature Calibrated" -msgstr "%1% Temperatura calibrada" +msgstr "%1% Temperatura Calibrada" -# AI Translated #, boost-format msgid "%1% Max Vol Speed Calibrated" -msgstr "%1% Vel. vol. máx. calibrada" +msgstr "%1% Vel. Vol. Máx. Calibrada" msgid "We found the best Flow Dynamics Calibration Factor" msgstr "Encontramos o melhor Fator de Calibração de Dinâmica de Fluxo" @@ -20309,7 +20222,6 @@ msgstr "Temp. final: " msgid "Temp step: " msgstr "Passo de Temperatura: " -# AI Translated #. TRN %s is the temperature unit #, c-format, boost-format msgid "Supported range: 170%s - 500%s" @@ -20696,7 +20608,6 @@ msgstr "Calibrar antes da impressão" msgid "Filament Mapping:" msgstr "Mapeamnto de Filamnto:" -# AI Translated #. TRN External spool slot, followed by its filament type #, c-format, boost-format msgid "Ext - %s" @@ -20777,23 +20688,19 @@ msgstr "Testar bing.com:" msgid "Log Info" msgstr "Informações do Registro" -# AI Translated #. TRN %s is the name of the tested website #, c-format, boost-format msgid "test %s start..." msgstr "iniciando teste de %s..." -# AI Translated #, c-format, boost-format msgid "test %s ip resolved = %s" msgstr "teste de %s: IP resolvido = %s" -# AI Translated #, c-format, boost-format msgid "test %s failed" msgstr "teste de %s falhou" -# AI Translated #, c-format, boost-format msgid "test %s ok" msgstr "teste de %s ok" @@ -21338,15 +21245,12 @@ msgstr "Sessão válida não detectada. Prosseguir com o login no 3DPrinterOS?" msgid "Success!" msgstr "Sucesso!" -# AI Translated msgid "Generate API Key" msgstr "Gerar Chave da API" -# AI Translated msgid "API Key created. Go to the physical printer and hit \"authorize\" on the screen, then run \"Test\" again." msgstr "Chave da API criada. Vá até a impressora física e toque em \"authorize\" (autorizar) na tela; depois execute \"Testar\" novamente." -# AI Translated msgid "API Key created." msgstr "Chave da API criada." @@ -21361,10 +21265,10 @@ msgstr "Substituir a aba do dispositivo do BambuLab pela webui do host de impres #, c-format, boost-format msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain." -msgstr "Neste sistema, %s usa certificados HTTPS da loja de certificados do sistema ou do Keychain." +msgstr "Neste sistema, %s usa certificados HTTPS do Repositório de Certificados ou Chaveiro do sistema." msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain." -msgstr "Para usar um arquivo CA personalizado, importe seu arquivo CA para a loja de certificados / Keychain." +msgstr "Para usar um arquivo CA personalizado, importe seu arquivo CA para o Repositório de Certificados / Chaveiro." msgid "Login/Test" msgstr "Login/Teste" @@ -21376,9 +21280,8 @@ msgid "Detect Creality K-series printer" msgstr "Detectar impressora Creality da série K" msgid "Click Scan to look for K-series printers on your network." -msgstr "Clique para buscar impressora Creality da série K na sua rede." +msgstr "Clique em Buscar para procurar impressoras Creality da série K na sua rede." -# AI Translated msgid "Scan" msgstr "Buscar" @@ -21388,7 +21291,6 @@ msgstr "Usar Selecionada" msgid "Scanning the LAN for K-series printers... this takes a few seconds." msgstr "Buscando impressoras série K na rede… isso leva alguns segundos." -# AI Translated msgid "(unknown K-series)" msgstr "(série K desconhecida)" @@ -21492,7 +21394,6 @@ msgstr "log(s)" msgid "Choose where to save the exported JSON file" msgstr "Escolha onde salvar o arquivo JSON exportado" -# AI Translated msgid "JSON files (*.json)|*.json" msgstr "Arquivos JSON (*.json)|*.json" @@ -21766,7 +21667,6 @@ msgstr "Nome da tarefa" msgid "Actions" msgstr "Ações" -# AI Translated #. TRN Button that jumps to the page number typed next to it msgid "Go" msgstr "Ir" @@ -21877,7 +21777,6 @@ msgstr " para definir o número de bicos" msgid "Set the physical nozzle count..." msgstr "Definir o número de bicos físicos…" -# AI Translated #, c-format, boost-format msgid "(Std: %d, HF: %d)" msgstr "(Pad.: %d, AF: %d)" @@ -22313,7 +22212,6 @@ msgstr "" msgid "Save preset bundle" msgstr "Salvar pacote de predefinições" -# AI Translated msgid "Orca Preset Bundle (*.orca_bundle)|*.orca_bundle" msgstr "Pacote de predefinições Orca (*.orca_bundle)|*.orca_bundle" @@ -22860,7 +22758,6 @@ msgstr "Referência / Curva (plano / eixo / sist. coord. / hélice / projeção) msgid "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" msgstr "Plano de referência (deslocamento / inclinado / plano médio / tangente / duas arestas / coincidente)" -# AI Translated msgid "Axis" msgstr "Eixo" @@ -23606,17 +23503,14 @@ msgstr "Arestas" msgid "Size (r/dist)" msgstr "Tamanho (r/dist)" -# AI Translated msgctxt "Axis" msgid "XY" msgstr "XY" -# AI Translated msgctxt "Axis" msgid "XZ" msgstr "XZ" -# AI Translated msgctxt "Axis" msgid "YZ" msgstr "YZ" @@ -24110,9 +24004,8 @@ msgstr "Expressão" msgid "Field" msgstr "Campo" -# AI Translated msgid "Expr" -msgstr "Expr." +msgstr "Expr" # AI Translated msgid "(no bindings)" @@ -25118,11 +25011,9 @@ msgstr "Fixo" msgid "Revolute" msgstr "De revolução" -# AI Translated msgid "Slider" -msgstr "Deslizante" +msgstr "Controle Deslizante" -# AI Translated msgid "Cylindrical" msgstr "Cilíndrico" @@ -25301,89 +25192,68 @@ msgstr "recurso %d" msgid "Deleted %s, the feature this body was made from — Ctrl+Z restores it" msgstr "Recurso excluído: %s, aquele a partir do qual este corpo foi criado — Ctrl+Z o restaura" -# AI Translated msgid "Select the FEATURE that created this body (or use New Design)" msgstr "Selecione o RECURSO que criou este corpo (ou use Novo design)" -# AI Translated msgid "Select a feature in the tree first" -msgstr "Selecione primeiro um recurso na árvore" +msgstr "Selecione um recurso na árvore primeiro" -# AI Translated #, c-format, boost-format msgid "Body %d shown" msgstr "Corpo %d exibido" -# AI Translated #, c-format, boost-format msgid "Body %d hidden" msgstr "Corpo %d oculto" -# AI Translated msgid "Feature shown" msgstr "Recurso exibido" -# AI Translated msgid "Feature hidden" msgstr "Recurso oculto" -# AI Translated msgid "Draw a sketch first, then Constrain" -msgstr "Desenhe primeiro um esboço e depois use Restringir" +msgstr "Desenhe um esboço primeiro e depois use Restringir" -# AI Translated msgid "Select a sketch in the tree first" -msgstr "Selecione primeiro um esboço na árvore" +msgstr "Selecione um esboço na árvore primeiro" -# AI Translated msgid "Selected feature is not a sketch" msgstr "O recurso selecionado não é um esboço" -# AI Translated msgid "Pick 1-2 lines, then a constraint; right-click exits" msgstr "Selecione 1-2 linhas e depois uma restrição; clique com o botão direito para sair" -# AI Translated msgid "Pick 1-2 entities, then a constraint or dimension; right-click exits" msgstr "Selecione 1-2 entidades e depois uma restrição ou cota; clique com o botão direito para sair" -# AI Translated msgid "Pick an entity first" -msgstr "Selecione primeiro uma entidade" +msgstr "Selecione uma entidade primeiro" -# AI Translated msgid "Pick two entities first" -msgstr "Selecione primeiro duas entidades" +msgstr "Selecione duas entidades primeiro" -# AI Translated msgid "Horizontal and Vertical apply to a line" msgstr "Horizontal e Vertical se aplicam a uma linha" -# AI Translated msgid "Angle applies between two lines" msgstr "Ângulo se aplica entre duas linhas" -# AI Translated msgid "Collinear needs two lines" msgstr "Colinear precisa de duas linhas" -# AI Translated msgid "Parallel, perpendicular and equal length apply to two lines" msgstr "Paralelo, perpendicular e comprimento igual se aplicam a duas linhas" -# AI Translated msgid "Equal radius needs two circles or arcs" -msgstr "Raio igual precisa de dois círculos ou arcos" +msgstr "Mesmo raio precisa de dois círculos ou arcos" -# AI Translated msgid "Concentric needs two circles or arcs" msgstr "Concêntrico precisa de dois círculos ou arcos" -# AI Translated msgid "Tangent needs a line and a circle/arc, or two circles/arcs" msgstr "Tangente precisa de uma linha e um círculo/arco, ou de dois círculos/arcos" -# AI Translated msgid "This constraint needs two entities with a point to join" msgstr "Esta restrição precisa de duas entidades com um ponto para unir" @@ -25391,37 +25261,29 @@ msgstr "Esta restrição precisa de duas entidades com um ponto para unir" msgid "This dimension needs two entities with a point to measure between" msgstr "Esta cota precisa de duas entidades com pontos entre os quais medir" -# AI Translated msgid "Midpoint needs a point and a line" msgstr "Ponto médio precisa de um ponto e uma linha" -# AI Translated msgid "Symmetric needs two points or two lines + an axis" msgstr "Simétrico precisa de dois pontos ou duas linhas + um eixo" -# AI Translated msgid "Symmetric needs two points or two lines" msgstr "Simétrico precisa de dois pontos ou duas linhas" -# AI Translated msgid "Symmetric: pick two entities, then an axis line" msgstr "Simétrico: selecione duas entidades e depois uma linha de eixo" -# AI Translated msgid "Radius/Diameter needs a circle or arc" msgstr "Raio/Diâmetro precisa de um círculo ou arco" -# AI Translated msgid "Unsupported constraint" msgstr "Restrição não suportada" -# AI Translated msgid "Constraint rejected (over-constrained)" -msgstr "Restrição rejeitada (esboço superrestrito)" +msgstr "Restrição rejeitada (restrito demais)" -# AI Translated msgid "Applied constraint · its badge is on the sketch — click the badge to remove it" -msgstr "Restrição aplicada · o ícone dela está no esboço — clique no ícone para removê-la" +msgstr "Restrição aplicada · o distintivo dela está no esboço — clique no distintivo para removê-la" # AI Translated #, c-format, boost-format @@ -25430,26 +25292,21 @@ msgid_plural "%s — %d selected. Press Esc for the Select tool, click one lin msgstr[0] "%s — %d selecionado. Pressione Esc para a ferramenta Selecionar, clique em uma linha e depois Shift+clique ou Ctrl+clique na outra." msgstr[1] "%s — %d selecionados. Pressione Esc para a ferramenta Selecionar, clique em uma linha e depois Shift+clique ou Ctrl+clique na outra." -# AI Translated msgid "Applied constraint" msgstr "Restrição aplicada" -# AI Translated #. TRN Design sketch: abbreviation of "center", appended to a point tag such as "L3·Ctr" msgid "·Ctr" -msgstr "·Ctr" +msgstr "·Cntr" -# AI Translated #, c-format, boost-format msgid "Fix %s" msgstr "Fixar %s" -# AI Translated #, c-format, boost-format msgid "Lock X %s" msgstr "Travar X %s" -# AI Translated #, c-format, boost-format msgid "Lock Y %s" msgstr "Travar Y %s" @@ -25458,71 +25315,55 @@ msgctxt "Sketch Constraint" msgid "Equal" msgstr "Igual" -# AI Translated #, c-format, boost-format msgid "Symmetric %s — %s / %s" msgstr "Simétrico %s — %s / %s" -# AI Translated #, c-format, boost-format msgid "Symmetric about Y axis %s — %s" msgstr "Simétrico em relação ao eixo Y %s — %s" -# AI Translated #, c-format, boost-format msgid "Symmetric about X axis %s — %s" msgstr "Simétrico em relação ao eixo X %s — %s" -# AI Translated msgid "On line" msgstr "Na linha" -# AI Translated msgid "On edge" msgstr "Na aresta" -# AI Translated msgid "Constraint" msgstr "Restrição" -# AI Translated #, c-format, boost-format msgid "Constraints (%d)" msgstr "Restrições (%d)" -# AI Translated msgid "No constraints yet" msgstr "Nenhuma restrição ainda" -# AI Translated msgid "Delete constraint" msgstr "Excluir restrição" -# AI Translated msgid "Constraint deleted" msgstr "Restrição excluída" -# AI Translated msgid "Press Constrain on a sketch first" msgstr "Pressione Restringir em um esboço primeiro" -# AI Translated msgid "Pick the entity, then a mirror-axis line" msgstr "Selecione a entidade e depois uma linha de eixo de espelhamento" -# AI Translated msgid "Mirror axis must be a line" msgstr "O eixo de espelhamento deve ser uma linha" -# AI Translated msgid "Mirror produced nothing" msgstr "O espelhamento não produziu nada" -# AI Translated msgid "Offset distance (+left / -right of direction)" msgstr "Distância de deslocamento (+esquerda / -direita da direção)" -# AI Translated msgid "Offset collapsed the entity" msgstr "O deslocamento colapsou a entidade" @@ -25542,19 +25383,15 @@ msgstr "Raio do filete" msgid "Fillet failed (parallel lines or radius too large)" msgstr "Falha no filete (linhas paralelas ou raio grande demais)" -# AI Translated msgid "Pick two lines to chamfer" msgstr "Selecione duas linhas para o chanfro" -# AI Translated msgid "Chamfer needs two lines" msgstr "O chanfro precisa de duas linhas" -# AI Translated msgid "Chamfer distance" msgstr "Distância do chanfro" -# AI Translated msgid "Chamfer failed (parallel lines or distance too large)" msgstr "Falha no chanfro (linhas paralelas ou distância grande demais)" @@ -26048,30 +25885,24 @@ msgctxt "Design" msgid "Loft" msgstr "Loft" -# AI Translated msgctxt "Design" msgid "Thicken" msgstr "Espessar" -# AI Translated msgctxt "Design" msgid "Join" msgstr "Unir" -# AI Translated msgid "Fuse the tool body into the target — one solid, no seam" -msgstr "Fundir o corpo da ferramenta ao alvo — um único sólido, sem emenda" +msgstr "Fundir o corpo da ferramenta ao alvo — um único sólido, sem costura" -# AI Translated msgctxt "Design" msgid "Subtract" msgstr "Subtrair" -# AI Translated msgid "Cut the tool body out of the target" msgstr "Recortar o corpo da ferramenta do alvo" -# AI Translated msgctxt "Design" msgid "Intersect" msgstr "Intersectar" @@ -26802,10 +26633,10 @@ msgid "Horizontal slider - Move active thumb Right" msgstr "Controle deslizante horizontal - Mover o polegar ativo para a direita" msgid "Horizontal slider - Move to start position" -msgstr "Barra deslizante horizontal — Mover para a posição inicial" +msgstr "Controle deslizante horizontal — Mover para a posição inicial" msgid "Horizontal slider - Move to last position" -msgstr "Barra deslizante horizontal — Mover para a última posição" +msgstr "Controle deslizante horizontal — Mover para a última posição" msgid "Camera view - Default" msgstr "Vista da câmera - Padrão" @@ -28020,19 +27851,15 @@ msgstr "*Dicas: se você mudou a posição do carretel na máquina, feche esta p msgid "Summary: This is currently the most suitable position for placement." msgstr "Resumo: esta é atualmente a posição mais adequada para o posicionamento." -# AI Translated msgid "?" msgstr "?" -# AI Translated msgid "Wiki->" msgstr "Wiki->" -# AI Translated msgid "Note:" -msgstr "Observação:" +msgstr "Nota:" -# AI Translated msgctxt "Texture Displacement" msgid "Bake" msgstr "Assar" @@ -28051,11 +27878,11 @@ msgstr "Pintar deslocamento de textura" # AI Translated msgid "Mark texture seam" -msgstr "Marcar emenda da textura" +msgstr "Marcar costura da textura" # AI Translated msgid "Mark texture seam path" -msgstr "Marcar caminho de emenda da textura" +msgstr "Marcar caminho de costura da textura" # AI Translated #, boost-format @@ -28070,7 +27897,6 @@ msgstr "Escala média das ilhas" msgid "Select an island in the UV editor first." msgstr "Selecione primeiro uma ilha no editor UV." -# AI Translated msgid "Cut texture island" msgstr "Cortar ilha da textura" @@ -28078,31 +27904,24 @@ msgstr "Cortar ilha da textura" msgid "This island has no neighbour it shares an edge with." msgstr "Esta ilha não tem nenhuma vizinha com a qual compartilhe uma aresta." -# AI Translated msgid "Join texture island" msgstr "Unir ilha da textura" -# AI Translated msgid "Unjoin texture island" msgstr "Desunir ilha da textura" -# AI Translated msgid "Clear texture seams" -msgstr "Limpar emendas da textura" +msgstr "Limpar costuras da textura" -# AI Translated msgid "Clear texture UV edits" msgstr "Limpar edições UV da textura" -# AI Translated msgid "Apply texture projection frame" msgstr "Aplicar moldura de projeção da textura" -# AI Translated msgid "Move texture island" msgstr "Mover ilha da textura" -# AI Translated msgid "Edit texture UV" msgstr "Editar UV da textura" @@ -28130,29 +27949,23 @@ msgstr "Imagens (*.png;*.jpg;*.jpeg;*.bmp)|*.png;*.jpg;*.jpeg;*.bmp" msgid "Choose a texture image (height map)" msgstr "Escolha uma imagem de textura (mapa de altura)" -# AI Translated msgid "Choose a texture" msgstr "Escolha uma textura" -# AI Translated msgid "Remove from My textures" msgstr "Remover de Minhas texturas" -# AI Translated msgid "Built-in" msgstr "Integradas" -# AI Translated msgid "No textures found." msgstr "Nenhuma textura encontrada." -# AI Translated msgid "My textures" msgstr "Minhas texturas" -# AI Translated msgid "Import your own image as a height map. It is converted to the format the slicer bakes from and saved to your personal texture folder, kept separate from the textures shipped with OrcaSlicer." -msgstr "Importe sua própria imagem como mapa de altura. Ela é convertida para o formato a partir do qual o fatiador assa e salva na sua pasta pessoal de texturas, separada das texturas fornecidas com o OrcaSlicer." +msgstr "Importe sua própria imagem como mapa de altura. Ela é convertida para o formato a partir do qual o fatiador assa e salva na sua pasta pessoal de texturas, mantida separada das texturas fornecidas com o OrcaSlicer." # AI Translated msgid "PNG, JPG or BMP - converted to a height map on import. Hover one of yours to remove it." @@ -28213,111 +28026,84 @@ msgstr "Pinte primeiro a área que deseja suavizar - a suavização só afeta a msgid "Nothing to smooth - the painted area is only one triangle deep, so with \"Ignore outer ring\" on there are no interior vertices to relax." msgstr "Nada a suavizar - a área pintada tem apenas um triângulo de profundidade, então, com \"Ignorar anel externo\" ativado, não há vértices internos para relaxar." -# AI Translated msgid "Smooth texture displacement" msgstr "Suavizar deslocamento de textura" -# AI Translated msgid "Remesh model for texture displacement" msgstr "Remalhar modelo para deslocamento de textura" -# AI Translated msgid "Remeshing did not change the model. It may be non-manifold (open edges or edges shared by more than two triangles), or the target edge length may already be met." msgstr "O remalhamento não alterou o modelo. Ele pode ser não-manifold (arestas abertas ou arestas compartilhadas por mais de dois triângulos), ou o comprimento de aresta alvo pode já ter sido atingido." -# AI Translated msgid "Nothing is painted, there is nothing to bake." msgstr "Nada está pintado, não há nada para assar." -# AI Translated msgid "Bake texture displacement" msgstr "Assar deslocamento de textura" -# AI Translated msgid "Nothing is painted, so there are no bake stages to capture." msgstr "Nada está pintado, então não há etapas de assamento para capturar." -# AI Translated msgid "Bake stages (debug)" msgstr "Etapas do assamento (depuração)" -# AI Translated msgid "Capturing..." msgstr "Capturando..." -# AI Translated msgid "Capture stages" msgstr "Capturar etapas" -# AI Translated msgid "Run the same bake the Bake button runs, keeping the mesh after every stage, and step through them here. Nothing is committed to the model - this is for finding which stage a bad result came from." msgstr "Executa o mesmo assamento que o botão Assar executa, mantendo a malha após cada etapa, e permite percorrê-las aqui. Nada é aplicado ao modelo - serve para descobrir de qual etapa veio um resultado ruim." -# AI Translated msgid "Check topology" msgstr "Verificar topologia" -# AI Translated msgid "Count open and non-manifold edges after each stage, which is how a stage that tore the mesh is spotted. It scans every edge, so it adds noticeably to the capture on a fine bake." msgstr "Conta as arestas abertas e não-manifold após cada etapa, que é como se identifica uma etapa que rasgou a malha. Analisa todas as arestas, então aumenta consideravelmente a captura em um assamento fino." -# AI Translated msgid "< Previous" msgstr "< Anterior" -# AI Translated msgid "Next >" msgstr "Próximo >" -# AI Translated msgid "triangles" msgstr "triângulos" -# AI Translated msgid "vertices" msgstr "vértices" -# AI Translated msgid "Open edges" msgstr "Arestas abertas" -# AI Translated msgid "Non-manifold" msgstr "Não-manifold" -# AI Translated msgid "Degenerate" msgstr "Degenerados" -# AI Translated msgid "Write stage meshes" msgstr "Gravar malhas das etapas" -# AI Translated msgid "Wrote the stage meshes as OBJ files to:" msgstr "As malhas das etapas foram gravadas como arquivos OBJ em:" -# AI Translated msgid "Could not write the stage meshes." msgstr "Não foi possível gravar as malhas das etapas." -# AI Translated msgid "Write every captured stage out as an OBJ file, so they can be opened side by side in a mesh viewer." msgstr "Grava cada etapa capturada como um arquivo OBJ, para que possam ser abertas lado a lado em um visualizador de malhas." -# AI Translated msgid "The painted area could not be carried onto the remeshed model, so nothing was changed. Switch to Pro mode and remesh before painting." msgstr "A área pintada não pôde ser transferida para o modelo remalhado, então nada foi alterado. Mude para o modo Pro e remalhe antes de pintar." -# AI Translated msgid "Pro" msgstr "Pro" -# AI Translated msgid "Standard - pick a texture, paint where it goes, press Bake. Everything the mesh needs is done for you in that one step." msgstr "Padrão - escolha uma textura, pinte onde ela vai e pressione Assar. Tudo o que a malha precisa é feito por você nessa única etapa." -# AI Translated msgid "Pro - the mesh preparation is yours to run: Remesh, Subdivide and Bake as separate steps, with every setting on show. For when Standard's result is not what you wanted and you know why." msgstr "Pro - a preparação da malha fica por sua conta: Remalhar, Subdividir e Assar como etapas separadas, com todas as configurações à mostra. Para quando o resultado do Padrão não é o que você queria e você sabe por quê." @@ -28358,7 +28144,6 @@ msgstr "Pincel - pinte sobre a superfície arrastando" msgid "Face - click individual triangles" msgstr "Face - clique em triângulos individuais" -# AI Translated msgid "Connected area" msgstr "Área conectada" @@ -28366,7 +28151,6 @@ msgstr "Área conectada" msgid "Connected area - flood-fill the region reachable without crossing an edge sharper than the angle threshold" msgstr "Área conectada - preenche a região alcançável sem cruzar uma aresta mais acentuada que o limiar de ângulo" -# AI Translated msgid "Wait for the bake to finish." msgstr "Aguarde o assamento terminar." @@ -28410,14 +28194,12 @@ msgstr "Esfera - pinta apenas dentro de uma esfera ao redor do ponto sob o curso msgid "Angle threshold - the fill stops at edges sharper than this" msgstr "Limiar de ângulo - o preenchimento para em arestas mais acentuadas que isto" -# AI Translated msgid "Click a triangle to paint it" msgstr "Clique em um triângulo para pintá-lo" msgid "Only for a layer mapped with Unwrap (LSCM) - set the active layer's Mapping to Unwrap to use this view." msgstr "" -# AI Translated msgid "Normal - the real geometry, exactly what Bake will produce. Slower to update" msgstr "Normal - a geometria real, exatamente o que Assar vai produzir. Atualiza mais devagar" @@ -28425,14 +28207,12 @@ msgstr "Normal - a geometria real, exatamente o que Assar vai produzir. Atualiza msgid "Fast - the relief is only shaded on, not built, and only for the layer you are editing. Updates instantly while you paint" msgstr "Rápido - o relevo é apenas sombreado, não construído, e só para a camada que você está editando. Atualiza instantaneamente enquanto você pinta" -# AI Translated msgid "Checker" msgstr "Xadrez" msgid "Checker - a test grid instead of the texture. Where the squares stay square the texture is undistorted; where they stretch, it will too. Opens the UV editor if it is closed" msgstr "" -# AI Translated msgid "Distortion" msgstr "Distorção" @@ -28447,7 +28227,6 @@ msgstr "Malha - sobrepõe as arestas da malha; independente da vista acima" msgid "Rebuilds the preview as soon as anything changes. Turn it off on a heavy model if painting or dragging a slider starts to stutter - the preview then waits until you let go." msgstr "Reconstrói a pré-visualização assim que algo muda. Desative em um modelo pesado se pintar ou arrastar um controle deslizante começar a travar - a pré-visualização então espera até você soltar." -# AI Translated msgid "Texture layers" msgstr "Camadas de textura" @@ -28559,37 +28338,31 @@ msgstr "" msgid "The most mixed filaments a bake may add. They are picked from the texture's colors, and only the ones the bake actually uses are created." msgstr "" -# AI Translated #, boost-format msgid "%1% printable colors from %2% filaments" msgstr "%1% cores imprimíveis a partir de %2% filamentos" -# AI Translated msgid "Denoise" -msgstr "Reduzir ruído" +msgstr "Reduzir Ruído" # AI Translated msgid "Cleans up single stray triangles of the wrong color, which detail finer than the mesh leaves behind. Raise it if the result looks speckled, lower it if small features are being swallowed." msgstr "Remove triângulos isolados com a cor errada, deixados por detalhes mais finos que a malha. Aumente se o resultado parecer salpicado; diminua se pequenos detalhes estiverem sendo engolidos." -# AI Translated msgctxt "Texture Displacement" msgid "Mapping" msgstr "Mapeamento" -# AI Translated msgid "Triplanar (blended)" msgstr "Triplanar (mesclado)" -# AI Translated msgid "Triplanar - projects the texture from all three axes at once and blends between them, so a patch wrapping around a sharp edge has no seam." -msgstr "Triplanar - projeta a textura a partir dos três eixos ao mesmo tempo e mescla entre eles, de modo que uma área que envolve uma aresta viva não tenha emenda." +msgstr "Triplanar - projeta a textura a partir dos três eixos ao mesmo tempo e mescla entre eles, de modo que uma área que envolve uma aresta viva não tenha costura." # AI Translated msgid "Cylindrical - wraps the texture around the painted area's own center, for round shapes." msgstr "Cilíndrico - envolve a textura ao redor do próprio centro da área pintada, para formas redondas." -# AI Translated msgid "Spherical" msgstr "Esférico" @@ -28597,15 +28370,12 @@ msgstr "Esférico" msgid "Spherical - wraps the texture around the painted area's own center in both directions." msgstr "Esférico - envolve a textura ao redor do próprio centro da área pintada, nas duas direções." -# AI Translated msgid "Unwrap (LSCM)" msgstr "Desdobrar (LSCM)" -# AI Translated msgid "Unwrap - flattens the painted area and maps the texture onto it with as little stretching as possible. The area is cut into pieces at its sharp edges first (see Seam angle), so each piece can lie flat on its own." -msgstr "Desdobrar - achata a área pintada e mapeia a textura sobre ela com o mínimo de estiramento possível. Primeiro a área é cortada em pedaços nas suas arestas vivas (veja Ângulo de emenda), para que cada pedaço possa ficar plano por conta própria." +msgstr "Desdobrar - achata a área pintada e mapeia a textura sobre ela com o mínimo de estiramento possível. Primeiro a área é cortada em pedaços nas suas arestas vivas (veja Ângulo de costura), para que cada pedaço possa ficar plano por conta própria." -# AI Translated msgid "From view" msgstr "Da vista" @@ -28613,13 +28383,12 @@ msgstr "Da vista" msgid "From view - projects straight onto the painted area from where you are looking, like a slide projector." msgstr "Da vista - projeta diretamente sobre a área pintada a partir de onde você está olhando, como um projetor de slides." -# AI Translated msgid "Open UV editor" msgstr "Abrir editor UV" # AI Translated msgid "Opens the UV editor, where you can see how the texture is laid out over the painted area, cut seams and move the pieces around." -msgstr "Abre o editor UV, onde você vê como a textura está distribuída sobre a área pintada, corta emendas e move os pedaços." +msgstr "Abre o editor UV, onde você vê como a textura está distribuída sobre a área pintada, corta costuras e move os pedaços." # AI Translated msgid "Not unwrapped yet" @@ -28786,9 +28555,8 @@ msgstr "Seguir detalhes da textura" msgid "Spends the triangles where the texture actually bends - packed along ridges and edges, sparse over flat ground - instead of spreading them evenly. The same detail for fewer triangles on most textures." msgstr "Gasta os triângulos onde a textura realmente se curva - concentrados ao longo de cristas e arestas, esparsos em áreas planas - em vez de distribuí-los uniformemente. O mesmo detalhe com menos triângulos na maioria das texturas." -# AI Translated msgid "Max edge" -msgstr "Aresta máx." +msgstr "Aresta máx" # AI Translated msgid "Target edge" @@ -28810,9 +28578,8 @@ msgstr "Detalhe" msgid "How far the mesh may sit from the shape the texture describes, in millimetres. Smaller follows fine detail and costs triangles; larger only chases the big features." msgstr "Quanto a malha pode se afastar da forma descrita pela textura, em milímetros. Menor segue detalhes finos e custa triângulos; maior só acompanha as formas grandes." -# AI Translated msgid "Min edge" -msgstr "Aresta mín." +msgstr "Aresta mín" # AI Translated msgid "A floor on triangle size, so a sharp step in the texture cannot be chased forever. Lower it for finer relief, raise it if the count runs away at hard edges." @@ -28863,19 +28630,15 @@ msgstr "Pré-visualizar subdivisão" msgid "Shows what the refinement would produce as a wireframe, without touching the model." msgstr "Mostra o que o refinamento produziria como malha, sem alterar o modelo." -# AI Translated msgid "Subdivide" msgstr "Subdividir" -# AI Translated msgid "Refines the painted area to the target edge length and carries your paint onto the finer mesh. The rest of the model is left as it is." msgstr "Refina a área pintada até o comprimento de aresta alvo e transfere sua pintura para a malha mais fina. O restante do modelo fica como está." -# AI Translated msgid "Replaces the model's geometry with the subdivided mesh and clears any not-yet-baked paint on it (already-baked relief is unaffected)." msgstr "Substitui a geometria do modelo pela malha subdividida e limpa qualquer pintura ainda não assada nela (o relevo já assado não é afetado)." -# AI Translated msgid "Remeshing" msgstr "Remalhamento" @@ -28883,23 +28646,18 @@ msgstr "Remalhamento" msgid "Triangle size the whole model is rebuilt with, in millimetres. Displacement works best on an even mesh; this is what makes one out of an uneven import." msgstr "Tamanho dos triângulos com que o modelo inteiro é reconstruído, em milímetros. O deslocamento funciona melhor em uma malha uniforme; isto cria uma a partir de uma importação irregular." -# AI Translated msgid "Keep sharp edges" msgstr "Manter arestas vivas" -# AI Translated msgid "Holds hard edges and open borders in place while the rest is remeshed. Without it the remesher slides vertices along the surface and rounds every crisp edge off - a cube comes back with wobbly edges." -msgstr "Mantém arestas vivas e bordas abertas no lugar enquanto o restante é remalhado. Sem isso, o remalhador desliza os vértices ao longo da superfície e arredonda toda aresta nítida - um cubo volta com arestas onduladas." +msgstr "Mantém arestas vivas e bordas abertas fixas enquanto o restante remalhado. Sem isso, o remalhador desliza os vértices ao longo da superfície e arredonda todas as arestas nítidas - um cubo voltaria com arestas onduladas." -# AI Translated msgid "How sharp a fold has to be, in degrees, before the remesher treats it as an edge worth keeping. Lower protects more of the model's shape; higher rebuilds more of it evenly." -msgstr "Quão acentuada uma dobra precisa ser, em graus, para que o remalhador a trate como uma aresta a ser mantida. Menor protege mais da forma do modelo; maior reconstrói mais dele de forma uniforme." +msgstr "Quão acentuada uma dobra precisa ser, em graus, para que o remalhador a trate como uma aresta a ser mantida. Menor protege mais da forma do modelo; maior reconstrói mais dele uniformemente." -# AI Translated msgid "Remesh" msgstr "Remalhar" -# AI Translated msgid "Rebuilds the whole model with triangles close to this edge length - splitting the big ones and merging the small ones - so displacement has an even density to work with. Replaces the geometry; your paint is carried onto the new triangles spatially, so it survives (already-baked relief is kept too)." msgstr "Reconstrói o modelo inteiro com triângulos próximos deste comprimento de aresta - dividindo os grandes e mesclando os pequenos - para que o deslocamento tenha uma densidade uniforme para trabalhar. Substitui a geometria; sua pintura é transferida espacialmente para os novos triângulos, então ela sobrevive (o relevo já assado também é mantido)." @@ -28944,19 +28702,15 @@ msgstr "Ignorar anel externo" msgid "Keeps the outer ring of the painted area out of the smoothing. Its neighbours outside the paint never move, so smoothing it drags the relief down and leaves the pattern half-melted at the border." msgstr "Mantém o anel externo da área pintada fora da suavização. Seus vizinhos fora da pintura nunca se movem, então suavizá-lo puxa o relevo para baixo e deixa o padrão meio derretido na borda." -# AI Translated msgid "Smooth baked mesh now" msgstr "Suavizar malha assada agora" -# AI Translated msgid "Applies the smoothing above to the model itself, right now, within the painted area. For relief that is already baked in - anything not yet baked is smoothed by Bake." msgstr "Aplica a suavização acima ao próprio modelo, agora mesmo, dentro da área pintada. Para relevo que já foi assado - o que ainda não foi assado é suavizado por Assar." -# AI Translated msgid "Experimental: classic bake pipeline" msgstr "Experimental: pipeline de assamento clássico" -# AI Translated msgid "Bake by moving the vertices the mesh already has, after preparing it (remesh, adaptive subdivision, and a cut along sharp steps in the texture). Keeps the topology, which is what colors need. The default pipeline instead refines, cleans up sliver triangles, displaces and simplifies in one run; nothing needs preparing first, but it does not produce colors yet." msgstr "Assa movendo os vértices que a malha já tem, depois de prepará-la (remalhamento, subdivisão adaptativa e um corte ao longo dos degraus bruscos da textura). Mantém a topologia, que é o que as cores precisam. O pipeline padrão, em vez disso, refina, limpa triângulos estreitos, desloca e simplifica de uma só vez; nada precisa ser preparado antes, mas ainda não produz cores." @@ -28970,9 +28724,8 @@ msgstr "Orçamento" msgid "%d k (auto)" msgstr "%d k (automático)" -# AI Translated msgid "How many thousand triangles this bake may spend on the area you painted. Relief already baked into the rest of the model is kept on top of it, so a second bake somewhere else gets the same budget as the first. Raise it if the warning below Resolution says the detail will not fit; 0 keeps every triangle the refinement produced, however many that is." -msgstr "Quantos milhares de triângulos este assamento pode gastar na área que você pintou. O relevo já assado no restante do modelo é mantido além disso, então um segundo assamento em outro lugar recebe o mesmo orçamento que o primeiro. Aumente se o aviso abaixo de Resolução disser que o detalhe não cabe; 0 mantém todos os triângulos que o refinamento produziu, quantos forem." +msgstr "Quantos milhares de triângulos este assamento pode gastar na área que você pintou. O relevo já assado no restante do modelo é mantido além disso, então um segundo assamento em outro lugar recebe o mesmo orçamento que o primeiro. Aumente se o aviso abaixo de Resolução disser que o detalhe não cabe; 0 preserva todos os triângulos produzidos pelo refinamento, independentemente de quantos sejam." # AI Translated msgid "Align mesh to texture edges" @@ -29004,16 +28757,13 @@ msgstr "%.2f mm (automático)" msgid "Chosen from the size of the model: %1$.2f mm triangles, budget %2% k. Untick Auto to set them yourself." msgstr "Escolhido pelo tamanho do modelo: triângulos de %1$.2f mm, orçamento de %2% k. Desmarque Auto para defini-los você mesmo." -# AI Translated msgid "How fine the mesh is made under the paint, in millimetres. It has to be smaller than the detail you want out of the texture - a 0.5 mm groove needs triangles well under 0.5 mm. Smaller costs triangles fast: halving it needs four times as many, and once they no longer fit the budget the bake simplifies back down and the detail goes with it." -msgstr "Quão fina a malha fica sob a pintura, em milímetros. Precisa ser menor que o detalhe que você quer tirar da textura - um sulco de 0,5 mm precisa de triângulos bem abaixo de 0,5 mm. Menor custa triângulos rapidamente: reduzir pela metade exige quatro vezes mais, e quando eles não cabem mais no orçamento, o assamento simplifica de volta e o detalhe vai junto." +msgstr "Quão fina a malha fica sob a pintura, em milímetros. Precisa ser menor que o detalhe que você quer tirar da textura - um sulco de 0,5 mm precisa de triângulos bem abaixo de 0,5 mm. Menor custa triângulos rapidamente: reduzir pela metade exige quatro vezes mais e quando eles não cabem mais no orçamento o assamento simplifica de volta e o detalhe vai junto." -# AI Translated #, boost-format msgid "Needs about %1% triangles, budget %2% - the bake will simplify back down and lose detail." msgstr "Precisa de cerca de %1% triângulos, orçamento de %2% - o assamento vai simplificar de volta e perder detalhes." -# AI Translated msgid "How many thousand triangles the refinement may add to the model. The triangle that fits worst is always split first, so even a run that spends the lot has spent it where it shows most. Raise it if the relief still looks coarse." msgstr "Quantos milhares de triângulos o refinamento pode adicionar ao modelo. O triângulo que se ajusta pior é sempre dividido primeiro, então mesmo uma execução que gaste tudo terá gasto onde mais aparece. Aumente se o relevo ainda parecer grosseiro." @@ -29021,25 +28771,20 @@ msgstr "Quantos milhares de triângulos o refinamento pode adicionar ao modelo. msgid "Preparing..." msgstr "Preparando..." -# AI Translated msgid "Baking..." msgstr "Assando..." -# AI Translated msgid "Nothing is painted yet. The UV editor's seam tool is on, so strokes on the model mark seams instead of painting - turn it off in the pane to paint." -msgstr "Nada foi pintado ainda. A ferramenta de emenda do editor UV está ativa, então os traços no modelo marcam emendas em vez de pintar - desative-a no painel para pintar." +msgstr "Nada foi pintado ainda. A ferramenta de costura do editor UV está ativa, então os traços no modelo marcam costuras em vez de pintar - desative-a no painel para pintar." -# AI Translated msgid "Nothing is painted yet." msgstr "Nada foi pintado ainda." -# AI Translated msgid "Turn the painted height maps into real geometry, by moving the vertices that are already there. Use Subdivide first if the mesh is too coarse to show the detail." msgstr "Transforma os mapas de altura pintados em geometria real, movendo os vértices que já existem. Use Subdividir antes se a malha for grosseira demais para mostrar o detalhe." -# AI Translated msgid "Turn the painted height maps into real geometry. The mesh is remeshed to an even density and refined where the texture bends first, so the detail has vertices to land on - all in one step." -msgstr "Transforma os mapas de altura pintados em geometria real. Primeiro a malha é remalhada para uma densidade uniforme e refinada onde a textura se curva, para que o detalhe tenha vértices onde cair - tudo em uma etapa." +msgstr "Transforma os mapas de altura pintados em geometria real. A malha é remalhada para uma densidade uniforme e refinada onde a textura se curva primeiro, para que o detalhe tenha vértices onde cair - tudo em uma etapa." # AI Translated msgid "Stops the bake. Whatever it had already finished stays on the model, and can be undone." @@ -29049,22 +28794,18 @@ msgstr "Interrompe o assamento. O que já tiver sido concluído permanece no mod msgid "Closes the tool without baking. Your paint, layers and settings stay with the model." msgstr "Fecha a ferramenta sem assar. Sua pintura, camadas e configurações permanecem com o modelo." -# AI Translated #, boost-format msgid "%1% k" msgstr "%1% k" -# AI Translated #, boost-format msgid "Model: %1% triangles - the bake refines to the resolution above, up to its budget" msgstr "Modelo: %1% triângulos - o assamento refina até a resolução acima, dentro do seu orçamento" -# AI Translated #, boost-format msgid "Bake moves existing vertices - the model stays at %1% triangles" msgstr "Assar move os vértices existentes - o modelo continua com %1% triângulos" -# AI Translated #, boost-format msgid "Bake result up to ~%1% k triangles" msgstr "Resultado do assamento até ~%1% k triângulos" @@ -29091,43 +28832,33 @@ msgstr "Saindo da pintura de deslocamento de textura" msgid "Texture displacement editing" msgstr "Edição de deslocamento de textura" -# AI Translated msgid "Choose SLA archive:" msgstr "Escolha o arquivo SLA:" -# AI Translated msgid "Import file" msgstr "Importar arquivo" -# AI Translated msgid "Import model and profile" msgstr "Importar modelo e perfil" -# AI Translated msgid "Import profile only" msgstr "Importar apenas o perfil" -# AI Translated msgid "Import model only" msgstr "Importar apenas o modelo" -# AI Translated msgid "Accurate" msgstr "Precisa" -# AI Translated msgid "Balanced" msgstr "Equilibrada" -# AI Translated msgid "Quick" msgstr "Rápida" -# AI Translated msgid "Baking texture displacement" msgstr "Assando deslocamento de textura" -# AI Translated msgid "The bake produced no displacement, so nothing was changed and the paint was kept. Check that the painted layer has a texture and a non-zero depth." msgstr "O assamento não produziu deslocamento, então nada foi alterado e a pintura foi mantida. Verifique se a camada pintada tem uma textura e uma profundidade diferente de zero." @@ -29136,7 +28867,6 @@ msgstr "O assamento não produziu deslocamento, então nada foi alterado e a pin msgid "The triangle budget limited the detail: this resolution needs %1% triangles, the budget kept %2%. Raise Budget or use a coarser Resolution for the full detail." msgstr "O orçamento de triângulos limitou o detalhe: esta resolução precisa de %1% triângulos, o orçamento manteve %2%. Aumente Orçamento ou use uma Resolução mais grosseira para obter o detalhe completo." -# AI Translated msgid "Capturing bake stages" msgstr "Capturando etapas do assamento" @@ -30169,7 +29899,7 @@ msgstr "Desdobrar" # AI Translated msgid "Seam angle" -msgstr "Ângulo de emenda" +msgstr "Ângulo de costura" # AI Translated msgid "Edges sharper than this are cut, and the pieces either side of them are flattened separately. Lower it to cut more: each piece then lies flat with less stretching, at the cost of the texture not running continuously across the cut. Takes effect at the next Unwrap." @@ -30194,15 +29924,13 @@ msgstr "" # AI Translated msgid "Mark seams - click edges on the model to cut the unwrap along them. The edge under the cursor is highlighted yellow; click to mark it red, click a red edge again to unmark it. Painting is paused while this is on." -msgstr "Marcar emendas - clique em arestas no modelo para cortar o desdobramento ao longo delas. A aresta sob o cursor fica destacada em amarelo; clique para marcá-la em vermelho, clique novamente em uma aresta vermelha para desmarcá-la. A pintura fica pausada enquanto isto estiver ativo." +msgstr "Marcar costuras - clique em arestas no modelo para cortar o desdobramento ao longo delas. A aresta sob o cursor fica destacada em amarelo; clique para marcá-la em vermelho, clique novamente em uma aresta vermelha para desmarcá-la. A pintura fica pausada enquanto isto estiver ativo." -# AI Translated msgid "Path - instead of clicking every edge, click a start point and then an end point: the whole shortest path between them is seamed at once. Available while marking seams." -msgstr "Caminho - em vez de clicar em cada aresta, clique em um ponto inicial e depois em um ponto final: todo o caminho mais curto entre eles recebe a emenda de uma vez. Disponível ao marcar emendas." +msgstr "Caminho - em vez de clicar em cada aresta, clique em um ponto inicial e depois em um ponto final: todo o caminho mais curto entre eles recebe a costura de uma vez. Disponível ao marcar costuras." -# AI Translated msgid "Clear seams - remove every seam marked on this layer" -msgstr "Limpar emendas - remove todas as emendas marcadas nesta camada" +msgstr "Limpar costuras - remove todas as costuras marcadas nesta camada" # AI Translated msgid "Average scale - give every island the same texel density" @@ -30236,11 +29964,9 @@ msgstr "" msgid "What is selected, and the exact figures of the move, rotation or scale while you drag one." msgstr "" -# AI Translated msgid "No layer mapped with Unwrap" msgstr "Nenhuma camada mapeada com Desdobrar" -# AI Translated #, c-format, boost-format msgid "%.1f mm tile" msgstr "ladrilho de %.1f mm" @@ -30250,11 +29976,10 @@ msgstr "" # AI Translated msgid "Out of date - the paint, the seams or the seam angle changed since this unwrap was made. Press to unwrap again." -msgstr "Desatualizado - a pintura, as emendas ou o ângulo de emenda mudaram desde que este desdobramento foi feito. Pressione para desdobrar novamente." +msgstr "Desatualizado - a pintura, as costuras ou o ângulo de costura mudaram desde que este desdobramento foi feito. Pressione para desdobrar novamente." -# AI Translated msgid "Flatten the painted area into UV islands. It is computed only when you press this, not on every edit - so paint, change the seam angle or mark seams first, then press Unwrap." -msgstr "Achata a área pintada em ilhas UV. Só é calculado quando você pressiona isto, não a cada edição - então pinte, altere o ângulo de emenda ou marque emendas primeiro e depois pressione Desdobrar." +msgstr "Achata a área pintada em ilhas UV. Só é calculado quando você pressiona isso, não a cada edição - então pinte, altere o ângulo de costura ou marque costuras primeiro e depois pressione Desdobrar." msgid "Turn Mark seams on first - Path is a quicker way of marking them." msgstr "" @@ -30685,7 +30410,6 @@ msgstr "" "O plugin de pós-processamento %1% falhou.\n" "Erro: %2%" -# AI Translated #, boost-format msgid "" "Post-processing plugin %1% failed.\n" @@ -30695,19 +30419,16 @@ msgid "" msgstr "" "O plugin de pós-processamento %1% falhou.\n" "\n" -"Espera-se que o plugin de pós-processamento modifique o arquivo G-code %2% no próprio local, mas o arquivo G-code foi excluído.\n" +"É esperado que o plugin de pós-processamento modifique o arquivo G-code %2% diretamente, mas o arquivo G-code foi excluído.\n" "Verifique a implementação do plugin.\n" -# AI Translated #, boost-format msgid "Failed making a temporary copy of G-code file %1% before running a post-processing script: %2%" msgstr "Falha ao criar uma cópia temporária do arquivo G-code %1% antes de executar um script de pós-processamento: %2%" -# AI Translated msgid "Post-processor can't find exported gcode file" msgstr "O pós-processador não consegue encontrar o arquivo G-code exportado" -# AI Translated #, boost-format msgid "" "Post-processing script %1% on file %2% failed.\n" @@ -30716,7 +30437,6 @@ msgstr "" "O script de pós-processamento %1% no arquivo %2% falhou.\n" "Código de erro: %3%" -# AI Translated #, boost-format msgid "" "Post-processing script %1% on file %2% failed.\n" @@ -30729,7 +30449,6 @@ msgstr "" "Saída:\n" "%4%" -# AI Translated #, boost-format msgid "" "Post-processing script %1% failed.\n" @@ -30739,36 +30458,29 @@ msgid "" msgstr "" "O script de pós-processamento %1% falhou.\n" "\n" -"Espera-se que o script de pós-processamento altere o arquivo G-code %2% no próprio local, mas o arquivo G-code foi excluído e provavelmente salvo com um novo nome.\n" -"Ajuste o script de pós-processamento para alterar o G-code no próprio local e consulte o manual para saber como, opcionalmente, renomear o arquivo G-code pós-processado.\n" +"Espera-se que o script de pós-processamento altere o arquivo G-code %2% diretamente, mas o arquivo G-code foi excluído e provavelmente salvo com um novo nome.\n" +"Ajuste o script de pós-processamento para alterar o G-code diretamente e consulte o manual para saber como renomear opcionalmente o arquivo G-code pós-processado.\n" -# AI Translated msgid "Unable to parse desired new path from output name file" msgstr "Não foi possível analisar o novo caminho desejado a partir do arquivo de nome de saída" -# AI Translated #, boost-format msgid "Output directory does not exist: %1%" msgstr "O diretório de saída não existe: %1%" -# AI Translated #, boost-format msgid "Failed reading a file %1% carrying the final name / path of a G-code file: %2%" -msgstr "Falha ao ler o arquivo %1% que contém o nome / caminho final de um arquivo G-code: %2%" +msgstr "Falha ao ler o arquivo %1% que contém o nome/caminho final de um arquivo G-code: %2%" -# AI Translated msgid "The printing task exceeds the limit, supporting a maximum of 6 printers." -msgstr "A tarefa de impressão excede o limite; são suportadas no máximo 6 impressoras." +msgstr "A tarefa de impressão excede o limite, são suportadas no máximo 6 impressoras." -# AI Translated msgid "Elapsed time:" msgstr "Tempo decorrido:" -# AI Translated msgid "Estimated time:" msgstr "Tempo estimado:" -# AI Translated msgid "Remaining time:" msgstr "Tempo restante:" @@ -30982,8 +30694,7 @@ msgstr "" "Divida suas impressões em placas\n" "Você sabia que pode dividir um modelo que tem diversas peças em placas individuais distintas prontas para imprimir? Isso simplifica o processo de manter o controle de todas as peças." -#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer -#: Height] +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] msgid "" "Speed up your print with Adaptive Layer Height\n" "Did you know that you can print a model even faster by using the Adaptive Layer Height option? Check it out!" @@ -31055,8 +30766,7 @@ msgstr "" "Melhorar a resistência\n" "Você sabia que pode usar mais voltas de parede e maior densidade de preenchimento esparso mais alta para melhorar a resistência do modelo?" -#: resources/data/hints.ini: [hint:When do you need to print with the printer -#: door opened] +#: resources/data/hints.ini: [hint:When do you need to print with the printer door opened] msgid "" "When do you need to print with the printer door opened?\n" "Did you know that opening the printer door can reduce the probability of extruder/hotend clogging when printing lower temperature filament with a higher enclosure temperature? There is more info about this in the Wiki." @@ -31104,10 +30814,6 @@ msgstr "" #~ msgid "The 3MF was created by BambuStudio. Some settings may differ from OrcaSlicer." #~ msgstr "O arquivo 3MF foi criado pelo Bambu Studio. Algumas configurações podem ser diferentes do OrcaSlicer." -# AI Translated -#~ msgid "Cannot undo or redo while an operation is running. Stop it first." -#~ msgstr "Não é possível desfazer ou refazer enquanto uma operação está em andamento. Interrompa-a primeiro." - #, c-format, boost-format #~ msgid "%s: %s" #~ msgstr "%s: %s" @@ -31129,340 +30835,9 @@ msgstr "" #~ msgid "Video tutorial" #~ msgstr "Tutorial em vídeo" -# AI Translated -#~ msgid "Primitive" -#~ msgstr "Primitivo" - -# AI Translated -#~ msgid "Empty mesh generated" -#~ msgstr "Malha vazia gerada" - -# AI Translated -#~ msgid "Box" -#~ msgstr "Caixa" - -# AI Translated -#~ msgid "Quick:" -#~ msgstr "Rápido:" - -# AI Translated -#~ msgid "Width (X)" -#~ msgstr "Largura (X)" - -# AI Translated -#~ msgid "Depth (Y)" -#~ msgstr "Profundidade (Y)" - -# AI Translated -#~ msgid "Height (Z)" -#~ msgstr "Altura (Z)" - -# AI Translated -#~ msgid "Bottom R" -#~ msgstr "R inferior" - -# AI Translated -#~ msgid "Top R" -#~ msgstr "R superior" - -# AI Translated -#~ msgid "Major R" -#~ msgstr "R maior" - -# AI Translated -#~ msgid "Minor R" -#~ msgstr "R menor" - -# AI Translated -#~ msgid "All edges" -#~ msgstr "Todas as arestas" - -# AI Translated -#~ msgid "Top edges" -#~ msgstr "Arestas superiores" - -# AI Translated -#~ msgid "Bottom edges" -#~ msgstr "Arestas inferiores" - -# AI Translated -#~ msgid "Lateral edges" -#~ msgstr "Arestas laterais" - -# AI Translated -#~ msgid "Mesh resolution" -#~ msgstr "Resolução da malha" - -# AI Translated -#~ msgid "Add Shape" -#~ msgstr "Adicionar forma" - -# AI Translated -#~ msgid "No outer profile" -#~ msgstr "Nenhum perfil externo" - -# AI Translated -#~ msgid "Failed to make outer face" -#~ msgstr "Falha ao criar a face externa" - -# AI Translated -#~ msgid "Failed to build face with holes" -#~ msgstr "Falha ao construir a face com furos" - -# AI Translated -#~ msgid "Revolve failed" -#~ msgstr "Falha na revolução" - -# AI Translated -#~ msgid "Profile" -#~ msgstr "Perfil" - -# AI Translated -#~ msgid "Start new profile (for holes)" -#~ msgstr "Iniciar novo perfil (para furos)" - -# AI Translated -#~ msgid "Segments" -#~ msgstr "Segmentos" - -# AI Translated -#~ msgid "Sides" -#~ msgstr "Lados" - -# AI Translated -#~ msgid "Click on canvas to draw" -#~ msgstr "Clique na tela para desenhar" - -# AI Translated -#~ msgid "Snap to grid" -#~ msgstr "Ajustar à grade" - -# AI Translated -#~ msgid "Grid step" -#~ msgstr "Passo da grade" - -# AI Translated -#~ msgid "Outer" -#~ msgstr "Externo" - -# AI Translated -#~ msgid "closed" -#~ msgstr "fechado" - -# AI Translated -#, boost-format -#~ msgid "%1% %2%: %3% points %4%" -#~ msgstr "%1% %2%: %3% pontos %4%" - -# AI Translated -#~ msgid "XY (Top)" -#~ msgstr "XY (Topo)" - -# AI Translated -#~ msgid "XZ (Front)" -#~ msgstr "XZ (Frente)" - -# AI Translated -#~ msgid "YZ (Side)" -#~ msgstr "YZ (Lateral)" - -# AI Translated -#~ msgid "Revolve deg" -#~ msgstr "Revolução (graus)" - -# AI Translated -#~ msgid "Set to 0 for extrude, >0 for revolve" -#~ msgstr "Defina como 0 para extrusão, >0 para revolução" - -# AI Translated -#~ msgid "Pocket (cut)" -#~ msgstr "Cavidade (corte)" - -# AI Translated -#, c-format -#~ msgid "%zu closed profile" -#~ msgid_plural "%zu closed profiles" -#~ msgstr[0] "%zu perfil fechado" -#~ msgstr[1] "%zu perfis fechados" - -# AI Translated -#~ msgid "Draw a closed profile to enable" -#~ msgstr "Desenhe um perfil fechado para ativar" - -# AI Translated -#~ msgid "Empty result" -#~ msgstr "Resultado vazio" - -# AI Translated -#, boost-format -#~ msgid "Extrude: %1%" -#~ msgstr "Extrusão: %1%" - -# AI Translated -#, boost-format -#~ msgid "Revolve: %1%" -#~ msgstr "Revolução: %1%" - -# AI Translated -#~ msgid "No object selected" -#~ msgstr "Nenhum objeto selecionado" - -# AI Translated -#~ msgid "Face failed" -#~ msgstr "Falha na face" - -# AI Translated -#~ msgid "Face with holes failed" -#~ msgstr "Falha na face com furos" - -# AI Translated -#~ msgid "Tool mesh empty" -#~ msgstr "Malha da ferramenta vazia" - -# AI Translated -#~ msgid "Pocket added (negative volume)" -#~ msgstr "Cavidade adicionada (volume negativo)" - -# AI Translated -#, boost-format -#~ msgid "Pocket: %1%" -#~ msgstr "Cavidade: %1%" - -# AI Translated -#~ msgid "Needs the active layer mapped with Unwrap (LSCM)." -#~ msgstr "Requer a camada ativa mapeada com Desdobrar (LSCM)." - -# AI Translated -#~ msgid "Checker - a test grid instead of the texture. Where the squares stay square the texture is undistorted; where they stretch, it will too" -#~ msgstr "Xadrez - uma grade de teste no lugar da textura. Onde os quadrados continuam quadrados, a textura não está distorcida; onde eles esticam, ela também vai esticar" - -# AI Translated -#~ msgid "Distortion - blue-to-red stretch heatmap over the unwrap" -#~ msgstr "Distorção - mapa de calor de estiramento, de azul a vermelho, sobre o desdobramento" - -# AI Translated -#~ msgid "Mix by" -#~ msgstr "Misturar por" - -# AI Translated -#~ msgctxt "Texture Displacement" -#~ msgid "Surface" -#~ msgstr "Superfície" - -# AI Translated -#~ msgid "" -#~ "Layers: the two filaments alternate between print layers, which blends smoothly on upright surfaces but disappears on flat-facing ones, where a whole layer is a single band.\n" -#~ "Surface: a fine checkerboard across the surface, which works at any angle but can read as texture rather than as a blend.\n" -#~ "Automatic: layers on upright faces; flat-facing faces take the nearer single filament, since a checkerboard there shows as a pattern." -#~ msgstr "" -#~ "Camadas: os dois filamentos se alternam entre as camadas de impressão, o que mistura suavemente em superfícies verticais, mas desaparece nas horizontais, onde uma camada inteira é uma única faixa.\n" -#~ "Superfície: um xadrez fino sobre a superfície, que funciona em qualquer ângulo, mas pode parecer textura em vez de mistura.\n" -#~ "Automático: camadas nas faces verticais; as faces horizontais recebem o filamento único mais próximo, já que ali um xadrez aparece como padrão." - -# AI Translated -#~ msgid "Island - move, rotate and scale whole islands" -#~ msgstr "Ilha - mover, girar e escalar ilhas inteiras" - -# AI Translated -#~ msgid "Vertex - drag vertices to reshape; Shift/Ctrl to multi-select" -#~ msgstr "Vértice - arraste vértices para remodelar; Shift/Ctrl para seleção múltipla" - -# AI Translated -#~ msgid "Edge - drag edges to reshape; Shift/Ctrl to multi-select" -#~ msgstr "Aresta - arraste arestas para remodelar; Shift/Ctrl para seleção múltipla" - -# AI Translated -#~ msgid "Frame all islands (Home)" -#~ msgstr "Enquadrar todas as ilhas (Home)" - #~ msgid "(Experimental) Use printer agents instead of print hosts" #~ msgstr "(Experimental) Usar agentes de impressora em vez de hosts de impressão" -# AI Translated -#~ msgid "FEATURES" -#~ msgstr "RECURSOS" - -# AI Translated -#~ msgid "Click a face or a reference plane in the viewport, then a sketch tool" -#~ msgstr "Clique em uma face ou em um plano de referência na janela de visualização e depois em uma ferramenta de esboço" - -# AI Translated -#~ msgid "Click a face or a reference plane, then a sketch tool." -#~ msgstr "Clique em uma face ou em um plano de referência e depois em uma ferramenta de esboço." - -# AI Translated -#, c-format, boost-format -#~ msgid "%s plane selected — right-click for the drawing tools" -#~ msgstr "Plano %s selecionado — clique com o botão direito para ver as ferramentas de desenho" - -# AI Translated -#~ msgid "" -#~ "Nothing yet — import a STEP or a mesh from the toolbar,\n" -#~ "or click a reference plane and right-click it to start a sketch." -#~ msgstr "" -#~ "Nada ainda — importe um STEP ou uma malha pela barra de ferramentas,\n" -#~ "ou clique em um plano de referência e clique nele com o botão direito para iniciar um esboço." - -# AI Translated -#~ msgid "Click a face or a reference plane, then pick a drawing tool" -#~ msgstr "Clique em uma face ou em um plano de referência e depois escolha uma ferramenta de desenho" - -# AI Translated -#~ msgid "XY" -#~ msgstr "XY" - -# AI Translated -#~ msgid "XZ" -#~ msgstr "XZ" - -# AI Translated -#~ msgid "YZ" -#~ msgstr "YZ" - -# AI Translated -#~ msgid "Equal" -#~ msgstr "Igual" - -# AI Translated -#~ msgid "Perpendicular" -#~ msgstr "Perpendicular" - -# AI Translated -#~ msgid "Midpoint" -#~ msgstr "Ponto médio" - -# AI Translated -#~ msgid "Equal length" -#~ msgstr "Comprimento igual" - -# AI Translated -#~ msgid "Equal radius" -#~ msgstr "Raio igual" - -# AI Translated -#~ msgid "Collinear" -#~ msgstr "Colinear" - -# AI Translated -#~ msgid "Symmetric about the vertical axis" -#~ msgstr "Simétrico em relação ao eixo vertical" - -# AI Translated -#~ msgid "Symmetric about the horizontal axis" -#~ msgstr "Simétrico em relação ao eixo horizontal" - -# AI Translated -#~ msgid "Fix point (anchor in place)" -#~ msgstr "Fixar ponto (ancorar no lugar)" - -# AI Translated -#~ msgid "Horizontal distance" -#~ msgstr "Distância horizontal" - -# AI Translated -#~ msgid "Vertical distance" -#~ msgstr "Distância vertical" - #~ msgid "Face recognition" #~ msgstr "Reconhecimento facial" @@ -31500,10 +30875,6 @@ msgstr "" #~ msgid "Please resolve the slicing errors and publish again." #~ msgstr "Por favor, resolva os erros de fatiamento e publique novamente." -# AI Translated -#~ msgid "Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. Off: only exactly coincident endpoints join, so a loop with a tiny gap is shown as open instead of being closed for you." -#~ msgstr "Trata extremidades do esboço a menos de 0,001 mm umas das outras como uma só junção e fecha o laço. Desativado: somente extremidades exatamente coincidentes se unem, então um laço com uma pequena folga é mostrado como aberto em vez de ser fechado para você." - #~ msgid "Slice all plates to obtain time and filament estimation" #~ msgstr "Fatiar todas as placas para obter estimativa de tempo e filamento" @@ -31751,860 +31122,21 @@ msgstr "" #~ msgid "Standard profile for 0.8mm nozzle, prioritizing speed." #~ msgstr "Perfil padrão para bico de 0,8 mm, priorizando a velocidade." -# AI Translated -#~ msgid "Slot — two centerline ends, then end radius" -#~ msgstr "Rasgo — as duas extremidades da linha central e depois o raio da extremidade" - -# AI Translated -#~ msgid "Isometric view, fitted" -#~ msgstr "Vista isométrica, ajustada" - -# AI Translated -#~ msgid "Coord Sys" -#~ msgstr "Sist. coord." - -# AI Translated -#~ msgid "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" -#~ msgstr "Montagem: alinhar dois recursos de sistema de coordenadas (fixo, planar, de revolução, deslizante, cilíndrico)" - -# AI Translated -#~ msgid "Click points; click the first point to close the loop, right-click to end the chain" -#~ msgstr "Clique nos pontos; clique no primeiro ponto para fechar o laço, clique com o botão direito para encerrar a cadeia" - -# AI Translated -#~ msgid "Click two centerline ends, then a point for the end radius" -#~ msgstr "Clique nas duas extremidades da linha central e depois em um ponto para o raio da extremidade" - -# AI Translated -#~ msgid "Click control points; double-click or right-click to finish" -#~ msgstr "Clique nos pontos de controle; clique duplo ou clique com o botão direito para terminar" - -# AI Translated -#~ msgid "Click a segment to trim it back to its nearest intersection; right-click exits" -#~ msgstr "Clique em um segmento para apará-lo até a interseção mais próxima; clique com o botão direito para sair" - -# AI Translated -#~ msgid "Click a line or arc to extend it to the nearest entity; right-click exits" -#~ msgstr "Clique em uma linha ou arco para estendê-lo até a entidade mais próxima; clique com o botão direito para sair" - -# AI Translated -#~ msgid "✓ Confirm" -#~ msgstr "✓ Confirmar" - -# AI Translated -#~ msgid "✗ Cancel" -#~ msgstr "✗ Cancelar" - -# AI Translated -#~ msgid "Undo (Ctrl+Z)" -#~ msgstr "Desfazer (Ctrl+Z)" - -# AI Translated -#~ msgid "Redo (Ctrl+Shift+Z)" -#~ msgstr "Refazer (Ctrl+Shift+Z)" - -# AI Translated -#~ msgid "Taper °" -#~ msgstr "Conicidade °" - -# AI Translated -#~ msgid "Total angle°" -#~ msgstr "Ângulo total°" - -# AI Translated -#~ msgid "Union (join)" -#~ msgstr "Unir (juntar)" - -# AI Translated -#~ msgid "Subtract (cut)" -#~ msgstr "Subtrair (cortar)" - -# AI Translated -#~ msgid "Angle°" -#~ msgstr "Ângulo°" - -# AI Translated -#~ msgid "CS A (fixed)" -#~ msgstr "SC A (fixo)" - -# AI Translated -#~ msgid "CS B (moves)" -#~ msgstr "SC B (móvel)" - -# AI Translated -#~ msgid "Move body" -#~ msgstr "Mover corpo" - -# AI Translated -#~ msgid "Select a body row first, then move it" -#~ msgstr "Selecione primeiro a linha de um corpo e depois mova-o" - -# AI Translated -#~ msgid "+" -#~ msgstr "+" - -# AI Translated -#, c-format, boost-format -#~ msgid "Body %d: edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" -#~ msgstr "Corpo %d: aresta %d selecionada — Filete/Chanfro para arredondá-la ou chanfrá-la, ou clique novamente para o corpo inteiro" - -# AI Translated -#, c-format, boost-format -#~ msgid "Edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" -#~ msgstr "Aresta %d selecionada — Filete/Chanfro para arredondá-la ou chanfrá-la, ou clique novamente para o corpo inteiro" - -# AI Translated -#~ msgid "Text to insert:" -#~ msgstr "Texto a inserir:" - -# AI Translated -#~ msgid "STEP import failed: " -#~ msgstr "Falha ao importar STEP: " - -# AI Translated -#~ msgid "Could not read the OBJ file: " -#~ msgstr "Não foi possível ler o arquivo OBJ: " - -# AI Translated -#~ msgid "Mesh conversion failed: " -#~ msgstr "Falha na conversão da malha: " - -# AI Translated -#~ msgid "Mesh import failed: " -#~ msgstr "Falha ao importar a malha: " - -# AI Translated -#~ msgid "Drag a corner to scale, the center to move — right-click when done" -#~ msgstr "Arraste um canto para dimensionar, o centro para mover — clique com o botão direito ao terminar" - -# AI Translated -#~ msgid "Recompute error: " -#~ msgstr "Erro de recálculo: " - -# AI Translated -#~ msgid "Mate needs two CoordSys features — create them first" -#~ msgstr "O posicionamento precisa de dois recursos de sistema de coordenadas — crie-os primeiro" - -# AI Translated -#~ msgid "Mate: CS A and CS B must be different CoordSys features" -#~ msgstr "Posicionamento: SC A e SC B devem ser recursos de sistema de coordenadas diferentes" - -# AI Translated -#~ msgid "No interference — need at least two solid bodies to check" -#~ msgstr "Sem interferência — são necessários pelo menos dois corpos sólidos para verificar" - -# AI Translated -#, c-format -#~ msgid "%zu interference pair, worst %.2f mm³" -#~ msgid_plural "%zu interference pairs, worst %.2f mm³" -#~ msgstr[0] "%zu par com interferência, pior %.2f mm³" -#~ msgstr[1] "%zu pares com interferência, pior %.2f mm³" - -# AI Translated -#~ msgid "" -#~ "Interference pairs:\n" -#~ "\n" -#~ msgstr "" -#~ "Pares com interferência:\n" -#~ "\n" - -# AI Translated -#~ msgid "Interference" -#~ msgstr "Interferência" - -# AI Translated -#~ msgid "Select a solid body first — its mass properties are what is reported" -#~ msgstr "Selecione primeiro um corpo sólido — são as propriedades de massa dele que são informadas" - -# AI Translated -#~ msgid "Mass properties could not be computed for this body" -#~ msgstr "Não foi possível calcular as propriedades de massa deste corpo" - -# AI Translated -#, c-format, boost-format -#~ msgid "%s: sheet body — %.2f cm² of surface, no volume" -#~ msgstr "%s: corpo de superfície — %.2f cm² de superfície, sem volume" - -# AI Translated -#, c-format, boost-format -#~ msgid "" -#~ "%s\n" -#~ "\n" -#~ "Sheet body (open shell)\n" -#~ "Surface area: %.2f cm²\n" -#~ "\n" -#~ "A sheet encloses no material, so it has no volume. Thicken it into a solid to get one." -#~ msgstr "" -#~ "%s\n" -#~ "\n" -#~ "Corpo de superfície (casca aberta)\n" -#~ "Área de superfície: %.2f cm²\n" -#~ "\n" -#~ "Uma superfície não envolve material, então não tem volume. Espesse-a para transformá-la em um sólido e obter um volume." - -# AI Translated -#~ msgid "Mass properties" -#~ msgstr "Propriedades de massa" - -# AI Translated -#, c-format, boost-format -#~ msgid "%s: %.3f cm³, %.2f cm²" -#~ msgstr "%s: %.3f cm³, %.2f cm²" - -# AI Translated -#, c-format, boost-format -#~ msgid "" -#~ "%s\n" -#~ "\n" -#~ "Volume: %.3f cm³\n" -#~ "Surface area: %.2f cm²" -#~ msgstr "" -#~ "%s\n" -#~ "\n" -#~ "Volume: %.3f cm³\n" -#~ "Área de superfície: %.2f cm²" - -# AI Translated -#~ msgid "Boolean needs two solid bodies — add or import a second one" -#~ msgstr "A operação booleana precisa de dois corpos sólidos — adicione ou importe um segundo" - -# AI Translated -#~ msgid "Line — click the end point, or type the length" -#~ msgstr "Linha — clique no ponto final ou digite o comprimento" - -# AI Translated -#~ msgid "Polyline — click the next point · click the start point to close it · right-click to end the chain" -#~ msgstr "Polilinha — clique no próximo ponto · clique no ponto inicial para fechá-la · clique com o botão direito para encerrar a cadeia" - -# AI Translated -#~ msgid "Circle — click to set the radius, or type it" -#~ msgstr "Círculo — clique para definir o raio ou digite-o" - -# AI Translated -#~ msgid "Spline — click the next control point · right-click to finish the curve" -#~ msgstr "Spline — clique no próximo ponto de controle · clique com o botão direito para terminar a curva" - -# AI Translated -#~ msgid "Trim — click a segment where it crosses another entity · right-click to exit" -#~ msgstr "Aparar — clique em um segmento onde ele cruza outra entidade · clique com o botão direito para sair" - -# AI Translated -#~ msgid "Extend — click a line or arc to grow it out to the nearest entity · right-click to exit" -#~ msgstr "Estender — clique em uma linha ou arco para prolongá-lo até a entidade mais próxima · clique com o botão direito para sair" - -# AI Translated -#~ msgid "Fillet — drag the arrow, or click the number to type the radius · click empty space to apply · right-click cancels" -#~ msgstr "Filete — arraste a seta ou clique no número para digitar o raio · clique em um espaço vazio para aplicar · o botão direito cancela" - -# AI Translated -#~ msgid "Chamfer — drag the arrow, or click the number to type the setback · click empty space to apply · right-click cancels" -#~ msgstr "Chanfro — arraste a seta ou clique no número para digitar o recuo · clique em um espaço vazio para aplicar · o botão direito cancela" - -# AI Translated -#~ msgid "Offset — click the entity to offset" -#~ msgstr "Deslocamento — clique na entidade a deslocar" - -# AI Translated -#~ msgid "Offset — drag the arrow to either side, or click the number to type the distance · click empty space to apply · right-click cancels" -#~ msgstr "Deslocamento — arraste a seta para qualquer lado ou clique no número para digitar a distância · clique em um espaço vazio para aplicar · o botão direito cancela" - -# AI Translated -#~ msgid "Mirror — axis set · now click the entities to mirror · right-click cancels" -#~ msgstr "Espelhar — eixo definido · agora clique nas entidades a espelhar · o botão direito cancela" - -# AI Translated -#, c-format, boost-format -#~ msgid "Mirror — axis set · %d to mirror · click another to add or remove it · click empty space to apply" -#~ msgstr "Espelhar — eixo definido · %d a espelhar · clique em outra para adicioná-la ou removê-la · clique em um espaço vazio para aplicar" - -# AI Translated -#~ msgid "Move — drag the handle, or click the number to type the distance · click empty space to apply" -#~ msgstr "Mover — arraste a alça ou clique no número para digitar a distância · clique em um espaço vazio para aplicar" - -# AI Translated -#~ msgid "Rotate — drag the handle, or click the number to type the angle · click empty space to apply" -#~ msgstr "Rotacionar — arraste a alça ou clique no número para digitar o ângulo · clique em um espaço vazio para aplicar" - -# AI Translated -#~ msgid "Scale — drag the handle, or click the number to type the factor · click empty space to apply" -#~ msgstr "Dimensionar — arraste a alça ou clique no número para digitar o fator · clique em um espaço vazio para aplicar" - -# AI Translated -#~ msgid "Array — drag the handle to set the step, click the count to type it · click empty space to apply" -#~ msgstr "Matriz — arraste a alça para definir o passo, clique na quantidade para digitá-la · clique em um espaço vazio para aplicar" - -# AI Translated -#~ msgid "Polar array — drag the handle to set the sweep, click the count to type it · click empty space to apply" -#~ msgstr "Matriz polar — arraste a alça para definir o ângulo total, clique na quantidade para digitá-la · clique em um espaço vazio para aplicar" - -# AI Translated -#~ msgid "Drag a corner to scale, the center to move · right-click when done" -#~ msgstr "Arraste um canto para dimensionar, o centro para mover · clique com o botão direito ao terminar" - -# AI Translated -#~ msgid "Coord Sys added" -#~ msgstr "Sist. coord. adicionado" - -# AI Translated -#~ msgid "Could not restore the CAD model: " -#~ msgstr "Não foi possível restaurar o modelo CAD: " - -# AI Translated -#~ msgid "Boolean needs two bodies — create or import a second solid" -#~ msgstr "A operação booleana precisa de dois corpos — crie ou importe um segundo sólido" - -# AI Translated -#~ msgid "Edit rejected: " -#~ msgstr "Edição rejeitada: " - -# AI Translated -#, c-format, boost-format -#~ msgid "" -#~ "Delete %s?\n" -#~ "\n" -#~ "That is the feature this body was made from. Features built on it may be removed or stop working." -#~ msgstr "" -#~ "Excluir %s?\n" -#~ "\n" -#~ "Esse é o recurso a partir do qual este corpo foi criado. Os recursos construídos sobre ele podem ser removidos ou parar de funcionar." - -# AI Translated -#~ msgid "Delete body" -#~ msgstr "Excluir corpo" - -# AI Translated -#~ msgid "STEP export failed: " -#~ msgstr "Falha ao exportar STEP: " - -# AI Translated -#~ msgid "Coord Sys ready" -#~ msgstr "Sist. coord. pronto" - -# AI Translated -#~ msgid "Mate needs at least two CoordSys features" -#~ msgstr "O posicionamento precisa de pelo menos dois recursos de sistema de coordenadas" - -# AI Translated -#~ msgid "Mate: CS A and CS B must be different" -#~ msgstr "Posicionamento: SC A e SC B devem ser diferentes" - -# AI Translated -#~ msgid "Invalid: " -#~ msgstr "Inválido: " - -# AI Translated -#~ msgid "Variable name:" -#~ msgstr "Nome da variável:" - -# AI Translated -#, c-format, boost-format -#~ msgid "Expression for '%s':" -#~ msgstr "Expressão para '%s':" - -# AI Translated -#~ msgid "Seg" -#~ msgstr "Seg." - -# AI Translated -#~ msgid "CLOSED" -#~ msgstr "FECHADO" - -# AI Translated -#, boost-format -#~ msgid "%1% %2%: %3% pts %4%" -#~ msgstr "%1% %2%: %3% pts %4%" - -# AI Translated -#~ msgid "Pocket (Cut)" -#~ msgstr "Cavidade (Corte)" - -# AI Translated -#~ msgid "Clear All" -#~ msgstr "Limpar tudo" - -# AI Translated -#~ msgid "Hollow this object" -#~ msgstr "Esvaziar este objeto" - -# AI Translated -#~ msgid "Preview hollowed and drilled model" -#~ msgstr "Pré-visualizar modelo esvaziado e perfurado" - -# AI Translated -#~ msgid "Closing distance" -#~ msgstr "Distância de fechamento" - -# AI Translated -#~ msgid "Hole diameter" -#~ msgstr "Diâmetro do furo" - -# AI Translated -#~ msgid "Hole depth" -#~ msgstr "Profundidade do furo" - -# AI Translated -#~ msgid "Remove selected holes" -#~ msgstr "Remover furos selecionados" - -# AI Translated -#~ msgid "Remove all holes" -#~ msgstr "Remover todos os furos" - -# AI Translated -#~ msgid "Clipping of view" -#~ msgstr "Recorte da vista" - #~ msgid "Reset direction" #~ msgstr "Redefinir direção" -# AI Translated -#~ msgid "Show supports" -#~ msgstr "Mostrar suportes" - -# AI Translated -#~ msgid "Hollow and drill" -#~ msgstr "Esvaziar e perfurar" - #~ msgid "Head diameter" #~ msgstr "Diâmetro da cabeça" -# AI Translated -#~ msgid "Lock supports under new islands" -#~ msgstr "Travar suportes sob novas ilhas" - #~ msgid "Remove selected points" #~ msgstr "Remover pontos selecionados" -# AI Translated -#~ msgid "Remove all points" -#~ msgstr "Remover todos os pontos" - -# AI Translated -#~ msgid "Apply changes" -#~ msgstr "Aplicar alterações" - -# AI Translated -#~ msgid "Discard changes" -#~ msgstr "Descartar alterações" - -# AI Translated -#~ msgid "Minimal points distance" -#~ msgstr "Distância mínima entre pontos" - -# AI Translated -#~ msgid "Support points density" -#~ msgstr "Densidade dos pontos de suporte" - -#~ msgid "Auto-generate points" -#~ msgstr "Pontos gerados automaticamente" - -# AI Translated -#~ msgid "Manual editing" -#~ msgstr "Edição manual" - -# AI Translated -#~ msgid "SLA Support Points" -#~ msgstr "Pontos de Suporte SLA" - -# AI Translated -#~ msgid "Do you want to save your manually edited support points?" -#~ msgstr "Deseja salvar os pontos de suporte editados manualmente?" - -# AI Translated -#~ msgid "Save support points?" -#~ msgstr "Salvar pontos de suporte?" - -# AI Translated -#~ msgid "Autogeneration will erase all manually edited points." -#~ msgstr "A geração automática apagará todos os pontos editados manualmente." - -# AI Translated -#~ msgid "Are you sure you want to do it?" -#~ msgstr "Tem certeza de que deseja fazer isso?" - -# AI Translated -#~ msgid "SLA gizmo keyboard shortcuts" -#~ msgstr "Atalhos de teclado do gizmo SLA" - -# AI Translated -#~ msgid "Note: some shortcuts work in (non)editing mode only." -#~ msgstr "Observação: alguns atalhos funcionam apenas dentro ou apenas fora do modo de edição." - #~ msgid "Left click" #~ msgstr "Clique esquerdo" -# AI Translated -#~ msgid "Add point" -#~ msgstr "Adicionar ponto" - #~ msgid "Right click" #~ msgstr "Clique direito" -# AI Translated -#~ msgid "Remove point" -#~ msgstr "Remover ponto" - -# AI Translated -#~ msgid "Move point" -#~ msgstr "Mover ponto" - -# AI Translated -#~ msgid "Add point to selection" -#~ msgstr "Adicionar ponto à seleção" - -# AI Translated -#~ msgid "Remove point from selection" -#~ msgstr "Remover ponto da seleção" - -# AI Translated -#~ msgid "Select by rectangle" -#~ msgstr "Selecionar por retângulo" - -# AI Translated -#~ msgid "Deselect by rectangle" -#~ msgstr "Desmarcar por retângulo" - -# AI Translated -#~ msgid "Select all points" -#~ msgstr "Selecionar todos os pontos" - -# AI Translated -#~ msgid "Move clipping plane" -#~ msgstr "Mover plano de recorte" - -# AI Translated -#~ msgid "Reset clipping plane" -#~ msgstr "Redefinir plano de recorte" - -# AI Translated -#~ msgid "Switch to editing mode" -#~ msgstr "Mudar para o modo de edição" - -# AI Translated -#~ msgctxt "Design" -#~ msgid "Union" -#~ msgstr "Unir" - -# AI Translated -#~ msgid "target is not a sheet body" -#~ msgstr "o alvo não é um corpo de superfície" - -# AI Translated -#~ msgid "Drill a hole, centred on a picked face or placed on a plane" -#~ msgstr "Fazer um furo, centralizado em uma face selecionada ou colocado em um plano" - -# AI Translated -#~ msgid "Shell needs a solid body" -#~ msgstr "A casca precisa de um corpo sólido" - -# AI Translated -#~ msgid "Split needs a solid body" -#~ msgstr "A divisão precisa de um corpo sólido" - -# AI Translated -#~ msgid "Pattern on curve needs a body and a curve" -#~ msgstr "O padrão em curva precisa de um corpo e de uma curva" - -# AI Translated -#~ msgid "A mate needs two coordinate systems" -#~ msgstr "Um posicionamento precisa de dois sistemas de coordenadas" - -# AI Translated -#~ msgid "Align needs a body" -#~ msgstr "O alinhamento precisa de um corpo" - -# AI Translated -#~ msgctxt "Design" -#~ msgid "Coord Sys" -#~ msgstr "Sist. coord." - -# AI Translated -#~ msgctxt "Design" -#~ msgid "Mass" -#~ msgstr "Massa" - -# AI Translated -#~ msgctxt "Design" -#~ msgid "Colour" -#~ msgstr "Cor" - -# AI Translated -#~ msgid "Set the selected body's display colour" -#~ msgstr "Definir a cor de exibição do corpo selecionado" - -# AI Translated -#~ msgctxt "Design" -#~ msgid "Centre rectangle" -#~ msgstr "Retângulo pelo centro" - -# AI Translated -#~ msgctxt "Design" -#~ msgid "Centre circle" -#~ msgstr "Círculo pelo centro" - -# AI Translated -#~ msgctxt "Design" -#~ msgid "Centre-point arc" -#~ msgstr "Arco pelo centro" - -# AI Translated -#~ msgid "Triangle — click centre, then a vertex" -#~ msgstr "Triângulo — clique no centro e depois em um vértice" - -# AI Translated -#~ msgid "Square — click centre, then a vertex" -#~ msgstr "Quadrado — clique no centro e depois em um vértice" - -# AI Translated -#~ msgid "Pentagon — click centre, then a vertex" -#~ msgstr "Pentágono — clique no centro e depois em um vértice" - -# AI Translated -#~ msgid "Hexagon — click centre, then a vertex" -#~ msgstr "Hexágono — clique no centro e depois em um vértice" - -# AI Translated -#~ msgid "Octagon — click centre, then a vertex" -#~ msgstr "Octógono — clique no centro e depois em um vértice" - -# AI Translated -#~ msgid "Dodecagon — click centre, then a vertex" -#~ msgstr "Dodecágono — clique no centro e depois em um vértice" - -# AI Translated -#~ msgid "Type text; its outline is added to this sketch as editable lines" -#~ msgstr "Digite um texto; o contorno dele é adicionado a este esboço como linhas editáveis" - -# AI Translated -#~ msgid "Major" -#~ msgstr "Eixo maior" - -# AI Translated -#~ msgid "Minor" -#~ msgstr "Eixo menor" - -# AI Translated -#~ msgid "Extend: click a line/arc that can reach another live entity" -#~ msgstr "Estender: clique em uma linha/arco que possa alcançar outra entidade ativa" - -# AI Translated -#~ msgid "Trim: click a segment where it crosses another live entity" -#~ msgstr "Aparar: clique em um segmento onde ele cruza outra entidade ativa" - -# AI Translated -#~ msgid "closed profile(s)" -#~ msgstr "perfil(is) fechado(s)" - -#~ msgid "Failed to generate cali G-code" -#~ msgstr "Falha ao gerar o G-code de calibração" - -# AI Translated -#~ msgid "Multiply" -#~ msgstr "Multiplicar" - -# AI Translated -#~ msgid " and " -#~ msgstr " e " - -# AI Translated -#~ msgid "cannot be mixed. Please select the same filament type." -#~ msgstr "não podem ser misturados. Selecione o mesmo tipo de filamento." - -# AI Translated -#~ msgid "An error occurred loading " -#~ msgstr "Ocorreu um erro ao carregar " - -# AI Translated -#~ msgid "/" -#~ msgstr "/" - -# AI Translated -#, c-format, boost-format -#~ msgid "Load %s to " -#~ msgstr "Carregar %s em " - -# AI Translated -#~ msgid "In the Design tab, draw a mate connector as a small face instead of the conventional disc with a roll quadrant. A face's orientation is read without being learned. Turn this off for the conventional CAD representation." -#~ msgstr "Na aba Design, desenha um conector de posicionamento como uma pequena face em vez do disco convencional com um quadrante de giro. A orientação de uma face é lida sem precisar ser aprendida. Desative para a representação CAD convencional." - -# AI Translated -#~ msgid "Expert" -#~ msgstr "Especialista" - -# AI Translated -#~ msgid "Simple" -#~ msgstr "Simples" - -# AI Translated -#~ msgid "Click points; click first / right-click to close the loop" -#~ msgstr "Clique nos pontos; clique no primeiro / clique com o botão direito para fechar o laço" - -# AI Translated -#~ msgid "X hint X" -#~ msgstr "Dica de X: X" - -# AI Translated -#~ msgid "X hint Y" -#~ msgstr "Dica de X: Y" - -# AI Translated -#~ msgid "X hint Z" -#~ msgstr "Dica de X: Z" - -# AI Translated -#~ msgid " — the eye suppresses this mate" -#~ msgstr " — o olho suprime este posicionamento" - -# AI Translated -#~ msgid "Del" -#~ msgstr "Excl." - -# AI Translated -#~ msgid "Sketch kept — Finish to commit it, Cancel to discard" -#~ msgstr "Esboço mantido — Terminar para confirmá-lo, Cancelar para descartá-lo" - -# AI Translated -#, c-format, boost-format -#~ msgid "Editing: Sketch %d · N = look normal to the plane · Finish or Cancel in the toolbar" -#~ msgstr "Editando: Esboço %d · N = olhar normal ao plano · Terminar ou Cancelar na barra de ferramentas" - -# AI Translated -#~ msgid "Editing sketch — drag a handle or click a quote to edit" -#~ msgstr "Editando esboço — arraste uma alça ou clique em uma cota para editar" - -# AI Translated -#, c-format, boost-format -#~ msgid "Showing %s actions" -#~ msgstr "Mostrando %s ações" - -# AI Translated -#, c-format, boost-format -#~ msgid "%s actions" -#~ msgstr "%s ações" - -# AI Translated -#, c-format, boost-format -#~ msgid "%s tabs" -#~ msgstr "%s abas" - -# AI Translated -#, c-format, boost-format -#~ msgid "%s matches" -#~ msgstr "%s correspondências" - -# AI Translated -#, c-format, boost-format -#~ msgid "%s · on %s" -#~ msgstr "%s · em %s" - -# AI Translated -#, c-format, boost-format -#~ msgid "Sketching on %s — pick a tool" -#~ msgstr "Esboçando em %s — escolha uma ferramenta" - -# AI Translated -#, c-format, boost-format -#~ msgid "" -#~ "Drawing on %s.\n" -#~ "Pick a tool, or press Menu for the list." -#~ msgstr "" -#~ "Desenhando em %s.\n" -#~ "Escolha uma ferramenta ou pressione Menu para ver a lista." - -# AI Translated -#~ msgid "Colour" -#~ msgstr "Cor" - -# AI Translated -#, c-format, boost-format -#~ msgid "Body %d " -#~ msgstr "Corpo %d " - -# AI Translated -#~ msgid "vertex selected — click again for the whole body" -#~ msgstr "vértice selecionado — clique novamente para o corpo inteiro" - -# AI Translated -#~ msgid "selected (whole body) — right-click for what applies to it" -#~ msgstr "selecionado (corpo inteiro) — clique com o botão direito para ver o que se aplica a ele" - -# AI Translated -#, c-format, boost-format -#~ msgid "face %d selected — right-click to push/pull it, or click again for the whole body" -#~ msgstr "face %d selecionada — clique com o botão direito para empurrá-la/puxá-la, ou clique novamente para o corpo inteiro" - -# AI Translated -#, c-format, boost-format -#~ msgid "edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body" -#~ msgstr "aresta %d selecionada — Filete/Chanfro para arredondá-la ou chanfrá-la, ou clique novamente para o corpo inteiro" - -# AI Translated -#, c-format, boost-format -#~ msgid "placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate" -#~ msgstr "colocado em (%.1f, %.1f, %.1f) mm — arraste as setas para mover, os anéis para rotacionar" - -# AI Translated -#, c-format, boost-format -#~ msgid "%d degrees of freedom" -#~ msgstr "%d graus de liberdade" - -# AI Translated -#, c-format, boost-format -#~ msgid "Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify" -#~ msgstr "%d sólido(s) importado(s) — selecione uma face ou aresta e depois Filete / Cortar / Casca para modificar" - -# AI Translated -#, c-format, boost-format -#~ msgid "Imported as an open shell (not watertight): %d boundary edge(s), %d non-manifold edge(s) — %d triangles → %d faces. The source mesh has holes or duplicated geometry; boolean features may fail on it" -#~ msgstr "Importado como uma casca aberta (não estanque): %d aresta(s) de borda, %d aresta(s) não-manifold — %d triângulos → %d faces. A malha de origem tem furos ou geometria duplicada; recursos booleanos podem falhar nela" - -# AI Translated -#, c-format, boost-format -#~ msgid "Sketch added on %s — select it, then right-click to Extrude" -#~ msgstr "Esboço adicionado em %s — selecione-o e clique com o botão direito para extrudar" - -# AI Translated -#, c-format -#~ msgid "%zu interference pairs, worst %.2f mm³" -#~ msgstr "%zu pares com interferência, pior %.2f mm³" - -# AI Translated -#, c-format, boost-format -#~ msgid "the picked face of Body %d" -#~ msgstr "a face selecionada do Corpo %d" - -# AI Translated -#~ msgid "the picked face" -#~ msgstr "a face selecionada" - -# AI Translated -#, c-format, boost-format -#~ msgid "%d selected · Del removes them · Shift-click adds · double-click takes the whole loop" -#~ msgstr "%d selecionado(s) · Del os remove · Shift+clique adiciona · clique duplo seleciona o laço inteiro" - -# AI Translated -#, c-format, boost-format -#~ msgid "Section view — showing the %s half" -#~ msgstr "Vista de seção — mostrando a metade %s" - -# AI Translated -#~ msgid "upper" -#~ msgstr "superior" - -# AI Translated -#~ msgid "lower" -#~ msgstr "inferior" - -# AI Translated -#, c-format -#~ msgid "Redo (%zu more)" -#~ msgstr "Refazer (mais %zu)" - -# AI Translated -#, c-format -#~ msgid "Undo (%zu more)" -#~ msgstr "Desfazer (mais %zu)" - #~ msgid "Section View" #~ msgstr "Vista de Seção" @@ -32617,10 +31149,6 @@ msgstr "" #~ msgid "Switch Camera View" #~ msgstr "Trocar Vista da Câmera" -# AI Translated -#~ msgid "Renders cast shadows on the plate, other objects, and each object onto itself in realistic view." -#~ msgstr "Renderiza sombras projetadas na mesa, em outros objetos e de cada objeto sobre si mesmo na visualização realista." - #~ msgid "Support/Color Painting: adjust section position" #~ msgstr "Suporte/Pintura em cores: ajustar a posição da seção" @@ -32630,14 +31158,6 @@ msgstr "" #~ msgid "Displays current viewport FPS in the top-right corner." #~ msgstr "Exibe o FPS atual da janela de visualização no canto superior direito." -# AI Translated -#~ msgid "Publish 3MF Wiki" -#~ msgstr "Documentação de Publicar 3MF" - -# AI Translated -#~ msgid "Publish 3MF Video Guide" -#~ msgstr "Guia em vídeo de Publicar 3MF" - #~ msgid "Toolbar" #~ msgstr "Barra de Ferramentas" @@ -32722,18 +31242,6 @@ msgstr "" #~ msgid " minimum drying temperature is " #~ msgstr " temperatura mínima de secagem é " -# AI Translated -#~ msgid "needs" -#~ msgstr "precisa de" - -# AI Translated -#~ msgid "not enabled" -#~ msgstr "não ativado" - -# AI Translated -#~ msgid "material not published" -#~ msgstr "material não publicado" - #~ msgid "Select the language" #~ msgstr "Selecione o idioma" @@ -32918,7 +31426,7 @@ msgstr "" #~ msgstr "O conteúdo da predefinição é muito grande para ser sincronizado com a nuvem (excede 1 MB). Reduza o tamanho da predefinição removendo configurações personalizadas ou use-o apenas localmente." #~ msgid "Enable adaptive pressure advance for overhangs (beta)" -#~ msgstr "Habilitar pressure advance adaptativo para saliências (beta)" +#~ msgstr "Habilitar Pressure Advance adaptativo para saliências (beta)" #~ msgid "Pressure advance for bridges" #~ msgstr "Pressure advance para pontes" @@ -32928,7 +31436,7 @@ msgstr "" #~ "\n" #~ "A lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this." #~ msgstr "" -#~ "Valor do pressure advance para pontes. Defina como 0 para desabilitar.\n" +#~ "Valor do Pressure Advance para pontes. Defina como 0 para desabilitar.\n" #~ "\n" #~ "Um valor de PA mais baixo ao imprimir pontes ajuda a reduzir a aparência de leve subextrusão imediatamente após as pontes. Isso é causado pela queda de pressão no bico ao imprimir no ar e um PA mais baixo ajuda a neutralizar isso." @@ -33137,7 +31645,7 @@ msgstr "" #~ msgstr "" #~ "Habilite esta opção para desacelerar a impressão em áreas onde os perímetros podem ter se curvado para cima. Por exemplo, uma desaceleração adicional será aplicada ao imprimir saliências em cantos afiados, como a parte frontal do casco Benchy, reduzindo a curvatura que se acumula por várias camadas.\n" #~ "\n" -#~ "Geralmente, é recomendável ter esta opção ativada, a menos que o resfriamento da impressora seja potente o suficiente ou a velocidade de impressão lenta o suficiente para que a curvatura do perímetro não aconteça. Se estiver imprimindo com uma alta velocidade de perímetro externo, este parâmetro pode introduzir pequenos artefatos ao desacelerar devido à grande variação nas velocidades de impressão. Se você notar artefatos, certifique-se de que seu pressure advance esteja ajustado corretamente.\n" +#~ "Geralmente, é recomendável ter esta opção ativada, a menos que o resfriamento da impressora seja potente o suficiente ou a velocidade de impressão lenta o suficiente para que a curvatura do perímetro não aconteça. Se estiver imprimindo com uma alta velocidade de perímetro externo, este parâmetro pode introduzir pequenos artefatos ao desacelerar devido à grande variação nas velocidades de impressão. Se você notar artefatos, certifique-se de que seu Pressure Advance esteja ajustado corretamente.\n" #~ "\n" #~ "Nota: quando esta opção estiver habilitada, os perímetros de saliência são tratados como saliências, o que significa que a velocidade de saliência é aplicada mesmo se o perímetro de saliência for parte de uma ponte. Por exemplo, quando os perímetros estiverem 100% salientes, sem nenhuma parede apoiando-os por baixo, a velocidade de saliência de 100% será aplicada." @@ -33424,7 +31932,7 @@ msgstr "" #~ msgstr "A posição da torre de purga ultrapassou os limites da placa de impressão e foi reposicionada para a borda válida mais próxima." #~ msgid "Enabling both precise Z height and the prime tower may cause the size of prime tower to increase. Do you still want to enable?" -#~ msgstr "Habilitar a altura Z precisa e a torre de preparação juntas pode causar o aumento de tamanho da torre de purga. Deseja habilitar mesmo assim?" +#~ msgstr "Habilitar a altura Z precisa e a torre de purga juntas pode causar o aumento de tamanho da torre de purga. Deseja habilitar mesmo assim?" #~ msgid "Missing BambuSource component registered for media playing! Please re-install BambuStudio or seek after-sales help." #~ msgstr "Componente BambuSource ausente registrado para reprodução de mídia! Reinstale o Bambu Studio ou procure ajuda pós-venda." @@ -34351,7 +32859,7 @@ msgstr "" #~ msgstr "Diâmetros de bico diferentes e diâmetros de filamento diferentes não são permitidos quando a torre de purga está ativa." #~ msgid "Ooze prevention is currently not supported with the prime tower enabled." -#~ msgstr "A prevenção de vazamento atualmente não é suportada com a torre de prepao ativa." +#~ msgstr "A prevenção de vazamento atualmente não é suportada com a torre de purga ativa." #~ msgid "Interlocking depth of a segmented region. Zero disables this feature." #~ msgstr "Profundidade de intertravamento de uma região segmentada. Zero desativa essa funcionalidade." From a379ec4a67d47328f2e52d8b6da4fd7c00ed6027 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Mon, 12 Oct 2026 19:36:45 -0500 Subject: [PATCH 028/137] ci(macOS): retry stapler staple after notarization (#16424) stapler fetches the notarization ticket from Apple's CloudKit server, and a dropped connection there (NSURLError -1005, exit 68) failed the whole macOS universal job twice on 2026-10-12, after notarization had already been accepted. Rerunning the job passed, but repeats the full build and both notarizations. Wrap both stapler calls in the existing retry helper already used for hdiutil in this step. --- .github/workflows/build_orca.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index f29d7f0cc6..b1955126da 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -341,12 +341,12 @@ jobs: # Notarize main DMG xcrun notarytool submit "OrcaSlicer_Mac_universal_${{ env.ver }}.dmg" --apple-id "${{ secrets.APPLE_DEV_ACCOUNT }}" --team-id "${{ secrets.TEAM_ID }}" --password "${{ secrets.APP_PWD }}" --wait - xcrun stapler staple OrcaSlicer_Mac_universal_${{ env.ver }}.dmg + retry xcrun stapler staple OrcaSlicer_Mac_universal_${{ env.ver }}.dmg # Notarize profile validator DMG if it exists if [ -f "OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg" ]; then xcrun notarytool submit "OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg" --apple-id "${{ secrets.APPLE_DEV_ACCOUNT }}" --team-id "${{ secrets.TEAM_ID }}" --password "${{ secrets.APP_PWD }}" --wait - xcrun stapler staple OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg + retry xcrun stapler staple OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg fi - name: Create DMG without notary From 075b03975f066199e4104ae0bc681577fceef6dd Mon Sep 17 00:00:00 2001 From: HMITCHR <265609730+HMITCHR@users.noreply.github.com> Date: Mon, 12 Oct 2026 18:55:02 -0600 Subject: [PATCH 029/137] Read the initial filament start G-code through get_at() (#16080) A filament_start_gcode list shorter than the filament count made the Bambu start-of-export path throw std::out_of_range. Use get_at() like the other filament_start_gcode reads, and add a regression test. --- src/libslic3r/GCode.cpp | 2 +- tests/fff_print/test_gcodewriter.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index b79a386324..f423681c9d 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -4262,7 +4262,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato config.set_key_value("nozzle_diameter_at_nozzle_id", new ConfigOptionFloats(get_nozzle_diameters_by_nozzle_id(group_result.get()))); config.set_key_value("nozzle_volume_types", new ConfigOptionStrings(get_nozzle_volume_types_by_nozzle_id(group_result.get()))); config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index)); - std::string filament_start_gcode = this->placeholder_parser_process("filament_start_gcode", print.config().filament_start_gcode.values.at(initial_non_support_extruder_id), initial_non_support_extruder_id,&config); + std::string filament_start_gcode = this->placeholder_parser_process("filament_start_gcode", print.config().filament_start_gcode.get_at(initial_non_support_extruder_id), initial_non_support_extruder_id,&config); file.writeln(filament_start_gcode); // Mark the first filament used in print. Multi-nozzle printers (H2C) get ";VT%d H%d" where // H = dynamic ? nozzle_id : -1; existing single-nozzle printers keep the bare ";VT%d" so their diff --git a/tests/fff_print/test_gcodewriter.cpp b/tests/fff_print/test_gcodewriter.cpp index 170dfabae3..d491527db6 100644 --- a/tests/fff_print/test_gcodewriter.cpp +++ b/tests/fff_print/test_gcodewriter.cpp @@ -1748,3 +1748,29 @@ TEST_CASE("Percent accelerations resolve against the option they are a percentag REQUIRE(accelerations_by_role[role_name] == std::set{ value }); } } + +TEST_CASE("Initial filament start G-code tolerates a list shorter than the filament count", "[GCodeWriter]") +{ + // Two filaments but only one filament_start_gcode entry, and the only object prints on + // filament 2, so the BBL export starts on a filament past the end of the list. + DynamicPrintConfig config = multifilament_config(2); + config.set_key_value("filament_start_gcode", new ConfigOptionStrings({"; filament start"})); + + Model model; + auto *obj = model.add_object(); + obj->add_volume(cube(20)); + obj->add_instance(); + obj->config.set_key_value("extruder", new ConfigOptionInt(2)); + + Print print; + print.is_BBL_printer() = true; + arrange_objects_on_test_bed(model, config); + for (auto *mo : model.objects) { + mo->ensure_on_bed(); + print.auto_assign_extruders(mo); + } + print.apply(model, config); + print.validate(); + + REQUIRE_NOTHROW(Slic3r::Test::gcode(print)); +} From 6d35ff6b9a75a0a1fd6e06da29d0e882892c6226 Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Mon, 12 Oct 2026 21:59:17 -0300 Subject: [PATCH 030/137] Rewrite Fix Model on CGAL 6.2, fix Split to parts, remove Win10 SDK leftovers (#16366) * Add CGAL-based mesh repair, drop Netfabb remnants Add repair_mesh() in MeshRepair.cpp, a CGAL-based repair that replaces MeshBoolean::cgal::repair(). It welds cracks, cancels coincident triangles, fixes orientation, fills holes (including planar annular regions), removes local self-intersections, and unites crossing shells with libigl's exact boolean while following the nonzero winding rule used by slicing. FixModelByCgal now repairs each volume in place without splitting it into parts, and reports whether the mesh was modified so unchanged meshes keep their painting and ids. The texture import repair prompt no longer depends on the Windows SDK, and the FIX_THROUGH_CGAL_ALWAYS conditionals are removed. The commented-out Netfabb/WIN10SDK build code is deleted. libslic3r_cgal now builds with CGAL_LINKED_WITH_TBB and links TBB. Add docs/HLSD/mesh-repair.md and unit tests in test_mesh_repair.cpp. * Parallelize repair while preserving separate shells Repair connected mesh units and shells independently in parallel, keep crossing shells separate, and limit self-intersection remeshing to local defects. Update mesh-repair documentation and tests for the revised behavior. * Make mesh repair deterministic and report its progress Flags written from parallel loops were std::vector, whose neighbouring bits share a word, so shells could be kept or dropped at random; they are now std::vector. Holes of up to 100 edges are filled with the search over all triangles: the search restricted to a 3D Delaunay triangulation picks between equally good fills differently from run to run. Shells of fewer than four faces are dropped, as the volumes of two triangles back to back need not cancel exactly, and a shell that self-intersection removal changed is split again so the pieces it cut off are dropped too. repair_mesh() takes a progress callback in place of the cancel callback, and Fix Model reports each stage. The object's bounding box is now invalidated even when a cancel or an error stops the repair after some volumes were replaced. The edge-use sort, union-find and box-overlap code shared by several stages is factored out, the topology analysed for welding is reused to build the work units, the orientation pass checks only the edges it cut, and the output is written from the shells without joining them first. * Fix Split to parts crashing on flat pieces and staying offered after a repair ModelVolume::split() added every piece to the object and then deleted the pieces without a convex hull. When the first piece was flat, as often in a triangle soup, that deleted the volume being split while split() and its caller kept using it. A part made only of flat pieces lost all its volumes, and a soup added thousands of pieces, saving a backup of the object for each one it deleted. Pieces without a convex hull are now dropped before any joins the object, the volume being split keeps the first remaining piece, and a part with no solid piece is left whole. Other parts of the object without a convex hull are no longer deleted as a side effect. ModelVolume caches whether its mesh can be split, and set_mesh() kept the cached value, so after Fix Model, Simplify or Emboss replaced a mesh, Split to parts could still be offered for a single piece. set_mesh() and reset_mesh() now clear the cache. * Import STEP surface models with Split compound enabled Splitting a compound kept only its solids, so a surface model, which OCCT reads as a compound of loose faces, gave nothing to mesh and the import failed with "Meshing of a model file failed or no valid shape". Each shell outside a solid now becomes a part too, and loose faces stay together as one part, as they do without splitting. * Add Fix All for plates and re-enable --repair on the command line ModelVolume::repair() applies repair_mesh() to a part and replaces the mesh only when the repair changed it. Fix Model, the new Fix All and Fix All Plates items of the plate context menu, and the command line's --repair option, which had been commented out since the Win10 SDK repair was dropped, all use it. With Keep painted feature after mesh change off, Fix Model cleared the painting of every part of an object before repairing. Now only a part whose mesh changes loses its painting, so fixing a whole project does not wipe it. The notification counts the models that needed no repair instead of listing them as repaired, and objects that did not change are not refreshed. --- .github/workflows/build_orca.yml | 4 - CMakeLists.txt | 41 - docs/HLSD/mesh-repair.md | 135 ++ src/OrcaSlicer.cpp | 17 +- src/libslic3r/CMakeLists.txt | 5 +- src/libslic3r/Format/STEP.cpp | 20 +- src/libslic3r/MeshBoolean.cpp | 88 -- src/libslic3r/MeshBoolean.hpp | 3 - src/libslic3r/MeshRepair.cpp | 1215 +++++++++++++++++ src/libslic3r/MeshRepair.hpp | 28 + src/libslic3r/Model.cpp | 61 +- src/libslic3r/Model.hpp | 18 +- src/libslic3r/PrintConfig.cpp | 7 +- .../TextureToColor/TextureToColor.cpp | 6 +- src/slic3r/GUI/GUI_Factories.cpp | 10 + src/slic3r/GUI/GUI_ObjectList.cpp | 120 +- src/slic3r/GUI/GUI_ObjectList.hpp | 6 +- src/slic3r/GUI/Plater.cpp | 35 +- src/slic3r/GUI/Plater.hpp | 1 + src/slic3r/GUI/TextureImportDialog.cpp | 43 +- src/slic3r/Utils/FixModelByCgal.cpp | 245 +--- src/slic3r/Utils/FixModelByCgal.hpp | 5 +- tests/data/surface_model_geometric_set.step | 35 + tests/libslic3r/CMakeLists.txt | 1 + tests/libslic3r/test_mesh_repair.cpp | 255 ++++ tests/libslic3r/test_model.cpp | 103 ++ tests/libslic3r/test_step.cpp | 21 + 27 files changed, 2053 insertions(+), 475 deletions(-) create mode 100644 docs/HLSD/mesh-repair.md create mode 100644 src/libslic3r/MeshRepair.cpp create mode 100644 src/libslic3r/MeshRepair.hpp create mode 100644 tests/data/surface_model_geometric_set.step create mode 100644 tests/libslic3r/test_mesh_repair.cpp diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index b1955126da..e49e157358 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -460,10 +460,6 @@ jobs: - name: Build slicer Win if: runner.os == 'Windows' working-directory: ${{ github.workspace }} - # Orca: Removed Netfabb STL fixing service support in favor of CGAL. - # env: - # WindowsSdkDir: 'C:\Program Files (x86)\Windows Kits\10\' - # WindowsSDKVersion: '10.0.26100.0\' # --tests builds the unit tests too; the unit_tests_windows_* jobs run them. run: | # cache-path is the install directory inside the deps build directory. diff --git a/CMakeLists.txt b/CMakeLists.txt index a208c5e7a2..7f1586f222 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -497,47 +497,6 @@ endif() # Once we get rid of Perl and libslic3r is linked statically, we can get rid of -fPIC set(CMAKE_POSITION_INDEPENDENT_CODE ON) -# WIN10SDK_PATH is used to point CMake to the WIN10 SDK installation directory. -# We pick it from environment if it is not defined in another way -# ORCA: Removed Netfabb STL fixing service support in favor of CGAL. -# if(WIN32) -# if(NOT DEFINED WIN10SDK_PATH) -# if(DEFINED ENV{WIN10SDK_PATH}) -# set(WIN10SDK_PATH "$ENV{WIN10SDK_PATH}") -# endif() -# endif() -# if(DEFINED WIN10SDK_PATH) -# #BBS: modify win10sdk_path -# if (EXISTS "${WIN10SDK_PATH}/winrt/windows.graphics.printing3d.h") -# set(WIN10SDK_INCLUDE_PATH "${WIN10SDK_PATH}") -# else() -# message("WIN10SDK_PATH is invalid: ${WIN10SDK_PATH}") -# message("${WIN10SDK_PATH}/winrt/windows.graphics.printing3d.h was not found") -# message("STL fixing by the Netfabb service will not be compiled") -# unset(WIN10SDK_PATH) -# endif() -# else() -# # Try to use the default Windows 10 SDK path. -# if (DEFINED ENV{WindowsSdkDir} AND DEFINED ENV{WindowsSDKVersion}) -# set(WIN10SDK_INCLUDE_PATH "$ENV{WindowsSdkDir}/Include/$ENV{WindowsSDKVersion}") -# else () -# set(WIN10SDK_INCLUDE_PATH "C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0") -# endif () -# if (NOT EXISTS "${WIN10SDK_INCLUDE_PATH}/winrt/windows.graphics.printing3d.h") -# message("${WIN10SDK_INCLUDE_PATH}/winrt/windows.graphics.printing3d.h was not found") -# message("STL fixing by the Netfabb service will not be compiled") -# unset(WIN10SDK_INCLUDE_PATH) -# endif() -# endif() -# if(WIN10SDK_INCLUDE_PATH) -# message("Building with Win10 Netfabb STL fixing service support") -# add_definitions(-DHAS_WIN10SDK) -# include_directories(SYSTEM "${WIN10SDK_INCLUDE_PATH}") -# else() -# message("Building without Win10 Netfabb STL fixing service support") -# endif() -# endif() - if (APPLE) message("OS X SDK Path: ${CMAKE_OSX_SYSROOT}") if (CMAKE_OSX_DEPLOYMENT_TARGET) diff --git a/docs/HLSD/mesh-repair.md b/docs/HLSD/mesh-repair.md new file mode 100644 index 0000000000..145c904769 --- /dev/null +++ b/docs/HLSD/mesh-repair.md @@ -0,0 +1,135 @@ +# Mesh repair — High Level Design + +## Purpose and scope + +Mesh repair turns a broken triangle mesh into closed, outward oriented shells that bound a solid, so that the +mesh slices predictably and the other mesh tools (booleans, cut, painting) get valid input. It runs on demand: +the *Fix Model* command of the context menu of an object or part and of the warning icon in the object list, *Fix +All* and *Fix All Plates* in the context menu of a plate, the prompt the Cut tool shows when a cut leaves open edges, +the *Repair and import* choice of texture import, and the `--repair` option of the command line. It is built on CGAL +and is the only repair the application has, on every platform. + +`repair_mesh()` in `src/libslic3r/MeshRepair.cpp` does the work on one `TriangleMesh`, and `ModelVolume::repair()` +applies it to a part: it replaces the mesh only when the repair changed it, and remaps or drops the painting of a +replaced mesh. The GUI side, `fix_model_with_cgal_gui()` in `src/slic3r/Utils/FixModelByCgal.cpp`, runs it on a +worker thread for each volume of an object, or for one volume, behind a progress dialog. `repair_mesh()` reports its +progress between stages through a callback, which cancels the repair by throwing. + +## What the repaired mesh is + +The repair keeps what the slicer would print from the input. The slicer fills a layer where the winding number of +the input surface is not zero (`MeshSlicingParams::SlicingMode::Regular` uses Clipper's nonzero fill rule), so: + +- Shells crossing each other print as their union. The repair keeps them as separate shells, as the parts of an + object are kept, and makes each of them an outward oriented solid. +- A shell inside a solid that is oriented like it adds nothing, and the repair removes it. +- A shell inside a solid that is oriented inward is a cavity, and stays one. +- A whole mesh turned inside out prints as a solid, and the repair turns it outward. + +On top of that, it closes holes and cracks, gives inconsistently oriented triangles the orientation of their +neighbours, drops degenerate, duplicate and stray flat geometry, and removes small self-intersections inside a shell, +such as slivers and folds. Where none of this applies, it reports the mesh as unmodified and the caller keeps the +original mesh, its painting and its object id. + +A volume is repaired in place and is never split into several parts: splitting by connectivity would turn a cavity +into a separate solid part and fill it. Each solid of the result is a shell of its own, so *Split to parts* still +separates them. Open pieces of the input whose borders meet exactly, which are pieces of one surface rather than +solids, come out as the one shell they form. + +## Pipeline + +The input is treated as a triangle soup. Every stage after the first only runs on what the previous ones could +not settle, so a valid mesh passes through quickly. + +### Valid parts first + +Parts of the input that are connected by vertex indices and are already closed, consistently oriented 2-manifolds +skip the soup stages and go straight to the shell stages. Merging their points with coincident points of other +parts would only make non-manifold junctions out of solids that touch, for example parts of an assembly exported +together or voxels written as separate cubes. + +### Soup clean-up + +The rest of the soup has its coincident points merged. Triangles with repeated corners are dropped. Coincident +triangles of opposite orientation are a wall between two solids touching face to face, so they cancel in pairs; +of the remaining copies of a triangle one is kept. A connected region that would vanish entirely through +cancelling is a two-sided export instead (every face written in both orientations), and keeps one copy of each +triangle. + +Open edges then get their vertices welded within a tolerance of 1e-4 of the bounding box diagonal, which closes the +cracks some exporters leave between triangles that should share corners. A vertex is never welded further than a +quarter of its shortest edge, so welding cannot collapse fine detail. A soup that stays mostly open after welding has +cracks wider than that tolerance, and is welded again with ten and then a hundred times the tolerance. + +### Work units + +The soup is cut into units repaired independently and in parallel: its connected parts, except that open parts whose +bounding boxes touch share a unit, so that cracks and T-junctions between separately exported patches still close. + +### Building the mesh + +A unit whose edges are each shared by at most two triangles, running in opposite directions, and whose vertices each +have a single fan of triangles, becomes a `Surface_mesh` directly. Any other unit is oriented first. Triangles are +flipped so that neighbours across an edge shared by two of them agree, each part keeping the orientation the +majority of its area had, which keeps inward oriented cavities inward. Edges where that is impossible or that more +than two triangles share are cut, and each fan of triangles around a vertex gets its own copy of the vertex. If that +still leaves an invalid mesh, CGAL's `orient_polygon_soup()` orients the unit instead, and the parts it flipped +against their majority are reversed back. The linear pass exists because `orient_polygon_soup()` is several times +slower on large soups that need only a few fixes. + +### Closing + +Compatible borders are stitched, parts that can be stitched once reversed are merged, and borders still open are +snapped onto each other within the weld tolerance, which closes T-junctions. Exactly degenerate faces are removed. + +Holes are filled last. Planar border loops that face each other in one plane, one inside the other, bound a single +region, such as a missing annulus at the end of a tube or a cap with features standing on it. Such a group is +triangulated at once with a 2D constrained Delaunay triangulation that fills only the faces at odd nesting depth, +so the openings inside the region stay open. The patch is used only if it closes every loop with the orientation +of the triangles around it. Every other loop is filled on its own with `triangulate_hole()`, which uses a 2D +constrained Delaunay triangulation when the loop is planar. Otherwise it searches the best triangulation among all +triangles over the loop for loops of up to 100 edges, and among the triangles of a 3D Delaunay triangulation for +longer ones, as the full search is cubic in the length of the loop. Beyond 200 edges the full search is not even +used as a fallback, and a fan around the loop's centroid closes a loop nothing else could. + +The closed unit is split into its shells. The largest stays in place and the others are copied out, as converting +the whole mesh again costs seconds on large models. + +### Shells + +The shells of all units, together with the valid parts set aside at the start, are handled independently and in +parallel. Shells enclosing no volume, which hole filling makes out of stray flat patches, are dropped. + +Self-intersections inside a shell are removed locally with `experimental::remove_self_intersections()`, which +remeshes the region around them. It is used only for local defects: a shell whose intersections involve more than +5 % of its faces is left as it is, and a result that changes the enclosed volume by more than 0.1 % is undone. On +heavily overlapping ornamental models the remeshing otherwise cuts parts down to slivers, while on genuine defects +it changes the volume by thousandths of a percent. Overlaps left in place slice correctly. Remeshing can cut +small pieces off a shell, so a shell it changed is split again and its pieces enclosing no volume are dropped. + +Shells crossing others are found through their bounding boxes and an AABB tree per shell, and are made outward +oriented solids. For every other shell the winding number just outside it is summed from the orientation of the +shells containing it, tested from a point on its largest face. The shell bounds the solid only if the winding +number is zero on exactly one of its sides; it is then oriented so that the solid is inside, or dropped otherwise. + +Crossing shells are not united. Slicing unites them anyway, uniting them exactly costs tens of seconds on models +made of many overlapping pieces, and it would fuse parts that *Split to parts* should keep apart. + +## Robustness + +The repair avoids `experimental::autorefine_and_remove_self_intersections()` and corefinement, which can crash on +messy input, and uses only steps whose failures it can detect. A step that fails keeps its input. CGAL precondition +failures surface as `repair_mesh()` returning false with the message as the error. The output is written in float, +as every mesh in the application is. + +The result does not depend on thread scheduling. `libslic3r_cgal` is built with `CGAL_LINKED_WITH_TBB`. Units and +shells are processed in parallel, but each on its own data, and their results are gathered in a fixed order; +sorts compare complete keys, and the detected self-intersections are put in order before they are used. Snapping +stays sequential, as its parallel version gives different results from run to run. Holes are filled with the full +search wherever it is affordable, because the search among Delaunay triangles can choose between equally good fills +differently from run to run, so only non-planar holes of more than 100 edges may still vary. On some inputs +`experimental::remove_self_intersections()` itself places a few vertices differently from run to run. + +## Verification + +`tests/libslic3r/test_mesh_repair.cpp` covers each kind of defect above on small meshes with known volumes. diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 0d0aea0954..2a158f4b12 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -99,6 +99,7 @@ #include "libslic3r/Preset.hpp" #include "libslic3r/Geometry.hpp" #include "libslic3r/GCode.hpp" +#include "libslic3r/MeshRepair.hpp" #include "libslic3r/Model.hpp" #include "libslic3r/ModelArrange.hpp" #include "libslic3r/Platform.hpp" @@ -5130,9 +5131,19 @@ int CLI::run(int argc, char **argv) } } } else if (opt_key == "repair") { - // Models are repaired by default. - //for (auto &model : m_models) - // model.repair(); + if (m_config.opt_bool(opt_key)) + for (Model &model : m_models) + for (ModelObject *object : model.objects) { + for (ModelVolume *volume : object->volumes) { + MeshRepairStats stats; + std::string error; + if (!volume->repair(true, &stats, &error)) + BOOST_LOG_TRIVIAL(warning) << "repair of " << object->name << " / " << volume->name << " failed: " << error; + else if (stats.modified) + BOOST_LOG_TRIVIAL(info) << "repaired " << object->name << " / " << volume->name; + } + object->invalidate_bounding_box(); + } } else { boost::nowide::cerr << "error: option not implemented yet: " << opt_key << std::endl; record_exit_reson(outfile_dir, CLI_UNSUPPORTED_OPERATION, 0, cli_errors[CLI_UNSUPPORTED_OPERATION], sliced_info); diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 1a7080d5c7..afa3b61bc1 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -625,6 +625,7 @@ add_library(libslic3r_cgal STATIC CutSurface.hpp CutSurface.cpp IntersectionPoints.hpp IntersectionPoints.cpp MeshBoolean.hpp MeshBoolean.cpp + MeshRepair.hpp MeshRepair.cpp TryCatchSignal.hpp TryCatchSignal.cpp Triangulation.hpp Triangulation.cpp ) @@ -652,7 +653,9 @@ if (IS_CLANG_CL) target_compile_options(libslic3r_cgal PRIVATE -Wno-overriding-option) endif () -target_link_libraries(libslic3r_cgal PRIVATE ${_cgal_tgt} admesh libigl mcut boost_libs) +# Lets CGAL algorithms given CGAL::Parallel_if_available_tag run on TBB. +target_compile_definitions(libslic3r_cgal PRIVATE CGAL_LINKED_WITH_TBB) +target_link_libraries(libslic3r_cgal PRIVATE ${_cgal_tgt} admesh libigl mcut boost_libs TBB::tbb) if (MSVC AND "${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") # 32 bit MSVC workaround target_compile_definitions(libslic3r_cgal PRIVATE CGAL_DO_NOT_USE_MPZF) diff --git a/src/libslic3r/Format/STEP.cpp b/src/libslic3r/Format/STEP.cpp index 962c4cffb9..4f40093c73 100644 --- a/src/libslic3r/Format/STEP.cpp +++ b/src/libslic3r/Format/STEP.cpp @@ -236,19 +236,29 @@ static void getNamedSolids(const TopLoc_Location& location, int i = 0; switch (shape_type) { case TopAbs_COMPOUND: - if (!isSplitCompound) { - namedSolids.emplace_back(TopoDS::Compound(transform.Shape()), fullName); - break; - } case TopAbs_COMPSOLID: if (!isSplitCompound) { - namedSolids.emplace_back(TopoDS::CompSolid(transform.Shape()), fullName); + namedSolids.emplace_back(transform.Shape(), fullName); } else { for (explorer.Init(transform.Shape(), TopAbs_SOLID); explorer.More(); explorer.Next()) { i++; const TopoDS_Shape& currentShape = explorer.Current(); namedSolids.emplace_back(TopoDS::Solid(currentShape), fullName + "-SOLID-" + std::to_string(i)); } + // Surface models have no solids: each shell outside a solid is a part, and loose faces stay together. + i = 0; + for (explorer.Init(transform.Shape(), TopAbs_SHELL, TopAbs_SOLID); explorer.More(); explorer.Next()) + namedSolids.emplace_back(explorer.Current(), fullName + "-SHELL-" + std::to_string(++i)); + TopoDS_Compound loose_faces; + TopoDS_Builder builder; + builder.MakeCompound(loose_faces); + bool has_loose_faces = false; + for (explorer.Init(transform.Shape(), TopAbs_FACE, TopAbs_SHELL); explorer.More(); explorer.Next()) { + builder.Add(loose_faces, explorer.Current()); + has_loose_faces = true; + } + if (has_loose_faces) + namedSolids.emplace_back(loose_faces, fullName); } break; case TopAbs_SOLID: diff --git a/src/libslic3r/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp index 37e3c84b3f..074eff3121 100644 --- a/src/libslic3r/MeshBoolean.cpp +++ b/src/libslic3r/MeshBoolean.cpp @@ -29,8 +29,6 @@ #include #include #include -#include -#include #include #include #include @@ -50,7 +48,6 @@ #include #include #include -#include #include // BBS: for segment #include @@ -658,91 +655,6 @@ bool empty(const CGALMesh &mesh) return mesh.m.is_empty(); } -bool repair(TriangleMesh& mesh, RepairedMeshErrors* repaired_errors, std::string* error) -{ - namespace PMP = CGAL::Polygon_mesh_processing; - - if (mesh.empty()) - return true; - - try { - // 1) Convert to polygon soup - std::vector<_EpicMesh::Point> points; - std::vector> polygons; - - points.reserve(mesh.its.vertices.size()); - polygons.reserve(mesh.its.indices.size()); - - for (const auto& v : mesh.its.vertices) - points.emplace_back(v.x(), v.y(), v.z()); - - for (const auto& f : mesh.its.indices) - polygons.push_back({size_t(f[0]), size_t(f[1]), size_t(f[2])}); - - // 2) Aggressive soup cleanup - PMP::repair_polygon_soup(points, polygons); - - // 3) Convert soup → mesh - _EpicMesh cgal_mesh; - PMP::polygon_soup_to_polygon_mesh(points, polygons, cgal_mesh); - - // 4) Remove degenerate geometry - PMP::remove_degenerate_faces(cgal_mesh); - PMP::remove_isolated_vertices(cgal_mesh); - - // 5) Fix remaining non-manifold vertices - PMP::duplicate_non_manifold_vertices(cgal_mesh); - - // 6) Boolean union (keeps only outer shell) - _EpicMesh tmp; - if (PMP::corefine_and_compute_union(cgal_mesh, cgal_mesh, tmp)) { - cgal_mesh = std::move(tmp); - } - // If it fails, continue anyway with previous mesh - - // 7) Fill holes - if (!CGAL::is_closed(cgal_mesh)) { - using halfedge_descriptor = boost::graph_traits<_EpicMesh>::halfedge_descriptor; - - std::vector borders; - CGAL::extract_boundary_cycles(cgal_mesh, std::back_inserter(borders)); - - for (halfedge_descriptor h : borders) { - PMP::triangulate_and_refine_hole(cgal_mesh, h); - } - } - - // 8) Final validity check - if (!CGAL::is_closed(cgal_mesh)) { - if (error) - *error = "Repair failed: mesh still open after hole filling."; - return false; - } - - // 9) Ensure outward orientation - if (!PMP::does_bound_a_volume(cgal_mesh)) - PMP::orient_to_bound_a_volume(cgal_mesh); - - // 10) Convert back - indexed_triangle_set its = cgal_to_indexed_triangle_set(cgal_mesh); - - RepairedMeshErrors errs{}; - errs.facets_removed = 0; - errs.edges_fixed = 0; - - mesh = TriangleMesh(std::move(its), errs); - - if (repaired_errors) - *repaired_errors = errs; - - return true; - } catch (const std::exception& e) { - if (error) - *error = e.what(); - return false; - } -} - CGALMeshPtr clone(const CGALMesh &m) { return CGALMeshPtr{new CGALMesh{m}}; diff --git a/src/libslic3r/MeshBoolean.hpp b/src/libslic3r/MeshBoolean.hpp index 6ced9b4646..b229a4e724 100644 --- a/src/libslic3r/MeshBoolean.hpp +++ b/src/libslic3r/MeshBoolean.hpp @@ -77,9 +77,6 @@ TriangleMesh merge(std::vector meshes); bool does_bound_a_volume(const CGALMesh &mesh); bool empty(const CGALMesh &mesh); -// Repair a mesh using CGAL. Returns true on success. Optionally returns a summary of repairs and an error string. -bool repair(TriangleMesh &mesh, RepairedMeshErrors *repaired_errors = nullptr, std::string *error = nullptr); - // Real UV unwrap of an open mesh patch via CGAL's LSCM (Least Squares Conformal Maps) surface // parameterization. Returns one UV coordinate per input vertex (same indexing as `mesh.vertices`), // or nullopt if `mesh` isn't a single topological disk -- LSCM needs exactly one connected diff --git a/src/libslic3r/MeshRepair.cpp b/src/libslic3r/MeshRepair.cpp new file mode 100644 index 0000000000..df76836109 --- /dev/null +++ b/src/libslic3r/MeshRepair.cpp @@ -0,0 +1,1215 @@ +#include "MeshRepair.hpp" + +#include "I18N.hpp" +#include "TriangleMesh.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Slic3r { + +namespace { + +namespace PMP = CGAL::Polygon_mesh_processing; + +using Kernel = CGAL::Exact_predicates_inexact_constructions_kernel; +using Point = Kernel::Point_3; +using Vector = Kernel::Vector_3; +using Mesh = CGAL::Surface_mesh; +using Vertex = Mesh::Vertex_index; +using Halfedge = Mesh::Halfedge_index; +using Face = Mesh::Face_index; +using Triangle = std::array; +using Tree = CGAL::AABB_tree>>; +using Box = CGAL::Box_intersection_d::Box_with_info_d; + +constexpr std::size_t NONE = std::size_t(-1); + +class UnionFind +{ +public: + explicit UnionFind(std::size_t n) : m_parent(n) { std::iota(m_parent.begin(), m_parent.end(), std::size_t(0)); } + + std::size_t find(std::size_t i) + { + while (m_parent[i] != i) + i = m_parent[i] = m_parent[m_parent[i]]; + return i; + } + + // The smaller index becomes the root, so results do not depend on the order of unions. + void unite(std::size_t a, std::size_t b) + { + a = find(a); + b = find(b); + if (a != b) + m_parent[std::max(a, b)] = std::min(a, b); + } + +private: + std::vector m_parent; +}; + +template void erase_marked(Container &items, const Mask &marked) +{ + std::size_t out = 0; + for (std::size_t i = 0; i < items.size(); ++i) + if (!marked[i]) + items[out++] = std::move(items[i]); + items.resize(out); +} + +template void parallel_for_each(std::size_t n, Fn &&fn) +{ + tbb::parallel_for(tbb::blocked_range(0, n, 1), [&fn](const tbb::blocked_range &range) { + for (std::size_t i = range.begin(); i < range.end(); ++i) + fn(i); + }); +} + +// Triangles sharing a vertex belong to one part. +UnionFind connect_vertices(std::size_t num_points, const std::vector &triangles) +{ + UnionFind parts(num_points); + for (const Triangle &t : triangles) { + parts.unite(t[0], t[1]); + parts.unite(t[0], t[2]); + } + return parts; +} + +bool bbox_contains(const CGAL::Bbox_3 &outer, const CGAL::Bbox_3 &inner, double tolerance = 0.) +{ + return outer.xmin() - tolerance <= inner.xmin() && outer.ymin() - tolerance <= inner.ymin() && outer.zmin() - tolerance <= inner.zmin() && + outer.xmax() + tolerance >= inner.xmax() && outer.ymax() + tolerance >= inner.ymax() && outer.zmax() + tolerance >= inner.zmax(); +} + +std::vector> overlapping_boxes(std::vector &boxes) +{ + std::vector> pairs; + CGAL::box_self_intersection_d(boxes.begin(), boxes.end(), [&pairs](const Box &a, const Box &b) { + pairs.emplace_back(std::min(a.info(), b.info()), std::max(a.info(), b.info())); + }, std::ptrdiff_t(10), CGAL::Box_intersection_d::CLOSED); + std::sort(pairs.begin(), pairs.end()); + return pairs; +} + +double bbox_diagonal(const std::vector &points) +{ + CGAL::Bbox_3 bb; + for (const Point &p : points) + bb += p.bbox(); + return points.empty() ? 0. : std::sqrt(CGAL::square(bb.x_span()) + CGAL::square(bb.y_span()) + CGAL::square(bb.z_span())); +} + +// One use of an edge by a triangle: a <= b are its vertices, corner = 3 * triangle + position of the edge's first vertex. +struct EdgeUse +{ + std::size_t a, b, corner; + bool operator<(const EdgeUse &rhs) const { return std::tie(a, b, corner) < std::tie(rhs.a, rhs.b, rhs.corner); } +}; + +std::vector sorted_edge_uses(const std::vector &triangles) +{ + std::vector uses; + uses.reserve(3 * triangles.size()); + for (std::size_t f = 0; f < triangles.size(); ++f) + for (std::size_t k = 0; k < 3; ++k) { + const auto [a, b] = std::minmax(triangles[f][k], triangles[f][(k + 1) % 3]); + uses.push_back({a, b, 3 * f + k}); + } + tbb::parallel_sort(uses.begin(), uses.end()); + return uses; +} + +// Calls fn(first, last) with the range of uses of each edge. +template void for_each_edge(const std::vector &uses, Fn &&fn) +{ + for (std::size_t i = 0; i < uses.size();) { + std::size_t j = i + 1; + while (j < uses.size() && uses[j].a == uses[i].a && uses[j].b == uses[i].b) + ++j; + fn(i, j); + i = j; + } +} + +bool same_direction(const std::vector &triangles, const EdgeUse &e1, const EdgeUse &e2) +{ + return triangles[e1.corner / 3][e1.corner % 3] == triangles[e2.corner / 3][e2.corner % 3]; +} + +struct SoupTopology +{ + std::vector open_face; // on an edge used by one triangle + std::vector bad_face; // on an edge used by more than two triangles, or twice in one direction + std::vector pinched; // vertex whose triangles form several fans + std::vector border; // vertices of the edges used by one triangle + double open_fraction = 0.; +}; + +// The fans around each vertex are found by joining the corners of triangles across their shared edges. +SoupTopology analyze_topology(std::size_t num_points, const std::vector &triangles) +{ + SoupTopology topology{std::vector(triangles.size(), 0), std::vector(triangles.size(), 0), std::vector(num_points, 0)}; + const std::vector uses = sorted_edge_uses(triangles); + UnionFind fans(3 * triangles.size()); + std::size_t num_edges = 0; + for_each_edge(uses, [&](std::size_t i, std::size_t j) { + const EdgeUse &e = uses[i]; + ++num_edges; + if (j - i == 1 && e.a != e.b) { + topology.open_face[e.corner / 3] = 1; + topology.border.push_back(e.a); + topology.border.push_back(e.b); + } else if (j - i != 2 || e.a == e.b || same_direction(triangles, e, uses[i + 1])) { + for (std::size_t k = i; k < j; ++k) + topology.bad_face[uses[k].corner / 3] = 1; + } else { + const std::size_t c = e.corner, n = uses[i + 1].corner; + fans.unite(c, n - n % 3 + (n + 1) % 3); + fans.unite(c - c % 3 + (c + 1) % 3, n); + } + }); + topology.open_fraction = num_edges == 0 ? 0. : double(topology.border.size() / 2) / double(num_edges); + std::sort(topology.border.begin(), topology.border.end()); + topology.border.erase(std::unique(topology.border.begin(), topology.border.end()), topology.border.end()); + + std::vector fan_of(num_points, NONE); + for (std::size_t c = 0; c < 3 * triangles.size(); ++c) { + const std::size_t v = triangles[c / 3][c % 3], root = fans.find(c); + if (fan_of[v] == NONE) + fan_of[v] = root; + else if (fan_of[v] != root) + topology.pinched[v] = 1; + } + return topology; +} + +// orient_polygon_soup() needs resizable polygons. +void orient_with_cgal(std::vector &points, std::vector &triangles) +{ + std::vector> polygons(triangles.size()); + for (std::size_t i = 0; i < triangles.size(); ++i) + polygons[i].assign(triangles[i].begin(), triangles[i].end()); + PMP::orient_polygon_soup(points, polygons); + for (std::size_t i = 0; i < triangles.size(); ++i) + std::copy(polygons[i].begin(), polygons[i].end(), triangles[i].begin()); +} + +// The triangles of a group renumbered over the vertices they use. +void extract_group(const std::vector &points, const std::vector &triangles, const std::vector &group, + std::vector &group_points, std::vector &group_triangles) +{ + std::vector vertices; + vertices.reserve(3 * group.size()); + for (std::size_t f : group) + vertices.insert(vertices.end(), triangles[f].begin(), triangles[f].end()); + std::sort(vertices.begin(), vertices.end()); + vertices.erase(std::unique(vertices.begin(), vertices.end()), vertices.end()); + group_points.clear(); + for (std::size_t v : vertices) + group_points.push_back(points[v]); + group_triangles.clear(); + for (std::size_t f : group) { + Triangle &t = group_triangles.emplace_back(); + for (std::size_t k = 0; k < 3; ++k) + t[k] = std::lower_bound(vertices.begin(), vertices.end(), triangles[f][k]) - vertices.begin(); + } +} + +// Groups not known to be valid polygon meshes are made into ones first. +std::vector soup_to_meshes(const std::vector &points, const std::vector &triangles, + const std::vector> &groups, bool known_valid) +{ + std::vector meshes(groups.size()); + parallel_for_each(groups.size(), [&](std::size_t i) { + std::vector group_points; + std::vector group_triangles; + extract_group(points, triangles, groups[i], group_points, group_triangles); + if (!known_valid && !PMP::is_polygon_soup_a_polygon_mesh(group_triangles)) + orient_with_cgal(group_points, group_triangles); + PMP::polygon_soup_to_polygon_mesh(group_points, group_triangles, meshes[i]); + }); + return meshes; +} + +std::vector split_shells(Mesh &mesh) +{ + mesh.collect_garbage(); + std::vector face_part(mesh.number_of_faces()); + const std::size_t num_parts = PMP::connected_components(mesh, CGAL::make_property_map(face_part)); + std::vector part_size(num_parts, 0); + for (std::size_t part : face_part) + ++part_size[part]; + const std::size_t largest = std::max_element(part_size.begin(), part_size.end()) - part_size.begin(); + + // The small shells are copied out and the largest one stays in place. + std::vector shells; + if (num_parts > 1) { + std::vector points; + for (Vertex v : mesh.vertices()) + points.push_back(mesh.point(v)); + std::vector triangles; + std::vector> groups(num_parts); + for (Face f : mesh.faces()) + if (face_part[f] != largest) { + Triangle &t = triangles.emplace_back(); + std::size_t k = 0; + for (Vertex v : CGAL::vertices_around_face(mesh.halfedge(f), mesh)) + t[k++] = v; + groups[face_part[f]].push_back(triangles.size() - 1); + } + groups.erase(groups.begin() + largest); + std::vector nonmanifold; + PMP::non_manifold_vertices(mesh, std::back_inserter(nonmanifold)); + shells = soup_to_meshes(points, triangles, groups, nonmanifold.empty()); + PMP::keep_connected_components(mesh, std::vector{largest}, CGAL::make_property_map(face_part)); + mesh.collect_garbage(); + } + shells.insert(shells.begin(), std::move(mesh)); + return shells; +} + +// Valid closed parts skip the soup repair, which would weld them to coincident parts into non-manifold junctions. +std::vector take_closed_shells(const std::vector &points, std::vector &triangles) +{ + const SoupTopology topology = analyze_topology(points.size(), triangles); + UnionFind parts = connect_vertices(points.size(), triangles); + std::vector part_ok(points.size(), 1); + for (std::size_t f = 0; f < triangles.size(); ++f) + for (std::size_t v : triangles[f]) + if (topology.open_face[f] || topology.bad_face[f] || topology.pinched[v]) + part_ok[parts.find(v)] = 0; + + std::vector group_of(points.size(), NONE); + std::vector> groups; + std::vector taken(triangles.size(), 0); + for (std::size_t f = 0; f < triangles.size(); ++f) + if (const std::size_t r = parts.find(triangles[f][0]); part_ok[r]) { + if (group_of[r] == NONE) { + group_of[r] = groups.size(); + groups.emplace_back(); + } + groups[group_of[r]].push_back(f); + taken[f] = 1; + } + std::vector shells = soup_to_meshes(points, triangles, groups, true); + erase_marked(triangles, taken); + return shells; +} + +// Opposite coincident triangles cancel in pairs, unless that empties a whole region (a two-sided export). +void remove_duplicate_triangles(std::size_t num_points, std::vector &triangles) +{ + struct Entry + { + std::array key; + bool odd; + std::size_t idx; + }; + std::vector entries; + for (std::size_t i = 0; i < triangles.size(); ++i) { + const Triangle &t = triangles[i]; + const std::size_t r = std::min_element(t.begin(), t.end()) - t.begin(); + const std::size_t b = t[(r + 1) % 3], c = t[(r + 2) % 3]; + entries.push_back({{t[r], std::min(b, c), std::max(b, c)}, b > c, i}); + } + tbb::parallel_sort(entries.begin(), entries.end(), [](const Entry &l, const Entry &r) { return std::tie(l.key, l.idx) < std::tie(r.key, r.idx); }); + + std::vector remove(triangles.size(), 0); + std::vector cancelled; + for (std::size_t i = 0; i < entries.size();) { + std::size_t j = i + 1; + while (j < entries.size() && entries[j].key == entries[i].key) + ++j; + if (j - i > 1) { + std::size_t num_odd = 0; + for (std::size_t k = i; k < j; ++k) + num_odd += entries[k].odd; + const bool odd_wins = 2 * num_odd > j - i; + bool kept = 2 * num_odd == j - i; + if (kept) + cancelled.push_back(entries[i].idx); + for (std::size_t k = i; k < j; ++k) { + if (!kept && entries[k].odd == odd_wins) + kept = true; + else + remove[entries[k].idx] = 1; + } + } + i = j; + } + if (!cancelled.empty()) { + UnionFind regions = connect_vertices(num_points, triangles); + std::vector survives(num_points, 0); + for (std::size_t i = 0; i < triangles.size(); ++i) + if (!remove[i]) + survives[regions.find(triangles[i][0])] = 1; + for (std::size_t i : cancelled) + if (!survives[regions.find(triangles[i][0])]) + remove[i] = 0; + } + erase_marked(triangles, remove); +} + +void clean_soup(std::vector &points, std::vector &triangles) +{ + std::vector order(points.size()); + std::iota(order.begin(), order.end(), std::size_t(0)); + tbb::parallel_sort(order.begin(), order.end(), [&points](std::size_t a, std::size_t b) { + return std::make_tuple(points[a].x(), points[a].y(), points[a].z(), a) < std::make_tuple(points[b].x(), points[b].y(), points[b].z(), b); + }); + std::vector merged(points.size()); + for (std::size_t i = 0; i < order.size(); ++i) + merged[order[i]] = i > 0 && points[order[i]] == points[order[i - 1]] ? merged[order[i - 1]] : order[i]; + std::vector degenerate(triangles.size(), 0); + for (std::size_t f = 0; f < triangles.size(); ++f) { + Triangle &t = triangles[f]; + for (std::size_t &v : t) + v = merged[v]; + degenerate[f] = t[0] == t[1] || t[1] == t[2] || t[0] == t[2]; + } + erase_marked(triangles, degenerate); + remove_duplicate_triangles(points.size(), triangles); + + std::vector compact(points.size(), NONE); + std::vector used; + for (Triangle &t : triangles) + for (std::size_t &v : t) { + if (compact[v] == NONE) { + compact[v] = used.size(); + used.push_back(points[v]); + } + v = compact[v]; + } + points = std::move(used); +} + +// Closes cracks between open edges; no vertex moves by more than a quarter of its shortest edge. +std::size_t weld_border_vertices(const std::vector &points, std::vector &triangles, const std::vector &border, + double tolerance) +{ + if (border.empty()) + return 0; + std::vector radius(points.size(), tolerance); + for (const Triangle &t : triangles) + for (std::size_t k = 0; k < 3; ++k) { + const double r = 0.25 * std::sqrt(CGAL::squared_distance(points[t[k]], points[t[(k + 1) % 3]])); + radius[t[k]] = std::min(radius[t[k]], r); + radius[t[(k + 1) % 3]] = std::min(radius[t[(k + 1) % 3]], r); + } + + using Cell = std::array; + auto cell_of = [tolerance](const Point &p) { + return Cell{int64_t(std::floor(p.x() / tolerance)), int64_t(std::floor(p.y() / tolerance)), int64_t(std::floor(p.z() / tolerance))}; + }; + std::vector> grid; + for (std::size_t v : border) + grid.emplace_back(cell_of(points[v]), v); + tbb::parallel_sort(grid.begin(), grid.end()); + + UnionFind uf(points.size()); + for (const auto &[c, v] : grid) + for (int64_t dx = -1; dx <= 1; ++dx) + for (int64_t dy = -1; dy <= 1; ++dy) + for (int64_t dz = -1; dz <= 1; ++dz) { + const Cell n{c[0] + dx, c[1] + dy, c[2] + dz}; + for (auto it = std::lower_bound(grid.begin(), grid.end(), std::make_pair(n, std::size_t(0))); it != grid.end() && it->first == n; ++it) + if (const std::size_t u = it->second; + u < v && CGAL::squared_distance(points[u], points[v]) <= CGAL::square(std::min(radius[u], radius[v]))) + uf.unite(u, v); + } + std::size_t welded = 0; + for (std::size_t v : border) + welded += uf.find(v) != v; + if (welded > 0) + for (Triangle &t : triangles) + for (std::size_t &v : t) + v = uf.find(v); + return welded; +} + +// Orients each part as most of its area was and gives each fan its own vertex; false if the mesh is still invalid. +bool orient_soup(std::vector &points, std::vector &triangles, std::size_t &reversed_parts) +{ + const std::size_t num_faces = triangles.size(); + const std::vector uses = sorted_edge_uses(triangles); + std::vector twin(3 * num_faces, NONE); + std::vector> cut; // edges used by more than two triangles + for_each_edge(uses, [&](std::size_t i, std::size_t j) { + if (j - i == 2) { + twin[uses[i].corner] = uses[i + 1].corner; + twin[uses[i + 1].corner] = uses[i].corner; + } else if (j - i > 2) + cut.emplace_back(i, j); + }); + + std::vector flip(num_faces, -1); + std::vector part_of(num_faces); + std::vector vote; + std::vector conflict(3 * num_faces, 0); + std::vector stack; + for (std::size_t seed = 0; seed < num_faces; ++seed) { + if (flip[seed] >= 0) + continue; + const std::size_t part = vote.size(); + vote.push_back(0.); + flip[seed] = 0; + stack.push_back(seed); + while (!stack.empty()) { + const std::size_t f = stack.back(); + stack.pop_back(); + part_of[f] = part; + const Triangle &t = triangles[f]; + const double area = std::sqrt(CGAL::squared_area(points[t[0]], points[t[1]], points[t[2]])); + vote[part] += flip[f] ? -area : area; + for (std::size_t k = 0; k < 3; ++k) { + const std::size_t c = 3 * f + k, n = twin[c]; + if (n == NONE) + continue; + const std::size_t g = n / 3; + // Triangles agree when they run along their shared edge in opposite directions. + const signed char want = flip[f] ^ (t[k] == triangles[g][n % 3]); + if (flip[g] < 0) { + flip[g] = want; + stack.push_back(g); + } else if (flip[g] != want) + conflict[c] = conflict[n] = 1; + } + } + } + + // Corners keep their input vertex in original, through the flips below. + std::vector original(3 * num_faces); + std::vector part_reversed(vote.size(), 0); + for (std::size_t f = 0; f < num_faces; ++f) { + if (flip[f] != (vote[part_of[f]] < 0.)) { + std::swap(triangles[f][1], triangles[f][2]); + part_reversed[part_of[f]] = 1; + } + for (std::size_t k = 0; k < 3; ++k) + original[3 * f + k] = triangles[f][k]; + } + reversed_parts = std::count(part_reversed.begin(), part_reversed.end(), 1); + + auto corner_of = [&original](std::size_t f, std::size_t v) { return 3 * f + (original[3 * f] == v ? 0 : original[3 * f + 1] == v ? 1 : 2); }; + UnionFind fans(3 * num_faces); + for (const EdgeUse &e : uses) + if (const std::size_t n = twin[e.corner]; n != NONE && e.corner < n && !conflict[e.corner]) { + fans.unite(corner_of(e.corner / 3, e.a), corner_of(n / 3, e.a)); + fans.unite(corner_of(e.corner / 3, e.b), corner_of(n / 3, e.b)); + } + std::vector fan_vertex(3 * num_faces, NONE); + std::vector used(points.size(), 0); + for (std::size_t c = 0; c < 3 * num_faces; ++c) { + std::size_t © = fan_vertex[fans.find(c)]; + if (copy == NONE) { + const std::size_t v = original[c]; + copy = used[v] ? points.size() : v; + if (used[v]) + points.push_back(points[v]); + used[v] = 1; + } + triangles[c / 3][c % 3] = copy; + } + + // Only edges that were cut can still be shared wrongly: by more than two triangles, or twice in one direction. + for (std::size_t k = 0; k < uses.size(); ++k) + if (conflict[uses[k].corner] && uses[k].corner < twin[uses[k].corner]) + cut.emplace_back(k, k + 2); + for (const auto &[i, j] : cut) { + // Each use as its copied endpoints and whether it runs from a to b. + std::vector> copies; + for (std::size_t k = i; k < j; ++k) { + const std::size_t f = uses[k].corner / 3, ka = corner_of(f, uses[k].a) % 3, kb = corner_of(f, uses[k].b) % 3; + const auto [ca, cb] = std::minmax(triangles[f][ka], triangles[f][kb]); + copies.push_back({ca, cb, std::size_t((ka + 1) % 3 == kb)}); + } + std::sort(copies.begin(), copies.end()); + for (std::size_t k = 0; k + 1 < copies.size(); ++k) + if (copies[k][0] == copies[k + 1][0] && copies[k][1] == copies[k + 1][1] && + (copies[k][2] == copies[k + 1][2] || (k + 2 < copies.size() && copies[k + 2][0] == copies[k][0] && copies[k + 2][1] == copies[k][1]))) + return false; + } + return true; +} + +// orient_polygon_soup() orients each part arbitrarily; give it back the orientation most of its input had. +std::size_t keep_input_orientation(Mesh &mesh, const std::vector &points_before, const std::vector &triangles_before, + const std::vector &points, const std::vector &triangles) +{ + if (mesh.number_of_faces() != triangles.size()) + return 0; + auto fcc = mesh.add_property_map("f:repair_part").first; + const std::size_t num_parts = PMP::connected_components(mesh, fcc); + std::vector vote(num_parts, 0.); + std::size_t i = 0; + for (Face f : mesh.faces()) { + const Triangle &a = triangles_before[i]; + const Triangle &b = triangles[i++]; + bool same = false; + for (std::size_t r = 0; r < 3 && !same; ++r) { + same = true; + for (std::size_t k = 0; k < 3 && same; ++k) + same = points_before[a[k]] == points[b[(k + r) % 3]]; + } + vote[fcc[f]] += same ? PMP::face_area(f, mesh) : -PMP::face_area(f, mesh); + } + std::vector to_reverse; + for (Face f : mesh.faces()) + if (vote[fcc[f]] < 0.) + to_reverse.push_back(f); + mesh.remove_property_map(fcc); + if (!to_reverse.empty()) + PMP::reverse_face_orientations(to_reverse, mesh); + return std::count_if(vote.begin(), vote.end(), [](double v) { return v < 0.; }); +} + +void close_cracks(Mesh &mesh, double tolerance) +{ + PMP::merge_reversible_connected_components(mesh); + PMP::stitch_borders(mesh); + if (CGAL::is_closed(mesh)) + return; + // T-junctions, which welding cannot close. + PMP::experimental::snap_borders(mesh, CGAL::Constant_property_map(tolerance)); + PMP::stitch_borders(mesh); +} + +struct BorderLoop +{ + Halfedge halfedge; + std::vector halfedges; + Vector normal; // unit normal a face closing the loop would have + double offset = 0.; + bool planar = false; + CGAL::Bbox_3 bbox; +}; + +struct CdtFaceInfo +{ + int nesting = -1; +}; +using CdtVb = CGAL::Triangulation_vertex_base_with_info_2; +using CdtFb = CGAL::Constrained_triangulation_face_base_2>; +using Cdt = CGAL::Constrained_Delaunay_triangulation_2, CGAL::No_constraint_intersection_tag>; + +// Number of constrained edges crossed to reach each face from the outside. +void mark_nesting(Cdt &cdt) +{ + std::vector> seeds{{cdt.infinite_face(), 0}}; + while (!seeds.empty()) { + auto [seed, level] = seeds.back(); + seeds.pop_back(); + if (seed->info().nesting != -1) + continue; + seed->info().nesting = level; + std::vector queue{seed}; + while (!queue.empty()) { + Cdt::Face_handle f = queue.back(); + queue.pop_back(); + for (int i = 0; i < 3; ++i) { + Cdt::Face_handle n = f->neighbor(i); + if (n->info().nesting != -1) + continue; + if (cdt.is_constrained({f, i})) + seeds.emplace_back(n, level + 1); + else { + n->info().nesting = level; + queue.push_back(n); + } + } + } + } +} + +// Fills a planar region bounded by nested loops, such as a missing annulus, leaving its openings open. +bool fill_planar_region(Mesh &mesh, const std::vector &loops) +{ + const Vector &n = loops.front()->normal; + const Vector u = std::abs(n.x()) < 0.9 ? CGAL::cross_product(n, Vector(1, 0, 0)) : CGAL::cross_product(n, Vector(0, 1, 0)); + const Vector e1 = u / std::sqrt(u.squared_length()); + const Vector e2 = CGAL::cross_product(n, e1); + + Cdt cdt; + std::size_t num_vertices = 0; + std::set> border_edges; + try { + for (const BorderLoop *loop : loops) { + std::vector vh; + for (Halfedge h : loop->halfedges) { + const Vector p = mesh.point(mesh.source(h)) - CGAL::ORIGIN; + vh.push_back(cdt.insert(Kernel::Point_2(p * e1, p * e2))); + vh.back()->info() = mesh.source(h); + border_edges.emplace(mesh.source(h), mesh.target(h)); + } + num_vertices += vh.size(); + for (std::size_t k = 0; k < vh.size(); ++k) + cdt.insert_constraint(vh[k], vh[(k + 1) % vh.size()]); + } + } catch (const std::exception &) { + return false; + } + // Loop vertices projecting onto the same point were merged by the triangulation. + if (cdt.number_of_vertices() != num_vertices) + return false; + mark_nesting(cdt); + + std::vector> patch; + std::set> patch_edges; + for (Cdt::Face_handle f : cdt.finite_face_handles()) + if (f->info().nesting % 2 == 1) { + const std::array &t = patch.emplace_back(std::array{f->vertex(0)->info(), f->vertex(1)->info(), f->vertex(2)->info()}); + for (int k = 0; k < 3; ++k) + patch_edges.emplace(t[k], t[(k + 1) % 3]); + } + // The patch has to close every loop with the orientation of the triangles around it. + for (const auto &e : border_edges) + if (patch_edges.count(e) == 0) + return false; + + std::vector added; + for (const auto &t : patch) { + const Face f = mesh.add_face(t[0], t[1], t[2]); + if (f == Mesh::null_face()) { + for (Face a : added) + mesh.remove_face(a); + return false; + } + added.push_back(f); + } + return true; +} + +// Last resort for a loop the hole filling could not close: a fan around its centroid. +void fill_with_fan(Mesh &mesh, const BorderLoop &loop) +{ + Vector sum(0, 0, 0); + for (Halfedge h : loop.halfedges) + sum = sum + (mesh.point(mesh.source(h)) - CGAL::ORIGIN); + const Vertex c = mesh.add_vertex(CGAL::ORIGIN + sum / double(loop.halfedges.size())); + for (Halfedge h : loop.halfedges) + mesh.add_face(mesh.source(h), mesh.target(h), c); +} + +std::size_t fill_holes(Mesh &mesh, double tolerance) +{ + std::vector borders; + CGAL::extract_boundary_cycles(mesh, std::back_inserter(borders)); + std::vector loops(borders.size()); + for (std::size_t i = 0; i < borders.size(); ++i) { + BorderLoop &loop = loops[i]; + loop.halfedge = borders[i]; + Vector newell(0, 0, 0); + for (Halfedge h : CGAL::halfedges_around_face(borders[i], mesh)) { + loop.halfedges.push_back(h); + newell = newell + CGAL::cross_product(mesh.point(mesh.source(h)) - CGAL::ORIGIN, mesh.point(mesh.target(h)) - CGAL::ORIGIN); + loop.bbox += mesh.point(mesh.source(h)).bbox(); + } + if (const double len = std::sqrt(newell.squared_length()); len > 0.) { + loop.normal = newell / len; + loop.offset = (mesh.point(mesh.source(loop.halfedge)) - CGAL::ORIGIN) * loop.normal; + loop.planar = std::all_of(loop.halfedges.begin(), loop.halfedges.end(), [&](Halfedge h) { + return std::abs((mesh.point(mesh.source(h)) - CGAL::ORIGIN) * loop.normal - loop.offset) <= tolerance; + }); + } + } + + // Planar loops facing each other in the same plane, one inside the other, bound one region. + UnionFind regions(loops.size()); + std::vector grouped(loops.size(), 0); + for (std::size_t a = 0; a < loops.size(); ++a) + for (std::size_t b = 0; b < loops.size(); ++b) { + const BorderLoop &la = loops[a], &lb = loops[b]; + if (a == b || !la.planar || !lb.planar || la.normal * lb.normal > -0.99 || !bbox_contains(la.bbox, lb.bbox, tolerance)) + continue; + if (std::all_of(lb.halfedges.begin(), lb.halfedges.end(), [&](Halfedge h) { + return std::abs((mesh.point(mesh.source(h)) - CGAL::ORIGIN) * la.normal - la.offset) <= tolerance; + })) { + regions.unite(a, b); + grouped[a] = grouped[b] = 1; + } + } + std::map> groups; + for (std::size_t i = 0; i < loops.size(); ++i) + if (grouped[i]) + groups[regions.find(i)].push_back(i); + + std::size_t filled = 0; + std::vector done(loops.size(), 0); + for (auto &[root, members] : groups) { + // The outermost loop sets the orientation of the region. + auto extent = [&loops](std::size_t i) { return loops[i].bbox.x_span() + loops[i].bbox.y_span() + loops[i].bbox.z_span(); }; + std::sort(members.begin(), members.end(), [&extent](std::size_t l, std::size_t r) { return extent(l) > extent(r); }); + std::vector group; + for (std::size_t i : members) + group.push_back(&loops[i]); + if (fill_planar_region(mesh, group)) { + filled += members.size(); + for (std::size_t i : members) + done[i] = 1; + } + } + + for (std::size_t i = 0; i < loops.size(); ++i) { + if (done[i]) + continue; + ++filled; + std::vector patch; + // Searching all triangles is cubic in the loop length; the search among Delaunay ones varies from run to run. + const std::size_t size = loops[i].halfedges.size(); + PMP::triangulate_hole(mesh, loops[i].halfedge, + CGAL::parameters::use_2d_constrained_delaunay_triangulation(true) + .use_delaunay_triangulation(size > 100) + .do_not_use_cubic_algorithm(size > 200) + .face_output_iterator(std::back_inserter(patch))); + if (patch.empty() && CGAL::is_border(loops[i].halfedge, mesh)) + fill_with_fan(mesh, loops[i]); + } + return filled; +} + +double signed_volume(const Mesh &mesh) +{ + double vol = 0.; + for (Face f : mesh.faces()) { + const Halfedge h = mesh.halfedge(f); + vol += CGAL::determinant(mesh.point(mesh.source(h)) - CGAL::ORIGIN, mesh.point(mesh.target(h)) - CGAL::ORIGIN, + mesh.point(mesh.target(mesh.next(h))) - CGAL::ORIGIN); + } + return vol / 6.; +} + +// Returns the pairs removed. Widespread overlaps are left to slicing: remeshing them can cut a part down to a sliver. +std::size_t remove_local_self_intersections(Mesh &shell) +{ + std::vector> pairs; + PMP::self_intersections(shell, std::back_inserter(pairs)); + if (pairs.empty()) + return 0; + std::set faces; + for (const auto &[a, b] : pairs) { + faces.insert(a); + faces.insert(b); + } + if (20 * faces.size() > shell.number_of_faces()) + return 0; + const double volume = signed_volume(shell); + Mesh backup = shell; + try { + PMP::experimental::remove_self_intersections(faces, shell, CGAL::parameters::preserve_genus(false)); + shell.collect_garbage(); + if (CGAL::is_valid_polygon_mesh(shell) && CGAL::is_closed(shell) && std::abs(signed_volume(shell) - volume) <= 1e-3 * std::abs(volume)) + return pairs.size(); + } catch (const std::exception &) { + } + shell = std::move(backup); + return 0; +} + +bool surfaces_intersect(const Mesh &mesh, const Tree &other) +{ + for (Face f : mesh.faces()) { + const Halfedge h = mesh.halfedge(f); + if (other.do_intersect(Kernel::Triangle_3(mesh.point(mesh.source(h)), mesh.point(mesh.target(h)), mesh.point(mesh.target(mesh.next(h)))))) + return true; + } + return false; +} + +Point inner_sample(const Mesh &shell) +{ + Face best; + double best_area = -1.; + for (Face f : shell.faces()) + if (const double a = PMP::face_area(f, shell); a > best_area) { + best_area = a; + best = f; + } + const Halfedge h = shell.halfedge(best); + return CGAL::centroid(shell.point(shell.source(h)), shell.point(shell.target(h)), shell.point(shell.target(shell.next(h)))); +} + +// Orients and filters the shells by the nonzero winding rule of slicing. Crossing shells stay apart, as parts do. +void resolve_shells(std::vector &shells, MeshRepairStats &stats, const std::function &progress) +{ + const std::size_t n = shells.size(); + std::vector bbox(n); + std::vector sign(n); + std::vector boxes; + for (std::size_t i = 0; i < n; ++i) { + bbox[i] = PMP::bbox(shells[i]); + sign[i] = signed_volume(shells[i]) < 0. ? -1 : 1; + boxes.emplace_back(bbox[i], i); + } + const std::vector> overlaps = overlapping_boxes(boxes); + + std::vector> enclosing(n); + std::vector needs_tree(n, 0); + for (const auto &[a, b] : overlaps) { + needs_tree[shells[a].number_of_faces() < shells[b].number_of_faces() ? b : a] = 1; + if (bbox_contains(bbox[a], bbox[b])) + enclosing[b].push_back(a); + if (bbox_contains(bbox[b], bbox[a])) + enclosing[a].push_back(b); + } + for (const std::vector &outer : enclosing) + for (std::size_t k : outer) + needs_tree[k] = 1; + // Built before any query: an AABB tree finishes its construction lazily on the first one. + std::vector> trees(n); + parallel_for_each(n, [&](std::size_t i) { + if (needs_tree[i]) { + trees[i] = std::make_unique(shells[i].faces().begin(), shells[i].faces().end(), shells[i]); + trees[i]->build(); + } + }); + + std::vector hit(overlaps.size(), 0); + parallel_for_each(overlaps.size(), [&](std::size_t i) { + const auto [a, b] = overlaps[i]; + const bool a_smaller = shells[a].number_of_faces() < shells[b].number_of_faces(); + hit[i] = surfaces_intersect(shells[a_smaller ? a : b], *trees[a_smaller ? b : a]); + }); + std::vector crossing(n, 0); + for (std::size_t i = 0; i < overlaps.size(); ++i) + if (hit[i]) + crossing[overlaps[i].first] = crossing[overlaps[i].second] = 1; + progress(95); + + // Crossing shells are solids; any other shell must separate zero from nonzero winding. + std::vector drop(n, 0); + std::vector target(n, 1); + parallel_for_each(n, [&](std::size_t j) { + if (crossing[j]) + return; + const Point sample = inner_sample(shells[j]); + int winding = 0; + for (std::size_t k : enclosing[j]) + if (CGAL::Side_of_triangle_mesh(*trees[k])(sample) == CGAL::ON_BOUNDED_SIDE) + winding += crossing[k] ? 1 : sign[k]; + const bool solid_outside = winding != 0; + const bool solid_inside = winding + sign[j] != 0; + drop[j] = solid_outside == solid_inside; + target[j] = solid_inside ? 1 : -1; + }); + trees.clear(); + + for (std::size_t i = 0; i < n; ++i) + if (drop[i]) + ++stats.removed_shells; + else if (target[i] != sign[i]) { + PMP::reverse_face_orientations(shells[i]); + ++stats.reversed_shells; + } + erase_marked(shells, drop); +} + +// Connected parts of the soup; open parts with touching bounding boxes share a unit, so cracks between them close. +std::vector> soup_units(const std::vector &points, const std::vector &triangles, + const SoupTopology &topology, double tolerance) +{ + UnionFind parts = connect_vertices(points.size(), triangles); + std::vector part_index(points.size(), NONE); + std::vector part_of_face(triangles.size()); + std::vector part_bbox; + std::vector part_open; + for (std::size_t f = 0; f < triangles.size(); ++f) { + std::size_t &index = part_index[parts.find(triangles[f][0])]; + if (index == NONE) { + index = part_bbox.size(); + part_bbox.emplace_back(); + part_open.push_back(0); + } + part_of_face[f] = index; + for (std::size_t v : triangles[f]) + part_bbox[index] += points[v].bbox(); + part_open[index] = part_open[index] || topology.open_face[f]; + } + + std::vector boxes; + for (std::size_t i = 0; i < part_bbox.size(); ++i) + if (part_open[i]) { + const CGAL::Bbox_3 &b = part_bbox[i]; + boxes.emplace_back(CGAL::Bbox_3(b.xmin() - tolerance, b.ymin() - tolerance, b.zmin() - tolerance, b.xmax() + tolerance, + b.ymax() + tolerance, b.zmax() + tolerance), i); + } + UnionFind units(part_bbox.size()); + for (const auto &[a, b] : overlapping_boxes(boxes)) + units.unite(a, b); + + std::vector unit_index(part_bbox.size(), NONE); + std::vector> out; + for (std::size_t f = 0; f < triangles.size(); ++f) { + std::size_t &index = unit_index[units.find(part_of_face[f])]; + if (index == NONE) { + index = out.size(); + out.emplace_back(); + } + out[index].push_back(f); + } + return out; +} + +struct UnitResult +{ + std::vector shells; + std::size_t reversed = 0; + std::size_t filled = 0; + bool closed = true; +}; + +UnitResult repair_unit(const std::vector &points, const std::vector &triangles, const std::vector &faces, + const SoupTopology &topology, double tolerance) +{ + std::vector unit_points; + std::vector unit_triangles; + extract_group(points, triangles, faces, unit_points, unit_triangles); + bool oriented_manifold = true; + for (std::size_t f : faces) { + oriented_manifold = oriented_manifold && !topology.bad_face[f]; + for (std::size_t v : triangles[f]) + oriented_manifold = oriented_manifold && !topology.pinched[v]; + } + + UnitResult result; + Mesh mesh; + if (oriented_manifold) + PMP::polygon_soup_to_polygon_mesh(unit_points, unit_triangles, mesh); + else { + std::vector oriented_points = unit_points; + std::vector oriented_triangles = unit_triangles; + if (orient_soup(oriented_points, oriented_triangles, result.reversed)) + PMP::polygon_soup_to_polygon_mesh(oriented_points, oriented_triangles, mesh); + else { + const std::vector points_before = unit_points; + const std::vector triangles_before = unit_triangles; + orient_with_cgal(unit_points, unit_triangles); + PMP::polygon_soup_to_polygon_mesh(unit_points, unit_triangles, mesh); + result.reversed = keep_input_orientation(mesh, points_before, triangles_before, unit_points, unit_triangles); + } + } + + if (!CGAL::is_closed(mesh)) + close_cracks(mesh, tolerance); + PMP::remove_degenerate_faces(mesh); + if (!CGAL::is_closed(mesh)) { + // Rejoin vertices the orientation split where holes break their fan, so each gap is one loop. + PMP::merge_duplicated_vertices_in_boundary_cycles(mesh); + result.filled = fill_holes(mesh, tolerance); + PMP::remove_degenerate_faces(mesh); + } + PMP::remove_isolated_vertices(mesh); + mesh.collect_garbage(); + result.closed = CGAL::is_closed(mesh); + if (result.closed && !mesh.is_empty()) + result.shells = split_shells(mesh); + return result; +} + +// Returns false when no closed shell was left. +bool repair_soup(std::vector &points, std::vector &triangles, std::vector &shells, MeshRepairStats &stats, + const std::function &progress) +{ + const double tolerance = 1e-4 * bbox_diagonal(points); + shells = take_closed_shells(points, triangles); + stats.modified = !triangles.empty(); + progress(10); + + if (!triangles.empty()) { + const std::size_t num_triangles = triangles.size(); + clean_soup(points, triangles); + SoupTopology topology = analyze_topology(points.size(), triangles); + // A soup that stays mostly open has cracks wider than the tolerance, so try wider ones. + for (double t = tolerance; t > 0. && t <= 100. * tolerance; t *= 10.) { + if (const std::size_t welded = weld_border_vertices(points, triangles, topology.border, t); welded > 0) { + stats.welded_vertices += welded; + clean_soup(points, triangles); + topology = analyze_topology(points.size(), triangles); + } + if (topology.open_fraction < 0.5) + break; + } + stats.removed_triangles = num_triangles - triangles.size(); + progress(25); + + // Independent parts of the soup are repaired in parallel. + const std::vector> units = soup_units(points, triangles, topology, tolerance); + std::vector results(units.size()); + parallel_for_each(units.size(), [&](std::size_t i) { results[i] = repair_unit(points, triangles, units[i], topology, tolerance); }); + for (UnitResult &result : results) { + if (!result.closed) + return false; + stats.reversed_shells += result.reversed; + stats.filled_holes += result.filled; + for (Mesh &shell : result.shells) + shells.emplace_back(std::move(shell)); + } + progress(60); + } + + // Shells are independent from here on. Hole filling and remeshing leave some that enclose nothing. + auto flat = [tolerance](const Mesh &shell) { + // Fewer than four faces are two triangles back to back, whose volumes need not cancel exactly. + return shell.number_of_faces() < 4 || std::abs(signed_volume(shell)) <= 0.1 * tolerance * PMP::area(shell); + }; + std::vector> pieces(shells.size()); + std::vector pairs(shells.size(), 0), removed(shells.size(), 0); + parallel_for_each(shells.size(), [&](std::size_t i) { + if (flat(shells[i])) + removed[i] = 1; + else if ((pairs[i] = remove_local_self_intersections(shells[i])) == 0) + pieces[i].emplace_back(std::move(shells[i])); + else + for (Mesh &piece : split_shells(shells[i])) + if (flat(piece)) + ++removed[i]; + else + pieces[i].emplace_back(std::move(piece)); + }); + stats.removed_shells += std::accumulate(removed.begin(), removed.end(), std::size_t(0)); + stats.self_intersections += std::accumulate(pairs.begin(), pairs.end(), std::size_t(0)); + shells.clear(); + for (std::vector &shell_pieces : pieces) + std::move(shell_pieces.begin(), shell_pieces.end(), std::back_inserter(shells)); + progress(90); + resolve_shells(shells, stats, progress); + + stats.modified = stats.modified || stats.removed_shells > 0 || stats.reversed_shells > 0 || stats.self_intersections > 0; + return !shells.empty(); +} + +// Repairs its into result, which is left empty when the input needs no change. +bool repair_its(const indexed_triangle_set &its, indexed_triangle_set &result, MeshRepairStats &stats, const std::function &progress) +{ + std::vector points; + points.reserve(its.vertices.size()); + for (const stl_vertex &v : its.vertices) + points.emplace_back(v.x(), v.y(), v.z()); + std::vector triangles; + triangles.reserve(its.indices.size()); + for (const stl_triangle_vertex_indices &f : its.indices) + if (its.vertices[f[0]].allFinite() && its.vertices[f[1]].allFinite() && its.vertices[f[2]].allFinite()) + triangles.push_back({std::size_t(f[0]), std::size_t(f[1]), std::size_t(f[2])}); + const bool dropped = triangles.size() != its.indices.size(); + + std::vector shells; + const bool ok = repair_soup(points, triangles, shells, stats, progress); + stats.modified = stats.modified || dropped; + if (!ok || !stats.modified) + return ok; + + for (Mesh &shell : shells) { + shell.collect_garbage(); + const int offset = int(result.vertices.size()); + for (Vertex v : shell.vertices()) { + const Point &p = shell.point(v); + result.vertices.emplace_back(float(p.x()), float(p.y()), float(p.z())); + } + for (Face f : shell.faces()) { + const Halfedge h = shell.halfedge(f); + result.indices.emplace_back(offset + int(shell.source(h)), offset + int(shell.target(h)), offset + int(shell.target(shell.next(h)))); + } + } + return true; +} + +} // namespace + +bool repair_mesh(TriangleMesh &mesh, MeshRepairStats *stats_out, std::string *error, const std::function &progress) +{ + if (mesh.its.indices.empty()) + return true; + + MeshRepairStats stats; + indexed_triangle_set result; + bool ok = false; + try { + ok = repair_its(mesh.its, result, stats, progress ? progress : [](int) {}); + } catch (const CGAL::Failure_exception &ex) { + if (error) + *error = ex.what(); + return false; + } + if (stats_out) + *stats_out = stats; + if (!ok) { + if (error) + *error = _u8L("The mesh does not enclose any volume."); + return false; + } + BOOST_LOG_TRIVIAL(info) << "repair_mesh: welded " << stats.welded_vertices << " vertices, removed " << stats.removed_triangles + << " triangles, filled " << stats.filled_holes << " holes, reversed " << stats.reversed_shells << " and removed " + << stats.removed_shells << " shells, fixed " << stats.self_intersections << " self-intersections"; + if (stats.modified) + mesh = TriangleMesh(std::move(result)); + return true; +} + +} // namespace Slic3r diff --git a/src/libslic3r/MeshRepair.hpp b/src/libslic3r/MeshRepair.hpp new file mode 100644 index 0000000000..0bbb6e94a5 --- /dev/null +++ b/src/libslic3r/MeshRepair.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include +#include +#include + +namespace Slic3r { + +class TriangleMesh; + +struct MeshRepairStats +{ + std::size_t welded_vertices = 0; + std::size_t removed_triangles = 0; + std::size_t reversed_shells = 0; + std::size_t filled_holes = 0; + std::size_t removed_shells = 0; + std::size_t self_intersections = 0; + // False when the input already was closed, consistently oriented and free of self-intersections. + bool modified = false; +}; + +// Returns false, leaving the mesh untouched, if no solid can be built. progress gets the percentage done and may +// throw to cancel. See docs/HLSD/mesh-repair.md. +bool repair_mesh(TriangleMesh &mesh, MeshRepairStats *stats = nullptr, std::string *error = nullptr, + const std::function &progress = {}); + +} // namespace Slic3r diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 6cca66e44b..d096bd2158 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -29,6 +29,7 @@ #include "TriangleMeshSlicer.hpp" #include "TriangleSelector.hpp" #include "MaterialType.hpp" +#include "MeshRepair.hpp" #include "Format/AMF.hpp" #include "Format/svg.hpp" @@ -2946,6 +2947,18 @@ size_t ModelVolume::split(unsigned int max_extruders, bool remap_paint) if (text_configuration.has_value()) text_configuration.reset(); + // Parts without a convex hull enclose no volume; drop them here, as deleting volumes later could delete this one. + std::vector> parts; + for (TriangleMesh &mesh : meshes) + if (!mesh.empty()) { + std::unique_ptr part(new ModelVolume(object, *this, std::move(mesh))); + if (const std::shared_ptr &hull = part->get_convex_hull_shared_ptr(); + hull != nullptr && !hull->its.vertices.empty() && !hull->its.indices.empty()) + parts.emplace_back(std::move(part)); + } + if (parts.empty()) + return 1; + std::optional saved_painting = remap_paint ? save_painting() : std::optional{}; @@ -2956,26 +2969,22 @@ size_t ModelVolume::split(unsigned int max_extruders, bool remap_paint) unsigned int extruder_counter = 0; const Vec3d offset = this->get_offset(); - for (TriangleMesh &mesh : meshes) { - if (mesh.empty()) - // Repair may have removed unconnected triangles, thus emptying the mesh. - continue; - + for (std::unique_ptr &part : parts) { if (idx == 0) { - this->set_mesh(std::move(mesh)); - this->calculate_convex_hull(); + this->set_mesh(part->m_mesh); + m_convex_hull = part->m_convex_hull; this->invalidate_convex_hull_2d(); // Assign a new unique ID, so that a new GLVolume will be generated. this->set_new_unique_id(); - // reset the source to disable reload from disk - this->source = ModelVolume::Source(); // BBS: reset facet annotations this->reset_extra_facets(); } else - this->object->volumes.insert(this->object->volumes.begin() + (++ivolume), new ModelVolume(object, *this, std::move(mesh))); + this->object->volumes.insert(this->object->volumes.begin() + (++ivolume), part.release()); + // reset the source to disable reload from disk + this->object->volumes[ivolume]->source = ModelVolume::Source(); this->object->volumes[ivolume]->set_offset(Vec3d::Zero()); this->object->volumes[ivolume]->center_geometry_after_creation(); this->object->volumes[ivolume]->translate(offset); @@ -2989,21 +2998,29 @@ size_t ModelVolume::split(unsigned int max_extruders, bool remap_paint) ++ idx; } - // discard volumes for which the convex hull was not generated or is degenerate - size_t i = 0; - while (i < this->object->volumes.size()) { - const std::shared_ptr &hull = this->object->volumes[i]->get_convex_hull_shared_ptr(); - if (hull == nullptr || hull->its.vertices.empty() || hull->its.indices.empty()) { - this->object->delete_volume(i); - --idx; - --i; - } - ++i; - } - return idx; } +bool ModelVolume::repair(bool keep_painting, MeshRepairStats *stats_out, std::string *error, const std::function &progress) +{ + TriangleMesh mesh = this->mesh(); + MeshRepairStats stats; + const bool ok = repair_mesh(mesh, &stats, error, progress); + if (stats_out) + *stats_out = stats; + if (!ok || !stats.modified) + return ok; + + const std::optional saved_painting = keep_painting ? save_painting() : std::nullopt; + this->set_mesh(std::move(mesh)); + this->calculate_convex_hull(); + this->invalidate_convex_hull_2d(); + // Assign a new unique ID, so that a new GLVolume will be generated. + this->set_new_unique_id(); + this->restore_painting(saved_painting); + return true; +} + void ModelVolume::translate(const Vec3d& displacement) { set_offset(get_offset() + displacement); diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 4bb1794b46..dcaea5ee97 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -77,6 +77,7 @@ class Preset; class BBLProject; class KeyStore; +struct MeshRepairStats; namespace UndoRedo { class StackImpl; @@ -887,13 +888,13 @@ public: // The triangular model. const TriangleMesh& mesh() const { return *m_mesh.get(); } std::shared_ptr mesh_ptr() const { return m_mesh; } - void set_mesh(const TriangleMesh &mesh) { m_mesh = std::make_shared(mesh); } - void set_mesh(TriangleMesh &&mesh) { m_mesh = std::make_shared(std::move(mesh)); } - void set_mesh(const indexed_triangle_set &mesh) { m_mesh = std::make_shared(mesh); } - void set_mesh(indexed_triangle_set &&mesh) { m_mesh = std::make_shared(std::move(mesh)); } - void set_mesh(std::shared_ptr &mesh) { m_mesh = mesh; } - void set_mesh(std::unique_ptr &&mesh) { m_mesh = std::move(mesh); } - void reset_mesh() { m_mesh = std::make_shared(); } + void set_mesh(const TriangleMesh &mesh) { m_mesh = std::make_shared(mesh); m_is_splittable = -1; } + void set_mesh(TriangleMesh &&mesh) { m_mesh = std::make_shared(std::move(mesh)); m_is_splittable = -1; } + void set_mesh(const indexed_triangle_set &mesh) { m_mesh = std::make_shared(mesh); m_is_splittable = -1; } + void set_mesh(indexed_triangle_set &&mesh) { m_mesh = std::make_shared(std::move(mesh)); m_is_splittable = -1; } + void set_mesh(std::shared_ptr &mesh) { m_mesh = mesh; m_is_splittable = -1; } + void set_mesh(std::unique_ptr &&mesh) { m_mesh = std::move(mesh); m_is_splittable = -1; } + void reset_mesh() { m_mesh = std::make_shared(); m_is_splittable = -1; } const std::shared_ptr& get_mesh_shared_ptr() const { return m_mesh; } // Configuration parameters specific to an object model geometry or a modifier volume, // overriding the global Slic3r settings and the ModelObject settings. @@ -1043,6 +1044,9 @@ public: // Return the number of volumes created from this one. // This is useful to assign different materials to different volumes of an object. size_t split(unsigned int max_extruders, bool remap_paint); + // Replaces the mesh by its repair_mesh() result if that changed it. False if no solid can be built. + bool repair(bool keep_painting, MeshRepairStats *stats = nullptr, std::string *error = nullptr, + const std::function &progress = {}); void translate(double x, double y, double z) { translate(Vec3d(x, y, z)); } void translate(const Vec3d& displacement); void scale(const Vec3d& scaling_factors); diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index b081f14248..ac584e5b77 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -12866,10 +12866,11 @@ CLITransformConfigDef::CLITransformConfigDef() //def->cli = "orient|o"; def->set_default_value(new ConfigOptionInt(0)); - /*def = this->add("repair", coBool); + def = this->add("repair", coBool); def->label = L("Repair"); - def->tooltip = L("Repair the model's meshes if it is non-manifold mesh."); - def->set_default_value(new ConfigOptionBool(false));*/ + def->tooltip = L("Repair the meshes of the models as Fix Model does: close holes and cracks, orient them outward and " + "remove self-intersections."); + def->set_default_value(new ConfigOptionBool(false)); def = this->add("rotate", coFloat); def->label = L("Rotate"); diff --git a/src/libslic3r/TextureToColor/TextureToColor.cpp b/src/libslic3r/TextureToColor/TextureToColor.cpp index 15a2a641af..e016a549a2 100644 --- a/src/libslic3r/TextureToColor/TextureToColor.cpp +++ b/src/libslic3r/TextureToColor/TextureToColor.cpp @@ -673,14 +673,14 @@ static bool repair_cluster_smooth( [&]() { return cancelled(); }, &repair_error); if (repaired) { if (cancelled()) return false; - BOOST_LOG_TRIVIAL(info) << log_prefix << ": Windows 3D mesh repair finished."; + BOOST_LOG_TRIVIAL(info) << log_prefix << ": mesh repair finished."; if (!resample_face_colors(TriMesh(std::move(repaired_its)))) return false; } else { - BOOST_LOG_TRIVIAL(warning) << log_prefix << ": Windows 3D mesh repair failed: " << repair_error; + BOOST_LOG_TRIVIAL(warning) << log_prefix << ": mesh repair failed: " << repair_error; } } else { - BOOST_LOG_TRIVIAL(info) << log_prefix << ": importing mesh without Windows 3D repair."; + BOOST_LOG_TRIVIAL(info) << log_prefix << ": importing mesh without repair."; } } } diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 5cbda924b5..f4508f47ac 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -1952,6 +1952,16 @@ void MenuFactory::create_plate_menu() }, "", nullptr, []() { return !plater()->get_partplate_list().get_selected_plate()->get_objects().empty(); }, m_parent); + // fix objects on current plate + append_menu_item(menu, wxID_ANY, _L("Fix All"), _L("Fix all models on the current plate"), + [](wxCommandEvent&) { obj_list()->fix_all_through_cgal(false); }, "", nullptr, + []() { return !plater()->get_partplate_list().get_selected_plate()->empty(); }, m_parent); + + // fix objects on all plates + append_menu_item(menu, wxID_ANY, _L("Fix All Plates"), _L("Fix all models on all plates"), + [](wxCommandEvent&) { obj_list()->fix_all_through_cgal(true); }, "", nullptr, + []() { return !plater()->model().objects.empty(); }, m_parent); + // orient objects on current plate append_menu_item(menu, wxID_ANY, _L("Auto Rotate"), _L("Auto rotate current plate"), [](wxCommandEvent&) { diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 4a733d3342..40ba495349 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -6297,30 +6297,44 @@ void ObjectList::rename_item() } void ObjectList::fix_through_cgal() +{ + std::vector obj_idxs, vol_idxs; + get_selection_indexes(obj_idxs, vol_idxs); + fix_through_cgal(obj_idxs, vol_idxs); +} + +void ObjectList::fix_all_through_cgal(bool all_plates) +{ + std::vector obj_idxs; + if (all_plates) { + for (int obj_idx = 0; obj_idx < int(m_objects->size()); ++obj_idx) + obj_idxs.push_back(obj_idx); + } else { + for (const ModelObject *mo : wxGetApp().plater()->get_partplate_list().get_selected_plate()->get_objects_on_this_plate()) + obj_idxs.push_back(int(std::find(m_objects->begin(), m_objects->end(), mo) - m_objects->begin())); + std::sort(obj_idxs.begin(), obj_idxs.end()); + obj_idxs.erase(std::unique(obj_idxs.begin(), obj_idxs.end()), obj_idxs.end()); + } + fix_through_cgal(obj_idxs, {}); +} + +void ObjectList::fix_through_cgal(const std::vector &obj_idxs, const std::vector &vol_idxs) { // Do not fix anything when a gizmo is open. There might be issues with updates // and what is worse, the snapshot time would refer to the internal stack. - if (!wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager().check_gizmos_closed_except(GLGizmosManager::Undefined)) + if (obj_idxs.empty() || !wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager().check_gizmos_closed_except(GLGizmosManager::Undefined)) return; // model_name std::vector succes_models; // model_name failing reason std::vector> failed_models; - - std::vector obj_idxs, vol_idxs; - get_selection_indexes(obj_idxs, vol_idxs); + size_t unchanged_models = 0; + bool painting_removed = false; std::vector model_names; - // clear selections from the non-broken models if any exists - // and than fill names of models to repairing if (vol_idxs.empty()) { -#if !FIX_THROUGH_CGAL_ALWAYS - for (int i = int(obj_idxs.size())-1; i >= 0; --i) - if (object(obj_idxs[i])->get_repaired_errors_count() == 0) - obj_idxs.erase(obj_idxs.begin()+i); -#endif // FIX_THROUGH_CGAL_ALWAYS for (int obj_idx : obj_idxs) if (object(obj_idx)) model_names.push_back(object(obj_idx)->name); @@ -6328,31 +6342,26 @@ void ObjectList::fix_through_cgal() else { ModelObject* obj = object(obj_idxs.front()); if (obj) { -#if !FIX_THROUGH_CGAL_ALWAYS - for (int i = int(vol_idxs.size()) - 1; i >= 0; --i) - if (obj->get_repaired_errors_count(vol_idxs[i]) == 0) - vol_idxs.erase(vol_idxs.begin() + i); -#endif // FIX_THROUGH_CGAL_ALWAYS for (int vol_idx : vol_idxs) model_names.push_back(obj->volumes[vol_idx]->name); } } auto plater = wxGetApp().plater(); + const bool keep_painting = GUI::wxGetApp().app_config->get_bool("keep_painting"); - auto fix_and_update_progress = [this, plater, model_names](const int obj_idx, const int vol_idx, - int model_idx, - ProgressDialog& progress_dlg, - std::vector& succes_models, - std::vector>& failed_models) + auto fix_and_update_progress = [&](const int obj_idx, const int vol_idx, int model_idx, ProgressDialog& progress_dlg) { - if (!object(obj_idx)) + ModelObject *mo = object(obj_idx); + if (!mo) return false; const std::string& model_name = model_names[model_idx]; wxString msg = _L("Repairing model object"); if (model_names.size() == 1) msg += ": " + from_u8(model_name) + "\n"; + else if (model_names.size() > 10) + msg += ": " + from_u8(model_name) + wxString::Format(" (%d/%d)", model_idx + 1, int(model_names.size())) + "\n"; else { msg += ":\n"; for (int i = 0; i < int(model_names.size()); ++i) @@ -6360,33 +6369,29 @@ void ObjectList::fix_through_cgal() msg += "\n"; } - const bool keep_painting = GUI::wxGetApp().app_config->get_bool("keep_painting"); - if (!keep_painting) { - plater->clear_before_change_mesh(obj_idx); - } - const size_t volumes_before = object(obj_idx)->volumes.size(); + auto count_painted = [mo]() { return std::count_if(mo->volumes.begin(), mo->volumes.end(), [](const ModelVolume *mv) { return mv->is_any_painted(); }); }; + const auto painted_before = count_painted(); std::string res; - if (!fix_model_with_cgal_gui(*(object(obj_idx)), vol_idx, progress_dlg, msg, res, keep_painting)) + bool modified = false; + if (!fix_model_with_cgal_gui(*mo, vol_idx, progress_dlg, msg, res, keep_painting, &modified)) return false; - //wxGetApp().plater()->changed_mesh(obj_idx); - object(obj_idx)->ensure_on_bed(); - plater->changed_mesh(obj_idx); - const size_t volumes_after = object(obj_idx)->volumes.size(); - if (volumes_after != volumes_before) - add_volumes_to_object_in_list(obj_idx); + if (modified) { + painting_removed = painting_removed || count_painted() < painted_before; + mo->ensure_on_bed(); + plater->changed_mesh(obj_idx); + plater->get_partplate_list().notify_instance_update(obj_idx, 0); + plater->sidebar().obj_list()->update_plate_values_for_items(); + update_item_error_icon(obj_idx, vol_idx); + update_info_items(obj_idx); + } - plater->get_partplate_list().notify_instance_update(obj_idx, 0); - plater->sidebar().obj_list()->update_plate_values_for_items(); - - if (res.empty()) + if (!res.empty()) + failed_models.push_back({ model_name, res }); + else if (modified) succes_models.push_back(model_name); else - failed_models.push_back({ model_name, res }); - - update_item_error_icon(obj_idx, vol_idx); - update_info_items(obj_idx); - + ++unchanged_models; return true; }; @@ -6399,11 +6404,7 @@ void ObjectList::fix_through_cgal() if (vol_idxs.empty()) { int vol_idx{ -1 }; for (int obj_idx : obj_idxs) { -#if !FIX_THROUGH_CGAL_ALWAYS - if (object(obj_idx)->get_repaired_errors_count(vol_idx) == 0) - continue; -#endif // FIX_THROUGH_CGAL_ALWAYS - if (!fix_and_update_progress(obj_idx, vol_idx, model_idx, progress_dlg, succes_models, failed_models)) + if (!fix_and_update_progress(obj_idx, vol_idx, model_idx, progress_dlg)) break; model_idx++; } @@ -6411,7 +6412,7 @@ void ObjectList::fix_through_cgal() else { int obj_idx{ obj_idxs.front() }; for (int vol_idx : vol_idxs) { - if (!fix_and_update_progress(obj_idx, vol_idx, model_idx, progress_dlg, succes_models, failed_models)) + if (!fix_and_update_progress(obj_idx, vol_idx, model_idx, progress_dlg)) break; model_idx++; } @@ -6419,20 +6420,29 @@ void ObjectList::fix_through_cgal() // Close the progress dialog progress_dlg.Update(100, ""); + if (painting_removed) + plater->notify_painting_removed(); + // Show info notification - wxString msg; + std::vector blocks; wxString bullet_suf = "\n - "; if (!succes_models.empty()) { - msg = _L_PLURAL("The following model object has been repaired", "The following model objects have been repaired", succes_models.size()) + ":"; + wxString block = _L_PLURAL("The following model object has been repaired", "The following model objects have been repaired", succes_models.size()) + ":"; for (auto& model : succes_models) - msg += bullet_suf + from_u8(model); - msg += "\n\n"; + block += bullet_suf + from_u8(model); + blocks.push_back(block); } if (!failed_models.empty()) { - msg += _L_PLURAL("Failed to repair the following model object", "Failed to repair the following model objects", failed_models.size()) + ":\n"; + wxString block = _L_PLURAL("Failed to repair the following model object", "Failed to repair the following model objects", failed_models.size()) + ":"; for (auto& model : failed_models) - msg += bullet_suf + from_u8(model.first) + ": " + _(model.second); + block += bullet_suf + from_u8(model.first) + ": " + _(model.second); + blocks.push_back(block); } + if (unchanged_models > 0) + blocks.push_back(format_wxstr(_L_PLURAL("%1$d model object needed no repair.", "%1$d model objects needed no repair.", unchanged_models), unchanged_models)); + wxString msg; + for (const wxString &block : blocks) + msg += (msg.IsEmpty() ? "" : "\n\n") + block; if (msg.IsEmpty()) msg = _L("Repairing was canceled"); plater->get_notification_manager()->push_notification(NotificationType::CgalFinished, NotificationManager::NotificationLevel::PrintInfoShortNotificationLevel, into_u8(msg)); diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 03bffb6cdc..85dc3943f9 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -47,9 +47,6 @@ typedef double coordf_t; typedef std::pair t_layer_height_range; typedef std::map t_layer_config_ranges; -// Manifold mesh may contain self-intersections, so we want to always allow fixing the mesh. -#define FIX_THROUGH_CGAL_ALWAYS 1 - namespace GUI { enum class Shortcut : uint8_t; @@ -463,6 +460,9 @@ public: void split_instances(); void rename_item(); void fix_through_cgal(); + // Fixes every object on the selected plate, or on all plates. + void fix_all_through_cgal(bool all_plates); + void fix_through_cgal(const std::vector &obj_idxs, const std::vector &vol_idxs); void simplify(); void smooth_mesh(); void update_item_error_icon(const int obj_idx, int vol_idx) const ; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 8339e4d9d9..dd2d0e60d3 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -14984,24 +14984,8 @@ bool Plater::priv::can_fix_through_cgal() const std::vector obj_idxs, vol_idxs; sidebar->obj_list()->get_selection_indexes(obj_idxs, vol_idxs); -#if FIX_THROUGH_CGAL_ALWAYS - // Fixing always. + // A closed mesh may still self-intersect, so fixing is always allowed. return ! obj_idxs.empty() || ! vol_idxs.empty(); -#else // FIX_THROUGH_CGAL_ALWAYS - // Fixing only if the model is not manifold. - if (vol_idxs.empty()) { - for (auto obj_idx : obj_idxs) - if (model.objects[obj_idx]->get_repaired_errors_count() > 0) - return true; - return false; - } - - int obj_idx = obj_idxs.front(); - for (auto vol_idx : vol_idxs) - if (model.objects[obj_idx]->get_repaired_errors_count(vol_idx) > 0) - return true; - return false; -#endif // FIX_THROUGH_CGAL_ALWAYS } bool Plater::priv::can_simplify() const @@ -22041,13 +22025,16 @@ void Plater::clear_before_change_mesh(int obj_idx) mv->mmu_segmentation_facets.reset(); mv->fuzzy_skin_facets.reset(); } - if (paint_removed) { - // snapshot_time is captured by copy so the lambda knows where to undo/redo to. - get_notification_manager()->push_notification( - NotificationType::CustomSupportsAndSeamRemovedAfterRepair, - NotificationManager::NotificationLevel::PrintInfoNotificationLevel, - _u8L("Custom supports and color painting were removed before repairing.")); - } + if (paint_removed) + notify_painting_removed(); +} + +void Plater::notify_painting_removed() +{ + get_notification_manager()->push_notification( + NotificationType::CustomSupportsAndSeamRemovedAfterRepair, + NotificationManager::NotificationLevel::PrintInfoNotificationLevel, + _u8L("Custom supports and color painting were removed before repairing.")); } void Plater::changed_mesh(int obj_idx) diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 0770e7e8d9..b3a2954b33 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -599,6 +599,7 @@ public: void reslice_SLA_until_step(SLAPrintObjectStep step, const ModelObject &object, bool postpone_error_messages = false); void clear_before_change_mesh(int obj_idx); + void notify_painting_removed(); void changed_mesh(int obj_idx); void changed_object(ModelObject &object); diff --git a/src/slic3r/GUI/TextureImportDialog.cpp b/src/slic3r/GUI/TextureImportDialog.cpp index bc50cabc8c..a785847670 100644 --- a/src/slic3r/GUI/TextureImportDialog.cpp +++ b/src/slic3r/GUI/TextureImportDialog.cpp @@ -14,7 +14,7 @@ #include "Widgets/StateColor.hpp" #include "Widgets/StaticLine.hpp" #include "libslic3r/ColorDecomposeRecipe.hpp" -#include "libslic3r/MeshBoolean.hpp" +#include "libslic3r/MeshRepair.hpp" #include "libslic3r/TriangleSelector.hpp" #include @@ -2436,25 +2436,25 @@ void TextureImportDialog::start_computation(bool auto_color, bool initial) settings.target_colors_num = auto_color ? 0 : (size_t)m_param_color_count; settings.smooth_weight = m_param_smooth / 10.0; settings.mesh_repair_decision = m_mesh_repair_decision; - // BBS repairs the mesh through the Windows 3D SDK, which is only available on Windows - // builds that ship the SDK. Orca's CGAL-based repair (MeshBoolean::cgal::repair) works - // on all three platforms, so use that instead. settings.mesh_repair_callback = [](const indexed_triangle_set& mesh, indexed_triangle_set& repaired_mesh, std::function progress_callback, std::function cancel_callback, std::string* error_message) -> bool { - if (cancel_callback && cancel_callback()) - return false; if (progress_callback) progress_callback(_u8L("Repairing mesh").c_str(), 0); + struct Canceled {}; TriangleMesh tm(mesh); - if (!MeshBoolean::cgal::repair(tm, nullptr, error_message)) - return false; - - if (cancel_callback && cancel_callback()) + try { + if (!repair_mesh(tm, nullptr, error_message, [&cancel_callback](int) { + if (cancel_callback && cancel_callback()) + throw Canceled(); + })) + return false; + } catch (const Canceled &) { return false; + } repaired_mesh = tm.its; if (progress_callback) progress_callback(_u8L("Repairing mesh").c_str(), 100); @@ -2683,12 +2683,12 @@ void TextureImportDialog::on_mesh_repair_decision_required(wxCommandEvent&) m_progress_dlg = nullptr; } -#ifdef HAS_WIN10SDK Slic3r::GUI::MessageDialog dlg(initial ? GetParent() : this, - _L("The mesh has non-manifold geometry or open boundaries. You can import it as-is or repair it with Windows 3D repair service before importing."), - _L("Mesh repair"), wxYES_NO | wxICON_WARNING | wxYES_DEFAULT); + _L("The mesh has non-manifold geometry or open boundaries. You can import it as-is or repair it before importing."), + _L("Mesh repair"), wxYES_NO | wxCANCEL | wxICON_WARNING | wxYES_DEFAULT); dlg.SetButtonLabel(wxID_YES, _L("Import without repair")); dlg.SetButtonLabel(wxID_NO, _L("Repair and import"), true); + dlg.SetButtonLabel(wxID_CANCEL, _L("Cancel")); // "Repair and import" is the recommended action here, so the accent moves off the default YES // button onto NO. MsgDialog::add_button already styled both as ButtonType::Choice, so restyling // with the same type swaps only the palette and leaves the geometry alone. @@ -2704,17 +2704,7 @@ void TextureImportDialog::on_mesh_repair_decision_required(wxCommandEvent&) dlg.Fit(); dlg.CenterOnParent(); int ret = dlg.ShowModal(); - m_mesh_repair_decision = (ret == wxID_NO) - ? Slic3r::TexturePaintingSettings::MeshRepairDecision::RepairAndImport - : Slic3r::TexturePaintingSettings::MeshRepairDecision::ImportWithoutRepair; -#else - Slic3r::GUI::MessageDialog dlg(initial ? GetParent() : this, - _L("Please note that the mesh has non-manifold geometry or open boundaries."), - _L("Mesh issue"), wxOK | wxCANCEL | wxICON_WARNING | wxOK_DEFAULT); - dlg.SetButtonLabel(wxID_OK, _L("Continue"), true); - dlg.SetButtonLabel(wxID_CANCEL, _L("Cancel")); - int ret = dlg.ShowModal(); - if (ret != wxID_OK) { + if (ret == wxID_CANCEL) { m_cancel_flag = true; if (initial) { m_initial_computation_cancelled = true; @@ -2727,8 +2717,9 @@ void TextureImportDialog::on_mesh_repair_decision_required(wxCommandEvent&) } return; } - m_mesh_repair_decision = Slic3r::TexturePaintingSettings::MeshRepairDecision::ImportWithoutRepair; -#endif + m_mesh_repair_decision = (ret == wxID_NO) + ? Slic3r::TexturePaintingSettings::MeshRepairDecision::RepairAndImport + : Slic3r::TexturePaintingSettings::MeshRepairDecision::ImportWithoutRepair; start_computation(auto_color, initial); } diff --git a/src/slic3r/Utils/FixModelByCgal.cpp b/src/slic3r/Utils/FixModelByCgal.cpp index 09dad529fe..081d9dcf0d 100644 --- a/src/slic3r/Utils/FixModelByCgal.cpp +++ b/src/slic3r/Utils/FixModelByCgal.cpp @@ -3,240 +3,115 @@ #include #include #include -#include #include -#include "libslic3r/TriangleMesh.hpp" -#include "libslic3r/BoundingBox.hpp" -#include "libslic3r/Point.hpp" -#include "libslic3r/libslic3r.h" -#include #include -#include "libslic3r/Exception.hpp" -#include +#include #include -#include "slic3r/GUI/Widgets/ProgressDialog.hpp" -#include #include #include -#include #include + #include -#include "libslic3r/MeshBoolean.hpp" -#include "libslic3r/Model.hpp" #include "libslic3r/Format/bbs_3mf.hpp" -#include "libslic3r/format.hpp" +#include "libslic3r/MeshRepair.hpp" +#include "libslic3r/Model.hpp" #include "libslic3r/Thread.hpp" -#include "../GUI/I18N.hpp" -#include "libslic3r/TriangleSelector.hpp" - -// Orca: This file provides utilities for repairing 3D model meshes using the CGAL library, handling mesh splitting, merging, and boolean operations. +#include "slic3r/GUI/I18N.hpp" +#include "slic3r/GUI/Widgets/ProgressDialog.hpp" namespace Slic3r { namespace { -// Orca: Helper functions for analyzing mesh properties and transformations. - -bool is_not_3dimensional_part(const TriangleMesh &mesh) +class RepairCanceledException : public std::exception { - // Orca: Determines if a mesh is degenerate or represents a non-3dimensional part by checking volume and bounding box dimensions. - if (mesh.its.indices.empty()) - return true; - - indexed_triangle_set tmp = mesh.its; - its_remove_degenerate_faces(tmp, true); - if (tmp.indices.empty()) - return true; - - const BoundingBoxf3 bbox = mesh.bounding_box(); - const Vec3d size = bbox.size(); - const double min_dim = std::min(size.x(), std::min(size.y(), size.z())); - const double max_dim = std::max(size.x(), std::max(size.y(), size.z())); - if (min_dim <= EPSILON) - return true; - - const double volume = std::abs(its_volume(mesh.its)); - const double bbox_volume = size.x() * size.y() * size.z(); - if (volume <= EPSILON) - return true; - - const double min_relative_thickness = 1e-6; - const double min_volume_ratio = 1e-6; - if (min_dim / max_dim <= min_relative_thickness) - return true; - if (bbox_volume > 0.0 && volume / bbox_volume <= min_volume_ratio) - return true; - - return false; -} +public: + const char *what() const noexcept override { return "Model repair has been canceled"; } +}; } // namespace -// Orca: Exception class for handling user-initiated cancellation of model repair operations. -class RepairCanceledException : public std::exception { -public: - const char* what() const noexcept override { return "Model repair has been canceled"; } -}; - -// Orca: Main function to repair model objects using CGAL, with progress dialog and cancellation support. -// Returns false if fixing was canceled. fix_result contains error message if failed. -bool fix_model_with_cgal_gui(ModelObject &model_object, int volume_idx, GUI::ProgressDialog &progress_dialog, const wxString &msg_header, std::string &fix_result, bool keep_painting) +bool fix_model_with_cgal_gui(ModelObject &model_object, int volume_idx, GUI::ProgressDialog &progress_dialog, const wxString &msg_header, std::string &fix_result, bool keep_painting, + bool *modified) { - // Hold SaveObjectGaurd to prevent backup manager from racing concurrent mesh mutations (use-after-free). + // Keeps the backup manager from reading a mesh while the worker replaces it. SaveObjectGaurd backup_gaurd(model_object); - // Orca: Synchronization primitives for progress updates between worker thread and GUI. - std::mutex mtx; - std::condition_variable condition; - struct Progress { - std::string message; - int percent = 0; - bool updated = false; - } progress; + std::vector volumes; + if (volume_idx < 0) + volumes = model_object.volumes; + else if (std::size_t(volume_idx) < model_object.volumes.size()) + volumes.push_back(model_object.volumes[volume_idx]); + std::mutex mtx; + std::condition_variable condition; + struct Progress + { + std::string message; + int percent = 0; + bool updated = false; + } progress; std::atomic canceled = false; std::atomic finished = false; + bool any_modified = false; + std::string errors; - bool success = false; - size_t ivolume = 0; - - // Orca: Lambda for updating progress from worker thread. - auto on_progress = [&mtx, &condition, &ivolume, &model_object, &progress](const std::string &msg, unsigned prcnt) { - std::unique_lock lock(mtx); + auto on_progress = [&mtx, &condition, &progress](const std::string &msg, int percent) { + std::lock_guard lock(mtx); progress.message = msg; - const size_t total = std::max(1, model_object.volumes.size()); - progress.percent = int(std::floor((float(prcnt) + float(ivolume) * 100.f) / float(total))); + progress.percent = percent; progress.updated = true; condition.notify_all(); }; - // Orca: Worker thread that performs the actual model repair operations. - auto worker_thread = std::thread([&model_object, volume_idx, &ivolume, on_progress, &success, &canceled, &finished, &fix_result, keep_painting]() { + auto worker_thread = std::thread([&]() { + set_current_thread_name("cgal_fix_model"); try { - set_current_thread_name("cgal_fix_model"); + for (std::size_t i = 0; i < volumes.size(); ++i) { + ModelVolume *volume = volumes[i]; + const std::string name = volumes.size() > 1 ? volume->name : std::string(); + const auto report = [&](int percent) { + if (canceled) + throw RepairCanceledException(); + on_progress(name, int((100 * i + std::size_t(percent)) / volumes.size())); + }; + report(0); - size_t start_volume = volume_idx == -1 ? 0 : size_t(volume_idx); - size_t end_volume = volume_idx == -1 ? std::numeric_limits::max() : size_t(volume_idx); - - for (ivolume = start_volume; ivolume < model_object.volumes.size(); ++ivolume) { - if (volume_idx != -1 && ivolume > end_volume) - break; - if (canceled) - throw RepairCanceledException(); - - on_progress(_u8L("Repairing model object"), 10); - - ModelVolume *volume = model_object.volumes[ivolume]; - - // Orca: Split splittable volumes into parts for individual processing. - size_t parts_count = 1; - if (volume->is_splittable()) { - parts_count = volume->split(1, keep_painting); - if (parts_count > 1) { - const std::string msg = Slic3r::format(L("Split into %1% parts"), parts_count); - on_progress(msg, 10); - } - } - - size_t part_end = std::min(ivolume + parts_count - 1, model_object.volumes.size() - 1); - if (volume_idx != -1) - end_volume = part_end; - - size_t removed_parts = 0; - for (size_t idx = part_end + 1; idx > ivolume; --idx) { - const size_t part_idx = idx - 1; - const ModelVolume *part_volume = model_object.volumes[part_idx]; - if (!is_not_3dimensional_part(part_volume->mesh())) - continue; - - model_object.delete_volume(part_idx); - ++removed_parts; - if (part_end > 0) - --part_end; - else - part_end = 0; - if (volume_idx != -1) - end_volume = part_end; - } - - if (removed_parts >= parts_count) { - ivolume = part_end; - on_progress(_u8L("Repair finished"), 100); - continue; - } - - for (size_t part_idx = ivolume; part_idx <= part_end && part_idx < model_object.volumes.size(); ++part_idx) { - ModelVolume *part_volume = model_object.volumes[part_idx]; - TriangleMesh mesh = part_volume->mesh(); - if (its_num_open_edges(mesh.its) != 0) { - - // Save painting for later remap - const std::optional saved_painting = keep_painting ? - part_volume->save_painting() : - std::optional{}; - - std::string error; - if (!MeshBoolean::cgal::repair(mesh, nullptr, &error)) - throw Slic3r::RuntimeError(error.empty() ? _u8L("Repair failed") : error); - - part_volume->set_mesh(std::move(mesh)); - part_volume->calculate_convex_hull(); - part_volume->invalidate_convex_hull_2d(); - part_volume->set_new_unique_id(); - - // Remap paint back - part_volume->restore_painting(saved_painting); - } - } - - ivolume = part_end; - - on_progress(_u8L("Repair finished"), 100); + MeshRepairStats stats; + std::string error; + if (!volume->repair(keep_painting, &stats, &error, report)) + errors += (errors.empty() ? "" : "\n") + (volumes.size() > 1 ? volume->name + ": " : std::string()) + error; + any_modified = any_modified || stats.modified; } - - model_object.invalidate_bounding_box(); - - if (ivolume > 0) - --ivolume; - on_progress(_u8L("Repair finished"), 100); - success = true; - finished = true; - } catch (RepairCanceledException &) { + } catch (const RepairCanceledException &) { canceled = true; - finished = true; - on_progress(_u8L("Repair canceled"), 100); - } catch (std::exception &ex) { - success = false; - finished = true; - fix_result = ex.what(); - on_progress(ex.what(), 100); + } catch (const std::exception &ex) { + errors += (errors.empty() ? "" : "\n") + std::string(ex.what()); } + // Volumes repaired before a cancel or an error keep their new mesh. + model_object.invalidate_bounding_box(); + finished = true; + on_progress(_u8L("Repair finished"), 100); }); - // Orca: Main GUI loop to update progress dialog and handle cancellation. while (!finished) { std::unique_lock lock(mtx); - condition.wait_for(lock, std::chrono::milliseconds(250), [&progress]{ return progress.updated; }); - - // Decrease progress percent slightly to avoid auto-closing. - if (!progress_dialog.Update(progress.percent - 1, msg_header + _(progress.message))) + condition.wait_for(lock, std::chrono::milliseconds(250), [&progress] { return progress.updated; }); + // One percent short of the maximum, so that the dialog does not close itself. + if (!progress_dialog.Update(std::max(0, progress.percent - 1), msg_header + wxString::FromUTF8(progress.message))) canceled = true; else progress_dialog.Fit(); - progress.updated = false; } - if (canceled) { - // Nothing to show. - } else if (success) { - fix_result.clear(); - } - if (worker_thread.joinable()) worker_thread.join(); + fix_result = canceled ? std::string() : errors; + if (modified) + *modified = any_modified; return !canceled; } diff --git a/src/slic3r/Utils/FixModelByCgal.hpp b/src/slic3r/Utils/FixModelByCgal.hpp index b3f96169f6..e59e767223 100644 --- a/src/slic3r/Utils/FixModelByCgal.hpp +++ b/src/slic3r/Utils/FixModelByCgal.hpp @@ -12,8 +12,9 @@ class Model; class ModelObject; class Print; -// Return false if fixing was canceled. fix_result is empty on success. -extern bool fix_model_with_cgal_gui(ModelObject &model_object, int volume_idx, GUI::ProgressDialog &progress_dlg, const wxString &msg_header, std::string &fix_result, bool keep_painting); +// Return false if fixing was canceled. fix_result is empty on success; modified tells whether any mesh changed. +extern bool fix_model_with_cgal_gui(ModelObject &model_object, int volume_idx, GUI::ProgressDialog &progress_dlg, const wxString &msg_header, std::string &fix_result, bool keep_painting, + bool *modified = nullptr); } // namespace Slic3r diff --git a/tests/data/surface_model_geometric_set.step b/tests/data/surface_model_geometric_set.step new file mode 100644 index 0000000000..ec11fde62d --- /dev/null +++ b/tests/data/surface_model_geometric_set.step @@ -0,0 +1,35 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION((''),'2;1'); +FILE_NAME('surface_model_geometric_set','2026-10-12T00:00:00',(''),(''),'','',''); +FILE_SCHEMA(('CONFIG_CONTROL_DESIGN')); +ENDSEC; +DATA; +#1=APPLICATION_CONTEXT('configuration controlled 3d designs of mechanical parts and assemblies'); +#2=APPLICATION_PROTOCOL_DEFINITION('international standard','config_control_design',1994,#1); +#3=MECHANICAL_CONTEXT('',#1,'mechanical'); +#4=PRODUCT('surfaces','surfaces','',(#3)); +#5=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#4,.NOT_KNOWN.); +#6=DESIGN_CONTEXT('',#1,'design'); +#7=PRODUCT_DEFINITION('','',#5,#6); +#8=PRODUCT_DEFINITION_SHAPE('','',#7); +#9=SHAPE_DEFINITION_REPRESENTATION(#8,#20); +#10=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.)); +#11=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.)); +#12=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT()); +#13=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-6),#10,'distance_accuracy_value',''); +#14=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#13))GLOBAL_UNIT_ASSIGNED_CONTEXT((#10,#11,#12))REPRESENTATION_CONTEXT('','')); +#15=CARTESIAN_POINT('',(0.,0.,0.)); +#16=DIRECTION('',(0.,0.,1.)); +#17=DIRECTION('',(1.,0.,0.)); +#18=AXIS2_PLACEMENT_3D('',#15,#16,#17); +#19=GEOMETRIC_SET('',(#30,#40)); +#20=GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION('',(#18,#19),#14); +#30=RECTANGULAR_TRIMMED_SURFACE('',#31,0.,10.,0.,10.,.T.,.T.); +#31=PLANE('',#18); +#40=RECTANGULAR_TRIMMED_SURFACE('',#41,0.,10.,0.,10.,.T.,.T.); +#41=PLANE('',#42); +#42=AXIS2_PLACEMENT_3D('',#43,#16,#17); +#43=CARTESIAN_POINT('',(0.,0.,10.)); +ENDSEC; +END-ISO-10303-21; diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index 9e1e7c44f8..1f72f83478 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -53,6 +53,7 @@ add_executable(${_TEST_NAME}_tests test_stl.cpp test_triangle_selector.cpp test_meshboolean.cpp + test_mesh_repair.cpp test_trianglemesh_slicer.cpp test_marchingsquares.cpp test_lay_on_face.cpp diff --git a/tests/libslic3r/test_mesh_repair.cpp b/tests/libslic3r/test_mesh_repair.cpp new file mode 100644 index 0000000000..3390a65c77 --- /dev/null +++ b/tests/libslic3r/test_mesh_repair.cpp @@ -0,0 +1,255 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +using namespace Slic3r; +using Catch::Matchers::WithinRel; + +namespace { + +indexed_triangle_set cube(double size, const Vec3d &offset = Vec3d::Zero()) +{ + TriangleMesh mesh = make_cube(size, size, size); + mesh.translate(offset.cast()); + return mesh.its; +} + +indexed_triangle_set merged(const std::vector &parts) +{ + indexed_triangle_set out; + for (const indexed_triangle_set &part : parts) + its_merge(out, part); + return out; +} + +// Every triangle with its own three vertices, as some exporters write meshes. +indexed_triangle_set soup(const indexed_triangle_set &its) +{ + indexed_triangle_set out; + for (const stl_triangle_vertex_indices &f : its.indices) { + const int first = int(out.vertices.size()); + for (int k = 0; k < 3; ++k) + out.vertices.push_back(its.vertices[f[k]]); + out.indices.emplace_back(first, first + 1, first + 2); + } + return out; +} + +double regular_polygon_area(int sides, double radius) { return 0.5 * sides * radius * radius * std::sin(2. * PI / sides); } + +// Closed by vertex indices, outward oriented and free of self-intersections. +void check_solid(const TriangleMesh &mesh, double volume) +{ + CHECK(its_num_open_edges(mesh.its) == 0); + CHECK_THAT(its_volume(mesh.its), WithinRel(volume, 1e-4)); + CHECK_FALSE(MeshBoolean::cgal::does_self_intersect(mesh)); +} + +} // namespace + +TEST_CASE("A triangle soup repairs into the solid it describes", "[MeshRepair]") +{ + TriangleMesh mesh(soup(cube(20.))); + MeshRepairStats stats; + REQUIRE(repair_mesh(mesh, &stats)); + CHECK(stats.modified); + check_solid(mesh, 20. * 20. * 20.); + CHECK(mesh.its.vertices.size() == 8); +} + +TEST_CASE("Flipped triangles take the orientation of their neighbours", "[MeshRepair]") +{ + indexed_triangle_set its = cube(20.); + std::swap(its.indices[1][1], its.indices[1][2]); + std::swap(its.indices[5][1], its.indices[5][2]); + TriangleMesh mesh(std::move(its)); + REQUIRE(repair_mesh(mesh)); + check_solid(mesh, 20. * 20. * 20.); +} + +TEST_CASE("An inside-out mesh is turned outward", "[MeshRepair]") +{ + indexed_triangle_set its = cube(20.); + its_flip_triangles(its); + TriangleMesh mesh(std::move(its)); + REQUIRE(repair_mesh(mesh)); + check_solid(mesh, 20. * 20. * 20.); +} + +TEST_CASE("Holes are filled", "[MeshRepair]") +{ + indexed_triangle_set its = cube(20.); + its.indices.erase(its.indices.begin(), its.indices.begin() + 3); + TriangleMesh mesh(std::move(its)); + MeshRepairStats stats; + REQUIRE(repair_mesh(mesh, &stats)); + CHECK(stats.filled_holes > 0); + check_solid(mesh, 20. * 20. * 20.); +} + +TEST_CASE("Cracks between triangles that should share corners are closed", "[MeshRepair]") +{ + indexed_triangle_set its = soup(cube(20.)); + // Shift the corners of two triangles by far less than a micron, as float rounding in an exporter would. + for (std::size_t v = 0; v < 6; ++v) + its.vertices[v] += Vec3f(1e-5f, -1e-5f, 1e-5f); + TriangleMesh mesh(std::move(its)); + MeshRepairStats stats; + REQUIRE(repair_mesh(mesh, &stats)); + CHECK(stats.welded_vertices > 0); + check_solid(mesh, 20. * 20. * 20.); +} + +TEST_CASE("A T-junction is closed", "[MeshRepair]") +{ + // The top of the cube is split at the middle of its front edge, which the front side does not share. + indexed_triangle_set its; + its.vertices = {{0, 0, 0}, {20, 0, 0}, {20, 20, 0}, {0, 20, 0}, {0, 0, 20}, {20, 0, 20}, {20, 20, 20}, {0, 20, 20}, {10, 0, 20}}; + its.indices = {{0, 2, 1}, {0, 3, 2}, {4, 8, 7}, {8, 6, 7}, {8, 5, 6}, {0, 1, 5}, {0, 5, 4}, + {1, 2, 6}, {1, 6, 5}, {2, 3, 7}, {2, 7, 6}, {3, 0, 4}, {3, 4, 7}}; + TriangleMesh mesh(std::move(its)); + REQUIRE(repair_mesh(mesh)); + check_solid(mesh, 20. * 20. * 20.); +} + +TEST_CASE("Crossing shells stay separate parts and are made solid", "[MeshRepair]") +{ + indexed_triangle_set inside_out = cube(20., {10., 10., 10.}); + its_flip_triangles(inside_out); + TriangleMesh mesh(merged({cube(20.), inside_out})); + MeshRepairStats stats; + REQUIRE(repair_mesh(mesh, &stats)); + CHECK(stats.reversed_shells == 1); + CHECK(its_num_open_edges(mesh.its) == 0); + CHECK_THAT(its_volume(mesh.its), WithinRel(2 * 8000., 1e-4)); + CHECK(mesh.split().size() == 2); +} + +TEST_CASE("Solids touching face to face in a soup lose the wall between them", "[MeshRepair]") +{ + // The mirrored copy shares the wall at x = 10 with exactly the same triangles, reversed. + TriangleMesh right = make_cube(10., 10., 10.); + right.mirror(X); + right.translate(20.f, 0.f, 0.f); + TriangleMesh mesh(soup(merged({cube(10.), right.its}))); + REQUIRE(repair_mesh(mesh)); + check_solid(mesh, 2 * 1000.); + CHECK(mesh.split().size() == 1); +} + +TEST_CASE("A shell inside a solid follows the nonzero winding rule of slicing", "[MeshRepair]") +{ + SECTION("Oriented like the outer shell, it adds nothing and is removed") + { + TriangleMesh mesh(merged({cube(20.), cube(10., {5., 5., 5.})})); + REQUIRE(repair_mesh(mesh)); + check_solid(mesh, 8000.); + CHECK(mesh.its.indices.size() == 12); + } + SECTION("Oriented inward, it is a cavity and stays") + { + indexed_triangle_set cavity = cube(10., {5., 5., 5.}); + its_flip_triangles(cavity); + TriangleMesh mesh(merged({cube(20.), cavity})); + MeshRepairStats stats; + REQUIRE(repair_mesh(mesh, &stats)); + CHECK_FALSE(stats.modified); + CHECK_THAT(its_volume(mesh.its), WithinRel(8000. - 1000., 1e-4)); + } +} + +TEST_CASE("A pipe missing its end caps gets annular caps", "[MeshRepair]") +{ + const int n = 64; + const double h = 20., r_out = 10., r_in = 7.; + indexed_triangle_set its; + for (const double r : {r_out, r_in}) + for (int k = 0; k < n; ++k) { + const double a = 2. * PI * k / n; + its.vertices.emplace_back(float(r * std::cos(a)), float(r * std::sin(a)), 0.f); + its.vertices.emplace_back(float(r * std::cos(a)), float(r * std::sin(a)), float(h)); + } + for (int k = 0; k < n; ++k) { + const int a0 = 2 * k, b0 = a0 + 1, a1 = 2 * ((k + 1) % n), b1 = a1 + 1; + its.indices.emplace_back(a0, a1, b1); + its.indices.emplace_back(a0, b1, b0); + its.indices.emplace_back(2 * n + a0, 2 * n + b1, 2 * n + a1); + its.indices.emplace_back(2 * n + a0, 2 * n + b0, 2 * n + b1); + } + TriangleMesh mesh(std::move(its)); + REQUIRE(repair_mesh(mesh)); + check_solid(mesh, h * (regular_polygon_area(n, r_out) - regular_polygon_area(n, r_in))); +} + +TEST_CASE("A stray flat triangle is dropped", "[MeshRepair]") +{ + indexed_triangle_set its = cube(20.); + its.vertices.insert(its.vertices.end(), {{30, 0, 0}, {40, 0, 0}, {30, 10, 0}}); + its.indices.emplace_back(8, 9, 10); + TriangleMesh mesh(std::move(its)); + MeshRepairStats stats; + REQUIRE(repair_mesh(mesh, &stats)); + CHECK(stats.removed_shells == 1); + check_solid(mesh, 8000.); +} + +TEST_CASE("A two-sided export keeps one side of each triangle", "[MeshRepair]") +{ + indexed_triangle_set back = cube(20.); + its_flip_triangles(back); + TriangleMesh mesh(soup(merged({cube(20.), back}))); + REQUIRE(repair_mesh(mesh)); + check_solid(mesh, 8000.); +} + +TEST_CASE("A valid mesh is left untouched", "[MeshRepair]") +{ + TriangleMesh mesh = make_sphere(10., 2. * PI / 36.); + const TriangleMesh original = mesh; + MeshRepairStats stats; + REQUIRE(repair_mesh(mesh, &stats)); + CHECK_FALSE(stats.modified); + CHECK(mesh.its.vertices == original.its.vertices); + CHECK(mesh.its.indices == original.its.indices); +} + +TEST_CASE("A mesh enclosing no volume is reported and left untouched", "[MeshRepair]") +{ + indexed_triangle_set its; + its.vertices = {{0, 0, 0}, {10, 0, 0}, {10, 10, 0}, {0, 10, 0}}; + its.indices = {{0, 1, 2}, {0, 2, 3}}; + TriangleMesh mesh(its); + std::string error; + CHECK_FALSE(repair_mesh(mesh, nullptr, &error)); + CHECK_FALSE(error.empty()); + CHECK(mesh.its.indices.size() == 2); +} + +TEST_CASE("Progress is reported in order and throwing from it cancels the repair", "[MeshRepair]") +{ + TriangleMesh mesh(soup(cube(20.))); + std::vector reported; + REQUIRE(repair_mesh(mesh, nullptr, nullptr, [&reported](int percent) { reported.push_back(percent); })); + CHECK_FALSE(reported.empty()); + CHECK(std::is_sorted(reported.begin(), reported.end())); + + struct Canceled {}; + TriangleMesh canceled(soup(cube(20.))); + const TriangleMesh original = canceled; + CHECK_THROWS_AS(repair_mesh(canceled, nullptr, nullptr, [](int) { throw Canceled(); }), Canceled); + CHECK(canceled.its.vertices == original.its.vertices); + CHECK(canceled.its.indices == original.its.indices); +} diff --git a/tests/libslic3r/test_model.cpp b/tests/libslic3r/test_model.cpp index 5fc72a2b9b..abdaabd801 100644 --- a/tests/libslic3r/test_model.cpp +++ b/tests/libslic3r/test_model.cpp @@ -12,7 +12,9 @@ #include #include #include +#include "libslic3r/MeshRepair.hpp" #include "libslic3r/Model.hpp" +#include "libslic3r/ObjectID.hpp" #include "libslic3r/Geometry.hpp" #include "libslic3r/libslic3r.h" @@ -97,3 +99,104 @@ TEST_CASE("An instance added from another's scale, rotation and mirror matches i original->get_rotation(), original->get_mirror()); CHECK(copy->get_matrix().linear().isApprox(original->get_matrix().linear(), 1e-9)); } + +namespace { + +// A flat triangle first, then a cube for each offset, all in one mesh. +TriangleMesh flat_triangle_then_cubes(const std::vector &cube_offsets) +{ + indexed_triangle_set its; + its.vertices = {{-20.f, 0.f, 0.f}, {-10.f, 0.f, 0.f}, {-15.f, 5.f, 0.f}}; + its.indices = {{0, 1, 2}}; + for (double offset : cube_offsets) { + TriangleMesh cube = make_cube(10, 10, 10); + cube.translate(float(offset), 0.f, 0.f); + its_merge(its, cube.its); + } + return TriangleMesh(its); +} + +} // namespace + +TEST_CASE("Splitting a part drops pieces enclosing no volume and keeps the part itself", "[Model]") +{ + Model model; + ModelObject *object = model.add_object(); + ModelVolume *volume = object->add_volume(flat_triangle_then_cubes({0., 30.}), ModelVolumeType::MODEL_PART, false); + REQUIRE(volume->is_splittable()); + + CHECK(volume->split(1, false) == 2); + REQUIRE(object->volumes.size() == 2); + CHECK(std::find(object->volumes.begin(), object->volumes.end(), volume) != object->volumes.end()); + for (const ModelVolume *part : object->volumes) { + CHECK(part->mesh().facets_count() == 12); + CHECK_FALSE(part->is_splittable()); + } +} + +TEST_CASE("Splitting a part with a single solid piece keeps just that piece", "[Model]") +{ + Model model; + ModelObject *object = model.add_object(); + ModelVolume *volume = object->add_volume(flat_triangle_then_cubes({0.}), ModelVolumeType::MODEL_PART, false); + + CHECK(volume->split(1, false) == 1); + REQUIRE(object->volumes.size() == 1); + CHECK(object->volumes.front() == volume); + CHECK(volume->mesh().facets_count() == 12); +} + +TEST_CASE("Splitting a part made only of pieces enclosing no volume leaves it whole", "[Model]") +{ + Model model; + ModelObject *object = model.add_object(); + indexed_triangle_set its; + its.vertices = {{0.f, 0.f, 0.f}, {10.f, 0.f, 0.f}, {5.f, 5.f, 0.f}, {20.f, 0.f, 0.f}, {30.f, 0.f, 0.f}, {25.f, 5.f, 0.f}}; + its.indices = {{0, 1, 2}, {3, 4, 5}}; + ModelVolume *volume = object->add_volume(TriangleMesh(its), ModelVolumeType::MODEL_PART, false); + + CHECK(volume->split(1, false) == 1); + REQUIRE(object->volumes.size() == 1); + CHECK(object->volumes.front() == volume); + CHECK(volume->mesh().facets_count() == 2); +} + +TEST_CASE("Replacing a part's mesh updates whether it can be split", "[Model]") +{ + Model model; + ModelObject *object = model.add_object(); + TriangleMesh two_cubes = make_cube(10, 10, 10); + TriangleMesh second = make_cube(10, 10, 10); + second.translate(30.f, 0.f, 0.f); + two_cubes.merge(second); + ModelVolume *volume = object->add_volume(std::move(two_cubes), ModelVolumeType::MODEL_PART, false); + REQUIRE(volume->is_splittable()); + + volume->set_mesh(make_cube(10, 10, 10)); + CHECK_FALSE(volume->is_splittable()); +} + +TEST_CASE("Repairing a part replaces its mesh only when the repair changes it", "[Model]") +{ + Model model; + ModelObject *object = model.add_object(); + TriangleMesh flipped = make_cube(10, 10, 10); + std::swap(flipped.its.indices.front()[1], flipped.its.indices.front()[2]); + ModelVolume *broken = object->add_volume(std::move(flipped), ModelVolumeType::MODEL_PART, false); + TriangleMesh cube = make_cube(10, 10, 10); + cube.translate(30.f, 0.f, 0.f); + ModelVolume *valid = object->add_volume(std::move(cube), ModelVolumeType::MODEL_PART, false); + const ObjectID broken_id = broken->id(); + const ObjectID valid_id = valid->id(); + + MeshRepairStats stats; + REQUIRE(broken->repair(false, &stats)); + CHECK(stats.modified); + CHECK(broken->id() != broken_id); + CHECK_THAT(its_volume(broken->mesh().its), Catch::Matchers::WithinRel(1000., 1e-6)); + CHECK_FALSE(broken->get_convex_hull().empty()); + + REQUIRE(valid->repair(false, &stats)); + CHECK_FALSE(stats.modified); + CHECK(valid->id() == valid_id); +} diff --git a/tests/libslic3r/test_step.cpp b/tests/libslic3r/test_step.cpp index 5d843499fa..ff8ce1dcba 100644 --- a/tests/libslic3r/test_step.cpp +++ b/tests/libslic3r/test_step.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include "libslic3r/Model.hpp" @@ -91,6 +92,26 @@ TEST_CASE("A cone with a slightly tilted seam imports as a closed mesh", "[Step] CHECK(its_num_open_edges(model.objects.front()->volumes.front()->mesh().its) == 0); } +// The fixture holds two trimmed planes in a geometric set and no shells or solids, as some CAD exporters write +// surface models, so OCCT reads it as a compound of loose faces. +TEST_CASE("A surface model imports whether or not compounds are split", "[Step]") +{ + const std::string path = std::string(TEST_DATA_DIR) + PATH_SEPARATOR "surface_model_geometric_set.step"; + const bool split = GENERATE(false, true); + CAPTURE(split); + + Model model; + bool cancel = false; + Step step(path); + + REQUIRE(step.load() == Step::Step_Status::LOAD_SUCCESS); + REQUIRE(step.mesh(&model, cancel, split) == Step::Step_Status::MESH_SUCCESS); + + REQUIRE(model.objects.size() == 1); + REQUIRE(model.objects.front()->volumes.size() == 1); + CHECK(model.objects.front()->volumes.front()->mesh().facets_count() > 0); +} + TEST_CASE("isUtf8 recognises two, three and four byte sequences", "[Step]") { CHECK(StepPreProcessor::isUtf8("\xC3\xA9")); // U+00E9 From 237586675f31378fc0b3e7144715b1c79280231a Mon Sep 17 00:00:00 2001 From: Downtime Date: Mon, 12 Oct 2026 20:01:57 -0500 Subject: [PATCH 031/137] fix(gui): remove legacy fixed-function OpenGL texture calls (#16270) Debug builds asserted on startup because these calls raise GL errors on a core-profile context. Both draws already use shaders, so removing the calls changes nothing on compatibility contexts. --- src/slic3r/GUI/GLTexture.cpp | 4 ---- src/slic3r/GUI/PartPlate.cpp | 7 ------- 2 files changed, 11 deletions(-) diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index f83dd1f854..90cae850c9 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -719,9 +719,6 @@ void GLTexture::render_sub_texture(unsigned int tex_id, float left, float right, // does not treat anti-aliased icon edges as window transparency. glsafe(::glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)); - glsafe(::glEnable(GL_TEXTURE_2D)); - glsafe(::glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE)); - glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)tex_id)); GLModel::Geometry init_data; @@ -753,7 +750,6 @@ void GLTexture::render_sub_texture(unsigned int tex_id, float left, float right, glsafe(::glBindTexture(GL_TEXTURE_2D, 0)); - glsafe(::glDisable(GL_TEXTURE_2D)); glsafe(::glDisable(GL_BLEND)); } diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 3bf53ecb73..d5d9fb5b8a 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1880,13 +1880,6 @@ void PartPlate::render_exclude_area(bool force_default_color) { // draw exclude area glsafe(::glDepthMask(GL_FALSE)); - if (m_selected) { - glsafe(::glColor4fv(select_color.data())); - } - else { - glsafe(::glColor4fv(unselect_color.data())); - } - m_exclude_triangles.set_color(m_selected ? select_color : unselect_color); m_exclude_triangles.render(); glsafe(::glDepthMask(GL_TRUE)); From b920116fbd68781652a868fccc1e84718409c1f8 Mon Sep 17 00:00:00 2001 From: hikaru0602 <72114035+hikaru0602@users.noreply.github.com> Date: Tue, 13 Oct 2026 10:03:04 +0900 Subject: [PATCH 032/137] Fix manual tool change handling when loading G-code files (#15379) Opened or drag-dropped G-code files ignored `; MANUAL_TOOL_CHANGE` comments, so the preview showed every move on the first filament. Only `apply_config(const PrintConfig&)` read `manual_filament_change`, and loading a file goes through `apply_config(const DynamicPrintConfig&)`. Read the option there too, initialize the flag to false, and add a regression test. --- src/libslic3r/GCode/GCodeProcessor.cpp | 4 ++ src/libslic3r/GCode/GCodeProcessor.hpp | 2 +- tests/fff_print/test_gcodeprocessor.cpp | 55 +++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 8e7d5e7557..f41a4443fb 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -3598,6 +3598,10 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config) if (has_scarf_joint_seam != nullptr) m_detect_layer_based_on_tag = m_detect_layer_based_on_tag || has_scarf_joint_seam->value; + const ConfigOptionBool* manual_filament_change = config.option("manual_filament_change"); + if (manual_filament_change != nullptr) + m_manual_filament_change = manual_filament_change->value; + const ConfigOptionEnumGeneric *bed_type = config.option("curr_bed_type"); if (bed_type != nullptr) m_result.bed_type = (BedType)bed_type->value; diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index f5b9985f0e..270aceb1c3 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -1228,7 +1228,7 @@ inline constexpr float DEFAULT_FILAMENT_DENSITY = 1.245f; // m_result.nozzle_group_result, which is handed over only after the stream for the // pre-heat injector's second pass and gates the richer change-time model. std::shared_ptr m_nozzle_group_result; - bool m_manual_filament_change; + bool m_manual_filament_change{ false }; //BBS: x, y offset for gcode generated double m_x_offset{ 0 }; diff --git a/tests/fff_print/test_gcodeprocessor.cpp b/tests/fff_print/test_gcodeprocessor.cpp index 0be8cc1c12..48cf3e8ae9 100644 --- a/tests/fff_print/test_gcodeprocessor.cpp +++ b/tests/fff_print/test_gcodeprocessor.cpp @@ -178,6 +178,61 @@ bool is_block_move(const GCodeProcessorResult::MoveVertex &move) } // namespace +TEST_CASE("Loaded manual tool change comments switch subsequent moves when enabled", "[GCodeProcessor][Regression]") +{ + const bool manual_filament_change = GENERATE(false, true); + CAPTURE(manual_filament_change); + const DynamicPrintConfig config = Test::multifilament_config(2, { + { "gcode_flavor", "marlin" }, + { "filament_type", "PLA;PETG" }, + { "manual_filament_change", manual_filament_change }, + }); + const bool was_bbl_printer = GCodeProcessor::s_IsBBLPrinter; + const ScopeGuard restore_bbl_printer([was_bbl_printer] { GCodeProcessor::s_IsBBLPrinter = was_bbl_printer; }); + GCodeProcessor::s_IsBBLPrinter = false; + + ScopedTemporaryFile temp(".gcode"); + { + std::ofstream out(temp.string()); + REQUIRE(out.is_open()); + out << "; generated by OrcaSlicer\n" + << "G90\nM83\nT0\n" + << "G1 X10 Y10 Z0.2 F3000\n" + << "G1 X20 E1\n" + << "; MANUAL_TOOL_CHANGE T1\n" + << "G1 X30\nG1 X40 E1\nG1 X50\nG1 X60 E1\n"; + // Let process_file load the embedded DynamicPrintConfig, as the standalone viewer does. + out << "; CONFIG_BLOCK_START\n"; + for (const std::string &key : config.keys()) + out << "; " << key << " = " << config.opt_serialize(key) << '\n'; + out << "; CONFIG_BLOCK_END\n"; + REQUIRE(out.good()); + } + + GCodeProcessor processor; + processor.process_file(temp.string()); + const auto &result = processor.get_result(); + REQUIRE(result.filaments_count == 2); + + constexpr unsigned int tool_change_line = 7; + size_t before = 0; + size_t after = 0; + for (const auto &move : result.moves) { + if (!is_block_move(move)) + continue; + CAPTURE(move.gcode_id, move.type); + if (move.gcode_id < tool_change_line) { + ++before; + CHECK(move.extruder_id == 0); + } else if (move.gcode_id > tool_change_line) { + ++after; + CHECK(move.extruder_id == (manual_filament_change ? 1 : 0)); + } + } + REQUIRE(before > 0); + REQUIRE(after > 0); +} + TEST_CASE("Actual speed moves are inserted on their block's segment just before its move", "[GCodeProcessor]") { // 60 squares take several planner passes, which remap the blocks kept between passes. From 869e450981bb8bece1622ef3fd55381962af11b3 Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:59:48 +0800 Subject: [PATCH 033/137] Keep Per-Nozzle Values When a User Preset Syncs Through the Cloud (#16355) The cloud upload sent only the keys that differ from the parent, so a variant layout equal to the parent's was left out. On download the loader sized every per-variant value by the missing layout, cut it to one value and kept the parent's values for the other nozzles and nozzle volume types. On dual-nozzle printers the right nozzle's settings silently reverted to the parent's after a sync. Upload the variant layout always, as the local save already does, and read copies stored without it against the parent's layout when they carry one value per parent variant. --- src/libslic3r/Preset.cpp | 41 +++++-- .../libslic3r/test_preset_bundle_loading.cpp | 100 ++++++++++++++++++ 2 files changed, 135 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 78fa0785ef..19110cd2d2 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -2164,6 +2164,16 @@ int PresetCollection::get_differed_values_to_update(Preset& preset, std::map dirty_options = preset.config.diff(parent_preset->config); + // Send the variant layout even when it matches the parent's, as the local save does: the loader + // sizes the per-variant values by it and would otherwise keep only the first one. + std::string extruder_id_name, extruder_variant_name; + std::set *key_set1 = nullptr, *key_set2 = nullptr; + Preset::get_extruder_names_and_keysets(m_type, extruder_id_name, extruder_variant_name, &key_set1, &key_set2); + if (!extruder_id_name.empty()) + dirty_options.emplace_back(extruder_id_name); + if (!extruder_variant_name.empty()) + dirty_options.emplace_back(extruder_variant_name); + for (auto option: dirty_options) { ConfigOption *opt_src = preset.config.option(option); @@ -2628,15 +2638,34 @@ bool PresetCollection::load_user_preset(std::string name, std::map *key_set1 = nullptr, *key_set2 = nullptr; + Preset::get_extruder_names_and_keysets(m_type, extruder_id_name, extruder_variant_name, &key_set1, &key_set2); + + // Older uploads left out a variant layout equal to the parent's but still sent one value per + // parent variant. Read those values against the parent's layout instead of cutting them to one. + if (inherit_preset && !cloud_config.has(extruder_variant_name)) { + const auto *parent_variants = inherit_preset->config.option(extruder_variant_name); + const size_t variant_count = parent_variants ? parent_variants->size() : 0; + bool values_per_variant = false; + for (const std::string &key : cloud_config.keys()) { + const size_t stride = key_set2->count(key) ? 2 : key_set1->count(key) ? 1 : 0; + const auto *values = dynamic_cast(cloud_config.option(key)); + if (stride > 0 && key != extruder_id_name && values && variant_count > 1 && values->size() == variant_count * stride) { + values_per_variant = true; + break; + } + } + if (values_per_variant) + for (const std::string &key : {extruder_id_name, extruder_variant_name}) + if (!key.empty() && !cloud_config.has(key) && inherit_preset->config.has(key)) + cloud_config.set_key_value(key, inherit_preset->config.option(key)->clone()); + } + extend_default_config_length(cloud_config, false, {}); - if (inherit_preset) { - std::string extruder_id_name, extruder_variant_name; - std::set *key_set1 = nullptr, *key_set2 = nullptr; - Preset::get_extruder_names_and_keysets(m_type, extruder_id_name, extruder_variant_name, &key_set1, &key_set2); - + if (inherit_preset) new_config.update_diff_values_to_child_config(cloud_config, extruder_id_name, extruder_variant_name, *key_set1, *key_set2); - } else{ new_config.apply(std::move(cloud_config)); extend_default_config_length(new_config, true, default_preset.config); diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 02d607650f..342b5343e4 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -37,6 +37,7 @@ #include #include "libslic3r/Config.hpp" #include +#include #include "libslic3r/libslic3r.h" #include "libslic3r/PublishSettings.hpp" #include @@ -333,6 +334,105 @@ TEST_CASE("A directory of user presets loads with each one resolved against its } } +TEST_CASE("A user preset synced to the cloud and back keeps its values on every nozzle variant", "[Preset][Bundle]") +{ + // Two extruders with a Standard and a High Flow variant each, as on a dual-nozzle printer. + auto add_parent = [](PresetCollection &coll) { + Preset &parent = add_inmemory_preset(coll, "Parent Process"); + parent.config.set_key_value("print_extruder_variant", + new ConfigOptionStrings({"Direct Drive Standard", "Direct Drive High Flow", "Direct Drive Standard", "Direct Drive High Flow"})); + parent.config.set_key_value("print_extruder_id", new ConfigOptionInts({1, 1, 2, 2})); + parent.config.set_deserialize_strict("outer_wall_speed", "50,50,50,50"); + parent.is_system = true; + parent.setting_id = "parent-id"; + return parent.config; + }; + + RenameTestCollection local; + const DynamicPrintConfig parent_config = add_parent(local); + Preset &child = add_inmemory_preset(local, "User Process", "Parent Process"); + child.config.apply_only(parent_config, {"print_extruder_variant", "print_extruder_id"}); + child.config.set_deserialize_strict("outer_wall_speed", "11,12,21,22"); + child.version = Semver(1, 0, 0); + + std::map uploaded; + REQUIRE(local.get_differed_values_to_update(child, uploaded) == 0); + uploaded[BBL_JSON_KEY_SETTING_ID] = "child-id"; + uploaded[BBL_JSON_KEY_USER_ID] = "user"; + + // A cloud copy stored before uploads carried the variant layout holds the values alone. + std::map stored_without_layout = uploaded; + stored_without_layout.erase("print_extruder_variant"); + stored_without_layout.erase("print_extruder_id"); + // One saved while the parent had a single variant covers the first extruder only. + std::map stored_single_value = stored_without_layout; + stored_single_value["outer_wall_speed"] = "11"; + + struct Case { const char *label; std::map values; const char *expected; }; + for (const Case &c : {Case{"current upload", uploaded, "11,12,21,22"}, + Case{"stored without layout", stored_without_layout, "11,12,21,22"}, + Case{"stored with a single value", stored_single_value, "11,11,50,50"}}) { + DYNAMIC_SECTION(c.label) { + RenameTestCollection downloaded; + PresetsConfigSubstitutions substitutions; + add_parent(downloaded); + REQUIRE(downloaded.load_user_preset("User Process", c.values, substitutions, ForwardCompatibilitySubstitutionRule::Disable)); + + const Preset *synced = downloaded.find_preset("User Process"); + REQUIRE(synced != nullptr); + CHECK(synced->config.opt_serialize("outer_wall_speed") == c.expected); + } + } +} + +TEST_CASE("A user filament synced to the cloud and back keeps its values and unset overrides on every variant", "[Preset][Bundle]") +{ + auto add_parent = [](PresetCollection &coll) { + Preset &parent = add_inmemory_preset(coll, "Parent Filament"); + parent.config.set_key_value("filament_extruder_variant", + new ConfigOptionStrings({"Direct Drive Standard", "Direct Drive High Flow"})); + parent.config.set_deserialize_strict("nozzle_temperature", "220,220"); + parent.config.set_deserialize_strict("filament_retraction_length", "nil,nil"); + parent.is_system = true; + parent.setting_id = "parent-id"; + return parent.config; + }; + auto make_collection = [] { + return std::make_unique(Preset::TYPE_FILAMENT, Preset::filament_options(), + static_cast(FullPrintConfig::defaults())); + }; + + auto local = make_collection(); + add_parent(*local); + Preset &child = add_inmemory_preset(*local, "User Filament", "Parent Filament"); + child.config.apply_only(add_parent(*make_collection()), {"filament_extruder_variant"}); + child.config.set_deserialize_strict("nozzle_temperature", "200,210"); + child.config.set_deserialize_strict("filament_retraction_length", "1.2,nil"); + child.version = Semver(1, 0, 0); + + std::map uploaded; + REQUIRE(local->get_differed_values_to_update(child, uploaded) == 0); + uploaded[BBL_JSON_KEY_SETTING_ID] = "child-id"; + uploaded[BBL_JSON_KEY_USER_ID] = "user"; + std::map stored_without_layout = uploaded; + stored_without_layout.erase("filament_extruder_variant"); + + for (const auto &[label, values] : {std::make_pair("current upload", uploaded), + std::make_pair("stored without layout", stored_without_layout)}) { + DYNAMIC_SECTION(label) { + auto downloaded = make_collection(); + PresetsConfigSubstitutions substitutions; + add_parent(*downloaded); + REQUIRE(downloaded->load_user_preset("User Filament", values, substitutions, ForwardCompatibilitySubstitutionRule::Disable)); + + const Preset *synced = downloaded->find_preset("User Filament"); + REQUIRE(synced != nullptr); + CHECK(synced->config.opt_serialize("nozzle_temperature") == "200,210"); + CHECK(synced->config.opt_serialize("filament_retraction_length") == "1.2,nil"); + } + } +} + TEST_CASE("Repeated loads of a user preset directory produce the same presets", "[Preset][Bundle]") { ScopedTemporaryDir temp_dir; From 01499e536ed68cad6d1eabe80bbc672bfb42201a Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 13 Oct 2026 15:00:18 +0800 Subject: [PATCH 034/137] fix(gui): stop the UV editor pane from hijacking the shared GL context The texture-displacement gizmo pushes pane state to the UV editor from the preview rebuild that runs on every frame of a slider drag. Tile size is the only one of the layer card's sliders whose value appears in that pane state, so dragging it changes the "N.N mm tile" label, the panel relays out, and the UV canvas receives a synchronous wxEVT_SIZE. Its on_size() flushes a paint with Update(), and render() then makes the app's single shared wxGLContext current on the UV drawable in the middle of the 3D canvas's frame. On X11/GLX that out-of-turn context activation is fatal: the drawable the 3D canvas later swaps no longer belongs to the current context, the server returns BadMatch, and GDK turns the unhandled X error into g_error(). EGL on Wayland reports only a status, so the same theft silently corrupts the frame instead of aborting - which is why the guard is not conditioned on the display backend. Add GLCanvas3D::is_frame_in_progress(), backed by a counter that _render_frame() maintains through its existing scope guard, and let the UV canvas skip the synchronous paint while a frame is on the stack, re-queueing it with Refresh() so nothing is dropped. Rebind the context with _set_current() before SwapBuffers() as well, so a surface that steals it by some other route - a modal GL dialog a gizmo opens from its panel - cannot turn the swap into the same fatal error. --- src/slic3r/GUI/GLCanvas3D.cpp | 25 ++++++++++++++++++++++--- src/slic3r/GUI/GLCanvas3D.hpp | 7 +++++++ src/slic3r/GUI/UVEditorCanvas.cpp | 18 +++++++++++++++++- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index c509e5d6f8..2e429dda20 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1514,6 +1514,8 @@ wxDEFINE_EVENT(EVT_GLCANVAS_PRINTABLE, SimpleEvent); const double GLCanvas3D::DefaultCameraZoomToBoxMarginFactor = 1.25; const double GLCanvas3D::DefaultCameraZoomToBedMarginFactor = 2.00; const double GLCanvas3D::DefaultCameraZoomToPlateMarginFactor = 1.25; +// Main-thread only: _render_frame never runs off it, so no atomic is needed. +int GLCanvas3D::s_frames_in_progress = 0; void GLCanvas3D::load_arrange_settings() { @@ -2468,7 +2470,8 @@ void GLCanvas3D::_render_frame(bool scene_dirty, bool only_init) } m_in_render = true; - Slic3r::ScopeGuard in_render_guard([this]() { m_in_render = false; }); + ++s_frames_in_progress; + Slic3r::ScopeGuard in_render_guard([this]() { m_in_render = false; --s_frames_in_progress; }); (void)in_render_guard; if (m_canvas == nullptr) @@ -2713,15 +2716,31 @@ void GLCanvas3D::_render_frame(bool scene_dirty, bool only_init) // On Wayland, eglSwapBuffers blocks when the canvas is hidden or // occluded. Skip the swap to avoid stalling the render loop. - if (m_canvas->IsShownOnScreen()) { + // Code run from inside this frame - a modal dialog a gizmo opened from its ImGui panel, a + // synchronous paint of another canvas - may have made a different surface current. Bind this one + // again before presenting, so the swap is not issued against a window the context no longer + // belongs to: on Mesa/X11 that is a fatal BadMatch, not the no-op it is on other platforms. Draws + // already issued before this point cannot be redirected - only this swap is protected. + if (m_canvas->IsShownOnScreen() && _set_current()) { m_canvas->SwapBuffers(); m_frame_profiler.mark("swap"); if (!overlay_tick) m_render_stats.increment_fps_counter(); m_presented_signature = signature; } - else + else { + if (m_canvas->IsShownOnScreen()) { + // Logged once: if the rebind fails it does so every frame, and a warning per frame would + // bury everything else. + static bool rebind_failure_logged = false; + if (!rebind_failure_logged) { + rebind_failure_logged = true; + BOOST_LOG_TRIVIAL(warning) << "GLCanvas3D: could not rebind the GL context to this canvas before " + "SwapBuffers(); the frame is not presented"; + } + } m_presented_signature.reset(); + } } // Everything drawn into the 3D scene, from the clear to the post processing passes, ending in the diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index bb148234d1..2cb6bcea4f 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -643,6 +643,8 @@ private: #endif unsigned int m_last_w, m_last_h; bool m_in_render; + // How many canvases are inside _render_frame() right now - see is_frame_in_progress(). + static int s_frames_in_progress; wxTimer m_timer; wxTimer m_timer_set_color; // Armed by each frame that draws the FPS overlay; its tick requests an overlay-only frame. @@ -974,6 +976,11 @@ public: void on_change_color_mode(bool is_dark, bool reinit = true); const bool get_dark_mode_status() { return m_is_dark; } void set_as_dirty() { m_dirty = true; } + // True while any GLCanvas3D is inside _render_frame(). The other surfaces that share the app's one + // GL context (the UV editor canvas) check this before making themselves current: a frame interrupted + // by another surface finishes drawing into that surface and then presents a window the context no + // longer belongs to, which on Mesa/X11 is a fatal X error (BadMatch) rather than a no-op. + static bool is_frame_in_progress() { return s_frames_in_progress > 0; } void requires_check_outside_state() { m_requires_check_outside_state = true; } unsigned int get_volumes_count() const { return (unsigned int)m_volumes.volumes.size(); } diff --git a/src/slic3r/GUI/UVEditorCanvas.cpp b/src/slic3r/GUI/UVEditorCanvas.cpp index a4a9901822..87f629816f 100644 --- a/src/slic3r/GUI/UVEditorCanvas.cpp +++ b/src/slic3r/GUI/UVEditorCanvas.cpp @@ -36,6 +36,7 @@ #include "3DScene.hpp" #include "BitmapCache.hpp" +#include "GLCanvas3D.hpp" #include "GLShader.hpp" #include "GUI_App.hpp" #include "I18N.hpp" @@ -1324,8 +1325,13 @@ void UVEditorCanvas::on_size(wxSizeEvent &evt) // Update() flushes it immediately - still through the normal paint path (unlike calling // render() directly), which matters because this canvas shares the app's one GL context with // the 3D view and must not hijack it outside its own paint. + // Not while a 3D canvas frame is in progress, though: wxGTK delivers this size event synchronously + // when the texture displacement gizmo relays out the pane from its ImGui panel, i.e. from inside + // that frame, and flushing the paint there would take the shared context away from it. The Refresh() + // then runs the paint once the frame is over. Refresh(); - Update(); + if (!GLCanvas3D::is_frame_in_progress()) + Update(); } void UVEditorCanvas::on_leave(wxMouseEvent &evt) @@ -1346,6 +1352,16 @@ void UVEditorCanvas::render() { if (m_context == nullptr || !IsShownOnScreen()) return; + // Painted from inside a 3D canvas frame - a modal dialog the gizmo opened from its ImGui panel runs + // this paint, as does any other synchronous event raised there. Making this surface current now + // would take the shared context away from that canvas mid-frame: its remaining draws would land + // here and, on Mesa/X11, its SwapBuffers() would be a fatal BadMatch. Skip, but ask for another + // paint so the skipped one is not simply lost. The pane stays stale for as long as a nested modal + // loop keeps a frame on the stack, which is behind the dialog anyway. + if (GLCanvas3D::is_frame_in_progress()) { + Refresh(); + return; + } // wxGLCanvas::SetCurrent() genuinely fails (returns false) on a canvas that isn't shown on // screen, and can also fail on a pixel-format mismatch with the context - and every GL call From bf5a3784790d2819eca304f938f0301613e1becf Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 13 Oct 2026 18:05:51 +0800 Subject: [PATCH 035/137] Free G-code result buffers with clear_and_shrink --- src/libslic3r/GCode/GCodeProcessor.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 243aa514cd..9d166805a5 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -2602,16 +2602,13 @@ void GCodeProcessorResult::reset() { //BBS: add mutex for protection of gcode result lock(); - // release rather than clear: these two are sized by the print - one entry per move and one - // per g-code line - and a reset is where the memory is expected to go back to the allocator - // (see BackgroundSlicingProcess::apply()). The capacity would not be reused anyway: the - // result is refilled by move-assigning the processor's own result. - moves = std::vector(); + // moves and lines_ends grow with the print: free them, as no reset result reuses the capacity. + clear_and_shrink(moves); plate_mass = {}; object_masses.clear(); body_masses.clear(); support_masses.clear(); - lines_ends = std::vector(); + clear_and_shrink(lines_ends); printable_area = Pointfs(); //BBS: add bed exclude area bed_exclude_area = Pointfs(); From af29e4d553860ad82f72cf43738ef946c1adad77 Mon Sep 17 00:00:00 2001 From: ExPikaPaka <112851715+ExPikaPaka@users.noreply.github.com> Date: Tue, 13 Oct 2026 12:45:21 +0200 Subject: [PATCH 036/137] Image adjustment panel for texture displacement layers (#16391) --- src/libslic3r/TextureDisplacement.cpp | 255 +++++++++++- src/libslic3r/TextureDisplacement.hpp | 74 ++++ .../GUI/Gizmos/GLGizmoTextureDisplacement.cpp | 373 +++++++++++++++++- .../GUI/Gizmos/GLGizmoTextureDisplacement.hpp | 67 ++++ src/slic3r/GUI/TextureLibrary.cpp | 107 +++-- src/slic3r/GUI/TextureLibrary.hpp | 10 + tests/libslic3r/test_texture_displacement.cpp | 289 ++++++++++++++ 7 files changed, 1141 insertions(+), 34 deletions(-) diff --git a/src/libslic3r/TextureDisplacement.cpp b/src/libslic3r/TextureDisplacement.cpp index aba998bbbf..0153bb169b 100644 --- a/src/libslic3r/TextureDisplacement.cpp +++ b/src/libslic3r/TextureDisplacement.cpp @@ -158,12 +158,33 @@ struct SmoothedTextureCache { std::weak_ptr> source; float smoothing = 0.f; + // Part of the key, not of the result: smoothing is applied *after* the panel's adjustments, so a + // blur computed over one set of adjustments is not the blur another set would give. + TextureAdjustments adjust; DecodedHeightTexture texture; }; std::mutex mutex; std::unordered_map entries; }; SmoothedTextureCache g_smoothed_texture_cache; + +// The adjusted copy, cached between the raw decode and the smoothed one. Needed for the same reason the +// smoothed cache is: while a slider in the image-adjustment panel moves, the thumbnail, the shaded +// preview's height and colour textures, the UV editor backdrop and the displacement preview job all ask +// for the same (image, adjustments) pair within one frame, and each of them running a full-size resample +// of its own is what would make the panel unusable on a large texture. +struct AdjustedTextureCache +{ + struct Entry + { + std::weak_ptr> source; + TextureAdjustments adjust; + DecodedHeightTexture texture; + }; + std::mutex mutex; + std::unordered_map entries; +}; +AdjustedTextureCache g_adjusted_texture_cache; } // namespace namespace { @@ -339,6 +360,34 @@ DecodedHeightTexture decode_height_texture(const TextureDisplacementLayer &layer entries[key] = { std::weak_ptr>(layer.image_data), result }; } + // The image-adjustment panel's live edits, on top of the decode and before the smoothing. Before, + // because `preview_adjust` is an edit to the image while `smoothing` is a live low-pass over whatever + // the image is - the same order the panel presents them in, and the same order a commit bakes in. + // + // Nothing applies here once the panel has closed: it resets preview_adjust to identity, and identity + // is a no-op that costs one comparison. + if (!layer.preview_adjust.identity()) { + bool have_adjusted = false; + { + std::lock_guard lock(g_adjusted_texture_cache.mutex); + auto it = g_adjusted_texture_cache.entries.find(key); + if (it != g_adjusted_texture_cache.entries.end() && it->second.adjust == layer.preview_adjust && + it->second.source.lock() == layer.image_data) { + result = it->second.texture; + have_adjusted = true; + } + } + if (!have_adjusted) { + result = apply_texture_adjustments(result, layer.preview_adjust); + std::lock_guard lock(g_adjusted_texture_cache.mutex); + auto &entries = g_adjusted_texture_cache.entries; + for (auto it = entries.begin(); it != entries.end();) + it = it->second.source.expired() ? entries.erase(it) : std::next(it); + entries[key] = { std::weak_ptr>(layer.image_data), + layer.preview_adjust, result }; + } + } + // Smoothing radius scales with the texture so the same slider value blurs the same *fraction* of // the image whatever resolution it came in at, and stays continuous in the slider - see // smooth_height_pixels(). The cap is a cost limit, not part of the mapping: the blur is @@ -349,7 +398,7 @@ DecodedHeightTexture decode_height_texture(const TextureDisplacementLayer &layer std::lock_guard lock(g_smoothed_texture_cache.mutex); auto it = g_smoothed_texture_cache.entries.find(key); if (it != g_smoothed_texture_cache.entries.end() && it->second.smoothing == layer.smoothing && - it->second.source.lock() == layer.image_data) + it->second.adjust == layer.preview_adjust && it->second.source.lock() == layer.image_data) return it->second.texture; } const float span = 0.05f * float(std::min(result.width, result.height)); @@ -373,12 +422,70 @@ DecodedHeightTexture decode_height_texture(const TextureDisplacementLayer &layer auto &entries = g_smoothed_texture_cache.entries; for (auto it = entries.begin(); it != entries.end();) it = it->second.source.expired() ? entries.erase(it) : std::next(it); - entries[key] = { std::weak_ptr>(layer.image_data), layer.smoothing, result }; + entries[key] = { std::weak_ptr>(layer.image_data), layer.smoothing, + layer.preview_adjust, result }; } return result; } namespace { +// Fraction of the short side that TextureAdjustments::blur == 1 blurs over, and the cost cap on it. +// Deliberately the same pair decode_height_texture() uses for the Smoothing slider - see +// adjustment_blur_radius(). +constexpr float SOURCE_BLUR_SPAN = 0.05f; +constexpr float SOURCE_BLUR_MAX_PX = 48.f; + +// Radius of the unsharp mask's blurred reference, in texels. Small and only mildly resolution-dependent: +// a sharpen is meant to act on the finest detail the image holds, so its radius tracks the texel grid +// rather than the picture's size. 1024x1024 gives ~2 texels, the usual photo-editor default. +float unsharp_radius(int width, int height) +{ + return std::max(1.f, 0.002f * float(std::min(width, height))); +} + +// Brightness as a *lift* toward white (or toward black) rather than an additive offset: positive b maps +// v to v + b*(1 - v), negative to v*(1 + b). Both reach the endpoint exactly at |b| == 1 while staying +// monotonic and non-clipping in between, which an additive shift does not - it drives a whole region to +// a flat 255 and, because this image is also the height map, that region bakes as flat relief rather +// than as bright relief. Keeping the curve injective keeps the detail in it. +float apply_brightness(float v, float b) +{ + return b >= 0.f ? v + b * (1.f - v) : v * (1.f + b); +} + +// Contrast about the 0.5 pivot. Gain is 1/(1-c) going up (c == 1 would be an infinite-slope threshold, so +// the caller's clamp keeps it finite) and 1+c going down, reaching a flat mid-grey at c == -1. +float apply_contrast(float v, float c) +{ + const float gain = c >= 0.f ? 1.f / std::max(1e-3f, 1.f - c) : 1.f + c; + return (v - 0.5f) * gain + 0.5f; +} + +// Blur then sharpen one 8-bit channel in place. Shared by the grayscale path and by each of a colour +// image's three channels, so every channel gets the identical spatial treatment and a colour image's +// hue cannot shift just because its channels were filtered differently. +void adjust_channel_spatial(std::vector &channel, int width, int height, float blur, float sharpness) +{ + if (blur > 0.f) + smooth_height_pixels(channel, width, height, adjustment_blur_radius(blur, width, height)); + + if (sharpness <= 0.f) + return; + + // Unsharp mask: push each texel away from its local average by `amount` times the difference. The + // blurred reference is a copy, so the sharpen reads the un-sharpened neighbourhood everywhere rather + // than its own partly-written output. + std::vector base = channel; + smooth_height_pixels(base, width, height, unsharp_radius(width, height)); + const float amount = 1.5f * std::clamp(sharpness, 0.f, 1.f); + tbb::parallel_for(tbb::blocked_range(0, channel.size()), [&](const tbb::blocked_range &r) { + for (size_t i = r.begin(); i < r.end(); ++i) { + const float v = float(channel[i]) + amount * (float(channel[i]) - float(base[i])); + channel[i] = uint8_t(std::lround(std::clamp(v, 0.f, 255.f))); + } + }); +} + struct TextureDetailCache { std::mutex mutex; @@ -387,6 +494,150 @@ struct TextureDetailCache TextureDetailCache g_texture_detail_cache; } // namespace +float adjustment_blur_radius(float blur, int width, int height) +{ + if (blur <= 0.f || width <= 0 || height <= 0) + return 0.f; + const float span = SOURCE_BLUR_SPAN * float(std::min(width, height)); + return std::clamp(blur, 0.f, 1.f) * std::min(span, SOURCE_BLUR_MAX_PX); +} + +DecodedHeightTexture downscale_height_texture(const DecodedHeightTexture &src, int max_px) +{ + if (src.empty() || max_px <= 0 || (src.width <= max_px && src.height <= max_px)) + return src; + + const int scale = std::max(1, (std::max(src.width, src.height) + max_px - 1) / max_px); + const int w = std::max(1, src.width / scale); + const int h = std::max(1, src.height / scale); + const bool color = src.has_color(); + + DecodedHeightTexture out; + out.width = w; + out.height = h; + out.pixels.resize(size_t(w) * size_t(h)); + if (color) + out.rgb.resize(size_t(w) * size_t(h) * 3); + + tbb::parallel_for(tbb::blocked_range(0, h), [&](const tbb::blocked_range &r) { + for (int y = r.begin(); y < r.end(); ++y) + for (int x = 0; x < w; ++x) { + // The source block this destination texel covers. The max() keeps the block non-empty + // when rounding would otherwise collapse it. + const int x0 = x * src.width / w, x1 = std::max(x0 + 1, (x + 1) * src.width / w); + const int y0 = y * src.height / h, y1 = std::max(y0 + 1, (y + 1) * src.height / h); + uint32_t sum_h = 0, sum_c[3] = { 0, 0, 0 }, n = 0; + for (int sy = y0; sy < y1 && sy < src.height; ++sy) + for (int sx = x0; sx < x1 && sx < src.width; ++sx, ++n) { + const size_t si = size_t(sy) * size_t(src.width) + size_t(sx); + sum_h += src.pixels[si]; + if (color) + for (int c = 0; c < 3; ++c) + sum_c[c] += src.rgb[si * 3 + size_t(c)]; + } + const size_t di = size_t(y) * size_t(w) + size_t(x); + out.pixels[di] = n > 0 ? uint8_t(sum_h / n) : 0; + if (color) + for (int c = 0; c < 3; ++c) + out.rgb[di * 3 + size_t(c)] = n > 0 ? uint8_t(sum_c[c] / n) : 0; + } + }); + return out; +} + +DecodedHeightTexture apply_texture_adjustments(const DecodedHeightTexture &src, const TextureAdjustments &adj) +{ + DecodedHeightTexture out = src; + if (src.empty() || adj.identity()) + return out; + + const int w = out.width; + const int h = out.height; + const size_t n = size_t(w) * size_t(h); + + const float brightness = std::clamp(adj.brightness, -1.f, 1.f); + // Short of 1, so apply_contrast()'s gain stays finite; at this value it is already a 1000x slope, + // i.e. a threshold in all but name. + const float contrast = std::clamp(adj.contrast, -1.f, 0.999f); + const float blur = std::clamp(adj.blur, 0.f, 1.f); + const float sharpness = std::clamp(adj.sharpness, 0.f, 1.f); + + // The tonal pass: a 256-entry lookup table, because brightness and contrast are the same scalar + // curve for every texel and every channel. Building it once beats evaluating two curves a few + // million times, and it is what keeps this pass off the panel's critical path. + std::array tone{}; + for (int i = 0; i < 256; ++i) { + float v = float(i) / 255.f; + v = apply_brightness(v, brightness); + v = apply_contrast(v, contrast); + tone[size_t(i)] = uint8_t(std::lround(std::clamp(v, 0.f, 1.f) * 255.f)); + } + + if (!out.has_color()) { + // Grayscale: one channel, and hue has nothing to turn. + tbb::parallel_for(tbb::blocked_range(0, n), [&](const tbb::blocked_range &r) { + for (size_t i = r.begin(); i < r.end(); ++i) + out.pixels[i] = tone[out.pixels[i]]; + }); + adjust_channel_spatial(out.pixels, w, h, blur, sharpness); + return out; + } + + // Colour: tone each channel through the same table, then rotate the hue about the luminance axis. + // + // The rotation is feColorMatrix's hueRotate matrix (SVG filters), which holds Rec.709 luma fixed. + // The height below is taken with decode_height_texture()'s Rec.601 coefficients instead, so a hue + // turn is not perfectly height-neutral - a few levels at full saturation. Reconciling the two would + // mean a different rotation than every other tool's, which is the worse trade: the user is watching + // the colour, and the height follows the colour by construction either way. + const float theta = adj.hue_deg * float(M_PI) / 180.f; + const float c = std::cos(theta); + const float s = std::sin(theta); + const float m[9] = { + 0.213f + c * 0.787f - s * 0.213f, 0.715f - c * 0.715f - s * 0.715f, 0.072f - c * 0.072f + s * 0.928f, + 0.213f - c * 0.213f + s * 0.143f, 0.715f + c * 0.285f + s * 0.140f, 0.072f - c * 0.072f - s * 0.283f, + 0.213f - c * 0.213f - s * 0.787f, 0.715f - c * 0.715f + s * 0.715f, 0.072f + c * 0.928f + s * 0.072f, + }; + const bool turn_hue = adj.hue_deg != 0.f; + + tbb::parallel_for(tbb::blocked_range(0, n), [&](const tbb::blocked_range &r) { + for (size_t i = r.begin(); i < r.end(); ++i) { + const float rr = float(tone[out.rgb[i * 3]]); + const float gg = float(tone[out.rgb[i * 3 + 1]]); + const float bb = float(tone[out.rgb[i * 3 + 2]]); + const float nr = turn_hue ? m[0] * rr + m[1] * gg + m[2] * bb : rr; + const float ng = turn_hue ? m[3] * rr + m[4] * gg + m[5] * bb : gg; + const float nb = turn_hue ? m[6] * rr + m[7] * gg + m[8] * bb : bb; + out.rgb[i * 3] = uint8_t(std::lround(std::clamp(nr, 0.f, 255.f))); + out.rgb[i * 3 + 1] = uint8_t(std::lround(std::clamp(ng, 0.f, 255.f))); + out.rgb[i * 3 + 2] = uint8_t(std::lround(std::clamp(nb, 0.f, 255.f))); + } + }); + + // The spatial pass wants one channel at a time (smooth_height_pixels() is a single-channel blur, and + // reusing it is what keeps this consistent with Smoothing), so de-interleave, filter, re-interleave. + if (blur > 0.f || sharpness > 0.f) { + std::vector channel(n); + for (int ch = 0; ch < 3; ++ch) { + for (size_t i = 0; i < n; ++i) + channel[i] = out.rgb[i * 3 + size_t(ch)]; + adjust_channel_spatial(channel, w, h, blur, sharpness); + for (size_t i = 0; i < n; ++i) + out.rgb[i * 3 + size_t(ch)] = channel[i]; + } + } + + // Height is the luminance of the colour that came out, not the toned luminance of the colour that + // went in: the two differ once hue rotation or a per-channel clamp has moved the channels around, + // and a height that disagrees with the colour it is stored next to is the bug this avoids. + tbb::parallel_for(tbb::blocked_range(0, n), [&](const tbb::blocked_range &r) { + for (size_t i = r.begin(); i < r.end(); ++i) + out.pixels[i] = uint8_t(std::lround(0.299 * out.rgb[i * 3] + 0.587 * out.rgb[i * 3 + 1] + + 0.114 * out.rgb[i * 3 + 2])); + }); + return out; +} + TextureDetail analyze_texture_detail(const TextureDisplacementLayer &layer) { TextureDetail out; diff --git a/src/libslic3r/TextureDisplacement.hpp b/src/libslic3r/TextureDisplacement.hpp index f42e3c9c4c..6a121d19a8 100644 --- a/src/libslic3r/TextureDisplacement.hpp +++ b/src/libslic3r/TextureDisplacement.hpp @@ -154,6 +154,38 @@ struct TextureIsland // chart to its true mm area, so a freshly unwrapped patch has uniform texel density to begin with. void average_island_scales(std::vector &islands); +// Photo-style adjustments to a layer's source image, as the gizmo's image-adjustment panel sets them. +// +// These are *not* layer parameters: nothing here is stored on TextureDisplacementLayer and nothing here is +// re-applied at bake time. The panel applies them once, to the image, and the result becomes the layer's +// image - so the adjusted pixels feed the colour and the displacement together, and a brightness change +// really does change the relief. That is the intended behaviour: one image, one source of truth, rather +// than a second set of knobs the bake would have to replay in the right order. +// +// Contrast with TextureDisplacementLayer::smoothing, which *is* a layer parameter applied on every decode: +// `blur` here is a destructive edit of the image, `smoothing` is a live low-pass over whatever the image is. +struct TextureAdjustments +{ + float brightness = 0.f; // [-1, 1]; 0 unchanged, -1 black, +1 white + float contrast = 0.f; // [-1, 1]; 0 unchanged, -1 flat mid-grey, +1 hard threshold + float sharpness = 0.f; // [0, 1]; 0 unchanged. Unsharp-mask amount + float blur = 0.f; // [0, 1]; 0 unchanged. Fraction of SOURCE_BLUR_SPAN, as `smoothing` is + float hue_deg = 0.f; // [-180, 180]; 0 unchanged. No effect on a grayscale image - grey has no hue + + bool identity() const + { + return brightness == 0.f && contrast == 0.f && sharpness == 0.f && blur == 0.f && hue_deg == 0.f; + } + // Exact equality, which is what is wanted: these come straight off sliders, and the question asked of + // them is "is this still the value the preview on screen was computed from", not "are these close". + bool operator==(const TextureAdjustments &o) const + { + return brightness == o.brightness && contrast == o.contrast && sharpness == o.sharpness && + blur == o.blur && hue_deg == o.hue_deg; + } + bool operator!=(const TextureAdjustments &o) const { return !(*this == o); } +}; + // One texture asset plus its projection/displacement parameters. Several layers may be painted // onto overlapping areas of the same volume: their displacements are combined per vertex, in slot // order, each layer folding into the total via its own TextureBlendMode (see @@ -277,6 +309,18 @@ struct TextureDisplacementLayer // - zero or positive: a mesh vertex, every unwrapped copy of it (how edits were stored before). std::vector> lscm_uv_overrides; + // Live, unsaved image adjustments from the gizmo's image-adjustment panel, applied by + // decode_height_texture() on top of the decoded image - so while the panel is open the relief, the + // colour, the thumbnails and the bake all see the adjusted image, and moving a slider really does + // change the displacement. See TextureAdjustments. + // + // Deliberately *not* serialized, by either save()/load() here or the .3mf: it is the state of an open + // editor, not a property of the layer. The panel resets it when it closes, and "Save as copy" resolves + // it by writing a new image and pointing the layer at that - which is the only way an adjustment + // becomes permanent. A project saved mid-adjustment therefore stores the unadjusted image, which is + // the honest answer: nothing was committed. + TextureAdjustments preview_adjust; + // How this layer folds into the displacement accumulated by the layers below it. Ignored for // the lowest-slot painted layer, which has nothing beneath it to combine with (the GUI shows // it as the "Base" layer and hides the control). @@ -504,6 +548,36 @@ struct DecodedHeightTexture bool texel_tap(const Vec2f &uv, bool tile_enabled, TextureTileMethod tile_method, TexelTap &out) const; }; +// Applies `adj` to `src` and returns the result; `src` is left alone. An empty `src`, or an identity +// `adj`, gives back a copy. +// +// Order is tonal, then spatial: brightness, contrast and hue per texel first, then blur, then sharpness. +// Sharpness last is what lets the two spatial knobs be used together - blur to kill speckle, then +// sharpness to put the real edges back - instead of the blur simply undoing the sharpen. +// +// Grayscale in, grayscale out (`rgb` stays empty): promoting a grey image to RGB would hand the layer's +// colour feature a row of identical greys to "colour" the model with, and triple the stored PNG for it. +// For a colour image the height is recomputed as the luminance of the *adjusted* colour, with +// decode_height_texture()'s own coefficients, so the relief and the colour can never drift apart. +DecodedHeightTexture apply_texture_adjustments(const DecodedHeightTexture &src, const TextureAdjustments &adj); + +// Blur radius, in texels, that TextureAdjustments::blur == 1 means on a `min(width, height)`-sized image: +// the same 5%-of-the-short-side span the Smoothing slider uses, under the same 48-texel cost cap, so the +// two controls bite at the same rate and a user moving between them is not surprised. +float adjustment_blur_radius(float blur, int width, int height); + +// Box-filters `src` down so neither side exceeds `max_px`, preserving aspect; never upscales, and +// returns a copy when it already fits. Colour and height are filtered the same way, and the height +// stays the height - it is not recomputed from the filtered colour, because a box filter is linear and +// luminance is linear in the channels, so the two agree already. +// +// This is what lets the adjustment panel's live preview cost depend on the size of the box it is drawn +// in rather than on the size of the image: adjusting a downscaled copy per slider frame, and the +// full-size image only once, on commit. A box filter (rather than a plain decimation) is the point - +// these textures are high-frequency by nature, and dropping texels would alias the preview into +// showing detail the adjustment is not actually producing. +DecodedHeightTexture downscale_height_texture(const DecodedHeightTexture &src, int max_px); + // Decode a layer's raw image bytes into sampleable height data, plus colour when the source has any. // Both 8-bit grayscale PNGs (the shipped library, and anything imported before colour was kept) and // colour PNGs are accepted; for a colour source the height is its luminance, using the same diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp index c9b5a54370..14eb31b19c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -120,6 +121,14 @@ constexpr int THUMBNAIL_MAX_PX = 128; // blur of it - which is what made Fast look flatter and softer than the result it was previewing. constexpr int HEIGHT_TEX_MAX_PX = 2048; +// Size the image-adjustment panel's live preview is computed and uploaded at. The panel draws the image +// in a box about 240 px wide, so there is nothing to show above this - and the preview is recomputed on +// every slider move, which is what makes its cost worth bounding. Measured on a 1024x1024 with every +// knob engaged, a full-size pass is 13-19 ms grayscale / 40-60 ms in colour (130-190 ms at 2048 in +// colour); the same pass on a 384 px copy is 3-4 ms / 9-12 ms, and it runs off the UI thread besides. +// The full-size image is only ever adjusted once, on commit. +constexpr int ADJUST_PREVIEW_MAX_PX = 384; + // How many rings of vertex-adjacent triangles either side of the paint's edge join the border refine // band (see collect_paint_region()). Two is enough to grade the size change without the band's own // cost growing to matter: it is a ring around a perimeter, not an area. @@ -535,6 +544,10 @@ void GLGizmoTextureDisplacement::on_shutdown() // progress poll, and its completion handler then finds nothing to do. m_preview_generation->fetch_add(1); m_preview_job_pending = false; + // The adjustment panel holds a full-size decode of its layer's image, which is the largest thing + // here; a closed gizmo should not keep it alive. Discards the edit, as closing the gizmo on an open + // panel implies. + close_image_adjust(); // The palette caches hold the last volume's images; a closed gizmo should not keep them alive. m_palette_cache.clear(); m_palette_quantizer = nullptr; @@ -2471,9 +2484,12 @@ void GLGizmoTextureDisplacement::update_uv_editor() // before, and independently of, the unwrap - the texture belongs on screen before anything is unwrapped - and // only when the choice, the layer's image or its smoothing changed, because the height image is large. const UVBackground desired_bg = (m_uv_check_mode == UVCheckMode::Checker) ? UVBackground::Checker : UVBackground::Height; - const bool bg_smoothing_changed = (desired_bg == UVBackground::Height) && (m_uv_editor_bg_smoothing != layer->smoothing); + const bool bg_smoothing_changed = (desired_bg == UVBackground::Height) && + (m_uv_editor_bg_smoothing != layer->smoothing || + !(m_uv_editor_bg_adjust == layer->preview_adjust)); if (desired_bg != m_uv_editor_bg || layer->image_data.get() != m_uv_editor_bg_image || bg_smoothing_changed) { m_uv_editor_bg_smoothing = layer->smoothing; + m_uv_editor_bg_adjust = layer->preview_adjust; m_uv_editor_bg_image = layer->image_data.get(); m_uv_editor_bg = desired_bg; if (desired_bg == UVBackground::Checker) { @@ -3744,6 +3760,7 @@ void GLGizmoTextureDisplacement::ensure_panel_icons() "texture_displacement_checker.svg", "texture_displacement_distortion.svg", "texture_displacement_wireframe.svg", "texture_displacement_cross.svg", "texture_displacement_uv_select_island.svg", "texture_displacement_uv_select_edge.svg", + "cog.svg", // the layer card's "adjust image" button "texture_displacement_uv_select_vertex.svg", // Paint / Erase, brush cursor shape, mapping, tiling, placement and the dock toggle. "texture_displacement_add.svg", "texture_displacement_add_negative.svg", "circle_paint.svg", @@ -4056,6 +4073,338 @@ void GLGizmoTextureDisplacement::render_texture_library_popup(const ImVec2 &pane m_picker_open_request = true; } } +bool GLGizmoTextureDisplacement::load_image_adjust_source(const TextureDisplacementLayer &layer) +{ + if (layer.empty()) + return false; + + // The *raw* image: neither the layer's Smoothing nor the panel's own preview_adjust, so what the + // sliders act on is always the image as it is actually stored rather than the last preview of it. + // Without clearing preview_adjust here the adjustment would compound on itself every reload. + TextureDisplacementLayer raw = layer; + raw.smoothing = 0.f; + raw.preview_adjust = TextureAdjustments{}; + + DecodedHeightTexture decoded = decode_height_texture(raw); + if (decoded.empty()) + return false; + + m_adjust_source = std::move(decoded); + m_adjust_preview_source = downscale_height_texture(m_adjust_source, ADJUST_PREVIEW_MAX_PX); + m_adjust_source_image = layer.image_data.get(); + // The unadjusted image, so the box is filled now rather than one background pass later. Pairing it + // with an identity `shown` is what makes update_image_adjust_preview() relaunch for the sliders' + // current values against the new source instead of deciding it is already showing them. + m_adjust_preview_shown = TextureAdjustments{}; + m_adjust_preview_tex = upload_height_thumbnail(m_adjust_preview_source, ADJUST_PREVIEW_MAX_PX); + m_adjust_preview_valid = m_adjust_preview_tex != nullptr; + return true; +} + +void GLGizmoTextureDisplacement::open_image_adjust(const TextureDisplacementLayer &layer) +{ + if (layer.empty() || layer.slot < 0) + return; + + close_image_adjust(); // reverts and clears any previous panel + + if (!load_image_adjust_source(layer)) + return; + + m_adjust = TextureAdjustments{}; + m_adjust_applied = TextureAdjustments{}; + m_adjust_slot = layer.slot; + const ModelVolume *mv = texture_volume(); + m_adjust_volume_id = mv != nullptr ? mv->id().id : 0; +} + +void GLGizmoTextureDisplacement::invalidate_adjust_textures() +{ + // The GPU copies of a layer's image - the list thumbnail, the preview shader's height and colour + // textures - are keyed on the image_data pointer and the layer's Smoothing, and a live adjustment + // changes neither: the pointer still names the same PNG. Rather than widen three cache keys for a + // panel that is open a few seconds at a time, the panel drops the copies itself whenever it moves + // the adjustment. Resetting the source is enough; the next get_layer_*() rebuilds from the decode, + // which does see the adjustment. + m_thumbnail_source.fill({}); + m_color_tex_source.reset(); + m_height_tex_source.reset(); +} + +void GLGizmoTextureDisplacement::close_image_adjust() +{ + // Revert the layer's live adjustment. Every exit that reaches here is a discard: a commit resets + // preview_adjust itself, before pointing the layer at the file that already carries the edit, so this + // cannot undo a committed adjustment. + // + // Found by the id recorded when the panel opened rather than through texture_volume(), which answers + // for the *current* selection. One of the ways to get here is the selection having moved on, and + // reverting the newly selected object's layer instead would both miss the adjustment that is still + // live on the original volume and clear one the user never touched. + bool reverted = false; + if (m_adjust_slot >= 0 && m_adjust_volume_id != 0) + for (ModelObject *mo : wxGetApp().model().objects) { + for (ModelVolume *mv : mo->volumes) { + if (mv->id().id != m_adjust_volume_id) + continue; + for (TextureDisplacementLayer &l : mv->texture_displacement_layers) + if (l.slot == m_adjust_slot && !l.preview_adjust.identity()) { + l.preview_adjust = TextureAdjustments{}; + reverted = true; + } + } + } + + if (reverted) + invalidate_adjust_textures(); + + // std::async's future blocks here until the pass finishes. That is a few milliseconds on an image + // this small, and the alternative - a detached thread writing into the members of a closed panel - + // is worse. + if (m_adjust_preview_job.valid()) + m_adjust_preview_job.wait(); + m_adjust_preview_job = {}; + + m_adjust_slot = -1; + m_adjust = TextureAdjustments{}; + m_adjust_applied = TextureAdjustments{}; + m_adjust_source = DecodedHeightTexture{}; + m_adjust_preview_source = DecodedHeightTexture{}; + m_adjust_source_image = nullptr; + m_adjust_volume_id = 0; + m_adjust_preview_tex.reset(); + m_adjust_preview_valid = false; + + // Only while the gizmo is up: on_shutdown() also comes through here, and rebuilding a preview for a + // gizmo that is closing would be work for a model nobody is looking at. The reverted layer data is + // what matters there, and that is already done above. + if (reverted && m_state == On) { + rebuild_preview(); + m_parent.set_as_dirty(); + } +} + +void GLGizmoTextureDisplacement::update_image_adjust_preview() +{ + if (m_adjust_preview_source.empty()) + return; + + // Collect a finished pass. wait_for(0) rather than get() outright: this runs inside the frame, and + // blocking on the worker here would hand back to the UI thread the very stall the worker exists to + // spare it. + if (m_adjust_preview_job.valid() && + m_adjust_preview_job.wait_for(std::chrono::seconds(0)) == std::future_status::ready) { + const DecodedHeightTexture adjusted = m_adjust_preview_job.get(); + m_adjust_preview_job = {}; + if (std::unique_ptr tex = upload_height_thumbnail(adjusted, ADJUST_PREVIEW_MAX_PX)) { + m_adjust_preview_tex = std::move(tex); + m_adjust_preview_shown = m_adjust_preview_running; + m_adjust_preview_valid = true; + } + } + + // One pass at a time: whatever the sliders did while it ran is picked up by the next launch, so a + // drag collapses to the value the sliders ended on instead of queuing one pass per frame. + if (!m_adjust_preview_job.valid() && m_adjust != m_adjust_preview_shown) { + m_adjust_preview_running = m_adjust; + // Captured by value: the pass must not read members the UI thread goes on editing while it runs. + m_adjust_preview_job = std::async(std::launch::async, + [src = m_adjust_preview_source, adj = m_adjust_preview_running] { + return apply_texture_adjustments(src, adj); + }); + } + + // A pass in flight has no other way to get its result on screen: without a redraw request the canvas + // can sit idle, and the preview would only catch up on the next unrelated frame. + if (m_adjust_preview_job.valid()) + m_parent.set_as_dirty(); +} + +void GLGizmoTextureDisplacement::commit_image_adjust(TextureDisplacementLayer &layer) +{ + if (m_adjust_source.empty() || m_adjust.identity()) { + // Nothing was changed, so there is nothing to save. + close_image_adjust(); + return; + } + + // The full-size pass, once: 13-19 ms grayscale / 40-60 ms colour on a 1024x1024 with every knob + // engaged. Run on the UI thread deliberately, unlike the live preview: this is a single click, and the + // rebuild that follows it - a CPU mesh displacement of the painted patch - is already an order of + // magnitude more work, synchronously, so moving only this off the thread would buy nothing a user + // could perceive. + const DecodedHeightTexture adjusted = apply_texture_adjustments(m_adjust_source, m_adjust); + + std::string error; + const std::string stem = layer.name.empty() ? std::string("texture") : layer.name; + const std::optional entry = save_texture_to_library(adjusted, stem, error); + if (!entry) { + show_error(nullptr, error); + return; // the panel stays open, and the layer keeps the live adjustment: the edit is not lost + } + + // Cleared *before* the layer is pointed at the new file, and this ordering is the whole correctness of + // the commit: the saved image already has the adjustment baked into its pixels, so leaving + // preview_adjust set would apply brightness, contrast and the rest a second time on top of itself. + layer.preview_adjust = TextureAdjustments{}; + // set_layer_texture() does the rest - the name, the recently-used ordering, a fresh image_data buffer + // (which is what invalidates every cache keyed by the old pointer), the undo snapshot and the rebuild. + set_layer_texture(layer, *entry); + + close_image_adjust(); +} + +void GLGizmoTextureDisplacement::render_image_adjust_window(const ImVec2 &panel_min, const ImVec2 &panel_max) +{ + if (m_adjust_slot < 0) + return; + + ModelVolume *mv = texture_volume(); + // A different volume is selected than the one this panel was opened on. Slots are numbered per + // volume, so looking m_adjust_slot up here would find an unrelated layer rather than nothing. + if (mv == nullptr || mv->id().id != m_adjust_volume_id) { + close_image_adjust(); + return; + } + + TextureDisplacementLayer *layer = nullptr; + for (TextureDisplacementLayer &l : mv->texture_displacement_layers) + if (l.slot == m_adjust_slot) + layer = &l; + if (layer == nullptr) { + // The layer went away under the panel (removed, or merged away by an undo). + close_image_adjust(); + return; + } + + // The layer's image can be swapped from the texture picker while this panel is open - the panel is a + // window now, so the rest of the gizmo stays usable behind it. Re-read the source when that happens, + // keeping the slider positions: the user is adjusting this layer, and the 3D view has already moved to + // the new image (decode_height_texture() reads layer.image_data, which changed), so re-reading here is + // also what keeps the panel's photo and the model showing the same thing. + if (layer->image_data.get() != m_adjust_source_image && !load_image_adjust_source(*layer)) { + close_image_adjust(); // the new image cannot be decoded; nothing left to adjust + return; + } + + const float img_w = std::round(m_imgui->scaled(16.f)); + const float gap = m_imgui->scaled(0.5f); + // Placed beside the panel on first appearance only, and left wherever the user drags it after that - + // it is a window, not a popup, so its position is theirs to keep. + const float win_w = img_w + 2.f * ImGui::GetStyle().WindowPadding.x; + const bool left = panel_min.x - gap - win_w >= 0.f; + ImGui::SetNextWindowPos(ImVec2(left ? panel_min.x - gap - win_w : panel_max.x + gap, + panel_min.y + m_imgui->scaled(4.f)), ImGuiCond_Appearing); + + bool keep_open = true; + if (!ImGui::Begin((_u8L("Adjust image") + "##texture_adjust").c_str(), &keep_open, + ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse)) { + ImGui::End(); + if (!keep_open) + close_image_adjust(); + return; + } + + // Collect a finished pass and start one for the current slider values before the image is drawn, so + // the newest available result is what lands on screen this frame. + update_image_adjust_preview(); + + // The photo itself, at the image's own aspect so a non-square texture is not stretched. + const float aspect = m_adjust_source.height > 0 ? float(m_adjust_source.width) / float(m_adjust_source.height) : 1.f; + const float img_h = std::round(img_w / std::max(0.05f, aspect)); + if (m_adjust_preview_valid && m_adjust_preview_tex) + ImGui::Image((ImTextureID) (intptr_t) m_adjust_preview_tex->get_id(), ImVec2(img_w, img_h)); + else + ImGui::Dummy(ImVec2(img_w, img_h)); + + // The label column is sized off the widest of the five labels, so the tracks line up whatever the + // translation does to their lengths. + float label_w = 0.f; + for (const wxString &l : { _L("Brightness"), _L("Contrast"), _L("Sharpness"), _L("Blur"), _L("Hue") }) + label_w = std::max(label_w, ImGui::CalcTextSize(into_u8(l).c_str()).x); + label_w += m_imgui->scaled(1.2f); + // An explicit track width rather than a fill-to-the-right one: this window is AlwaysAutoResize, so its + // width comes from its content, and an item asking for "whatever is left" would make the width depend + // on itself. The image above sets the content width, and the sliders match it. + const float slider_w = std::max(m_imgui->scaled(4.f), img_w - label_w); + + const auto row = [&](const char *id, const wxString &label, float *v, float v_min, float v_max, + const char *format, bool enabled, const std::string &tip) { + const float x0 = ImGui::GetCursorPosX(); + ImGui::AlignTextToFramePadding(); + m_imgui->text(label); + ImGui::SameLine(); + ImGui::SetCursorPosX(std::max(ImGui::GetCursorPosX(), x0 + label_w)); + ImGui::SetNextItemWidth(slider_w); + m_imgui->disabled_begin(!enabled); + ImGui::SliderFloat(id, v, v_min, v_max, format, ImGuiSliderFlags_AlwaysClamp); + m_imgui->disabled_end(); + // Only on an enabled row: a disabled item does not report hover, so a tooltip on one would never + // be shown. What has to be said about a disabled slider is written out below it instead. + if (enabled && !tip.empty() && ImGui::IsItemHovered()) + m_imgui->tooltip(tip, ImGui::GetFontSize() * 20.f); + }; + + row("##adj_brightness", _L("Brightness"), &m_adjust.brightness, -1.f, 1.f, "%.2f", true, {}); + row("##adj_contrast", _L("Contrast"), &m_adjust.contrast, -1.f, 1.f, "%.2f", true, {}); + row("##adj_sharpness", _L("Sharpness"), &m_adjust.sharpness, 0.f, 1.f, "%.2f", true, + _u8L("Brings out the finest detail in the image. Applied after Blur, so the two can be used " + "together: blur away the speckle, then sharpen the edges that remain.")); + row("##adj_blur", _L("Blur"), &m_adjust.blur, 0.f, 1.f, "%.2f", true, + _u8L("Blurs the image itself. The layer's own Smoothing slider softens the relief without altering " + "the image, and is the one to reach for first.")); + // Grey has no hue to turn, and the shipped library is grayscale - so on most textures this is a + // slider that would visibly do nothing. Disabled with the reason given, rather than hidden. + const bool has_color = m_adjust_source.has_color(); + row("##adj_hue", _L("Hue"), &m_adjust.hue_deg, -180.f, 180.f, "%.0f°", has_color, {}); + if (!has_color) { + ImGui::PushTextWrapPos(ImGui::GetCursorPosX() + img_w); + ImGui::TextDisabled("%s", _u8L("This texture is grayscale, so it has no hue to shift.").c_str()); + ImGui::PopTextWrapPos(); + } + + if (m_imgui->button(_L("Reset"))) + m_adjust = TextureAdjustments{}; + + // Hand the sliders to the layer, which is what puts the adjusted image in front of the displacement: + // decode_height_texture() applies preview_adjust, so the relief, the colour and the thumbnails all + // follow from here. Written every frame rather than only on a change, so an undo snapshot or a + // reselection that resets the layer cannot leave the model showing an adjustment the panel has moved + // on from. + layer->preview_adjust = m_adjust; + if (m_adjust != m_adjust_applied) { + m_adjust_applied = m_adjust; + invalidate_adjust_textures(); + // Marked dirty rather than rebuilt here: the panel's own flag is consumed by the main panel's + // "rebuild once the mouse is released" rule, so dragging a slider recomputes the displacement + // once, on release, instead of on every frame of the drag. That is what keeps the UI responsive + // while a full-size resample and a mesh displacement happen behind it. + m_preview_params_dirty = true; + // This window is drawn after the block that consumes that flag, so the rebuild happens on a later + // frame - which means there has to *be* one. Cheap insurance: a slider release that generated no + // further canvas event would otherwise leave the flag set and the model unchanged until something + // unrelated redrew. + m_parent.set_as_dirty(); + } + + ImGui::Separator(); + m_imgui->text_wrapped(_u8L("The model updates when you release a slider. Save as copy writes the " + "adjusted image to your texture library and points this layer at it."), img_w); + + const bool cancel = m_imgui->button(_L("Cancel")); + ImGui::SameLine(); + // Nothing to save until a slider has actually moved. + m_imgui->disabled_begin(m_adjust.identity()); + const bool as_copy = m_imgui->button(_L("Save as copy")); + m_imgui->disabled_end(); + + ImGui::End(); + + if (cancel || !keep_open) + close_image_adjust(); + else if (as_copy) + commit_image_adjust(*layer); +} void GLGizmoTextureDisplacement::remove_texture_layer(int slot) { @@ -6580,7 +6929,7 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float ImGui::SameLine(); const std::string not_painted = _u8L("not painted"); - const float right_w = (painted ? 0.f : ImGui::CalcTextSize(not_painted.c_str()).x + gap_s) + 3.f * frame_h + 2.f * gap_s; + const float right_w = (painted ? 0.f : ImGui::CalcTextSize(not_painted.c_str()).x + gap_s) + 4.f * frame_h + 3.f * gap_s; const float name_w = std::max(frame_h, ImGui::GetWindowContentRegionMax().x - card_pad - ImGui::GetCursorPosX() - gap_s - right_w); ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(orca.x, orca.y, orca.z, 0.2f)); ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(orca.x, orca.y, orca.z, 0.35f)); @@ -6594,6 +6943,16 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float ImGui::SameLine(); ImGui::TextDisabled("%s", not_painted.c_str()); } + // Between the name and the order arrows: it acts on the image the name refers to, so it + // belongs with the name rather than with the controls that reorder the stack. + ImGui::SameLine(); + m_imgui->disabled_begin(busy || layer.empty()); + if (icon_button(613 + layer.slot, "cog.svg", frame_h, _L("Adjust image"), + _u8L("Brightness, contrast, sharpness, blur and hue, shown on the image and on the " + "model as you set them. Save as copy writes the result to your texture library " + "and points this layer at it."))) + open_image_adjust(layer); + m_imgui->disabled_end(); ImGui::SameLine(); m_imgui->disabled_begin(busy || li == 0); if (icon_button(611, "texture_displacement_move_up.svg", frame_h, _L("Move up"), _L("Move up - applied earlier"))) { @@ -7391,10 +7750,15 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float set_active_layer(m_picker_slot); // In this window's scope, where the popup's open request and the popup itself share one ID stack. + ImVec2 panel_rect_min, panel_rect_max; { const ImVec2 win_min = ImGui::GetWindowPos(); const ImVec2 win_sz = ImGui::GetWindowSize(); render_texture_library_popup(win_min, ImVec2(win_min.x + win_sz.x, win_min.y + win_sz.y)); + // Only recorded here. The image-adjustment panel is a top-level window rather than a popup, so it + // cannot be begun inside this one; it is drawn after GizmoImguiEnd() below. + panel_rect_min = win_min; + panel_rect_max = ImVec2(win_min.x + win_sz.x, win_min.y + win_sz.y); } // ImGui sliders report "changed" continuously on every frame while being dragged, not just once on @@ -7632,6 +7996,11 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float m_parent.request_extra_frame(); } GizmoImguiEnd(); + + // Outside the gizmo's window, because it is a window of its own: a floating, non-modal panel that + // leaves the 3D view live so the relief can be watched while the sliders move. No-op when closed. + render_image_adjust_window(panel_rect_min, panel_rect_max); + ImGuiWrapper::pop_toolbar_style(); // Drawn last, over everything, via the foreground draw list: the +/- add-remove sign next to the 3D diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp index 927954dd76..6470743543 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp @@ -23,6 +23,7 @@ #include "libslic3r/Point.hpp" #include #include +#include #include #include #include "slic3r/GUI/Gizmos/GLGizmoBase.hpp" @@ -435,6 +436,71 @@ private: std::string m_slider_type_request; int m_slider_type_request_frame = 0; + // ---- The image-adjustment panel ---- + // + // Brightness/contrast/sharpness/blur/hue over one layer's image, shown on the image itself and + // updating as the sliders move. What it produces is not a set of layer parameters: it replaces the + // layer's *image*, so the adjusted pixels feed the colour and the displacement together and a + // brightness change moves the relief too (see TextureAdjustments). + // + // An ordinary floating window rather than a popup, and deliberately so. A popup dims the canvas + // behind it and closes on any click outside itself, which between them make it impossible to watch the + // relief change on the model - which is the whole point of adjusting the image here rather than in an + // image editor. A window leaves the 3D view live, clickable and orbitable while the panel is open. + void render_image_adjust_window(const ImVec2 &panel_min, const ImVec2 &panel_max); + // Opens the panel for `layer`, decoding its image into m_adjust_source. Sliders never re-decode + // the PNG. + void open_image_adjust(const TextureDisplacementLayer &layer); + // Reads `layer`'s stored image into the panel's source buffers and records which image it came from. + // Called when the panel opens and again whenever the layer's image is swapped under it, which is why + // it leaves the slider values alone. False when the image cannot be decoded. + bool load_image_adjust_source(const TextureDisplacementLayer &layer); + // Resolves the panel: writes the adjusted image into the user's texture library as a new file and + // points `layer` at it, which is the only way an adjustment becomes permanent. Closes the panel. + void commit_image_adjust(TextureDisplacementLayer &layer); + // Closes the panel and reverts the layer's live preview_adjust to identity, so every exit that is not + // a commit - Cancel, the window's close button, the gizmo closing - leaves the layer as it was found. + void close_image_adjust(); + // Collects a finished preview and starts one for the current slider values. One at a time, so a drag + // coalesces into "whatever the sliders last said" instead of a queue of superseded frames. + void update_image_adjust_preview(); + + int m_adjust_slot = -1; // the layer the panel is open for; -1 when closed + TextureAdjustments m_adjust; // what the sliders currently say + // What the layer's live preview_adjust was last set from, so a slider move can be told from a frame in + // which nothing happened and only the former asks the displacement to be recomputed. + TextureAdjustments m_adjust_applied; + + // The layer's image as it was when the panel opened, and a small copy of it. The sliders are applied + // to the small copy for the live preview and to the full-size one exactly once, on commit. Measured on + // a 1024x1024 with every knob engaged, a full-size pass costs 13-19 ms grayscale and 40-60 ms in + // colour (130-190 ms at 2048 in colour) - far too much to repeat per slider frame. The same pass on a + // 384 px copy is 3-4 ms / 9-12 ms, and that is all the preview box can show anyway. + DecodedHeightTexture m_adjust_source; + DecodedHeightTexture m_adjust_preview_source; + // Which image_data the two buffers above were decoded from, so the panel can notice the layer's image + // being swapped from the texture picker while it is open and re-read it. Compared, never dereferenced. + const void *m_adjust_source_image = nullptr; + // And which volume the panel was opened on. Slot numbers are per volume, so without this a change of + // selection would silently rebind the open panel to whichever layer happens to hold the same slot on + // the newly selected object - a different image, under a panel the user opened for this one. + size_t m_adjust_volume_id = 0; + // The preview image on screen, re-uploaded whenever a background pass finishes. + std::unique_ptr m_adjust_preview_tex; + + // The live preview runs on its own thread rather than on the UI thread or on the plater's job + // worker. Not the UI thread because even the small pass is milliseconds and this runs while a slider + // is being dragged; not the job worker because that is a single FIFO shared with Bake and the + // displacement preview (see queue_preview_job()), where a per-frame image filter would sit behind - + // and delay - multi-second mesh work. + std::future m_adjust_preview_job; + TextureAdjustments m_adjust_preview_running; // what the in-flight pass is computing + TextureAdjustments m_adjust_preview_shown; // what m_adjust_preview_tex holds + bool m_adjust_preview_valid = false; + // Drops the GPU copies of the layer's image so the next frame rebuilds them from the decode, which + // is where the live adjustment is applied. Called whenever the panel moves or reverts it. + void invalidate_adjust_textures(); + // "Adjust Texture" mode: instead of painting, dragging an on-canvas handle changes the active // layer's offset. The handle is a flat panel lying in the paint patch's own tangent plane // (a "pan" - drag anywhere on it for free 2D movement), plus two arrows along the patch's @@ -915,6 +981,7 @@ private: enum class UVBackground { None, Height, Checker }; UVBackground m_uv_editor_bg = UVBackground::None; float m_uv_editor_bg_smoothing = -1.f; // smoothing the height backdrop was uploaded at + TextureAdjustments m_uv_editor_bg_adjust; // and the live image adjustment it was uploaded at const void *m_uv_editor_bg_image = nullptr; // the layer image it was uploaded from // Per-chart distortion heatmap colour for the UV pane (#7/#14), computed once when the unwrap is // re-solved (relative stretch doesn't change when islands are merely moved), fed to the canvas only diff --git a/src/slic3r/GUI/TextureLibrary.cpp b/src/slic3r/GUI/TextureLibrary.cpp index e3f73258df..69301b42d1 100644 --- a/src/slic3r/GUI/TextureLibrary.cpp +++ b/src/slic3r/GUI/TextureLibrary.cpp @@ -27,6 +27,7 @@ #include #include "libslic3r/PNGReadWrite.hpp" +#include "libslic3r/TextureDisplacement.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/AppConfig.hpp" @@ -158,6 +159,28 @@ bool encode_png_bytes(const wxImage &image, std::vector &out, std : encode_gray_png_bytes(image, out, error); } +// A wxImage over decoded pixels, so the encoders above can be reached from an in-memory image as well as +// from a file. Grayscale is expanded to the three equal channels wxImage always stores, which is what +// image_has_color() then reads as "no colour" - so a grey image still encodes as a grayscale PNG. +// +// `scratch` holds the pixel buffer: the wxImage is constructed over it without taking ownership, so it +// has to outlive every use of the returned image. +wxImage image_from_decoded(const DecodedHeightTexture &image, std::vector &scratch) +{ + if (image.empty()) + return wxImage(); + + const size_t n = size_t(image.width) * size_t(image.height); + scratch.resize(n * 3); + if (image.has_color()) + scratch.assign(image.rgb.begin(), image.rgb.end()); + else + for (size_t i = 0; i < n; ++i) + scratch[i * 3] = scratch[i * 3 + 1] = scratch[i * 3 + 2] = image.pixels[i]; + + return wxImage(image.width, image.height, scratch.data(), /* static_data */ true); +} + std::vector read_file_bytes(const std::string &path) { std::ifstream ifs(path, std::ios::binary); @@ -186,6 +209,42 @@ bool is_supported_height_map(const std::vector &bytes) std::vector g_library; bool g_library_scanned = false; +// Writes `bytes` into the user's own texture folder as `stem`.png, uniquified so an existing texture - +// shipped-name collision, or a second edit of the same source - is never overwritten. Returns the new +// file's library entry. Shared by import_texture_to_library() and save_texture_to_library(), which +// differ only in where their bytes came from. +std::optional write_user_texture(const std::vector &bytes, const std::string &stem, + std::string &error) +{ + const std::string user_dir = user_texture_dir(); + if (user_dir.empty()) { + error = _u8L("Could not create the folder for imported textures."); + return std::nullopt; + } + + boost::filesystem::path dest = boost::filesystem::path(user_dir) / (stem + ".png"); + for (int i = 2; boost::filesystem::exists(dest); ++i) + dest = boost::filesystem::path(user_dir) / (stem + " (" + std::to_string(i) + ").png"); + + { + boost::nowide::ofstream ofs(dest.string(), std::ios::binary); + ofs.write(reinterpret_cast(bytes.data()), std::streamsize(bytes.size())); + if (!ofs.good()) { + error = _u8L("Failed to save the imported texture."); + return std::nullopt; + } + } + + texture_library(true); // pick the new file up + const std::string dest_str = dest.string(); + for (const TextureLibraryEntry &e : g_library) + if (e.path == dest_str) + return e; + + error = _u8L("Failed to save the imported texture."); + return std::nullopt; +} + // The user's own textures, most recently used first, kept in the app config. File names are stored rather // than paths so the order survives a moved data directory; '/' separates them because no platform allows // it inside a file name. Bounded so a long-lived config does not grow a line without end. @@ -317,12 +376,6 @@ bool remove_user_texture(const std::string &path, std::string &error) std::optional import_texture_to_library(const std::string &source_path, std::string &error) { - const std::string user_dir = user_texture_dir(); - if (user_dir.empty()) { - error = _u8L("Could not create the folder for imported textures."); - return std::nullopt; - } - wxImage image; if (!image.LoadFile(from_u8(source_path)) || !image.IsOk()) { error = _u8L("Could not load the selected image."); @@ -333,30 +386,7 @@ std::optional import_texture_to_library(const std::string & if (!encode_png_bytes(image, bytes, error)) return std::nullopt; - // Never overwrite an existing texture (the user's or, if they picked the same name twice, their - // own earlier import) - uniquify instead. - const std::string stem = boost::filesystem::path(source_path).stem().string(); - boost::filesystem::path dest = boost::filesystem::path(user_dir) / (stem + ".png"); - for (int i = 2; boost::filesystem::exists(dest); ++i) - dest = boost::filesystem::path(user_dir) / (stem + " (" + std::to_string(i) + ").png"); - - { - boost::nowide::ofstream ofs(dest.string(), std::ios::binary); - ofs.write(reinterpret_cast(bytes.data()), std::streamsize(bytes.size())); - if (!ofs.good()) { - error = _u8L("Failed to save the imported texture."); - return std::nullopt; - } - } - - texture_library(true); // pick the new file up - const std::string dest_str = dest.string(); - for (const TextureLibraryEntry &e : g_library) - if (e.path == dest_str) - return e; - - error = _u8L("Failed to save the imported texture."); - return std::nullopt; + return write_user_texture(bytes, boost::filesystem::path(source_path).stem().string(), error); } std::shared_ptr> load_texture_image_data(const std::string &path, std::string &error) @@ -382,4 +412,21 @@ std::shared_ptr> load_texture_image_data(const std::s return std::make_shared>(std::move(converted)); } +std::optional save_texture_to_library(const DecodedHeightTexture &image, const std::string &stem, + std::string &error) +{ + std::vector scratch; + const wxImage wx = image_from_decoded(image, scratch); + if (!wx.IsOk()) { + error = _u8L("The selected image is empty."); + return std::nullopt; + } + + std::vector bytes; + if (!encode_png_bytes(wx, bytes, error)) + return std::nullopt; + + return write_user_texture(bytes, stem.empty() ? std::string("texture") : stem, error); +} + } // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/TextureLibrary.hpp b/src/slic3r/GUI/TextureLibrary.hpp index 65b35bcea8..38ad277a84 100644 --- a/src/slic3r/GUI/TextureLibrary.hpp +++ b/src/slic3r/GUI/TextureLibrary.hpp @@ -6,6 +6,8 @@ #include #include +#include "libslic3r/TextureDisplacement.hpp" + namespace Slic3r::GUI { // One selectable height-map texture in the texture-displacement gizmo's texture picker. @@ -57,6 +59,14 @@ std::optional import_texture_to_library(const std::string & // Returns nullptr with `error` set if the file cannot be read or decoded at all. std::shared_ptr> load_texture_image_data(const std::string &path, std::string &error); +// Writes `image` into user_texture_dir() as a new PNG named after `stem` (uniquified if taken, so an +// existing texture is never overwritten) and returns its library entry. The in-memory counterpart of +// import_texture_to_library(), for an image that was edited rather than read off disk. +// +// Returns nullopt with `error` set on failure. +std::optional save_texture_to_library(const DecodedHeightTexture &image, const std::string &stem, + std::string &error); + } // namespace Slic3r::GUI #endif // slic3r_TextureLibrary_hpp_ diff --git a/tests/libslic3r/test_texture_displacement.cpp b/tests/libslic3r/test_texture_displacement.cpp index d0a417ccd0..f57be521ab 100644 --- a/tests/libslic3r/test_texture_displacement.cpp +++ b/tests/libslic3r/test_texture_displacement.cpp @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -1301,6 +1302,294 @@ TEST_CASE("TextureDisplacement: the step cutter only cuts inside the region", "[ } } +// ---- Image adjustments (the gizmo's image-adjustment panel) ---------------------------------------- + +// A grayscale ramp 0..255 across the width, so every input level is present exactly once per row and a +// tonal curve can be read straight off the output. +static DecodedHeightTexture make_gray_ramp(int w = 256, int h = 4) +{ + DecodedHeightTexture t; + t.width = w; + t.height = h; + t.pixels.resize(size_t(w) * size_t(h)); + for (int y = 0; y < h; ++y) + for (int x = 0; x < w; ++x) + t.pixels[size_t(y) * size_t(w) + size_t(x)] = uint8_t(x * 255 / std::max(1, w - 1)); + return t; +} + +// A one-texel checkerboard of 0 and 255 - the highest spatial frequency the grid can hold, which is what +// a blur has to remove and a downscale has to average rather than drop. +static DecodedHeightTexture make_gray_checkerboard(int w = 16, int h = 16) +{ + DecodedHeightTexture t; + t.width = w; + t.height = h; + t.pixels.resize(size_t(w) * size_t(h)); + for (int y = 0; y < h; ++y) + for (int x = 0; x < w; ++x) + t.pixels[size_t(y) * size_t(w) + size_t(x)] = ((x + y) % 2 == 0) ? 0 : 255; + return t; +} + +static DecodedHeightTexture make_rgb_flat(uint8_t r, uint8_t g, uint8_t b, int w = 8, int h = 8) +{ + DecodedHeightTexture t; + t.width = w; + t.height = h; + t.pixels.resize(size_t(w) * size_t(h)); + t.rgb.resize(size_t(w) * size_t(h) * 3); + for (size_t i = 0; i < size_t(w) * size_t(h); ++i) { + t.rgb[i * 3] = r; + t.rgb[i * 3 + 1] = g; + t.rgb[i * 3 + 2] = b; + t.pixels[i] = uint8_t(std::lround(0.299 * r + 0.587 * g + 0.114 * b)); + } + return t; +} + +TEST_CASE("an adjustment that moves no slider returns the image unchanged", "[TextureDisplacement]") +{ + const DecodedHeightTexture src = make_gray_ramp(); + const DecodedHeightTexture out = apply_texture_adjustments(src, TextureAdjustments{}); + CHECK(out.width == src.width); + CHECK(out.height == src.height); + CHECK(out.pixels == src.pixels); + CHECK(TextureAdjustments{}.identity()); +} + +TEST_CASE("brightness reaches pure white and pure black only at the ends of its range", "[TextureDisplacement]") +{ + const DecodedHeightTexture src = make_gray_ramp(); + + TextureAdjustments up; + up.brightness = 1.f; + const DecodedHeightTexture white = apply_texture_adjustments(src, up); + CHECK(std::all_of(white.pixels.begin(), white.pixels.end(), [](uint8_t v) { return v == 255; })); + + TextureAdjustments down; + down.brightness = -1.f; + const DecodedHeightTexture black = apply_texture_adjustments(src, down); + CHECK(std::all_of(black.pixels.begin(), black.pixels.end(), [](uint8_t v) { return v == 0; })); +} + +TEST_CASE("brightness lifts the image without flattening it into a clipped plateau", "[TextureDisplacement]") +{ + // The reason brightness is a lift toward white rather than an additive offset: an offset would drive + // everything above mid-grey to a flat 255, and since this image is also the height map that region + // would bake as flat relief. Half a stop up must leave almost nothing at pure white. + const DecodedHeightTexture src = make_gray_ramp(); + TextureAdjustments adj; + adj.brightness = 0.5f; + const DecodedHeightTexture out = apply_texture_adjustments(src, adj); + + REQUIRE(out.pixels.size() == src.pixels.size()); + const size_t clipped = size_t(std::count(out.pixels.begin(), out.pixels.end(), uint8_t(255))); + CHECK(clipped * 100 < out.pixels.size()); // under 1%; an additive shift would clip half the ramp + + // Every texel got brighter, and the curve stays ordered: brighter in means brighter out. + for (size_t i = 0; i < out.pixels.size(); ++i) + REQUIRE(out.pixels[i] >= src.pixels[i]); + for (int x = 1; x < out.width; ++x) + REQUIRE(out.pixels[size_t(x)] >= out.pixels[size_t(x - 1)]); +} + +TEST_CASE("contrast at its lowest flattens the image to mid-grey and at its highest spreads it apart", + "[TextureDisplacement]") +{ + const DecodedHeightTexture src = make_gray_ramp(); + + TextureAdjustments flat; + flat.contrast = -1.f; + const DecodedHeightTexture grey = apply_texture_adjustments(src, flat); + // One value everywhere - the pivot. Which exact level that rounds to is not the point. + CHECK(std::adjacent_find(grey.pixels.begin(), grey.pixels.end(), std::not_equal_to()) == + grey.pixels.end()); + + TextureAdjustments hard; + hard.contrast = 1.f; + const DecodedHeightTexture split = apply_texture_adjustments(src, hard); + // A threshold about the pivot: the dark end of the ramp goes to black, the light end to white. + CHECK(split.pixels[0] == 0); + CHECK(split.pixels[size_t(split.width - 1)] == 255); +} + +TEST_CASE("blur removes the finest detail and sharpness exaggerates an edge", "[TextureDisplacement]") +{ + // Blur: a one-texel checkerboard is the highest frequency the grid holds, so a blur has to collapse it + // toward its own mean. Measured as mean absolute deviation, which needs no assumption about the mean. + const DecodedHeightTexture checker = make_gray_checkerboard(32, 32); + const auto deviation = [](const DecodedHeightTexture &t) { + double mean = 0.; + for (uint8_t v : t.pixels) + mean += double(v); + mean /= double(t.pixels.size()); + double dev = 0.; + for (uint8_t v : t.pixels) + dev += std::abs(double(v) - mean); + return dev / double(t.pixels.size()); + }; + TextureAdjustments blur; + blur.blur = 1.f; + CHECK(deviation(apply_texture_adjustments(checker, blur)) < 0.25 * deviation(checker)); + + // Sharpness: an unsharp mask pushes each side of a step further from the other, so the step + // overshoots - darker than the dark side just inside it, brighter than the bright side just inside. + DecodedHeightTexture step; + step.width = 64; + step.height = 8; + step.pixels.assign(size_t(step.width) * size_t(step.height), 100); + for (int y = 0; y < step.height; ++y) + for (int x = step.width / 2; x < step.width; ++x) + step.pixels[size_t(y) * size_t(step.width) + size_t(x)] = 150; + + TextureAdjustments sharp; + sharp.sharpness = 1.f; + const DecodedHeightTexture sharpened = apply_texture_adjustments(step, sharp); + const size_t row = size_t(step.height / 2) * size_t(step.width); + const size_t mid = size_t(step.width / 2); + CHECK(sharpened.pixels[row + mid - 1] < 100); // undershoot on the dark side of the step + CHECK(sharpened.pixels[row + mid] > 150); // overshoot on the light side +} + +TEST_CASE("a grayscale image stays grayscale and its hue slider does nothing", "[TextureDisplacement]") +{ + const DecodedHeightTexture src = make_gray_ramp(); + REQUIRE_FALSE(src.has_color()); + + TextureAdjustments hue; + hue.hue_deg = 120.f; + const DecodedHeightTexture out = apply_texture_adjustments(src, hue); + // Not promoted to RGB: a grey image has no colour to offer the layer's colour feature, and storing it + // as RGB would triple the PNG for a row of identical greys. + CHECK_FALSE(out.has_color()); + CHECK(out.rgb.empty()); + CHECK(out.pixels == src.pixels); +} + +TEST_CASE("a colour image's height stays the luminance of its adjusted colour", "[TextureDisplacement]") +{ + // The invariant that keeps the relief and the colour from drifting apart: whatever the adjustment did + // to the channels, the height is recomputed from the channels that came out. + const DecodedHeightTexture src = make_rgb_flat(200, 60, 30); + REQUIRE(src.has_color()); + + TextureAdjustments adj; + adj.brightness = 0.2f; + adj.contrast = 0.3f; + adj.hue_deg = 75.f; + const DecodedHeightTexture out = apply_texture_adjustments(src, adj); + REQUIRE(out.has_color()); + + for (size_t i = 0; i < out.pixels.size(); ++i) { + const long expect = std::lround(0.299 * out.rgb[i * 3] + 0.587 * out.rgb[i * 3 + 1] + + 0.114 * out.rgb[i * 3 + 2]); + REQUIRE(long(out.pixels[i]) == expect); + } + // The hue turn actually moved the colour, so the check above is not passing on an unchanged image. + CHECK(out.rgb != src.rgb); +} + +TEST_CASE("a full turn of the hue leaves a colour where it started", "[TextureDisplacement]") +{ + const DecodedHeightTexture src = make_rgb_flat(200, 60, 30); + TextureAdjustments adj; + adj.hue_deg = 360.f; + const DecodedHeightTexture out = apply_texture_adjustments(src, adj); + REQUIRE(out.has_color()); + // Rounding through 8-bit channels, so a level or two of slack rather than exact equality. + for (size_t i = 0; i < out.rgb.size(); ++i) + REQUIRE(std::abs(int(out.rgb[i]) - int(src.rgb[i])) <= 2); +} + +TEST_CASE("the adjustment blur radius ramps from zero and stays under its cost cap", "[TextureDisplacement]") +{ + CHECK_THAT(adjustment_blur_radius(0.f, 512, 512), Catch::Matchers::WithinAbs(0.f, 1e-6f)); + // 5% of the short side, as the Smoothing slider uses. + CHECK_THAT(adjustment_blur_radius(1.f, 512, 512), Catch::Matchers::WithinAbs(25.6f, 1e-3f)); + CHECK_THAT(adjustment_blur_radius(0.5f, 512, 512), Catch::Matchers::WithinAbs(12.8f, 1e-3f)); + // Capped, so a large image at the top of the slider cannot cost without bound. + CHECK_THAT(adjustment_blur_radius(1.f, 8192, 8192), Catch::Matchers::WithinAbs(48.f, 1e-3f)); + // Sized off the short side, not the long one. + CHECK_THAT(adjustment_blur_radius(1.f, 4096, 200), Catch::Matchers::WithinAbs(10.f, 1e-3f)); +} + +TEST_CASE("downscaling a height texture averages the texels it drops and never upscales", + "[TextureDisplacement]") +{ + // Averaging, not decimation: a one-texel checkerboard halved must come out uniformly mid-grey. Picking + // one texel per block would instead come out all black or all white - detail the adjustment never + // produced, shown in the preview. + const DecodedHeightTexture small = downscale_height_texture(make_gray_checkerboard(16, 16), 8); + CHECK(small.width == 8); + CHECK(small.height == 8); + CHECK(std::all_of(small.pixels.begin(), small.pixels.end(), [](uint8_t v) { return v == 127; })); + + // Already within the limit: handed back as it is. + const DecodedHeightTexture ramp = make_gray_ramp(64, 4); + const DecodedHeightTexture same = downscale_height_texture(ramp, 256); + CHECK(same.width == ramp.width); + CHECK(same.height == ramp.height); + CHECK(same.pixels == ramp.pixels); + + // Aspect preserved, and a colour source keeps its colour. + const DecodedHeightTexture wide = downscale_height_texture(make_rgb_flat(200, 60, 30, 400, 100), 100); + CHECK(wide.width == 100); + CHECK(wide.height == 25); + CHECK(wide.has_color()); +} + +TEST_CASE("a layer's live image adjustment reaches its decode", "[TextureDisplacement]") +{ + // This is what makes the image-adjustment panel's sliders move the relief: decode_height_texture() + // applies the layer's preview_adjust, so everything downstream of the decode - the displacement, the + // colour, the thumbnails, the bake - sees the adjusted image without being told about the panel. + TextureDisplacementLayer layer; + layer.image_data = make_checkerboard_png(32, 32); + + const DecodedHeightTexture raw = decode_height_texture(layer); + REQUIRE_FALSE(raw.empty()); + + // An untouched panel, and a closed one, cost nothing and change nothing. + layer.preview_adjust = TextureAdjustments{}; + CHECK(decode_height_texture(layer).pixels == raw.pixels); + + layer.preview_adjust.brightness = 0.5f; + const DecodedHeightTexture bright = decode_height_texture(layer); + CHECK(bright.pixels != raw.pixels); + CHECK(bright.pixels == apply_texture_adjustments(raw, layer.preview_adjust).pixels); + + // Back to identity gives the stored image back, so closing the panel really does revert the layer. + layer.preview_adjust = TextureAdjustments{}; + CHECK(decode_height_texture(layer).pixels == raw.pixels); +} + +TEST_CASE("changing a live adjustment is not served the previous one from cache", "[TextureDisplacement]") +{ + // The decode caches by the image_data pointer, which does not change while a slider moves - so the + // adjustment has to be part of the key or every slider move past the first would redraw the same + // pixels. Same for the smoothed copy, which is computed on top of the adjusted one. + TextureDisplacementLayer layer; + layer.image_data = make_checkerboard_png(32, 32); + const DecodedHeightTexture raw = decode_height_texture(layer); + REQUIRE_FALSE(raw.empty()); + + layer.preview_adjust.brightness = 0.5f; + const std::vector bright = decode_height_texture(layer).pixels; + layer.preview_adjust.brightness = -0.5f; + const std::vector dark = decode_height_texture(layer).pixels; + CHECK(bright != dark); + CHECK(dark == apply_texture_adjustments(raw, layer.preview_adjust).pixels); + + // The same question again with smoothing on, which is cached separately and keyed by both. + layer.smoothing = 0.5f; + layer.preview_adjust.brightness = 0.5f; + const std::vector smooth_bright = decode_height_texture(layer).pixels; + layer.preview_adjust.brightness = -0.5f; + const std::vector smooth_dark = decode_height_texture(layer).pixels; + CHECK(smooth_bright != smooth_dark); +} + // --------------------------------------------------------------------------------------------- // Texture smoothing // --------------------------------------------------------------------------------------------- From 39c77325ce050cb19cdae6469ea918d88720e573 Mon Sep 17 00:00:00 2001 From: ExPikaPaka <112851715+ExPikaPaka@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:05:05 +0200 Subject: [PATCH 037/137] Carry existing colour across a bake instead of reindexing it (#16392) * Carry existing colour across a bake instead of reindexing it Baking, painting colour, then baking again left colour debris on surfaces nothing had painted and destroyed what the earlier bake had laid down. TextureDisplacementBakeJob::finalize() deserialized the volume's pre-bake mmu_segmentation_facets into a TriangleSelector built on the post-bake mesh, on the assumption that the bake is topology-preserving. That holds for the classic path, which moves vertices and leaves the topology alone, but not for the one-run pipeline, which rebuilds the mesh. TriangleSelector::deserialize() only checks that the stored triangle ids are in range, and a bake almost always grows the triangle count, so every stale id passed that check and landed on an unrelated face. Measured on a 26 mm slab baked twice at 0.19 mm with a 750 k budget: 7580 triangles ended up carrying paint neither bake produced, as far as 31 mm from any colour that was actually laid down, while the first pass's colour was lost where the second bake left the surface alone. TriangleSelector::remap_painting() already transfers paint between meshes by position, and ModelVolume::restore_painting() uses it for the same reason, so the bake job now uses it too. It runs in process(), on the worker thread: it builds an AABB tree over both meshes and took around a second on the case above, which would have frozen the UI in finalize(). The bake's own colour is still applied last, so it wins where it painted and the rest is kept, which is what makes successive bakes accumulate rather than overwrite. If the volume is painted while the bake is running, a timestamp check falls back to the live mask so that stroke is not dropped. The out_triangle comment in TextureColorRequest claimed the bake is topology-preserving, which is what justified the original indexing; it now says which mesh the colours belong to. The regression test bakes twice, checks both results are closed, and checks the first bake's colour survives the second at the positions where it was laid down and nowhere else. * Carry the paint across with transfer_facet_paint The branch used TriangleSelector::remap_painting(), which pairs a source paint triangle with a target triangle overlapping it to within TriangleCursor::tolerance. That is right after a remesh, which leaves the surface where it was, and wrong after a bake, which has moved it by the relief depth - most of the paint finds no partner. transfer_facet_paint() asks the other question: every triangle of the new mesh takes the state painted at its foot point on the old one, which is exactly where it came from however deep the relief. It also does all four paint channels rather than colour alone, and it runs where the volume is read, so the snapshot and the timestamp that guarded against the user painting while the bake ran are no longer needed: the annotation is read at commit time and is by definition current. The function and its call site are byte for byte what the model-UV branch carries, so the two merge in any order and in either order produce one mechanism rather than two fighting over mmu_segmentation_facets. The regression test is unchanged except for the call it makes. --------- Co-authored-by: SoftFever <103989404+SoftFever@users.noreply.github.com> --- src/libslic3r/TextureDisplacement.cpp | 55 +++++++ src/libslic3r/TextureDisplacement.hpp | 25 +++ .../GUI/Jobs/TextureDisplacementBakeJob.cpp | 62 ++++++- tests/libslic3r/test_texture_displacement.cpp | 153 ++++++++++++++++++ 4 files changed, 292 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/TextureDisplacement.cpp b/src/libslic3r/TextureDisplacement.cpp index 0153bb169b..27d3eb8311 100644 --- a/src/libslic3r/TextureDisplacement.cpp +++ b/src/libslic3r/TextureDisplacement.cpp @@ -1897,6 +1897,61 @@ std::vector compute_connected_net(const PatchUnwrap &unwrap) return islands; } +std::vector transfer_facet_paint(const indexed_triangle_set &src_mesh, + const TriangleSelector::TriangleSplittingData &src_paint, + const indexed_triangle_set &dst_mesh) +{ + if (src_mesh.indices.empty() || dst_mesh.indices.empty() || src_paint.bitstream.empty()) + return {}; + + const TriangleMesh src(src_mesh); + TriangleSelector selector(src); + selector.deserialize(src_paint, false); + + // Every sub-triangle of the source, each carrying its own state - NONE included, so the soup + // covers the whole surface and a foot point always lands on something. One soup rather than one + // tree per state: a foot point has one nearest triangle, and that triangle's state is the answer. + std::vector per_state; + selector.get_facets(per_state); + indexed_triangle_set soup; + std::vector label; + for (size_t st = 0; st < per_state.size(); ++st) { + const indexed_triangle_set &part = per_state[st]; + if (part.indices.empty()) + continue; + const int base = int(soup.vertices.size()); + soup.vertices.insert(soup.vertices.end(), part.vertices.begin(), part.vertices.end()); + for (const stl_triangle_vertex_indices &t : part.indices) { + soup.indices.emplace_back(t[0] + base, t[1] + base, t[2] + base); + label.push_back(uint8_t(st)); + } + } + if (soup.indices.empty()) + return {}; + + const AABBTreeIndirect::Tree3f tree = + AABBTreeIndirect::build_aabb_tree_over_indexed_triangle_set(soup.vertices, soup.indices); + + std::vector out(dst_mesh.indices.size(), 0); + tbb::parallel_for(tbb::blocked_range(0, dst_mesh.indices.size()), + [&](const tbb::blocked_range &range) { + for (size_t j = range.begin(); j < range.end(); ++j) { + const stl_triangle_vertex_indices &t = dst_mesh.indices[j]; + // The centroid, not a corner: a facet takes one state, and its middle is the point that + // is inside it whatever the triangle looks like. + const Vec3f centroid = (dst_mesh.vertices[size_t(t[0])] + dst_mesh.vertices[size_t(t[1])] + + dst_mesh.vertices[size_t(t[2])]) / 3.f; + size_t hit = 0; + Vec3f foot; + const float d2 = AABBTreeIndirect::squared_distance_to_indexed_triangle_set(soup.vertices, soup.indices, + tree, centroid, hit, foot); + if (d2 >= 0.f && hit < label.size()) + out[j] = label[hit]; + } + }); + return out; +} + void average_island_scales(std::vector &islands) { if (islands.empty()) diff --git a/src/libslic3r/TextureDisplacement.hpp b/src/libslic3r/TextureDisplacement.hpp index 6a121d19a8..2d5a759d61 100644 --- a/src/libslic3r/TextureDisplacement.hpp +++ b/src/libslic3r/TextureDisplacement.hpp @@ -692,6 +692,31 @@ bool sample_layer_color(const DecodedHeightTexture &texture, const TextureDispla const Vec3f &patch_center = Vec3f::Zero(), const Vec3f &patch_axis = Vec3f::UnitZ(), const Vec2f *lscm_uv = nullptr); +// Carries a per-facet paint annotation - the colour paint above all - from a mesh onto the mesh a +// bake produced from it: every triangle of `dst_mesh` takes the state painted at its own foot point on +// `src_mesh`, i.e. on the nearest point of the surface it was built from. Returned as one +// EnforcerBlockerType per `dst_mesh` triangle, 0 (NONE) where that foot point carried no paint. +// +// ModelVolume::restore_painting() cannot do this. Its remap pairs a source paint triangle with a +// target triangle that *overlaps* it to within 0.01 mm, which is right for a remesh or a +// simplification - they leave the surface where it was - and useless after a bake, which moves the +// surface by the relief depth. Measured on a model displaced by a tenth of its own size, that remap +// kept a quarter of the colour and left the rest unpainted; this keeps essentially all of it, because +// a foot point is exactly as far away as the relief is deep and the lookup does not care how far that +// is. +// +// The source's *sub*-triangles are what is looked up, not its triangles, so the part of a triangle a +// brush stroke only clipped a corner off keeps its own state rather than rounding to the whole +// triangle's. No distance limit is needed or wanted: the nearest point on the source surface is where +// a baked triangle came from however far the relief carried it, and an unpainted origin reports NONE +// on its own. +// +// Returns an empty vector when `src_paint` is empty or either mesh is - the caller then has nothing to +// carry, which is not the same as "carry nothing". +std::vector transfer_facet_paint(const indexed_triangle_set &src_mesh, + const TriangleSelector::TriangleSplittingData &src_paint, + const indexed_triangle_set &dst_mesh); + // Area-weighted centroid and average normal of a layer's currently painted patch, in mesh-local // coordinates - the same measurements build_texture_displacement() uses to pick its dominant // projection axis. Used by the GUI to anchor the on-canvas "adjust texture placement" gizmo to diff --git a/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.cpp b/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.cpp index e769800749..2ea468a76f 100644 --- a/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.cpp +++ b/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.cpp @@ -8,6 +8,7 @@ #include "libslic3r/TextureDisplacement.hpp" #include #include +#include #include "slic3r/GUI/Jobs/Worker.hpp" #include @@ -26,6 +27,7 @@ #include "slic3r/Utils/UndoRedo.hpp" #include "libslic3r/ObjectID.hpp" #include "libslic3r/TriangleMesh.hpp" +#include namespace Slic3r::GUI { @@ -126,16 +128,71 @@ void TextureDisplacementBakeJob::finalize(bool canceled, std::exception_ptr &ept { mix.a_percent(), 100 - mix.a_percent() }); }); + // Whether the bake replaced the triangles or only moved the vertices it was given. The classic + // path is topology-preserving by contract, so every per-triangle annotation on the volume still + // means what it did; the default pipeline refines, cuts and simplifies, so none of them do. + // Both are checked: the flag is what the bake promised, the count is what it delivered. Only + // the triangles matter - the annotations are per facet and reference no vertex index - so a + // vertex count that changed on its own (the bake compacts unreferenced vertices away) is not a + // reason to remap anything. + const bool topology_changed = m_input.options.pipeline_v2 || + m_result.its.indices.size() != m_input.base_mesh.indices.size(); + + // Carry the volume's existing paint - the model's own colours above all - across that rebuild. + // Without it a bake left the mmu_segmentation_facets bitstream pointing at a triangle set that + // no longer existed, which is what scrambled the colours of an imported coloured model even + // with colour switched off on every layer and nothing in the bake that was meant to touch them. + // + // transfer_facet_paint() rather than ModelVolume::restore_painting(): the latter's remap wants + // a target triangle overlapping the source paint to within 0.01 mm, which the baked surface is + // nowhere near - it has moved by the relief depth. Nothing to do when the topology is intact: + // triangle i is still triangle i, so the paint is already exactly right and carrying it at all + // could only lose detail. + std::array before; + if (topology_changed) { + before[0] = volume->supported_facets.get_data(); + before[1] = volume->seam_facets.get_data(); + before[2] = volume->mmu_segmentation_facets.get_data(); + before[3] = volume->fuzzy_skin_facets.get_data(); + } + volume->set_mesh(std::move(m_result)); volume->set_new_unique_id(); volume->calculate_convex_hull(); + if (topology_changed) { + const std::array target{ &volume->supported_facets, &volume->seam_facets, + &volume->mmu_segmentation_facets, + &volume->fuzzy_skin_facets }; + for (size_t ch = 0; ch < target.size(); ++ch) { + const std::vector state = + transfer_facet_paint(m_input.base_mesh, before[ch], volume->mesh().its); + // Nothing was painted in this channel, or there is nothing to paint it onto: either + // way the annotation must not keep describing the mesh that is gone. + if (state.empty()) { + target[ch]->reset(); + continue; + } + TriangleSelector selector(volume->mesh()); + bool any = false; + for (size_t i = 0; i < state.size(); ++i) + if (state[i] != 0) { + selector.set_facet(int(i), EnforcerBlockerType(state[i])); + any = true; + } + if (any) + target[ch]->set(selector); + else + target[ch]->reset(); + } + } + // Colour lands in mmu_segmentation_facets, merged *over* whatever is already painted there // rather than replacing it: a triangle the texture does not colour keeps its existing filament, // and one the user never painted at all stays at NONE, which already means "the volume's own // filament". That is what confines the effect to the painted area without having to invent a - // colour for everything outside it. Safe to index straight onto the new mesh - the bake is - // topology-preserving, so triangle i is still triangle i. + // colour for everything outside it. What was already painted is whatever the transfer above + // left in the annotation, so this bake's colour lands on top of it rather than instead of it. if (!m_triangle_color.empty() && m_triangle_color.size() == volume->mesh().its.indices.size()) { TriangleSelector selector(volume->mesh()); const TriangleSelector::TriangleSplittingData &existing = volume->mmu_segmentation_facets.get_data(); @@ -159,7 +216,6 @@ void TextureDisplacementBakeJob::finalize(bool canceled, std::exception_ptr &ept // pipeline, which rebuilds and then simplifies the mesh. A mask left behind against the old // topology is exactly what makes the gizmo reload an empty selector over a non-empty mask and // then erase it on the next flush - see GLGizmoTextureDisplacement::update_from_model_object(). - const bool topology_changed = m_input.base_mesh.indices.size() != volume->mesh().its.indices.size(); for (int slot = 0; slot < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++slot) { const auto it = std::find_if(m_input.layers.begin(), m_input.layers.end(), [slot](const TextureDisplacementLayer &l) { return l.slot == slot; }); diff --git a/tests/libslic3r/test_texture_displacement.cpp b/tests/libslic3r/test_texture_displacement.cpp index f57be521ab..2e4210189d 100644 --- a/tests/libslic3r/test_texture_displacement.cpp +++ b/tests/libslic3r/test_texture_displacement.cpp @@ -37,10 +37,12 @@ #include #include "libslic3r/AABBMesh.hpp" +#include "libslic3r/AABBTreeIndirect.hpp" #include "libslic3r/TextureDisplacement.hpp" #include "libslic3r/TextureBake/TextureBakeDecimate.hpp" #include "libslic3r/TextureBake/TextureBakeFlip.hpp" #include "libslic3r/TextureBake/TextureBakeMesh.hpp" +#include "libslic3r/TextureBake/TextureBakeRepair.hpp" #include "libslic3r/TriangleMesh.hpp" #include "libslic3r/TriangleSelector.hpp" #include "libslic3r/PNGReadWrite.hpp" @@ -2708,6 +2710,157 @@ TEST_CASE("Cancelling while flat faces are harvested past the budget stops the d CHECK(canceled > full); } +TEST_CASE("Baking twice keeps the mesh closed and carries the first bake's colours across", + "[TextureDisplacement][Regression]") +{ + // Bake, colour part of what came back, bake again. The one-run pipeline rebuilds the topology, so + // the colour recorded against the first bake's mesh indexes triangles that no longer mean the same + // thing. Taken across by triangle id it lands on unrelated faces - a bake almost always grows the + // triangle count, so every stale id passes the only bound check deserialize() makes - which both + // scatters colour over surfaces nothing painted and destroys what the first pass laid down. + // transfer_facet_paint() carries it across by position instead - every triangle of the new mesh + // takes the state painted at its foot point on the old one - which is what makes successive bakes + // accumulate. See TextureDisplacementBakeJob, which is where the two meet. + constexpr float side = 20.f; + constexpr float refine = 0.5f; + constexpr float radius = 4.f; + const indexed_triangle_set cube = its_make_cube(side, side, side); + const Vec2f first_stroke(6.f, 6.f), second_stroke(14.f, 14.f); + + TextureDisplacementLayer layer; + layer.slot = 0; + layer.image_data = make_rgb_png_2x2(); + layer.tiling_scale = 5.f; + layer.depth_mm = 0.5f; + layer.color_enabled = true; + + TextureDisplacementOptions options; + options.pipeline_v2 = true; + options.v2_refine_mm = refine; + options.v2_max_triangles_k = 750; + + // Three primaries, so a palette entry is legible in the assertions below. + const std::array palette = { Vec3f(1, 0, 0), Vec3f(0, 1, 0), Vec3f(0, 0, 1) }; + TextureColorRequest request; + request.quantize = [&palette](const Vec3f &rgb) { + int best = 0; + float bd = std::numeric_limits::max(); + for (int i = 0; i < 3; ++i) + if (const float d = (palette[size_t(i)] - rgb).squaredNorm(); d < bd) { bd = d; best = i; } + return best; + }; + + const auto bake = [&](const indexed_triangle_set &mesh, const Vec2f &stroke, std::vector &color) { + TextureDisplacementFacetsData facets; + facets[0] = paint_top_disc(mesh, side, stroke, radius); + TextureColorRequest req = request; + req.out_triangle = &color; + return build_texture_displacement(mesh, { layer }, facets, options, {}, &req); + }; + // The pipeline's own counters, over welded positions, so a mesh watertight only after welding + // still reads as closed. + const auto defects = [](const indexed_triangle_set &mesh) { + return TextureBake::count_edge_defects(TextureBake::to_soup(mesh)); + }; + + std::vector color1; + const indexed_triangle_set first = bake(cube, first_stroke, color1); + REQUIRE(first.indices.size() > cube.indices.size()); + REQUIRE(color1.size() == first.indices.size()); + const TextureBake::EdgeDefects d1 = defects(first); + INFO("first bake: " << d1.triangles << " triangles, " << d1.open << " open, " << d1.non_manifold << " non-manifold"); + CHECK(d1.open == 0); + CHECK(d1.non_manifold == 0); + + // The colour the first bake committed, as TextureDisplacementBakeJob writes it. + TriangleSelector::TriangleSplittingData painted_first; + { + const TriangleMesh mesh(first); + TriangleSelector selector(mesh); + for (size_t i = 0; i < color1.size(); ++i) + if (color1[i] != 0) + selector.set_facet(int(i), EnforcerBlockerType(color1[i])); + painted_first = selector.serialize(); + } + REQUIRE_FALSE(painted_first.bitstream.empty()); + + std::vector color2; + const indexed_triangle_set second = bake(first, second_stroke, color2); + REQUIRE(color2.size() == second.indices.size()); + REQUIRE(second.indices.size() != first.indices.size()); // the topology really did change + const TextureBake::EdgeDefects d2 = defects(second); + INFO("second bake: " << d2.triangles << " triangles, " << d2.open << " open, " << d2.non_manifold << " non-manifold"); + CHECK(d2.open == 0); + CHECK(d2.non_manifold == 0); + + // The commit: the earlier colour carried onto the new topology, this bake's own colour over it. + std::vector committed(second.indices.size(), 0); + { + const TriangleMesh mesh(second); + TriangleSelector selector(mesh); + const std::vector carried = transfer_facet_paint(first, painted_first, second); + REQUIRE(carried.size() == second.indices.size()); + for (size_t i = 0; i < carried.size(); ++i) + if (carried[i] != 0) + selector.set_facet(int(i), EnforcerBlockerType(carried[i])); + for (size_t i = 0; i < color2.size(); ++i) + if (color2[i] != 0) + selector.set_facet(int(i), EnforcerBlockerType(color2[i])); + for (int state = 1; state <= int(palette.size()); ++state) { + std::vector src; + if (selector.get_facets_strict(EnforcerBlockerType(state), &src).indices.empty()) + continue; + for (const int s : src) + if (s >= 0 && size_t(s) < committed.size() && committed[size_t(s)] == 0) + committed[size_t(s)] = uint8_t(state); + } + } + + // Just the triangles the first bake coloured, to ask "how far is this from colour that was really + // laid down" of anything the commit painted. + indexed_triangle_set coloured_first; + coloured_first.vertices = first.vertices; + for (size_t i = 0; i < color1.size(); ++i) + if (color1[i] != 0) + coloured_first.indices.push_back(first.indices[i]); + const AABBTreeIndirect::Tree3f tree = AABBTreeIndirect::build_aabb_tree_over_indexed_triangle_set( + coloured_first.vertices, coloured_first.indices); + + // A triangle may carry colour the second bake did not produce only where the first bake's colour + // actually was. A foot point sits on the surface the bake started from, which the relief has since + // moved, and the transfer can widen the region by a triangle, so the margin is twice the edge + // length the bake was told to refine to; landing anywhere else means the mask was read against a + // mesh it no longer matches. + size_t own = 0, carried_over = 0, stranded = 0; + float worst = 0.f; + for (size_t i = 0; i < second.indices.size(); ++i) { + if (committed[i] == 0) + continue; + if (i < color2.size() && color2[i] != 0) { + CHECK(committed[i] == color2[i]); // this bake's own colour wins where it painted + ++own; + continue; + } + const stl_triangle_vertex_indices &t = second.indices[i]; + const Vec3f g = (second.vertices[size_t(t[0])] + second.vertices[size_t(t[1])] + + second.vertices[size_t(t[2])]) / 3.f; + size_t hit = 0; + Vec3f foot; + const float d = std::sqrt(std::max(0.f, AABBTreeIndirect::squared_distance_to_indexed_triangle_set( + coloured_first.vertices, coloured_first.indices, tree, g, hit, foot))); + worst = std::max(worst, d); + if (d <= 2.f * refine) + ++carried_over; + else + ++stranded; + } + INFO("committed: " << own << " from this bake, " << carried_over << " carried over, " << stranded + << " stranded, worst distance from the first bake's colour " << worst << " mm"); + CHECK(own > 0); + CHECK(carried_over > 0); // the first bake's colour survived the second + CHECK(stranded == 0); // and nothing was painted where neither bake put colour +} + TEST_CASE("A second bake beside a first comes out as fine as a single bake", "[TextureDisplacement]") { // A stroke in each of the cube's two top triangles, baked one after the other. The first bake used From ab42ddeef2549e169dcd1ca978153bcf4f501cac Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Tue, 13 Oct 2026 06:19:07 -0500 Subject: [PATCH 038/137] ci: replace deploy-nightly action with a local composite action (#16419) WebFreak001/deploy-nightly still targets Node.js 20, so every main build logged a deprecation warning per deploy step. The action has had no release since 2024 and its Node 24 PR is unmerged. The local action in .github/actions/deploy-nightly uploads the new file under a temporary name and renames it once the upload finishes, so a failed upload keeps the existing nightly asset. It also fails on a missing file before deleting anything, retries transient API errors, times out stalled transfers, handles concurrent runs, and finds the release by its nightly-builds tag. The macOS validator DMG deploy now runs only when that DMG was built. --- .github/actions/deploy-nightly/action.yml | 29 ++++++ .github/actions/deploy-nightly/deploy.sh | 104 ++++++++++++++++++++++ .github/workflows/build_all.yml | 6 +- .github/workflows/build_orca.yml | 60 +++---------- 4 files changed, 148 insertions(+), 51 deletions(-) create mode 100644 .github/actions/deploy-nightly/action.yml create mode 100644 .github/actions/deploy-nightly/deploy.sh diff --git a/.github/actions/deploy-nightly/action.yml b/.github/actions/deploy-nightly/action.yml new file mode 100644 index 0000000000..cfcd1c7fcb --- /dev/null +++ b/.github/actions/deploy-nightly/action.yml @@ -0,0 +1,29 @@ +name: 'Deploy Nightly' +description: 'Upload a file to a release, replacing the asset of the same name' +inputs: + asset_path: + description: 'Path of the file to upload' + required: true + asset_name: + description: 'Asset name on the release' + required: true + content_type: + description: 'Content type of the uploaded file' + required: false + default: 'application/octet-stream' + tag: + description: 'Tag of the release to upload to' + required: false + default: 'nightly-builds' +runs: + using: 'composite' + steps: + - name: Replace release asset + shell: bash + env: + GH_TOKEN: ${{ github.token }} + ASSET_PATH: ${{ inputs.asset_path }} + ASSET_NAME: ${{ inputs.asset_name }} + CONTENT_TYPE: ${{ inputs.content_type }} + RELEASE_TAG: ${{ inputs.tag }} + run: bash "$GITHUB_ACTION_PATH/deploy.sh" diff --git a/.github/actions/deploy-nightly/deploy.sh b/.github/actions/deploy-nightly/deploy.sh new file mode 100644 index 0000000000..9d5b22b9a8 --- /dev/null +++ b/.github/actions/deploy-nightly/deploy.sh @@ -0,0 +1,104 @@ +#!/usr/bin/env bash +# Replaces one asset of a GitHub release, uploading under a temporary name +# first so a failed upload leaves the old asset in place. +# +# Environment: GH_TOKEN, ASSET_PATH, ASSET_NAME, CONTENT_TYPE, RELEASE_TAG and +# the GITHUB_* variables Actions sets. + +# The $names inside the single-quoted jq programs are jq variables. +# shellcheck disable=SC2016 +set -euo pipefail + +repo_api="$GITHUB_API_URL/repos/$GITHUB_REPOSITORY" + +if [ ! -f "$ASSET_PATH" ]; then + echo "::error::$ASSET_PATH does not exist" + exit 1 +fi + +# The speed limit turns a stalled transfer into an error that --retry handles. +curl_opts=(-sS --retry 3 --connect-timeout 30 --speed-limit 1024 --speed-time 60 + -H "Authorization: Bearer $GH_TOKEN") + +# Prints the response body, or reports GitHub's error body and fails. +api() { + local out + if ! out=$(curl "${curl_opts[@]}" --fail-with-body "$@"); then + # A workflow command ends at the first newline. + echo "::error::GitHub API request failed: ${out//[$'\r\n']/ }" >&2 + return 1 + fi + printf '%s\n' "$out" +} + +http_status() { + curl "${curl_opts[@]}" -o /dev/null -w '%{http_code}' "$@" +} + +# jq prints CRLF on Windows. +jqr() { + jq -r "$@" | tr -d '\r' +} + +delete_asset() { + local code + code=$(http_status -X DELETE "$repo_api/releases/assets/$1") + case $code in + # A 404 means a concurrent run already deleted the asset. + 204 | 404) ;; + *) + echo "::error::Deleting release asset $1 failed with HTTP $code" >&2 + return 1 + ;; + esac +} + +list_assets() { + local page=1 json + while :; do + # Callers run this inside $(...), where bash ignores set -e. + json=$(api "$repo_api/releases/$release_id/assets?per_page=100&page=$page") || exit 1 + printf '%s\n' "$json" + [ "$(jqr length <<<"$json")" -eq 100 ] || break + page=$((page + 1)) + done | jq -s add +} + +release=$(api "$repo_api/releases/tags/$RELEASE_TAG") +release_id=$(jqr .id <<<"$release") +upload_url=$(jqr .upload_url <<<"$release") +upload_url=${upload_url%%\{*} + +# Unique per run attempt, so concurrent runs never upload to the same name. +tmp_name="$ASSET_NAME.partial-$GITHUB_RUN_ID-$GITHUB_RUN_ATTEMPT" + +# Deletes leftover partials older than an hour, an age no upload in progress reaches. +stale_ids=$(list_assets | jqr --arg prefix "$ASSET_NAME.partial-" \ + '.[] | select((.name | startswith($prefix)) and (.created_at | fromdateiso8601) < now - 3600) | .id') +for id in $stale_ids; do + delete_asset "$id" +done + +name_query=$(jqr -n --arg name "$tmp_name" '$name | @uri') +# Uploads once, since a retry after an upload that succeeded fails on the taken name. +new_id=$(api --retry 0 -X POST -H "Content-Type: $CONTENT_TYPE" -T "$ASSET_PATH" \ + "$upload_url?name=$name_query" | jqr .id) +trap 'delete_asset "$new_id" || true' EXIT + +rename_body=$(jq -n --arg name "$ASSET_NAME" '{name: $name}') +# Retries on HTTP 422, which a concurrent run causes by renaming its own upload +# between this delete and this rename. +for _ in 1 2 3; do + old_ids=$(list_assets | jqr --arg name "$ASSET_NAME" '.[] | select(.name == $name) | .id') + for id in $old_ids; do + delete_asset "$id" + done + code=$(http_status -X PATCH -d "$rename_body" "$repo_api/releases/assets/$new_id") + if [ "$code" = 200 ]; then + trap - EXIT + exit 0 + fi + [ "$code" = 422 ] || break +done +echo "::error::Renaming $tmp_name to $ASSET_NAME failed with HTTP $code" >&2 +exit 1 diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 22790fb1e8..8fa7901623 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -441,14 +441,10 @@ jobs: path: '/__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak' - name: Deploy Flatpak to nightly release if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' - uses: WebFreak001/deploy-nightly@v3.2.0 + uses: ./.github/actions/deploy-nightly with: - upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 asset_path: /__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak asset_name: OrcaSlicer-Linux-flatpak_nightly_${{ matrix.variant.arch }}.flatpak - asset_content_type: application/octet-stream - max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted # The asset is /app (the exes link it at runtime) plus the build tree # slimmed to what ctest needs. - name: Package flatpak test asset diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index e49e157358..4d85542c71 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -397,25 +397,18 @@ jobs: - name: Deploy Mac release if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'macOS' && inputs.macos-combine-only && !vars.SELF_HOSTED - uses: WebFreak001/deploy-nightly@v3.2.0 + uses: ./.github/actions/deploy-nightly with: - upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 asset_path: ${{ github.workspace }}/OrcaSlicer_Mac_universal_${{ env.ver }}.dmg asset_name: OrcaSlicer_Mac_universal_nightly.dmg - asset_content_type: application/octet-stream - max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted + # The DMG is only built when the validator app was. - name: Deploy Mac OrcaSlicer_profile_validator DMG release - if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'macOS' && inputs.macos-combine-only && !vars.SELF_HOSTED - uses: WebFreak001/deploy-nightly@v3.2.0 + if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'macOS' && inputs.macos-combine-only && !vars.SELF_HOSTED && hashFiles(format('OrcaSlicer_profile_validator_Mac_universal_{0}.dmg', env.ver)) != '' + uses: ./.github/actions/deploy-nightly with: - upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 asset_path: ${{ github.workspace }}/OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg asset_name: OrcaSlicer_profile_validator_Mac_universal_nightly.dmg - asset_content_type: application/octet-stream - max_releases: 1 # Windows - name: Set Windows build variables @@ -542,36 +535,27 @@ jobs: - name: Deploy Windows release portable if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'Windows' && !vars.SELF_HOSTED - uses: WebFreak001/deploy-nightly@v3.2.0 + uses: ./.github/actions/deploy-nightly with: - upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 asset_path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/OrcaSlicer_Windows_${{ env.ver }}${{ env.ARCH_SUFFIX }}_portable.zip asset_name: OrcaSlicer_Windows${{ env.ARCH_SUFFIX }}_nightly_portable.zip - asset_content_type: application/x-zip-compressed - max_releases: 1 + content_type: application/x-zip-compressed - name: Deploy Windows release installer if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'Windows' && !vars.SELF_HOSTED - uses: WebFreak001/deploy-nightly@v3.2.0 + uses: ./.github/actions/deploy-nightly with: - upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 asset_path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/OrcaSlicer_Windows_Installer_${{ env.ver }}${{ env.ARCH_SUFFIX }}.exe asset_name: OrcaSlicer_Windows_Installer${{ env.ARCH_SUFFIX }}_nightly.exe - asset_content_type: application/x-msdownload - max_releases: 1 + content_type: application/x-msdownload - name: Deploy Windows OrcaSlicer_profile_validator release if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'Windows' && inputs.arch != 'arm64' && !vars.SELF_HOSTED - uses: WebFreak001/deploy-nightly@v3.2.0 + uses: ./.github/actions/deploy-nightly with: - upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 asset_path: ${{ github.workspace }}/build/src/Release/OrcaSlicer_profile_validator.exe asset_name: OrcaSlicer_profile_validator_Windows_nightly.exe - asset_content_type: application/x-msdownload - max_releases: 1 + content_type: application/x-msdownload - name: Build MSIX Store package Win if: runner.os == 'Windows' && !vars.SELF_HOSTED @@ -700,14 +684,10 @@ jobs: - name: Deploy Ubuntu release if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED }} - uses: WebFreak001/deploy-nightly@v3.2.0 + uses: ./.github/actions/deploy-nightly with: - upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 asset_path: ./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}${{ env.arch_suffix }}_${{ env.ver }}.AppImage asset_name: OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}${{ env.arch_suffix }}_nightly.AppImage - asset_content_type: application/octet-stream - max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted - name: Deploy Ubuntu release if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64' }} run: | @@ -716,36 +696,24 @@ jobs: - name: Deploy Ubuntu OrcaSlicer_profile_validator release if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64' }} - uses: WebFreak001/deploy-nightly@v3.2.0 + uses: ./.github/actions/deploy-nightly with: - upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 asset_path: ./build/src/Release/OrcaSlicer_profile_validator asset_name: OrcaSlicer_profile_validator_Linux${{ env.ubuntu-ver-str }}_nightly - asset_content_type: application/octet-stream - max_releases: 1 - name: Deploy Ubuntu generate_system_cache release if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64' }} - uses: WebFreak001/deploy-nightly@v3.2.0 + uses: ./.github/actions/deploy-nightly with: - upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 asset_path: ./build/src/dev-utils/Release/generate_system_cache asset_name: generate_system_cache_Linux${{ env.ubuntu-ver-str }}_nightly - asset_content_type: application/octet-stream - max_releases: 1 - name: Deploy orca_custom_preset_tests if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64' }} - uses: WebFreak001/deploy-nightly@v3.2.0 + uses: ./.github/actions/deploy-nightly with: - upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 asset_path: ${{ github.workspace }}/resources/profiles/orca_custom_preset_tests.zip asset_name: orca_custom_preset_tests.zip - asset_content_type: application/octet-stream - max_releases: 1 # The build has just touched everything it can use, so an object # untouched for a week is dead, usually orphaned by a flag change. From 64ddc1fbba25c4f2a4ec686f82ce69944bdf998b Mon Sep 17 00:00:00 2001 From: ExPikaPaka Date: Tue, 13 Oct 2026 13:21:17 +0200 Subject: [PATCH 039/137] Texture displacement: tooltips beside the panel, with illustrations The panel is pinned to the right edge of the canvas, so a tooltip left to follow the mouse covers the very control it explains. panel_tooltip() places every tooltip in the gizmo to the left of the panel instead - or of the texture picker, while a tooltip is coming from inside that popup - the same placement the picker itself already uses. A tooltip can now carry pictures under its text: stills, or GIFs that loop while it is open. Several settings in this panel describe a shape rather than a number, and a sentence about a shape is read twice and understood once. Files live in resources/images/texture_displacement and are named by a tooltip; one that is missing is skipped, so a tooltip without its art yet is exactly the text tooltip it was before. AnimatedTexture decodes a file once and uploads a GL texture per frame - wxImage for stills, wxGIFDecoder for GIFs, whose frames are composited here with the disposal method each one asks for. An animation restarts when its tooltip opens and asks the canvas for a redraw timed to its next frame. Tile and Rotation are wired up as the first two; scripts/ gen_texture_displacement_tips.py draws their relief from the same arithmetic the feature uses. docs/HLSD/tooltip-illustrations.md covers the rest. --- docs/HLSD/tooltip-illustrations.md | 76 ++++++ .../images/texture_displacement/rotation.gif | Bin 0 -> 219397 bytes .../images/texture_displacement/tile_off.png | Bin 0 -> 7564 bytes .../images/texture_displacement/tile_on.png | Bin 0 -> 40341 bytes scripts/gen_texture_displacement_tips.py | 136 ++++++++++ src/slic3r/CMakeLists.txt | 2 + src/slic3r/GUI/AnimatedTexture.cpp | 248 ++++++++++++++++++ src/slic3r/GUI/AnimatedTexture.hpp | 78 ++++++ .../GUI/Gizmos/GLGizmoTextureDisplacement.cpp | 217 +++++++++++---- .../GUI/Gizmos/GLGizmoTextureDisplacement.hpp | 35 +++ 10 files changed, 739 insertions(+), 53 deletions(-) create mode 100644 docs/HLSD/tooltip-illustrations.md create mode 100644 resources/images/texture_displacement/rotation.gif create mode 100644 resources/images/texture_displacement/tile_off.png create mode 100644 resources/images/texture_displacement/tile_on.png create mode 100644 scripts/gen_texture_displacement_tips.py create mode 100644 src/slic3r/GUI/AnimatedTexture.cpp create mode 100644 src/slic3r/GUI/AnimatedTexture.hpp diff --git a/docs/HLSD/tooltip-illustrations.md b/docs/HLSD/tooltip-illustrations.md new file mode 100644 index 0000000000..c150d3ac2f --- /dev/null +++ b/docs/HLSD/tooltip-illustrations.md @@ -0,0 +1,76 @@ +# Tooltip illustrations + +The texture-displacement panel's tooltips can carry a picture under their text: a still image, or a +short animation that loops while the tooltip is open. Several settings in that panel describe a shape +rather than a number - what Rotation turns, what Tile repeats, what Invert turns inside out - and a +sentence about a shape is read twice and understood once. + +## Where a tooltip is drawn + +`GLGizmoTextureDisplacement::panel_tooltip()` replaces `ImGuiWrapper::tooltip()` throughout the panel. +It differs in two ways. + +It places the tooltip beside the panel instead of under the mouse. The panel is pinned to the right +edge of the canvas, so a tooltip following the mouse covers the control it is explaining, and one +carrying a picture covers most of the panel with it. The tooltip goes to the left of +`m_tooltip_anchor_min`/`_max` - the panel's own screen rectangle, or the texture picker's while that +popup is up and the tooltip comes from inside it - and to the right only when there is no room on the +left. This is the placement the picker popup itself already uses. + +ImGui normally keeps a tooltip glued to the mouse and ignores `SetNextWindowPos()`. Orca's imgui +branch honours a position set for a tooltip (see the `ImGuiWindowFlags_Tooltip` branch of `Begin()` in +`deps_src/imgui/imgui.cpp`) and still clamps the result inside the canvas, which is what keeps a tall +tooltip near the bottom edge on screen. + +It also gives the tooltip a fixed width rather than one derived from its text, because a picture has +to be laid out against something, and a column of tooltips that are all one width is steadier to read. + +## Where the pictures live + +`resources/images/texture_displacement/`, as PNG, JPG, BMP or GIF. A tooltip names them by file: + +```cpp +hover_tip(_u8L("Repeats the texture across the painted area. ..."), + { { "tile_off.png", _L("Off") }, { "tile_on.png", _L("On") } }); +``` + +Several in one tooltip are laid out side by side at equal widths, which is how a setting is shown as a +comparison - the same model at two values of it. The caption under each is translated; the file name +is not. + +A file that is missing or will not decode is skipped, and a tooltip whose pictures are all missing is +exactly the text tooltip it was before. So the art for a tooltip can land after the tooltip does, and +a half-finished set never breaks the panel. + +## Decoding and playback + +`slic3r/GUI/AnimatedTexture.hpp` decodes a file once and uploads one GL texture per frame. Stills go +through `wxImage`; GIFs go through `wxGIFDecoder`, whose raw palette indices are composited here frame +by frame, replaying the disposal method each frame asks for. That replay is what makes an animation +look continuous: a GIF frame is a sub-rectangle drawn over what came before it, so an animation that +only re-sends the pixels that changed draws as a flicker of disconnected patches without it. + +A frame delay of 0 or 1 hundredths of a second is read as 100 ms, the convention browsers settle on, +so an animation authored against that plays at the speed it was authored at. + +The animation restarts when its tooltip opens, rather than running off a free-running clock: these are +short loops of one setting going from one value to another, and joining one halfway through shows the +end of a change the user never saw the start of. The canvas only redraws on demand, so each frame asks +for the next through `GLCanvas3D::schedule_extra_frame()`, timed to when that frame is actually due. + +## Making one + +Captures of the real tool are the first choice for anything involving the model, the mesh or colour. +Settings whose meaning is a shape can be drawn from the same arithmetic instead: +`scripts/gen_texture_displacement_tips.py` shades a height field as a relief catching the light, and +produces `tile_off.png`, `tile_on.png` and `rotation.gif` that way. + +Either way: + +- Square, around 256 px. The tooltip is about 20 em wide, so that is roughly native size on a 100% + display and downscales cleanly above it. +- Neutral grey. These say what a shape does; colour in one reads as a third thing the setting does, + and has to work against both themes. +- Animations loop seamlessly and stay short - a dozen frames at 100 ms, under about 250 KB. They sit + in `resources/`, which ships with every copy of the application. +- No text in the picture. Captions are translated; pixels are not. diff --git a/resources/images/texture_displacement/rotation.gif b/resources/images/texture_displacement/rotation.gif new file mode 100644 index 0000000000000000000000000000000000000000..590b48eda31b7c01041a701f18ac4821d9eb99d8 GIT binary patch literal 219397 zcmV)mK%T!xNk%w1VE_RD0fYbmpsTB%si~Z%rkJ9ll%AfFoSc!Hn~|HEkeZs1nVFB7 znTnH>f{TlMgM@NwA`TA^A^!_bMO0HmK~P09E-(WD0000X`2+w80000i000000096200{p8 zKL{L1u%N+%2oow?$grWqhY%x5oJg^v#fum-YTU@NqsNaDJ%}7RvO|ZF6G^IEDbgg$ zkSt?*a49mSOqMh~*u1GS=T4p_Pu7G9l%NL;NHJVkYN6=`3>k(tY^fosRjW%cG_~+l zgH(o8uZqpOwd>b~Ei;I{O4ca`uR0y3U5k~eTeuJB(nZ>q>)W#m_3n);@Mwh!6cQ^| zYypE%upT&IuyDAtWyFgYH-3yZ^5n~xGb^rOAp_^Y9yVwNZCP|;(xw3$6sejr>%*=o zz&@Rj_UhZ1MemkfP^5<6w=od@V0eOr=g^^3Xv~3lVGqXaq*$&pL6!%=a_y49=Kfv${B@0 z1rtPIAp{s=7=Z-ty=0Vc6iQ&>h$NDjp@tmh2iQoeg;?T?7oNDGfF2IC-+9i#_~MBW z%&6i)H@c{!i87|RAbHoBC*+VZX6WOQKsG2Mj1xe(TyqgTpyiei^k}3|F>Npz1tRij zCYM`!IbCcriD?0u5tzv%np*aVADdxL2&bGU(%EGMcY?{1n243hCx(97xu&2iwYcY@ z5F`rdqBmuiqnvjE?_g>Yl2u%BrWX z!Wz@8W!9?Yt+?9xDyby7Nvp5GI*_XdvC=kXugC(sY@5$!NvE(8+Bji_4>-WUx8F9< zC5NvvyHW=k;23AO4m8lft?s%DZn)#>c7eG)rORogp1KQfyz??3E(9sw8!Ni%^4spa ztj60wzylizSH6^?+HJi5$~$kw;Y~~u2N_hn?!pXz>M+C)Jn6BlpP|~XzpiFm*tVTA zkiY>3C?Igk3gRmg2gkiB;>7_6yubnqAYeew3@AHkV?IX~G@L{i4errNFRioFJqrr5 zd=l_$^}JXs&9noGHnxG+`jQ#x!()G2w$@FjjltR_eO>6=am)XWwAot=t2US&Y|wVt z55WDcve;fpbGJ4J5P$#$FfgvDZ<*8q&@IR5Ez$=dpup&(BTxVV0}LR58Y@>a3m}j? z^St{$IRYG0ulWYXUvGQz+AmLf^Qucec>>`NKfYSWL!SKsO~>pwr;sNQ0006YK;7;` znzzW#aAR^A`U+qG1SFtz1|Wd*{s+LyU9Nx{I3WGZ_c_xw@PS#AVEX`2!Qf#ogC;@X z@y?e$209ReB3vB_TX(^(a3F>0TH)so;6e~8Ert|~o(cb7^_ClQz;If*9^`P>Ll{nQ zhSDRLy^6RwB-YPcxWgagG9@$SJkDGG1E2uWMnI@(FoD?f;0r_e#1dZ6j5tIi3)Seu z2)2=iuOlJ~3%5Z9w(x^a9HATYXhR$((T_X?BpU@O#2QlZh&fau78AL~AKo#F!h56@ zCCPv+=C5&^;uaYH7r+5l366Y}V+WhKNEr^Yj0TLO4i~6MOES`egp6e>XZgoU+VPe{ zEF>Qfi9Jfz5r|L>rY0jP%1#2EfL%EwFWK2jcPdi@HykD}pIQIUWI7U`Rb*z(m{`kSMiY}$1Slkl zxx@o#QGcPVSr|)6Ms)5`ooQsHEu;BPi^_AHy*%a}JF3Tzu2Z81wdX(cY0YAy)SS|U z=Q0^O$(LR-cnPhhKpXl{P-=^RqZFelF=*0^78Ir=4QC&XTF#N)v#4{lDKJ-R$bCxn zp!d`%O`UnwAR?5S0o^J#A^Ov1PV}3wyy#M+dQ_*rF`a8&Wm~73OSP(!oFb*GOaZD- zkn(e*Ud?J)ugKN8Vs(0jTqt43>eHD4HF83&C{bkzQhEY*hDn9%T|?SV%s!Q}CpD}} z>&jArvhc4d^(Scu%SnPZm62afY)g6iNiP5H&#c}Ys!}&=+0>qMvb(HoS3UbrsLJ)V z92IO|5jk7{V)BGqT`X#08rzvlx2Lv^Xg4DZPR-7*#RqT8p zjME6uc9QwkR9X4UUGbuqt;ij%hl3m15EHkq2<|OXmD^GW7Z}2_-DyoK6(GOQ6A`&4?9g8UpL1Zb}Vi?>`^3>`LaU(F_FQ% zU_qCd&}-&vo0B)^z(V=Lg)MS*6$)v_W_QEe<#M0V{AD#~*3fA#GfB_vUPM7KJ{Bc-Dy#OmeZ#8HG3DmfJVcY$#HJzn=?u2R$E%f znC3BBH(lyK`_{+<&b6>n?B@gnI?<&iri&#l*ksR`-1cqujj_DnOivrQ)%NzaKb>Om zjvCjY{`S2UooYre8`+gMwsWhj?mK5Q&t9x`e|=o<0@J(ODt0Tkfo<&-54+#R{v%_8uS{;Rs?iPSfG_*w=5{8#cf93yXFK2X z9^%h?t?!nf{N?Lit<3$s>Y8)><{Mx4tlKT^Tk|^DMc;M9i@fixBYNNAwrbPk3vxL_ z-Ol)(I?rwGUwjii=vrU7!;Q{cmS0@lGkyu4|Q39OV+;Qjy-=l7Dvg(<`B_BH0;cj@B+kN7mpZnd#PII#7+_id7cdX?M_{+O{@N(z6 z(A~cIlq){=Uq?0GnO^$H-}vlSX1&@2&-TtA{qth3yXZlG{N*>E*d2#)@RdDzw1?dC z2`9PFXF>XMxw(Snl_F8z_Pu_<}_^f;AX=_E&yRD1lB# zf$A59!pDNd=Yrq&fnIoo4j5)i2!=5zhNPEzWhh-!sDc5gh6AX9M5t|B*oHIcg`@_4 zb=ZV=*n{Y2hIs$TY<#G50(gZ($c2K)d6o!twl{}}NQ1&ug8X-a)OUuW*oQ%=WyP0? zZ?}o`SBQi7g`H@KY?gzexPz$2h^qI4rf7vi2#Bg!d*0WIUHFQJ=!V2Ni({yRREUD4 zXp1=Jhm`1xggA_tIE|OcipA)P)d+#02!*A{gJtG}r}vDfsBnBHjMo^9aCn2TXpGzV ziL~gA&bWuVD2dS6i>YXhny8N4hlCH9jns&Z$he5%*obrV+fc+SU zg~oyJIFS1%kIOiUkGOtPcaNypkn6~V4!MfK2$1PGfAE-$wV09TwvlKEguM8X=NOV< zsE;Ixk`e#Ojwwly-zI%5364EUaFM8xBlmu=w}dr0lE8?Q1}Kr>)@01Jl0!*`keHC< z7?b9hc{wSPG?|F)sEq>2Zz_qAQ%R5G*nSK-lUtdTUFnHy>6JTqk&ozm2ic52Nt79w zk4mY457?Hn*pxbHkx@yOR%w=hH;HMfm4L~WZ|RncnUrxkm~;7(Es2YD=8R}5lZr`^ ztmv1=_?U1hnC?ZG<7k-dhnSiPf1JsWpy`;a$&_IymzHUId}o(anVDIsnp(Jxo>`Ht z`IoUNnX^fk{%4z3iJRJYlyqo>jro_anS|UJkCXY0w^)$5c$TP{o5~rBuh^Sm`JDeK zn&baAo%4v0*y)klnT1H{mEKvB&H0(ZIhy2omsH7-m4}tdsh-REhVSW{;3j=qo=o|lg%+RVIh>RUl-DMX23n2?`ip!CpbQF~CaIv|DV980p$1u; zE=iqNd1-&BmmS)d{rR1{8I};5cM^)CrrD7gYLxoPoxJ&??)jVW36=6$qvdIw=b58e zn4mYgpg!85G5Vu3%6kJ^m<4*82dbk=x|B=`r2hG&uqmVwYMps#qO)nA7l@>lXp>s% zqFf52>*<(L`h-(jnpKLU_=%+&>W>`Sq#nwrAsVMtNt{wxr}wF%(a55Hx~FaWqYnT2 zlo635=-nVlJ`rW+b)joNja`lnz@qn|3M z%qXh#iJW+9s(Om5s|uhWx}>c7s8UI#l4_-BDvf)2tJs#P6Pc?I+Nx4Yr1W{Cg$ive z3X;frtc&WTnHr?NN}9DPtG7w2wOXu~I(yg3si~@aBT8K*I;g>Fr-quCx|yv#TCO2_ zuKFjOuR5XC8I;#KsqdPa+v$#-S*@xnuQJN4a_X#+>aE8Ku9a%5;~IAc%c#ogsNFcH z-CCylnxfKrsMJcYifXU-2bNHZuz|X<(0Znnnx^8)jxDOI1dFbo%CBR}t_=Tsq$^9T zFN>=ai>>>qtrx4Xz(gw23CNb~v*n zI)Qabw8EORh>EqC`m_XT)~dCfD6l2Ftr#1sQah?wTD3bn zw-sBkW_z%BE3|aluF<-X0K21htF(0cl>vFTYD=@A>WF(gs}9Sue_OUZ>ZXG$xzcI4 z8T+YbT7_?0s#eREF)My(3$vYyuapa`8hN?j+P9j!x^Zi)g4?;EE1;sQx1_tVRC~K* zORkT*t841IPy4Hf3%2fRw2Pa&5i7lcS-kf;q-$HG&YQSJ>9@FRsn!2`yyEGqv5T^8 zYr4=2x8QrV;%mK1H@RI~v$0CM4QsnP`@IkwzJV*Vup7UX`?d6ov!@%bn`^xL%etTY zrG=Zl&w9RTIILs)xCM;BysNHwHR!|m5IWb zYrhe!!yp`*NF15iTfS_IxNe)is5`;bE0Qj(yZn2_{wuppOu41|z+$_?Qf$Oj+`h}p zt-y=M!rQ@7+`2rQz~dZ%YskCXxK95Y!^}Inf}Fx@td>aZ z#SEy&Y3svSti3_}yf)m$B23A3o3x9(z?s~@T8zG(Ou(Pq!mRwdWcr%$fA77zWc*byU#V;y|>KF0G-aRjL!p|#oN2Z zsZ7M^Y|j*|$PP`yRF=WiEYU*T&me8lx%|?*{JY0I&UODx$ieK=!;H}}4bd~K(wt1u z=Zw=B9njHy(o8JN(oD|w2+v5%!&{ouBK^LYywRHM)7IRAHyzbe?3y~g&NAK3$o$KZ zyv$nd##~+2ef-McOwb*T%0P|K^vtGEz0mhezEo|>ZEesjUD0UW%-mePJDtxF9oFwW z*6|$I+KkqJ4aVc!tUT?=G(E^n&A1Jn*mOP8mA$M24a;m@%^v;M*o@foOwz7P)Kksb z9PQa|ea%^Y*6?bIc$#LJD{!JW*8-PF%4 z*F&A$MNMb?eZuhl)7$OfAZpnHUf>U|yk7m=Gd;^SJ=w3#p6gBBR&3n~Uf%wF-k{yu z9WJpduFm>R;o)4LCEnnaZQvYk-${``=z3 z;9#!XpXuas4&}_v<<1S@+|A};zULBt+AaV7-e_LfYL4fGuIFc4iM1J1BcT64d`}0t!u981{~ge{>^i~<%@3H zG4ANJ-sY(8%o{%Bh@R_zzU$g8=o-$eKfdY0&g{fq=H#vDqMqiNPTbCZK|_0zrMrcZn4Gg=L%l!jDGF2e(nQa?r$FKD?Z+de&+1X>lxnT@LubZe(P#& z?CYM?J5K7$p1kDV??JBcWd7tuUg2l_?HI1?{66fb?(BB6DF7%`B?l~Xz{@(Lgp6(A%=MFsOME~wy z59}Bp_E(?sS-;;(jh7Vf@&nuCN$>Dle(X&T?kx}Lbr19O-rFau_gZi5XW#WAFZF3} z?u&o&EROXZ5BCMn^-!PqUmy6}e&b`W>w7=(Pk-<)eEDmi`K%sOWM9x`AMT(p#%gc$ z8BfIAnr>BVPFJe)yGN^@?x#3*Y#0j_Yn8`4k@a94q{{ z@3JYr`>_xCOb`6}KKFjlnt=a5`qjVu*H8OHulgZR{G#vrY>)S?Zsa;%`_Nzhq2Kyb z|N3ys?HnKe%|H3?Pxss(;hwJf0097i00RsjK#(w@!UYT(ICS8!A;Sd=6edJ?;DCXG z0|g8qNT5Ig0s{mH3=j}NAVGr&DJ*RGFyh3D7c*`=aDah>gAo*B@bE$C2M-u3*wmOn zr2qmu5h}FMa6^X<5;4?_072sd1Rg<(Bxw?*%7F!1Cae%u!_=x7u3F5xwd==_BTJr4 zxzg-Gv<%l$wTe|M1Fl}{hQ&)(z}}}Y9Rj8ackqIabiv*oyRsl(g??p9qzLyWN5hxJ z<{h}%rQ^?$k>b?J6N3NG3P6VvHTqiVz@`owt7RKlvfR>kPb+4O7C7X$7bnmCYCN&t zvz?_f7fjr;^vq?evxXen`PRzO5qD?F8T?G~7&VgKejauD)t(`O#yUFZ&YnMm4lU{^ z_ZZlXDW{aXuC3@4@3V z+c2j4TpJKR^F(Bkub1p&FTeNplZ`gp0L*Q`0(<+7LJx-namE$BQ*Sv1KP)W7B^PV) zuP2d=QpxFzkH3O*!rvOKcNEDZ7CuVw6a15 zvs7_R3DYui!RP}y7@TMVGCA8IDlMK|?CJTkqQApV3`YgP4)PhG>Mmt27veN|jfxy*Fnb8k&IQ(%!rvEWZ7ezCoIA+FcPdo_kuUupZT zHYtFM)Rth54QAEhge_*+SeO4)c-ctTrI(`J3vG2b3d1+ruUPd@m{ zmsh6l+m!zw?p0P2&3(FRmce89Pj`v^HRGaX?6zZ2o&8x(k&(XBUz2&mmR473-g!{D zw}o}wsMVd>R;~BOxa*3cX7g&a$Nm~Up+81ETDGap6YhXpMwo8Gsg$~JUd!HkQKv2c zJ7%tPCM4v*5+4JR5+ zpf6v%b$r!^{l~VIzP9$=sTN-J>$A?@_lAMrJon*8hjH-U;dMT3(-mtzRP`N?efrt= zr2O;X#n&Ed(7V6+_PiJN9`OXHGv)hA4wZ#u|sgfMZ{8zI?%}Rgw)0^l# zSF8WRDb58Ca59Ry(iz(>OzhHZeQ zJD$3d$EhGnU}z=e6#QI>Dj3pEf;;@5%`7-I?x9eJ_QRnRN%%v`6p?rbOj7|pmOchX zZ(2-zn-gU?Hw^YLb5Nupt_(N9y7`cFT@<4bk*K;n8c~HwY~T{zwzL@5Z-!B<;2W{X zLoNPpk%*L|9=W)_i+#~`%Nya@hL|iRo^g=Xd*UPG7%@Y#F^h?GLRTV>~X2}x3d(0F~c2Wz>> zQ9bjVO{Aag;E2s%uG5OS8mK(C=uKpT6M^;|;{u&&PT8R|pxfKuL9MAxVzTmkq9mvQ z87j_Xs;`JglqK|92u)pDZ0DJ%QLza)uM4n%rYQDJnmU?vjcb ztzkP8dQ*ggRH3cZDIQ7c&@hSEj8tG3_ht-o( z)o3gIXBsd1(vW)9rtF;KQt=Aa5bkuUJ$)z&_ZigJ!L_0QHL5$o8p^wBG@JioU2Hd_ zx=i#*l!$%2sxonTSh*%vuZ}G!_CPDM&n9)Dll>-OtE$$_zR#bWC1g77TGqPC^pxBr z?N|3I*}h6uttCZVTUGm3t+KSJE9 zp>Fquo%L>M-N@MeMwYw{2Jd;>m0I<#_PPUhFL6f(TTq5pybJa)QbGJ+$VS*p{-rK~ zEi7Q5rZlS?<}QL6T;kErmd57Q?~O++VXskG#k0I{i?O=d7|YkQx~>25eLE^l`r_B4 z{p~Gf@2O1TR#?N2L!*%sjAZjF*{mPTF?4r);wbw#!}$c@U|me)18aH4Vy0<$MI2|x ze7DAAp6+kmisoghdC0FVa);%tT-@3i&daT{g6WKB^rraCQpPZ0uk64q3);}l-LaSJ z8fHu{8m%bS^Kkk6uJ%e=rSRpjG%x*OI%}H0iRSW{KV9bkKDx?3J~fQnY-v|Jc-3=8 zG^be|>{;hI$ZMrCX7~JJEPqnfy^b)n?@ZTMGkU_cHZ`P$tXV+s`q|X>wX|^zZW9-~ z(V@2TsKFNLHFvwx-){1fV@mF6$NS4TE#A404cryp`q6BDcUS+#ooRZH+uoZt_q83J zZGUGQ;La9!!3lowYD?VHI0N;*m)-Do57pZdr+Bz6PVA7E8{@QIxQjXdXO9P5wgYeV z$O|oOV9z|^J;t`ml`U#!Q`*@90CPjA0uc>dML?6`2m(a1^sby_EI?OO2G~M$qrWQY zO9x8Vr>1EgY(}9kF28>bdRS|om+>Z5; z#GUIvPe9%4b9X=8gewoH-T@4t00z|EClpXi2Rtx&4}?855^zrg7_fQHcYXm2u*>54 z^Z3Y9zVaHleC9j9dcuI7B%
4k234osv16p#P}Zo>b1&%53LurC$lF)$U{+aCA2 z*F5hz|M}1}-Z!!*{^TKI{Mwxyl3ILQp0kpsI zYdiyN2>xR~3-~|y3qS}YK=Y$O4Y0u4!$9}bzz3wi2rR$|Fe0@G!K#ak5^OoQ5kT0v zfDBMS{^I~cd4L_{!5)0S8KjdMyutO$!HU2<-Sa^ooWc1ELL0Qe%6p3=OhP4G!X_L- z)7yY3Y``hx!6l@@1mwRgG{P<9!XFgCAOyiD6hr^q!-ynAHSTgl6%@WJT)#CuLI}Xa zJk-M}oQ)N9!YA|qJIo3_Bt#_i!QiuiKU71bV8cQrL_Q=vMYO;y48K8iL_CDV34lCF z3`75G#7o4)IMl>Mq(jp~y`#88Lew=>i2zH)Lph8J4xqf-xRc4-0RNi+%xlG6B^|uti+d#a=|lU!22Pq(#a*#au+jXjI0iP`_a$Mh|$#V~j>$)I(Sd#>ulr zXEerb?8RyP#%TeN$;-xVY&KMsfOmw)cN9KZM8{^tMo*l8eALH%jK_YQM{u;pT0BLI z*vEqGM|d1X44}t=yvBhnNP|4cgjmLUOvnFwyuF9y$B0bGY79tmyhx19$B2|jY6Qq| zR7YF{$#%Rw3Sh~WWJ!{wNP8^83ZTiFv`Lr5Ntk5Fbeu_>^hum-$+Y;xovg)M#6X|C zNuYcQQY=Y^EXJcmN}5#4r5sA4e9EY-$*B}dj@-$UgvzKCBn%MC3m{7iFiVEWfTpy{ z?<+d7bj!EI0J5Zrv#h|FG|3KVOSpVXxirfItV^Oi7539hxa3Q^Ohdp-#|0eBy(~+^ zRLiau%*7nb#`Md>L`-5-OvzlLC!`8yyv&LOLgv`}E z&Cw*yYlO}3lTFgB&Dqq=-Q>;Q^vxIF1kT_T&fz4^;xx|VM9$C?X^#AtWXtBPJjtB_JXtA0i|c z7#Rl#2MGTFKL{L1u%N+%2oow?$grWqhY%x5oJg^vMT#CWYTU@NqX�Lv{oyvgF5! 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

rp+d?hcG2XrYY{TGd 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

p)aJ|0dCwzI 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"#qA^?ncO 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»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�O3+1};E%Q7lwGFeTgNUr z!ECssD2k`v+?BuWoE4gAnQ}mXGnT7Jp~OnsudSi6{XVlz+qQhKSB=^9?VVc9+nr6G z8JyuGZj?TQ8T@gc(U^|_4df&)6YZ z;6_f*Xg=!1yXF$KhPu7ki|(Y2e&cjoAF;mWLc!g%PT)IwjdqvoDZc9r{;VyIriSjH z;X3Tw4Cg6w?5z�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 TwO>27XS=p(tGb11(e>4p$U;LphOH+ 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

`9S`=NSNu`_Gz&5nW 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 literal 0 HcmV?d00001 diff --git a/scripts/gen_texture_displacement_tips.py b/scripts/gen_texture_displacement_tips.py new file mode 100644 index 0000000000..1fbe9aff01 --- /dev/null +++ b/scripts/gen_texture_displacement_tips.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +"""Draws the illustrations the texture-displacement tooltips show. + +The panel's tooltips can carry a picture under their text (see GLGizmoTextureDisplacement's +panel_tooltip()). A few of those settings - the ones that are a shape rather than a photograph - +are better drawn from the same arithmetic the feature uses than captured from the screen, which is +what this script does: it shades a height field exactly as a relief would catch the light, so +"what Rotation turns" and "what Tile repeats" are visible rather than described. + +Output goes to resources/images/texture_displacement/. Run it after changing one of the patterns +below; nothing in the build depends on it. + + python3 scripts/gen_texture_displacement_tips.py + +Needs numpy and pillow. +""" + +import os + +import numpy as np +from PIL import Image + +SIZE = 256 # px, square - the panel draws these at whatever width the tooltip has +RELIEF = 30.0 # how hard the shading reacts to a slope; purely cosmetic + +OUT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "resources", "images", "texture_displacement") + +# Neutral enough to sit in a tooltip in either theme: a dark ground, a mid grey for the flat surface +# and a cool near-white for the lit slopes. +SHADOW = np.array([0.13, 0.14, 0.15]) +MIDTONE = np.array([0.40, 0.42, 0.43]) +HIGHLIGHT = np.array([0.78, 0.84, 0.83]) +LIGHT = np.array([-0.45, -0.62, 0.65]) +LIGHT /= np.linalg.norm(LIGHT) + + +def grid(size=SIZE): + """Unit coordinates, -0.5 .. 0.5, y down as in an image.""" + a = (np.arange(size) + 0.5) / size - 0.5 + return np.meshgrid(a, a) + + +def shade(height): + """A height field in 0..1, lit as a relief and tinted: the picture the tooltip shows.""" + gy, gx = np.gradient(height * RELIEF) + normal = np.dstack([-gx, -gy, np.ones_like(height)]) + normal /= np.linalg.norm(normal, axis=2, keepdims=True) + lam = np.clip(normal @ LIGHT, 0.0, 1.0) + + # Two ramps rather than one: the dark half separates the slopes, the lit half picks up the + # accent, and the flat ground lands in the middle of both. + low = SHADOW + (MIDTONE - SHADOW) * (lam / 0.5)[..., None] + high = MIDTONE + (HIGHLIGHT - MIDTONE) * ((lam - 0.5) / 0.5)[..., None] + rgb = np.where((lam < 0.5)[..., None], low, high) + + # A touch of the height itself, so a tall feature still reads as tall where it is flat on top. + # + # Deliberately almost grey: these say what a shape does, and a relief catching the light is grey. + # A coloured one would read as a third thing the setting does, and the amount of colour would move + # with the slope - a pattern at 45 degrees would flash where the same pattern upright did not. + rgb = np.clip(rgb * (0.88 + 0.18 * height[..., None]), 0.0, 1.0) + return (rgb * 255.0 + 0.5).astype(np.uint8) + + +def vignette(rgb): + """Rounds the picture off at its border, so it does not end in a hard rectangle.""" + x, y = grid(rgb.shape[0]) + edge = np.clip((0.5 - np.maximum(np.abs(x), np.abs(y))) / 0.045, 0.0, 1.0) + return (rgb * edge[..., None]).astype(np.uint8) + + +def save_png(name, rgb): + path = os.path.join(OUT_DIR, name) + Image.fromarray(vignette(rgb)).save(path, optimize=True) + print("wrote", os.path.normpath(path)) + + +def save_gif(name, frames, delay_ms): + path = os.path.join(OUT_DIR, name) + images = [Image.fromarray(vignette(f)).convert("P", palette=Image.ADAPTIVE, colors=32) for f in frames] + images[0].save(path, save_all=True, append_images=images[1:], duration=delay_ms, loop=0, optimize=True) + print("wrote", os.path.normpath(path)) + + +# --- the patterns ------------------------------------------------------------------------------ + + +def ridges(angle_deg, period=0.16): + """Parallel ridges at an angle: the simplest pattern whose direction is unmistakable.""" + x, y = grid() + a = np.radians(angle_deg) + t = (x * np.cos(a) + y * np.sin(a)) / period + return 0.2 + 0.6 * (0.5 + 0.5 * np.sin(2.0 * np.pi * t)) + + +def motif(repeats): + """A ring inside a square frame, laid out `repeats` times across the picture.""" + x, y = grid() + u = (x * repeats) % 1.0 - 0.5 + v = (y * repeats) % 1.0 - 0.5 + r = np.hypot(u, v) + + ring = np.clip(1.0 - np.abs(r - 0.26) / 0.085, 0.0, 1.0) + frame_d = np.maximum(np.abs(u), np.abs(v)) + frame = np.clip(1.0 - np.abs(frame_d - 0.42) / 0.055, 0.0, 1.0) + return np.clip(np.maximum(ring, frame) ** 0.7, 0.0, 1.0) + + +def decal(motif_scale=0.46): + """One copy of the motif in the middle of a flat field - what Tile off leaves.""" + x, y = grid() + u, v = x / motif_scale, y / motif_scale + r = np.hypot(u, v) + ring = np.clip(1.0 - np.abs(r - 0.26) / 0.085, 0.0, 1.0) + frame_d = np.maximum(np.abs(u), np.abs(v)) + frame = np.clip(1.0 - np.abs(frame_d - 0.42) / 0.055, 0.0, 1.0) + inside = (np.maximum(np.abs(u), np.abs(v)) <= 0.5).astype(float) + return np.clip(np.maximum(ring, frame) ** 0.7, 0.0, 1.0) * inside + + +def main(): + os.makedirs(OUT_DIR, exist_ok=True) + + # Tile: one copy against the pattern filling the painted area. + save_png("tile_off.png", shade(decal())) + save_png("tile_on.png", shade(motif(repeats=3))) + + # Rotation: the same ridges turning a quarter of a turn and back, so the loop has no jump. + # A half turn brings parallel ridges back onto themselves, so a single sweep loops with no jump + # and the file stays a fraction of the size a there-and-back one would be. + steps = 16 + save_gif("rotation.gif", [shade(ridges(180.0 * i / steps)) for i in range(steps)], delay_ms=100) + + +if __name__ == "__main__": + main() diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 65c8384ef2..9fef3a1766 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -20,6 +20,8 @@ set(SLIC3R_GUI_SOURCES GUI/Widgets/FilamentLoad.hpp GUI/AboutDialog.cpp GUI/AboutDialog.hpp + GUI/AnimatedTexture.cpp + GUI/AnimatedTexture.hpp GUI/AmsMappingPopup.cpp GUI/AmsMappingPopupUpdate.cpp GUI/AmsMappingPopup.hpp diff --git a/src/slic3r/GUI/AnimatedTexture.cpp b/src/slic3r/GUI/AnimatedTexture.cpp new file mode 100644 index 0000000000..cb0adf58a1 --- /dev/null +++ b/src/slic3r/GUI/AnimatedTexture.cpp @@ -0,0 +1,248 @@ +#include "AnimatedTexture.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "slic3r/GUI/GLTexture.hpp" + +namespace Slic3r::GUI { + +namespace { + +std::vector read_file_bytes(const std::string &path) +{ + std::ifstream ifs(path, std::ios::binary); + return std::vector(std::istreambuf_iterator(ifs), std::istreambuf_iterator()); +} + +bool has_gif_signature(const std::vector &bytes) +{ + return bytes.size() > 6 && bytes[0] == 'G' && bytes[1] == 'I' && bytes[2] == 'F'; +} + +// wxImage keeps colour and alpha in two separate buffers, and a file with no alpha at all has none; +// OpenGL wants the four channels interleaved. +std::vector image_to_rgba(const wxImage &image) +{ + const size_t n = size_t(image.GetWidth()) * size_t(image.GetHeight()); + const unsigned char *rgb = image.GetData(); + const unsigned char *a = image.HasAlpha() ? image.GetAlpha() : nullptr; + + std::vector out(n * 4); + for (size_t i = 0; i < n; ++i) { + out[i * 4 + 0] = rgb[i * 3 + 0]; + out[i * 4 + 1] = rgb[i * 3 + 1]; + out[i * 4 + 2] = rgb[i * 3 + 2]; + out[i * 4 + 3] = a != nullptr ? a[i] : 255; + } + return out; +} + +// One decoded frame on its way to the GPU: the whole animation's area, already composited. +struct DecodedFrame +{ + std::vector rgba; + double delay; // seconds +}; + +// Every frame of a GIF, composited onto the animation's own canvas. +// +// A GIF frame is a sub-rectangle that is drawn over what came before it, and the one before says how +// to clean up after itself (leave it, erase it, put back what it covered). Without replaying that, an +// animation that only re-sends the pixels that changed - which is most of them - draws as a flicker of +// disconnected patches. wxGIFDecoder hands over the raw palette indices, which is what makes replaying +// it here straightforward: a transparent index means "keep what is underneath", nothing else does. +bool decode_gif(const std::vector &bytes, int &width, int &height, std::vector &out) +{ + wxMemoryInputStream stream(bytes.data(), bytes.size()); + wxGIFDecoder decoder; + + // A truncated file still decodes everything up to the cut, which is worth showing. + const wxGIFErrorCode err = decoder.LoadGIF(stream); + if ((err != wxGIF_OK && err != wxGIF_TRUNCATED) || decoder.GetFrameCount() == 0) + return false; + + const wxSize size = decoder.GetAnimationSize(); + width = size.GetWidth(); + height = size.GetHeight(); + if (width <= 0 || height <= 0) + return false; + + std::vector canvas(size_t(width) * size_t(height) * 4, 0); + std::vector saved; + + for (unsigned int i = 0; i < decoder.GetFrameCount(); ++i) { + const wxSize frame_size = decoder.GetFrameSize(i); + const wxPoint frame_pos = decoder.GetFramePosition(i); + const wxAnimationDisposal disposal = decoder.GetDisposalMethod(i); + const unsigned char *indices = decoder.GetData(i); + const unsigned char *palette = decoder.GetPalette(i); + const int transparent = decoder.GetTransparentColourIndex(i); + + if (disposal == wxANIM_TOPREVIOUS) + saved = canvas; + + if (indices != nullptr && palette != nullptr) + for (int y = 0; y < frame_size.GetHeight(); ++y) { + const int cy = frame_pos.y + y; + if (cy < 0 || cy >= height) + continue; + for (int x = 0; x < frame_size.GetWidth(); ++x) { + const int cx = frame_pos.x + x; + if (cx < 0 || cx >= width) + continue; + const unsigned char index = indices[size_t(y) * size_t(frame_size.GetWidth()) + size_t(x)]; + if (int(index) == transparent) + continue; + unsigned char *dst = &canvas[(size_t(cy) * size_t(width) + size_t(cx)) * 4]; + dst[0] = palette[3 * size_t(index) + 0]; + dst[1] = palette[3 * size_t(index) + 1]; + dst[2] = palette[3 * size_t(index) + 2]; + dst[3] = 255; + } + } + + // Browsers treat 0 and 1 hundredths of a second as "as fast as the file can mean", and settle + // on 100 ms; an animation authored against that convention plays at the intended speed only if + // this does the same. + const long delay_ms = decoder.GetDelay(i); + out.push_back({ canvas, (delay_ms <= 10 ? 100.0 : double(delay_ms)) / 1000.0 }); + + if (disposal == wxANIM_TOBACKGROUND) { + for (int y = 0; y < frame_size.GetHeight(); ++y) { + const int cy = frame_pos.y + y; + if (cy < 0 || cy >= height) + continue; + const int x0 = std::max(0, frame_pos.x); + const int x1 = std::min(width, frame_pos.x + frame_size.GetWidth()); + if (x1 > x0) + std::fill_n(&canvas[(size_t(cy) * size_t(width) + size_t(x0)) * 4], size_t(x1 - x0) * 4, 0); + } + } else if (disposal == wxANIM_TOPREVIOUS) { + canvas = saved; + } + } + return !out.empty(); +} + +} // namespace + +bool AnimatedTexture::load_from_file(const std::string &path) +{ + reset(); + + boost::system::error_code ec; + if (!boost::filesystem::is_regular_file(path, ec)) + return false; + + const std::vector bytes = read_file_bytes(path); + if (bytes.empty()) + return false; + + std::vector frames; + int width = 0, height = 0; + + if (has_gif_signature(bytes)) { + if (!decode_gif(bytes, width, height, frames)) { + BOOST_LOG_TRIVIAL(error) << "AnimatedTexture: cannot decode GIF " << path; + return false; + } + } else { + wxLogNull no_log; // a format wxWidgets cannot read is handled here, not in a dialog + wxImage image; + wxMemoryInputStream stream(bytes.data(), bytes.size()); + if (!image.LoadFile(stream, wxBITMAP_TYPE_ANY) || !image.IsOk()) { + BOOST_LOG_TRIVIAL(error) << "AnimatedTexture: cannot decode image " << path; + return false; + } + width = image.GetWidth(); + height = image.GetHeight(); + frames.push_back({ image_to_rgba(image), 0.0 }); + } + + m_width = width; + m_height = height; + m_frames.reserve(frames.size()); + for (DecodedFrame &frame : frames) { + auto texture = std::make_unique(); + // Mipmapped: a hint is drawn at whatever width the panel has room for, which is usually + // smaller than the source, and an unfiltered downscale of a diagram is all aliasing. + if (!texture->load_from_raw_data(std::move(frame.rgba), (unsigned int) width, (unsigned int) height, false, + /* use_mipmaps */ true)) { + BOOST_LOG_TRIVIAL(error) << "AnimatedTexture: cannot upload " << path; + reset(); + return false; + } + m_frames.push_back({ std::move(texture), m_duration, frame.delay }); + m_duration += frame.delay; + } + return true; +} + +void AnimatedTexture::reset() +{ + m_frames.clear(); + m_width = 0; + m_height = 0; + m_duration = 0.; +} + +unsigned int AnimatedTexture::texture_id(double time, double *time_to_next) const +{ + if (m_frames.empty()) { + if (time_to_next != nullptr) + *time_to_next = 0.; + return 0; + } + if (m_frames.size() == 1 || m_duration <= 0.) { + if (time_to_next != nullptr) + *time_to_next = 0.; + return m_frames.front().texture->get_id(); + } + + const double t = time - m_duration * std::floor(time / m_duration); + // Frames are few; a linear walk beats keeping an index around and getting it stale. + size_t i = 0; + while (i + 1 < m_frames.size() && t >= m_frames[i].start + m_frames[i].delay) + ++i; + if (time_to_next != nullptr) + *time_to_next = std::max(0., m_frames[i].start + m_frames[i].delay - t); + return m_frames[i].texture->get_id(); +} + +const AnimatedTexture *AnimatedTextureCache::get(const std::string &path) +{ + const auto it = m_items.find(path); + if (it != m_items.end()) + return it->second.get(); + + auto texture = std::make_unique(); + if (!texture->load_from_file(path)) + texture.reset(); // remembered as a failure, so the file is not re-read every frame + + const AnimatedTexture *result = texture.get(); + m_items.emplace(path, std::move(texture)); + return result; +} + +} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/AnimatedTexture.hpp b/src/slic3r/GUI/AnimatedTexture.hpp new file mode 100644 index 0000000000..ab05aaecf8 --- /dev/null +++ b/src/slic3r/GUI/AnimatedTexture.hpp @@ -0,0 +1,78 @@ +#ifndef slic3r_AnimatedTexture_hpp_ +#define slic3r_AnimatedTexture_hpp_ + +#include +#include +#include +#include + +#include "slic3r/GUI/GLTexture.hpp" + +namespace Slic3r::GUI { + +// An illustration for the UI to draw: one still image, or the frames of an animated GIF together with +// the delays the file asks for. Decoded on the CPU once and uploaded as one GL texture per frame. +// +// A texture per frame rather than an atlas: these are small hints a few hundred pixels across and a +// handful of frames long, so the extra textures cost little, while drawing a frame stays a plain +// ImGui::Image with no UV arithmetic and no dependence on the maximum texture size. +// +// load_from_file() uploads to the GPU, so it needs a current GL context - call it from rendering code. +class AnimatedTexture +{ +public: + AnimatedTexture() = default; + AnimatedTexture(AnimatedTexture &&) = default; + AnimatedTexture &operator=(AnimatedTexture &&) = default; + AnimatedTexture(const AnimatedTexture &) = delete; + AnimatedTexture &operator=(const AnimatedTexture &) = delete; + + // PNG, JPG and BMP through wxImage; GIF, animated or not, through wxGIFDecoder. False, and nothing + // loaded, if the file is missing or cannot be decoded. + bool load_from_file(const std::string &path); + void reset(); + + bool is_valid() const { return !m_frames.empty(); } + bool is_animated() const { return m_frames.size() > 1; } + int width() const { return m_width; } + int height() const { return m_height; } + // Length of one loop, in seconds; 0 for a still image. + double duration() const { return m_duration; } + + // The texture to draw `time` seconds into the loop (which wraps), and - when `time_to_next` is + // given - how much longer that frame stays up. A canvas that only redraws on demand uses the + // latter to ask for the next redraw at the right moment instead of spinning at full speed. + // 0, and a time_to_next of 0, when nothing is loaded. + unsigned int texture_id(double time, double *time_to_next = nullptr) const; + +private: + struct Frame + { + std::unique_ptr texture; + double start{0.}; // seconds into the loop this frame appears at + double delay{0.}; // seconds it stays up + }; + + std::vector m_frames; + int m_width{0}; + int m_height{0}; + double m_duration{0.}; +}; + +// The illustrations a panel has shown at least once, keyed by absolute path, decoded and uploaded on +// first use and kept until clear() - which has to run while the GL context is still current. +class AnimatedTextureCache +{ +public: + // Null when the file is missing or cannot be decoded. The failure is remembered too, so a tooltip + // whose illustration has not been drawn yet costs one lookup, not one decode attempt per frame. + const AnimatedTexture *get(const std::string &path); + void clear() { m_items.clear(); } + +private: + std::map> m_items; // null value: tried once, failed +}; + +} // namespace Slic3r::GUI + +#endif // slic3r_AnimatedTexture_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp index 96af821505..0339806381 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp @@ -3701,6 +3701,106 @@ void GLGizmoTextureDisplacement::ensure_panel_icons() m_panel_icon_map[names[i]] = icons[i]; } +void GLGizmoTextureDisplacement::panel_tooltip(const wxString &text, const std::vector &media) +{ + panel_tooltip(into_u8(text), media); +} + +void GLGizmoTextureDisplacement::panel_tooltip(const std::string &text, const std::vector &media) +{ + const ImGuiStyle &style = ImGui::GetStyle(); + const float gap = m_imgui->scaled(0.5f); + const float wrap = m_imgui->scaled(20.f); + // The width has to be known here, not left to ImGui, because the tooltip is placed by its left edge + // (below) and an illustration has to be laid out against something. One carrying illustrations takes + // the full wrap width; a plain one takes exactly what its text needs, as it did when ImGui sized it, + // so a two-word tooltip is not a wide box with two words in it. + const float text_w = ImGui::CalcTextSize(text.c_str(), nullptr, false, wrap).x; + const float width = (media.empty() ? std::min(wrap, std::ceil(text_w)) : wrap) + 2.f * style.WindowPadding.x; + + // Beside the anchor (the panel, or the texture picker when the tooltip comes from inside it), never + // over it - the same reasoning, and the same placement, as the picker popup itself. ImGui normally + // keeps a tooltip glued to the mouse; it honours a position set here instead (see the Orca branch in + // imgui's Begin()), and still clamps the result inside the canvas. + const bool left = m_tooltip_anchor_min.x - gap - width >= 0.f; + const float x = left ? m_tooltip_anchor_min.x - gap - width : m_tooltip_anchor_max.x + gap; + ImGui::SetNextWindowPos(ImVec2(x, ImGui::GetItemRectMin().y)); // level with the control it explains + ImGui::SetNextWindowSize(ImVec2(width, 0.f)); // height still follows the content + + ImGui::BeginTooltip(); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); + ImGui::PushTextWrapPos(0.f); // the window's own edge, which is what the fixed width above sets + ImGui::TextUnformatted(text.c_str()); + ImGui::PopTextWrapPos(); + ImGui::PopStyleColor(); + render_tip_media(media, width - 2.f * style.WindowPadding.x); + ImGui::EndTooltip(); +} + +void GLGizmoTextureDisplacement::render_tip_media(const std::vector &media, float width) +{ + // Collect what is actually there first: the layout divides the width between the illustrations, so + // one that is missing has to drop out of the count rather than leave a gap. + std::vector> shown; + std::string key; + for (const TipMedia &m : media) { + const AnimatedTexture *texture = + m_tip_media.get((boost::filesystem::path(resources_dir()) / "images" / "texture_displacement" / m.file).string()); + if (texture != nullptr && texture->is_valid() && texture->width() > 0 && texture->height() > 0) { + shown.emplace_back(texture, &m); + key += m.file + "|"; + } + } + if (shown.empty()) + return; + + // Each animation plays from its first frame when its tooltip opens: these are short loops showing + // one setting going from one value to another, and joining one halfway through shows the user the + // end of a change they never saw the start of. + if (key != m_tip_media_key) { + m_tip_media_key = key; + m_tip_media_start = ImGui::GetTime(); + } + const double time = ImGui::GetTime() - m_tip_media_start; + + const ImGuiStyle &style = ImGui::GetStyle(); + const float spacing = style.ItemSpacing.x; + const float cell_w = (width - spacing * float(shown.size() - 1)) / float(shown.size()); + const ImU32 frame = ImGui::GetColorU32(ImGuiCol_Text, 0.25f); + + ImGui::Spacing(); + for (size_t i = 0; i < shown.size(); ++i) { + const AnimatedTexture *texture = shown[i].first; + const TipMedia &entry = *shown[i].second; + + ImGui::BeginGroup(); + double next = 0.; + const unsigned int id = texture->texture_id(time, &next); + const float h = std::round(cell_w * float(texture->height()) / float(texture->width())); + ImGui::Image((ImTextureID) (intptr_t) id, ImVec2(cell_w, h)); + ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), frame, style.FrameRounding); + // The canvas only redraws on demand, so an animation has to ask - and asks for exactly when its + // next frame is due, rather than for a redraw as fast as the machine will go. + if (texture->is_animated()) + m_parent.schedule_extra_frame(int(next * 1000.0)); + + if (!entry.caption.empty()) { + // Centred under its own illustration, and never wider than it. + const std::string caption = into_u8(entry.caption); + const float text_w = ImGui::CalcTextSize(caption.c_str()).x; + const float cell_x = ImGui::GetCursorPosX(); + ImGui::SetCursorPosX(cell_x + std::max(0.f, (cell_w - text_w) * 0.5f)); + ImGui::PushTextWrapPos(cell_x + cell_w); + ImGui::TextDisabled("%s", caption.c_str()); + ImGui::PopTextWrapPos(); + } + ImGui::EndGroup(); + + if (i + 1 < shown.size()) + ImGui::SameLine(0.f, spacing); + } +} + void GLGizmoTextureDisplacement::add_texture_layer() { ModelVolume *mv = texture_volume(); @@ -3845,6 +3945,14 @@ void GLGizmoTextureDisplacement::render_texture_library_popup(const ImVec2 &pane return; } + // While this popup is up its own tooltips belong beside it, not beside the panel it is already + // covering the left of. Restored before every exit below. + const ImVec2 prev_anchor_min = m_tooltip_anchor_min; + const ImVec2 prev_anchor_max = m_tooltip_anchor_max; + m_tooltip_anchor_min = ImGui::GetWindowPos(); + m_tooltip_anchor_max = ImVec2(m_tooltip_anchor_min.x + ImGui::GetWindowSize().x, + m_tooltip_anchor_min.y + ImGui::GetWindowSize().y); + m_imgui->push_bold_font(); m_imgui->text(_L("Choose a texture")); m_imgui->pop_bold_font(); @@ -3903,7 +4011,7 @@ void GLGizmoTextureDisplacement::render_texture_library_popup(const ImVec2 &pane if (entry.path == layer->path) dl->AddRect(ImVec2(a.x - 1.f, a.y - 1.f), ImVec2(b.x + 1.f, b.y + 1.f), selected_col, 0.f, 0, 2.f); if (ImGui::IsItemHovered()) - m_imgui->tooltip(entry.name, m_imgui->scaled(18.f)); + panel_tooltip(entry.name); if (user && ImGui::IsMouseHoveringRect(a, b)) { const float r = std::round(tile * 0.17f); @@ -3916,7 +4024,7 @@ void GLGizmoTextureDisplacement::render_texture_library_popup(const ImVec2 &pane dl->AddLine(ImVec2(c.x - k, c.y - k), ImVec2(c.x + k, c.y + k), IM_COL32_WHITE, 1.5f); dl->AddLine(ImVec2(c.x - k, c.y + k), ImVec2(c.x + k, c.y - k), IM_COL32_WHITE, 1.5f); if (hot) - m_imgui->tooltip(_u8L("Remove from My textures"), m_imgui->scaled(18.f)); + panel_tooltip(_u8L("Remove from My textures")); if (remove_clicked) to_remove = entry; } @@ -3943,10 +4051,9 @@ void GLGizmoTextureDisplacement::render_texture_library_popup(const ImVec2 &pane if (ImGui::Button("+##import_texture", ImVec2(tile, tile))) import_clicked = true; if (ImGui::IsItemHovered()) - m_imgui->tooltip(_u8L("Import your own image as a height map. It is converted to the format the slicer " - "bakes from and saved to your personal texture folder, kept separate from the " - "textures shipped with OrcaSlicer."), - m_imgui->scaled(20.f)); + panel_tooltip(_u8L("Import your own image as a height map. It is converted to the format the slicer " + "bakes from and saved to your personal texture folder, kept separate from the " + "textures shipped with OrcaSlicer.")); end_grid(origin, count + 1); } @@ -3956,6 +4063,8 @@ void GLGizmoTextureDisplacement::render_texture_library_popup(const ImVec2 &pane if (chosen || import_clicked) ImGui::CloseCurrentPopup(); + m_tooltip_anchor_min = prev_anchor_min; + m_tooltip_anchor_max = prev_anchor_max; ImGui::EndPopup(); // Only once the loop over the library is done: importing, picking (which reorders the recently used) @@ -5587,18 +5696,16 @@ void GLGizmoTextureDisplacement::render_debug_stage_panel(ModelVolume *mv) run_stage_debug(); m_imgui->disabled_end(); if (ImGui::IsItemHovered()) - m_imgui->tooltip(_u8L("Run the same bake the Bake button runs, keeping the mesh after every " - "stage, and step through them here. Nothing is committed to the model - " - "this is for finding which stage a bad result came from."), - m_imgui->scaled(20.f)); + panel_tooltip(_u8L("Run the same bake the Bake button runs, keeping the mesh after every " + "stage, and step through them here. Nothing is committed to the model - " + "this is for finding which stage a bad result came from.")); ImGui::SameLine(); m_imgui->bbl_checkbox(_L("Check topology"), m_debug_check_topology); if (ImGui::IsItemHovered()) - m_imgui->tooltip(_u8L("Count open and non-manifold edges after each stage, which is how a stage " - "that tore the mesh is spotted. It scans every edge, so it adds noticeably " - "to the capture on a fine bake."), - m_imgui->scaled(20.f)); + panel_tooltip(_u8L("Count open and non-manifold edges after each stage, which is how a stage " + "that tore the mesh is spotted. It scans every edge, so it adds noticeably " + "to the capture on a fine bake.")); if (m_debug_stages.empty()) return; @@ -5666,9 +5773,8 @@ void GLGizmoTextureDisplacement::render_debug_stage_panel(ModelVolume *mv) show_error(nullptr, _u8L("Could not write the stage meshes.")); } if (ImGui::IsItemHovered()) - m_imgui->tooltip(_u8L("Write every captured stage out as an OBJ file, so they can be opened " - "side by side in a mesh viewer."), - m_imgui->scaled(20.f)); + panel_tooltip(_u8L("Write every captured stage out as an OBJ file, so they can be opened " + "side by side in a mesh viewer.")); } void GLGizmoTextureDisplacement::queue_prepare(const TextureDisplacementPrepareParams ¶ms, @@ -5793,6 +5899,12 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float ImGuiWrapper::push_toolbar_style(m_parent.get_scale()); GizmoImguiBegin(get_name(), flags); + // Where this frame's tooltips place themselves (see panel_tooltip()). The size is last frame's - + // this window auto-resizes, so its height is only known once its content has been laid out - which + // is close enough for a tooltip that needs a frame of hovering to appear in the first place. + m_tooltip_anchor_min = ImGui::GetWindowPos(); + m_tooltip_anchor_max = ImVec2(m_tooltip_anchor_min.x + ImGui::GetWindowSize().x, + m_tooltip_anchor_min.y + ImGui::GetWindowSize().y); ensure_panel_icons(); process_uv_commands(); // clicks from the UV editor pane, run here where the GL context is current const float previous_body_h = m_panel_body_h; @@ -5816,7 +5928,6 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float const float gap_s = std::round(m_imgui->scaled(0.4f)); const float label_w = m_imgui->scaled(4.8f); // label column of a label + slider row const float card_pad = std::round(m_imgui->scaled(0.55f)); - const float wrap_w = m_imgui->scaled(20.f); const ImVec4 orca = ImGuiWrapper::COL_ORCA; const ImVec4 col_link = ImGuiWrapper::COL_ORCA; const ImVec4 col_frame = ImGui::GetStyleColorVec4(ImGuiCol_Separator); @@ -5830,9 +5941,9 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float ImGuiWrapper::pop_combo_style(); return changed; }; - const auto hover_tip = [&](const auto &text) { + const auto hover_tip = [&](const auto &text, const std::vector &media = {}) { if (ImGui::IsItemHovered()) - m_imgui->tooltip(text, wrap_w); + panel_tooltip(text, media); }; // Framed icon toggle: a 1 px frame, and when on a teal frame over a teal tint with the icon in its @@ -5840,7 +5951,8 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float // `unavailable`, when not empty, draws it faded but still hoverable, so the tooltip can say why it // cannot be used - a disabled ImGui item would swallow the hover and leave the user guessing. const auto icon_toggle = [&](int uid, const std::string &iconfile, bool active, float sz, const wxString &label, - const wxString &tip_text, const wxString &unavailable = wxString()) -> bool { + const wxString &tip_text, const wxString &unavailable = wxString(), + const std::vector &media = {}) -> bool { const bool na = !unavailable.empty(); const auto it = m_panel_icon_map.find(iconfile); const float pad = std::max(1.f, std::round(sz * 0.14f)); @@ -5867,12 +5979,12 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float ImGui::PopStyleVar(2); ImGui::PopID(); if (ImGui::IsItemHovered()) - m_imgui->tooltip(na ? tip_text + "\n\n" + unavailable : tip_text, wrap_w); + panel_tooltip(na ? tip_text + "\n\n" + unavailable : tip_text, media); return clicked && !na; }; // Borderless icon button (non-toggle): always the grey monochrome variant. const auto icon_button = [&](int uid, const std::string &iconfile, float sz, const wxString &label, - const wxString &tip_text) -> bool { + const wxString &tip_text, const std::vector &media = {}) -> bool { const auto it = m_panel_icon_map.find(iconfile); const float pad = std::max(1.f, std::round(sz * 0.14f)); bool clicked = false; @@ -5890,7 +6002,7 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float ImGui::PopStyleVar(); ImGui::PopID(); if (!tip_text.empty() && ImGui::IsItemHovered()) - m_imgui->tooltip(tip_text, wrap_w); + panel_tooltip(tip_text, media); return clicked; }; // A short vertical rule between groups of buttons on one row; call it right after an item. @@ -6460,7 +6572,8 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float "single copy.")); m_preview_params_dirty |= float_row("##rotation", _L("Rotation"), &layer.rotation_deg, 0.f, 360.f, "%.0f°", false, card_pad); hover_tip(_u8L("Turns the texture on the surface, in degrees - for lining a pattern up with an " - "edge of the model.")); + "edge of the model."), + { { "rotation.gif" } }); if (m_layer_expanded[size_t(layer.slot)]) { { @@ -6526,13 +6639,12 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float } m_imgui->disabled_end(); if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) - m_imgui->tooltip(has_color ? - _u8L("Prints the painted area in the texture's colors as well as its " - "relief. Each color is matched to the nearest of your loaded " - "filaments; anything you did not paint keeps the object's own.") : - _u8L("This texture is a grayscale height map, so it has no colors to " - "apply. Import a color image to use this."), - wrap_w); + panel_tooltip(has_color ? + _u8L("Prints the painted area in the texture's colors as well as its " + "relief. Each color is matched to the nearest of your loaded " + "filaments; anything you did not paint keeps the object's own.") : + _u8L("This texture is a grayscale height map, so it has no colors to " + "apply. Import a color image to use this.")); // The rest of colour belongs to the whole stack, not to this layer, so it only appears once - // under whichever layer turned colour on. @@ -6702,7 +6814,8 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float const float x0 = ImGui::GetCursorPosX(); m_preview_params_dirty |= m_imgui->bbl_checkbox(_L("Tile") + "##tile_enabled", layer.tile_enabled); hover_tip(_u8L("Repeats the texture across the painted area. Off places one copy, like a decal, " - "at the size set by Tile size.")); + "at the size set by Tile size."), + { { "tile_off.png", _L("Off") }, { "tile_on.png", _L("On") } }); ImGui::SameLine(); ImGui::SetCursorPosX(std::max(ImGui::GetCursorPosX(), x0 + label_w)); const wxString tile_na = layer.tile_enabled ? wxString() : _L("Turn Tile on to choose how the texture repeats."); @@ -6744,14 +6857,13 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float } m_imgui->disabled_end(); if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) - m_imgui->tooltip(base_layer ? - _u8L("The base layer has nothing beneath it to combine with, so it always adds.") : - _u8L("What this layer does where it overlaps the ones below. Add and " - "Subtract pile relief on or carve it away. Multiply and Divide scale " - "what is underneath, which turns this layer into a mask over it - " - "there, Depth acts as a strength, and 1 mm leaves white areas " - "untouched."), - wrap_w); + panel_tooltip(base_layer ? + _u8L("The base layer has nothing beneath it to combine with, so it always adds.") : + _u8L("What this layer does where it overlaps the ones below. Add and " + "Subtract pile relief on or carve it away. Multiply and Divide scale " + "what is underneath, which turns this layer into a mask over it - " + "there, Depth acts as a strength, and 1 mm leaves white areas " + "untouched.")); ImGui::SameLine(0.f, gap_s); if (icon_toggle(842, "texture_displacement_adjust.svg", m_adjust_texture_mode, icon_sm, _L("Adjust placement"), @@ -7405,18 +7517,17 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float m_imgui->pop_bold_font(); GLGizmoUtils::pop_orca_button_style(); if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) - m_imgui->tooltip(mv != nullptr && !mv->is_texture_displacement_painted() ? - (m_seam_edit_mode ? _u8L("Nothing is painted yet. The UV editor's seam tool is on, so " - "strokes on the model mark seams instead of painting - turn " - "it off in the pane to paint.") : - _u8L("Nothing is painted yet.")) : - pro_mode() ? - _u8L("Turn the painted height maps into real geometry, by moving the vertices that are " - "already there. Use Subdivide first if the mesh is too coarse to show the detail.") : - _u8L("Turn the painted height maps into real geometry. The mesh is remeshed to an even " - "density and refined where the texture bends first, so the detail has vertices to " - "land on - all in one step."), - wrap_w); + panel_tooltip(mv != nullptr && !mv->is_texture_displacement_painted() ? + (m_seam_edit_mode ? _u8L("Nothing is painted yet. The UV editor's seam tool is on, so " + "strokes on the model mark seams instead of painting - turn " + "it off in the pane to paint.") : + _u8L("Nothing is painted yet.")) : + pro_mode() ? + _u8L("Turn the painted height maps into real geometry, by moving the vertices that are " + "already there. Use Subdivide first if the mesh is too coarse to show the detail.") : + _u8L("Turn the painted height maps into real geometry. The mesh is remeshed to an even " + "density and refined where the texture bends first, so the detail has vertices to " + "land on - all in one step.")); ImGui::SameLine(); if (busy) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp index 48e0ab72f6..dc01a36295 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp @@ -4,6 +4,7 @@ #include "GLGizmoPainterBase.hpp" #include "libslic3r/TextureBake/TextureBakeDebug.hpp" #include "libslic3r/TextureDisplacement.hpp" +#include "slic3r/GUI/AnimatedTexture.hpp" #include "slic3r/GUI/GLModel.hpp" #include "slic3r/GUI/GLTexture.hpp" #include "slic3r/GUI/I18N.hpp" @@ -1025,6 +1026,40 @@ private: std::map m_panel_icon_map; // file name -> [normal, colour, disabled] bool m_panel_icons_tried = false; void ensure_panel_icons(); + + // One illustration under a tooltip's text: a still image or an animation (see AnimatedTexture), + // named by file within resources/images/texture_displacement, with a caption under it. Several of + // them in one tooltip are laid out side by side, which is how a setting is shown as a comparison - + // the same model at two values of it. + struct TipMedia + { + std::string file; + wxString caption; + }; + + // Every tooltip the panel shows. Placed beside the panel rather than under the mouse: the panel is + // pinned to the right edge of the canvas, so a tooltip left to follow the mouse covers the control + // it is explaining, and one carrying an illustration covers most of the panel with it. + // + // `media` is drawn under the text, at the tooltip's full width; files that are missing or will not + // decode are skipped, so a tooltip whose illustration has not been drawn yet is exactly the text + // tooltip it was before. + void panel_tooltip(const std::string &text, const std::vector &media = {}); + void panel_tooltip(const wxString &text, const std::vector &media = {}); + void render_tip_media(const std::vector &media, float width); + + // Screen rectangle a tooltip places itself beside: the panel window, or - while the texture picker + // is up and tooltips are coming from inside it - the picker popup, which already sits beside the + // panel. Both are set from the window's own rectangle as it is drawn. + ImVec2 m_tooltip_anchor_min{0.f, 0.f}; + ImVec2 m_tooltip_anchor_max{0.f, 0.f}; + // Illustrations any tooltip has shown, decoded and uploaded once (see AnimatedTexture.hpp). + AnimatedTextureCache m_tip_media; + // Which tooltip's illustrations are on screen, and when they first appeared: an animation plays + // from its first frame each time its tooltip opens, rather than from wherever a free-running clock + // happened to be. + std::string m_tip_media_key; + double m_tip_media_start = 0.; }; } // namespace Slic3r::GUI From fc5ac6d2a56e1f563fb4814c9c3572c2180eeecf Mon Sep 17 00:00:00 2001 From: ExPikaPaka Date: Tue, 13 Oct 2026 13:33:05 +0200 Subject: [PATCH 040/137] Texture displacement: illustrate the settings that are a shape Ten more tooltips get a picture: Depth, Tile size, Repeat/Mirror, Invert, Smoothing, Edge fade and Blend as stills, Depth, Rotation and Midlevel as animations. All drawn by scripts/gen_texture_displacement_tips.py from the same arithmetic the feature uses, one motif throughout, so that whatever differs between two of them is the setting and nothing else. Midlevel is drawn in section instead of as a relief. Shading reads slopes, so a height field moved up or down as a whole shades exactly as it did before - and where the relief sits relative to the surface is the entire meaning of that setting. From the side, against the bare surface, it is the one thing visible. A single picture is now capped at 10 em tall and centred in its column, rather than drawn at the tooltip's full width, where a square one came out as tall as the text beside it was long. --- docs/HLSD/tooltip-illustrations.md | 26 ++- .../images/texture_displacement/blend_add.png | Bin 0 -> 52646 bytes .../texture_displacement/blend_multiply.png | Bin 0 -> 42326 bytes .../images/texture_displacement/depth.gif | Bin 0 -> 115036 bytes .../texture_displacement/edge_fade_off.png | Bin 0 -> 25008 bytes .../texture_displacement/edge_fade_on.png | Bin 0 -> 31695 bytes .../texture_displacement/invert_off.png | Bin 0 -> 29931 bytes .../images/texture_displacement/invert_on.png | Bin 0 -> 30128 bytes .../images/texture_displacement/midlevel.gif | Bin 0 -> 24197 bytes .../images/texture_displacement/rotation.gif | Bin 219397 -> 136982 bytes .../texture_displacement/smoothing_off.png | Bin 0 -> 14765 bytes .../texture_displacement/smoothing_on.png | Bin 0 -> 34072 bytes .../texture_displacement/tile_mirror.png | Bin 0 -> 19086 bytes .../texture_displacement/tile_repeat.png | Bin 0 -> 18327 bytes .../texture_displacement/tile_size_large.png | Bin 0 -> 16970 bytes .../texture_displacement/tile_size_small.png | Bin 0 -> 53936 bytes scripts/gen_texture_displacement_tips.py | 215 +++++++++++++++--- .../GUI/Gizmos/GLGizmoTextureDisplacement.cpp | 46 ++-- 18 files changed, 238 insertions(+), 49 deletions(-) create mode 100644 resources/images/texture_displacement/blend_add.png create mode 100644 resources/images/texture_displacement/blend_multiply.png create mode 100644 resources/images/texture_displacement/depth.gif create mode 100644 resources/images/texture_displacement/edge_fade_off.png create mode 100644 resources/images/texture_displacement/edge_fade_on.png create mode 100644 resources/images/texture_displacement/invert_off.png create mode 100644 resources/images/texture_displacement/invert_on.png create mode 100644 resources/images/texture_displacement/midlevel.gif create mode 100644 resources/images/texture_displacement/smoothing_off.png create mode 100644 resources/images/texture_displacement/smoothing_on.png create mode 100644 resources/images/texture_displacement/tile_mirror.png create mode 100644 resources/images/texture_displacement/tile_repeat.png create mode 100644 resources/images/texture_displacement/tile_size_large.png create mode 100644 resources/images/texture_displacement/tile_size_small.png diff --git a/docs/HLSD/tooltip-illustrations.md b/docs/HLSD/tooltip-illustrations.md index c150d3ac2f..1d028398c3 100644 --- a/docs/HLSD/tooltip-illustrations.md +++ b/docs/HLSD/tooltip-illustrations.md @@ -61,16 +61,28 @@ for the next through `GLCanvas3D::schedule_extra_frame()`, timed to when that fr ## Making one Captures of the real tool are the first choice for anything involving the model, the mesh or colour. -Settings whose meaning is a shape can be drawn from the same arithmetic instead: -`scripts/gen_texture_displacement_tips.py` shades a height field as a relief catching the light, and -produces `tile_off.png`, `tile_on.png` and `rotation.gif` that way. +Settings whose meaning is a shape are drawn from the same arithmetic instead, by +`scripts/gen_texture_displacement_tips.py`: it shades a height field as a relief catching the light, +and covers Depth, Tile, Tile size, Rotation, Repeat/Mirror, Midlevel, Smoothing, Edge fade, Invert and +Blend that way. + +One motif - a ring inside a square frame - runs through nearly all of them, because using one shape +everywhere is what lets two pictures be compared: whatever differs between them is the setting, since +nothing else is. + +Midlevel is drawn in section rather than as a relief, and the reason generalises. Shading reads +slopes, so a height field moved up or down as a whole shades identically to where it started; any +setting whose meaning is *where the relief sits relative to the surface* is invisible in a top view +and has to be drawn from the side, against the bare surface as a reference. Either way: -- Square, around 256 px. The tooltip is about 20 em wide, so that is roughly native size on a 100% - display and downscales cleanly above it. +- Square, around 256 px (192 for an animation, where every frame ships). The tooltip is about 20 em + wide, so that is roughly native size on a 100% display and downscales cleanly above it. A single + picture is capped at 10 em tall and centred, two side by side take half the width each. - Neutral grey. These say what a shape does; colour in one reads as a third thing the setting does, and has to work against both themes. -- Animations loop seamlessly and stay short - a dozen frames at 100 ms, under about 250 KB. They sit - in `resources/`, which ships with every copy of the application. +- Animations loop seamlessly and stay short - 16 frames at 100 ms, under about 150 KB. They sit in + `resources/`, which ships with every copy of the application. A sweep driven by a cosine over the + frame count loops with no step, since it starts and ends at the same value and the same rate. - No text in the picture. Captions are translated; pixels are not. diff --git a/resources/images/texture_displacement/blend_add.png b/resources/images/texture_displacement/blend_add.png new file mode 100644 index 0000000000000000000000000000000000000000..e1d836167e811a38db4e7d2ce971e3a98a7f82a2 GIT binary patch literal 52646 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 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/blend_multiply.png b/resources/images/texture_displacement/blend_multiply.png new file mode 100644 index 0000000000000000000000000000000000000000..eea49dd12b820f826726dad9453c954a2fa73faf GIT binary patch literal 42326 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

#^W~>7oC%qQ9GV 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 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/depth.gif b/resources/images/texture_displacement/depth.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b8e19b08a7331a26e51a68f17afbf1b8401e8fd GIT binary patch literal 115036 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 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/edge_fade_off.png b/resources/images/texture_displacement/edge_fade_off.png new file mode 100644 index 0000000000000000000000000000000000000000..4652e38ba783f1bfe2236dcfbdcf7738a294cbcf GIT binary patch literal 25008 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 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/invert_off.png b/resources/images/texture_displacement/invert_off.png new file mode 100644 index 0000000000000000000000000000000000000000..65248727de36a8b5ef796def4941567e29b30ada GIT binary patch literal 29931 zcmcG#^j`w16}S z1Gatl{`~a)13sVg%l5-==UmU{p69B^{fg1kQM*sVNCE)BeGPSG0{{TwzJdTEFz#a( zA};~}zKt5n3aNJ_`NJmj>9@Mtk?=#J3arovak@=~`%G9( z!9;^tEEkFdaM!^6Wa6nX#R_yOVpn7<= z)8k+w_J}^^0rNY#knN!j7#RRZz{~Yr?!zSuSRcp-C!}V;sCvihJ}am7Y7m-G610Oj zYzi-r1J4No2mlf1a85wHnLcGrrZ}w&%;h~NNV^z5ri;St6F^kX@F-_)B)cbpGtAjt zc{65uG=m8`@B(u{rgx&Q(JtI4ewN=GBy#psSU?m?z2lU%%K#`6C56(#EceZ!&V(f!>YZ7LL%v>h4 zT?>TMlUOw}Jm|LG5W<5%h0<&lE#a8mU7;DUGQ%&jv$!FzVkkR=z-B^K-{R$mU1Rov z*Dh6+wfl^hPw=5(^9Y3E^B4}8U|1c)L<&mf$#C2?A8EjDru4{tHs{C;$&(JCU|zAO zW`BtOJl_SXr`bl5B5xK@R+kL>PEG=Vs8~-1U)NF)$mHrMK8HBn$Jti_QgCsLZ%D5> z=%}oGO$?_6jWC`(IsT$|JAP|xl%P0zp0PVfU}k6a%Wg%8ux8FWNc+Lm--h`mlh=lR zvn|@l4L1S!4>Qhv`fSJ>3d6kfloD%wf{j!F%)#LpgcP~I+KaCUP0n~qGX>*hrA!cS zsoXE!>o8(^PxaU&?io8RH0OcWgwfc^GO^AL>`@){w!FtP`Qc4s%E7nK-}m^Gy!XNb zlG=KmkS(u*2U zbhr|I#(}$s;&;tn&2z&u${EJj#)ilii!~QpcP_xpukzSEC21jTIJjyU+#0c@L>lG4aK#Q6v0UU)-gQ# zA{B;v9B1qTt&nY~{fBEaU#?gv2w=2r7D3F2idI0a8HWS&c5!Dla5p`ie;-Q&;<;Z? zj%_)(v2N??4@H6tBoNRrM7Z)Ubt5m&U6}ExF~E~opzK&k06h9r7MNEyD>a>(o$Hea zwn)my-WiXo0S#C;p-8#Q^opp9(Kwtgv@(2)!{)-7zpE-Ba+Xh91O}K-r6#AhblvFDftYjhAT}QKlKt`zXi-ILwP^lpsc=B@;GJ zeQ`&AQ!ENHH3D1vR<*@h*lai}X0djeozR{PnqW-&)cyS!Pk-Xa6TSkrz!(bC#;2N~ z_*p64Q>oo>iV4@u#rJjGM5}7Otj#CO?a1C6c}r=4nN@QRwnowK@529{|AunLu?7gI zkb8K>9+C74O8y_|Fha8w;zm620$9DJe?@Tib#hi#d)7%dVKdXQcju}$o-IGME=~Lt zC5g0Hc)KsLQ3nkZA%w(?yr;{#N-4Vt`_cwFePBQc;~g9*4tT^k5G!S6l?W=5DS(7$ zuZSgXIx!E6RQqD3@v3{etN=Idl{vSC``L%WWReGGM9+GUnu{r*(tVL_uBoCB|zK2u$eLyebs zA~rqoPJx*x;5avXcQo*L{#&R!P+QqcgKBZkZehJy36Up5*Zl1@;4`8z2|P~l(Rp^9 zb7iUaOdU0&Fj!^9?Z5#Z6w{uSotzb$p8Y#8ekmAX2SN}*40=2+&)ORCGVC+cAC_lz z;7oeTOiqEW4@1rfsX_onwx`o((}EvgE8oNSiqs3oBQzk3%}lc~h^2l?d9UzMIQJ=c z_tn?;LdhS01X!=ZeDJOdJ4Vd1OAl{wYkQl0NZ#DTj!Gf6w%P4wd7QxL^{<>4e+wEG zL*!$HuZ#~>0NI_ZdlQIwr-;2h`TA@(l6)q3!Top2HGeFW_otZl!WHr`q<77D^2s(U z5I;|nc4eK%UDK?jJeM}^r@Ti9hf@nDZxo~zI_23~zsbw>nQAW?3;amf{c+P_?≥ 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%0Dr?e~4LztN}so<`FR1eHKp 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 W<@cYPbW1zQ65`&f>Bj-Uh5rGhQ*yTe literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/rotation.gif b/resources/images/texture_displacement/rotation.gif index 590b48eda31b7c01041a701f18ac4821d9eb99d8..94dfe648250daaae11505ab189b8c07d47e1e0ee 100644 GIT binary patch literal 136982 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 x^aJalIu}cMxJCPoOLF= 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]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 W<=oE&-Ov@?(Iwr|HQmt-2mm_@$pp0k literal 219397 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

4k234osv16p#P}Zo>b1&%53LurC$lF)$U{+aCA2 z*F5hz|M}1}-Z!!*{^TKI{Mwxyl3ILQp0kpsI zYdiyN2>xR~3-~|y3qS}YK=Y$O4Y0u4!$9}bzz3wi2rR$|Fe0@G!K#ak5^OoQ5kT0v zfDBMS{^I~cd4L_{!5)0S8KjdMyutO$!HU2<-Sa^ooWc1ELL0Qe%6p3=OhP4G!X_L- z)7yY3Y``hx!6l@@1mwRgG{P<9!XFgCAOyiD6hr^q!-ynAHSTgl6%@WJT)#CuLI}Xa zJk-M}oQ)N9!YA|qJIo3_Bt#_i!QiuiKU71bV8cQrL_Q=vMYO;y48K8iL_CDV34lCF z3`75G#7o4)IMl>Mq(jp~y`#88Lew=>i2zH)Lph8J4xqf-xRc4-0RNi+%xlG6B^|uti+d#a=|lU!22Pq(#a*#au+jXjI0iP`_a$Mh|$#V~j>$)I(Sd#>ulr zXEerb?8RyP#%TeN$;-xVY&KMsfOmw)cN9KZM8{^tMo*l8eALH%jK_YQM{u;pT0BLI z*vEqGM|d1X44}t=yvBhnNP|4cgjmLUOvnFwyuF9y$B0bGY79tmyhx19$B2|jY6Qq| zR7YF{$#%Rw3Sh~WWJ!{wNP8^83ZTiFv`Lr5Ntk5Fbeu_>^hum-$+Y;xovg)M#6X|C zNuYcQQY=Y^EXJcmN}5#4r5sA4e9EY-$*B}dj@-$UgvzKCBn%MC3m{7iFiVEWfTpy{ z?<+d7bj!EI0J5Zrv#h|FG|3KVOSpVXxirfItV^Oi7539hxa3Q^Ohdp-#|0eBy(~+^ zRLiau%*7nb#`Md>L`-5-OvzlLC!`8yyv&LOLgv`}E z&Cw*yYlO}3lTFgB&Dqq=-Q>;Q^vxIF1kT_T&fz4^;xx|VM9$C?X^#AtWXtBPJjtB_JXtA0i|c z7#Rl#2MGTFKL{L1u%N+%2oow?$grWqhY%x5oJg^vMT#CWYTU@NqX�Lv{oyvgF5! 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

rp+d?hcG2XrYY{TGd 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

p)aJ|0dCwzI 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"#qA^?ncO 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

7-Pne-bc|7<0^ilpV%*!6~C^ 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 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/collapse_slivers_on.png b/resources/images/texture_displacement/collapse_slivers_on.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1823c59c76723dff13455cef8d4f2e4f4f2d04 GIT binary patch literal 38821 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 D6iy$7 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/cursor_size.gif b/resources/images/texture_displacement/cursor_size.gif new file mode 100644 index 0000000000000000000000000000000000000000..3c6e5a7d921e76dba11cbe0041b70837f4f8cbe9 GIT binary patch literal 126232 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�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

jkba?s{ z05}C>VMS)bDKNGFeu7O|8BW=kU->z>lAvcENJVB+2ees+^JBNhV>s|#TtYK~W_dkS zjjb)(?x2gmeg-T#aT3p+R(-I{-5e(-&L@Nr<4CDFbrul!t?pYmr4HkD9IJU^~er>^s8r@ZuFCDuI{oLJ)L&b@j277$8>#iD-v>1Kt* zPyky|TDc>ITNl5XFGuZIAu)a9?I*;Tg?vHubesvmAo>g!fB`)oDy>H^x zLRSv41aej40JV4@1bY}P{4_ol|G2?X%eQIisQ9g;~OoF(9&B1Cj()Va+mZIM6UFoRm z`zM6lDqaPsR|(?!f5NaV<2fUyzM8Z}4-VWR*J0_AWk+&);^Fa1OI`fYqy8SC&owr2cn)MR>b=B)liFT_dk#CdSx2a zC}~u`Uw}~qrXG?nO^Sz9tZJA%)3oM4HPkhvJFYMm(d{j@G84uoFuCy2p!NjCeQ3F; ztdGMMEN|*+>b2BgE|cuup3iEO{@AhW?o_<5;MR|#ivADK+=klcYKI0&?pJg`KyAuk)xKVp+ZM!c6$$-IKllkqi{LYhrgQb;QY1uM|%;Rg{U_PJR z57M) z_w(`ZsKCAEb!Xf{W$o%o-1cmf$IhN#gfEE;PNGNG5}%C@dtf`e*nTS$JEqLQt_1e5 z*y4?^3;o6F&$k!vh47rOXw44`(*pJ^<%Z1rz= zcP62JmYlJQ^7s?z=*?+Kv*lbq|8%bF?hda8@S0FGDmLlP%GX)yO6_b$?S9jxEvcyp z*aQqHXL$ZC-_Jy1{j5{*>Zm1mG00y5M0S|Y)2B6tu7HN`5>s3D-S)Yc3q(B;FfydJ zV^A9DI_fx(YV*fwr_GlYq^6LkaqkT!{z2dU0Q{Yx`TPI4@xS9{wO%hVG&{z^FpR6e z2f*V92(d+8frU9acJA)oga2t(LZVj=ekAAr)WxzOb4U6DLdQ1#4`lDi(V@8hyK1eV z)q2QtHr*vdEhn*iMeJ#)F}tVizV8r`>X-EiS>X`g}ICb@oU`vE;!I{>p#{>w$Ei zm&YZo5rZ{ORHv1i4cV_ZdwTQ^f;i$!t;0rwc9<-8MaQns?)haz&-yZZZve*sc))CW z#QQ!3YO}5Mkc#5N<=6n&Dyix#fP{dT7a9s8vKfswraoI?`YI`xDb~zu+uv$CvoetsBE>qgskRUvw4%O}>jUsn z(#J+Pb^n2LcS4E&$k)We_3Eu;OM83l;L$YEhB4)TFObNRIe_ikH$;V1EqHjo{hWaq zB@=9%m#fK9<4%zN$2;?&6;$Y49eKL8xX<9DgDKx;MKZSnV#dGDaA=iSik4rL1+1J)^(J3W)@)VCmR+E$~y=8`edY~6JG}X zmV1WH&e^%I5(c2|p?kgosMQ*`PDk46)y(k=+qxq}+yM>#XTls!bANmQ-VOrkUe(tr I(Z&S-KZbs;D*ylh literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/denoise_on.png b/resources/images/texture_displacement/denoise_on.png new file mode 100644 index 0000000000000000000000000000000000000000..ff679e058a2d21037f5f1d52a9ea1105b1c55f56 GIT binary patch literal 6620 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

hMCTq4OcixStJGAJzi{X7|ah4Dv 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»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�O3+1};E%Q7lwGFeTgNUr z!ECssD2k`v+?BuWoE4gAnQ}mXGnT7Jp~OnsudSi6{XVlz+qQhKSB=^9?VVc9+nr6G z8JyuGZj?TQ8T@gc(U^|_4df&)6YZ z;6_f*Xg=!1yXF$KhPu7ki|(Y2e&cjoAF;mWLc!g%PT)IwjdqvoDZc9r{;VyIriSjH z;X3Tw4Cg6w?5z�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 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/tile_mirror.png b/resources/images/texture_displacement/tile_mirror.png new file mode 100644 index 0000000000000000000000000000000000000000..0da432ff9ddda5640b5f8a43b892c1d323c425c9 GIT binary patch literal 19086 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 ArvLx| literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/tile_repeat.png b/resources/images/texture_displacement/tile_repeat.png new file mode 100644 index 0000000000000000000000000000000000000000..ca9793897b42c236d1ed7f58a8a59644ec3840ac GIT binary patch literal 18327 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 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/tile_size_large.png b/resources/images/texture_displacement/tile_size_large.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc2659244aa3bea923979ab6b33b88c4f18efa1 GIT binary patch literal 16970 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ń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 &m const float cell_w = (width - spacing * float(shown.size() - 1)) / float(shown.size()); const ImU32 frame = ImGui::GetColorU32(ImGuiCol_Text, 0.25f); + // A single illustration would otherwise be drawn at the tooltip's full width, and a square one at + // full width is a picture as tall as the text beside it is long. Capped and centred in its column. + const float max_h = m_imgui->scaled(10.f); + ImGui::Spacing(); for (size_t i = 0; i < shown.size(); ++i) { const AnimatedTexture *texture = shown[i].first; const TipMedia &entry = *shown[i].second; + const float cell_x = ImGui::GetCursorPosX(); + + float w = cell_w; + float h = std::round(cell_w * float(texture->height()) / float(texture->width())); + if (h > max_h) { + w = std::round(max_h * float(texture->width()) / float(texture->height())); + h = max_h; + } ImGui::BeginGroup(); double next = 0.; const unsigned int id = texture->texture_id(time, &next); - const float h = std::round(cell_w * float(texture->height()) / float(texture->width())); - ImGui::Image((ImTextureID) (intptr_t) id, ImVec2(cell_w, h)); + ImGui::SetCursorPosX(cell_x + std::round(0.5f * (cell_w - w))); + ImGui::Image((ImTextureID) (intptr_t) id, ImVec2(w, h)); ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), frame, style.FrameRounding); // The canvas only redraws on demand, so an animation has to ask - and asks for exactly when its // next frame is due, rather than for a redraw as fast as the machine will go. @@ -3785,10 +3797,9 @@ void GLGizmoTextureDisplacement::render_tip_media(const std::vector &m m_parent.schedule_extra_frame(int(next * 1000.0)); if (!entry.caption.empty()) { - // Centred under its own illustration, and never wider than it. + // Centred under its own illustration, and never wider than its column. const std::string caption = into_u8(entry.caption); const float text_w = ImGui::CalcTextSize(caption.c_str()).x; - const float cell_x = ImGui::GetCursorPosX(); ImGui::SetCursorPosX(cell_x + std::max(0.f, (cell_w - text_w) * 0.5f)); ImGui::PushTextWrapPos(cell_x + cell_w); ImGui::TextDisabled("%s", caption.c_str()); @@ -6565,11 +6576,13 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float // Depth and tile size are logarithmic, so both ends of their wide ranges stay usable. m_preview_params_dirty |= float_row("##depth", _L("Depth"), &layer.depth_mm, 0.01f, 10.f, "%.3f mm", true, card_pad); hover_tip(_u8L("Height of the relief: how far white in the texture lifts the surface, in " - "millimetres. Black does not move it at all, unless Midlevel says otherwise.")); + "millimetres. Black does not move it at all, unless Midlevel says otherwise."), + { { "depth.gif" } }); m_preview_params_dirty |= float_row("##tile_size", _L("Tile size"), &layer.tiling_scale, 0.2f, 200.f, "%.2f mm", true, card_pad); hover_tip(_u8L("How wide one copy of the texture is on the model. Smaller repeats the pattern " "more often and makes its detail finer; with Tile off, this is the size of the " - "single copy.")); + "single copy."), + { { "tile_size_large.png", _L("Larger") }, { "tile_size_small.png", _L("Smaller") } }); m_preview_params_dirty |= float_row("##rotation", _L("Rotation"), &layer.rotation_deg, 0.f, 360.f, "%.0f°", false, card_pad); hover_tip(_u8L("Turns the texture on the surface, in degrees - for lining a pattern up with an " "edge of the model."), @@ -6593,7 +6606,8 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float "outwards; at 0.5 mid-gray stays put, so darker grays cut in and lighter ones " "still push out - one image both embosses and engraves.\n\n" "What cuts in has to fit: inside a sharp corner or through a thin wall, a deep " - "cut can pass through the other side.")); + "cut can pass through the other side."), + { { "midlevel.gif" } }); if (layer.midlevel > 0.f && layer.depth_mm > 1.f) { ImGui::PushTextWrapPos(content_rx - card_pad); m_imgui->warning_text(_L("Deep inward displacement may self-intersect.")); @@ -6603,12 +6617,14 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float m_preview_params_dirty |= float_row("##smoothing", _L("Smoothing"), &layer.smoothing, 0.f, 1.f, "%.2f", false, card_pad); hover_tip(_u8L("Blurs the image before it is used, which rounds off hard steps and removes " "speckle from a noisy photo. Raise it if the relief looks harsh or grainy; it " - "costs fine detail.")); + "costs fine detail."), + { { "smoothing_off.png", _L("Off") }, { "smoothing_on.png", _L("On") } }); // Edge fade: the relief flattens toward the boundary of the painted area. m_preview_params_dirty |= m_imgui->bbl_checkbox(_L("Edge fade") + "##edge_smoothing", layer.edge_smoothing); hover_tip(_u8L("Flattens the relief as it approaches the edge of the painted area, so it " - "blends into the bare surface instead of stopping at a step.")); + "blends into the bare surface instead of stopping at a step."), + { { "edge_fade_off.png", _L("Off") }, { "edge_fade_on.png", _L("On") } }); ImGui::SameLine(); m_imgui->disabled_begin(!layer.edge_smoothing); ImGui::SetNextItemWidth(-card_pad); @@ -6623,7 +6639,8 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float const float x0 = ImGui::GetCursorPosX(); m_preview_params_dirty |= m_imgui->bbl_checkbox(_L("Invert"), layer.invert); hover_tip(_u8L("Turns the relief inside out: what stood out is cut in, and the other way " - "round. The same as using a negative of the image.")); + "round. The same as using a negative of the image."), + { { "invert_off.png", _L("Off") }, { "invert_on.png", _L("On") } }); ImGui::SameLine(); ImGui::SetCursorPosX(std::max(ImGui::GetCursorPosX(), x0 + 0.5f * (ImGui::GetWindowContentRegionMax().x - card_pad - x0))); @@ -6820,14 +6837,14 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float ImGui::SetCursorPosX(std::max(ImGui::GetCursorPosX(), x0 + label_w)); const wxString tile_na = layer.tile_enabled ? wxString() : _L("Turn Tile on to choose how the texture repeats."); if (icon_toggle(840, "texture_displacement_tile_repeat.svg", layer.tile_method == static_cast(0), - icon_sm, _L("Repeat"), _L("Repeat"), tile_na)) { + icon_sm, _L("Repeat"), _L("Repeat"), tile_na, { { "tile_repeat.png" } })) { layer.tile_method = static_cast(0); m_preview_params_dirty = true; } ImGui::SameLine(0.f, gap_s); if (icon_toggle(841, "menu_mirror_x.svg", layer.tile_method == static_cast(1), icon_sm, _L("Mirrored repeat"), _L("Mirrored repeat - every other tile is flipped, so edges meet seamlessly"), - tile_na)) { + tile_na, { { "tile_mirror.png" } })) { layer.tile_method = static_cast(1); m_preview_params_dirty = true; } @@ -6863,7 +6880,10 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float "Subtract pile relief on or carve it away. Multiply and Divide scale " "what is underneath, which turns this layer into a mask over it - " "there, Depth acts as a strength, and 1 mm leaves white areas " - "untouched.")); + "untouched."), + base_layer ? std::vector{} : + std::vector{ { "blend_add.png", from_u8(blend_add) }, + { "blend_multiply.png", from_u8(blend_multiply) } }); ImGui::SameLine(0.f, gap_s); if (icon_toggle(842, "texture_displacement_adjust.svg", m_adjust_texture_mode, icon_sm, _L("Adjust placement"), From f546551b3f7c039ecfe70639aa72e6010fe4c4ad Mon Sep 17 00:00:00 2001 From: ExPikaPaka <112851715+ExPikaPaka@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:51:07 +0200 Subject: [PATCH 041/137] Use a model's own UV channel for texture displacement, and keep its colours through a bake (#16394) --- .../texture_displacement_map_model_uv.svg | 1 + src/libslic3r/Model.cpp | 22 ++ src/libslic3r/Model.hpp | 25 +- src/libslic3r/TextureDisplacement.cpp | 270 +++++++++++--- src/libslic3r/TextureDisplacement.hpp | 93 ++++- src/libslic3r/TexturePainting.cpp | 21 ++ .../GUI/Gizmos/GLGizmoTextureDisplacement.cpp | 149 ++++++-- .../GUI/Gizmos/GLGizmoTextureDisplacement.hpp | 29 +- .../GUI/Jobs/TextureDisplacementBakeJob.cpp | 13 +- .../GUI/Jobs/TextureDisplacementBakeJob.hpp | 3 + .../GUI/Jobs/TextureDisplacementDebugJob.cpp | 10 +- .../GUI/Jobs/TextureDisplacementDebugJob.hpp | 3 + .../Jobs/TextureDisplacementPrepareJob.cpp | 6 +- .../Jobs/TextureDisplacementPrepareJob.hpp | 5 + .../Jobs/TextureDisplacementPreviewJob.cpp | 3 +- .../Jobs/TextureDisplacementPreviewJob.hpp | 3 + tests/libslic3r/test_texture_displacement.cpp | 350 ++++++++++++++++++ 17 files changed, 904 insertions(+), 102 deletions(-) create mode 100644 resources/images/texture_displacement_map_model_uv.svg diff --git a/resources/images/texture_displacement_map_model_uv.svg b/resources/images/texture_displacement_map_model_uv.svg new file mode 100644 index 0000000000..c303d4e0ac --- /dev/null +++ b/resources/images/texture_displacement_map_model_uv.svg @@ -0,0 +1 @@ + diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index d096bd2158..2f065f09de 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -354,6 +354,24 @@ Model Model::read_from_file(const std::string& ObjInfo obj_info; ObjParser::MtlData mtl_data; result = load_obj(input_file.c_str(), &model, obj_info, message, nullptr, &mtl_data); + // Keep the model's own UV channel on the volume, whatever the colour import then does with + // the mesh: it is what TextureProjectionMethod::ModelUV maps a texture-displacement layer + // through, so a model that arrives with a UV layout is textured on that layout instead of on + // a fresh unwrap. load_obj() fills obj_info.uvs per face of the mesh it built, in the same + // order (and only when every face named a known material, hence the size check). V is flipped + // on the way in, to the convention DecodedHeightTexture samples in - the same flip + // obj_to_textured_mesh() does for the colour importer. + if (result && !obj_info.uvs.empty() && !model.objects.empty() && !model.objects.back()->volumes.empty()) { + ModelVolume &volume = *model.objects.back()->volumes[0]; + const indexed_triangle_set &its = volume.mesh().its; + if (obj_info.uvs.size() == its.indices.size()) { + volume.texture_uv.resize(its.indices.size() * 3); + for (size_t fi = 0; fi < obj_info.uvs.size(); ++fi) + for (int k = 0; k < 3; ++k) + volume.texture_uv[fi * 3 + size_t(k)] = + Vec2f(obj_info.uvs[fi][size_t(k)].x(), 1.f - obj_info.uvs[fi][size_t(k)].y()); + } + } if (result && obj_info.has_uv_png && !obj_info.uvs.empty() && !model.objects.empty()) { // Textured OBJ: hand the mesh + materials to the texture-to-color importer // instead of the flat per-face colour dialog. @@ -2134,6 +2152,10 @@ void ModelVolume::reset_extra_facets() // than left referring to a mesh that no longer matches it. for (int i = 0; i < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++i) this->texture_displacement_facet(i).reset(); + // Same reasoning for the model's own UV channel: it is indexed by triangle, so against a mesh + // this no longer matches it would map the texture by another mesh's triangle numbering. A caller + // that can carry it across - see transfer_uv_channel() - puts it back after this. + this->reset_texture_uv(); } std::optional ModelVolume::save_painting() const diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index dcaea5ee97..d7859446b5 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -975,6 +975,26 @@ public: // they are not a property of any single layer. TextureDisplacementOptions texture_displacement_options; + // The model's own texture coordinates, as the file it was imported from carried them: three per + // triangle of mesh().its, in its triangle order (corner k of triangle i at 3i+k), V already + // flipped to the sampling convention (V = 0 is the image's top row). Empty when the source had + // none, which is every STL and every 3mf - only a textured OBJ brings one in today. + // + // Per corner rather than per vertex because that is what a UV layout is: the two sides of a seam + // are the same vertex with two different coordinates, and collapsing them would smear the texture + // across every island boundary. TextureProjectionMethod::ModelUV maps through it, which is what + // lets a model that already carries a UV channel be textured on the artist's own layout instead + // of on a fresh unwrap. + // + // Indexed by triangle, so anything that *replaces* the mesh has to bring it across (or drop it): + // see transfer_uv_channel(), and reset_texture_uv() for the cases that cannot. + std::vector texture_uv; + + bool has_texture_uv() const { return !texture_uv.empty() && texture_uv.size() == mesh().its.indices.size() * 3; } + // Forgets the channel. For a mesh change that nothing can carry it across - a split, a boolean - + // where leaving it would map the texture by another mesh's triangle numbering. + void reset_texture_uv() { texture_uv.clear(); } + // Save painting data before reset_extra_facets() discards it. // Used for replacing mesh without losing painting data. // Only for model parts (not modifiers/connectors). @@ -1240,6 +1260,7 @@ private: texture_displacement_facets_6(other.texture_displacement_facets_6), texture_displacement_facets_7(other.texture_displacement_facets_7), texture_displacement_layers(other.texture_displacement_layers), texture_displacement_options(other.texture_displacement_options), + texture_uv(other.texture_uv), cut_info(other.cut_info), text_configuration(other.text_configuration), emboss_shape(other.emboss_shape) { assert(this->id().valid()); @@ -1338,7 +1359,7 @@ private: cereal::load_by_value(ar, f); mesh_changed |= tf != f.timestamp(); } - ar(texture_displacement_layers, texture_displacement_options); + ar(texture_displacement_layers, texture_displacement_options, texture_uv); cereal::load_by_value(ar, config); cereal::load(ar, text_configuration); cereal::load(ar, emboss_shape); @@ -1362,7 +1383,7 @@ private: cereal::save_by_value(ar, fuzzy_skin_facets); for (int i = 0; i < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++i) cereal::save_by_value(ar, texture_displacement_facet(i)); - ar(texture_displacement_layers, texture_displacement_options); + ar(texture_displacement_layers, texture_displacement_options, texture_uv); cereal::save_by_value(ar, config); cereal::save(ar, text_configuration); cereal::save(ar, emboss_shape); diff --git a/src/libslic3r/TextureDisplacement.cpp b/src/libslic3r/TextureDisplacement.cpp index 27d3eb8311..ab63a75c70 100644 --- a/src/libslic3r/TextureDisplacement.cpp +++ b/src/libslic3r/TextureDisplacement.cpp @@ -2054,6 +2054,110 @@ std::vector compute_lscm_corner_uvs(const indexed_triangle_set &patch, co return corner; } +// Barycentric weights of `p` inside triangle (a, b, c), as the pair that belongs with the edges +// (b - a) and (c - a): p ~= (1 - w1 - w2) * a + w1 * b + w2 * c. `p` is projected onto the triangle's +// plane, so a point a hair off the surface still reports the weights of its foot point. A degenerate +// triangle reports its centroid, the only coordinate that means anything there. +static void barycentric_weights(const Vec3f &a, const Vec3f &b, const Vec3f &c, const Vec3f &p, float &w1, float &w2) +{ + const Vec3f e0 = b - a, e1 = c - a, ep = p - a; + const float d00 = e0.dot(e0), d01 = e0.dot(e1), d11 = e1.dot(e1), dp0 = ep.dot(e0), dp1 = ep.dot(e1); + const float den = d00 * d11 - d01 * d01; + if (std::abs(den) <= 1e-20f) { + w1 = w2 = 1.f / 3.f; + return; + } + w1 = (d11 * dp0 - d01 * dp1) / den; + w2 = (d00 * dp1 - d01 * dp0) / den; +} + +std::vector compute_model_corner_uvs(const indexed_triangle_set &base_mesh, + const std::vector &model_uv, + const indexed_triangle_set &patch, + const std::vector &patch_source) +{ + if (patch.indices.empty() || model_uv.size() != base_mesh.indices.size() * 3 || + patch_source.size() != patch.indices.size()) + return {}; + + std::vector corner(patch.indices.size() * 3, Vec2f::Zero()); + for (size_t j = 0; j < patch.indices.size(); ++j) { + const int S = patch_source[j]; + if (S < 0 || size_t(S) >= base_mesh.indices.size()) + continue; // no source triangle: leave (0, 0), which the callers read as "no placement" + const stl_triangle_vertex_indices &src = base_mesh.indices[size_t(S)]; + const Vec3f &a = base_mesh.vertices[size_t(src[0])]; + const Vec3f &b = base_mesh.vertices[size_t(src[1])]; + const Vec3f &c = base_mesh.vertices[size_t(src[2])]; + const Vec2f *uv = &model_uv[size_t(S) * 3]; + const stl_triangle_vertex_indices &tri = patch.indices[j]; + for (int k = 0; k < 3; ++k) { + // An unsplit patch triangle is its source triangle, so its corners land exactly on a, b + // and c and this reproduces their uvs unchanged; a sub-triangle the brush cut gets the + // interpolated coordinate, which is the whole point of going through the barycentric. + float w1 = 0.f, w2 = 0.f; + barycentric_weights(a, b, c, patch.vertices[size_t(tri[k])], w1, w2); + corner[j * 3 + size_t(k)] = (1.f - w1 - w2) * uv[0] + w1 * uv[1] + w2 * uv[2]; + } + } + return corner; +} + +std::vector collapse_corner_uvs(const indexed_triangle_set &patch, const std::vector &corner) +{ + if (patch.indices.empty() || corner.size() != patch.indices.size() * 3) + return {}; + + std::vector per_vertex(patch.vertices.size(), Vec2f::Zero()); + std::vector seen(patch.vertices.size(), 0); + for (size_t j = 0; j < patch.indices.size(); ++j) + for (int k = 0; k < 3; ++k) { + const int vi = patch.indices[j][k]; + if (vi < 0 || size_t(vi) >= per_vertex.size() || seen[size_t(vi)]) + continue; + seen[size_t(vi)] = 1; + per_vertex[size_t(vi)] = corner[j * 3 + size_t(k)]; + } + return per_vertex; +} + +std::vector transfer_uv_channel(const indexed_triangle_set &src_mesh, + const std::vector &src_uv, + const indexed_triangle_set &dst_mesh, + float max_distance) +{ + if (src_mesh.indices.empty() || dst_mesh.indices.empty() || src_uv.size() != src_mesh.indices.size() * 3) + return {}; + + const AABBTreeIndirect::Tree3f tree = + AABBTreeIndirect::build_aabb_tree_over_indexed_triangle_set(src_mesh.vertices, src_mesh.indices); + const float limit2 = max_distance >= 0.f ? max_distance * max_distance : std::numeric_limits::max(); + + std::vector out(dst_mesh.indices.size() * 3, Vec2f::Zero()); + tbb::parallel_for(tbb::blocked_range(0, dst_mesh.indices.size()), + [&](const tbb::blocked_range &range) { + for (size_t j = range.begin(); j < range.end(); ++j) { + const stl_triangle_vertex_indices &tri = dst_mesh.indices[j]; + for (int k = 0; k < 3; ++k) { + const Vec3f &p = dst_mesh.vertices[size_t(tri[k])]; + size_t hit = 0; + Vec3f foot; + const float d2 = AABBTreeIndirect::squared_distance_to_indexed_triangle_set( + src_mesh.vertices, src_mesh.indices, tree, p, hit, foot); + if (d2 < 0.f || d2 > limit2 || hit >= src_mesh.indices.size()) + continue; // nowhere near the source surface: (0, 0), as documented + const stl_triangle_vertex_indices &st = src_mesh.indices[hit]; + float w1 = 0.f, w2 = 0.f; + barycentric_weights(src_mesh.vertices[size_t(st[0])], src_mesh.vertices[size_t(st[1])], + src_mesh.vertices[size_t(st[2])], foot, w1, w2); + const Vec2f *uv = &src_uv[hit * 3]; + out[j * 3 + size_t(k)] = (1.f - w1 - w2) * uv[0] + w1 * uv[1] + w2 * uv[2]; + } + } + }); + return out; +} + namespace { // apply_uv_transform()'s per-layer constants, worked out once. Triplanar sampling runs the transform // three times per point, and recomputing the rotation's cos/sin and the tiling reciprocal on every one @@ -2063,13 +2167,16 @@ struct UVTransform float scale, cs, sn, aspect; Vec2f offset; - UVTransform(const TextureDisplacementLayer &layer, float aspect_) + // `normalized_uv` drops the two steps that only mean something for a coordinate measured on the + // model - the millimetre tiling scale and the non-square aspect correction - and keeps the + // rotation and offset. See apply_uv_transform(); TextureProjectionMethod::ModelUV is what needs it. + UVTransform(const TextureDisplacementLayer &layer, float aspect_, bool normalized_uv = false) { - scale = (layer.tiling_scale > 1e-6f) ? (1.f / layer.tiling_scale) : 1.f; + scale = (normalized_uv || layer.tiling_scale <= 1e-6f) ? 1.f : (1.f / layer.tiling_scale); const float rad = layer.rotation_deg * float(M_PI) / 180.f; cs = std::cos(rad); sn = std::sin(rad); - aspect = aspect_; + aspect = normalized_uv ? 1.f : aspect_; offset = layer.offset; } Vec2f operator()(const Vec2f &planar) const @@ -2094,9 +2201,11 @@ inline Vec3f triplanar_weights(const Vec3f &normal) } } // namespace -Vec2f apply_uv_transform(const Vec2f &planar, const TextureDisplacementLayer &layer, float aspect) +Vec2f apply_uv_transform(const Vec2f &planar, const TextureDisplacementLayer &layer, float aspect, bool normalized_uv) { - const float scale = (layer.tiling_scale > 1e-6f) ? (1.f / layer.tiling_scale) : 1.f; + // A uv that is already normalized has no millimetre scale to divide by and no aspect to correct - + // see the header. UVTransform does the same, and the two must stay in step. + const float scale = (normalized_uv || layer.tiling_scale <= 1e-6f) ? 1.f : (1.f / layer.tiling_scale); const Vec2f scaled = planar * scale; const float rad = layer.rotation_deg * float(M_PI) / 180.f; @@ -2114,7 +2223,7 @@ Vec2f apply_uv_transform(const Vec2f &planar, const TextureDisplacementLayer &la // Applied after the rotation, not before: scaling one axis of an already-rotated coordinate is a // shear, and doing it the other way round would make "Rotation" skew the pattern instead of // turning it. - if (aspect > 0.f && aspect != 1.f) + if (!normalized_uv && aspect > 0.f && aspect != 1.f) rotated.y() *= aspect; return rotated + layer.offset; @@ -2139,6 +2248,9 @@ float blend_displacement(float accumulated, float value, TextureBlendMode mode) value; return accumulated / divisor; } + // Replaces instead of combining, so `accumulated` is deliberately unused: whatever the layers + // below put here is gone where this one is painted. + case TextureBlendMode::Override: return value; case TextureBlendMode::Add: default: return accumulated + value; } @@ -2168,14 +2280,21 @@ float sample_layer_height(const DecodedHeightTexture &texture, const TextureDisp // apply_uv_transform()). Every projection except the projective "from view" one funnels through // here, so this one line is what makes them all aspect-correct. const float aspect = (texture.height > 0) ? float(texture.width) / float(texture.height) : 1.f; - const UVTransform xf(layer, aspect); + // A ModelUV layer's precomputed uv is the model's own, already normalized; every other coordinate + // reaching the transform - the unwrap's, and every analytic projection's - is in millimetres. The + // `lscm_uv` test is what keeps the two apart: a ModelUV layer with no channel gets none, falls + // through to the millimetre methods below, and must be scaled like them. + const bool normalized_uv = layer.projection_method == TextureProjectionMethod::ModelUV && + lscm_uv != nullptr; + const UVTransform xf(layer, aspect, normalized_uv); auto sample_at = [&](const Vec2f &planar) { return texture.sample(xf(planar), layer.tile_enabled, layer.tile_method); }; - // Precomputed per-patch LSCM solve wins over the layer's own method (see the header): the - // caller only passes it when the patch actually parameterized successfully, so a patch that - // failed to unwrap falls through to the analytic methods below as its documented fallback. + // A precomputed per-patch uv - the LSCM solve, or the model's own channel - wins over the layer's + // own method (see the header): the caller only passes it when the patch actually has one, so a + // patch that failed to unwrap, or a volume with no UV channel, falls through to the analytic + // methods below as its documented fallback. if (lscm_uv != nullptr) return sample_at(*lscm_uv); @@ -2236,8 +2355,12 @@ bool sample_layer_color(const DecodedHeightTexture &texture, const TextureDispla // the two differ in what "nothing here" means. Height returns 0, which is a perfectly good height // (no displacement); colour has no such neutral value - black is a colour - so every path that // returns 0 there has to report false here instead, and the caller leaves the triangle uncoloured. - const float aspect = (texture.height > 0) ? float(texture.width) / float(texture.height) : 1.f; - const UVTransform xf(layer, aspect); + const float aspect = (texture.height > 0) ? float(texture.width) / float(texture.height) : 1.f; + // Same reasoning as sample_layer_height(), and it has to match it exactly or a layer's colour and + // its relief would be read from different places in the image. + const bool normalized_uv = layer.projection_method == TextureProjectionMethod::ModelUV && + lscm_uv != nullptr; + const UVTransform xf(layer, aspect, normalized_uv); auto sample_at = [&](const Vec2f &planar) { return texture.sample_color(xf(planar), layer.tile_enabled, layer.tile_method); }; @@ -2251,6 +2374,8 @@ bool sample_layer_color(const DecodedHeightTexture &texture, const TextureDispla }; if (lscm_uv != nullptr) { + // The coverage test goes through the same transform, so an untiled ModelUV layer is "there" + // exactly where the model's own uv lands inside the image. if (!covered(*lscm_uv)) return false; out = sample_at(*lscm_uv); @@ -2596,9 +2721,10 @@ indexed_triangle_set build_texture_displacement_v2(const indexed_triangle_set const TextureColorRequest *color, bool flip_normals, BakeStageRecorder *debug, - TextureBakeStats *stats) + TextureBakeStats *stats, + const std::vector *model_uv) { - HeightFieldSampler combined = make_combined_displacement_sampler(mesh, layers, facets_data); + HeightFieldSampler combined = make_combined_displacement_sampler(mesh, layers, facets_data, model_uv); if (!combined) return mesh; // nothing decodable to displace with @@ -2768,7 +2894,8 @@ indexed_triangle_set build_texture_displacement_v2(const indexed_triangle_set // part of it (half a tile in the neighbour's colour, a tile edge that wanders). const bool want_color = color != nullptr && color->out_triangle != nullptr && bool(color->quantize); const ColorFieldSampler color_sampler = - want_color ? make_combined_color_sampler(mesh, layers, facets_data, color->quantize, color->quantize_pure) : ColorFieldSampler{}; + want_color ? make_combined_color_sampler(mesh, layers, facets_data, color->quantize, color->quantize_pure, model_uv) : + ColorFieldSampler{}; // // The *palette* index, not the printed filament. The decimation treats any edge whose two faces // differ as a crease (TextureBakeDecimate.cpp), so it must only ever see where the **perceived** @@ -2900,7 +3027,8 @@ static indexed_triangle_set build_texture_displacement_in_place( const TextureColorRequest *color, bool flip_normals, BakeStageRecorder *debug, - TextureBakeStats *stats) + TextureBakeStats *stats, + const std::vector *model_uv) { // The classic path moves the vertices the mesh already has, so there is no budget to report on. (void) stats; @@ -2937,7 +3065,7 @@ static indexed_triangle_set build_texture_displacement_in_place( if (options.pipeline_v2) return build_texture_displacement_v2(mesh, layers, facets_data, options, progress, color, flip_normals, - debug, stats); + debug, stats, model_uv); // Layers are combined in slot order, like stacked layers in an image editor: each one folds its // own displacement into the running total via its blend mode (see TextureBlendMode). @@ -3055,13 +3183,19 @@ static indexed_triangle_set build_texture_displacement_in_place( selector_dirty = true; const bool color_this_layer = want_color && layer->color_enabled; + // The model's own channel is per base-mesh *triangle*, so reading it needs to know which base + // triangle each (possibly brush-split) patch triangle came from - the colour pass's map, asked + // for here as well. + const bool model_uv_layer = layer->projection_method == TextureProjectionMethod::ModelUV && + model_uv != nullptr && model_uv->size() == mesh.indices.size() * 3; // A flat-colour image is matched against the filaments alone (see TextureColorRequest). const ColorQuantizeFn &layer_quantize = (color_this_layer && color->quantize_pure && analyze_texture_detail(*layer).flat_colors) ? color->quantize_pure : color->quantize; - std::vector patch_source; // sub-triangle -> base mesh triangle, only built when colouring + std::vector patch_source; // sub-triangle -> base mesh triangle; built when colouring or mapping by ModelUV const indexed_triangle_set patch = - selector.get_facets_strict(EnforcerBlockerType::ENFORCER, color_this_layer ? &patch_source : nullptr); + selector.get_facets_strict(EnforcerBlockerType::ENFORCER, + (color_this_layer || model_uv_layer) ? &patch_source : nullptr); if (patch.indices.empty()) continue; // get_facets_strict() returns the same vertex array whichever state is asked for (only the @@ -3092,18 +3226,25 @@ static indexed_triangle_set build_texture_displacement_in_place( // A real unwrap of the whole patch, computed once here rather than per vertex - it is a // per-chart solve over the whole patch, not a per-point formula. Cached, so repeating this // for every slider tweak costs a hash rather than a re-solve (see compute_patch_unwrap()). - const std::vector lscm_uvs = (layer->projection_method == TextureProjectionMethod::LSCM) ? + // ModelUV takes its corners from the volume's own channel instead of solving anything, and + // collapses them to one per vertex the same way the unwrap does. + const std::vector model_corner_uvs = model_uv_layer ? + compute_model_corner_uvs(mesh, *model_uv, patch, patch_source) : + std::vector{}; + const std::vector patch_uvs = model_uv_layer ? collapse_corner_uvs(patch, model_corner_uvs) : + (layer->projection_method == TextureProjectionMethod::LSCM) ? compute_lscm_uvs(patch, *layer) : std::vector{}; // The colour pass below samples per *triangle*, so it takes the per-corner unwrap instead: the // per-vertex collapse above would hand a triangle at a seam the island layout did not join its // neighbour's placement, painting one triangle per face from the wrong part of the texture. - // (The displacement itself stays on lscm_uvs - a vertex has one position, so one height.) - const std::vector lscm_corner_uvs = (layer->projection_method == TextureProjectionMethod::LSCM) ? + // (The displacement itself stays on patch_uvs - a vertex has one position, so one height.) + const std::vector patch_corner_uvs = model_uv_layer ? model_corner_uvs : + (layer->projection_method == TextureProjectionMethod::LSCM) ? compute_lscm_corner_uvs(patch, *layer) : std::vector{}; - const bool corner_uv_ok = !lscm_corner_uvs.empty() && - lscm_corner_uvs.size() == patch.indices.size() * 3; + const bool corner_uv_ok = !patch_corner_uvs.empty() && + patch_corner_uvs.size() == patch.indices.size() * 3; // Colour, if this layer carries any. Area-weighted over each base triangle's *painted* part, // so a triangle the brush only clipped a corner off takes the colour of that corner rather @@ -3133,7 +3274,7 @@ static indexed_triangle_set build_texture_displacement_in_place( // the per-vertex height sampling uses, evaluated at the centroid instead. Vec3f n = Vec3f::Zero(); Vec2f uv = Vec2f::Zero(); - bool have_uv = !lscm_uvs.empty(); + bool have_uv = !patch_uvs.empty(); for (int k = 0; k < 3; ++k) { const int vi = t[k]; if (vi < int(vertex_normals.size())) @@ -3141,9 +3282,9 @@ static indexed_triangle_set build_texture_displacement_in_place( if (!have_uv) continue; if (corner_uv_ok) - uv += lscm_corner_uvs[j * 3 + size_t(k)]; - else if (size_t(vi) < lscm_uvs.size()) - uv += lscm_uvs[size_t(vi)]; + uv += patch_corner_uvs[j * 3 + size_t(k)]; + else if (size_t(vi) < patch_uvs.size()) + uv += patch_uvs[size_t(vi)]; else have_uv = false; } @@ -3217,7 +3358,7 @@ static indexed_triangle_set build_texture_displacement_in_place( [&](const tbb::blocked_range &range) { for (size_t k = range.begin(); k < range.end(); ++k) { const size_t vi = size_t(layer_vertices[k]); - const Vec2f *lscm_uv = lscm_uvs.empty() ? nullptr : &lscm_uvs[vi]; + const Vec2f *lscm_uv = patch_uvs.empty() ? nullptr : &patch_uvs[vi]; const float h = sample_layer_height(height, *layer, mesh.vertices[vi], vertex_normals[vi], patch_centroid, patch_axis, lscm_uv); // midlevel is the height that means "stay put", so anything below it displaces @@ -3350,7 +3491,8 @@ indexed_triangle_set build_texture_displacement(const indexed_triangle_set const TextureColorRequest *color, const Transform3d &volume_to_world, BakeStageRecorder *debug, - TextureBakeStats *stats) + TextureBakeStats *stats, + const std::vector *model_uv) { // An untransformed volume on an untransformed instance is by far the common case, and the round // trip costs two matrix multiplies per vertex on a mesh that can carry millions of them - so take @@ -3360,7 +3502,7 @@ indexed_triangle_set build_texture_displacement(const indexed_triangle_set const Transform3d frame = texture_displacement_bake_frame(volume_to_world); if (frame.matrix().isApprox(Transform3d::Identity().matrix())) return build_texture_displacement_in_place(base_mesh, layers, facets_data, options, progress, color, - false, debug, stats); + false, debug, stats, model_uv); const Transform3d to_local = frame.inverse(); // A mirroring placement leaves the positions correct but every winding-derived normal pointing @@ -3374,8 +3516,10 @@ indexed_triangle_set build_texture_displacement(const indexed_triangle_set v = (frame * v.cast()).cast(); const size_t debug_mark = (debug != nullptr) ? debug->mark() : 0; + // The UV channel rides along untouched: a uv is a coordinate in the texture, not on the model, so + // the frame the mesh is measured in does not reach it. indexed_triangle_set out = build_texture_displacement_in_place(world, layers, facets_data, options, - progress, color, mirrored, debug, stats); + progress, color, mirrored, debug, stats, model_uv); // Everything the bake recorded is in world millimetres, like `out` itself. The debug view draws in // the volume's local frame, so the stages are brought back the same way the result is. if (debug != nullptr) @@ -3447,7 +3591,8 @@ indexed_triangle_set build_texture_displacement(const ModelVolume &volume) return build_texture_displacement(volume.mesh().its, volume.texture_displacement_layers, facets_data, volume.texture_displacement_options, {}, nullptr, - texture_displacement_volume_to_world(volume)); + texture_displacement_volume_to_world(volume), nullptr, nullptr, + volume.has_texture_uv() ? &volume.texture_uv : nullptr); } void smooth_mesh_vertices(indexed_triangle_set &mesh, const std::vector &movable, float strength, @@ -3511,16 +3656,18 @@ void smooth_mesh_vertices(indexed_triangle_set &mesh, const std::vector namespace { // One decoded texture + placement per sampleable layer, in blend (slot) order. Held by shared_ptr so // the returned closure owns it for as long as the subdivider keeps calling back. -// An unwrap turned into something a *point* sampler can use. LSCM has no formula from position to -// uv - it is a per-triangle map - so a point is placed on the painted patch (the nearest patch -// triangle, and its barycentric coordinates there) and the uv is interpolated from that triangle's own -// per-corner uvs. Exact for a point on the base surface, which is where both samplers are queried: the -// displacement samples refined positions before moving them, and the colour pass samples the foot -// point on the painted pieces. +// A per-triangle uv map turned into something a *point* sampler can use. Neither of the two maps that +// are not a formula from position to uv - the LSCM unwrap and the model's own UV channel - can be +// evaluated at an arbitrary point directly, so a point is placed on the painted patch (the nearest +// patch triangle, and its barycentric coordinates there) and the uv is interpolated from that +// triangle's own per-corner uvs. Exact for a point on the base surface, which is where both samplers +// are queried: the displacement samples refined positions before moving them, and the colour pass +// samples the foot point on the painted pieces. struct LscmLookup { - indexed_triangle_set patch; // the layer's painted patch, as the unwrap was solved on + indexed_triangle_set patch; // the layer's painted patch, as the uvs were computed on AABBTreeIndirect::Tree3f tree; - std::vector corner; // compute_lscm_corner_uvs(patch, layer) + // compute_lscm_corner_uvs(patch, layer), or compute_model_corner_uvs() for a ModelUV layer + std::vector corner; // False when `pos` is not on this layer's patch (farther than `tol`): there is no uv there, so the // layer contributes nothing - the same as a non-tiled texture outside its placement. @@ -3533,15 +3680,9 @@ struct LscmLookup { if (d2 < 0.f || d2 > tol * tol || hit >= patch.indices.size()) return false; const stl_triangle_vertex_indices &t = patch.indices[hit]; - const Vec3f &a = patch.vertices[size_t(t[0])], &b = patch.vertices[size_t(t[1])], &c = patch.vertices[size_t(t[2])]; - const Vec3f e0 = b - a, e1 = c - a, ep = foot - a; - const float d00 = e0.dot(e0), d01 = e0.dot(e1), d11 = e1.dot(e1), dp0 = ep.dot(e0), dp1 = ep.dot(e1); - const float den = d00 * d11 - d01 * d01; - float w1 = 1.f / 3.f, w2 = 1.f / 3.f; // a degenerate triangle takes its centroid's uv - if (std::abs(den) > 1e-20f) { - w1 = (d11 * dp0 - d01 * dp1) / den; - w2 = (d00 * dp1 - d01 * dp0) / den; - } + float w1 = 0.f, w2 = 0.f; // a degenerate triangle takes its centroid's uv + barycentric_weights(patch.vertices[size_t(t[0])], patch.vertices[size_t(t[1])], patch.vertices[size_t(t[2])], + foot, w1, w2); const Vec2f *c3 = &corner[hit * 3]; uv = (1.f - w1 - w2) * c3[0] + w1 * c3[1] + w2 * c3[2]; return true; @@ -3600,7 +3741,7 @@ struct PreparedLayer { // where a layer is placed. `need_color` additionally drops layers that cannot contribute colour. std::shared_ptr> prepare_sampleable_layers( const indexed_triangle_set &base_mesh, const std::vector &layers, - const TextureDisplacementFacetsData &facets_data, bool need_color) + const TextureDisplacementFacetsData &facets_data, bool need_color, const std::vector *model_uv) { auto prepared = std::make_shared>(); @@ -3631,9 +3772,14 @@ std::shared_ptr> prepare_sampleable_layers( if (tex.empty() || (need_color && !tex.has_color())) continue; + const bool model_uv_layer = layer->projection_method == TextureProjectionMethod::ModelUV && + model_uv != nullptr && model_uv->size() == base_mesh.indices.size() * 3; + TriangleSelector selector(selector_mesh); selector.deserialize(data, false); - const indexed_triangle_set patch = selector.get_facets_strict(EnforcerBlockerType::ENFORCER); + std::vector patch_source; // only the model's own channel needs it; see the classic path + const indexed_triangle_set patch = + selector.get_facets_strict(EnforcerBlockerType::ENFORCER, model_uv_layer ? &patch_source : nullptr); if (patch.indices.empty()) continue; @@ -3643,12 +3789,16 @@ std::shared_ptr> prepare_sampleable_layers( texture_displacement_patch_frame(patch, vertex_normals, centroid, axis, average_normal); std::shared_ptr lscm; - if (layer->projection_method == TextureProjectionMethod::LSCM) { + if (model_uv_layer || layer->projection_method == TextureProjectionMethod::LSCM) { // Solved on the very patch the classic path and the GUI solve it on (same geometry, seam // angle and edges), so it hits the unwrap cache and lands exactly where the UV editor - // shows it, hand-placed islands and UV edits included. + // shows it, hand-placed islands and UV edits included. A ModelUV layer needs no solve at + // all - its corners are read straight out of the volume's channel - but it is looked up + // through the same per-triangle machinery, for the same reason: there is no formula from a + // point to its uv. auto l = std::make_shared(); - l->corner = compute_lscm_corner_uvs(patch, *layer); + l->corner = model_uv_layer ? compute_model_corner_uvs(base_mesh, *model_uv, patch, patch_source) : + compute_lscm_corner_uvs(patch, *layer); if (l->corner.size() == patch.indices.size() * 3) { l->patch = patch; l->tree = AABBTreeIndirect::build_aabb_tree_over_indexed_triangle_set(l->patch.vertices, l->patch.indices); @@ -3674,11 +3824,12 @@ ColorFieldSampler make_combined_color_sampler(const indexed_triangle_set const std::vector &layers, const TextureDisplacementFacetsData &facets_data, ColorQuantizeFn quantize, - ColorQuantizeFn quantize_pure) + ColorQuantizeFn quantize_pure, + const std::vector *model_uv) { if (!quantize) return nullptr; - auto prepared = prepare_sampleable_layers(base_mesh, layers, facets_data, /* need_color */ true); + auto prepared = prepare_sampleable_layers(base_mesh, layers, facets_data, /* need_color */ true, model_uv); if (prepared->empty()) return nullptr; // Per layer: a flat-colour image is matched against the filaments alone, when that quantizer @@ -3709,9 +3860,10 @@ ColorFieldSampler make_combined_color_sampler(const indexed_triangle_set HeightFieldSampler make_combined_displacement_sampler(const indexed_triangle_set &base_mesh, const std::vector &layers, - const TextureDisplacementFacetsData &facets_data) + const TextureDisplacementFacetsData &facets_data, + const std::vector *model_uv) { - auto prepared = prepare_sampleable_layers(base_mesh, layers, facets_data, /* need_color */ false); + auto prepared = prepare_sampleable_layers(base_mesh, layers, facets_data, /* need_color */ false, model_uv); if (prepared->empty()) return nullptr; diff --git a/src/libslic3r/TextureDisplacement.hpp b/src/libslic3r/TextureDisplacement.hpp index 2d5a759d61..6bd5d1ea33 100644 --- a/src/libslic3r/TextureDisplacement.hpp +++ b/src/libslic3r/TextureDisplacement.hpp @@ -86,6 +86,17 @@ enum class TextureProjectionMethod : int // that is inherent to view projection and is the user's call, not a bug. The projector's two // in-plane axes live in TextureDisplacementLayer::view_project_right/up. ViewProjected = 4, + // The model's own texture coordinates, as the file it was imported from carried them (see + // ModelVolume::texture_uv). Nothing is unwrapped or projected: the artist's layout *is* the + // placement, so a texture authored against that layout - the model's own albedo map, say - lands + // exactly where it was painted. Automatically picked for a new layer on a volume that has a UV + // channel, since re-unwrapping a model that already carries one can only be worse than using it. + // + // The uv is already normalized, so unlike every method above it is not measured in millimetres: + // "Tile size" and the non-square aspect correction do not apply to it (the layer's rotation and + // offset still do). Falls back to Triplanar when the volume has no channel, exactly as LSCM falls + // back when a patch cannot be flattened. + ModelUV = 5, }; // Dihedral angle (degrees) above which an edge between two painted triangles becomes a chart seam @@ -121,6 +132,11 @@ enum class TextureBlendMode : int Subtract = 1, // acc - value (carve this layer's relief out of the layers below) Multiply = 2, // acc * (value / 1mm) (mask/modulate the layers below by this layer) Divide = 3, // acc / (value / 1mm) (inverse mask; guarded against a zero/near-zero divisor) + // acc = value: this layer replaces what is under it instead of combining with it, so where it is + // painted only its own relief remains. The image editor's "Normal" mode, under the name the panel + // uses. Note the stack's *colour* already behaves this way - a higher slot's colour overwrites a + // lower one's where they overlap - so this is what makes the displacement agree with it. + Override = 4, }; // Combines one layer's signed displacement `value` (mm) into `accumulated` (mm) per `mode`. @@ -655,7 +671,13 @@ Vec2f project_planar(const Vec3f &position, const Vec3f &normal); // squeezed into a square tile: `tiling_scale` is the tile's size along u, and the tile is // `tiling_scale * height / width` mm along v, which keeps texels square. 1 (the default) is the // square case and leaves the coordinate exactly as it always was. -Vec2f apply_uv_transform(const Vec2f &planar, const TextureDisplacementLayer &layer, float aspect = 1.f); +// +// `normalized_uv` says the coordinate is already a uv rather than a millimetre measurement on the +// model - which is what TextureProjectionMethod::ModelUV hands in. Then neither the tiling scale (mm +// per tile is meaningless for it) nor the aspect correction (the artist's layout already accounts for +// the image's proportions) applies, and only the rotation and offset are left. +Vec2f apply_uv_transform(const Vec2f &planar, const TextureDisplacementLayer &layer, float aspect = 1.f, + bool normalized_uv = false); // Applies a row-major 3x4 projective matrix (see TextureDisplacementLayer::view_project_matrix) to a // local-space point, writing the resulting texture uv. Returns false - and leaves `uv` untouched - @@ -830,6 +852,55 @@ std::vector compute_lscm_uvs(const indexed_triangle_set &patch, const Tex // Returns an empty vector if the patch has no triangles or the unwrap carries no source_face map. std::vector compute_lscm_corner_uvs(const indexed_triangle_set &patch, const TextureDisplacementLayer &layer); +// Three UVs per patch triangle, read out of the model's *own* UV channel - the +// TextureProjectionMethod::ModelUV counterpart of compute_lscm_corner_uvs(), and laid out the same way +// (corner k of triangle i at index 3i+k). +// +// `model_uv` is the volume's channel: three uvs per triangle of `base_mesh`, in its triangle order +// (see ModelVolume::texture_uv). `patch_source` maps each patch triangle back to the base-mesh +// triangle it was cut from - TriangleSelector::get_facets_strict()'s out_source. A patch triangle is +// always a piece of exactly one base triangle, so each of its corners is interpolated barycentrically +// inside that triangle's three uvs. That is what keeps a sub-triangle the brush split (whose corners +// are not base-mesh vertices at all) on the texture, and what keeps the two sides of a UV seam +// reading from their own island instead of from one averaged coordinate. +// +// Returns an empty vector when the channel does not match `base_mesh`, when `patch_source` does not +// match `patch`, or when either is empty - the callers treat that as "no placement" and fall back, +// exactly as they do for an unwrap that failed. +std::vector compute_model_corner_uvs(const indexed_triangle_set &base_mesh, + const std::vector &model_uv, + const indexed_triangle_set &patch, + const std::vector &patch_source); + +// One UV per patch vertex, collapsed from a per-corner array: the first corner to reach a vertex wins. +// This is the per-corner/per-vertex split compute_lscm_uvs() documents, applied to any corner array - +// displacement is per-vertex, so a vertex on a seam has to settle on one of its copies. +// Returns an empty vector if `corner` is not three per patch triangle. +std::vector collapse_corner_uvs(const indexed_triangle_set &patch, const std::vector &corner); + +// Resamples a per-corner UV channel from `src_mesh` onto `dst_mesh`, for when something replaces a +// volume's mesh and the model's own UV channel has to come along: the colour import's painted mesh, +// the gizmo's remesh/subdivide, the default bake pipeline's rebuild. Each destination corner takes the +// uv of its closest point on the source surface, interpolated barycentrically inside the source +// triangle it lands on - the same transfer LscmLookup does per point, run over every corner. +// +// Exact wherever the two meshes describe the same surface, which is the case for every caller here +// (they subdivide, repair or displace it, they do not reshape it). A corner that lands nowhere near +// the source - farther than `max_distance` (negative: no limit) - takes (0, 0). +// +// One thing a positional transfer cannot reproduce: a *seam* vertex, where one position carries a +// different uv in each island that meets there. Position alone does not say which island a corner +// belongs to, so corners on a seam all take whichever island the nearest-triangle lookup lands on, +// and the texture can be off by up to one triangle in a band along the island borders. Doing better +// needs a triangle-to-triangle correspondence, which only some of the stages that replace a mesh +// have (a remesh has none at all). +// +// Returns an empty vector when `src_uv` is not three per source triangle, or when either mesh is empty. +std::vector transfer_uv_channel(const indexed_triangle_set &src_mesh, + const std::vector &src_uv, + const indexed_triangle_set &dst_mesh, + float max_distance = -1.f); + // The TextureDisplacementLayer::lscm_uv_overrides key for one unwrapped vertex (an index into PatchUnwrap::uvs). inline int lscm_uv_override_key(int unwrapped_vertex) { return -(unwrapped_vertex + 1); } @@ -888,6 +959,10 @@ using TextureDisplacementFacetsData = std::array palette index. Supplied by the GUI, which owns both the perceptual matching and the list @@ -962,7 +1037,9 @@ indexed_triangle_set build_texture_displacement(const indexed_triangle_set // stage, already brought back into `base_mesh`'s frame. BakeStageRecorder *debug = nullptr, // When given, receives what the bake spent. - TextureBakeStats *stats = nullptr); + TextureBakeStats *stats = nullptr, + // The model's own UV channel; see above. + const std::vector *model_uv = nullptr); // `volume`'s mesh coordinates -> world millimetres: its first instance's transform times its own. // The mesh is shared by every instance, so a multi-instance object can only be baked for one of @@ -1037,11 +1114,15 @@ ColorFieldSampler make_combined_color_sampler(const indexed_triangle_set const std::vector &layers, const TextureDisplacementFacetsData &facets_data, ColorQuantizeFn quantize, - ColorQuantizeFn quantize_pure = nullptr); + ColorQuantizeFn quantize_pure = nullptr, + // The model's own UV channel, for ModelUV layers; see + // build_texture_displacement(). + const std::vector *model_uv = nullptr); HeightFieldSampler make_combined_displacement_sampler(const indexed_triangle_set &base_mesh, const std::vector &layers, - const TextureDisplacementFacetsData &facets_data); + const TextureDisplacementFacetsData &facets_data, + const std::vector *model_uv = nullptr); // Uniformly subdivides `mesh` (every triangle recursively split into 4 via edge midpoints, using a // shared cache so a midpoint is computed once and reused by both triangles on either side of that @@ -1246,6 +1327,10 @@ struct TextureDisplacementPrepareResult { indexed_triangle_set mesh; TextureDisplacementFacetsData masks; + // The model's own UV channel, resampled onto `mesh` (see transfer_uv_channel()). Empty when the + // volume had none. Like the masks it is handed back rather than left to the caller to recompute, + // because only the run itself knows which stages replaced the mesh. + std::vector uv; // The remesh landed but no layer's paint survived being carried onto it. Nothing is committed: // everything downstream is driven by that paint, so baking on would bake a flat mesh. bool paint_lost = false; diff --git a/src/libslic3r/TexturePainting.cpp b/src/libslic3r/TexturePainting.cpp index 1bcddfd3d2..2f217b1aa2 100644 --- a/src/libslic3r/TexturePainting.cpp +++ b/src/libslic3r/TexturePainting.cpp @@ -25,6 +25,7 @@ #include "TextureToColor/ColorUtils.hpp" #include "Model.hpp" +#include "TextureDisplacement.hpp" #include "TextureToColor/TriMesh.hpp" #include "TriangleMesh.hpp" #include "TriangleSelector.hpp" @@ -554,9 +555,29 @@ bool apply_painted_mesh_to_volume( << ", unit_scale=" << unit_scale << ")"; } + // The model's own UV channel is indexed by triangle, and this replaces the triangles, so it has + // to be resampled onto them. Kept rather than dropped because it is the layout the model was + // authored against: a texture-displacement layer set to ModelUV maps through it, and the colour + // import is exactly the path a model that carries one arrives by. + const indexed_triangle_set old_its = volume.has_texture_uv() ? volume.mesh().its : indexed_triangle_set{}; + const std::vector old_uv = volume.texture_uv; + volume.set_mesh(std::move(new_mesh)); volume.calculate_convex_hull(); + // Resampled here and not further down, while the two meshes still share a frame: the painted mesh + // was just shifted by the same source.mesh_offset the old one was centred by, so the only thing + // between them is whatever drift the repair introduced. The re-centering below translates the mesh + // again, and a translation is exactly what a closest-point transfer cannot see through - it would + // read every uv off a point that far away. A uv is a coordinate in the texture, so it does not care + // about either shift; it just has to be read before the second one happens. + if (!old_its.indices.empty()) + volume.texture_uv = transfer_uv_channel(old_its, old_uv, volume.mesh().its); + else + // No channel to carry, so make sure none is left behind either: a leftover of the right length + // would read as a valid channel against a mesh it was never measured on. + volume.reset_texture_uv(); + // Re-center the replaced mesh so its bbox center sits at the origin, // matching what center_geometry_after_creation did for the original mesh. // CGAL repair / subdivision may shift the bbox center (drift); without diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp index 14eb31b19c..bd3934c918 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.cpp @@ -1244,9 +1244,33 @@ indexed_triangle_set GLGizmoTextureDisplacement::patch_in_world(const indexed_tr return world; } -std::vector GLGizmoTextureDisplacement::compute_layer_vertex_uvs(const indexed_triangle_set &local_patch, - const TextureDisplacementLayer &layer) const +std::vector GLGizmoTextureDisplacement::model_uv_corners(const indexed_triangle_set &local_patch, + const TextureDisplacementLayer &layer, + const std::vector *patch_source) const { + const ModelVolume *mv = texture_volume(); + if (layer.projection_method != TextureProjectionMethod::ModelUV || patch_source == nullptr || mv == nullptr || + !mv->has_texture_uv()) + return {}; + // The channel is indexed against the volume's *local* mesh, and a uv is a coordinate in the + // texture rather than on the model, so unlike every projected method this never goes through + // patch_in_world() - there is no millimetre measurement here for a world scale to change. + std::vector uv = compute_model_corner_uvs(mv->mesh().its, mv->texture_uv, local_patch, *patch_source); + for (Vec2f &p : uv) + // Already a uv: no tiling scale, no aspect correction - see apply_uv_transform(). + p = apply_uv_transform(p, layer, 1.f, /* normalized_uv */ true); + return uv; +} + +std::vector GLGizmoTextureDisplacement::compute_layer_vertex_uvs(const indexed_triangle_set &local_patch, + const TextureDisplacementLayer &layer, + const std::vector *patch_source) const +{ + if (layer.projection_method == TextureProjectionMethod::ModelUV) + // Collapsed to one per vertex the same way the unwrap is - a vertex has one position, so the + // displacement can only read one height for it. + return collapse_corner_uvs(local_patch, model_uv_corners(local_patch, layer, patch_source)); + // The bake maps the texture in world millimetres, so "Tile size (mm)" means the same thing on a // scaled instance as it does on an untouched one (see build_texture_displacement()). Everything // that has to agree with the bake - the fast preview's uvs, the checker/distortion overlays - @@ -1307,8 +1331,11 @@ int GLGizmoTextureDisplacement::layer_projection_frame(const indexed_triangle_se } std::vector GLGizmoTextureDisplacement::compute_layer_corner_uvs(const indexed_triangle_set &local_patch, - const TextureDisplacementLayer &layer) const + const TextureDisplacementLayer &layer, + const std::vector *patch_source) const { + if (layer.projection_method == TextureProjectionMethod::ModelUV) + return model_uv_corners(local_patch, layer, patch_source); if (layer.projection_method == TextureProjectionMethod::LSCM) { const indexed_triangle_set patch = patch_in_world(local_patch); const float aspect = layer_texture_aspect(layer); @@ -1318,7 +1345,7 @@ std::vector GLGizmoTextureDisplacement::compute_layer_corner_uvs(const in return uv; } // Single-valued per point: fan the per-vertex result out over the corners. - const std::vector per_vertex = compute_layer_vertex_uvs(local_patch, layer); + const std::vector per_vertex = compute_layer_vertex_uvs(local_patch, layer, patch_source); if (per_vertex.size() != local_patch.vertices.size()) return {}; std::vector corner(local_patch.indices.size() * 3); @@ -1339,7 +1366,11 @@ void GLGizmoTextureDisplacement::rebuild_shaded_preview_mesh() // Uses the *live* selector (not the flushed model facet data), so this reflects an in-progress // stroke immediately rather than only once it ends - the point of this preview mode is to be // the fast, no-CPU-meshing one. - const indexed_triangle_set patch = m_triangle_selectors[0]->get_facets_strict(EnforcerBlockerType::ENFORCER); + // The source map comes along because a ModelUV layer's uvs are read per base-mesh triangle; every + // other mapping ignores it. + std::vector patch_source; + const indexed_triangle_set patch = + m_triangle_selectors[0]->get_facets_strict(EnforcerBlockerType::ENFORCER, &patch_source); if (patch.indices.empty()) return; @@ -1363,7 +1394,8 @@ void GLGizmoTextureDisplacement::rebuild_shaded_preview_mesh() // Per *corner*, not per vertex: the mesh below is flat (unshared) anyway, so each triangle can // carry its own chart's UVs - see compute_layer_corner_uvs(). const TextureDisplacementLayer *active = active_layer(); - std::vector corner_uv = active != nullptr ? compute_layer_corner_uvs(patch, *active) : std::vector{}; + std::vector corner_uv = active != nullptr ? compute_layer_corner_uvs(patch, *active, &patch_source) : + std::vector{}; m_shaded_preview_uses_vertex_uv = corner_uv.size() == patch.indices.size() * 3; if (!m_shaded_preview_uses_vertex_uv) corner_uv.clear(); @@ -2030,7 +2062,9 @@ void GLGizmoTextureDisplacement::rebuild_uvcheck_mesh() const ModelVolume *mv = texture_volume(); if (mv == nullptr || m_triangle_selectors.empty()) return; - const indexed_triangle_set patch = m_triangle_selectors[0]->get_facets_strict(EnforcerBlockerType::ENFORCER); + std::vector patch_source; // only ModelUV reads it; see compute_layer_vertex_uvs() + const indexed_triangle_set patch = + m_triangle_selectors[0]->get_facets_strict(EnforcerBlockerType::ENFORCER, &patch_source); if (patch.indices.empty()) return; // Everything below works in the *patch's* vertex space, not the mesh's. Those agree only until a @@ -2044,7 +2078,7 @@ void GLGizmoTextureDisplacement::rebuild_uvcheck_mesh() // The checker samples wherever the projection puts it; the projections the shader can't // reconstruct (LSCM, ViewProjected) get a precomputed per-vertex uv, the rest project in-shader. - std::vector uv = compute_layer_vertex_uvs(patch, *layer); + std::vector uv = compute_layer_vertex_uvs(patch, *layer, &patch_source); const bool have_uvs = uv.size() == patch.vertices.size(); m_uvcheck_uses_vertex_uv = have_uvs; m_uvcheck_projection_mode = have_uvs ? 0 : @@ -2053,7 +2087,7 @@ void GLGizmoTextureDisplacement::rebuild_uvcheck_mesh() // different uv in each island it borders, so the shared-vertex form drew one triangle per face from // a neighbouring island's placement. Only the *drawing* needs this; the distortion metric below is // a per-vertex average by construction and keeps using `uv`. - const std::vector corner_uv = compute_layer_corner_uvs(patch, *layer); + const std::vector corner_uv = compute_layer_corner_uvs(patch, *layer, &patch_source); const bool have_corner_uvs = have_uvs && corner_uv.size() == patch.indices.size() * 3; // Per-vertex area distortion in [0,1] (0.5 == ideal), only when both requested and possible. @@ -2329,6 +2363,8 @@ void GLGizmoTextureDisplacement::queue_preview_job() if (input.options.pipeline_v2) input.options.v2_max_triangles_k = 0; input.volume_to_world = texture_displacement_volume_to_world(*mv); + if (mv->has_texture_uv()) + input.model_uv = mv->texture_uv; for (int i = 0; i < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++i) input.facets_data[size_t(i)] = mv->texture_displacement_facet(i).get_data(); // Captured here rather than read in the handler: the palette is main-thread state, and the preview @@ -3765,7 +3801,8 @@ void GLGizmoTextureDisplacement::ensure_panel_icons() // Paint / Erase, brush cursor shape, mapping, tiling, placement and the dock toggle. "texture_displacement_add.svg", "texture_displacement_add_negative.svg", "circle_paint.svg", "menu_obj_sphere.svg", "menu_obj_cube.svg", "menu_obj_cylinder.svg", "texture_displacement_map_unwrap.svg", - "texture_displacement_map_view.svg", "texture_displacement_tile_repeat.svg", "menu_mirror_x.svg", + "texture_displacement_map_view.svg", "texture_displacement_map_model_uv.svg", + "texture_displacement_tile_repeat.svg", "menu_mirror_x.svg", "texture_displacement_adjust.svg", "canvas_drag.svg", "texture_displacement_move_up.svg", "texture_displacement_move_down.svg", "texture_displacement_drag.svg", "texture_displacement_select_all.svg", "texture_displacement_erase_all.svg", @@ -3814,6 +3851,11 @@ void GLGizmoTextureDisplacement::add_texture_layer() TextureDisplacementLayer layer; layer.slot = free_slot; + // A model that came with a UV channel is mapped by it. Re-unwrapping such a model throws away the + // layout it was authored against and can only be worse than using it, so the default follows the + // model rather than the other way round; the Mapping row still offers every other method. + if (mv->has_texture_uv()) + layer.projection_method = TextureProjectionMethod::ModelUV; // Start the layer off on the first library texture rather than on nothing at all: a textureless // layer looks broken (painting on it appears to do nothing, because there is no height map to // displace by). The user swaps it for another from the layer's own picker. @@ -5291,7 +5333,8 @@ ColorQuantizeFn GLGizmoTextureDisplacement::make_palette_quantizer(const std::ve TextureDisplacementPrepareResult GLGizmoTextureDisplacement::prepare_mesh( const indexed_triangle_set &base, const TextureDisplacementFacetsData &masks, - const std::vector &layers, const TextureDisplacementPrepareParams ¶ms, + const std::vector &layers, const std::vector &model_uv, + const TextureDisplacementPrepareParams ¶ms, const TextureColorSettings &color_settings, const DisplacementProgressFn &progress, BakeStageRecorder *debug) { @@ -5318,6 +5361,13 @@ TextureDisplacementPrepareResult GLGizmoTextureDisplacement::prepare_mesh( bool had_paint = false; for (const TriangleSelector::TriangleSplittingData &m : masks) had_paint = had_paint || TriangleSelector::has_facets(m, EnforcerBlockerType::ENFORCER); + // The model's own UV channel for whatever `mesh` currently is. Every stage below keeps the input's + // surface - it evens out, refines or cuts the triangles lying on it - so each corner reads its uv + // straight off `base`'s channel at its own position instead of being carried stage by stage, which + // would compound each stage's approximation. Untouched while nothing has replaced the mesh yet. + const auto uv_now = [&]() { + return (model_uv.empty() || !changed) ? model_uv : transfer_uv_channel(base, model_uv, mesh.its); + }; if (!report(1)) return out; @@ -5364,9 +5414,11 @@ TextureDisplacementPrepareResult GLGizmoTextureDisplacement::prepare_mesh( // Feature-adaptive: sample the combined displacement so refinement follows texture // curvature. A null sampler (only LSCM layers, or nothing decodable) falls back to the // length baseline alone. + const std::vector uv_stage = uv_now(); + const std::vector *uv_ptr = uv_stage.empty() ? nullptr : &uv_stage; HeightFieldSampler sampler; if (params.subdiv_feature) - sampler = make_combined_displacement_sampler(mesh.its, layers, current); + sampler = make_combined_displacement_sampler(mesh.its, layers, current, uv_ptr); // Colour boundaries need triangles of their own - the chord test cannot see them, since // the height field is perfectly smooth across a change of filament. ColorFieldSampler color; @@ -5374,7 +5426,7 @@ TextureDisplacementPrepareResult GLGizmoTextureDisplacement::prepare_mesh( // boundaries are refined where the bake will actually change filament. if (params.subdiv_color_edge_mm > 0.f && !color_settings.empty()) color = make_combined_color_sampler(mesh.its, layers, current, make_palette_quantizer(color_settings.palette), - make_palette_quantizer(color_settings.palette_pure)); + make_palette_quantizer(color_settings.palette_pure), uv_ptr); // The refinement follows perceived colour: a mix is one colour here, however the slicer // interleaves its filaments layer by layer. // "Min edge" is a feature-mode control (it is the floor the curvature test refines down @@ -5433,8 +5485,10 @@ TextureDisplacementPrepareResult GLGizmoTextureDisplacement::prepare_mesh( std::vector cut_region(mesh.its.indices.size(), 0); for (size_t i = 0; i < cut_region.size() && i < source.size(); ++i) cut_region[i] = (region[size_t(source[i])] & REFINE_PAINTED) ? 1 : 0; + const std::vector uv_refined = uv_now(); const HeightFieldSampler refined_sampler = - make_combined_displacement_sampler(mesh.its, layers, current); + make_combined_displacement_sampler(mesh.its, layers, current, + uv_refined.empty() ? nullptr : &uv_refined); std::vector cut_source; size_t cuts = 0; indexed_triangle_set cut = cut_mesh_at_steps(mesh.its, cut_region, refined_sampler, @@ -5458,6 +5512,7 @@ TextureDisplacementPrepareResult GLGizmoTextureDisplacement::prepare_mesh( if (!report(100) || !changed) return out; // an empty result: nothing to commit, which is not a failure + out.uv = uv_now(); out.mesh = std::move(mesh.its); out.masks = std::move(current); return out; @@ -6109,6 +6164,8 @@ void GLGizmoTextureDisplacement::queue_prepare(const TextureDisplacementPrepareP input.layers = mv->texture_displacement_layers; input.params = params; input.snapshot_name = snapshot_name; + if (mv->has_texture_uv()) + input.model_uv = mv->texture_uv; if (params.subdiv_color_edge_mm > 0.f) input.color = color_settings_for(*mv); @@ -6981,10 +7038,19 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float m_preview_params_dirty |= float_row("##depth", _L("Depth"), &layer.depth_mm, 0.01f, 10.f, "%.3f mm", true, card_pad, _L("Height of the relief: how far white in the texture lifts the surface, in " "millimetres. Black does not move it at all, unless Midlevel says otherwise.")); + // Mapped by the model's own UV layout there is no millimetre scale to set: the layout is the + // placement (see TextureProjectionMethod::ModelUV), so the slider would move nothing. The row + // states why rather than hiding: float_row()'s tooltip is shown for a disabled slider too. + const bool tile_size_na = layer.projection_method == TextureProjectionMethod::ModelUV; + m_imgui->disabled_begin(tile_size_na); m_preview_params_dirty |= float_row("##tile_size", _L("Tile size"), &layer.tiling_scale, 0.2f, 200.f, "%.2f mm", true, card_pad, - _L("How wide one copy of the texture is on the model. Smaller repeats the pattern " - "more often and makes its detail finer; with Tile off, this is the size of the " - "single copy.")); + tile_size_na ? + _L("Mapped by the model's own UV layout, which is already the placement - one " + "copy of the texture covers it exactly, so there is no tile size to set.") : + _L("How wide one copy of the texture is on the model. Smaller repeats the pattern " + "more often and makes its detail finer; with Tile off, this is the size of the " + "single copy.")); + m_imgui->disabled_end(); m_preview_params_dirty |= float_row("##rotation", _L("Rotation"), &layer.rotation_deg, 0.f, 360.f, "%.0f°", false, card_pad, _L("Turns the texture on the surface, in degrees - for lining a pattern up with an " "edge of the model.")); @@ -7090,7 +7156,7 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float } } - // Mapping, as five icons in TextureProjectionMethod's own order. + // Mapping, as one icon per TextureProjectionMethod, in the enum's own order. { const float x0 = ImGui::GetCursorPosX(); ImGui::AlignTextToFramePadding(); @@ -7118,13 +7184,26 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float { "texture_displacement_map_view.svg", _L("From view"), _L("From view - projects straight onto the painted area from where you are looking, like a slide " "projector.") }, + { "texture_displacement_map_model_uv.svg", _L("Model UV"), + _L("Model UV - uses the texture coordinates the model itself came with, so a texture made for " + "that model lands exactly where it was painted. Nothing is unwrapped, and Tile size does " + "not apply: the model's own layout is the placement.") }, }; + // Only a volume that actually carries a UV channel can be mapped by it. Shown + // greyed out rather than hidden, so the reason is visible instead of the control + // simply being missing. + const wxString model_uv_na = + (mv != nullptr && mv->has_texture_uv()) ? + wxString() : + _L("This model carries no texture coordinates of its own. Only a model imported with a UV " + "channel - a textured OBJ, say - can be mapped by them."); for (int mi = 0; mi < int(IM_ARRAYSIZE(mappings)); ++mi) { if (mi > 0) ImGui::SameLine(0.f, gap_s); const auto method = static_cast(mi); + const wxString na = (method == TextureProjectionMethod::ModelUV) ? model_uv_na : wxString(); if (icon_toggle(830 + mi, mappings[mi].file, layer.projection_method == method, icon_sm, mappings[mi].label, - mappings[mi].tip) && + mappings[mi].tip, na) && layer.projection_method != method) { // Capture the current view the moment "From view" is chosen, so it does something // sensible immediately rather than projecting from a stale/default direction. @@ -7254,18 +7333,33 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float ImGui::SameLine(); ImGui::SetCursorPosX(std::max(ImGui::GetCursorPosX(), x0 + label_w)); const std::string blend_add = _u8L_CONTEXT("Add", "Texture Displacement"); + const std::string blend_override = _u8L_CONTEXT("Override", "Texture Displacement"); const std::string blend_subtract = _u8L_CONTEXT("Subtract", "Texture Displacement"); const std::string blend_multiply = _u8L_CONTEXT("Multiply", "Texture Displacement"); const std::string blend_divide = _u8L("Divide"); - const char *blend_items[] = { blend_add.c_str(), blend_subtract.c_str(), blend_multiply.c_str(), blend_divide.c_str() }; + const char *blend_items[] = { blend_add.c_str(), blend_override.c_str(), blend_subtract.c_str(), + blend_multiply.c_str(), blend_divide.c_str() }; + // The combo's order is the panel's, not the enum's - Override reads as the sibling of Add and + // belongs next to it, while TextureBlendMode's numbering is fixed by what projects already + // store. Hence the explicit mapping rather than a cast of the index. + static const TextureBlendMode blend_modes[] = { TextureBlendMode::Add, TextureBlendMode::Override, + TextureBlendMode::Subtract, TextureBlendMode::Multiply, + TextureBlendMode::Divide }; + static_assert(IM_ARRAYSIZE(blend_items) == IM_ARRAYSIZE(blend_modes), + "every Blend entry needs its mode"); // The first layer has nothing before it to combine with - build_texture_displacement() makes it // add regardless - so its combo shows Add and cannot be changed. const bool base_layer = li == 0; - int blend_mode = base_layer ? 0 : static_cast(layer.blend_mode); + int blend_mode = 0; + if (!base_layer) + for (int bi = 0; bi < int(IM_ARRAYSIZE(blend_modes)); ++bi) + if (blend_modes[bi] == layer.blend_mode) + blend_mode = bi; ImGui::SetNextItemWidth(-(card_pad + gap_s + icon_sm)); m_imgui->disabled_begin(base_layer); - if (scoped_combo("##blend_mode", &blend_mode, blend_items, IM_ARRAYSIZE(blend_items)) && !base_layer) { - layer.blend_mode = static_cast(blend_mode); + if (scoped_combo("##blend_mode", &blend_mode, blend_items, IM_ARRAYSIZE(blend_items)) && !base_layer && + blend_mode >= 0 && blend_mode < int(IM_ARRAYSIZE(blend_modes))) { + layer.blend_mode = blend_modes[blend_mode]; m_preview_params_dirty = true; } m_imgui->disabled_end(); @@ -7273,10 +7367,11 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float m_imgui->tooltip(base_layer ? _u8L("The base layer has nothing beneath it to combine with, so it always adds.") : _u8L("What this layer does where it overlaps the ones below. Add and " - "Subtract pile relief on or carve it away. Multiply and Divide scale " - "what is underneath, which turns this layer into a mask over it - " - "there, Depth acts as a strength, and 1 mm leaves white areas " - "untouched."), + "Subtract pile relief on or carve it away. Override replaces them, " + "so only this layer's relief is left where it is painted. Multiply " + "and Divide scale what is underneath, which turns this layer into a " + "mask over it - there, Depth acts as a strength, and 1 mm leaves " + "white areas untouched."), wrap_w); ImGui::SameLine(0.f, gap_s); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp index 6470743543..232f1c1729 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoTextureDisplacement.hpp @@ -62,6 +62,12 @@ public: static TextureDisplacementPrepareResult prepare_mesh(const indexed_triangle_set &base, const TextureDisplacementFacetsData &masks, const std::vector &layers, + // `base`'s own UV channel, when it has one + // (ModelVolume::texture_uv). Resampled onto + // the result and reported back in it, and fed + // to the samplers so a ModelUV layer drives + // the refinement through its own layout. + const std::vector &model_uv, const TextureDisplacementPrepareParams ¶ms, const TextureColorSettings &color_settings, const DisplacementProgressFn &progress, @@ -921,18 +927,31 @@ private: // Merges chart `b`'s join group into chart `a`'s (materialising `groups` to `chart_count` first). static void join_island_groups(std::vector &groups, int a, int b, int chart_count); // Final per-vertex texture uv for the projections the shader can't reconstruct itself - LSCM (an - // unwrap) and ViewProjected (a projector plane the shader doesn't know). One entry per patch/base - // vertex, already through apply_uv_transform(). Empty for Triplanar/Cylindrical/Spherical, which - // the shader projects on its own. Shared by the shaded preview and the UV-check overlay. + // unwrap), ModelUV (the model's own channel) and ViewProjected (a projector plane the shader + // doesn't know). One entry per patch/base vertex, already through apply_uv_transform(). Empty for + // Triplanar/Cylindrical/Spherical, which the shader projects on its own. Shared by the shaded + // preview and the UV-check overlay. + // + // `patch_source` maps each patch triangle back to its base-mesh triangle + // (TriangleSelector::get_facets_strict()'s out_source). Only ModelUV needs it - its channel is per + // base triangle - and without it a ModelUV layer reports no uvs and the preview falls back. std::vector compute_layer_vertex_uvs(const indexed_triangle_set &patch, - const TextureDisplacementLayer &layer) const; + const TextureDisplacementLayer &layer, + const std::vector *patch_source = nullptr) const; // The same, but three UVs per patch triangle (corner 0..2 of triangle i at 3i..3i+2). This is what // the flat, unshared-vertex preview meshes actually want: under LSCM a seam vertex has a different // UV in each island it borders, so collapsing to one per vertex handed a triangle at an unjoined // seam its neighbour's placement - one visibly skewed triangle per face. Every other projection is // single-valued per point, so there a corner's UV is just its vertex's. std::vector compute_layer_corner_uvs(const indexed_triangle_set &patch, - const TextureDisplacementLayer &layer) const; + const TextureDisplacementLayer &layer, + const std::vector *patch_source = nullptr) const; + // The model's own channel over `local_patch`, already through apply_uv_transform() - three per + // patch triangle. Empty when the volume has no channel, or when `patch_source` is missing. Shared + // by the two functions above so the per-vertex and per-corner forms can never disagree. + std::vector model_uv_corners(const indexed_triangle_set &local_patch, + const TextureDisplacementLayer &layer, + const std::vector *patch_source) const; // The in-shader projection for `layer` (0 Triplanar, 1 Cylindrical, 2 Spherical) plus, for the two // wrapping ones, the patch centroid and cylinder axis they wrap around - in the texture frame the // shaders project in. Taken from the bake's own texture_displacement_patch_frame(), so a preview diff --git a/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.cpp b/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.cpp index 2ea468a76f..72363e4393 100644 --- a/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.cpp +++ b/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.cpp @@ -76,7 +76,8 @@ void TextureDisplacementBakeJob::process(Ctl &ctl) } return true; }, - color, m_input.volume_to_world, nullptr, &m_stats)); + color, m_input.volume_to_world, nullptr, &m_stats, + m_input.model_uv.empty() ? nullptr : &m_input.model_uv)); // Always finish at 100: this is what closes the notification. Reported even on cancel, where // build_texture_displacement() returns an empty mesh and finalize() commits nothing. @@ -223,6 +224,14 @@ void TextureDisplacementBakeJob::finalize(bool canceled, std::exception_ptr &ept volume->texture_displacement_facet(slot).reset(); } + // The model's own UV channel. Resampled onto a rebuilt mesh from the surface the bake started + // from: a displaced vertex came from its foot point on that surface, which is the position its + // uv belongs to - so no distance limit, the relief depth is exactly how far it has moved. + if (!m_input.model_uv.empty()) + volume->texture_uv = topology_changed ? transfer_uv_channel(m_input.base_mesh, m_input.model_uv, + volume->mesh().its) : + m_input.model_uv; + ModelObject *object = volume->get_object(); if (object == nullptr) return; @@ -275,6 +284,8 @@ void queue_texture_displacement_bake(const ModelVolume &volume, const TextureCol input.take_snapshot = take_snapshot; input.volume_id = volume.id(); input.base_mesh = volume.mesh().its; + if (volume.has_texture_uv()) + input.model_uv = volume.texture_uv; input.layers = volume.texture_displacement_layers; input.options = volume.texture_displacement_options; input.volume_to_world = texture_displacement_volume_to_world(volume); diff --git a/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.hpp b/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.hpp index 40d7ab7b2b..5e1a586736 100644 --- a/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.hpp +++ b/src/slic3r/GUI/Jobs/TextureDisplacementBakeJob.hpp @@ -34,6 +34,9 @@ struct TextureDisplacementBakeInput // writes the volume's mmu_segmentation_facets - the same per-triangle filament assignment the MMU // paint gizmo writes - alongside the displaced geometry. TextureColorSettings color; + // The volume's own UV channel (ModelVolume::texture_uv), empty when it has none: what a ModelUV + // layer maps through, and what the commit puts back on the baked mesh. + std::vector model_uv; // Whether this job pushes its own undo step when it commits. False when the caller has already // taken one that is meant to cover the displacement as well - Standard mode's Bake, which remeshes // and subdivides first and has to undo as a single action. diff --git a/src/slic3r/GUI/Jobs/TextureDisplacementDebugJob.cpp b/src/slic3r/GUI/Jobs/TextureDisplacementDebugJob.cpp index 12701ef3c9..eb4eec036f 100644 --- a/src/slic3r/GUI/Jobs/TextureDisplacementDebugJob.cpp +++ b/src/slic3r/GUI/Jobs/TextureDisplacementDebugJob.cpp @@ -17,6 +17,7 @@ #include "slic3r/GUI/Jobs/Worker.hpp" #include #include "libslic3r/ObjectID.hpp" +#include "libslic3r/Point.hpp" #include "libslic3r/TriangleMesh.hpp" namespace Slic3r::GUI { @@ -52,13 +53,14 @@ void TextureDisplacementDebugJob::process(Ctl &ctl) indexed_triangle_set mesh = m_input.base_mesh; TextureDisplacementFacetsData masks = m_input.facets_data; + std::vector uv = m_input.model_uv; // The default pipeline can only move vertices the mesh already has, so its recipe starts with the // preparation - which is where "first it remeshes, then it refines" actually happens. The // experimental pipeline refines as part of the bake and has nothing to prepare. if (m_input.run_prepare && !m_input.options.pipeline_v2) { const TextureDisplacementPrepareResult prepared = - GLGizmoTextureDisplacement::prepare_mesh(mesh, masks, m_input.layers, m_input.prepare_params, + GLGizmoTextureDisplacement::prepare_mesh(mesh, masks, m_input.layers, uv, m_input.prepare_params, m_input.color, // Preparation is roughly half the run; the bake // takes the progress bar from there. @@ -77,12 +79,14 @@ void TextureDisplacementDebugJob::process(Ctl &ctl) if (!prepared.mesh.indices.empty()) { mesh = prepared.mesh; masks = prepared.masks; + uv = prepared.uv; // resampled onto the prepared mesh, as the prepare commit stores it } } build_texture_displacement(mesh, m_input.layers, masks, m_input.options, [&report](int pct) { return report(50 + pct / 2); }, - /* color */ nullptr, m_input.volume_to_world, &recorder); + /* color */ nullptr, m_input.volume_to_world, &recorder, /* stats */ nullptr, + uv.empty() ? nullptr : &uv); m_stages = recorder.take(); ctl.update_status(100, status); // always finish at 100: this is what closes the notification @@ -115,6 +119,8 @@ void queue_texture_displacement_debug(const ModelVolume &volume, const TextureCo input.check_topology = check_topology; input.color = color; input.volume_to_world = texture_displacement_volume_to_world(volume); + if (volume.has_texture_uv()) + input.model_uv = volume.texture_uv; for (int i = 0; i < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++i) input.facets_data[size_t(i)] = volume.texture_displacement_facet(i).get_data(); diff --git a/src/slic3r/GUI/Jobs/TextureDisplacementDebugJob.hpp b/src/slic3r/GUI/Jobs/TextureDisplacementDebugJob.hpp index f4f9f88f4e..981a17773f 100644 --- a/src/slic3r/GUI/Jobs/TextureDisplacementDebugJob.hpp +++ b/src/slic3r/GUI/Jobs/TextureDisplacementDebugJob.hpp @@ -47,6 +47,9 @@ struct TextureDisplacementDebugInput // Only the quantizer is used, and only by the refinement's colour criterion - the debug run // produces no colour of its own. TextureColorSettings color; + // The volume's own UV channel (ModelVolume::texture_uv), so the recipe captured here is the one a + // ModelUV layer actually bakes through. Empty when the volume has none. + std::vector model_uv; // The edge scan behind the open / non-manifold counts is a sort over every half-edge, which on a // multi-million triangle stage costs more than the stage did. On by default because a stage that diff --git a/src/slic3r/GUI/Jobs/TextureDisplacementPrepareJob.cpp b/src/slic3r/GUI/Jobs/TextureDisplacementPrepareJob.cpp index 8a956af98d..6c582d3746 100644 --- a/src/slic3r/GUI/Jobs/TextureDisplacementPrepareJob.cpp +++ b/src/slic3r/GUI/Jobs/TextureDisplacementPrepareJob.cpp @@ -46,7 +46,7 @@ void TextureDisplacementPrepareJob::process(Ctl &ctl) // idle loop. int last_reported = 1; m_result = GLGizmoTextureDisplacement::prepare_mesh(m_input.base_mesh, m_input.masks, m_input.layers, - m_input.params, m_input.color, + m_input.model_uv, m_input.params, m_input.color, [&ctl, &status, &last_reported](int percent) { if (ctl.was_canceled()) return false; @@ -106,6 +106,10 @@ void TextureDisplacementPrepareJob::finalize(bool canceled, std::exception_ptr & volume->restore_painting(saved_painting); for (int i = 0; i < int(TEXTURE_DISPLACEMENT_MAX_LAYERS); ++i) volume->texture_displacement_facet(i).set_data(std::move(m_result.masks[size_t(i)])); + // The model's own UV channel, resampled onto the new mesh by the run. Also put back after + // restore_painting(), which resets it along with the extra facets for the same reason: it is + // indexed by triangle and the triangles have changed. + volume->texture_uv = std::move(m_result.uv); if (ObjectList *obj_list = wxGetApp().obj_list()) { const ModelObjectPtrs &objs = plater->model().objects; diff --git a/src/slic3r/GUI/Jobs/TextureDisplacementPrepareJob.hpp b/src/slic3r/GUI/Jobs/TextureDisplacementPrepareJob.hpp index 5fc173975f..a07bf63ae9 100644 --- a/src/slic3r/GUI/Jobs/TextureDisplacementPrepareJob.hpp +++ b/src/slic3r/GUI/Jobs/TextureDisplacementPrepareJob.hpp @@ -9,6 +9,7 @@ #include "Job.hpp" #include "libslic3r/ObjectID.hpp" +#include "libslic3r/Point.hpp" #include "libslic3r/TextureDisplacement.hpp" namespace Slic3r { @@ -47,6 +48,10 @@ struct TextureDisplacementPrepareInput // skips the colour criterion entirely. Only the *quantizer* is used here: refinement follows // perceived colour, never the interleaving that realises a mix. TextureColorSettings color; + // The volume's own UV channel (ModelVolume::texture_uv), empty when it has none. prepare_mesh() + // resamples it onto the mesh it produces, and the commit puts it back - like the masks, it is + // indexed by triangle and so cannot survive the stages on its own. + std::vector model_uv; // The undo step the commit opens. Standard mode's Bake names it after the bake, because the // displacement job that follows commits into this same step rather than pushing its own. std::string snapshot_name; diff --git a/src/slic3r/GUI/Jobs/TextureDisplacementPreviewJob.cpp b/src/slic3r/GUI/Jobs/TextureDisplacementPreviewJob.cpp index 4243cdd9d3..32b88aa951 100644 --- a/src/slic3r/GUI/Jobs/TextureDisplacementPreviewJob.cpp +++ b/src/slic3r/GUI/Jobs/TextureDisplacementPreviewJob.cpp @@ -48,7 +48,8 @@ void TextureDisplacementPreviewJob::process(Ctl &ctl) (!m_current_generation || m_current_generation->load() == m_generation); }, - color, m_input.volume_to_world); + color, m_input.volume_to_world, nullptr, nullptr, + m_input.model_uv.empty() ? nullptr : &m_input.model_uv); } void TextureDisplacementPreviewJob::finalize(bool canceled, std::exception_ptr &eptr) diff --git a/src/slic3r/GUI/Jobs/TextureDisplacementPreviewJob.hpp b/src/slic3r/GUI/Jobs/TextureDisplacementPreviewJob.hpp index 07fcca8664..7f7941e828 100644 --- a/src/slic3r/GUI/Jobs/TextureDisplacementPreviewJob.hpp +++ b/src/slic3r/GUI/Jobs/TextureDisplacementPreviewJob.hpp @@ -29,6 +29,9 @@ struct TextureDisplacementPreviewInput // Empty unless a layer is colouring, in which case the preview reports the palette entry per // triangle alongside the mesh, so the Normal view shows the colours the bake will produce. TextureColorSettings color; + // The volume's own UV channel (ModelVolume::texture_uv), so a ModelUV layer previews through the + // same layout it will bake through. Empty when the volume has none. + std::vector model_uv; }; // A preview result: the displaced mesh, and - when the input carried a palette - one palette entry per diff --git a/tests/libslic3r/test_texture_displacement.cpp b/tests/libslic3r/test_texture_displacement.cpp index 2e4210189d..4c3e74d705 100644 --- a/tests/libslic3r/test_texture_displacement.cpp +++ b/tests/libslic3r/test_texture_displacement.cpp @@ -3103,3 +3103,353 @@ TEST_CASE("whether a layer's texture has colour agrees with its decode", "[Textu CHECK_FALSE(height_texture_has_color(TextureDisplacementLayer{})); } + +// --------------------------------------------------------------------------------------------- +// The model's own UV channel, and the Override blend mode +// --------------------------------------------------------------------------------------------- + +// A grayscale image that is black in its left half and white in its right half, so where a sample +// lands along u is readable straight off the height it comes back with. +static std::shared_ptr> make_left_right_split_png(size_t w = 16, size_t h = 16) +{ + std::vector pixels(w * h); + for (size_t y = 0; y < h; ++y) + for (size_t x = 0; x < w; ++x) + pixels[y * w + x] = (x < w / 2) ? 0 : 255; + const boost::filesystem::path tmp_path = boost::filesystem::temp_directory_path() + / boost::filesystem::unique_path("texdisp_test_%%%%%%%%.png"); + REQUIRE(Slic3r::png::write_gray_to_file(tmp_path.string(), w, h, pixels)); + + std::vector bytes; + { + std::ifstream ifs(tmp_path.string(), std::ios::binary); + bytes.assign(std::istreambuf_iterator(ifs), std::istreambuf_iterator()); + } + boost::system::error_code ec; + boost::filesystem::remove(tmp_path, ec); + + REQUIRE_FALSE(bytes.empty()); + return std::make_shared>(std::move(bytes)); +} + +// Where a sheet coordinate lands in uv: across [UV_LO, UV_LO + UV_SPAN] rather than the full [0, 1]. +// The inset keeps the tests off the exact edge of an untiled placement, where there is deliberately no +// texture at all rather than its border texel (see DecodedHeightTexture::sample()) - a real model's +// channel does reach 1.0, and a vertex sitting exactly there displaces by nothing on purpose. +static constexpr float UV_LO = 0.1f; +static constexpr float UV_SPAN = 0.8f; + +static float sheet_uv_at(float coord, float size, bool mirror = false) +{ + const float t = coord / size; + return UV_LO + UV_SPAN * (mirror ? 1.f - t : t); +} + +// One UV per triangle corner: u follows x, v follows y. `mirror_u` mirrors u, which is what the tests +// use to show the bake is really reading the channel rather than projecting the position. +static std::vector sheet_uv_channel(const indexed_triangle_set &sheet, float size, bool mirror_u = false) +{ + std::vector uv(sheet.indices.size() * 3); + for (size_t f = 0; f < sheet.indices.size(); ++f) + for (int k = 0; k < 3; ++k) { + const Vec3f &p = sheet.vertices[size_t(sheet.indices[f][k])]; + uv[f * 3 + size_t(k)] = Vec2f(sheet_uv_at(p.x(), size, mirror_u), sheet_uv_at(p.y(), size)); + } + return uv; +} + +TEST_CASE("Override blend replaces the displacement under it instead of combining with it", + "[TextureDisplacement]") +{ + CHECK_THAT(blend_displacement(3.f, 1.f, TextureBlendMode::Override), WithinAbs(1.f, 1e-6f)); + // Nothing underneath yet is still just the value, so an Override layer at the bottom of the + // stack behaves exactly like the Add the bake forces there. + CHECK_THAT(blend_displacement(0.f, 1.f, TextureBlendMode::Override), WithinAbs(1.f, 1e-6f)); + // The sign carries, and a zero sample really does flatten what is under it - that is the point. + CHECK_THAT(blend_displacement(3.f, -1.f, TextureBlendMode::Override), WithinAbs(-1.f, 1e-6f)); + CHECK_THAT(blend_displacement(3.f, 0.f, TextureBlendMode::Override), WithinAbs(0.f, 1e-6f)); +} + +TEST_CASE("an Override layer leaves only its own relief where two layers overlap", "[TextureDisplacement]") +{ + const indexed_triangle_set cube = its_make_cube(10., 10., 10.); + + TextureDisplacementLayer base; + base.slot = 0; + base.depth_mm = 2.0f; + base.tiling_scale = 5.0f; + base.image_data = make_flat_gray_png(255); // full depth everywhere + + TextureDisplacementLayer second = base; + second.slot = 1; + second.depth_mm = 0.5f; + second.blend_mode = TextureBlendMode::Override; + + TextureDisplacementFacetsData facets{}; + facets[0] = paint_whole_mesh(cube); + facets[1] = facets[0]; + + const indexed_triangle_set overridden = build_texture_displacement(cube, {base, second}, facets, classic_options()); + REQUIRE(overridden.vertices.size() == cube.vertices.size()); + + // Add would have piled the two up to 2.5 mm; Override keeps the upper layer's 0.5 mm alone. + TextureDisplacementLayer added = second; + added.blend_mode = TextureBlendMode::Add; + const indexed_triangle_set summed = build_texture_displacement(cube, {base, added}, facets, classic_options()); + REQUIRE(summed.vertices.size() == cube.vertices.size()); + + for (size_t i = 0; i < cube.vertices.size(); ++i) { + if (!above_resting_plane(cube, i)) + continue; + CHECK_THAT((overridden.vertices[i] - cube.vertices[i]).norm(), WithinAbs(0.5f, 1e-3f)); + CHECK_THAT((summed.vertices[i] - cube.vertices[i]).norm(), WithinAbs(2.5f, 1e-3f)); + } +} + +TEST_CASE("the ModelUV mapping displaces through the model's own UV channel", "[TextureDisplacement]") +{ + constexpr float size = 10.f; + const indexed_triangle_set sheet = make_flat_sheet(size, 1.f); + + TextureDisplacementLayer layer; + layer.slot = 0; + layer.depth_mm = 1.0f; + layer.image_data = make_left_right_split_png(); + layer.tile_enabled = false; // the layout is the placement; nothing should repeat + layer.projection_method = TextureProjectionMethod::ModelUV; + + TextureDisplacementFacetsData facets{}; + facets[0] = paint_whole_mesh(sheet); + + const std::vector uv = sheet_uv_channel(sheet, size); + const std::vector flipped = sheet_uv_channel(sheet, size, /* mirror_u */ true); + + const indexed_triangle_set out = build_texture_displacement(sheet, {layer}, facets, classic_options(), {}, nullptr, + Transform3d::Identity(), nullptr, nullptr, &uv); + REQUIRE(out.vertices.size() == sheet.vertices.size()); + + // The image is black for u < 0.5 and white above it, and the channel's u rises with x across the + // sheet, so it comes out flat on its left half and raised by the full depth on its right. + size_t low = 0, high = 0; + for (size_t i = 0; i < sheet.vertices.size(); ++i) { + const float x = sheet.vertices[i].x(); + const float dz = out.vertices[i].z() - sheet.vertices[i].z(); + if (x < 0.4f * size) { + CHECK_THAT(dz, WithinAbs(0.f, 1e-3f)); + ++low; + } else if (x > 0.6f * size) { + CHECK_THAT(dz, WithinAbs(layer.depth_mm, 1e-3f)); + ++high; + } + } + REQUIRE(low > 0); + REQUIRE(high > 0); + + // Mirroring the channel mirrors the relief: the mapping really is the channel's, not a planar + // projection of the position (which would be unchanged by it). + const indexed_triangle_set mirrored = build_texture_displacement(sheet, {layer}, facets, classic_options(), {}, + nullptr, Transform3d::Identity(), nullptr, nullptr, + &flipped); + REQUIRE(mirrored.vertices.size() == sheet.vertices.size()); + for (size_t i = 0; i < sheet.vertices.size(); ++i) { + const float x = sheet.vertices[i].x(); + if (x < 0.4f * size) + CHECK_THAT(mirrored.vertices[i].z() - sheet.vertices[i].z(), WithinAbs(layer.depth_mm, 1e-3f)); + else if (x > 0.6f * size) + CHECK_THAT(mirrored.vertices[i].z() - sheet.vertices[i].z(), WithinAbs(0.f, 1e-3f)); + } +} + +TEST_CASE("a ModelUV layer falls back to Triplanar when the volume carries no UV channel", + "[TextureDisplacement]") +{ + constexpr float size = 10.f; + const indexed_triangle_set sheet = make_flat_sheet(size, 2.f); + + TextureDisplacementLayer layer; + layer.slot = 0; + layer.depth_mm = 1.0f; + layer.tiling_scale = 5.0f; + layer.image_data = make_flat_gray_png(255); + + TextureDisplacementFacetsData facets{}; + facets[0] = paint_whole_mesh(sheet); + + layer.projection_method = TextureProjectionMethod::Triplanar; + const indexed_triangle_set as_triplanar = build_texture_displacement(sheet, {layer}, facets, classic_options()); + layer.projection_method = TextureProjectionMethod::ModelUV; + const indexed_triangle_set no_channel = build_texture_displacement(sheet, {layer}, facets, classic_options()); + + REQUIRE(no_channel.vertices.size() == as_triplanar.vertices.size()); + for (size_t i = 0; i < as_triplanar.vertices.size(); ++i) + CHECK_THAT((no_channel.vertices[i] - as_triplanar.vertices[i]).norm(), WithinAbs(0.f, 1e-5f)); +} + +TEST_CASE("a bake with colour off on every layer reports no colour at all", "[TextureDisplacement]") +{ + const indexed_triangle_set cube = its_make_cube(10., 10., 10.); + + TextureDisplacementLayer layer; + layer.slot = 0; + layer.depth_mm = 1.0f; + layer.tiling_scale = 5.0f; + layer.image_data = make_flat_rgb_png(200, 40, 10); // has colour to give... + layer.color_enabled = false; // ...but is not asked for it + + TextureDisplacementFacetsData facets{}; + facets[0] = paint_whole_mesh(cube); + + std::vector triangle_color; + TextureColorRequest request; + request.quantize = [](const Vec3f &) { return 0; }; // would colour everything, if asked + request.out_triangle = &triangle_color; + + const indexed_triangle_set out = build_texture_displacement(cube, {layer}, facets, classic_options(), {}, &request); + REQUIRE_FALSE(out.vertices.empty()); + // Every entry 0 ("this triangle takes no colour from the texture"), so the commit leaves whatever + // the model was already painted with exactly as it was. + for (const uint8_t entry : triangle_color) + CHECK(entry == 0); +} + +TEST_CASE("transfer_uv_channel resamples a UV channel onto a subdivided copy of the same surface", + "[TextureDisplacement]") +{ + constexpr float size = 10.f; + const indexed_triangle_set coarse = make_flat_sheet(size, 5.f); + const indexed_triangle_set fine = make_flat_sheet(size, 1.f); + const std::vector uv = sheet_uv_channel(coarse, size); + + const std::vector moved = transfer_uv_channel(coarse, uv, fine); + REQUIRE(moved.size() == fine.indices.size() * 3); + + // The channel is affine in position here (u = x/size, v = y/size), so a correct transfer + // reproduces it exactly at every corner of the finer mesh. + for (size_t f = 0; f < fine.indices.size(); ++f) + for (int k = 0; k < 3; ++k) { + const Vec3f &p = fine.vertices[size_t(fine.indices[f][k])]; + CHECK_THAT(moved[f * 3 + size_t(k)].x(), WithinAbs(sheet_uv_at(p.x(), size), 1e-4f)); + CHECK_THAT(moved[f * 3 + size_t(k)].y(), WithinAbs(sheet_uv_at(p.y(), size), 1e-4f)); + } + + // A mismatched channel is refused rather than read past its end. + CHECK(transfer_uv_channel(coarse, {Vec2f::Zero()}, fine).empty()); + CHECK(transfer_uv_channel(coarse, uv, indexed_triangle_set{}).empty()); +} + +TEST_CASE("the model's per-corner UVs survive a brush split and collapse to one per vertex", + "[TextureDisplacement]") +{ + constexpr float size = 10.f; + const indexed_triangle_set sheet = make_flat_sheet(size, 5.f); + const std::vector uv = sheet_uv_channel(sheet, size); + + // The whole sheet as a patch, with the source map the channel is read through. + const TriangleMesh tm(sheet); + TriangleSelector selector(tm); + for (int f = 0; f < int(sheet.indices.size()); ++f) + selector.set_facet(f, EnforcerBlockerType::ENFORCER); + std::vector source; + const indexed_triangle_set patch = selector.get_facets_strict(EnforcerBlockerType::ENFORCER, &source); + REQUIRE(patch.indices.size() == source.size()); + + const std::vector corner = compute_model_corner_uvs(sheet, uv, patch, source); + REQUIRE(corner.size() == patch.indices.size() * 3); + // An unsplit patch triangle *is* its source triangle, so its corners reproduce the channel. + for (size_t f = 0; f < patch.indices.size(); ++f) + for (int k = 0; k < 3; ++k) { + const Vec3f &p = patch.vertices[size_t(patch.indices[f][k])]; + CHECK_THAT(corner[f * 3 + size_t(k)].x(), WithinAbs(sheet_uv_at(p.x(), size), 1e-4f)); + CHECK_THAT(corner[f * 3 + size_t(k)].y(), WithinAbs(sheet_uv_at(p.y(), size), 1e-4f)); + } + + const std::vector per_vertex = collapse_corner_uvs(patch, corner); + REQUIRE(per_vertex.size() == patch.vertices.size()); + for (size_t i = 0; i < patch.vertices.size(); ++i) { + CHECK_THAT(per_vertex[i].x(), WithinAbs(sheet_uv_at(patch.vertices[i].x(), size), 1e-4f)); + CHECK_THAT(per_vertex[i].y(), WithinAbs(sheet_uv_at(patch.vertices[i].y(), size), 1e-4f)); + } + + // Mismatched inputs report nothing rather than guessing. + CHECK(compute_model_corner_uvs(sheet, {Vec2f::Zero()}, patch, source).empty()); + CHECK(compute_model_corner_uvs(sheet, uv, patch, {}).empty()); + CHECK(collapse_corner_uvs(patch, {Vec2f::Zero()}).empty()); +} + +TEST_CASE("facet paint is carried onto a rebuilt mesh by each facet's foot point", "[TextureDisplacement]") +{ + constexpr float size = 10.f; + const indexed_triangle_set coarse = make_flat_sheet(size, 2.5f); + + // Two filaments, split down the middle - the pattern the transfer has to reproduce. + const TriangleMesh coarse_mesh(coarse); + TriangleSelector painter(coarse_mesh); + for (size_t t = 0; t < coarse.indices.size(); ++t) { + const stl_triangle_vertex_indices &tri = coarse.indices[t]; + const float x = (coarse.vertices[size_t(tri[0])].x() + coarse.vertices[size_t(tri[1])].x() + + coarse.vertices[size_t(tri[2])].x()) / 3.f; + painter.set_facet(int(t), x < 0.5f * size ? EnforcerBlockerType::Extruder1 : EnforcerBlockerType::Extruder2); + } + const TriangleSelector::TriangleSplittingData paint = painter.serialize(); + + // A finer mesh, lifted clear of the original surface the way a bake's relief lifts it. This is + // what ModelVolume::restore_painting()'s 0.01 mm overlap remap cannot follow. + indexed_triangle_set lifted = make_flat_sheet(size, 1.f); + for (Vec3f &v : lifted.vertices) + v.z() += 0.5f; + + const std::vector state = transfer_facet_paint(coarse, paint, lifted); + REQUIRE(state.size() == lifted.indices.size()); + + size_t left = 0, right = 0; + for (size_t t = 0; t < lifted.indices.size(); ++t) { + const stl_triangle_vertex_indices &tri = lifted.indices[t]; + const float x = (lifted.vertices[size_t(tri[0])].x() + lifted.vertices[size_t(tri[1])].x() + + lifted.vertices[size_t(tri[2])].x()) / 3.f; + // Only away from the split: a facet straddling it may legitimately land on either side. + if (x < 0.4f * size) { + CHECK(state[t] == uint8_t(EnforcerBlockerType::Extruder1)); + ++left; + } else if (x > 0.6f * size) { + CHECK(state[t] == uint8_t(EnforcerBlockerType::Extruder2)); + ++right; + } + } + REQUIRE(left > 0); + REQUIRE(right > 0); + + // An unpainted source has nothing to carry, which is not the same as carrying NONE everywhere: + // the caller has to tell those apart to decide between resetting the annotation and writing one. + CHECK(transfer_facet_paint(coarse, TriangleSelector::TriangleSplittingData{}, lifted).empty()); + CHECK(transfer_facet_paint(coarse, paint, indexed_triangle_set{}).empty()); +} + +TEST_CASE("an unpainted part of the source carries no paint onto the rebuilt mesh", "[TextureDisplacement]") +{ + constexpr float size = 10.f; + const indexed_triangle_set coarse = make_flat_sheet(size, 2.5f); + + // Only the left half is painted at all; the right half must come back NONE rather than borrowing + // the nearest painted colour from across the model. + const TriangleMesh coarse_mesh(coarse); + TriangleSelector painter(coarse_mesh); + for (size_t t = 0; t < coarse.indices.size(); ++t) { + const stl_triangle_vertex_indices &tri = coarse.indices[t]; + const float x = (coarse.vertices[size_t(tri[0])].x() + coarse.vertices[size_t(tri[1])].x() + + coarse.vertices[size_t(tri[2])].x()) / 3.f; + if (x < 0.5f * size) + painter.set_facet(int(t), EnforcerBlockerType::Extruder3); + } + + const std::vector state = transfer_facet_paint(coarse, painter.serialize(), coarse); + REQUIRE(state.size() == coarse.indices.size()); + for (size_t t = 0; t < coarse.indices.size(); ++t) { + const stl_triangle_vertex_indices &tri = coarse.indices[t]; + const float x = (coarse.vertices[size_t(tri[0])].x() + coarse.vertices[size_t(tri[1])].x() + + coarse.vertices[size_t(tri[2])].x()) / 3.f; + if (x < 0.4f * size) + CHECK(state[t] == uint8_t(EnforcerBlockerType::Extruder3)); + else if (x > 0.6f * size) + CHECK(state[t] == uint8_t(EnforcerBlockerType::NONE)); + } +} From d2ba88c93d07c8f7b03ce11f036a0856dc6071f2 Mon Sep 17 00:00:00 2001 From: ExPikaPaka Date: Tue, 13 Oct 2026 13:53:06 +0200 Subject: [PATCH 042/137] Texture displacement: animations that play on their own, and art for the rest of the panel The animations advanced one frame per mouse movement and stood still whenever the mouse did. schedule_extra_frame() only guarantees an idle event at the moment the next frame is due; GLCanvas3D::on_idle() returns without rendering anything unless something marked the canvas dirty by then, and nothing had. set_dirty() on the gizmo is what on_idle reads, through GLGizmoBase::update_items_state(), to find out there are frames still to draw. Thirty-odd more pictures, covering the paint tools, brush size, the connected-area fill, the five views, the five projections, subdivision, feature-adaptive refinement, remeshing, hard edges, slivers, geometry smoothing, filament mixing and denoise. The generator grew three more drawing languages beside the shaded relief, each picked by what the setting is rather than by taste: a flat mesh of triangles where the subject is the mesh or a tool, a section where the subject is where the surface sits relative to where it was, and a flat ramp of greys where the subject is which filament a spot ends up as. Lighting a colour illustration or looking down on a vertical change would both add a second thing moving between two pictures meant to differ in one. Mapping is one ball with the checker laid on it five ways, which is the whole of what choosing a projection does - except Unwrap, which is not a projection onto the model and so is drawn as the flat layout it produces. --- docs/HLSD/tooltip-illustrations.md | 48 +- .../texture_displacement/adaptive_off.png | Bin 0 -> 10047 bytes .../texture_displacement/adaptive_on.png | Bin 0 -> 15010 bytes .../collapse_slivers_off.png | Bin 0 -> 43004 bytes .../collapse_slivers_on.png | Bin 0 -> 38821 bytes .../texture_displacement/cursor_size.gif | Bin 0 -> 126232 bytes .../texture_displacement/denoise_off.png | Bin 0 -> 25668 bytes .../texture_displacement/denoise_on.png | Bin 0 -> 6620 bytes .../images/texture_displacement/depth.gif | Bin 115036 -> 109627 bytes .../images/texture_displacement/erase.gif | Bin 0 -> 120170 bytes .../images/texture_displacement/erase_all.png | Bin 0 -> 57246 bytes .../geometry_smoothing.gif | Bin 0 -> 30585 bytes .../images/texture_displacement/map_cube.png | Bin 0 -> 22967 bytes .../texture_displacement/map_cylinder.png | Bin 0 -> 20228 bytes .../texture_displacement/map_sphere.png | Bin 0 -> 19792 bytes .../texture_displacement/map_unwrap.png | Bin 0 -> 18543 bytes .../images/texture_displacement/map_view.png | Bin 0 -> 19238 bytes .../images/texture_displacement/midlevel.gif | Bin 24197 -> 25938 bytes .../images/texture_displacement/mix_off.png | Bin 0 -> 2064 bytes .../images/texture_displacement/mix_on.png | Bin 0 -> 5507 bytes .../texture_displacement/mixed_colors_few.png | Bin 0 -> 4639 bytes .../mixed_colors_many.png | Bin 0 -> 7539 bytes .../images/texture_displacement/paint.gif | Bin 0 -> 113431 bytes .../texture_displacement/painted_only_off.png | Bin 0 -> 19078 bytes .../texture_displacement/painted_only_on.png | Bin 0 -> 14085 bytes .../preserve_edges_off.png | Bin 0 -> 30549 bytes .../preserve_edges_on.png | Bin 0 -> 34692 bytes .../texture_displacement/remesh_after.png | Bin 0 -> 41750 bytes .../texture_displacement/remesh_before.png | Bin 0 -> 46266 bytes .../images/texture_displacement/rotation.gif | Bin 136982 -> 122695 bytes .../texture_displacement/select_all.png | Bin 0 -> 56272 bytes .../smart_fill_angle_high.png | Bin 0 -> 56374 bytes .../smart_fill_angle_low.png | Bin 0 -> 57361 bytes .../images/texture_displacement/subdivide.gif | Bin 0 -> 29155 bytes .../images/texture_displacement/tool_face.gif | Bin 0 -> 53075 bytes .../texture_displacement/tool_smart_fill.gif | Bin 0 -> 122593 bytes .../texture_displacement/view_checker.png | Bin 0 -> 15294 bytes .../texture_displacement/view_distortion.png | Bin 0 -> 17512 bytes .../images/texture_displacement/view_fast.png | Bin 0 -> 6695 bytes .../texture_displacement/view_wireframe.png | Bin 0 -> 114135 bytes scripts/gen_texture_displacement_tips.py | 504 +++++++++++++++++- .../GUI/Gizmos/GLGizmoTextureDisplacement.cpp | 120 +++-- 42 files changed, 615 insertions(+), 57 deletions(-) create mode 100644 resources/images/texture_displacement/adaptive_off.png create mode 100644 resources/images/texture_displacement/adaptive_on.png create mode 100644 resources/images/texture_displacement/collapse_slivers_off.png create mode 100644 resources/images/texture_displacement/collapse_slivers_on.png create mode 100644 resources/images/texture_displacement/cursor_size.gif create mode 100644 resources/images/texture_displacement/denoise_off.png create mode 100644 resources/images/texture_displacement/denoise_on.png create mode 100644 resources/images/texture_displacement/erase.gif create mode 100644 resources/images/texture_displacement/erase_all.png create mode 100644 resources/images/texture_displacement/geometry_smoothing.gif create mode 100644 resources/images/texture_displacement/map_cube.png create mode 100644 resources/images/texture_displacement/map_cylinder.png create mode 100644 resources/images/texture_displacement/map_sphere.png create mode 100644 resources/images/texture_displacement/map_unwrap.png create mode 100644 resources/images/texture_displacement/map_view.png create mode 100644 resources/images/texture_displacement/mix_off.png create mode 100644 resources/images/texture_displacement/mix_on.png create mode 100644 resources/images/texture_displacement/mixed_colors_few.png create mode 100644 resources/images/texture_displacement/mixed_colors_many.png create mode 100644 resources/images/texture_displacement/paint.gif create mode 100644 resources/images/texture_displacement/painted_only_off.png create mode 100644 resources/images/texture_displacement/painted_only_on.png create mode 100644 resources/images/texture_displacement/preserve_edges_off.png create mode 100644 resources/images/texture_displacement/preserve_edges_on.png create mode 100644 resources/images/texture_displacement/remesh_after.png create mode 100644 resources/images/texture_displacement/remesh_before.png create mode 100644 resources/images/texture_displacement/select_all.png create mode 100644 resources/images/texture_displacement/smart_fill_angle_high.png create mode 100644 resources/images/texture_displacement/smart_fill_angle_low.png create mode 100644 resources/images/texture_displacement/subdivide.gif create mode 100644 resources/images/texture_displacement/tool_face.gif create mode 100644 resources/images/texture_displacement/tool_smart_fill.gif create mode 100644 resources/images/texture_displacement/view_checker.png create mode 100644 resources/images/texture_displacement/view_distortion.png create mode 100644 resources/images/texture_displacement/view_fast.png create mode 100644 resources/images/texture_displacement/view_wireframe.png diff --git a/docs/HLSD/tooltip-illustrations.md b/docs/HLSD/tooltip-illustrations.md index 1d028398c3..69f7cc717a 100644 --- a/docs/HLSD/tooltip-illustrations.md +++ b/docs/HLSD/tooltip-illustrations.md @@ -55,25 +55,45 @@ so an animation authored against that plays at the speed it was authored at. The animation restarts when its tooltip opens, rather than running off a free-running clock: these are short loops of one setting going from one value to another, and joining one halfway through shows the -end of a change the user never saw the start of. The canvas only redraws on demand, so each frame asks -for the next through `GLCanvas3D::schedule_extra_frame()`, timed to when that frame is actually due. +end of a change the user never saw the start of. + +Driving the frames takes two calls, not one. `GLCanvas3D::schedule_extra_frame()` only guarantees an +idle event at the moment the next frame is due; `GLCanvas3D::on_idle()` returns without rendering +anything unless something has marked the canvas dirty by then, so an animation left to the timer alone +advances one frame per mouse movement and stands still whenever the mouse does. `set_dirty()` on the +gizmo is what on_idle reads, through `GLGizmoBase::update_items_state()`, to find out there are frames +still to draw. The pair of them is what makes an animation play at its own speed and stop costing +anything the moment its tooltip closes. ## Making one -Captures of the real tool are the first choice for anything involving the model, the mesh or colour. -Settings whose meaning is a shape are drawn from the same arithmetic instead, by -`scripts/gen_texture_displacement_tips.py`: it shades a height field as a relief catching the light, -and covers Depth, Tile, Tile size, Rotation, Repeat/Mirror, Midlevel, Smoothing, Edge fade, Invert and -Blend that way. +`scripts/gen_texture_displacement_tips.py` draws the lot, in four languages, picked by what the +setting actually is: -One motif - a ring inside a square frame - runs through nearly all of them, because using one shape -everywhere is what lets two pictures be compared: whatever differs between them is the setting, since -nothing else is. +- **A shaded relief**, for the settings that are about a pattern: Depth, Tile, Tile size, Rotation, + Repeat/Mirror, Smoothing, Edge fade, Invert, Blend and the Normal, Fast, Checker and Distortion + views. One motif - a ring inside a square frame - runs through all of them, because using one shape + everywhere is what lets two pictures be compared: whatever differs between them is the setting, + since nothing else is. +- **A flat mesh of triangles**, for the settings that are about the mesh or about a tool: the paint + tools, brush size, the connected-area fill, subdivision, feature-adaptive refinement, remeshing, + hard edges, slivers and the wireframe view. These carry the one accent colour in the set, meaning + "painted", because that is the only thing in such a picture that is not geometry. +- **A section**, for Midlevel and for smoothing the geometry. The reason generalises: shading reads + slopes, so a height field moved up or down as a whole shades identically to where it started, and + any setting whose meaning is *where the surface sits relative to where it was* is invisible from + above and has to be drawn from the side. +- **A flat ramp of greys**, for Mix filaments, Mixed colors and Denoise. Those are about which + filament a spot ends up as; lighting one would only add a second thing changing between two + pictures meant to differ in one. -Midlevel is drawn in section rather than as a relief, and the reason generalises. Shading reads -slopes, so a height field moved up or down as a whole shades identically to where it started; any -setting whose meaning is *where the relief sits relative to the surface* is invisible in a top view -and has to be drawn from the side, against the bare surface as a reference. +The five Mapping pictures are one ball with a checker laid on it five ways, which is the whole of what +choosing a projection does - except Unwrap, which is not a projection onto the model at all and so is +drawn as the flat layout it produces. + +Captures of the real tool are still the first choice for anything involving a real model or real +filament colour: Bake, the mixed-colour count on a photograph, Adjust placement, the frame window and +the UV editor's seam tool have no picture yet for that reason. Either way: diff --git a/resources/images/texture_displacement/adaptive_off.png b/resources/images/texture_displacement/adaptive_off.png new file mode 100644 index 0000000000000000000000000000000000000000..c509ee5871172c0e6253032b128376eeadbece44 GIT binary patch literal 10047 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 W8BX8>)xgF$5-s%yYE>%FLjMmOMUyK4 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/adaptive_on.png b/resources/images/texture_displacement/adaptive_on.png new file mode 100644 index 0000000000000000000000000000000000000000..43f2667457f150b0c110f70feae55c5fbf2ebdff GIT binary patch literal 15010 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≫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

yF#fju=OW3$F7HEl^Qp(%#29u_!#lo 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 literal 115036 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 diff --git a/resources/images/texture_displacement/erase.gif b/resources/images/texture_displacement/erase.gif new file mode 100644 index 0000000000000000000000000000000000000000..ef4a82e7b18ed19cab5b5279586fbc79c690a3f5 GIT binary patch literal 120170 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%0AIzFT6a$QBSD55?W1i1+V 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

-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

$-ppD|u%5#bX2@bmjw&_@a46RwXmmY; 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 OUdK&Nk)9FHM*SD=`!quU literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/geometry_smoothing.gif b/resources/images/texture_displacement/geometry_smoothing.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad55fbc09bc26f4b7c40930f74209e5d9ba37cc9 GIT binary patch literal 30585 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 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/map_cylinder.png b/resources/images/texture_displacement/map_cylinder.png new file mode 100644 index 0000000000000000000000000000000000000000..f9c2986fb2f19862fcae1202eb8d11e42b002848 GIT binary patch literal 20228 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∾YtEZ(pb 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 JPDHLkV1fcO1*iZ3 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/map_sphere.png b/resources/images/texture_displacement/map_sphere.png new file mode 100644 index 0000000000000000000000000000000000000000..0a8dcbbc05c1ba15132d6c283b7efa8dd22f4920 GIT binary patch literal 19792 zcmX7PbyQT}_x7EkOFBMucS}nQ-2&2Gf`p`W%>dFU9fH!`-7tidpmZoHUD6#hFW=vL z|G9UawNBi#_j&ey_TDE(`?WG2HYGLy0C=h@3U2@a^!y0|Fu~8S83Gvr0MH~?Rgl&5 z`|~e&KZ9C7eXX0X@q0e7(Dcv@*hZ=%9jrlW zxVZm%PcvmZ;02Il{uKuF$l*(wBZr|N07>DQ|5t!GQ;P(U=M|E)2VbaytfE8z3dk49 zV8a;5DQRc2?`Bb~959}{%s*WL6gF0V8gBcw7yyv@zj0Ef-oLr0dft=BE4cw%PFe-M z+O;URnN!$*7Pz94Lz|0_E7dnrm-LLl`WRo=x-0yo4?}%UK_L;z4iAk!?nZ_%GBT=P z9;|lXjsBRcL?Yh7DSC=GJ?I&IB)+{aUE253XchBl^^%}@{yz@w`^Ee2ljj~G@BaPS z=$2dT3`}TS@|~|?DMM`AAg3=TUhVVoVjTyszuJ1?9J80!9k_zWb<)l@*1$c6I9x+K zo&MC)rO$4+o&B~rb&$>g1c=ij5hs)i3PI~hQG|q`e7~sELG#Z32bt5;f%YHxTe;WA ztDAAqkSwU>MK8+MUl=#xlynrTX;7#0+`+j0@4Y=Jk`KxM=nx4|)NcBQoJt9`FK)^o z(sIb7U;@#nkH5_SF6Ba@?kh|Y-!p8Ek%86=u2%ggmeaxb(kdHuBIJmE*2M!1-)ak& zM((kry}do;Z4^@EapZZx!!tJM)nw8R8Kv%Gih@vGjfH8y) z^fnTE?N)TU7>x8%)%M)qSJvWz_)#Hd$I$x>J{e@#rZ~Qv5k3o?4@nvtzA_M4oc^-yGX zZMOhwF99%jwrTk|>m`AH0d0FX{6hBZLmviAS;VDEtApSu;M(}q&SZH2CtSKIP9 z$#=Z^vmSi#?WFxg`f%CK8Ha)-%x%r@N-=XH6hsTzAj#t6X2Ud_@ z5^oC&-Ma7Q34j?o0D9L7)s2#bC!x8n$!aZ937c2!s)0TaCUa2gF zG1=e%j|JCbCRDg~Cb3EPj&u~j_9V>_V2i9o%yEyc<|y$yfMH+WV4rojQYk2^{c`^dgJ5*tb* z*vZrB!y#>;(87HQNwC6l^V4rRmG;X{OsK}?RUUrt=XWjjBrsRhEmc}>PQ9Sw!*=MH z0|8-QT&GWQOyWy$#Jev0PZN=9$hNM!>rYP)T*JTraF4xD=jpuec!#(fWkAd72X05# zp87q4clVE%d%mHGpa4K``zIT{qw|GV8s{YWhXa$8>fKZ)xa6fJMJCGQg z(E(lSnRA|}K$*AkcjPwOO#8mp?9|+Ry-?eYj`>S()$^fx!5liEi@bzJkvKR}%iLzj zn6x^kA0Ny*2B>1+2Ml4g`5H!N5^#s>4fCn>?9cX`0Qy7DJ6SzG4^e# zWtUSE^+tZD(c{8i@xHtx;X+#d(>F_YGJ2T_QukxtSMYYpzJmTROo9*Fbc>*n92pVP z2}00UQM_YRf-h$rkPMlGC%zNY;5AB9J#PyBd84KwdLxuQ%A#Yl<{u^x^M|z$ZWB?; zFV@^=J{j`C?RQ(=m3|t}bo}lg0v$;I$;8C8QuES=#&-PIzojIab#tI?2@rMpz47aJ zh8Rzkiih{`%+h&wUUXGmAZAVR*R2E;ZGHX5H7;w@B%F)QsG}rnbo2J5%X=m%EA7U;G}0cYJ$B#3si>dkUYAcm%t5;dB+TbcDW= zjd)K1wD}KGc5sg|GFRNpnK;q}kD{!v2eq?Zy2$o)gQgJoH<7}jWtSN2t<-N4$ng)# zsQj&``cd`BV9`-_UxXLoC)>~RCGq8lk%2&XlyPKuJFFmr-sN`B?bpp{Yi02XvDEy!7+-BXAZkvI0t%WO$I>0f*$n@su|Fh{_J_q~+^>F1 zJA%j1xa-kIW1IHBwjt{s6Cfdj<@$+0{t&X~95_E*SDSp`OXRxrIWfv-Q+ox2_&u2W zc3%xq4N>60fV;A<37@HZd>;2L%$M|LX-)PF@JYFLtWpN*)&(XCAnZVMwBLfcF>{u$WgNmr>9< z>*xJ<9rluF_uUCB%uGKYN)+&oKB5x468@`8}l1sf!G|lf1v3k0oN*l)O5CV@rfZ zg3L!!Q?MB+`eIZ}qOWV;espMXvZZ_c~k~TDLYXDfv z4UizyO0xh^m4Glw;3YXhQV5o?YueLS;JbTXY>&Iot;{w*i(T8*=T|?dJHGy_q5Pb zo?rDltQHwVl5V3F{@-&#=XY|5W0@-!V$-Y6fWCs^w~-;UbhELVAal>|W?kMx0P@&O z=NTkjGkLIKHf3{;b#qrb5kY46q(`{SuyZ8O3Y z85n!r5`x;^-+5}6rz;3%n{6F*JRjK#tpr+4XY>vD?KZh3w@HK10p3Ud3-a+?8RX;L z2l8K*6!*ZS^UeH(Wys%%=_zj>v%z|fg(nODaNiiY%ZrPDT2g}>YRhB=8 zP1{b>L1b?VW%J9n&@p@4RBt}`%Ial+EF3T)fKju(rX-`8AZt|>4n3-yNg^?^}Xuwx0#OPBuDw4Dvf z4#ED@+eZ$rN=@Jlo)m~swYpvx5=%eaq*!Q2gaV*e{o*dUZbg#v$WUdvHE@6#hOn{b zo;w0C;%bqIR4{lLTl&$rCjB_*Z}x>*sVI(hsHMtL@~ zPhn^mQGf&Y6Z9soJMfxf)3>G&_qZ_uW`2KM+lXGg8AoU=mu6O3get(9R)Ic@89Z!H zT^93Zm{pCA$*cS_B1pvdru&BV&F1>2GMMsr#XHR7A{EAYV`v&7S4Uj%i$#jTO zK?_$SqzT$JC+8Nns1d{HJ11S3$d>WNgh}i)25PC^qU>XEJi+3xPxt)OZhv2I>Gq4h z)uGqeH={-V{*zo9FQBw?a4nZO)*&?OKKet1KPFWFX0?)B^=^;oi^#|DlkUTVXpO-L z4O#=skd@f>54*S^f~$ZJJ4}A?u{FQx2{1B*S9s)We+ye~KWlPiwUD!E(y;UonfNr4 z@_b%26yLQEwKnLexSW)FLG&1FfwdY`hN=zyEPFn+?Z+MBAMBrf!jzCpVJK;R;y4E9 zzOu2#=;qm?+@HGoBkP}dVgjrMzFVmIyn1RJjH{B77HH>;T|_9w@<(Nf0xPb*znd2< zL>?L#0HZGCvs3?rNS<%YjB;Mnlw_xHjySr2X7PF}<;jLRLAu9#oG+DC>E3d=yYnB8 zlJHiX`;FAi$53#y!AJk^!1G~E$S`Eu!QAueSUDCR%diaCXOVv<@RDa^x!Z(V#{0nQ z`&Qsy?nHpjK$d&=p(z=Gh!we#zjOrmhD{NqKm1;~se1jeitu_RBY1-dMR|R1TrK-- zG<<3;dLB38__Fqa+cUlp2|>aBk93n-ZGJht3zzh+SPu9@Hs4e>WVJh5mYBG0pPt zk>W>cl@I9G&$5hQD z*AJZ2eU+6YzWvfb?af7O#TYl*ch@<$T1nGp^nGgI%r3i3z0}_eIf_#&z2!-L6efa0 z&Z0EU^7oiD5`(S2Na}@GsEJ1o^!A}xe=y$1&#X-6$rg70IPyyjFbf(TIH38X5!gX*z3}n_VWWfa?7Bz|4)_f;`BQVwV_tCGVJF>E_C}fOJ~eG-GnsQNsPE? zbCeM#;V*Mqz_u53SHw)*K))NC1bTAYD2oujdH1jIZ=rH=@l$%Qi-W=`MwyiY>=xe&A?dhDVU4JEH z=Zb6-o!mF`n47Z~{PUWX5`ZEabG2-8gkl+eU54Yz%zMe4A8<&cI!@_cz>z&7Ui}n8-#+jAy!z(4@aKIN ziq+e<|1(&GczH@8Z&7?d-D8+PCD5JZ!`#arBR0C&?zM{$<>(rmtTTE+I&NvUcS{R5LH(FhjWWR7hN~Kk8ytnI|IrUu%jpc;;&+`BJF;f84Cs6 zks7{sFB{Xannl(=pQ>R6R_(b8sNx>VnOh#h+goK+w;=O@Dh4UECByI~p{}|lna{Vy zAXy7xtEd46QMFNsf_+;@SWy*5(8M5QY9tYb>U?lUDw=Pu!0ik?gs~K1C)4?UyjmYg zjczooUVipz3jf=NLD-vPKF6$YI8r(i^a>seqCzYr-mJ{0s+;npjO^cKt_J*-)|K*Z zx0rnLX8t{k1ZQ_biwlU49}n=jIj)#Y(cdHwvrr15Y{rZXqbx)A?k%XxL@1c(AW3wP z%TJmwbFH8iCAS=mNQIv(u#Ys%chlucXsHV)ZJnP86GhjPR7N&e{0Kr9N#Ebhu_^F?gKEHyU~PaEhv9@`uixo6!j^4 zt`|CaMI#=-{-~h>f7mj|p-`>XnvJ_JeOv4hi)3B_Y${vt!n-dYFR)NBQ-{MYkG%U= zS3Pciw3sV}Fd_#AqADDNxkXHl3P&rqf8~fvZG-p)1veOFo>gmz;0GIQ)rM4oa9>MV zQq>`t@X@gV5&qjPiQgd=2@#{?{VPsRl%ti%^#q)7-PfQW6n`)tQ1}f!WtVECM;c@IYFA^J z1t$r`{mn8wOKhz*!{V`(8yTH?=9f%|+)8l!Ulfh*XB$aLXDo7?n6Urh-=0&*BOXr} zk{*)1jz8FwQt%g3&socQ)MKPXM5;$I1}(<)&wrstvpoVhZ&-JnB17SSrtx3~u8`9v z72~kweznGfY6p2PQ80}y8Mm1b3r{cfu@b45M7RFohgADoo&N_a^1P{~U+lbdZ2hU! z`~w<4Fv?zn`-;h$-TK0uHf7E;y4loZs)k@ICNRMC3)e4m#E@IxVo+4*O&Yv4|76T7nKX}=jF&j6vkJ`H8 z5tW^8VQ%8Q62sCS)ng{@_A=Y};cveDop(iul}ozam!Az&?}eyno_yXK@U0AJ4izTE zq1}F?3&I~TM)aM|@1D~X@<^_t7oV3elZ)5i#G|CyUNgy_*iTR7&lLqmx}lWumoY{J z(tnp#4@J@HA!EDyC_hG)5K5#dh!${dq@JO$_DPQ7Jn7gb(UMeHAlhN5*2U8du!=YC z3^5lTk`d_;`*Ak|w&*^ztK=P&U%|!8-^0OHU?d<>kwjYA`T!dymg+_xxDN2r$^UZU zfqW6e?vh!=IO&{P{FF*>^nNV4^^AfWy@j_9JW);w*EJ#RTf^(^jqgfufu8J2WKcDF zhtG8u4To6D8BBlSTzhB7{3N1lvMPDmF8$cDbF6xhl4KE!2{vC#Eq zK)lLXoiE|yx_fD3MNj*PC6_CA*_>cj>4sS(Q*d6$9Zm9)on&Mf;5f+5yx%2J5j*<| z9=z33xZ&DjqqRsYm%?OFis4+gTi{-pEffXMtlu@hD+Pd#71tiVpND(f)-{<2T4;W= zxl_;7R8<@x;P6i^&|+L4C~vA{DKS|kuKOx+zNs!+P60Eynqb$a=suh2CDHmf=mn1j zC4aeGd%RyD;QAW-O-b4X_dO(y@umGF=ycJyb?acQ)=#Ng-(mRW#H?drtg@qALfiG2 zt*pQl-&SIjnkv_2Z3<#%Yxu%k3Ri3ff;T7AYNT;1D^CSCmEL4V zHP+%i#e;^rj01o4X^6$TK}?9=lkPgGbJ1>arFmCAYnizG1%v{V6Q$-+%CPqrVOGN( z#pm7Xb5#@GS`n z_mN4DeHE4%?zg~2A^(2UG9}A<#&w-EQHx)s;BMfs;I7fqU>(z?U zR$ntPl!>t*)o(AR>_n}S;S-A~rKnL$`Fl$ipJnZ2R6YJFh52dpGK1(%5h~3z)lcv$ zod>|l{lQFmPUegeGng#m07ZeHAV4eYHIvSwtdwD*L8Jc)Yczr~6aiR`ok;Wg=wo!| z$Rkqr23WKO2si?3xjge#Qa`?3jPk2fAb(87aySGLb8JNkVL(WOk#;PzGAH+G>1v;l z{QZTBAzm0T73ceR6zc?bucZJp|0_X7{w};=6em!;0KW7&X28paY(7(lpLC4X$_v31 z*)8uKsgVpj%+U}mEs+?%j-fEhuQ#b^m9g$(I28v_p{d~m1Rz&7T9_xu<79{aJg7ZeOyS$9~={MA6W6UEk6CU(!%p!c}&*{<27sS zS0>AGNAW41T21>wc#tSdU>T7_V`hjI6{>mhMT_?rHFsuXPOVS zs>0)%6bcEUmL@4RmjJ%W>{`N-Z5 z{epHW)w*w5U6pJ!`T<5ejK(vWQb<-%gPdwd}b`$ZSD&(P$HZ zd2ZUrkJC0Ek+BDCbQ~{_0+;bMe*}7Jv2FkFi_}cp{m(rVp#paR zRjcHIR)B5$L2{cRYK|HrQvAvH1(09qQbrAX{3*vwr^_w&iAUni+;X61Wt;_es^m!@ zCPAT;_9lupMH{2}aXVTWIDOO!XOca!=0P99#1EMpc!N2`Z#$9m7nQ~q3>o(7((s;n zL#MSN6-3g{_c15-PcDECC>m=&JUf=HEi6PsYN2fnRgHktxCrYFBp*$s5*mS+-497m z^Ll}ECQi|J5{oMBpT8~ycF#Kp98M9<`1&70B(2Ff{dTYaSxbvf^OC;4sf<2}{F$xF zbGNVu-@qEVOd>KQiNI%2@T>h{R7B^uH*<1-##`AbhJa{tTw_CwTY zqb8^{mX{+hv=A~xvCuhgw;FLZ;2|pfI81&Y_M$!y%B&afT})cvXIN3T@F;e=VA=;+ zrI*hq`5x3uMb2PNuNEe^!^8vm3TByuYTR5Db;R*1a6>Q+6I$x6xc%+wHa_Hs=0nhb zJ~`8Aw7PFwcDBgi^ktT+tO)G;!}8)a_e1nhAhg7cXB72C6=Y`Cp=2J?==;7~8Cc!8 zDx=n{J@n_ZwL?LuOC^ve3@iY1RwiyEiD;g9fbAn1ft#6j!SJdA+mm`aFWQ%0-7RQ5 zcbPIy-SHIOw%|-89uFyoXI2lr+$z>{4*PMq`*+#GyiLa!LGfRfn*J=5{cnhJKZdeC zZLxtL6LKf8z_g`yq4e0xFqqwg63qG;3nwWF)E<~IvfnI*mm2{fL+g@TW~N+Jun?_@ z)D&4>EE1I>(GL1o5F=Jg8^BbbUJif1_~6omFsjLqyCaqt=@K?HFa>ied1j89J(wCAHX-zASZnqNyW`a_@hJgZuWF(!#OOzGLIy|n;b@M zh`J?bcT?T@$gEaM@YHJgwl8V826+~t#R!yx33*5w$EhX1+{3eN18I}As~rT}C_&t} z_Efb||Dg;zqtRpcvxaWmT)uLAWQ%_arw-@oM;3|qH6PGHek*BA;}G!Sw|&|u)KCOs z6e_q4qNL79F!6FPm8>Om2R#UW+l@c5FkecV%Sm7K4Vv+PBi5*5z>ZGjgnJB&GM;_% z)4F5}z0^HIb-KkT=AMtBUJTWHRK`KDAFMSN_c3lvSJg}BI`#9Ss*44MZ`8}LKFIKr zlr0sa5I8||ww?Y1gWsV+=rLs{nuYwB7!NG%Zz75ma3g3R7Ob_Q8^rnc(Fkbj|6#-0U2j0m-hvgf$2|@b^-e z=W2nzAv6Nnw-R4QM9#A8z#xPI0ZCIY23ynjL48y~`5~O72PZIX{1r*-sg>`nImvgG zcSy#sL_KB^NFYXz37ZIokgTW?sq#b$x;;dL@x26eC=`04j+Vp$qdNB__up(^zzmdn z*cIggDWqy-7BM-fttTQ%6&sK9Z>#BS11L$%0}Qgk9k^mOoQhsMuknEP{tTWK{V z_!I|QB^^~&kcJ<7U9|y*EE>VzXT>8rvfP0M%Vb7}zj7^E9Kr*3BnfcH2Iv8RVFRSg zayyQ~`yGBBUOs-4?h2&ter|dQrQZSBhBJzRoxB38)w5C6DYhIp(fzzdi{5HBhl#b< zMZCmTY?;MUC1Hj8EwVYD&-Rlfc`~ni(yfbmsf(f6yv94srUh^S%$tzi5CQBwT-zNj zqJb|tied4XNtMt%#$p4L7jHXqAxBfruXhf?-JvcWVGofTt;T!Cpi z?D<-A9E|G;yB8sEoNu0#Q5^~p{_nXGLnf_9B^WtB07bP1y34RJ`-%UcIP`@-^!YI` zbzV3nl8jjQmIo!!gkqqKhHX{udaLLevNJ-ZXpdtsR7~|z(AWqWi~PH@E>o^8^(#SF zhL{0(IE*VdrTlvNWzckw%dIcForNSL`MH5K`q3n;9;&PGyBlcG8B0db*+FGVAzwF& z8{Oh_$;gTeY;HcgBDr5!{DL@be~YD9if8CE+UsJSV86{s2Pk)9%TGr7t3O1(xi27f zcy1@hQVNoS|A}Ej`jSVppyyu*7H)iNOa_Z4Il+z>I9#p`249ypT<77V(-;`|WeIyV zMq^srSyJcZhd*tzjN{)d3#idwW72Rc1Q^pv{Bd}dt;YJq5m9c;K!}UFFsH8XxtTzo7E+dibpKL! zDk=A`QYfLGLO`*LU~q<|Cp!{tPYjQUwBivhphbPuQR_8r9%b;zJ;rG54{`y;$#hs) z^aY5|myPIb?>UDq&$!OVQ6r(ES58Qr8%4jJe}c{+z(6LI)@mS%G0LEmyR3HaKg?4W zow%5yXn$t^h9`|6V67opwx|C&X<#8OGTP6Hor<6RLi9C?sbhnrgkYj;#efCj zI5?2-%&gZ%Rsr$JC3all-sBNMwYg$f_tC%j>t?D zha|*}VP3qJ<2!syZkvUkpHYt$JVHpz9i9FM{da-1M7r{%^M6}LsQ!eWxOu3wj9bHQ zF;hG+35U`h);X{{8Obja%ugJ9j~IHmiHpDR2<=&%IhhFwykJi~)lcz!*;1u0YJRx3 zI@olu??gA8aQ&XB5lxsSC5Dkg0(L6Il`>CGPPmRPF!6R)0z*o?oNtnIS%fWHqoUa%~=j? zoxiH9nd#KPsM_|0`=PjQwkheJ&KGz*ggz)2oQ6gl?NsDF*!AXq zz31b2aq9}v#U^2%&)P-dXf7~tB-Sp|n$dQsgfh_U?Yo7AwvYi%Q58j=uU7p!i?qB(w93S~*&sh8|C#DLqve%*1xD;p=M}WAb z5a&mS71~WLu&NbAjML-wi=VH8SIno+Pu!}U9KDL4>QfVaNvHmuh@1bCB z$x+)+RNa0*^9$m9buyC_fHN6>IaZf&`e^_cf{IR(n7eL|`HWMU4&$K7QG8v(9-jQw zAJq3JD0)B3jfn2l6wKL)C;3kKio4={k}=q^i{boiJv8ptd1Mb5Ci*{O{&6p(f2T;A zo$+8sO)k@fImCoEje%qrm5pGF+@mTn;E$vff;f2&$o0}`P+l}jZ})jl9Bgtmi!YTU|@!}O7!%#+HK`z;S$pJhRU;EHPnc8&_ zS<-}`HIalEsBK78ej(`bklzQS1B;m+O1- zHs=2Zh8KXcAG#r`hY%B!_wfaEd`~eIP!R~TTzNop2<;^ zhL;n3a##FnLD(=E3)^$hx>m+{V8D}INCXvZPk89m2uccYeu9O|#-eFvqG=miDl5RN z37_3pG~N><9!RtxCJ%%X)U~GcPRyF7)ss%(MpGXtfC0H2!Hq?8uLXT0Hhay=yoQ%2 zi5LGJlgR%f|7np(oGY)M9^fNg4r2B4GI3o7m&MDl-hXnM6zWS&`x4v)d{rC1)nfcd zYA2ni&#OBNvg%qZL{!|f{Z^*?ax4sx^;U}XZRDzBG1Y!_4^t%=9ei9TzH)*~UoF z9|GMw&f>>7Z>t=9ZM4wdg_C8>+hw{R>B{LQ>>qxhHml2(_2H4wWN}?Ll|PooEG7)1 zUw#fvz2tgiGh@!=#wp+r#>Hc%TZEzDqj#y(KI$0BnhyaW7^Veud+v296A!HQ`*dYQ zI6dZ;4#Q<5O8!gjRs80;hUf6Pp<}}Pu+ovC8?hG$nOgBTWA!hRs!U8B=G0^qO&k2$ z<>M!{za4Tli}N{PF3LotDTJVwVT8Jx;x8nF)A)X+KxcUXRRMCPUf&P@#g`?AFmlxX zd$LsA8<=YKe6K!^$sS`em!`>%pvO%mxMZc+i@S7wOE>)$4!TP^78zm1Q4Lk7{C-=B zye1j>Zz>j)~ zEx%`$B^+2*Cl^9yy@@A#EOhlB>9atEijxPc=4$DSppQJ)eeti=d`m==ZzbS{UdoXq zDg}d`u55DmrYODm#~rw?`b9^dM9z*f+{1(QZsRd}+d*AkWu=Sw#isggbj!dVOIdH#T43T#ulkgs!%7wx>CxHd-&J$=+|CREonw z;+&6oDqf}TtwJU*7Tz42sz9r#%UH)q=?cN+xe+{9RqpKCNFQ#1VmN(dqj>vg&t7pr z@Hg`Y`Y9ia_O4z5LbaZF^gEuLS(B$qChf4L0lcF>yyW_qRE_k6(I99Ds{)%$Q}V;m zw2ac5wY|F76ZO@{OIdBC)GaWcB5P4|^75%`b_V~5f9i!T1QxIg1bm5JbXWTb3Dd|{ z%1~>~lOY^lNI)u5{rf!=(>5pkO*HmWUIKSkG@ytFns4NRCQ6Tj4GX#?7o%D~c<8?7 zVSi_)h)PFUBZ>zuzKU6A?Xc8G=HP!_-6rA=-0#!X%nTQi-`Vi2CCsPiO5{baprJIp zcsaHyQ$NL-l>8=hv5*I?L6H$RTC^b?1BFqVC#(P+vewflg<51K3ejpLEN_vQ1|T-@ z!1yNxJM%QCT?kfF9}FSND8OdmOlP>=LPpvG5{VuOJ3v9zlG}NKP6iC#Do<2@_;i#; zeB{~I$AuL^`=mB?Pl75^gU;e0Ocr)%A-*AQjmqOYvx; z`0U&`-tCq6A8AV!LA1s1&Q?v3s*5}Q^a_#32YI$yr=OS&DJI?kEWP`^3K6|$x!0WF z+!5ZKiy-DVMiaQfeSW>E^QPR1QsJ-w(Tn78zXpctks(KBg;zL>-k*xI4NFDbpUdg4(W^Xj^k^_A0yvCk@ee`hE-%-4$v_7Z`9ga z!pXKioO1;B3ZsE%OwtkjdAAL#5N-NwKV*AAZC{MHSY3y|O3z@+$@JO}v!+8V-i3fR zCox(Su)(BKde-Z6N0I1ObCT2zi^k~}`*X!8LZ+?@?p#V;_FpCh4As@MuZ-k=tj%#G zx@evcG|*M<1&{GLVecJneUu)40f^pw^eb;Xw4C5b)bCHnQzeYiPqmFBNR%d*6T-s; zn0>QbP$5Br4&T>Y)a#SG1@gm}=@SbRDQgy8*!MPSymL}m8hiwc|Azpc5C1S${n@n8 zb=%s?4z@N%t+3}086sa!92zV$h~$P%yX)0ppg?&vJEz)QKm@kOJOS~WCG_(?Gff1k z&f?C8T_|IIiLHvbc{zvIt%t=?!Dl?6M7!gE9Balb1-Z7pYfaN~i@NCf_4P$tc?#1H z5f7+98P4{p(rHPx)u)k!et$WNqGhW}ouGV#OXgj}U-K$l@ld%YZjI}y7l3hk(of5; zW8wAt+glOtU9sSH6RMPCUMC1>ef4A+?sl?TpVmKU!h9E&83~keEvxdPC#Dcg$HM(H zjNhJ@QDfWHz#0qnfXFg-7M@92&kzEMz*(Wdzv_AjJwbOR{$Hs1nE-$Xg5QWflv32FozFPQwMFTlS z<+f#-Mq%rtBCq`5GUlo3Kb}_%gVd>3gcc!)19d*MPsuSKdbCP-LyB7Fm;GBSj$fzK5-i zJ-Tk5LOz|_qz)4@M398$Tm?e$KONRnd_QNQf;lv(PXo}Gpy^-Gi{*1hX=9iUl&LZq zVFS!>O@DN^$W_Jc4fC(_D7t}xq`(Exq{VLz9rVqbN z-Bv;t%-cV+jpHcvnb>NCf>0rKgRwa0>UrH)i}d%Fk5puKUhjI{g8fOjemEpHmrsKFr##+@iI zZ=ELu5b(s>&os!rTF2MtcII)wZLE*pFt<8du8mMxsV7Ch^f$Gm9Cv!bX)6tIRMYLU zb5O85$4pPJsa)z$6u4ul_2q-!AiDwjv4+>J*(g+mJVp?H)VFwc)fDgtJ zv2ZIawXG&f_VR54QE(#*{GbJ#PXyJj@&A4G$00NNdvCwF^l$Y;w-;ab#y3k_0+(ZK z(}qY~;|BD2H2!(8jrek@SsWfSE4+NQ&Jgb>HMlOFa>0O0%JT20A7XoAyD>QnuZh%Z zGhza}RdA_Pwf_$?zDBo7y=T{;!ff z4=voEUvDtDnM4&=;hpsxH!TYW{`Ax0#k#d9Qs z=7pPd`LE`eLevoSZBEmubX2=#s&$e*vQpF>y7}^bB~I1hu^{~)#5ieh3Qigt8tjz| z%?Nq$n$KSxEYnDhmGGgt&d*vYCUj|qSi$gTmTHZi@w+ala*-Lv?&>X`k=4aZhBdPT zljRAfPGVE7Z#oQP10D3=O~!_Nn#^c&&HRGY=)I7mpUs6Fv>7HE8foY%@!ApEt+yNT zT8hLA-g{sS9-b}hG$hS?aXkH8g1s-AE+s+MD?CvJ^x8UR9$jBM8>jzgTlLeE4X7H> z{S}J4^%^E?K+YpFgfXuC3(Jn0gStg=)|AEU>t^D*h{sCp>nY9g6yh|O`zA9fHnRD% zN?U~K=a5L&tx`wguXqw{Y`tgSG;sJOBusiGFABQn6~p|*QiV@gJ~d;upCzn6msmH& zMgDQ{ZN-xjRafv@sL&TADxTed6`Y4ho>)p?6iXFho9Ww6?93><6W=DyO&T`2P)*_{BYe?enh5M^5AC*r|F2@ahxhFim zyqat!jMM#J17IUmz_xA`^E>OnzGPWdTuZ}Xo2*+GHCmtTH;sJVL;>}5$R+pvpk-rH zf4)jIkykaoOTP^P%_7|)ii#?HOk@$X@A;MfIZ8b&{mN&1&Txktv+l_6qa->i`qYk8 zhJQDKj;B&h*+&3dYRgl_yDf{OS;gW%B!SLZpG246&yT#v&GO#OdUaQh2^A0FRs=#7 zL3MZ{HmzV7@00&{pqd)e2$cBlyR?}5`cSqThuPmZjCio0p8!URl&`1MYs>^SWL&B* z*;HopsKdgRyj|sGrL;AUQSme}9@ z9J&~~qHqs#cox#I^n*qp%x4t zORYK-e&>0`NvoniV)sBAp_t!#WVY)yGn~Xs2(u+Vf^qwb&_yI_^wpNP=e&p@sDV=M zO+i^gB~kDSCbJh*5YM1Lu1f6&#AxmB@G>u-6_XMT7A5vgH_~nuu?c-SN1${}j zMUE6kgM1SBVzy65PX_=!_ve+x8GIZzvJ}(g3PKLtCS7OqrWfr6X*4Roe$36vFedV# z$YMI482Vz8C}&m%z0ga$sNAr~z<7b)LmF3_C!1TtS}BF+6g9aWAu{b|KD>FWg7mwA zT+;z}-`fUG;P8zhs&+zm0Qi`U<{#U5cZ>^)XkC83ZVhG zBtKI`SA)j-eAo8>)!qgUEUr(LM9Au3lkEAsqM6JfwKs@$NnOSdHOr74$K+ILwl3D{ zsp!Am-3xf1boHKY@Bkq3lfAO^?Rp25D`bN7m#(edjL|W!>EX{AyEwkOLBVdu?c*UX z)($2P0XK6t@$YP?!VEHrIh++1Z6Xty_qCOCj?_1)%> zY0*dT1HJu`jE;H z(?@USBiJYb;Pfh@_9si`r_Tk3k&c|o^rC1Hg!H1)B$=YUdQ#y)=lQQCx3!=p7f7>i zSh5xU6TEV(90m3wjN%Tfr5Dn14bOlDzdtP0=O2hut)^C7;9itT0!@Zu^gge7obqn( z^slo))jE-i3OX)5DUMK0=if+qjI|r((wDjfD=Y)*`PJ3gL?kDli)N8d-FU6ISLu+n zTQLBPlQ;Xgkj7c`N1vN2?@h+-HUkoi>+~!4)f)8qCg+!#cRRnnZN@{4YtviN3DUVS z3CDhfSe6OP!1#Btw&*zCWLNtW{^MhQct#WH+tp4yl8_0&9S`*9V^Is};rp_s`j*R4 zMI$5WMd%j~ui;HuWo2a<3D2!8=i2QR_SAvi|3Ynk^Jfr7lJpD@{P0PK73-SVD zzQ>PtjhZ4^;u7-OlpsbS*5TfBQm)TIr?L*HVU#hw%GWg}>hY*L)ojaF5ViIWxl%Pv zfL_T((PwR2iJS92YfDt;?|EnQ+ZpF>$ubSU;HB^Hpu;o(zz;=)xxt^VQwr$;(3 z(5AXvF08nRJO9V!=3UdU^#1~x3}*AI=MujDWLzxgN!a(_eXpmj88v3%`WtW3CdMg3 zOftVk$*t9_^8dp_hakELRi5gP$acu^vGe7X1q&DP5nNRddvTK4tbJG4*)yldF21$e zJ^w3H#s|ockAM5y<=0*7PslKU7TrK~1VlhMbnsw-0dOcN#Gf$VA>(h7LGmUhmMdD@ zEstpqfFehmL_p1!_}B&KJWWKuX7f7$Xja2vpj>6*4RG}#U?;7{p`ln$F$z==p|j@} zEnf1~7stGDL1j^>`y#ZNMfA-8a8pqID_bG`9Rr8}mg?g`39(n#;sL<>?;Tii;|-e7 zH^V?u`h(dg4N#yA6V+8e#{kV=u!sY|7k#oeqXC}aIo<@RpQR9iCvfi4OD~->Z|=D> zXB?{!mtCJYaeUtV`SCIzwq;rrPUhze7B2ki%deVl&7jB#MN*n)<}X;_*Xj5>@49}BWCy$?)J8zy~<-V+W zlAzR1&R?+L#PP5A90>N+K>C%D5hsoxpErNLFJ!J^20RJVNA&}{k9UE`DX0uf08LsetdE4*pkaHKXu}`H^l+b0OvuF zS*tq3x*Y(qZ?D|x(r{W0zB+_~q^pG(~5)X9@`=FY7q`}pN#5Dln1l{;_#{1eBI1E^*|6Mbr8 z17PmFd3-ytSn(=vWHuqXH@G^^oI0iI`^FFmmn^ftFfuaY_OuTOIcezoHW~XfH7o!C zoH=vGbULG>qn%FI>1Q`DsB{GIqa#O_Eni-x#asu0ZwB}URC7bI%-uHJouSW7l%s;I z6;pj=PcO(uFZoTG{RwItB>TOH=tE+1N?7M$Da!_HN#lU{z7yvJ`wD*E{P|~2p91I* zks(53s#ak@BqYSFN(+FGgz%CC2mqH|d+kSu4>#^AQ(`~il2z-ed9AN8N?d?NZ&jfu zBKG*L>64BCu{JQ9TE6Lok)H{rKu~lGT$np=-q#l{6pbw5)(nDEr%uk9J4ahur2B=U zcjV-W;|*vor&*L(F-#{ z>DzC<8CUYt-{(9i6v#^tpPfBt?&(t}0Xkp|0T@KAd}2T%n`Py7kaUP&^5P%_fMwS# z|LDk(`U+`^?3ULmWas<~apFon>@7eERpSTiGym=Bl!sTi7^l&ZLi2Ee!9etZ7h z`O(o)AfOHzA}~d5bZ%-8@#Bv^x^mevSs}+g0=JK&Iw?!$sF#XH3OgpfE_s{a{~*Xt zz<+9H|A*y31f*jiO8UXC<{Z>GPZQNX@y%ruN`asprhD02vYG9cRFY8+*2n{HZBgLY8!WCddjJjCuYx?6K;^!DwDkuxB9(xL_}xKo~c#* zy6A@!%=v5RyD*JKLr*;U8Bhx3Iwvo_CumuUU8*J7=v0WT?)VZ#x@Gq zjSP(y$5GXMuLGdIge?XDHX4*-VN*!XL75WTy@~Ws;#`SI@Bx62_#Bxv>)UU>j>Tur zo;h>rrI&%{@i|qg`i)Lo&YnH@^r=&2z%%w0tdnuK`+-=3)2BOs`|oX9{%(<6W42_RMJ_>QILa8A38t z`U3dbr=KiYdbxrD**Yw{hL>D^`RAW}(ymofnVVSrx0ww^KJNXd%GP{BW69P?zx(y6 zR+e0={s&>A)+AFP@D`qZ{q+S`elMc(=gywJpTAkEin zd%Q^8SU#7tr%zvc*`Hm*jRvvl(l}DqVl8E?G;~UO0bFW(mSM5R<1?r@Hh{ z0Se^5WoOTvwxgD)V@xME0&bARvClqRv}B1kK|<6@OG`kF+r3HMsqJCWW;PWBO*Fv7 z*FB1{Kt2MdE3p|6-9JDSNMIn#GHb0d9b*g`gC!1*eg4_PMT@I25hp`lJcz+y(c&e? zKL1Q_NTzgMge;11v7l%jTzECwvr>&93^$if>7J}9B>e+KfqX8Mms=58@CbFzPtKn^ zchSX{B=$e65%)_jz3klCvwV}Vzh2mn01=ZyE|h1_oW10dOUU0A#4p*8su3hMZ^$aY zS$`PGg$oy)Med8}Pw=wd0hj)%M1h1I$S3pIQESjxlV`~cB7S-7*n))%u?!Qr7J7A( zmOE)N_a?bXFBkOs_>G{mpEa@8L5_-JGbEm_29Csgoya+vY<<-~e#^tFPwFog1+J z$&cKRUDWz0{gYnhHhlol@VyR>Dnr110RVt}2v?&HF+Ku4|9A5EaixTGvWsEHKCPtf zlZlN-@8O|_0BFR8)VDQ4lazh$Zi2+>Ez>~pPb&b_nu1BJfS+;=D@~+-I_Uxf(@wF4 zA6s*cHSO&{^Y>vaZ{rXE0}6wQuLhecRcq--o|d9NZ2^$@up54m)6xz!eBnJSjv)YG zs?_&3fk9ggOt6&n{prmd&NJfx&@&^7h5sfU18tvG4``nWq7PH97;ZcmQLQ`;eoM#L z_c6{K!ZQ;sz}R(UbB#Lz($lXe6WX_#qxEN^1*p~TX=~8DzbR3qG-1-;3ePjVEZhtW zA)9N#zR2GsO25$hGgIXcEkIKt8zU0>n|5gK%O=vd&dLqteh7dXsr8kmYA7bsd+s@C z>;IyAK11mr0-!%gsD(jaFwld8K9u_*045FzwchhsB(D_>ON4rd#}EMh!$IJ!5kogRcnF|0rI@JBcW2ORN$b5#!%mu)Z`3#Sld7xV$Iy{EQ b3_Sin%PcAhlMbD100000NkvXXu0mjf%WuuF literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/map_unwrap.png b/resources/images/texture_displacement/map_unwrap.png new file mode 100644 index 0000000000000000000000000000000000000000..4caaf6bb8348a6f296eb1b350a13eb98b7429e23 GIT binary patch literal 18543 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

iBy>7Mcc@4?6%out{ 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 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/map_view.png b/resources/images/texture_displacement/map_view.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4714689da42e4cb6b7f65ce1d54d11f308ef80 GIT binary patch literal 19238 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 N002ovPDHLkV1mU{GCu$S literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/midlevel.gif b/resources/images/texture_displacement/midlevel.gif index fdaad9356acc14cc4477a40bf99da4bc06891fa3..32914d7c9d99b5382658f4a3d4e10f77bab142f5 100644 GIT binary patch literal 25938 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 literal 24197 zcmce;S5(vczV-c2NFek8p|{XG0s;a8hTeOxg7hlAgP{uwhTeMz=?GE{h|-acA|kyi zqS7rqthM&pXYIY8^Sl@D80UhKTP`x@ch1k8zo@7wOGw&c0W1&$0Br-XOs0I*y@ z0D|jJ{_DT%e*y~tuq)sWj6t=jxIY?3!D~6(RPr(&&ZeF(F%|vl5zS54<>BVCp(jX% zLmqP8n4x8Tg_~h zZkg1F)$h^j#I!B0A4Z?mEjHS`Ok~t(fBLS~c{X((b;4y#@?u1V33XN?)dT%8%@Zp-ShnG#&8O*?% z#gas!*Urq3K6O?XKbF{5WlDnOR&P8(1q^M(+`x6Q$0%f~uBB-1XS2uO66dK%)L9Bz zPdAM+b%-)?+^dMSxIEv=ri|-k&v6!Xc1&?;$6w9W>*Co7^9qpMDcGJ**eTrE8`&vZ zzrf!umUlH}%ZlObDkx4AA9XHEkR{kFPSw72s>nP{aH$OR9IeSOj97B4E-h7at+6Xi ztj(%zNOY)cP`|==d#X99UYF9oLSWy(Ebaw>2%e9iLAd-v$VM7LH~@^3U^v0!BB5yX zu=!h{6=Y9{Znfh@*SF91xm4>gpj@hw-;op_0$>1*%?2P%hrpN!(lf#X>adl9=YIP} zHxR~y?zs{S{SwLS4)pgaU;en!3%1`wzq|t5U>_(1V3Dfy?9NNIQK^q4K3&cV~sE@+DUgE>XSI(y!`?yC9Vd`9-SRC)y=eOpF4XnS;$F=qZ ztS1MOY^*vFdYwHX))Wi@*qltI)`_^0=zShmq||EEm25~@&Q3A_+NnIh7y+>#ZG0=H zD7v+e;(Ee*kd8-Uhcobo|JUa#`a9TH5|=B#dfIj#hM#_9d)y6%(G>T7+o8^9JLbxB z@BXp&@;-XYtL|eDa0JjwqR=?YMKLSXFTmrZiufqxrG1<1G(I|Pi>L640FJilhdpo# zU5!VnK9|;d6NJl+8op;JN2pAqM6P)Ed4S&l@yu8-k2#76Zx^5((T-x}N1R{1jgzNr zz(m|Oq@KWJ4+1@&(sb@NTSBl>DgsjAwfr<`WOhHDI++6$lCqwfjfH#YMRAm^!E3Sx z{2lld+4Db8$RLJ3tqDo%xo=EY2bD-UzKLd%DucYASC9_Td!h~jkOHF0B9nDib}un( z%%{o<4b2as2JCT9xv}m_Gx8A#MgRg={<1m!a2E$l#Eeka6aOL~rFpN%b*R7~%H0h7 zHZR&wLao|E0~Bko%b)gE5P;i&D#nuq?kCjOO3vCtP*|>=S@ksmKI=D6m(I!Iny#nh zKGVEr;zJ#1g;F2K#mAXa8%k);f%vrB3~!|tY0*XlL!g&_1QxnR_?m%+@2ODoV!<@RAR1>v z9I^!Ez}~d-X!}gnku=?Gf<^!r1%OGK0AdD`GJcOe#-TKwyipJ5t*^W6-iZK|9|a;l zcR}6kdg(ABDy<&7*Rp(3&`A3%RMQB%aPHVugDVzi!T1D}csbuR;UP`-%hj~w6o7fz zRP4B~TQn~%Fed9ulMUCh?JS}3Oi?&Nzqar8e}B<;nek*fq0Z8mcVWQV1}DMj6GJE4 z+s1ac>i3!xAWwQ~Ag+-d=keP=PEP3=X+w~2GP^#$^OwXC zUNPQo22K$sCE|TwHxf1M7=N4(^==9WL~3rbe$gFvRBA}c8n-WF$w^Z8Y)P;9X|Jh$ zF>2D#f@&V$;&98UwIXSK@*>PwI4`H&KKWbDqWj9|WYE>Hd$RA{S^gcV4%%Ls_SV7# z3#&1@TO*+)$NE2hI-&?Kr-aLImQq{YQM!3KUFs`Z&J`}AW^g%k&>~uSqkd0Ir)#z_ zLbO_;cULd%a;j3+zu2JORi?FT-akU@=?4FSS!3ryyZFrpU&d{#@3~`rzx^}u!>tqu zL*Mkv2Bf9cyWgPr@kZCPy{@Rh$>kt-$*WyFFQ@)9vv2o%so&zyU+^7z-|kr6ju7aY z{ruLywY&Z>qC;;(;C}W@_XaT< zoim%iDgNSO%*5I`@}TE~zwJUT?%l-AqS*Lqxaq_gi``2f$C*8|C+Gky5RvUw(-79C4XMI0@ zeL<7&?YT_q)AL1N5$n z&gD$r@8fEn-hGodmkZs$Pnw?eelmKpb0oZa`ut7rVc?q|D?fgpVM+Ur;&pzm(_fwU zJ6-J2VSjGlzPgxt(sx{?^K0MY>hkTIzSE93;h(54L93)MbkB!$et*lm`njv~;&SoL z@6+z9Uq^vg{x?upm+!BBpTBwW`|Qot?;lrJ01X-}frhA}tNqciY&5}hG|^i$$vGNM z6G<)+i7<_%3W|i$!2d8=AOZmShshGYwph1-n701^c6#pr<@By?p02U+KW(0f_^oTF z$15Pn&c$vS&wWmE?c*`JJnY8UFQ@d;qJPu*4V;WH#XwZ-+C#B}1%Wq2a7 zQ&DcrZ$ISe$)f?>MiT82P?Yt+{VPtACYqMP8W@hyycA0m?if7>5$Z7@dOsEPg z78!*W>6xS>JKNme;WE#OKfi2O#UmD3J$1HuHULP(tB8&_otQxeGTtnESX}zW^*$3c zMfZouI_r4JUgG^EgY<_IR#0aE zKcKJy5T#xv(w71snHfSNt!fo{Cb#`j5tohwfP&;zQ^G+aHp_~`1t+#>T<5tGe^&kD zQXPu64i+VFkNrk05fmsk2F;mTKNfKeq6(&$q@e`m1ux!9t?D1PQ@puv$l-d+(T~H~ zjH)stM)^|FKAJda2&HOKna*iT6jxsE1949=M8CD&HSH zEz9$}w0FuDW&xaW9#H5R+@e;LnfDbmy;oYO3Vcd zTV2)KC>e`!7}V#-ZS#~UZsjgDn6J3Z>9;G3ap%GiZt0L3@F=>48+4S~i0BXD0|-&K z5A37#@}`VNWZAi!)N%u+pUVVqVLPR)98eIBj6stcHmI0K&!@z}r#jYaF^vlH0e%?; zgs7v&c5)8*zAjA2=IF(xE9IOP=Jjn56yL{>(g>H>2GtI`+tFm=-DN0Tm0Q~OwH$&3 zpZWhkZ0Je83tKU(|pl&$Z)XR|Re`Xo=LW60u z#m?G7KMK%W(UvBegNePc1_eNVm*x9RtCOcHt31O1^oc@*q(Z4jsOhjGt*j-)Gbti( z{iW?zE`&svBp0gDx>P40PCQXGvE=E&h!^@*Hd~=(tet8NPpugB^?h<%rm07yeV4!6 z-UsG`iMxcoY9#&{GIAytkERvM!tdzD!gN2(mXiY&q2GZRKF{yC66WyB{Vy4F$3Lx< zfJukaqF*G`h)AOGFg!^l4Dk@v5Mw+4n35k&_|~owi;ZJrq@-Pv;$Dy7ILJ?~KR07>>uxfr>|!Ja0C4VNUx5%dvRjZ*_i73m zemQ|VN(r7?k!nN79`tu;qE@1Uqey1?5SZ|ei+!SCuDj|4ikQgovlP)t|NZ90Yz4yI z#Z@#nqnAw-Qr8*&fX*7%MiIn5RiX+rw2_12N6_en{r2csRpdXl$0qQ|9u+Er#~0R} zO7sxed$&tPu?dKuw<2Tsq$DyE$^EJ9V<{1mjA_Wkb9U*g{wbuIasMIfYA!-<*#hK0K0d$|#C=|WOAH8vPz_#6+hqyoUVhm38c{ea( zqXL+Y@IP+x=_YG5H_o7JVAHD;4CCnEt5OBK-@b2+SB^j@_leW)s>?|F-S64%`mxva zRf_(wZI8tNQ0|lC93_ODPcyUQ_x^1Jl=~h5s-6}vY_^~6#Hi(UoE93bSyoRZ67>QX z^=P*s2ej6>FNWE@q&$MV*ZXv}R^47ixujb}T`$y9XX}k;2h@i4)Z^&RyGx}3aH>VdZyWJ`Mk{+u8hLHlEp`mCG1850kP+yc zWvxVc#oT*Gy{9e#?~rV?q{Xp~+LV8uy6Y7qlQMR8&)5e|eK=*uJVFisIG~U%y&6yR zjaf6URk0`NK1X=XJ@FJ4!(V)lkp@Jg; z5aei-A;-D%yFjyF`ptEwg2gU5D)t~>BG}($P2yVCWPq5~7k&TaUw?N+n)(LUvZkP_ zb`8J8q;B81DRwPuJp6(z?3{m6FxG#gVE<-}{>i`oP1c+-Q3`Q?pe@xSmOs%}`fd|j zY!Xs|;MiI38f|gQVfe3Qtv`d`isV|>wo%!_9+iVNzK%Ls628BQXpimQkTS)U^1B+= zs8*`TczLNKc#SZcc?*hCC$+Din)m8M>e3Eyo2gC2O`FI)%u|VI+Mc;Ad{#__fB|?h zy4)(6kr@Uwbwqxw*T3a_PB^_`GY~@&WIv86w;l#DXg2Jze7!e{FGK#8PZzy{mnZk) zlY}YC1ptwBFRw~Q@6RLXFq|~VfT8!#NdX}VX@3n8Y6ID6dTl@-;E=KPGvn}dFRZMTpLNF_sI5F1^XjWs$l!H8{m-*kgSwi zKZpW~rb|H*3voC<)f;5b;R~SMQih?g1=EJ)#2(}Ril-`ryui!=xWDu+O(Dvvyebo7 zGiRI0MT-IQBNmPslmQfa*T{Ffb6Xh@Qs*$rP~WsD6Ojo?0cN#$Q-P((CGuiA;>1ja zSjVePSB+ME^~lGF6X$)Mf)J_l+Fc{%d=n-qg0* zOo3%26gRW(XoS9#Z?{o&F`skn#PQ@CbUfp>_t4$X?&P6d?=8rB06fdNH?(2fHM5Fm zdG4*8TpnUj{O1q=M5FMzAjfPcUu5)hyXwS(xLcGaQ}!jp39i)^586?!EGh4$3iVZ1 z#|p7x0leeKU*EBJ_h#7#7xlJihTsFuYd)bvk$9q!M*u8K!4Cje zGkZySqMyuNw#DGX-Q);WG2V7zi+&;dFhAm`7LN#~%iW5bkau67;&^_q$x_N{>S??c zQ>Q(oV4REUkM?xFzwG-!`mK-=u5+JM&O+~5jIec+JTb4s?~APP&*+_{s^e_n?n=Yy zv2~7e_R`B15<7`&5+DkAm$*^6f9pV|Zff)A5Hib4gF(L&UIDmBEKZC`+AB$IZl-tB z9_FomN3g>i)oG|-uHZcKhRsM%S|Whscwn2~21KWdBpfqNhngPUh~}}>%Xh@f$3r2# z#c7Gov0w!x*hWz^|4H8DOj<`|EJ*9;BkMR^3OqG3i2rPYwRn6Qzlib;=BI1a1wOf@ zNbKXsF1C8tR8njdBJNU-g{-RP^g$R|5rR@Eg$qKMmPT+qAqj9F7&}ta;Ks)Rd?QvEP%Hv_jUlZS)$Q~Fjq@`)DNFds zZ2{FFOD0KkUljypDPXAbYRLN=ZI;vEdxxg5Xn=BJwfIJAtjI$#Aq!epwO% z4d8>YOzH%yT#*rs{ef^VJgS8h9FhnwAe>ta0Q*t!zb#b2g;&FYMQW z-Xm8Gs1wX)kj-%U@A%H@+zH_5HP9LJ#?rsDY=0*_%RmmSiG22hQWaNh4=UC9*H00loI{Gf8qU)XDF5#t`jo(ucAzC=z@5<(-Oa zgwxLRo*G8u@s9qy8i07a!z zh#14D#%4wi4h<4S4KQhOQ*?CG=n0PG(2>lh0^9z`2mB?PS-CL*M&L_Bd{e(xRiA5{iTxuz|5da8rK*Nz<|-OmQZje`tXBULQ?`GaN;(FH z>volzhW5H(y;fCnihmTWB&4L*9qV7(`j^MV!GT=Ytp8>+O{XFi@cy6h?LX6V6qsN_Bu5nFtL#ax6 zUQe}K-JeAmVr(2N6FDg61af9S#decvP{H8W9Yi1cuC+T5B?N;q{|I=CS-XEPHU;Fo z5O%)qFiwr*jtjSu+stL+G-*GgU3&#ChZ0OJV|@>zshtQhT9<8_#I-k?`m~Np!9X|u zX}ebb=1ZJmLNIc*y8;)U9;@SgxLjfv4G;-k-H#9s>3vm=@GyYe92GhH;vL>3&td%UO*rgWwT1(S#suSWgkIK_Z)?(N#B!&FsE za2Uy-&qj7+4Cw;IrQEY1gsG4mgtYv8DwY6*v9%=S(JhVN@AN}I7G2s!gGL0{Q6T0O zj$%cSACN4gjfP0kGE=W~msalKFqf0M; zi1k1h#31~hygsQvH?6UYj{9jDz7L|}8A5N&y;X3lcKW$>$Rb%6m)>n`L(f9Gg^C-i z@q8Q$2r%neBj=lXzFBw-ui9Dizu&6SuY!^dk($9_J}!mLgWhG<9qu9dPA7dp9XR*atuYAf&@mBkL!z zw^~oajo-=gRS7Tqj9i85hnpFMmv-?`RvNzzFfhWrOHz~ZS9WP97XC;fBU-Bg2nAEF zQ`WdVJk1v}^73Zfm-Hv$2LcJFm+H+A zv?)FZ7pa&(>iei!s#QuG7dmda!%hd2yJHxJH&m3{^KF>Y3theODEHU&tCFG?M~%$8 zvf!PM1U;IiTTbX78*Ihc(+>uhzk*9?C!7fk(BFS)2a1rP0BCj20FBN4rb}3zr3gK) zCnta-fqpCH)HC(#4U&NUF$~{VZbHD_jYQ8_PhLWvTpSZjb#qurw-P~>>?I1-1@Jm| z5M8kaQX{oh9vXe8w_xH#gML;;4}WLr#k>Ua+4T|vJDJG4(?r{^eT8I9 z=~?;Ply?%7)*Ny(9&OKCGT{7zXE)IxB=#kDsp2i=AF~cYSwjoUq#*Pl>dN)(6sjUiCFsu`; zZWv4StXfrISTAjKu0n*eMmwBWuZ-8ISpQkAbT6;5ckO)rOk16GERX5S(V6DdlX6Fy zI@Q@)wvO~&j&7Axl8Xc?au_QKC9aj znhskNWVTm_33%$2zW=aq*xol$@4ltFyiRxad|0c&Cu?kZTk5QHDyhM*s&09H{Y%%| ziH3lVu@8qKXWgsBjX^^iE3@ElJ-b?sA&X-xr(I{gM@fxgI~pG^mu~ez@c)IJ7+jw; z*J~jB*GWtKV>$HSKp=0LlbdKn) ziTb-&fzJV8V0^wHZ95d>6_QRt#odmQ3mXF7y{A8$=qkI20obu0)d<+p=%5YBV`lUh z7MNiGj9phZ5-$oK88Rh|z(&|gW>dtFQ^f$j2+Q-l2XN37((bI{`8_oPBF6&q+K{juv0-jR z85RRZBs>e5L;?xhIcnO2X6ba4K>%1ZHz6a99Ex4YwYIIX&!*R-K@|kZZfz*(elyEZ zz_Vlr;$!bAt^xSc#nmMwVSB9kiffW7xhd9)w(gnM1nE@_-b-mk6wu;|8bs0+9SR3s zn9HJE?6Zd|quo+3js$bixoUOXJ9e&@ELp0>yi^w5cWV<^a%`Nww-1EU;{R}q#p$VW z)rfc9hjP zWFZbaEs|%LJ<5Scbx&;;^cjo8$r|(B?Fw9wp@3VAD4#}jEZpx=X48@j z!WBqjn#Z?b6j48n?EU6zR}{lMWo`jqis7PYYk%idv6}>Csn(0SpA49vR%tbHmF4d^wAMetU7NM^}Ymk)8f79{-CT z@C2Tg?pPHyRmllH_tZ6Y=$4(b&aHUz5%lh5t%Xib1v9NJ67pMkY`IAAj(rRn2D=br zVRexhi0K`6e305)bgC@Uno9$Z%&W1iR&7NLFz80m-$Mbhi&EgOJv0r@oT_Ln<#EDc zL|LafK8G>Q1*|C={^OxLCsoCn8E$w8TedpgE)@cVQSi+raF8?YJ8oURkjQ)I z2rNK~74o|;N$4g}V~0TSrnm5+17-j-QFcrfzj!kjHG zA4z16=?Xr?q@YXKmnWUcM?{q*^23OU?~2guJk<9s=ilOOP8%H;)#KP|p5*&tO2PIU zn!dm@slB^1dgT8Z!x72Y%5aozI65J{_l-?-sgh4kU@+l`j-|(FvpP86*Z(Ye7BUh6V`m^^Jj;m0wT69=Rj*A6& zxJAfDbIT;GHYEUP~%_aOxoxi_l!=D|P zI4tS)n)}xWpVXOM?Cbac&S~lpv89Es(`QXd_3lm@@0VDYPTLm`%q0TH-mhGqc3_Dcyy7+f zdD5QT#{6s2vba7=cKvsgW&au`;OU>o}QxJNO#t8*-2R1L(UbSKdjH5|Gr71mVDxwKc^_fa;FpDmA$1*B^XN6;?@ytb0G)V zi1I2gLlVO!9zee9_(e^G?h` zECR*Xm4b4UwGss<0u{9eI>!KRR@Eu-Fm9p9hf9<+DQGd}K(=`1VAud~Q&yJ^OxN&m z-SJorfwmL8w^;@vR77rii>t@jCE|+sZK=ur=HBvU*B)F?Nf0YWrI145cQvdCkPd0; zVyL%D7V=b_1=5al959G9u%lz7oH<`433YWS)INmD0}-I`;cswqC&n4*|F)tu}i)AyvwuIvdh{6*67;NF;bq4Ra5I1-Fn;uBlY_Iq%mz zq)G%-pRTB9RA+#zp31ceO6|5f)?89sS@hPrHN%xO+#8>WSkzR^d8TiwfFvwZJ3yL` zOmOhi+xR*(ayW0ahmi11g>UgXepdcC?UveJ*A6?BUlH7Qf5DJI=pKeg>i(toTs!@! zhNybewTCnIR6n0cN4WtDwR%ctz&^Gu)Ph^~_}~Q+Bvd~}U=_AMzQYLpm_6Lk^AGq;38DZu0ar4_eUl>GfD)N$zAf}{! za{Ay{*(n!qN@kO;wkw_$ok9A$KU0}~saSG_q1$0!aoDl#J51;7VRFs!_kVqm(YRA( zur?&y2h?cXW!2iNW2UjA_WIJhMvc$e@o4P6a!)Ruo$3|R0DV2<1yP-U_+@@88_48z zkLYArWlAmCV88e43_!mb00y>N(OfFL*{dg@TBEm~ZSYOtibHi~?Cwg1JISZ4_ zy&8^@d;+0*OJ3F6#D)vEb-y~?#`em2-6Svta8Qf=NroPxY?5p6*|;?BORfZpDFDxH zy(6C%h;POxo(y1BoM9(}FuY}@9y%xI*~WFz)I-x#_$qU5vy1*P7;(W>6r;x7@;|64 zqjMwgC_vgI53#IiOTSc+YiLT)aw}FRU%e%}upP}7`G|vYMBd)^(8UY1f!<{8ga#?6 zt6HMg@}sC;!&iMW8Qy$Y6(7^8ok`vewdSX0rNMqmO~WXveG2Ggo&EJKGn&0pr19an zis1L0NOwoB619mUpf&gHc!_9q&V*;_X6_16l|Ghd^7{VdZ)@(TP1Q^WM8p&vKHgDU z<#`h#8&h~X&Lw|TQ~oA`B&O*1CoU9D?wd&RwnAJPXK9MssQ{6-lD#l)#W9}ggt*pH zs?VItHxnn4eA087e(l~=;MI3XZ7UzL%$`Xv73i&zbgG@* zIBKhEzTnX{aG5O$5Uo<4;1qiEa;{S9q((QX*04%_zSjJt)^wuQxFgZXMR2vwhPcjj zNPVFt_vERwR-O6c=t6tfNxcW9D(YVlobB~tu=>|x<6ra2HHDMCo~{Uq{?YMraR0G< zyS@;N%*=leE`N_K#3UsD7Fqr?ub2u&y@dVG2<{;TiXG+EvL&A;XlMKwjlOQJkq+0} z4z$f^hE#ME+C{HgFA^8vhT5R3H41U=1WDB1i~?7HAP_((-E|%ZXmNGeH*|`xv9?ma z4kg7vi;IO6k%pIBREzK}=T&&1eM~v-M{(@?EY`txXa~9HNI&S~03(~1%y59PeH;2hsl%AjZyMIp$aFwcd5xSrpe8~-7D00v5c6;W{UA^qgyP< zi`?mXrtM)F2?^2N23?=QojEe|ySq{WDtH74%d6pJOux$}!7!UBk}Omg4+(p0qSF){ z`lYPnCPD~!p?nVG)&+%Aom9esBQkCb&W^xlq2>_>5{o8a($xcgpEwjLf<-wDV{k=_ zizCjGoQtDr^${#!ur6vfj^R{g6+EPsz8ufnyvrK?$>Dg_M@aj4LyeDsJu-w{n;i?{ zVah011U;-aNC7dZS!3kIT?|9$Z6zF%k%%eUV3})4cb&7%*~&si3fV_+HRL$vQ@GUV zrXcxUoHSjRhEV|z0*Z3sl2ZK>imw|s~l*|FJzYxwejCiz+UlV~&bs(b;p{p~`o zlVFx=HjZlUaz!d$ctv^K;EXCDbT#FwlH}>Y8D^(={nk^_X8%Z5D7b+@T!!oB`kSnK93RL7N?1$8&I9`vbdfYPV(F1lE;w+h4* z-Lz&L83@;wCV7T$Dkb}mJbbwB*mKBVHH^-K2>6#pY8nYD5HP&s&{kFO3n&(V4b!zi z5W3E~<0A3%yVnm*u)-=79c`3WxWr!Q=}_bFnfYfc$0#VZrV4x(ob+sNNrQOx<~)0M zx%hjH>+k0TgK%++w(sl}@%64MUF$u{xtjyK_ONcECDWlYBWT@*S<`$u>`nuvg@;ko z;yaT2?0yD3As-g!&sySyjUYtD{?I1^ZzWYMBCYjs(y7Ib_xw3?KY(zN7?3#5CsNk=L0DDr^mN!xtOs{-q{#x2@y*stMo&#;g;cvoGeKVKW?M%BexFr0lj z+r;89qKaBIGJ-j~JS~O8bRj*{c$8uEn7g{)I~erTXi*1z4ERMPQ8-h`>rnda^7-RGu^(ZpjpmxJSuvy*@bFS+d+Yh>&J`px1W z(h_$H1{>I6=kJNGT+RpL0cANp#HwC=QwhuF%NITzZR!NpCRYnPsCq zQ!o$b)^NUN4=Y!`!X!T~H$n1@sN=?_W{%ry2-S>e2gIZm5;-WLct-U_V$v%$x8!td zMvV_QlO3hY`7B08%_>_m+xa;JeQ8InzO|(F{dC}r<{4KfZ_Q4T<`ki?8Fyf9$(dwe z7cJWxa?!u}WTD3q(ORP=GC-dE;pz6RA2izXKCSt`>8p^_JX-#vsRf@c?fKVu)D&1( z3(v=^WY0$Q-b7q}F9L|GQF!W8QFO<}SB6ets?n)9spArOQnezN`gEfCaVgD2wel@< zz2Mx$!pxu5ILhiXskz7H+*&p2CZjW%UB?wdNi~{IyatiiQuntN^FLJl?({2Lm)}t7X?u(MTUNxBwhVFeJI6pPE5QRIbGBWFjOv zHZmWF%$WgZz&TZh1T*|hXmgnX>Eb<9z@{j9-!w7M#Jn2u z2jp783p18er=I~ppdi2tFgR2L+Y`$}y=EKLDm)2ECYK@ybYC)cvN8x!eN!31tKjrh zmy@#{qauYA60Hh5CxVMPd*}l|v$F`{MqI+%r`zL5Pi8C3s;@^Zq4Jy4U-WB{&k4!n1JJ2cA1S91rC zv)mnxo)$&Qfqlvu8GKB$;`#!DGD-St3>Jz@>EUPQaB|$>VH-(&YD!KjKsMr)%V-3G z>c(B8@?ejw_l_5HWDTloS5{wDUHSa-Z9S=NusXQx=y_B?R@T`JOyDx_O@&LCkbXSj z){PC)kNoE|DND~3jdnoU6)*_C`LX(#d;pX5^S3`s*7fUA&afmU~QzrKxtc7ivZUP;4V zP%!p9y_+O6WjacKCFwUz-`;nCxw$VW4^w4se=62iKX*TvP7QIqdGaEP9pJ|kEqs<* zkqXo2h=iCSaVSq|GYqxvfXis7+rRbSu*E!(X{9oQVVd0M#{^kf9uWux$(@x5#ojeb zAi67&^YHUv?7n2l+0`XiooUJA_&Q-$c(n6NmIkQ1YPz8#{+yM13A zzCK!_xJR7;do5C{^O#PwjLv)Dm1x7)BrcbYAFHY=;-%in{^NEGUv`ybF3C82K3%K$ zyA)LFwTeqWWT6;QeZ=3Ag0UZFV^dR8`t}u*!LZ4Gb7VxzrzN%Ur#-s@&!}>0OL~Gd z2QPljsL}7{jD|Tjemk=vvl;T__MR;|-x`gZ-&(S4esT!4a*x}3eocKH#vzi%Gv*-D znmHN9DOkocVWr=i+tn8=q&Df3`#pbGvr1}FQd^dDwczM+mGq9< zn~f;A;f;k+rrAsxPUrA|PxDjpFd z9K|&gNmuwSU9#BKs7l|0bIRozH-MurW;i@LV`owaz%f=MC;ZxvR3))id_Ev_tFiYC zWAG}Qb*0LNw%2nLJD~JIPLx3YSI>JD_=WPtBj=?X(I$NNe_HtN^pE6nu`;2}yqzDH z;~9Sr!ze&;U3KpG<>%U%04>ay_4RZDx{E}J!O5hijr|!-Qn-!;9gF#>_+38Jo@M0c zn7%rTj>KNq)uMhfqN_#0sYdxa&}%mp^tm*wLN%J}Nb|SM+4r1-=;u8`H*_!Xsyi4S z{1R583EnNZR$AX!gi!Y6OlP_gOJt_VFlqm{)WMvE z!}Q+x$;0VrUML5jX!#mBnDH-kuGHN3&|@ zsa+UU;Vvw1$dUp!GMn>JED>k(M&;t8lLfT!qd-vi8naY#2QG_D9TDjD{x>tY>LEq2 zik&U9i(+YddcUN-b3|^ZvjY?Eo`c@;Jj@EDq}D|RLR)VZ_>`7_LgpH}r9@$1&c>*~Ls-L(0 zsjZe|AEou`K*K)w(LXy7)CQxuGoG{i&m&aLE|yXU?`BA)3|Os|8=&!H_*-7HdQ06e z-qrI*53};2zA5A08B5oMAhABf1Wh@ZfkUc!Lv2aM0PI+1NnT?gYRGQ}I7mda)~#^V zi>i~*58kw9`o-@LXgNW?s+$(Ei)n&seoVzmulc7gpzv(4wK!jwzuRg24ioWJK2Q%F zxJk|hm!U2%gCZYxHKs2dxY>o{nn-6Z+K`R zy?XAJmKqaTftXoxFdB~m36hH^jLG_3)g4Q@QIQwH9O(MM$nQ(?@4lriTr`6Su6Jm1 z{+2{d-xN6gJtSn#>V`eTSK80Nx+Vy?v1lFSoHcw`!l6j_1QoerI8O+Q5VdZM#-PvP zibj3kU#Sq^ktfC!okZc?ia}L-+p961)98YJ|Eb5G8l@m@a6(Mv94*|1&~8A9!Q8{LoDSlK`CRANef zqEE)aMxR5YeAt|j5;o3W6xc0g-SWr`v_f~wMOrR(EA0-u2G^~<{8o4JjD+Jd9zNB< zDQwG=r{h~Lo;73EsqtBTM4a?2JmdFVakF1*R(8S@G#sRSIflb3MT5yFT+AtQ$9pQp zo7KiWLJZjEe^yGckWYH&-elR5u9Ct}o%C;LEjX0slHQP<44(O(ciOWf{=Mem8@F$* zMYBJ-P(?gbk-V+NxMH006ujfHB6C?J;njj{yn4p^ZKY{F+{!XJ6G^THWlX;uR21l@ zQc}~4Ic4_b3~KdbTiPm!!+A7WcxQ98({t9wYP17KXA3W{s|Mm)-FWr6Qo57tqMMhM zZ{YumUuup1&7A+E68>LaIXUaff&Z$6h58i||M;B)bwqlLCkpE+<*K| zL?jL{oX+#DLMs+@U5YiWZp)F%Mw9S2`C>3ZWj7Zc4|Ag-|ltxx>vwfC(C6?o5VOkyxmhoC-rdm7?jZT8@BB2DFdv7$He^ z(u7yL(+Uw~6X&ms(>+LgB%3Hk?5W#xXgZhuuP~JV>l%-BZMfB?+(+m<)zz6bTw3#M zhaA5u8Z8hU^^&wN;EHK5a$)Ud@{3@G$dgN?=vk56E=Yo2-U~Wk1R6;RL`FSk+-CI0 z-{V4r5~mKKdh_anTp;jjwRx64L3^cRSw*LPzM!NU z%B9C4gRCg`8Er*b)QDP6feP(qwl5ve(oQ8}kDA@uHwtjotZToD-7VC3z2IE)SnM4y zERBhh(m8XT*EBogLp*Plu)t_aLXTjLyGbv3-hL`~q1Zv2UCW?*o3LES;~xxyq;rJ8}Bk^G>%ZxNDVqOKiH`V10C@zU07460W$cS z_j^_K-Wl0*)MU)|lXJLR^*<}v5>%nGGy1IcTHWG?ddMp}y#WHYSR)YLW18;|c`1G# zbw3_q2gYv>Jw{E?M7sG-CJMj({&0nL@S8Pwvph{3NeTEV%9H*|pVb+Iq=MAkj=!pE zIuV}$w8rI!!Cv9z?MpYIa4%(rTq2QKx5f_v?+`A$wVPXhWZJ>#|Y8_o=q~; z45zO7jj?-A;Y3fIC&iL9@vg<{6sBFj_@V0DOnXtesC?Ii;Szu#Y@AkcZ5zJqt^dvq zY!dG;{Jui4cR~KC=B6_m1kX-7^UX zyw30W1J3_&zwXcXx~}(iCBTq4kapwQF*S>)Pa1#haKA`H3{bP7PE5+pPH%we0hJ%~ zRI+0~->OBu&rBn3DE|yQl#`7DF&xi>k z?-)*M?{O0oPD*6Yd7;}7ZUkC<COHXu;3tEY&!i!5x>Q;i?JKFykXGyCEtiLP<) z<%mL@)|8&^p@OP1M4Pudp^NmBQTPXF+*P*y>>iqhDqea8$~h~DC+%pK_LYcVqV2Kp zZpte8X}4uFG~EAmFX!H>iR6%e|7HkF%4C5A} zHa65!lAm}rrdYsPdGWnm-r%C>Igj}f-$F~t>HT%}*^gPllbOZ4!gfm5cCW)1ZV2x* zY-oN@Jj%GW_pMa!s~E*%VZpQPmvJhH>zw6cj#Jz(S1uBh6EK`e2>n*f=2&x4$$la= z2vNcJOZ+0mdyl1f?^K!+hM>C1oV`Z`+2>-$SGmRtCbNqvk+3=?685D;!h=60Fpd&a zBCLZA=^v&vqRjG~pN?3mn=MS6H zQyZ>{8O;yd{}l;Ky){V=|3@Tz__)U8;h&LkT__R+`ll82H&gpBHx;k}+91j>%HLKH zr7J-EbCn3eOa-8V07{`9%7rv&K@C$@iRc_qiZ~NM)a{dT0)QL6FB`_Shx(~@@ zf&(O+`2(#SCXQNiEsEi6!zXE+G3cEPTH~p>{Vjf=pWVF-S>4;4A^1=K=nL= z=!E2;Iy(YTw+H1!kv>#$NMge@l7F34*^cLgqvi+68(cYOMNBrkK2y?y+2j_3pis45iHgfQVgmpT^I4%l_ z3QZ59;;JdN+8XNPfzTm$`EE@Lpznv06>z0-7Et*@(=&Q%0^!v91bFnCbv``lJcx1_ zICL(}>YO~Zd7mOC$wsojp#8%&L}LBY)d-04;9IchySsS?)>-HF}EZ-#c%q`jE%s!EHk5C*}R>GsF1dA^r^fgp(-@C>Opl-<;p|W_K5LHOU>B=LI*hB(_>(M*!h73=<>CqG>Nj0gc^aj zVy)NMjs;;+M|jB9zP;WVV-P9R z>J;^o{rN!zeO3qBh8EXp|6Iy1$7XL$z7t0a$mqkmp{Qq=Uq%YfK-meR2MSqt>3EwK z#tDFVkVFiv@m5BJv=FYzTsQ`O*#PF?%iK%5g|)nno>j$-$b~@PI0+qDDNj)GkiT7G z{X_ck8?!SQ;6-;;gW`3QN5XApREs~Eo1=8u59d?@ea#{2TMepjUFmmSW(g&S$`dC1 zr*xUw?Ip_ZoFcQP9|N{Qv7rlh*?wCBG#DIw+zIj|$kHm(p=HhXhKc#K(v3zdJp%z` zyLPs%Y)9`eyH(P1N>d5Kl0K}@gWP=M_bP~nBOPS}CGb7o7D{}D$u$~z@8ZmZ?@|wV zCX|jF<)!+fqCG74rCsOsAKl0LmQsDdw!{$Mb1;MSu7q}Py{QJ^E{8@f%DIh^pS&D# z=-%8=B9kC!PW_YkOBz1|&F-8$a>~%FOds}aycI)la>^qQVjzBrpl{(H5w-x{V0G~c z%(*)0PqKdM69JlloKtZ)3ePYe)$)k`Vy_hfuGk;G{h%BpeNLM$fE=yXSMuvLf3hPc z9g071PS$S|gXd~uM5{k8oq;Cw+*6Rb22;l|i9w1o7E_TobzB`PVQAQu<^-?-jF+6yMHi(@m{D(!I@j45^djhy%mFhj`7xV^o^^$_6!nEf4}=eud9-U zs@~z6lw{;dTcZnB!I46<@u2s;r*63+QPozdziSkkaB=i3ONK>Il zlnB}Od`4!=K7lS!!q~$eUNE^|MY%S{lxvemxi(T10Lg>`ASF=%qyq|oR5w9TY^|U$ zwdev{! zh4=F<^_64H^Q6{Bzk_<~BSZ6^W5uR;T@e?hLhKf@t+~xX`r6jf+)xssCAXE%UCAeV zG{{E0fhfV7uOgz5h` zQ)~3@ll^xJQ|lLexgPfqrgpFJ`~NYu6?y;fjQw4>`?nj&#Gb!J6Q%F)r)bj8pycJ0 zwjf0`ktqXxDAm72lelG-@ovj{?>$9`8u8|zju|bEM;=9bNrS>yAW#T5TqWcjs&(F3 z+`Ix*Vj6W5AWhd_sSbKdoOYXOa%RlF?!_j9OE$QG9w+9mf}1>hW<)+J_*(*)3l4Mb zVM15BAz%h^Uk(Lx0JiMviON;zr@6}vX)~U{xxR#`o^Im=qV-?1{1L;B1X}xEB|y-8 zj`n!yEZoIsfO5vX$1AR9rjf~je;hSW%#Y#y@ZJw)kRtXg9Zzq>c67_mM!s`Ce5Y~u z!YS6d^Mdv!)i*kEe~MP>{5V04GA#ZP-Tzrze)@{M|LzWvGds^lCGiOW-Ubbp;+&wn zn8RIB=pis?jwjvUM0|I!z18Gw6GrS452S29o$U<-8K$wcEWt~?`VT;M8t}2cuDi-t0 zxh8u1t05;|iEE*TdkA+BM+G$~Q~rtw>E2TjTTwJ4yIoc~H3B1YRl_t`)c-DLM2!iK z9fPQdEWBwAgxhmUlsZ4`dy}08mKXK*vUto9R`Wc}D-Zjt&&xcJon2Co(dKj*TS1II zC^Nxpt$VmUPU@&}i#s;-Hfd*9@w982NwW6I6$q$9n+-2mG?yD(W-lJsI&yP-E_pIn zEvHU5)94nmC1Xg^@)5mn_f=Td=AmDXuil=*Wn1tkcY1b^M!VaW)}v1+`GuDYwjMUq zwyl-|v1~lV%Fy^$8zT1*4X#zVd~FIumOPN}yF-f;w0iBA-`o#gOk%cp#2EV-1nav6 zygE|g$O3+HJ;qV_MltMZ%a5dx2EnZw@DT2zb`*+nNyHC`%!P?&~Rxb#4h5&TAx z?V57#ZO)wOIXi{oZ+cvX4lJ&&S&pHGAmNmZ67SN6lDAh!(5M&4n9~6VL-2Us#B}J% zbum->?)68c_;dXWfc4ddr~Ti&uI=jEnWeGmb7`a0)(g*IaG*+709PEy&oO$Ni7Iw2I>mF>$K1o>T?fn#j)IPs>@ zR@L`zM!e|F56J+v8dAEC=!F6>oS~jio*zWThP*E?>&+HAe=vzf9%aX% z%4GU3C)2p7_3N{B;Qd6xet_ z1MavHW4&$b`*cR{T$h5c!yA*x;e3Q>+Nj)7Aj3R4tCVA1KEyQHag^sse^mW5KK|J? zK6>?bBiBj)5-RM9j@J;z&n>$OO^`679ky-@qHG{l@;`%cVMCh@3@b%sTRlcZ7MkLW&blUe`$=>L1K;a{Gip;%1Oe--I6%D~V+SFAEzsVFO^RH*UhN&`G23JfQb zD=AZ?G}Lf)R$wS!ja4h3vrIImh(;6OJs&_C2I+gKA`OG9fJ(^%rbVR6Ml@xdl)5JA z4S;K~v$a`s#!DGDIHz*SpX~YAR|4{ip8;*iYeQ3IoM%D z0)fjUgEO!C$++m16h`3UdSrVAzWP4MI6l2hNq6)y+z91?tG(sG6eaF+jEKBsj$s;w%dn(pZ;?z64B%!@OqcG1aw7yzx z$XnDk(;HFl>@OG!R7d|-acVl!UdYShW`=D!KD0qQSE(`U*W0y)BKQHgT2=j%BQ|bU ztkSQWw!~-NaU9^mD!SRa`P_P0+wnH~S#Mu!DLIFc-YG}mk3jA(-ALMiCaaa>10mpb z*S?KDwX+f8*{YVtWG{-ByRPfbL*>r~tjWqa5Dk*@AyE`(slichcCI0=yg_k<7Q2|y zJyF5Uk}lr#ss+6C`@WODzL-oVAmr2ci0D6EsXU3Zwzqg8JSKfGCCG~jZuxp3+%~6w zX17(3LBsk>(A9gX!KBlYXGOsEtY6kW&i>SFW^%Tt`@v%oV?Q5J-HVdGK~}1de^Q>{ z)2XI=2l77LLhxNY=YXsUC1jA`az=en^k&M@Kd(gf3G>2~DYKoWTyl4{=t&U@?2%X7 zuFt94wUt?yy!O3^Nr*2JOfOHV0pB#+d4}c&^LK6{C%8M7Sm;XyzcOh6cnq?0ZXf5r z^nDt=Vx%G%w)Fj#O%SrdhKq^~Gpz~xAe5(dj8w@_2jc=m#Ev(NrjI8#v?%pb2oH{H zAHa0uc?NG)(A#|^t!T7E-NWevNT3VEwi*yQ5UP&blKob`No+(0*CTD^YqS{x2dMFwyp?-(sPBuGkM)N?wUEIOfCvN-!2ODA=O^JQ3TU& zJ6OFf*s;P7d0HYj&>RQ|Cakl}=M5>eh~tIEguX;SHPEr}&#e>|Rk9m0W|EgLiDkN` zQ)}?v`s;-U!UR#;j|PXeK{*k^1a2`38SxJyMv1~T{yEI`@9z2qfbbM4_qPoKq5fYR zgcabRMg47q(Bl5GL9WRwQpiRT3aA+V9~%T<*wz?yshPlQDY+xy`!(h;gPdh6vK57h zu?}GY%B&>b(Ac?A!^TyFUN`U{V^fD(8|DEYr^#TS8NwSTR>3}9b)57&5KyxN_4+19 zuH%)J=3r=f=mMl@Y6TeE;)Wh1@+v31nxOnFkcv#(T+TupNw;(8r0F@oL18dc+e!zb zkIy^{FZX`LO;1-CJ^RX)LF9pUZSP&NTjIyz18*-norBkDln2HdmfOk=swf{4%2Ewa z%}CBCJ#BQ4VpPoF(I585igi4RW#=N{G*&OZMBX7E#2T4QDLF2G^S~|b|w3dE9$}-5KN6_4j87! zW5-+2S`fq_Z!nRlXKhEyPFbrK&C^J0Uqc&-sAq$qRPsW8*kxLdv=(ULn)$891nvSp z1C>QcSmS(N$pyCY+0r5bcx@$6bhGdtyG(dCAt}hcrtBwMM{QXOm)lHHVC(6^<_&(m zb&*S-cyo%YVK>~e;podS^cIDxn-0;ta0{4$p{2Td0t{fO0#-iSqk3Q2T#>CT|W1LlDO`L zJ{ErA=w`AvV-~6`Kj@Yi^#Y$K-V?6URkCCV8wIeM+!M+lPK(V!uLQ`UA8wz% zoq%{eaC|xuVYGknEQ|ukfM7gjC~E(UpU;^tD`u;`tYFh(yA;C8bF@kuJBKolO)fe2 z?$&)jtfv4yZIad6Edoaik`m9I8VjM{}rqrw9*#psr<&{pcGb ztO@#aFOm4Z`Z%iglr}wBG)we#Q>mjf4B9wW@GU9#w;4+)3-KDwPCII`^BNet^zgnK zT)^FJy8BZ_KhX2i%w8PPu2^E50ApKvvfG5KL%f)tVp3r8qYEqVUO&z2CI+hT>@Ram W<@cYPbW1zQ65`&f>Bj-Uh5rGhQ*yTe diff --git a/resources/images/texture_displacement/mix_off.png b/resources/images/texture_displacement/mix_off.png new file mode 100644 index 0000000000000000000000000000000000000000..d6445d63147c738de68cb14e33b57705d9e8c26f GIT binary patch literal 2064 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 DB&$g6 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/paint.gif b/resources/images/texture_displacement/paint.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7fedc1a3b2caffb74604d400e8f7ec6b43aa347 GIT binary patch literal 113431 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%0Angc;|7;TA~Tw_PUQHWqR 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[yBf{u4bW8{L(xk+ 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 C-eE2P literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/painted_only_off.png b/resources/images/texture_displacement/painted_only_off.png new file mode 100644 index 0000000000000000000000000000000000000000..ac30fea631c44bb86238374e44340e538c6e0464 GIT binary patch literal 19078 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 literal 0 HcmV?d00001 diff --git a/resources/images/texture_displacement/painted_only_on.png b/resources/images/texture_displacement/painted_only_on.png new file mode 100644 index 0000000000000000000000000000000000000000..b8c01e1b13da92b3f13e738bf73e31042bf2b214 GIT binary patch literal 14085 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