From df578d77644cbcaf14982e132c934aba92246396 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Wed, 1 Apr 2026 21:15:44 -0700 Subject: [PATCH] [PolyCollection] copy vertex offsets when making normalized form --- masque/shapes/poly_collection.py | 2 +- masque/test/test_shape_advanced.py | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/masque/shapes/poly_collection.py b/masque/shapes/poly_collection.py index cd233ba..6c23da7 100644 --- a/masque/shapes/poly_collection.py +++ b/masque/shapes/poly_collection.py @@ -219,7 +219,7 @@ class PolyCollection(Shape): (offset, scale / norm_value, rotation, False), lambda: PolyCollection( vertex_lists=rotated_vertices * norm_value, - vertex_offsets=self._vertex_offsets, + vertex_offsets=self._vertex_offsets.copy(), ), ) diff --git a/masque/test/test_shape_advanced.py b/masque/test/test_shape_advanced.py index 2dec264..350e8f0 100644 --- a/masque/test/test_shape_advanced.py +++ b/masque/test/test_shape_advanced.py @@ -212,3 +212,27 @@ def test_poly_collection_valid() -> None: assert len(sorted_shapes) == 4 # Just verify it doesn't crash and is stable assert sorted(sorted_shapes) == sorted_shapes + + +def test_poly_collection_normalized_form_reconstruction_is_independent() -> None: + pc = PolyCollection([[0, 0], [1, 0], [0, 1]], [0]) + _intrinsic, _extrinsic, rebuild = pc.normalized_form(1) + + clone = rebuild() + clone.vertex_offsets[:] = [5] + + assert_equal(pc.vertex_offsets, [0]) + assert_equal(clone.vertex_offsets, [5]) + + +def test_poly_collection_normalized_form_rebuilds_independent_clones() -> None: + pc = PolyCollection([[0, 0], [1, 0], [0, 1]], [0]) + _intrinsic, _extrinsic, rebuild = pc.normalized_form(1) + + first = rebuild() + second = rebuild() + first.vertex_offsets[:] = [7] + + assert_equal(first.vertex_offsets, [7]) + assert_equal(second.vertex_offsets, [0]) + assert_equal(pc.vertex_offsets, [0])