MODULE Tools; (* This module contain procedures "tools" for tests and others miscelaneus procedures. Created by L. P. Lozada (see the copyright and authorship futher down). *) IMPORT Wr, Thread, Map3D, Triangulation, Stdio, Fmt; FROM Map3D IMPORT Handle, nextE, nextF, DegreeFaceRing, DegreeEdgeRing, prevE, Flip, prevF, PrintHandle; FROM Triangulation IMPORT Org, DegreeOfVertex, Pneg, Ppos; FROM Stdio IMPORT stderr; PROCEDURE PrtDFR(a: Handle) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN PrintHandle(stderr, a, 5); Wr.PutText(stderr," " ); WITH n = DegreeFaceRing(a) DO Wr.PutText(stderr,"DFR: " & Fmt.Pad(Fmt.Int(n),4) & "\n"); END END PrtDFR; PROCEDURE PrtDER(a: Handle) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN PrintHandle(stderr, a, 5); Wr.PutText(stderr," " ); WITH n = DegreeEdgeRing(a) DO Wr.PutText(stderr,"DER: " & Fmt.Pad(Fmt.Int(n),4) & "\n"); END END PrtDER; (* PROCEDURE PrtDFE(a: Handle) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN PrintHandle(stderr, a, 5); Wr.PutText(stderr," " ); WITH n = DegreeOfFaceEdges(a) DO Wr.PutText(stderr,"DFE: " & Fmt.Pad(Fmt.Int(n),4) & "\n"); END END PrtDFE; *) PROCEDURE PrtDOV(a: Handle) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN PrintHandle(stderr, a, 5); Wr.PutText(stderr," " ); WITH n = DegreeOfVertex(a) DO Wr.PutText(stderr,"DOV: " & Fmt.Pad(Fmt.Int(n),4) & "\n"); END END PrtDOV; PROCEDURE PrtnextE(a: Handle) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN PrintHandle(stderr, a); Wr.PutText(stderr, " nextE(a): "); PrintHandle(stderr, nextE(a), 5, TRUE); END PrtnextE; PROCEDURE PrtnextF(a: Handle) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN PrintHandle(stderr, a); Wr.PutText(stderr, " nextF(a): "); PrintHandle(stderr, nextF(a), 5, TRUE); END PrtnextF; PROCEDURE PrtOrg(a: Handle) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN Wr.PutText(stderr,"a: "); PrintHandle(stderr, a); Wr.PutText(stderr," Org(a): "); Wr.PutText(stderr, Fmt.Int(Org(a).num) ); Wr.PutText(stderr,"\n"); END PrtOrg; PROCEDURE PrtFaceNum(a: Handle) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN Wr.PutText(stderr,"a: "); PrintHandle(stderr, a); Wr.PutText(stderr, " a.fe.face.num(a): "); Wr.PutText(stderr, Fmt.Int(a.fe.face.num) ); Wr.PutText(stderr,"\n"); END PrtFaceNum; PROCEDURE PrtEdgeNum(a: Handle) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN Wr.PutText(stderr,"a: "); PrintHandle(stderr, a); Wr.PutText(stderr, " a.fe.edge.num(a): "); Wr.PutText(stderr, Fmt.Int(a.fe.edge.num) ); Wr.PutText(stderr,"\n"); END PrtEdgeNum; PROCEDURE PrtPnegNum(a: Handle) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN IF Pneg(a) # NIL THEN Wr.PutText(stderr, " "); PrintHandle(stderr, a); Wr.PutText(stderr, " Pneg.num: "); Wr.PutText(stderr, Fmt.Int(Pneg(a).num) & "\n"); (* remenber Pneg(a) = Org(RevE(Dual(a)) *) ELSE Wr.PutText(stderr,"Negative Cell not exists\n"); END END PrtPnegNum; PROCEDURE PrtPposNum(a: Handle) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN IF Ppos(a) # NIL THEN Wr.PutText(stderr, " "); PrintHandle(stderr, a); Wr.PutText(stderr, " Ppos.num: "); Wr.PutText(stderr, Fmt.Int(Ppos(a).num) & "\n"); (* remenber Ppos(a) = Org(RevE(Dual(a)) *) ELSE Wr.PutText(stderr,"Positive Cell not exists\n"); END END PrtPposNum; PROCEDURE PrtNextPneg(a: Handle) = PROCEDURE NextPnegof(a: Handle) = VAR h: Handle := a; BEGIN REPEAT PrtPnegNum(h); h := prevE(h); UNTIL (h = a); END NextPnegof; VAR t: Handle := a; BEGIN NextPnegof(t); REPEAT NextPnegof(Flip(prevF(t))); t := prevE(t); UNTIL (t = a); END PrtNextPneg; PROCEDURE PrtNextPpos(a: Handle) = PROCEDURE NextPposof(a: Handle) = VAR h: Handle := a; BEGIN REPEAT PrtPposNum(h); h := prevE(h); UNTIL (h = a); END NextPposof; VAR t: Handle := a; BEGIN NextPposof(t); REPEAT NextPposof(Flip(nextF(t))); t := prevE(t); UNTIL (t=a); END PrtNextPpos; BEGIN END Tools. (**************************************************************************) (* *) (* Copyright (C) 1999 Universidade Estadual de Campinas (UNICAMP) *) (* *) (* Authors: *) (* L. P. Lozada & J. Stolfi - UNICAMP *) (* *) (* This file can be freely used, distributed, and modified, provided that *) (* this copyright and authorship notice is included in every copy or *) (* derived version. *) (* *) (* DISCLAIMER: This software is offered ``as is'', without any guarantee *) (* as to fitness for any particular purpose. Neither the copyright *) (* holder nor the authors or their employers can be held responsible *) (* for any damages that may result from its use. *) (* *) (**************************************************************************)