648{
649
650 Int total_num_chains = 0;
653
654 if(total_num_chains<=2)
655 {
658 *retSampledLines =
NULL;
659 return polygons;
660 }
661
662
663
665
666
669
671 {
674 *retSampledLines =
NULL;
676 }
677
678
679
681
683 assert(diagonal_vertices);
684
685
686
688
689
693
695
696
697
698
699
700
701
702
703
704
705
707 for(
i=0;
i<num_diagonals;
i++)
708 removedDiagonals[
i] = 0;
709
710
711
712 for(
i=0,
k=0;
i<num_diagonals;
i++,
k+=2)
713 {
714
715
720
721
722
723
724
725
726
727
728
729
730
733
734 if(root1 != root2)
735 {
736
737 removedDiagonals[
i] = 1;
739
740
741
742 v1->connectDiagonal(
v1,
v2, &ret_p1, &ret_p2, &generatedLine, ret_polygons);
743
744
745
746 newSampledLines = generatedLine->
insert(newSampledLines);
747
748
749
750
751
752
753
754
755
756
758
759
760
764
765
766
767
768
769
770
771
772
773
774
776 for(ii=0, kk=0; ii<num_diagonals; ii++, kk+=2)
777 if( removedDiagonals[ii]==0)
778 {
781
783
785 v1->head(),
v1->tail(), d2->
head()))
786 {
787
788
789
790
791
793 }
794 }
796
798 v2->head(),
v2->tail(), d2->
head()))
799 {
800
801
802
803
804
806 }
807 }
808
810
812 v1->head(),
v1->tail(), d1->
head()))
813 {
814
815
816
817
819 }
820 }
822
824 v2->head(),
v2->tail(), d1->
head()))
825 {
826
827
828
829
831 }
832 }
833 }
834}
835}
836
837
838
839
840
841
842
843
844 for(
i=0,
k=0;
i<num_diagonals;
i++,
k += 2)
845 if(removedDiagonals[
i] == 0)
846 {
847
848
851
852
853
856
857
858
859
861
862
863
864
865
866
867
868
869
871
872
873
874 v1->connectDiagonal(
v1,
v2, &ret_p1, &ret_p2, &generatedLine, ret_polygons);
875 newSampledLines = generatedLine->
insert(newSampledLines);
876
878
880
882
883
884
885 for(
Int j=
i+1;
j<num_diagonals;
j++)
886 {
887 if(removedDiagonals[
j] ==0)
888 {
889
892 if(temp1==
v1 || temp1==
v2 || temp2==
v1 || temp2==
v2)
894 {
895
896
897
898
899
900
903 {
905 }
907 {
909 }
911 {
913 }
915 {
917 }
918 }
919 }
920 }
921
922 }
923
924
925
929 free(diagonal_vertices);
930 free(removedDiagonals);
931
932 *retSampledLines = newSampledLines;
933 return ret_polygons;
934}
directedLine * cutoffPolygon(directedLine *p)
void rootLinkSet(directedLine *r)
directedLine * insertPolygon(directedLine *newpolygon)
directedLine * findRoot()
directedLine * rootLinkFindRoot()
Int samePolygon(directedLine *v1, directedLine *v2)
monoChain ** toArrayAllLoops(Int &num_chains)
sampledLine * insert(sampledLine *nline)
GLfloat GLfloat GLfloat v2
monoChain * directedLineLoopListToMonoChainLoopList(directedLine *list)
Int MC_sweepY(Int nVertices, monoChain **sortedVertices, sweepRange **ret_ranges)
Int deleteRepeatDiagonals(Int num_diagonals, directedLine **diagonal_vertices, directedLine **new_vertices)
void MC_findDiagonals(Int total_num_edges, monoChain **sortedVertices, sweepRange **ranges, Int &num_diagonals, directedLine **diagonal_vertices)
static int compChainHeadInY(monoChain *mc1, monoChain *mc2)
Int pointLeft2Lines(Real A[2], Real B[2], Real C[2], Real P[2])
void quicksort(void *v[], int left, int right, int(*comp)(void *, void *))