Author: tn
Date: Tue Feb 11 22:33:39 2014
New Revision: 1567427

URL: http://svn.apache.org/r1567427
Log:
Further improvements.

Modified:
    
commons/proper/math/trunk/src/userguide/java/org/apache/commons/math3/userguide/geometry/GeometryExample.java

Modified: 
commons/proper/math/trunk/src/userguide/java/org/apache/commons/math3/userguide/geometry/GeometryExample.java
URL: 
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/userguide/java/org/apache/commons/math3/userguide/geometry/GeometryExample.java?rev=1567427&r1=1567426&r2=1567427&view=diff
==============================================================================
--- 
commons/proper/math/trunk/src/userguide/java/org/apache/commons/math3/userguide/geometry/GeometryExample.java
 (original)
+++ 
commons/proper/math/trunk/src/userguide/java/org/apache/commons/math3/userguide/geometry/GeometryExample.java
 Tue Feb 11 22:33:39 2014
@@ -16,11 +16,21 @@
  */
 package org.apache.commons.math3.userguide.geometry;
 
+import java.awt.BorderLayout;
 import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.geom.Point2D;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+
 import org.apache.commons.math3.geometry.enclosing.Encloser;
 import org.apache.commons.math3.geometry.enclosing.EnclosingBall;
 import org.apache.commons.math3.geometry.enclosing.WelzlEncloser;
@@ -31,11 +41,11 @@ import org.apache.commons.math3.geometry
 import 
org.apache.commons.math3.geometry.euclidean.twod.hull.AklToussaintHeuristic;
 import org.apache.commons.math3.geometry.euclidean.twod.hull.ConvexHull2D;
 import 
org.apache.commons.math3.geometry.euclidean.twod.hull.ConvexHullGenerator2D;
-import org.apache.commons.math3.geometry.euclidean.twod.hull.GiftWrap;
-import org.apache.commons.math3.geometry.euclidean.twod.hull.GrahamScan;
 import org.apache.commons.math3.geometry.euclidean.twod.hull.MonotoneChain;
 import org.apache.commons.math3.random.MersenneTwister;
 import org.apache.commons.math3.random.RandomGenerator;
+import org.apache.commons.math3.userguide.ExampleUtils;
+import org.apache.commons.math3.userguide.ExampleUtils.ExampleFrame;
 import org.apache.commons.math3.util.FastMath;
 import org.piccolo2d.PCamera;
 import org.piccolo2d.PCanvas;
@@ -43,32 +53,20 @@ import org.piccolo2d.PNode;
 import org.piccolo2d.event.PBasicInputEventHandler;
 import org.piccolo2d.event.PInputEvent;
 import org.piccolo2d.event.PMouseWheelZoomEventHandler;
-import org.piccolo2d.extras.PFrame;
 import org.piccolo2d.nodes.PPath;
 import org.piccolo2d.nodes.PText;
 
 /**
  * Simple example illustrating some parts of the geometry package.
  * 
- * TODO:
+ * TODO: 
  *  - add user interface to re-generate points
  *  - select convex hull algorithm
  *  - select tolerance level
  *  - allow editing of the point set
  *  - pre-defined shapes, e.g. circle, cross, ...
  */
-public class GeometryExample extends PFrame {
-
-    private static final long serialVersionUID = 1L;
-
-    public GeometryExample() {
-        this(null);
-    }
-
-    public GeometryExample(final PCanvas aCanvas) {
-        super("Geometry example", false, aCanvas);
-        setSize(600, 600);
-    }
+public class GeometryExample {
 
     public static List<Vector2D> createRandomPoints(int size) {
         RandomGenerator random = new MersenneTwister();
@@ -78,64 +76,16 @@ public class GeometryExample extends PFr
         // fill the cloud with a random distribution of points
         for (int i = 0; i < size; i++) {
             points.add(new Vector2D(FastMath.round(random.nextDouble() * 400 + 
100),
-                                    FastMath.round(random.nextDouble() * 400 + 
100)));
+                    FastMath.round(random.nextDouble() * 400 + 100)));
         }
         return points;
     }
 
-    public void initialize() {
-        List<Vector2D> points = createRandomPoints(1000);
-        PNode pointSet = new PNode();
-        for (Vector2D point : points) {
-            final PNode node = PPath.createEllipse(point.getX() - 1, 
point.getY() - 1, 2, 2);
-            node.addAttribute("tooltip", point);
-            node.setPaint(Color.gray);
-            pointSet.addChild(node);
-        }
-
-        getCanvas().getLayer().addChild(pointSet);
-        
-        ConvexHullGenerator2D generator = new MonotoneChain(true, 1e-6);
-        ConvexHull2D hull = 
generator.generate(AklToussaintHeuristic.reducePoints(points));
-        
-        PNode hullNode = new PNode();
-        for (Vector2D vertex : hull.getVertices()) {
-            final PPath node = PPath.createEllipse(vertex.getX() - 1, 
vertex.getY() - 1, 2, 2);
-            node.addAttribute("tooltip", vertex);
-            node.setPaint(Color.red);
-            node.setStrokePaint(Color.red);
-            hullNode.addChild(node);
-        }
-        
-        for (Segment line : hull.getLineSegments()) {
-            final PPath node = PPath.createLine(line.getStart().getX(), 
line.getStart().getY(),
-                                                line.getEnd().getX(), 
line.getEnd().getY());
-            node.setPickable(false);
-            node.setPaint(Color.red);
-            node.setStrokePaint(Color.red);
-            hullNode.addChild(node);
-        }
+    public static PCanvas createCanvas() {
+        final PCanvas canvas = new PCanvas();
+        final PCamera camera = canvas.getCamera();
         
-        getCanvas().getLayer().addChild(hullNode);
-
-        Encloser<Euclidean2D, Vector2D> encloser = new 
WelzlEncloser<Euclidean2D, Vector2D>(1e-10, new DiskGenerator());
-        EnclosingBall<Euclidean2D, Vector2D> ball = encloser.enclose(points);
-
-        final double radius = ball.getRadius();
-        PPath ballCenter = PPath.createEllipse(ball.getCenter().getX() - 1, 
ball.getCenter().getY() - 1, 2, 2);
-        ballCenter.setStrokePaint(Color.blue);
-        ballCenter.setPaint(Color.blue);
-        getCanvas().getLayer().addChild(0, ballCenter);
-
-        PPath ballNode = PPath.createEllipse(ball.getCenter().getX() - radius, 
ball.getCenter().getY() - radius, radius * 2, radius * 2);
-        ballNode.setTransparency(1.0f);
-        ballNode.setStrokePaint(Color.blue);
-        getCanvas().getLayer().addChild(0, ballNode);
-
-        final PCamera camera = getCanvas().getCamera();
-
         final PText tooltipNode = new PText();
-
         tooltipNode.setPickable(false);
         camera.addChild(tooltipNode);
 
@@ -164,17 +114,115 @@ public class GeometryExample extends PFr
                 }
             }
         });
-        
+
         // uninstall default zoom event handler
-        
getCanvas().removeInputEventListener(getCanvas().getZoomEventHandler());
+        canvas.removeInputEventListener(canvas.getZoomEventHandler());
 
         // install mouse wheel zoom event handler
         final PMouseWheelZoomEventHandler mouseWheelZoomEventHandler = new 
PMouseWheelZoomEventHandler();
-        getCanvas().addInputEventListener(mouseWheelZoomEventHandler);
+        canvas.addInputEventListener(mouseWheelZoomEventHandler);
 
+        return canvas;
+    }
+
+    @SuppressWarnings("serial")
+    public static class Display extends ExampleFrame {
+
+        private PCanvas canvas;
+        private JComponent container;
+        private JComponent controlPanel;
+
+        public Display() {
+            setTitle("Commons Math: Geometry Examples");
+            setSize(800, 700);
+
+            container = new JPanel(new BorderLayout());
+            canvas = createCanvas();
+            container.add(canvas);
+            container.setBorder(BorderFactory.createLineBorder(Color.black, 
1));
+
+            controlPanel = new JPanel();
+            JButton random = new JButton("Randomize");
+            controlPanel.add(random);
+
+            random.addActionListener(new ActionListener() {
+
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    canvas.getLayer().removeAllChildren();
+                    createAndPaintRandomCloud();
+                }
+            });
+
+            JSplitPane splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, 
container, controlPanel);
+            splitpane.setDividerLocation(600);
+
+            add(splitpane);
+            
+            createAndPaintRandomCloud();
+        }
+
+        @Override
+        public Component getMainPanel() {
+            return container;
+        }
+        
+        public void createAndPaintRandomCloud() {
+            List<Vector2D> points = createRandomPoints(1000);
+            PNode pointSet = new PNode();
+            for (Vector2D point : points) {
+                final PNode node = PPath.createEllipse(point.getX() - 1, 
point.getY() - 1, 2, 2);
+                node.addAttribute("tooltip", point);
+                node.setPaint(Color.gray);
+                pointSet.addChild(node);
+            }
+
+            canvas.getLayer().addChild(pointSet);
+
+            ConvexHullGenerator2D generator = new MonotoneChain(true, 1e-6);
+            ConvexHull2D hull = 
generator.generate(AklToussaintHeuristic.reducePoints(points));
+
+            PNode hullNode = new PNode();
+            for (Vector2D vertex : hull.getVertices()) {
+                final PPath node = PPath.createEllipse(vertex.getX() - 1, 
vertex.getY() - 1, 2, 2);
+                node.addAttribute("tooltip", vertex);
+                node.setPaint(Color.red);
+                node.setStrokePaint(Color.red);
+                hullNode.addChild(node);
+            }
+
+            for (Segment line : hull.getLineSegments()) {
+                final PPath node = PPath.createLine(line.getStart().getX(), 
line.getStart().getY(),
+                                                    line.getEnd().getX(), 
line.getEnd().getY());
+                node.setPickable(false);
+                node.setPaint(Color.red);
+                node.setStrokePaint(Color.red);
+                hullNode.addChild(node);
+            }
+
+            canvas.getLayer().addChild(hullNode);
+
+            Encloser<Euclidean2D, Vector2D> encloser =
+                    new WelzlEncloser<Euclidean2D, Vector2D>(1e-10, new 
DiskGenerator());
+            EnclosingBall<Euclidean2D, Vector2D> ball = 
encloser.enclose(points);
+
+            final double radius = ball.getRadius();
+            PPath ballCenter =
+                    PPath.createEllipse(ball.getCenter().getX() - 1, 
ball.getCenter().getY() - 1, 2, 2);
+            ballCenter.setStrokePaint(Color.blue);
+            ballCenter.setPaint(Color.blue);
+            canvas.getLayer().addChild(0, ballCenter);
+
+            PPath ballNode =
+                    PPath.createEllipse(ball.getCenter().getX() - radius, 
ball.getCenter().getY() - radius,
+                                        radius * 2, radius * 2);
+            ballNode.setTransparency(1.0f);
+            ballNode.setStrokePaint(Color.blue);
+            canvas.getLayer().addChild(0, ballNode);
+        }
     }
 
     public static void main(final String[] argv) {
-        new GeometryExample();
+        ExampleUtils.showExampleFrame(new Display());
     }
-}
\ No newline at end of file
+}


Reply via email to