#include #include "libslic3r/TriangleMesh.hpp" #include "libslic3r/TriangleSelector.hpp" using namespace Slic3r; TEST_CASE("Triangle selector round-trips painted states above sixteen", "[TriangleSelector][MMUPaint]") { indexed_triangle_set its; its.vertices = { Vec3f(0.f, 0.f, 0.f), Vec3f(1.f, 0.f, 0.f), Vec3f(0.f, 1.f, 0.f), }; its.indices = { stl_triangle_vertex_indices(0, 1, 2), }; TriangleMesh mesh(its); TriangleSelector selector(mesh); constexpr int painted_state = 120; selector.set_facet(0, static_cast(painted_state)); auto data = selector.serialize(); REQUIRE_FALSE(data.triangles_to_split.empty()); REQUIRE(data.used_states.size() > painted_state); CHECK(data.used_states[painted_state]); data.reset_used_states(); data.update_used_states(size_t(data.triangles_to_split.front().bitstream_start_idx)); CHECK(data.used_states[painted_state]); CHECK(TriangleSelector::has_facets(data, static_cast(painted_state))); TriangleSelector restored(mesh); restored.deserialize(data, true, static_cast(painted_state)); CHECK(restored.has_facets(static_cast(painted_state))); }