Improved code readability
[sixth-3d-demos.git] / src / main / java / eu / svjatoslav / sixth / e3d / examples / OctreeDemo.java
index 9e1f3ef..e9979dc 100755 (executable)
@@ -1,19 +1,17 @@
 /*
- * Sixth - System for data storage, computation, exploration and interaction.
- * Copyright ©2012-2016, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 3 of the GNU Lesser General Public License
- * or later as published by the Free Software Foundation.
- */
+ * Sixth 3D engine demos. Author: Svjatoslav Agejenko. 
+ * This project is released under Creative Commons Zero (CC0) license.
+ *
+*/
 
 package eu.svjatoslav.sixth.e3d.examples;
 
 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
-import eu.svjatoslav.sixth.e3d.geometry.Transform;
-import eu.svjatoslav.sixth.e3d.gui.ViewContext;
 import eu.svjatoslav.sixth.e3d.gui.ViewFrame;
-import eu.svjatoslav.sixth.e3d.gui.humaninput.WorldNavigationTracker;
+import eu.svjatoslav.sixth.e3d.gui.ViewPanel;
+import eu.svjatoslav.sixth.e3d.gui.humaninput.WorldNavigationUserInputTracker;
+import eu.svjatoslav.sixth.e3d.math.Transform;
+import eu.svjatoslav.sixth.e3d.renderer.octree.IntegerPoint;
 import eu.svjatoslav.sixth.e3d.renderer.octree.OctreeVolume;
 import eu.svjatoslav.sixth.e3d.renderer.octree.raytracer.Camera;
 import eu.svjatoslav.sixth.e3d.renderer.octree.raytracer.LightSource;
@@ -28,10 +26,9 @@ import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.textcanvas.TextC
 import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.wireframe.Grid3D;
 
 import java.awt.event.KeyEvent;
-import java.io.IOException;
 import java.util.Vector;
 
-public class OctreeDemo extends WorldNavigationTracker {
+public class OctreeDemo extends WorldNavigationUserInputTracker {
 
     private static final double magnification = 5;
     private final LineAppearance gridAppearance = new LineAppearance(40, new Color(255,
@@ -39,9 +36,9 @@ public class OctreeDemo extends WorldNavigationTracker {
     private final Vector<LightSource> lights = new Vector<>();
     private OctreeVolume octreeVolume;
     private ShapeCollection shapeCollection;
-    private ViewContext context;
+    private ViewPanel viewPanel;
 
-    public static void main(final String[] args) throws IOException {
+    public static void main(final String[] args) {
         new OctreeDemo().init();
     }
 
@@ -79,7 +76,9 @@ public class OctreeDemo extends WorldNavigationTracker {
         final double c2 = (Math.cos(x / 10f) * 100f) + 127;
         final double c3 = (Math.cos(z / 12f) * 100f) + 127;
 
-        putRect(x - size, y - size, z - size, x + size, y + size, z + size,
+        putRect(
+                new IntegerPoint( x - size, y - size, z - size),
+                new IntegerPoint( x + size, y + size, z + size),
                 new Color((int) c1, (int) c2, (int) c3, 100));
 
         if (size > 1) {
@@ -89,16 +88,16 @@ public class OctreeDemo extends WorldNavigationTracker {
         }
     }
 
-    private void init() throws IOException {
+    private void init() {
 
         final ViewFrame viewFrame = new ViewFrame();
-        context = viewFrame.getView().getContext();
+        viewPanel = viewFrame.getViewPanel();
 
-        context.getAvatar().setLocation(new Point3D(0, -30, -300));
+        viewPanel.getAvatar().setLocation(new Point3D(0, -30, -300));
 
         octreeVolume = new OctreeVolume();
 
-        shapeCollection = context.getRootShapeCollection();
+        shapeCollection = viewPanel.getRootShapeCollection();
 
         shapeCollection.addShape(new Grid3D(
                 new Point3D(-10000, -10000, -10000), new Point3D(10000, 10000,
@@ -113,31 +112,39 @@ public class OctreeDemo extends WorldNavigationTracker {
         dotSpiral();
 
         // arbitrary rectangles
-        putRect(-10, -10, -10, 10, 10, -20, new Color(200, 255, 200, 100));
-        putRect(-3, 0, -30, 12, 3, 300, new Color(255, 200, 200, 100));
-        putRect(-20, 20, -20, 20, 80, 20, new Color(255, 200, 255, 100));
+        putRect(new IntegerPoint(-10, -10, -10),
+                new IntegerPoint(10, 10, -20),
+                new Color(200, 255, 200, 100));
+
+        putRect(new IntegerPoint(-3, 0, -30),
+                new IntegerPoint( 12, 3, 300),
+                new Color(255, 200, 200, 100));
+
+        putRect(new IntegerPoint(-20, 20, -20),
+                new IntegerPoint(20, 80, 20),
+                new Color(255, 200, 255, 100));
 
         tiledFloor();
 
         fractal(-50, 20, 100, 32, 1);
 
         final TextCanvas message = new TextCanvas(new Transform(new Point3D(
-                -10, 20, -180)), "Press \"r\" to raytrace current wiew",
+                -10, 20, -180)), "Press \"r\" to raytrace current view",
                 Color.WHITE, Color.PURPLE);
         shapeCollection.addShape(message);
 
-        context.getKeyboardFocusTracker().setFocusOwner(this);
-        context.getView().repaintDuringNextViewUpdate();
+        viewPanel.getKeyboardFocusStack().pushFocusOwner(this);
+        viewPanel.repaintDuringNextViewUpdate();
     }
 
     @Override
-    public void keyPressed(final KeyEvent event, final ViewContext viewContext) {
+    public boolean keyPressed(final KeyEvent event, final ViewPanel viewPanel) {
 
         if ('r' == event.getKeyChar()) {
             raytrace();
-            return;
+            return true;
         }
-        super.keyPressed(event, viewContext);
+        return super.keyPressed(event, viewPanel);
     }
 
     private void putPixel(final int x, final int y, final int z,
@@ -148,25 +155,24 @@ public class OctreeDemo extends WorldNavigationTracker {
 
     }
 
-    private void putRect(final int x1, final int y1, final int z1, final int x2,
-                         final int y2, final int z2, final Color color) {
+    private void putRect(IntegerPoint p1, IntegerPoint p2, final Color color) {
 
         shapeCollection
                 .addShape(new SolidPolygonRectangularBox(
-                        new Point3D(x1, y1, z1).scaleUp(magnification),
-                        new Point3D(x2, y2, z2).scaleUp(magnification), color));
+                        new Point3D(p1).scaleUp(magnification),
+                        new Point3D(p2).scaleUp(magnification), color));
 
-        octreeVolume.fillRect3D(x1, y1, z1, x2, y2, z2, color);
+        octreeVolume.fillRectangle(p1, p2, color);
     }
 
     private void raytrace() {
         // create and add camera object to scene
-        final Camera camera = new Camera(context.getAvatar(), magnification);
+        final Camera camera = new Camera(viewPanel.getAvatar(), magnification);
         shapeCollection.addShape(camera);
 
         // initialize and start Raytracer in a separate thread
         final RayTracer rayTracer = new RayTracer(camera.getTexture(),
-                octreeVolume, lights, camera, context.getView());
+                octreeVolume, lights, camera, viewPanel);
         final Thread thread = new Thread(rayTracer);
         thread.start();
     }
@@ -174,10 +180,13 @@ public class OctreeDemo extends WorldNavigationTracker {
     private void tiledFloor() {
         final int step = 40;
         final int size = step - 15;
+        Color color = new Color(255, 255, 255, 100);
         for (int x = -200; x < 200; x += step)
             for (int z = -200; z < 200; z += step)
-                putRect(x, 100, z, x + size, 110, z + size, new Color(255, 255,
-                        255, 100));
+                putRect(
+                        new IntegerPoint(x, 100, z),
+                        new IntegerPoint(x + size, 110, z + size),
+                        color);
     }
 
 }