mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-29 13:52:07 +00:00
Support extended triangle paint states up to 32
Extend TriangleSelector serialization to encode leaf facet paint states up to 32 by adding an escaped second nibble (12-bit path: wwwwzzzzxxyy). Implemented a push_nibble helper and an extended-prefix (0b1110) to signal the extra nibble. Updated deserialize, update_used_states and has_facets to decode the new format while preserving legacy behavior for 3..16. Adjusted asserts and state handling accordingly. Added a unit test and include for TriangleSelector to verify round-trip of paint states above 16.
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include "libslic3r/MixedFilament.hpp"
|
||||
#include "libslic3r/PresetBundle.hpp"
|
||||
#include "libslic3r/Print.hpp"
|
||||
#include "libslic3r/TriangleSelector.hpp"
|
||||
#include "libslic3r/GCode/ToolOrdering.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
@@ -126,6 +127,21 @@ TEST_CASE("Mixed filament remap follows stable row ids when same-pair rows reord
|
||||
CHECK(remap[4] == new_second_custom_virtual_id);
|
||||
}
|
||||
|
||||
TEST_CASE("TriangleSelector round-trips paint states above 16", "[MixedFilament][TriangleSelector]")
|
||||
{
|
||||
TriangleMesh mesh = make_cube(20., 20., 20.);
|
||||
|
||||
TriangleSelector source(mesh);
|
||||
source.set_facet(0, EnforcerBlockerType::Extruder32);
|
||||
const TriangleSelector::TriangleSplittingData serialized = source.serialize();
|
||||
|
||||
REQUIRE(TriangleSelector::has_facets(serialized, EnforcerBlockerType::Extruder32));
|
||||
|
||||
TriangleSelector restored(mesh);
|
||||
restored.deserialize(serialized, true, EnforcerBlockerType::ExtruderMax);
|
||||
CHECK(restored.has_facets(EnforcerBlockerType::Extruder32));
|
||||
}
|
||||
|
||||
TEST_CASE("Mixed filament remap keeps later painted colors stable when an earlier mixed row is deleted", "[MixedFilament]")
|
||||
{
|
||||
PresetBundle bundle;
|
||||
|
||||
Reference in New Issue
Block a user