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.

Linear2DSet Question

Hi Bill and others,

sometime last year you helped me creating a Delaunay-Triangulation with
Visad and catching the Java3D-Shape3D.
In the meantime I used a similar way to construct a terrain out of a
Linear2DSet:



    public void makeSurface() {

        
        eastValues = RealType.getRealType("eastValues");
        northValues = RealType.getRealType("northValues");
        heightValues = RealType.getRealType("heightValues");
        
        try {
            domain_tuple = new RealTupleType(northValues,eastValues);
            // Create a FunctionType (domain_tuple -> range_tuple);
            func_en_h = new FunctionType(domain_tuple, heightValues);
            
            //System.out.println("nCols "+nCols);
            //System.out.println("nRows "+nRows);

//System.out.println(northMin+" "+northMax+" "+eastMin+" "+eastMax);
            domain_set = new
Linear2DSet(domain_tuple,northMin,northMax,nRows,eastMin, eastMax, nCols); 

            // Get the Set samples to facilitate the calculations
            float[][] set_samples = domain_set.getSamples( true );
            
            // We create another array, with the same number of elements
of
            // altitude and temperature, but organized as 
            // float[2][ number_of_samples ]        
            float[][] flat_samples = new float[1][nCols * nRows]; 
            
            // ...and then we fill our 'flat' array with the generated
values
            // by looping over NCOLS and NROWS     
            // specifiy height
            for(int c = 0; c < nCols; c++){
                for(int r = 0; r < nRows; r++){     
                    flat_samples[0][c*nRows+r] = height[c*nRows+r]; 
                }
            }
            
            // Create a FlatField  
            // Use FlatField(FunctionType type, Set domain_set)    
            vals_ff = new FlatField( func_en_h, domain_set);
            
            // ...and put the values above into it
            // Note the argument false, meaning that the array won't be
copied 
            vals_ff.setSamples( flat_samples , false ); 

            // Create Display and its maps    
            // A 2D display    
            display = new DisplayImplJ3D("display1");    
            
            // Create the ScalarMaps: latitude to XAxis, longitude to
YAxis and
            // altitude to RGB and temperature to IsoContour
            // Use ScalarMap(ScalarType scalar, DisplayRealType
display_scalar) 
            eastMap = new ScalarMap( eastValues, Display.YAxis );
            northMap = new ScalarMap( northValues, Display.XAxis );    
            heightMap = new ScalarMap(heightValues,Display.ZAxis);

            eastMap.setRange(-1.0, 1.0);
            northMap.setRange(-1.0, 1.0);
            heightMap.setRange(-1.0, 1.0);

            
            // Add maps to display
            display.addMap( eastMap );
            display.addMap( northMap );    
            display.addMap( heightMap );

            // Create a data reference and set the FlatField as our data 
            data_ref = new DataReferenceImpl("data_ref");
            data_ref.setData( vals_ff );
            renderer = new DefaultRendererJ3D();
            
            // Add reference to display
            display.addReferences(renderer,data_ref);
            //display.addReference( data_ref );
            display.addDisplayListener(listener);
        }
        catch (VisADException ve) {
            System.out.println("VisADException");
            System.out.println(ve.getMessage());
        }       
        catch (RemoteException re) {
            System.out.println("RemoteExcpetion");
            System.out.println(re.getMessage());
        }
    }

This is working for data samples with a rectangle layout.

. . . . .
. . . . .
. . . . .
. . . . .

My new kind of data samples is still a grid like structure, with the same 
space value between my coordinates, but it is not filled to an recangle.
It looks more like this:

        . .
      . . . 
        . . .
        . . . .
      . . . . . .
        . . . .
          . .

Is there a possibility to fill the not defined points with a kind of hole
value, or is it possible to create a not rectangle Linear2DSet? Or is
there another solution, I am not aware of?

Thanks for your help in advance.

Desiree

oooooooooooooooooooooooooooooooooooooooooooooooo
Desiree Hilbring

Institut fuer Photogrammetrie und Fernerkundung  
Universitaet Karlsruhe, Germany
email: hilbring@xxxxxxxxxxxxxxxxxxxx             
# 0721 6083676                                   
oooooooooooooooooooooooooooooooooooooooooooooooo


On Mon, 16 Oct 2000, Bill Hibbard wrote:

> Hi Desiree,
> 
> > I did manage to include the with VisAD created Delaunay Shape3D Object in
> > my application.
> 
> Great.
> 
> >   /**
> >      * Triangulation of given set of points with delaunay. This method
> >      * throws an event, when 3D-Objects are ready. See displayChanged.
> >      */
> >     public void makeSurface() {
> >         //System.out.println("Hallo Delaunay!");
> >         RealType x = RealType.getRealType("x");
> >         RealType y = RealType.getRealType("y");
> >         RealType height = RealType.getRealType("height");
> >         try {
> >             RealTupleType xy = new RealTupleType(x, y);
> >             FunctionType terrain_type = new FunctionType(xy, height);
> >             Irregular2DSet set = new Irregular2DSet(xy,new float[][]
> > {eastValues,northValues});
> >             FlatField terrain = new FlatField(terrain_type, set);
> >             terrain.setSamples(new float[][] {heightValues});
> > 
> >             display = new DisplayImplJ3D("display1");
> >             ScalarMap hoxmap = new ScalarMap(x, Display.XAxis);
> >             ScalarMap reymap = new ScalarMap(y, Display.YAxis);
> >             ScalarMap heightmap = new ScalarMap(height, Display.ZAxis);
> > 
> >             display.addMap(hoxmap);
> >             display.addMap(reymap);
> >             display.addMap(heightmap);
> > 
> >             hoxmap.setRange(-1.0, 1.0);
> >             reymap.setRange(-1.0, 1.0);
> >             heightmap.setRange(-1.0, 1.0);
> > 
> >             DataReferenceImpl data_ref = new
> > DataReferenceImpl("data_ref");
> >             data_ref.setData( terrain );
> >             renderer = new DefaultRendererJ3D();
> >             display.addReferences(renderer,data_ref);
> >             display.addDisplayListener(listener);
> >         }
> >         catch (VisADException ve) {
> >             System.out.println("VisAd TupleType Exception");
> >         }
> >         catch (RemoteException re) {
> >             System.out.println("RemoteExcpetion");
> >         }
> >         //System.out.println("Delaunay ende!");
> >     }
> > 
> > Is it possible with visad to get a shap3d of a part of this triangulation?
> > Say, I do have coordinates of a point and want to clip the parts of the
> > object, which are more far away, than 10m, or something similar?
> 
> Yes, if you want to clip in x, y and/or height.  Just add
> ScalarMaps from any of them to Display.SelectRange, then
> do something like:
> 
>   RangeControl control = (RangeControl) range_map.getControl();
>   control.setRange(low, hi); // set low and hi clip values
> 
> Note this is different from ScalarMap.setRange().  It should
> give you the part of the irregular syrface within the clip range(s).
> 
> Cheers,
> Bill
> ----------------------------------------------------------
> Bill Hibbard, SSEC, 1225 W. Dayton St., Madison, WI  53706
> hibbard@xxxxxxxxxxxxxxxxx  608-263-4427  fax: 608-263-6738
> http://www.ssec.wisc.edu/~billh/vis.html
> 


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