View Javadoc

1   /* -------------------------------------------------------------------
2    * Java source file for the class PickableTransformGroup
3    * 
4    * Copyright (c), 2003, Masahiro Takatsuka.
5    * All Rights Researved.
6    * 
7    * Original Author: Masahiro Takatsuka (masa@jbeans.net)
8    * $Author: takatsukam $
9    * 
10   * $Date: 2004/03/03 11:53:06 $
11   * 
12   * $Id: PickableTransformGroup.java,v 1.3 2004/03/03 11:53:06 takatsukam Exp $
13   * 
14   * Reference:		Document no:
15   * ___				___
16   * 
17   * To Do:
18   * ___
19   * 
20  ------------------------------------------------------------------- */
21  
22  /* --------------------------- Package ---------------------------- */
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              Implementation of class PickableTransformGroup            
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 }