module PlayTurbo where
import Numeric (showFFloat)
import Turbo
import TurboDef
-- Run a Turbo program (using your runTurbo), save the SVG path commands in an
-- SVG file. You can load the SVG file in a web browser to see the drawing.
-- The drawing space shown is 400x300, origin at centre.
--
-- Example: svg "mysquare.svg" square
svg :: FilePath -> Stmt -> IO ()
svg filename stmt = writeFile filename (prologue ++ path epilogue)
where
prologue =
"\n\
\\n\
\\n"
cmds = runTurbo stmt
path = ("\n" ++) (map cmdToSVG cmds)
cmdToSVG (MoveTo x y) = ("m " ++) . showsCoord x y
cmdToSVG (LineTo x y) = ("l " ++) . showsCoord x y
showsCoord x y = showFFloat (Just 0) x . (" " ++)
. showFFloat (Just 0) y . (" " ++)
square = Seq [ Forward (RLit 50)
, Turn (RLit 90)
, Forward (RLit 50)
, PenDown
, For "i" (RLit 0) (RLit 3)
[ Turn (RLit 90)
, Forward (RLit 100)
]
]
pentagon = Seq [ Forward (RLit 50)
, Turn (RLit 126)
, PenDown
, For "i" (RLit 0) (RLit 4)
[ Forward (RLit 58.78)
, Turn (RLit 72)
]
]
spiral = Seq [ PenDown
, "s" := RLit 12
, For "i" (RLit 0) (RLit 60)
[ Forward (RVar "s")
, "s" := RVar "s" :*: RLit 0.99
, Turn (RVar "i" :*: RLit 0.8)
]
]