2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
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
;
23 * Convenience group for adding elements that need to be editable.
24 * @warning Actual object should be added using addTransformChild(), NOT
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
);
41 // :TODO: this needs to be modified to be smart
42 SmartPickZoomBehavior zoom
= new SmartPickZoomBehavior(this, canvas
, bounds
);
43 zoom
.setRotateTransformGroup(rotateGroup
);
46 PickSelectBehavior select
= new PickSelectBehavior(this, canvas
, bounds
);
47 select
.setupCallback(callback
);
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
);
66 addChild(transformGroup
);
69 public TransformGroup
getTransformGroup() {
70 return transformGroup
;
73 public void addTransformChild(Node child
) {
74 transformGroup
.addChild(child
);