@@ -541,3 +541,84 @@ def test_cleanup_closepoly():
541
541
cleaned = p .cleaned (remove_nans = True )
542
542
assert len (cleaned ) == 1
543
543
assert cleaned .codes [0 ] == Path .STOP
544
+
545
+
546
+ def test_interpolated_moveto ():
547
+ # Initial path has two subpaths with two LINETOs each
548
+ vertices = np .array ([[0 , 0 ],
549
+ [0 , 1 ],
550
+ [1 , 2 ],
551
+ [4 , 4 ],
552
+ [4 , 5 ],
553
+ [5 , 5 ]])
554
+ codes = [Path .MOVETO , Path .LINETO , Path .LINETO ] * 2
555
+
556
+ path = Path (vertices , codes )
557
+ result = path .interpolated (3 )
558
+
559
+ # Result should have two subpaths with six LINETOs each
560
+ expected_subpath_codes = [Path .MOVETO ] + [Path .LINETO ] * 6
561
+ 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 )
620
+
621
+
622
+ def test_interpolated_empty_path ():
623
+ path = Path (np .zeros ((0 , 2 )))
624
+ assert path .interpolated (42 ) is path
0 commit comments