diff options
author | Steve <steveb9@u.washington.edu> | 2011-02-14 23:21:29 +0000 |
---|---|---|
committer | Steve <steveb9@u.washington.edu> | 2011-02-14 23:21:29 +0000 |
commit | 74cdc49be9cbd5049e3ad36e93cb04af3c4c6abf (patch) | |
tree | 2e824bb69fa89234185db239e06141ab87775a98 /src/tesseract | |
parent | fd4a7dda42c4a35389ec6fd4de44cb69aa877a65 (diff) |
Added Circluar force and menu item in UI
Added menu for Jesse Chain2, hope you don't mind
Diffstat (limited to 'src/tesseract')
-rw-r--r-- | src/tesseract/TesseractUI.java | 21 | ||||
-rw-r--r-- | src/tesseract/forces/Circular.java | 27 | ||||
-rw-r--r-- | src/tesseract/menuitems/ChainLinkMenuItem.java | 44 | ||||
-rw-r--r-- | src/tesseract/objects/PhysicalObject.java | 4 |
4 files changed, 84 insertions, 12 deletions
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 |