Re: Range not changing on Display.IsoContour

  • To: "Cicero A. W. Zandonna" <cicero@xxxxxxxxxx>
  • Subject: Re: Range not changing on Display.IsoContour
  • From: Tom Rink <rink@xxxxxxxxxxxxx>
  • Date: Mon, 19 May 2003 10:03:06 -0500
Hi Cicero,

Try using DisplayImplJ3D or TwoDDisplayRendererJ3D instead of
DisplayImplJ2D.  Java3D is much faster in this case.  If you double
or triple the sleep time in your current program, you'll see the update
to the data range, otherwise you update the data before the last one
is rendered,

TomR

"Cicero A. W. Zandonna" wrote:

> Hello VisAD comunnity,
>
> I am facing a problem with the Display.IsoContour ScalarMap. In few
> words, when I change the values, the Range dosen´t ajusts itself like it
> does when I use another mapping like Display.RGB. It sounds like I am
> missing something, but can be a bug also.
>
> To make thing more clear, I am sending a single test that demonstrates
> the problem.
>
> Thanks already,
>
> Cicero A. W. Zandoná
>
> //Code starts here
>
> import visad.*;
> import visad.java2d.DisplayImplJ2D;
> import java.rmi.RemoteException;
> import javax.swing.JFrame;
>
> public class NoRefresh {
>
>     private RealType longitude, latitude, sombreado;
>
>     // Para juntar lat e lon
>     private RealTupleType domain_tuple;
>
>     // função (domain_tuple -> sombreado )
>     private FunctionType func_dom_sombreado;
>
>     // Set para sombreado
>     private Set set_sombreado;
>
>     // FlatField dos dados da sombreado
>     private FlatField ff_sombreado;
>
>     // DataReference das sombreado
>     private DataReferenceImpl ref_sombreado;
>
>     // O display e seus mapas
>
>     private DisplayImpl display;
>     private ScalarMap latMap, lonMap, sombreadoMap;
>
>     static int NLINES = 30;
>
>     /** Creates a new instance of Display */
>     public NoRefresh()  throws RemoteException, VisADException {
>
>         // Create the quantities
>         // Use RealType(String name);
>
>         latitude = RealType.Latitude;
>         longitude = RealType.Longitude;
>
>         domain_tuple = new RealTupleType(latitude, longitude);
>
>         sombreado = RealType.getRealType("sombreado");
>
>         // Cria a função (domain_tuple -> sombreado )
>         func_dom_sombreado = new FunctionType( domain_tuple, sombreado);
>
>
>         //Display 2D
>         display = new DisplayImplJ2D("display1");
>
>         //Para Displays 2D
>         latMap = new ScalarMap( RealType.Latitude, visad.Display.YAxis);
>         lonMap = new ScalarMap( RealType.Longitude, visad.Display.XAxis
> );
>
>         display.addMap( latMap );
>         display.addMap( lonMap );
>
>         //Scalar Maps
>         sombreadoMap = new ScalarMap( sombreado,
> visad.Display.IsoContour );
>         ScalarMap sombreadoMapColor = new ScalarMap( sombreado,
> visad.Display.RGB );
>
>         display.addMap( sombreadoMap );
>         display.addMap( sombreadoMapColor );
>
>         //Setting Contour Fill
>         ContourControl isoControl = (ContourControl)
> sombreadoMap.getControl();
>         isoControl.setContourFill(true);
>
>         System.out.println(sombreadoMap.isAutoScale());
>
>         ref_sombreado = new DataReferenceImpl("ref_sombreado");
>
>         // Adicionar ao display
>         display.addReference( ref_sombreado );
>
>     }
>
>     public void plotaSombreado(float[][] domain, float[][] vals)
>         throws RemoteException, VisADException {
>
>         display.removeReference(ref_sombreado);
>
>         sombreadoMap.resetAutoScale();
>
>         set_sombreado = new Gridded2DSet(domain_tuple, domain, NLINES,
> NLINES);
>
>         ff_sombreado = new FlatField( func_dom_sombreado, set_sombreado);
>
>         ff_sombreado.setSamples( vals );
>
>         ref_sombreado.setData( ff_sombreado );
>
>         display.addReference( ref_sombreado );
>     }
>
>     public visad.DisplayImpl getDisplay() {return display;}
>
>     public static void main(String[] args) throws RemoteException,
> VisADException {
>
>         NoRefresh noR = new NoRefresh();
>
>         //Janela que mostrará o display
>         JFrame jframe = new JFrame("Display do Metvis");
>         jframe.getContentPane().add(noR.getDisplay().getComponent());
>         jframe.setSize(610, 610);
>         jframe.setVisible(true);
>
>         float[][] matrix_1 = new float[1][NLINES*NLINES];
>
>         float[][] matrix_2 = new float[1][NLINES*NLINES];
>
>         float[][] domain = new float[2][NLINES*NLINES];
>
>         //Creating Domain
>         for(int c = 0; c < NLINES; c++)
>           for(int r = 0; r < NLINES; r++){
>             domain[0][ c * NLINES + r ] = 0f + r;
>             domain[1][ c * NLINES + r ] = 0f+ c;
>           }
>
>           //Creating Values
>         for(int c = 0; c < NLINES; c++)
>           for(int r = 0; r < NLINES; r++){
>             matrix_1[0][c * NLINES + r] = (float)
> (Math.sin(r*200)*Math.cos(c*200));
>             matrix_2[0][c * NLINES + r] = (float)
> (2*Math.sin(r*200)*Math.cos(c*200));
>         }
>
>         System.out.println("Drawing Data_1");
>         noR.plotaSombreado(domain, matrix_1);
>
>         //Waits some time.
>         try{ Thread.sleep(5*1000); }
>         catch (InterruptedException ex) {}
>
>         System.out.println("Drawing Data_2 = Data_1*2");
>         noR.plotaSombreado(domain, matrix_2);
>
>     }
> }