Implement gravity and velocity vector.
[gravitysimulator.git] / src / edu / mit / ezyang / gravity / j3d / EditableGroup.java
blob0855312a3fece25a11403a4a246622fafbe86f3b
1 /*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5 package edu.mit.ezyang.gravity.j3d;
7 import edu.mit.ezyang.gravity.GravitySimulatorView;
8 import edu.mit.ezyang.gravity.j3d.behaviors.PhysicsBehavior;
9 import edu.mit.ezyang.gravity.j3d.utils.picking.behaviors.PickSelectBehavior;
10 import edu.mit.ezyang.gravity.j3d.utils.picking.behaviors.SmartPickTranslateBehavior;
11 import edu.mit.ezyang.gravity.j3d.utils.picking.behaviors.SmartPickZoomBehavior;
12 import javax.media.j3d.BoundingSphere;
13 import javax.media.j3d.Bounds;
14 import javax.media.j3d.BranchGroup;
15 import javax.media.j3d.Canvas3D;
16 import javax.media.j3d.Node;
17 import javax.media.j3d.Transform3D;
18 import javax.media.j3d.TransformGroup;
19 import javax.vecmath.Point3d;
20 import javax.vecmath.Vector3f;
22 /**
23 * Convenience group for adding elements that need to be editable.
24 * @warning Actual object should be added using addTransformChild(), NOT
25 * addChild().
26 * @author Edward Z. Yang <ezyang@mit.edu>
28 public class EditableGroup extends BranchGroup {
30 private TransformGroup transformGroup;
32 public EditableGroup(Canvas3D canvas, TransformGroup rotateGroup, Vector3f location, GravitySimulatorView callback) {
33 setCapability(BranchGroup.ALLOW_DETACH);
35 Bounds bounds = new BoundingSphere(new Point3d(0f, 0f, 0f), 1000f);
37 SmartPickTranslateBehavior translate = new SmartPickTranslateBehavior(this, canvas, bounds);
38 translate.setRotateTransformGroup(rotateGroup);
39 addChild(translate);
41 // :TODO: this needs to be modified to be smart
42 SmartPickZoomBehavior zoom = new SmartPickZoomBehavior(this, canvas, bounds);
43 zoom.setRotateTransformGroup(rotateGroup);
44 addChild(zoom);
46 PickSelectBehavior select = new PickSelectBehavior(this, canvas, bounds);
47 select.setupCallback(callback);
48 addChild(select);
50 transformGroup = new TransformGroup();
51 transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
52 transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
53 transformGroup.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
54 transformGroup.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND);
55 transformGroup.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE);
56 transformGroup.setCapability(TransformGroup.ALLOW_CHILDREN_READ);
58 Transform3D transform = new Transform3D();
59 transform.setTranslation(location);
60 transformGroup.setTransform(transform);
62 PhysicsBehavior physics = new PhysicsBehavior(transformGroup, callback);
63 physics.setSchedulingBounds(bounds);
64 addChild(physics);
66 addChild(transformGroup);
69 public TransformGroup getTransformGroup() {
70 return transformGroup;
73 public void addTransformChild(Node child) {
74 transformGroup.addChild(child);