/*
 * Main.java
 *
 * Created on 24 juillet 2002, 15:07
 */

import javax.media.j3d.*;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.scenegraph.io.*;
import java.io.File;

/**
 *
 * @author  JS
 */
public class Main {
    
    /** Creates a new instance of Main */
    public Main() {
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas3D = new Canvas3D(config);
        BranchGroup scene = createSceneGraph();
        
        scene.setCapability(BranchGroup.ALLOW_DETACH);
        scene.setCapability(BranchGroup.ALLOW_BOUNDS_READ);
        scene.setCapability(BranchGroup.ALLOW_PICKABLE_READ);
        scene.setCapability(BranchGroup.ALLOW_COLLISION_BOUNDS_READ);
        scene.setCapability(BranchGroup.ALLOW_AUTO_COMPUTE_BOUNDS_READ);
        scene.setCapability(BranchGroup.ENABLE_PICK_REPORTING);
        scene.setCapability(BranchGroup.ENABLE_COLLISION_REPORTING);
        
        // SimpleUniverse is a Convenience Utility class
        SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
        // This will move the ViewPlatform back a bit so the
        // objects in the scene can be viewed.
        simpleU.getViewingPlatform().setNominalViewingTransform();
        simpleU.addBranchGraph(scene);
        
        try {
            File f = new File("d:\\test.bg");
            SceneGraphFileWriter s = new SceneGraphFileWriter(f, simpleU, true, "Simple Test", null);
            s.writeBranchGraph(scene);
            s.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public BranchGroup createSceneGraph() {
        // Create the root of the branch graph
        BranchGroup objRoot = new BranchGroup();
        objRoot.setCapability(BranchGroup.ALLOW_DETACH);
        objRoot.setCapability(BranchGroup.ALLOW_BOUNDS_READ);
        objRoot.setCapability(BranchGroup.ALLOW_PICKABLE_READ);
        objRoot.setCapability(BranchGroup.ALLOW_COLLISION_BOUNDS_READ);
        objRoot.setCapability(BranchGroup.ALLOW_AUTO_COMPUTE_BOUNDS_READ);
        objRoot.setCapability(BranchGroup.ENABLE_PICK_REPORTING);
        objRoot.setCapability(BranchGroup.ENABLE_COLLISION_REPORTING);
        objRoot.addChild(new ColorCube(0.4));
        return objRoot;
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Main m = new Main();
    }
    
}
