NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

Re: fine level control

Hi Michael,

You can do something almost as convenient. Assume that
'float new_values[length]' are the values for the k-th
component of 'field' where 'length = field.getLength()':

  float[][] values = field.getFloats(false); / don't copy
  // just update values for field component k
  values[k] = new_values;
  field.setSamples(values, false); // don't copy

You may need to initialize the values array to all
Float.NaN the first time you do this.

Good luck,
Bill

On Thu, 2 Dec 2004, Kapper Michael G Contr AFRL/PRSA wrote:

> Greetings,
>
>
>
> I am attempting real-time VisAD visualization with a plasma code and I have
> a few issues regarding RealTupleTypes and FlatField.setSamples().  I would
> like to include all possible variables that can be visualized when my code
> is initialized, but not all of them will be plotted all of the time as the
> simulation progresses.  The user can turn variables on and off through a
> GUI.  Therefore I would like to set only the samples for the data that I
> want to visualize at that particular iteration.  So I have set up my
> RealTupleTypes as following.
>
>
>
>
>
> density = RealType.getRealType("density", SI.meter, null);
>
> densityTuple = new RealTupleType(density);
>
>
>
> temperature = RealType.getRealType("temperature", SI.meter, null);
>
> temperatureTuple = new RealTupleType(temperature);
>
>
>
> velocity = new RealType[Ndims];
>
> for(int n=0;n<Ndims;n++)
>
> {   velocity[n] = RealType.getRealType("velocity"+n, SI.meter, null);
>
> }
>
> velocityField = new RealTupleType(velocity);
>
>
>
> electromagnetic = new RealType[Ndims];
>
> for(int n=0;n<Ndims;n++)
>
> {   electromagnetic[n] = RealType.getRealType("electromagnetic"+n, SI.meter,
> null);
>
> }
>
> electromagneticField = new RealTupleType(electromagnetic);
>
>
>
> etc...
>
>
>
>
>
> This has worked well so far because I am able to setSamples() for each
> individual FlatField separately.  Therefore when I don't want to visualize a
> variable, I just don't set its samples.  But what I really want, is to do
> things like generate a 3D surface plot of the density and then map
> streamlines for the flow field on top of the density surface.  This is
> easily accomplished by creating a RealTupleType with density, velocityX, and
> velocityY.  Then you just set the samples for all 3 variables.  But what
> happens if you don't want to map the streamlines to the density surface
> anymore?  It seems as if you still have to set the samples for all 3
> variables.  I don't see  method in FlatField which allows you to set samples
> for individual components.  If not, is there a way around this, or possibly
> should a new method be added which allows you to select which variable you
> want to set?  I guess you could create a new RealTupleType, FlatField,
> DataReference, etc..., but it would be nice if one could selectively set the
> samples for a desired variable.
>
>
>
> Thanks in advance.
>
>

>From owner-visad@xxxxxxxxxxxxxxxx Fri 3  2004 Dec 15:33:59
Message-ID: <1102088039.41b087676320e@xxxxxxxxxxxxxxxxxxx>
Date: Fri,  3 Dec 2004 15:33:59 +0000
From: Adityarajsingh Santokhee <ads@xxxxxxxxxxxxxxxxxxxx>
To: visad@xxxxxxxxxxxxxxxx
Subject: Problem with animation
Received: (from majordo@localhost)
        by unidata.ucar.edu (UCAR/Unidata) id iB3FYVVS015837
        for visad-out; Fri, 3 Dec 2004 08:34:31 -0700 (MST)
Received: from vimg3.rdg.ac.uk (vimg3.rdg.ac.uk [134.225.1.80])
        by unidata.ucar.edu (UCAR/Unidata) with ESMTP id iB3FYTlI015803
        for <visad@xxxxxxxxxxxxxxxx>; Fri, 3 Dec 2004 08:34:29 -0700 (MST)
Organization: UCAR/Unidata
Keywords: 200412031534.iB3FYTlI015803
Received: from vimp1.rdg.ac.uk ([134.225.16.90])
        by vimg3.rdg.ac.uk (Exim: gateway)
        with esmtp id 1CaFRe-00022V-00
        for visad@xxxxxxxxxxxxxxxx; Fri, 03 Dec 2004 15:34:06 +0000
Received: from vimh1.rdg.ac.uk ([134.225.16.83])
        by vimp1.rdg.ac.uk (Exim: virusscanner)
        with esmtp id 1CaFRY-0001Py-00
        for visad@xxxxxxxxxxxxxxxx; Fri, 03 Dec 2004 15:34:00 +0000
Received: from mercury.nerc-essc.ac.uk ([192.171.166.1])
        by vimh1.rdg.ac.uk (Exim: host)
        with esmtp id 1CaFRX-0003Ta-00
        for visad@xxxxxxxxxxxxxxxx; Fri, 03 Dec 2004 15:33:59 +0000
Received: from sweeney.nerc-essc.ac.uk (sweeney [192.171.166.116])
        by mercury.nerc-essc.ac.uk (8.12.10/8.12.10) with ESMTP id 
iB3FXx7o016837
        for <visad@xxxxxxxxxxxxxxxx>; Fri, 3 Dec 2004 15:33:59 GMT
Received: from localhost.localdomain (sweeney [127.0.0.1])
        by sweeney.nerc-essc.ac.uk (8.12.8/8.12.8) with ESMTP id iB3FXxml017250
        for <visad@xxxxxxxxxxxxxxxx>; Fri, 3 Dec 2004 15:33:59 GMT
Received: (from apache@localhost)
        by localhost.localdomain (8.12.8/8.12.8/Submit) id iB3FXxHY017248
        for visad@xxxxxxxxxxxxxxxx; Fri, 3 Dec 2004 15:33:59 GMT
Received: from brahman.nerc-essc.ac.uk (brahman.nerc-essc.ac.uk 
[192.171.166.139]) 
        by www.nerc-essc.ac.uk (IMP) with HTTP 
        for <ads@xxxxxxxxxxxxxxxxxxxxxxx>; Fri,  3 Dec 2004 15:33:59 +0000
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
User-Agent: Internet Messaging Program (IMP) 3.2.2
X-Originating-IP: 192.171.166.139
X-Scanner: exiscan *1CaFRY-0001Py-00*TABOMS37YVU* (The University of Reading)
Sender: owner-visad@xxxxxxxxxxxxxxxx
Precedence: bulk


Hello,

I have recently started using the VisAD Graphics API. I have tried  Ugo Taddei
examples and the tutorials and found them very useful.

My problem is as follows. I am trying to do a simple animation of a surface :
(lat,lon)->temperature. My objective is to see how temperature of the surface
changes over time. I have been testing with the "infinite loop example" calling
FlatField.setSamples(float [][] samples) to update the display. 

I am getting some results. However, the problem is that the graph is moving
along the x-axis with each new frame. This is the subroutine I am using. 



  public void displayData(float [][] myData) throws RemoteException,
VisADException {

    // Create the quantities
    // Use RealType(String name);

    latitude = RealType.getRealType("latitude");
    longitude = RealType.getRealType("longitude");

    domain_tuple = new RealTupleType(latitude, longitude);
    temperature = RealType.getRealType("temperature");


    // Create a FunctionType (domain_tuple -> temperature )
    // Use FunctionType(MathType domain, MathType range)

    func_domain_temp = new FunctionType( domain_tuple, temperature);
   // func_t_range = new FunctionType(minute, func_domain_temp );
   

    // Create the domain Set
    // Use LinearDSet(MathType type, double first1, double last1, int lengthX,
    //                               double first2, double last2, int lengthY)

    int NCOLS = 89;
    int NROWS = 105;

//  domain_set = new Linear2DSet(domain_tuple, -Math.PI, Math.PI, NROWS,
 //                                            -Math.PI, Math.PI, NCOLS);

    domain_set = new Linear2DSet(domain_tuple,  46, 59,  NROWS, -7, 3, NCOLS);


    int tSamples = 10;
   

   // Get the Set samples to facilitate the calculations

    float[][] set_samples = domain_set.getSamples( false );


    // The actual temperature values are stored in this array
    // float[1][ number_of_samples ]

    float[][] flat_samples = new float[1][NCOLS * NROWS];
  
    // We fill our 'flat' array with the generated values
    // by looping over NCOLS and NROWS

  // Create the FlatFields
    // Use FlatField(FunctionType type, Set domain_set)

      // For the colored image


    int pos=0, temp=0, count=0;

   
    for(int c = 0; c < NCOLS; c++)
    {
             for(int r = 0; r < NROWS; r++)
              {
                        pos = (NCOLS * r) + c ;
                        flat_samples[0][count] = myData[0][pos];
                        count++;
              }
    }
    
    // ...and put the values above into it
    // Note the argument false, meaning that the array won't be copied
    
    vals_ff = new FlatField( func_domain_temp, domain_set);
    vals_ff.setSamples( flat_samples );
   

    // Get the values from the temperature FlatField
    // create flat_isoVals array for clarity's sake
    // "false" argument means "don't copy"


    // Create Display and its maps
    // A 2D display

    display = new DisplayImplJ2D("display1");

    // Get display's graphics mode control and draw scales

    GraphicsModeControl dispGMC = (GraphicsModeControl) 
display.getGraphicsModeControl();
    dispGMC.setScaleEnable(true);


    // Create the ScalarMaps: latitude to YAxis, longitude to XAxis and
    // temperature to RGB and
    // isoTemperature to IsoContour
    // Use ScalarMap(ScalarType scalar, DisplayRealType display_scalar)

    latMap = new ScalarMap( latitude,    Display.YAxis );
    lonMap = new ScalarMap( longitude, Display.XAxis );
    tempRGBMap = new ScalarMap( temperature,  Display.RGB );


    // Add maps to display

    display.addMap( latMap );
    display.addMap( lonMap );
    display.addMap( tempRGBMap );


    // Create data references and set the FlatField as our data

    data_ref = new DataReferenceImpl("data_ref");
    data_ref.setData( vals_ff );
    display.addReference( data_ref );
   

    // Create application window and add display to window

    JFrame jframe = new JFrame("Example");
    jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jframe.getContentPane().add(display.getComponent());


    // Set window size and make it visible
    jframe.setSize(300, 300);
    jframe.setVisible(true);


    // index to count time step
    int index=0;
    count = 0;
    
    // Loop forever, changing the samples array every time
    while(true){
      try{

        for (int t=0; t<tSamples; t++)
        {       
                for(int c = 0; c < NCOLS; c++)
                {
                        for(int r = 0; r < NROWS; r++)
                        {
                                pos = (NCOLS * r) + c + temp;
                                flat_samples[0][count] = myData[0][pos];
                                count++;
                        }
                }
                count = 0;
                temp = pos;
           
                // ...and put the values above into it
                // Note the argument false, meaning that the array won't be 
copied

                vals_ff.setSamples( flat_samples);
          
                //index++;
                Thread.sleep(500);
        }
        count = 0;
        temp = 0;
        
        
      }
      catch (InterruptedException ie){
       ie.printStackTrace();
      }


    }

  }
}


Any ideas ?

Thanks in advance.

Adit.




-----------------------------------------------------------------------
 Adityarajsingh Santokhee         Tel: +44 118 378 5213 (direct line)
 eScience Data Manager            Tel: +44 118 378 8741 (ESSC)
 Reading e-Science Centre         Fax: +44 118 378 6413
 ESSC                             Email: ads@xxxxxxxxxxxxxxxxxxxx
 University of Reading
 3 Earley Gate
 Reading RG6 6AL, UK

-----------------------------------------------------------------------

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
>From owner-visad@xxxxxxxxxxxxxxxx Fri 3  2004 Dec 15:36:19
Message-ID: <1102088179.41b087f3c168e@xxxxxxxxxxxxxxxxxxx>
Date: Fri,  3 Dec 2004 15:36:19 +0000
From: Adityarajsingh Santokhee <ads@xxxxxxxxxxxxxxxxxxxx>
To: visad-list@xxxxxxxxxxxxx
Subject: Problem with animation
Received: (from majordo@localhost)
        by unidata.ucar.edu (UCAR/Unidata) id iB3FaciA016220
        for visad-out; Fri, 3 Dec 2004 08:36:38 -0700 (MST)
Received: from ssec.wisc.edu (mahogany.ssec.wisc.edu [128.104.110.2])
        by unidata.ucar.edu (UCAR/Unidata) with ESMTP id iB3FaalI016206
        for <visad-list@xxxxxxxxxxxxxxxx>; Fri, 3 Dec 2004 08:36:36 -0700 (MST)
Organization: UCAR/Unidata
Keywords: 200412031536.iB3FaalI016206
Received: from vimg3.rdg.ac.uk ([134.225.1.80] verified)
  by ssec.wisc.edu (CommuniGate Pro SMTP 4.1.8)
  with ESMTP id 3327777 for visad-list@xxxxxxxxxxxxx; Fri, 03 Dec 2004 09:36:31 
-0600
Received: from vimp1.rdg.ac.uk ([134.225.16.90])
        by vimg3.rdg.ac.uk (Exim: gateway)
        with esmtp id 1CaFTy-000244-00
        for visad-list@xxxxxxxxxxxxx; Fri, 03 Dec 2004 15:36:30 +0000
Received: from vimh1.rdg.ac.uk ([134.225.16.83])
        by vimp1.rdg.ac.uk (Exim: virusscanner)
        with esmtp id 1CaFTs-0001Tr-00
        for visad-list@xxxxxxxxxxxxx; Fri, 03 Dec 2004 15:36:24 +0000
Received: from mercury.nerc-essc.ac.uk ([192.171.166.1])
        by vimh1.rdg.ac.uk (Exim: host)
        with esmtp id 1CaFTr-0003Xg-00
        for visad-list@xxxxxxxxxxxxx; Fri, 03 Dec 2004 15:36:23 +0000
Received: from sweeney.nerc-essc.ac.uk (sweeney [192.171.166.116])
        by mercury.nerc-essc.ac.uk (8.12.10/8.12.10) with ESMTP id 
iB3FaN7o016946
        for <visad-list@xxxxxxxxxxxxx>; Fri, 3 Dec 2004 15:36:23 GMT
Received: from localhost.localdomain (sweeney [127.0.0.1])
        by sweeney.nerc-essc.ac.uk (8.12.8/8.12.8) with ESMTP id iB3FaNml017260
        for <visad-list@xxxxxxxxxxxxx>; Fri, 3 Dec 2004 15:36:23 GMT
Received: (from apache@localhost)
        by localhost.localdomain (8.12.8/8.12.8/Submit) id iB3FaJBw017258
        for visad-list@xxxxxxxxxxxxx; Fri, 3 Dec 2004 15:36:19 GMT
Received: from brahman.nerc-essc.ac.uk (brahman.nerc-essc.ac.uk 
[192.171.166.139]) 
        by www.nerc-essc.ac.uk (IMP) with HTTP 
        for <ads@xxxxxxxxxxxxxxxxxxxxxxx>; Fri,  3 Dec 2004 15:36:19 +0000
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
User-Agent: Internet Messaging Program (IMP) 3.2.2
X-Originating-IP: 192.171.166.139
X-Scanner: exiscan *1CaFTs-0001Tr-00*X6g6wcx6gwo* (The University of Reading)
Sender: owner-visad@xxxxxxxxxxxxxxxx
Precedence: bulk


Hello,

I have recently started using the VisAD Graphics API. I have tried  Ugo Taddei
examples and the tutorials and found them very useful.

My problem is as follows. I am trying to do a simple animation of a surface :
(lat,lon)->temperature. My objective is to see how temperature of the surface
changes over time. I have been testing with the "infinite loop example" calling
FlatField.setSamples(float [][] samples) to update the display. 

I am getting some results. However, the problem is that the graph is moving
along the x-axis with each new frame. This is the subroutine I am using. 



  public void displayData(float [][] myData) throws RemoteException,
VisADException {

    // Create the quantities
    // Use RealType(String name);

    latitude = RealType.getRealType("latitude");
    longitude = RealType.getRealType("longitude");

    domain_tuple = new RealTupleType(latitude, longitude);
    temperature = RealType.getRealType("temperature");


    // Create a FunctionType (domain_tuple -> temperature )
    // Use FunctionType(MathType domain, MathType range)

    func_domain_temp = new FunctionType( domain_tuple, temperature);
   // func_t_range = new FunctionType(minute, func_domain_temp );
   

    // Create the domain Set
    // Use LinearDSet(MathType type, double first1, double last1, int lengthX,
    //                               double first2, double last2, int lengthY)

    int NCOLS = 89;
    int NROWS = 105;

//  domain_set = new Linear2DSet(domain_tuple, -Math.PI, Math.PI, NROWS,
 //                                            -Math.PI, Math.PI, NCOLS);

    domain_set = new Linear2DSet(domain_tuple,  46, 59,  NROWS, -7, 3, NCOLS);


    int tSamples = 10;
   

   // Get the Set samples to facilitate the calculations

    float[][] set_samples = domain_set.getSamples( false );


    // The actual temperature values are stored in this array
    // float[1][ number_of_samples ]

    float[][] flat_samples = new float[1][NCOLS * NROWS];
  
    // We fill our 'flat' array with the generated values
    // by looping over NCOLS and NROWS

  // Create the FlatFields
    // Use FlatField(FunctionType type, Set domain_set)

      // For the colored image


    int pos=0, temp=0, count=0;

   
    for(int c = 0; c < NCOLS; c++)
    {
             for(int r = 0; r < NROWS; r++)
              {
                        pos = (NCOLS * r) + c ;
                        flat_samples[0][count] = myData[0][pos];
                        count++;
              }
    }
    
    // ...and put the values above into it
    // Note the argument false, meaning that the array won't be copied
    
    vals_ff = new FlatField( func_domain_temp, domain_set);
    vals_ff.setSamples( flat_samples );
   

    // Get the values from the temperature FlatField
    // create flat_isoVals array for clarity's sake
    // "false" argument means "don't copy"


    // Create Display and its maps
    // A 2D display

    display = new DisplayImplJ2D("display1");

    // Get display's graphics mode control and draw scales

    GraphicsModeControl dispGMC = (GraphicsModeControl) 
display.getGraphicsModeControl();
    dispGMC.setScaleEnable(true);


    // Create the ScalarMaps: latitude to YAxis, longitude to XAxis and
    // temperature to RGB and
    // isoTemperature to IsoContour
    // Use ScalarMap(ScalarType scalar, DisplayRealType display_scalar)

    latMap = new ScalarMap( latitude,    Display.YAxis );
    lonMap = new ScalarMap( longitude, Display.XAxis );
    tempRGBMap = new ScalarMap( temperature,  Display.RGB );


    // Add maps to display

    display.addMap( latMap );
    display.addMap( lonMap );
    display.addMap( tempRGBMap );


    // Create data references and set the FlatField as our data

    data_ref = new DataReferenceImpl("data_ref");
    data_ref.setData( vals_ff );
    display.addReference( data_ref );
   

    // Create application window and add display to window

    JFrame jframe = new JFrame("Example");
    jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jframe.getContentPane().add(display.getComponent());


    // Set window size and make it visible
    jframe.setSize(300, 300);
    jframe.setVisible(true);


    // index to count time step
    int index=0;
    count = 0;
    
    // Loop forever, changing the samples array every time
    while(true){
      try{

        for (int t=0; t<tSamples; t++)
        {       
                for(int c = 0; c < NCOLS; c++)
                {
                        for(int r = 0; r < NROWS; r++)
                        {
                                pos = (NCOLS * r) + c + temp;
                                flat_samples[0][count] = myData[0][pos];
                                count++;
                        }
                }
                count = 0;
                temp = pos;
           
                // ...and put the values above into it
                // Note the argument false, meaning that the array won't be 
copied

                vals_ff.setSamples( flat_samples);
          
                //index++;
                Thread.sleep(500);
        }
        count = 0;
        temp = 0;
        
        
      }
      catch (InterruptedException ie){
       ie.printStackTrace();
      }


    }

  }
}


Any ideas ?

Thanks in advance.

Adit.




-----------------------------------------------------------------------
 Adityarajsingh Santokhee         Tel: +44 118 378 5213 (direct line)
 eScience Data Manager            Tel: +44 118 378 8741 (ESSC)
 Reading e-Science Centre         Fax: +44 118 378 6413
 ESSC                             Email: ads@xxxxxxxxxxxxxxxxxxxx
 University of Reading
 3 Earley Gate
 Reading RG6 6AL, UK

-----------------------------------------------------------------------

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

----- End forwarded message -----


-----------------------------------------------------------------------
 Adityarajsingh Santokhee         Tel: +44 118 378 5213 (direct line)
 eScience Data Manager            Tel: +44 118 378 8741 (ESSC)
 Reading e-Science Centre         Fax: +44 118 378 6413
 ESSC                             Email: ads@xxxxxxxxxxxxxxxxxxxx
 University of Reading
 3 Earley Gate
 Reading RG6 6AL, UK

-----------------------------------------------------------------------

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

  • 2004 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the visad archives: