Mercurial > hg > orthanc-stone
comparison UnitTestsSources/ComputationalGeometryTests.cpp @ 1876:b1f510e601d2
more unit tests
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 11 Jan 2022 21:26:47 +0100 |
parents | b896f20d24ca |
children |
comparison
equal
deleted
inserted
replaced
1875:b896f20d24ca | 1876:b1f510e601d2 |
---|---|
575 fclose(fp); | 575 fclose(fp); |
576 } | 576 } |
577 #endif | 577 #endif |
578 | 578 |
579 | 579 |
580 TEST(UnionOfRectangles, Complex) | 580 TEST(UnionOfRectangles, EdgeCases) |
581 { | 581 { |
582 { | |
583 std::list<OrthancStone::Extent2D> rectangles; | |
584 | |
585 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
586 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
587 | |
588 ASSERT_EQ(0u, contours.size()); | |
589 } | |
590 | |
591 { | |
592 std::list<OrthancStone::Extent2D> rectangles; | |
593 rectangles.push_back(OrthancStone::Extent2D(3, 3, 4, 3)); // empty rectangle | |
594 | |
595 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
596 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
597 | |
598 ASSERT_EQ(0u, contours.size()); | |
599 } | |
600 | |
601 { | |
602 std::list<OrthancStone::Extent2D> rectangles; | |
603 rectangles.push_back(OrthancStone::Extent2D(1, 1, 2, 2)); | |
604 | |
605 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
606 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
607 | |
608 ASSERT_EQ(1u, contours.size()); | |
609 ASSERT_EQ(5u, contours.front().size()); | |
610 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(1, 2))); | |
611 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
612 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(2, 1))); | |
613 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(1, 1))); | |
614 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(1, 2))); | |
615 } | |
616 | |
617 { | |
618 std::list<OrthancStone::Extent2D> rectangles; | |
619 rectangles.push_back(OrthancStone::Extent2D(1, 1, 2, 2)); | |
620 rectangles.push_back(OrthancStone::Extent2D(1, 3, 2, 4)); | |
621 | |
622 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
623 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
624 | |
625 ASSERT_EQ(2u, contours.size()); | |
626 | |
627 ASSERT_EQ(5u, contours.front().size()); | |
628 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
629 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
630 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
631 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(1, 3))); | |
632 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
633 | |
634 ASSERT_EQ(5u, contours.back().size()); | |
635 ASSERT_TRUE(contours.back()[0].IsEqual(OrthancStone::ScenePoint2D(1, 2))); | |
636 ASSERT_TRUE(contours.back()[1].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
637 ASSERT_TRUE(contours.back()[2].IsEqual(OrthancStone::ScenePoint2D(2, 1))); | |
638 ASSERT_TRUE(contours.back()[3].IsEqual(OrthancStone::ScenePoint2D(1, 1))); | |
639 ASSERT_TRUE(contours.back()[4].IsEqual(OrthancStone::ScenePoint2D(1, 2))); | |
640 } | |
641 | |
582 { | 642 { |
583 std::list<OrthancStone::Extent2D> rectangles; | 643 std::list<OrthancStone::Extent2D> rectangles; |
584 rectangles.push_back(OrthancStone::Extent2D(1, 4, 4, 6)); | 644 rectangles.push_back(OrthancStone::Extent2D(1, 4, 4, 6)); |
585 rectangles.push_back(OrthancStone::Extent2D(4, 6, 7, 8)); | 645 rectangles.push_back(OrthancStone::Extent2D(4, 6, 7, 8)); |
586 rectangles.push_back(OrthancStone::Extent2D(4, 2, 7, 4)); | 646 rectangles.push_back(OrthancStone::Extent2D(4, 2, 7, 4)); |
668 ASSERT_TRUE(contours.back()[2].IsEqual(OrthancStone::ScenePoint2D(2, 1))); | 728 ASSERT_TRUE(contours.back()[2].IsEqual(OrthancStone::ScenePoint2D(2, 1))); |
669 ASSERT_TRUE(contours.back()[3].IsEqual(OrthancStone::ScenePoint2D(1, 1))); | 729 ASSERT_TRUE(contours.back()[3].IsEqual(OrthancStone::ScenePoint2D(1, 1))); |
670 ASSERT_TRUE(contours.back()[4].IsEqual(OrthancStone::ScenePoint2D(1, 2))); | 730 ASSERT_TRUE(contours.back()[4].IsEqual(OrthancStone::ScenePoint2D(1, 2))); |
671 } | 731 } |
672 | 732 |
673 #if 0 | |
674 { | 733 { |
675 std::list<OrthancStone::Extent2D> rectangles; | 734 std::list<OrthancStone::Extent2D> rectangles; |
676 rectangles.push_back(OrthancStone::Extent2D(1, 4, 4, 6)); | 735 rectangles.push_back(OrthancStone::Extent2D(1, 4, 4, 6)); |
677 rectangles.push_back(OrthancStone::Extent2D(6, 4, 9, 6)); | 736 rectangles.push_back(OrthancStone::Extent2D(6, 4, 9, 6)); |
678 rectangles.push_back(OrthancStone::Extent2D(4, 6, 7, 8)); | 737 rectangles.push_back(OrthancStone::Extent2D(4, 6, 7, 8)); |
679 rectangles.push_back(OrthancStone::Extent2D(4, 2, 7, 6)); | 738 rectangles.push_back(OrthancStone::Extent2D(4, 2, 7, 6)); |
680 | 739 |
681 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | 740 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; |
682 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | 741 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); |
683 | 742 |
684 SaveSvg(contours); | |
685 | |
686 ASSERT_EQ(1u, contours.size()); | 743 ASSERT_EQ(1u, contours.size()); |
687 ASSERT_EQ(13u, contours.front().size()); | 744 ASSERT_EQ(13u, contours.front().size()); |
688 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(4, 8))); | 745 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(4, 8))); |
689 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(7, 8))); | 746 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(7, 8))); |
690 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(7, 6))); | 747 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(7, 6))); |
691 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(9, 6))); | 748 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(9, 6))); |
692 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(7, 6))); | 749 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(9, 4))); |
693 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | 750 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(7, 4))); |
694 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | 751 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(7, 2))); |
695 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D())); | 752 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(4, 2))); |
696 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D())); | 753 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(4, 4))); |
697 ASSERT_TRUE(contours.front()[9].IsEqual(OrthancStone::ScenePoint2D())); | 754 ASSERT_TRUE(contours.front()[9].IsEqual(OrthancStone::ScenePoint2D(1, 4))); |
698 ASSERT_TRUE(contours.front()[10].IsEqual(OrthancStone::ScenePoint2D())); | 755 ASSERT_TRUE(contours.front()[10].IsEqual(OrthancStone::ScenePoint2D(1, 6))); |
699 ASSERT_TRUE(contours.front()[11].IsEqual(OrthancStone::ScenePoint2D())); | 756 ASSERT_TRUE(contours.front()[11].IsEqual(OrthancStone::ScenePoint2D(4, 6))); |
700 ASSERT_TRUE(contours.front()[12].IsEqual(OrthancStone::ScenePoint2D())); | 757 ASSERT_TRUE(contours.front()[12].IsEqual(OrthancStone::ScenePoint2D(4, 8))); |
701 } | 758 } |
702 #endif | 759 |
703 } | 760 { |
761 std::list<OrthancStone::Extent2D> rectangles; | |
762 rectangles.push_back(OrthancStone::Extent2D(1, 4, 4, 6)); | |
763 rectangles.push_back(OrthancStone::Extent2D(4, 6, 7, 8)); | |
764 rectangles.push_back(OrthancStone::Extent2D(4, 2, 7, 6)); | |
765 | |
766 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
767 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
768 | |
769 ASSERT_EQ(1u, contours.size()); | |
770 ASSERT_EQ(9u, contours.front().size()); | |
771 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(4, 8))); | |
772 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(7, 8))); | |
773 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(7, 2))); | |
774 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(4, 2))); | |
775 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
776 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
777 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(1, 6))); | |
778 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(4, 6))); | |
779 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(4, 8))); | |
780 } | |
781 | |
782 { | |
783 std::list<OrthancStone::Extent2D> rectangles; | |
784 rectangles.push_back(OrthancStone::Extent2D(2, 2, 4, 4)); | |
785 rectangles.push_back(OrthancStone::Extent2D(3, 3, 5, 5)); | |
786 | |
787 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
788 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
789 | |
790 ASSERT_EQ(1u, contours.size()); | |
791 ASSERT_EQ(9u, contours.front().size()); | |
792 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(3, 5))); | |
793 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(5, 5))); | |
794 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(5, 3))); | |
795 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(4, 3))); | |
796 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(4, 2))); | |
797 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
798 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
799 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(3, 4))); | |
800 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(3, 5))); | |
801 } | |
802 | |
803 { | |
804 std::list<OrthancStone::Extent2D> rectangles; | |
805 rectangles.push_back(OrthancStone::Extent2D(2, 2, 4, 4)); | |
806 rectangles.push_back(OrthancStone::Extent2D(3, 1, 5, 3)); | |
807 | |
808 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
809 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
810 | |
811 ASSERT_EQ(1u, contours.size()); | |
812 ASSERT_EQ(9u, contours.front().size()); | |
813 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
814 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
815 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(4, 3))); | |
816 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(5, 3))); | |
817 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(5, 1))); | |
818 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(3, 1))); | |
819 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
820 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
821 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
822 } | |
823 | |
824 { | |
825 std::list<OrthancStone::Extent2D> rectangles; | |
826 rectangles.push_back(OrthancStone::Extent2D(2, 2, 4, 4)); | |
827 rectangles.push_back(OrthancStone::Extent2D(1, 1, 3, 3)); | |
828 | |
829 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
830 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
831 | |
832 ASSERT_EQ(1u, contours.size()); | |
833 ASSERT_EQ(9u, contours.front().size()); | |
834 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
835 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
836 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(4, 2))); | |
837 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
838 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(3, 1))); | |
839 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(1, 1))); | |
840 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(1, 3))); | |
841 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
842 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
843 } | |
844 | |
845 { | |
846 std::list<OrthancStone::Extent2D> rectangles; | |
847 rectangles.push_back(OrthancStone::Extent2D(2, 2, 4, 4)); | |
848 rectangles.push_back(OrthancStone::Extent2D(1, 3, 3, 5)); | |
849 | |
850 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
851 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
852 | |
853 ASSERT_EQ(1u, contours.size()); | |
854 ASSERT_EQ(9u, contours.front().size()); | |
855 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(1, 5))); | |
856 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(3, 5))); | |
857 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(3, 4))); | |
858 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
859 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(4, 2))); | |
860 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
861 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
862 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(1, 3))); | |
863 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(1, 5))); | |
864 } | |
865 | |
866 { | |
867 std::list<OrthancStone::Extent2D> rectangles; | |
868 rectangles.push_back(OrthancStone::Extent2D(2, 2, 3, 3)); | |
869 rectangles.push_back(OrthancStone::Extent2D(3, 1, 4, 2)); | |
870 | |
871 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
872 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
873 | |
874 ASSERT_EQ(1u, contours.size()); | |
875 ASSERT_EQ(9u, contours.front().size()); | |
876 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
877 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
878 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
879 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(4, 2))); | |
880 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(4, 1))); | |
881 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(3, 1))); | |
882 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
883 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
884 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
885 } | |
886 | |
887 { | |
888 std::list<OrthancStone::Extent2D> rectangles; | |
889 rectangles.push_back(OrthancStone::Extent2D(2, 2, 3, 3)); | |
890 rectangles.push_back(OrthancStone::Extent2D(3, 3, 4, 4)); | |
891 | |
892 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
893 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
894 | |
895 ASSERT_EQ(1u, contours.size()); | |
896 ASSERT_EQ(9u, contours.front().size()); | |
897 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(3, 4))); | |
898 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
899 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(4, 3))); | |
900 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
901 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
902 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
903 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
904 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
905 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(3, 4))); | |
906 } | |
907 | |
908 { | |
909 std::list<OrthancStone::Extent2D> rectangles; | |
910 rectangles.push_back(OrthancStone::Extent2D(2, 2, 3, 3)); | |
911 rectangles.push_back(OrthancStone::Extent2D(1, 3, 2, 4)); | |
912 | |
913 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
914 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
915 | |
916 ASSERT_EQ(1u, contours.size()); | |
917 ASSERT_EQ(9u, contours.front().size()); | |
918 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
919 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
920 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
921 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
922 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
923 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
924 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
925 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(1, 3))); | |
926 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
927 } | |
928 | |
929 { | |
930 std::list<OrthancStone::Extent2D> rectangles; | |
931 rectangles.push_back(OrthancStone::Extent2D(2, 2, 3, 3)); | |
932 rectangles.push_back(OrthancStone::Extent2D(1, 1, 2, 2)); | |
933 | |
934 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
935 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
936 | |
937 ASSERT_EQ(1u, contours.size()); | |
938 ASSERT_EQ(9u, contours.front().size()); | |
939 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
940 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
941 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
942 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
943 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(2, 1))); | |
944 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(1, 1))); | |
945 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(1, 2))); | |
946 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
947 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
948 } | |
949 | |
950 { | |
951 std::list<OrthancStone::Extent2D> rectangles; | |
952 rectangles.push_back(OrthancStone::Extent2D(2, 2, 3, 5)); | |
953 rectangles.push_back(OrthancStone::Extent2D(1, 3, 4, 4)); | |
954 | |
955 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
956 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
957 | |
958 ASSERT_EQ(1u, contours.size()); | |
959 ASSERT_EQ(13u, contours.front().size()); | |
960 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(2, 5))); | |
961 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(3, 5))); | |
962 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(3, 4))); | |
963 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
964 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(4, 3))); | |
965 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
966 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
967 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
968 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
969 ASSERT_TRUE(contours.front()[9].IsEqual(OrthancStone::ScenePoint2D(1, 3))); | |
970 ASSERT_TRUE(contours.front()[10].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
971 ASSERT_TRUE(contours.front()[11].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
972 ASSERT_TRUE(contours.front()[12].IsEqual(OrthancStone::ScenePoint2D(2, 5))); | |
973 } | |
974 } |