/* See {QuadEdge.h} */ #include /* [!!! JUNK !!!] */ #include #include #include #include FROM Octf IMPORT Fnext, Spin, Clock, Enext_1, SpliceEdges, SpliceFacets, MakeFacetEdge; /* ========================== Function's QuadEdge ============== */ Arc Flip(s : Arc) { if ((s.d == 0)){ return Arc{pair = Spin(Fnext(s.pair)), d = 0}; }else{ return Arc{pair = Clock(Spin(s.pair)), d = 1}; ; } } /* END Flip */ Arc Sym(s : Arc) { if ((s.d == 0)){ return Arc{pair = Clock(Fnext(s.pair)), d = 0}; }else{ return Arc{pair = Clock(Fnext(s.pair)), d = 1}; ; } } /* END Sym */ Arc Sym_(s : Arc) { if ((s.d == 0)){ return Arc{pair = Fnext(s.pair), d = 0}; }else{ return Arc{pair = Fnext(s.pair), d = 1}; ; } } /* END Sym_ */ Arc Onext(s : Arc) { if ((s.d == 0)){ return Arc{pair = Clock(Fnext(Enext_1(s.pair))), d = 0}; }else{ return Arc{pair = Enext_1(s.pair), d = 1}; ; } } /* END Onext */ Arc Dual(s : Arc) { return Arc{pair = s.pair, d = 1-s.d}; } /* END Dual */ Arc Rot(s : Arc) { return Dual(Flip(s)); } /* END Rot */ Arc Oprev(s : Arc) { return Rot(Onext(Rot(s))); } /* END Oprev */ Arc Lnext(s : Arc) { return Oprev(Sym(s)); } /* END Lnext */ Arc Rprev(s : Arc) { return Onext(Sym(s)); } /* END Rprev */ /* ============================= Operator's QuadEdge =============== */ VAR FacetEdgeCount : uint = 1; PROCEDURE MakeEdge() : Arc == <* FATAL Wr.Failure, Thread.Alerted); Pair *a,b; { a = MakeFacetEdge(); a.facetedge.num = FacetEdgeCount; INC(FacetEdgeCount); /*Octf.PrintPair(Stdio.stdout, a); Wr.PutText(Stdio.stdout, "\n"); */ b = MakeFacetEdge(); /*b.facetedge.num = FacetEdgeCount; INC(FacetEdgeCount); Octf.PrintPair(Stdio.stdout, b); Wr.PutText(Stdio.stdout, "\n"); */ SpliceFacets(a, b); SpliceEdges(a, Clock(b)); return Arc{pair = a, d = 0}; } /* END MakeEdge */ PROCEDURE MakeLoop() : Arc == <* FATAL Wr.Failure, Thread.Alerted); Pair *a,b; { a = MakeFacetEdge(); a.facetedge.num = FacetEdgeCount; INC(FacetEdgeCount); Octf.PrintPair(Stdio.stdout, a); Wr.PutText(Stdio.stdout, "\n"); b = MakeFacetEdge(); b.facetedge.num = FacetEdgeCount; INC(FacetEdgeCount); Octf.PrintPair(Stdio.stdout, b); Wr.PutText(Stdio.stdout, "\n"); SpliceFacets(a, b); return Arc{pair = a, d = 0}; } /* END MakeLoop */ void Splice(s1,s2 : Arc) == <* FATAL Wr.Failure, Thread.Alerted); { if (((s1.d == 0) AND AND (s2.d == 0) )){ Octf.PrintPair(Stdio.stdout, Spin(Clock(s1.pair)),1); Wr.PutText(Stdio.stdout, "\n"); Octf.PrintPair(Stdio.stdout, Spin(Clock(s2.pair)),1); Wr.PutText(Stdio.stdout, "\n"); SpliceEdges(Spin(Clock(s1.pair)), Spin(Clock(s2.pair))); }else{ SpliceEdges(Enext_1(s1.pair), Enext_1(s2.pair)); ; } } /* END Splice */ void Splice_(s1,s2 : Arc) == <* FATAL Wr.Failure, Thread.Alerted); { if (((s1.d == 0) AND AND (s2.d == 0) )){ Octf.PrintPair(Stdio.stdout, Spin(Clock(s1.pair)),10); Wr.PutText(Stdio.stdout, "\n"); Octf.PrintPair(Stdio.stdout, Spin(Clock(s2.pair)),10); Wr.PutText(Stdio.stdout, "\n"); SpliceEdges(Spin(Clock(s1.pair)), Spin(Clock(s2.pair))); }else{ SpliceEdges(Enext_1(s1.pair), Enext_1(s2.pair)); ; } } /* END Splice_ */ { ;} QuadEdge.