MODULE TriangToX3D EXPORTS Main; IMPORT Triang, FileStream, ParseParams, RTMisc, Wr, Scan, Stdio, Thread; FROM Triang IMPORT Topology, GetCoords, ReadTopTri, PutWire, Coords; FROM Stdio IMPORT stderr; TYPE Options = RECORD inFile: TEXT; outFile: TEXT; all: BOOLEAN; (* TRUE plots even non-existing triangles *) END; PROCEDURE WriteWireFrame( READONLY t: Topology; READONLY coords: Coords; filename: TEXT; all: BOOLEAN; ) = <* FATAL Wr.Failure, Thread.Alerted *> BEGIN WITH name = filename & ".poly", wr = FileStream.OpenWrite(name) DO PutWire(wr, t, coords, all); Wr.Close(wr) END END WriteWireFrame; PROCEDURE Main() = BEGIN WITH o = GetOptions(), t = ReadTopTri(o.inFile), coords = NEW(REF Coords, t.NV) DO GetCoords(t, coords^); WriteWireFrame(t, coords^, o.outFile, o.all) END END Main; PROCEDURE GetOptions (): Options = <* FATAL Thread.Alerted, Wr.Failure *> VAR o: Options; BEGIN TRY ParseParams.BeginParsing(stderr); ParseParams.GetKeyword("-inFile"); o.inFile := ParseParams.GetNext(); IF ParseParams.KeywordPresent("-outFile") THEN o.outFile := ParseParams.GetNext() ELSE o.outFile := o.inFile END; o.all := ParseParams.KeywordPresent("-all"); ParseParams.EndParsing(); EXCEPT | Scan.BadFormat => Wr.PutText(stderr, "Usage: TriangToX3D \\\n"); Wr.PutText(stderr, " -inFile [ -outFile ]\\\n"); Wr.PutText(stderr, " [ -all ]\n"); RTMisc.Exit (1); END; RETURN o END GetOptions; BEGIN Main(); END TriangToX3D.