1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package net.jbeans.j3d.transform;
24
25 /* ------------------ Import classes (packages) ------------------- *//package-summary/html">class="comment"> ------------------ Import classes (packages) ------------------- *//package-summary.html">class="comment">/* ------------------ Import classes (packages) ------------------- *//package-summary.html">class="comment"> ------------------ Import classes (packages) ------------------- */
26 import javax.media.j3d.*;
27 import javax.vecmath.*;
28
29
30
31
32 /***
33 * generally describe PickableTransformGroup in here
34 *
35 * @version $Revision: 1.3 $
36 * @author Masahiro Takatsuka (masa@jbeans.net)
37 * @see BasicTransformGroup
38 */
39
40 public class PickableTransformGroup extends BasicTransformGroup {
41 private static int count = 0;
42 private String name;
43
44 public PickableTransformGroup() {
45 super();
46 }
47
48 public PickableTransformGroup(Transform3D t3d) {
49 super(t3d);
50 }
51
52 protected void common() {
53 super.common();
54 setCapability(Node.ENABLE_PICK_REPORTING);
55 this.name = new String("TransformGroup" + this.count++);
56 }
57
58 public static PickShape generatePickRay(int i, int j, Canvas3D canvas3d) {
59 PickRay pickray = new PickRay();
60 Transform3D transform3d = new Transform3D();
61 Point3d point3d = new Point3d();
62 Point3d point3d1 = new Point3d();
63 Vector3d vector3d = new Vector3d();
64 canvas3d.getCenterEyeInImagePlate(point3d);
65 canvas3d.getPixelLocationInImagePlate(i, j, point3d1);
66 canvas3d.getImagePlateToVworld(transform3d);
67 transform3d.transform(point3d);
68 transform3d.transform(point3d1);
69 vector3d.sub(point3d1, point3d);
70 vector3d.normalize();
71 pickray.set(point3d, vector3d);
72 return pickray;
73 }
74
75 public String getName() {
76 return this.name;
77 }
78
79 public void setName(String s) {
80 this.name = s;
81 }
82
83 public static PickableTransformGroup selectNode(Canvas3D canvas3d, BranchGroup branchgroup, int i, int j) {
84 Object obj = null;
85 PickRay pickray = (PickRay)generatePickRay(i, j, canvas3d);
86 SceneGraphPath scenegraphpath = branchgroup.pickClosest(pickray);
87 if(scenegraphpath != null) {
88 Node node = scenegraphpath.getObject();
89 if(node instanceof PickableTransformGroup)
90 return (PickableTransformGroup)node;
91 for(int k = 0; k < scenegraphpath.nodeCount(); k++) {
92 Node node1 = scenegraphpath.getNode(k);
93 if(node1 instanceof PickableTransformGroup)
94 return (PickableTransformGroup)node1;
95 }
96
97 }
98 return null;
99 }
100 }