(ns us.menzies.universe (:import (java.applet Applet) (java.awt BorderLayout GraphicsConfiguration GraphicsEnvironment) (com.sun.j3d.utils.applet MainFrame) (com.sun.j3d.utils.geometry ColorCube) (com.sun.j3d.utils.universe SimpleUniverse) (com.sun.j3d.utils.behaviors.mouse MouseRotate MouseZoom) (javax.media.j3d BranchGroup TransformGroup BoundingSphere Canvas3D GraphicsConfigTemplate3D) (javax.vecmath Point3d))) (defn create-scene-graph [] (let [objRoot (BranchGroup.) objTrans (TransformGroup.) bounds (BoundingSphere. (Point3d. 0.0 0.0 0.0) 100.0) mrotate (MouseRotate. objTrans) mzoom (MouseZoom. objTrans)] (.setCapability objTrans (. TransformGroup ALLOW_TRANSFORM_WRITE)) (.setCapability objTrans (. TransformGroup ALLOW_TRANSFORM_READ)) (.addChild objRoot objTrans) (.addChild objTrans (ColorCube. 0.4)) (.addChild objTrans mrotate) (.addChild objTrans mzoom) (.setSchedulingBounds mrotate bounds) (.setSchedulingBounds mzoom bounds) (.compile objRoot) objRoot)) (defn create-applet [] (let [ret (Applet.) env (GraphicsEnvironment/getLocalGraphicsEnvironment) gct (GraphicsConfigTemplate3D.) c (Canvas3D. (.getBestConfiguration (.getDefaultScreenDevice env) gct)) scene (create-scene-graph) u (SimpleUniverse. c)] (.setLayout ret (BorderLayout.)) (.add ret "Center" c) (.setNominalViewingTransform (.getViewingPlatform u)) (.addBranchGraph u scene) ret)) (defn -main [args] (let [mainframe (MainFrame. (create-applet) 256 256)] (.setTitle mainframe "Hello, Universe!") mainframe))