module Postscript(Output, draw)where
import Numbers
import Vectors
import EdgePlate
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Postscript driver for hiddenline program
-- Last update 14 Januari 92
type Output = String
draw :: [Edge] -> Output
draw ls = iniplot ++ plot ls exiplot
where
iniplot = "\nerasepage gsave 100 100 translate 0 setlinewidth newpath\n"
exiplot = "\nstroke grestore\n"
plot :: [Edge] -> ShowS
plotFrom :: Vector -> [Edge] -> ShowS
moveTo,lineTo :: Vector -> ShowS
flush :: ShowS
plot [] = \s->s
plot ls@(l:_) = moveTo (s(l)) . plotFrom (s(l)) ls
plotFrom currentPoint [] = \s->s
plotFrom currentPoint (l:ls)
| s(l) == currentPoint = lineTo (t(l)) . plotFrom (t(l)) ls
| s(l) /= currentPoint = flush . plot (l:ls)
moveTo v = shows (x(v)) . showChar ' ' . shows (y(v)) . showString " moveto "
lineTo v = shows (x(v)) . showChar ' ' . shows (y(v)) . showString " lineto "
flush = showString "\nstroke newpath\n"
|