{-- Dumps SceneGraph into Haskell. --} module Graphics.SceneGraph.Dump where import System.IO import System.Process import Graphics.SceneGraph.Basic import Data.Graph.Inductive import Data.Graph.Inductive.Graphviz import Graphics.SceneGraph.Library dump :: SceneGraph -> IO () dump gr = withFile "c:/Mark/MyDevelopments/haskell/SceneGraph/src/Graphics/SceneGraph/TestLoad.hs" WriteMode $ \fd -> do preamble fd mapM_ (dumpNode fd gr) (nodes gr) dumpNode fd gr nde = do let (SceneNode (n,l) dte) = llab gr nde hPutStrLn fd $ "n" ++ (show n) ++ " = SceneNode " ++ (show (n,l)) ++ "(" ++ (writeSceneData dte) ++ ")" writeSceneData Group = "Group" writeSceneData (Geode geom ) = "Geode $ " ++ (show geom) writeSceneData LOD = "LOD" writeSceneData (MatrixTransform m) = "MatrixTransform $ " ++ show m -- writeSceneData (SimpleTransform a b c) = "SimpleTransform " ++ show a ++ " " ++ show b ++ " " ++ show c writeSceneData (Switch i) = "Switch " ++ show i writeSceneData (Material mt) = "Material $ " ++ (show mt) writeSceneData (Handler _ _) = "Handler Nothing Nothing" -- User will need to rebuild this part. writeSceneData Light = "Light" writeSceneData Camera = "Camera" writeSceneData (Texture _) = "Texture" writeSceneData (Text t ) = "Text " ++ "\"" ++ t ++ "\"" preamble fd = do hPutStrLn fd "module Graphics.SceneGraph.TestLoad where" hPutStrLn fd "import Graphics.SceneGraph.Basic" hPutStrLn fd "import Graphics.SceneGraph.Matrix" hPutStrLn fd "import Graphics.SceneGraph.Vector" hPutStrLn fd "import Graphics.UI.GLUT.Objects as GL" hPutStrLn fd "import Data.Graph.Inductive hiding (mkNode,context)" hPutStrLn fd "import Data.Sequence hiding (empty)" hPutStrLn fd "import Data.Reactive" hPutStrLn fd "import Data.Array" hPutStrLn fd "import Graphics.Rendering.OpenGL.GL.BeginEnd" hPutStrLn fd "import Graphics.Rendering.OpenGL (Vector3)" hPutStrLn fd "import Graphics.UI.GLUT hiding (Sink,Red, Green,Blue,Matrix,Error,get,scale,translate,rotate,Light,light,texture,Texture,Text,set,get)" hPutStrLn fd "import Graphics.UI.GLUT.Fonts"