@@ -559,3 +559,61 @@ def test_interpolated_moveto():
559559 # Result should have two subpaths with six LINETOs each
560560 expected_subpath_codes = [Path .MOVETO ] + [Path .LINETO ] * 6
561561 np .testing .assert_array_equal (result .codes , expected_subpath_codes * 2 )
562+
563+
564+ def test_interpolated_closepoly ():
565+ codes = [Path .MOVETO ] + [Path .LINETO ]* 2 + [Path .CLOSEPOLY ]
566+ vertices = [(4 , 3 ), (5 , 4 ), (5 , 3 ), (0 , 0 )]
567+
568+ path = Path (vertices , codes )
569+ result = path .interpolated (2 )
570+
571+ expected_vertices = np .array ([[4 , 3 ],
572+ [4.5 , 3.5 ],
573+ [5 , 4 ],
574+ [5 , 3.5 ],
575+ [5 , 3 ],
576+ [4.5 , 3 ],
577+ [4 , 3 ]])
578+ expected_codes = [Path .MOVETO ] + [Path .LINETO ]* 5 + [Path .CLOSEPOLY ]
579+
580+ np .testing .assert_allclose (result .vertices , expected_vertices )
581+ np .testing .assert_array_equal (result .codes , expected_codes )
582+
583+ # Usually closepoly is the last vertex but does not have to be.
584+ codes += [Path .LINETO ]
585+ vertices += [(2 , 1 )]
586+
587+ path = Path (vertices , codes )
588+ result = path .interpolated (2 )
589+
590+ extra_expected_vertices = np .array ([[3 , 2 ],
591+ [2 , 1 ]])
592+ expected_vertices = np .concatenate ([expected_vertices , extra_expected_vertices ])
593+
594+ expected_codes += [Path .LINETO ] * 2
595+
596+ np .testing .assert_allclose (result .vertices , expected_vertices )
597+ np .testing .assert_array_equal (result .codes , expected_codes )
598+
599+
600+ def test_interpolated_moveto_closepoly ():
601+ # Initial path has two closed subpaths
602+ codes = ([Path .MOVETO ] + [Path .LINETO ]* 2 + [Path .CLOSEPOLY ]) * 2
603+ vertices = [(4 , 3 ), (5 , 4 ), (5 , 3 ), (0 , 0 ), (8 , 6 ), (10 , 8 ), (10 , 6 ), (0 , 0 )]
604+
605+ path = Path (vertices , codes )
606+ result = path .interpolated (2 )
607+
608+ expected_vertices1 = np .array ([[4 , 3 ],
609+ [4.5 , 3.5 ],
610+ [5 , 4 ],
611+ [5 , 3.5 ],
612+ [5 , 3 ],
613+ [4.5 , 3 ],
614+ [4 , 3 ]])
615+ expected_vertices = np .concatenate ([expected_vertices1 , expected_vertices1 * 2 ])
616+ expected_codes = ([Path .MOVETO ] + [Path .LINETO ]* 5 + [Path .CLOSEPOLY ]) * 2
617+
618+ np .testing .assert_allclose (result .vertices , expected_vertices )
619+ np .testing .assert_array_equal (result .codes , expected_codes )
0 commit comments