MODULE TriangToX3D EXPORTS Main; IMPORT Triang, FileWr, OSError, ParseParams, Process, Wr, Thread; FROM Triang IMPORT Topology, Coords; FROM Stdio IMPORT stderr; TYPE Options = RECORD inFile: TEXT; outFile: TEXT; normalize: BOOLEAN; all: BOOLEAN; (* TRUE plots even non-existing triangles *) END; PROCEDURE DoIt() = BEGIN WITH o = GetOptions(), tc = Triang.Read(o.inFile), top = tc.top, c = tc.c^ DO IF o.normalize THEN Triang.NormalizeVertexNorms(top, c) END; WriteX3DFile(o.outFile, top, c, o.all) END END DoIt; PROCEDURE WriteX3DFile( name: TEXT; READONLY top: Topology; READONLY c: Coords; all: BOOLEAN; ) = <* FATAL Wr.Failure, Thread.Alerted, OSError.E *> BEGIN WITH wr = FileWr.Open(name & ".poly") DO Triang.WriteX3D(wr, top, c, all); Wr.Close(wr) END END WriteX3DFile; PROCEDURE GetOptions (): Options = <* FATAL Thread.Alerted, Wr.Failure *> VAR o: Options; BEGIN WITH pp = NEW(ParseParams.T).init(stderr) DO TRY pp.getKeyword("-inFile"); o.inFile := pp.getNext(); IF pp.keywordPresent("-outFile") THEN o.outFile := pp.getNext() ELSE o.outFile := o.inFile END; o.normalize := pp.keywordPresent("-normalize"); o.all := pp.keywordPresent("-all"); pp.finish(); EXCEPT | ParseParams.Error => Wr.PutText(stderr, "Usage: TriangToX3D \\\n"); Wr.PutText(stderr, " -inFile [ -outFile ]\\\n"); Wr.PutText(stderr, " [ -normalize ]\n"); Wr.PutText(stderr, " [ -all ]\n"); Process.Exit (1); END END; RETURN o END GetOptions; BEGIN DoIt(); END TriangToX3D.