Re: keep the rubberband on screen?

Hi Ugo,

Helen again,

After send you email, I have tried again.  The strang thing happen.

Execute the  RubberBandBoxRendererJ3D code and do nothing  but directly click
on right mouse button to draw a box. No box shows up after I release my right
mouse button.

but if I click on left mouse button to rotate the 3D display, the last box I
draw by draging the right mouse button emerges with yellow line.

Why? is it a bug or what?

Thanks for your help.

/Helen

Helen Yi wrote:

> Hi Ugo,
>
> I cut and paste your main method to RubberBandBoxRendererJ3D.java,  tested
> it.  I still don't see the  rubberband on screen after I release my right
> mouse button. Why?
>
> Thanks for your help.
>
> /helen
>
> Ugo Taddei wrote:
>
> > Hello Helen, Hello VisAD World,
> >
> > here (s. bellow) is the solution to keeping the rubberband on screen.
> >
> > To track down my changes look for "// UT". I've changed some code near
> > the Cell stuff, in main().
> >
> > Cheers,
> >
> > Ugo
> >
> >                           // UT
> >   private static final int N = 16;
> >
> >   /** test RubberBandBoxRendererJ3D */
> >   public static void main(String args[])
> >          throws VisADException, RemoteException {
> >     RealType x = new RealType("x");
> >     RealType y = new RealType("y");
> >     RealTupleType xy = new RealTupleType(x, y);
> >
> >     RealType c = new RealType("c");
> >     FunctionType ft = new FunctionType(xy, c);
> >
> >     // construct Java3D display and mappings
> >     DisplayImpl display = new DisplayImplJ3D("display1");
> >     if (args.length == 0 || args[0].equals("z")) {
> >       display.addMap(new ScalarMap(x, Display.XAxis));
> >       display.addMap(new ScalarMap(y, Display.YAxis));
> >     }
> >     else if (args[0].equals("x")) {
> >       display.addMap(new ScalarMap(x, Display.YAxis));
> >       display.addMap(new ScalarMap(y, Display.ZAxis));
> >     }
> >     else if (args[0].equals("y")) {
> >       display.addMap(new ScalarMap(x, Display.XAxis));
> >       display.addMap(new ScalarMap(y, Display.ZAxis));
> >     }
> >     else if (args[0].equals("radius")) {
> >       display.addMap(new ScalarMap(x, Display.Longitude));
> >       display.addMap(new ScalarMap(y, Display.Latitude));
> >     }
> >     else if (args[0].equals("lat")) {
> >       display.addMap(new ScalarMap(x, Display.Longitude));
> >       display.addMap(new ScalarMap(y, Display.Radius));
> >     }
> >     else if (args[0].equals("lon")) {
> >       display.addMap(new ScalarMap(x, Display.Latitude));
> >       display.addMap(new ScalarMap(y, Display.Radius));
> >     }
> >     else {
> >       display.addMap(new ScalarMap(x, Display.Longitude));
> >       display.addMap(new ScalarMap(y, Display.Latitude));
> >     }
> >     display.addMap(new ScalarMap(c, Display.RGB));
> >
> >     Integer2DSet fset = new Integer2DSet(xy, N, N);
> >     FlatField field = new FlatField(ft, fset);
> >     float[][] values = new float[1][N * N];
> >     int k = 0;
> >     for (int i=0; i<N; i++) {
> >       for (int j=0; j<N; j++) {
> >         values[0][k++] = (i - N / 2) * (j - N / 2);
> >       }
> >     }
> >     field.setSamples(values);
> >     DataReferenceImpl field_ref = new DataReferenceImpl("field");
> >     field_ref.setData(field);
> >     display.addReference(field_ref);
> >
> >     Gridded2DSet dummy_set = new Gridded2DSet(xy, null, 1);
> >     final DataReferenceImpl ref = new DataReferenceImpl("set");
> >     ref.setData(dummy_set);
> >     int m = (args.length > 1) ? InputEvent.CTRL_MASK : 0;
> >     display.addReferences(new RubberBandBoxRendererJ3D(x, y, m, m),
> > ref);
> >
> >     // UT
> >     final DataReferenceImpl ref2 = new DataReferenceImpl("set2");
> >     ref2.setData(dummy_set);
> >     ConstantMap[] yellowCMap = { new ConstantMap( 1.0f, Display.Red ),
> >                                   new ConstantMap( 1.0f, Display.Green
> > ),
> >                                   new ConstantMap( 0.0f, Display.Blue ),
> >                                   new ConstantMap( 2.50f,
> > Display.LineWidth )  };
> >     display.addReference(ref2, yellowCMap);
> >
> >     CellImpl cell = new CellImpl() {
> >       public void doAction() throws VisADException, RemoteException {
> >         Set set = (Set) ref.getData();
> >         float[][] samples = set.getSamples();
> >         if (samples != null) {
> >           System.out.println("box test: (" + samples[0][0] + ", " +
> > samples[1][0] +
> >                              ") to (" + samples[0][1] + ", " +
> > samples[1][1] + ")");
> >         }
> >
> >         // UT dump data
> >         visad.jmet.DumpType.dumpDataType(set,System.out);
> >
> >         // HI; UT -> changed indices
> >         float[][] points1 = new float[2][5];
> >         points1[0][0]= samples[0][0];
> >         points1[1][0]= samples[1][0];
> >
> >         points1[0][1]= samples[0][0];
> >         points1[1][1]= samples[1][1];
> >
> >         points1[0][2]= samples[0][1];
> >         points1[1][2]= samples[1][1];
> >
> >         points1[0][3]= samples[0][1];
> >         points1[1][3]= samples[1][0];
> >
> >         points1[0][4]= samples[0][0];
> >         points1[1][4]= samples[1][0];
> >
> >         // UT
> >         RealType x2 = RealType.getRealType("x");
> >         RealType y2 = RealType.getRealType("y");
> >         RealTupleType xy2 = new RealTupleType(x2, y2);
> >
> >         // UT
> >         ref2.setData( new Gridded2DSet(xy2, points1, 5));
> >
> >       }
> >     };
> >     cell.addReference(ref);
> >
> >     // create JFrame (i.e., a window) for display and slider
> >     JFrame frame = new JFrame("test RubberBandBoxRendererJ3D");
> >     frame.addWindowListener(new WindowAdapter() {
> >       public void windowClosing(WindowEvent e) {System.exit(0);}
> >     });
> >
> >     // create JPanel in JFrame
> >     JPanel panel = new JPanel();
> >     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
> >     panel.setAlignmentY(JPanel.TOP_ALIGNMENT);
> >     panel.setAlignmentX(JPanel.LEFT_ALIGNMENT);
> >     frame.getContentPane().add(panel);
> >
> >     // add display to JPanel
> >     panel.add(display.getComponent());
> >
> >     // set size of JFrame and make it visible
> >     frame.setSize(500, 500);
> >     frame.setVisible(true);
> >   }