From 74cdc49be9cbd5049e3ad36e93cb04af3c4c6abf Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 14 Feb 2011 23:21:29 +0000 Subject: Added Circluar force and menu item in UI Added menu for Jesse Chain2, hope you don't mind --- src/tesseract/TesseractUI.java | 21 ++++++++++++ src/tesseract/forces/Circular.java | 27 ++++++++++++++++ src/tesseract/menuitems/ChainLinkMenuItem.java | 44 +++++++++++++++++++------- src/tesseract/objects/PhysicalObject.java | 4 +++ 4 files changed, 84 insertions(+), 12 deletions(-) create mode 100644 src/tesseract/forces/Circular.java diff --git a/src/tesseract/TesseractUI.java b/src/tesseract/TesseractUI.java index cd3bde2..7d5877a 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.Circular; import tesseract.forces.Force; import tesseract.forces.Gravity; import tesseract.menuitems.ChainLinkMenuItem; @@ -187,6 +188,26 @@ public class TesseractUI extends JFrame { } }); forcesMenu.add(gravity); + + final JMenuItem circular = new JCheckBoxMenuItem("Tangential force in the XZ plane", false); + circular.addActionListener(new ActionListener() { + private Force me; + + // Constructor + { + me = new Circular(.5f); + } + + public void actionPerformed(ActionEvent e) { + if (((JCheckBoxMenuItem) e.getSource()).isSelected()) { + myWorld.addForce(me); + } else { + myWorld.removeForce(me); + } + } + }); + forcesMenu.add(circular); + menuBar.add(forcesMenu); // Add reset Simulator menu item diff --git a/src/tesseract/forces/Circular.java b/src/tesseract/forces/Circular.java new file mode 100644 index 0000000..746064a --- /dev/null +++ b/src/tesseract/forces/Circular.java @@ -0,0 +1,27 @@ +package tesseract.forces; + +import javax.vecmath.Vector3f; + +import tesseract.objects.PhysicalObject; + +@SuppressWarnings("restriction") +public class Circular extends Force { + private float strength; + + public Circular(float strength) { + this.strength = strength; + } + + public Vector3f calculateForce(final PhysicalObject obj) { + Vector3f force = new Vector3f(-obj.getPosition().z, 0, obj.getPosition().x); + if (force.length() > 0) { + force.normalize(); + force.scale(strength); + } + return force; + } + + public String toString() { + return "Tangential force in the XZ plane"; + } +} diff --git a/src/tesseract/menuitems/ChainLinkMenuItem.java b/src/tesseract/menuitems/ChainLinkMenuItem.java index e015b42..bfd64f1 100644 --- a/src/tesseract/menuitems/ChainLinkMenuItem.java +++ b/src/tesseract/menuitems/ChainLinkMenuItem.java @@ -4,6 +4,7 @@ import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JColorChooser; import javax.swing.JFrame; @@ -13,6 +14,7 @@ import javax.vecmath.Vector3f; import tesseract.World; import tesseract.objects.ChainLink; +import tesseract.objects.ChainLink2; import tesseract.objects.Icosahedron; import tesseract.objects.PlanarPolygon; @@ -45,31 +47,49 @@ public class ChainLinkMenuItem extends TesseractMenuItem { public void actionPerformed(final ActionEvent arg0) { createParameterMenu(); - final float scale = 1f; - final float sliceRadius = .06f; //inside whole - final int sliceDivisions = 50; - final float arcRadius = .08f; //outside whole - final int arcDivisions = 30; + final float scale = 0.5f; + //final float sliceRadius = .06f; //inside whole + //final int sliceDivisions = 50; + //final float arcRadius = .08f; //outside whole + //final int arcDivisions = 30; //If the default button is checked, the frame will close. final JCheckBox defaultButton = getDefaultButton(); final JFrame params = getParamFrame(); + final JButton enterButton = getEnterButton(); defaultButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { if (defaultButton.isSelected()) { - myWorld.addObject(new ChainLink(getDefaultPosition(), 1, scale, - sliceRadius, sliceDivisions, arcRadius, arcDivisions)); + myWorld.addObject(new ChainLink2(getDefaultPosition(), 1, getDefaultRadius())); params.dispose(); + /*myWorld.addObject(new ChainLink(getDefaultPosition(), 1, scale, + sliceRadius, sliceDivisions, arcRadius, arcDivisions)); + params.dispose();*/ } } }); - /*Vector3f pos = - parseVector(JOptionPane.showInputDialog("Enter the position")); - float radius = - Float.parseFloat(JOptionPane.showInputDialog("Enter the radius")); - myWorld.addObject(new Icosahedron(pos, radius));*/ + enterButton.addActionListener(new ActionListener() { + public void actionPerformed(final ActionEvent event) { + String string = getPositionField().getText(); + Vector3f pos = parseVector(string); + setPosition(pos); + + String string2 = getRadiusField().getText(); + float radius = Float.parseFloat(string2); + setRadius(radius); + + String string3 = getMassField().getText(); + float mass = Float.parseFloat(string3); + setMass(mass); + + if (event.getSource() == enterButton) { + myWorld.addObject(new ChainLink2(getPosition(), getMass(), getRadius())); + params.dispose(); + } + } + }); } } diff --git a/src/tesseract/objects/PhysicalObject.java b/src/tesseract/objects/PhysicalObject.java index 73e0c91..54cc4e9 100644 --- a/src/tesseract/objects/PhysicalObject.java +++ b/src/tesseract/objects/PhysicalObject.java @@ -73,5 +73,9 @@ public class PhysicalObject extends CollidableObject { if (collidable && other.collidable) { super.resolveCollisions(other); } + } + + public Vector3f getPosition() { + return position; } } \ No newline at end of file -- cgit v1.2.3