From d1df88907d55240e79ee8597f6032a4c0de6b957 Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 12 Feb 2011 08:09:38 +0000 Subject: Added a gravity submenu (doesn't turn off yet) Added empty ChainLinkMenuItem class set the planar Poly to pos infinte mass for testing Particles fall through but others don't, if particles are big enough they collide though --- src/tesseract/TesseractUI.java | 37 ++++++++++++---------- src/tesseract/menuitems/ChainLinkMenuItem.java | 5 +++ src/tesseract/menuitems/GravityMenuItem.java | 7 ---- src/tesseract/menuitems/IcosahedronMenuItem.java | 2 +- .../menuitems/ParticleEmitterMenuItem.java | 2 +- src/tesseract/menuitems/PlanarPolygonMenuItem.java | 2 +- src/tesseract/objects/Ellipsoid.java | 3 +- src/tesseract/objects/Particle.java | 8 +++-- src/tesseract/objects/PlanarPolygon.java | 4 +-- 9 files changed, 38 insertions(+), 32 deletions(-) create mode 100644 src/tesseract/menuitems/ChainLinkMenuItem.java (limited to 'src/tesseract') diff --git a/src/tesseract/TesseractUI.java b/src/tesseract/TesseractUI.java index e6eb330..7b1a180 100644 --- a/src/tesseract/TesseractUI.java +++ b/src/tesseract/TesseractUI.java @@ -24,6 +24,7 @@ import javax.swing.Timer; import javax.vecmath.Point3d; import javax.vecmath.Vector3f; +import tesseract.forces.Force; import tesseract.forces.Gravity; import tesseract.menuitems.EllipsoidMenuItem; import tesseract.menuitems.GravityMenuItem; @@ -89,20 +90,23 @@ public class TesseractUI extends JFrame { private JMenuItem[] myObjectMenuItems; /** - * Forces Menu Items. + * World Timer. */ - private JMenuItem[] myForcesMenuItems; + private Timer myTimer; /** - * World Timer. + * The gravity of the world */ - private Timer myTimer; + private Gravity my_gravity; /** * UI Constructor. */ public TesseractUI() { super("Tesseract Project"); + + my_gravity = new Gravity(-.5f); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myWorld = new World( @@ -116,11 +120,6 @@ public class TesseractUI extends JFrame { new EllipsoidMenuItem(myWorld), new IcosahedronMenuItem(myWorld) }; - - myForcesMenuItems = new JMenuItem[] { - new GravityMenuItem(myWorld)}; - - createMenu(); setupCanvas(); pack(); @@ -173,10 +172,18 @@ public class TesseractUI extends JFrame { menuBar.add(objectsMenu); //Forces - JMenu forcesMenu = new JMenu("Add Force"); - for (JMenuItem item : myForcesMenuItems) { - forcesMenu.add(item); - } + JMenu forcesMenu = new JMenu("Add Forces"); + JMenuItem gravity = new JCheckBoxMenuItem("Gravity", false); + gravity.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (((JCheckBoxMenuItem) e.getSource()).isSelected()) { + myWorld.addForce(my_gravity); + } else { + myWorld.addForce(my_gravity = new Gravity(-.5f)); + } + } + }); + forcesMenu.add(gravity); menuBar.add(forcesMenu); /* @@ -200,10 +207,6 @@ public class TesseractUI extends JFrame { menu.add(cMenuItem); } */ - - - - // Exit Menu Item JMenuItem exit = new JMenuItem("Exit"); exit.addActionListener(new ActionListener() { diff --git a/src/tesseract/menuitems/ChainLinkMenuItem.java b/src/tesseract/menuitems/ChainLinkMenuItem.java new file mode 100644 index 0000000..4f99645 --- /dev/null +++ b/src/tesseract/menuitems/ChainLinkMenuItem.java @@ -0,0 +1,5 @@ +package tesseract.menuitems; + +public class ChainLinkMenuItem { + +} diff --git a/src/tesseract/menuitems/GravityMenuItem.java b/src/tesseract/menuitems/GravityMenuItem.java index 62ee26e..8106d6e 100644 --- a/src/tesseract/menuitems/GravityMenuItem.java +++ b/src/tesseract/menuitems/GravityMenuItem.java @@ -1,16 +1,9 @@ package tesseract.menuitems; -import java.awt.Color; import java.awt.event.ActionEvent; -import javax.swing.JColorChooser; -import javax.swing.JOptionPane; -import javax.vecmath.Color3f; -import javax.vecmath.Vector3f; - import tesseract.World; import tesseract.forces.Gravity; -import tesseract.objects.PlanarPolygon; /** * Gravity Menu Item. diff --git a/src/tesseract/menuitems/IcosahedronMenuItem.java b/src/tesseract/menuitems/IcosahedronMenuItem.java index dc80bf3..b2cdc33 100644 --- a/src/tesseract/menuitems/IcosahedronMenuItem.java +++ b/src/tesseract/menuitems/IcosahedronMenuItem.java @@ -51,7 +51,7 @@ public class IcosahedronMenuItem extends TesseractMenuItem { defaultButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { if (defaultButton.isSelected()) { - myWorld.addObject(new Icosahedron(getDefaultPosition(), 1, getDefaultRadius())); + myWorld.addObject(new Icosahedron(getDefaultPosition(), 10, getDefaultRadius())); params.dispose(); } } diff --git a/src/tesseract/menuitems/ParticleEmitterMenuItem.java b/src/tesseract/menuitems/ParticleEmitterMenuItem.java index b4016cc..1c69def 100644 --- a/src/tesseract/menuitems/ParticleEmitterMenuItem.java +++ b/src/tesseract/menuitems/ParticleEmitterMenuItem.java @@ -50,7 +50,7 @@ public class ParticleEmitterMenuItem extends TesseractMenuItem { defaultButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { if (defaultButton.isSelected()) { - myWorld.addObject(new ParticleEmitter(getDefaultPosition(), + myWorld.addObject(new ParticleEmitter(new Vector3f(0f,.49f, 0f), .5f, new Color3f(1f,0f,0f))); params.dispose(); } diff --git a/src/tesseract/menuitems/PlanarPolygonMenuItem.java b/src/tesseract/menuitems/PlanarPolygonMenuItem.java index 31b6e3e..a41dabb 100644 --- a/src/tesseract/menuitems/PlanarPolygonMenuItem.java +++ b/src/tesseract/menuitems/PlanarPolygonMenuItem.java @@ -52,7 +52,7 @@ public class PlanarPolygonMenuItem extends TesseractMenuItem { defaultButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { if (defaultButton.isSelected()) { - myWorld.addObject(new PlanarPolygon(getDefaultPosition(), getDefaultRadius())); + myWorld.addObject(new PlanarPolygon(new Vector3f(0f,-.3f, 0f), getDefaultRadius())); params.dispose(); } } diff --git a/src/tesseract/objects/Ellipsoid.java b/src/tesseract/objects/Ellipsoid.java index da6dd79..617bdb8 100644 --- a/src/tesseract/objects/Ellipsoid.java +++ b/src/tesseract/objects/Ellipsoid.java @@ -29,7 +29,8 @@ public class Ellipsoid extends PhysicalObject { /** * Default mass. */ - private static final float DEFAULT_MASS = 1; + //private static final float DEFAULT_MASS = Float.POSITIVE_INFINITY; + private static final float DEFAULT_MASS = 10; /** * Number of divisions in the sphere. diff --git a/src/tesseract/objects/Particle.java b/src/tesseract/objects/Particle.java index a5b6029..6dcc864 100644 --- a/src/tesseract/objects/Particle.java +++ b/src/tesseract/objects/Particle.java @@ -5,6 +5,7 @@ import java.awt.Color; import javax.media.j3d.Appearance; import javax.media.j3d.ColoringAttributes; import javax.media.j3d.Node; +import javax.media.j3d.TransformGroup; import javax.vecmath.Color3f; import javax.vecmath.Vector3f; @@ -61,7 +62,7 @@ public class Particle extends PhysicalObject { * @param theColor The particle color or null for random. * @return A sphere to visually represent the particle. */ - private Node createShape(final Color3f theColor) { + private TransformGroup createShape(final Color3f theColor) { Color3f color = theColor; ColoringAttributes cAttr; @@ -74,7 +75,10 @@ public class Particle extends PhysicalObject { cAttr = new ColoringAttributes(color, ColoringAttributes.FASTEST); Appearance appearance = new Appearance(); appearance.setColoringAttributes(cAttr); - return new Sphere(RADIUS, Sphere.ENABLE_GEOMETRY_PICKING | Sphere.GEOMETRY_NOT_SHARED, + Sphere sphere = new Sphere(RADIUS, Sphere.ENABLE_GEOMETRY_PICKING | Sphere.GEOMETRY_NOT_SHARED, DIVISIONS, appearance); + TransformGroup tg = new TransformGroup(); + tg.addChild(sphere); + return tg; } } diff --git a/src/tesseract/objects/PlanarPolygon.java b/src/tesseract/objects/PlanarPolygon.java index 94fb011..5782fa7 100644 --- a/src/tesseract/objects/PlanarPolygon.java +++ b/src/tesseract/objects/PlanarPolygon.java @@ -40,8 +40,8 @@ public class PlanarPolygon extends PhysicalObject { /** * Default mass. */ - //private static final float DEFAULT_MASS = Float.POSITIVE_INFINITY; - private static final float DEFAULT_MASS = 1; + private static final float DEFAULT_MASS = Float.POSITIVE_INFINITY; + //private static final float DEFAULT_MASS = 6; /** * Number of divisions in the sphere. -- cgit v1.2.3