import visad.*;
import visad.util.*;
import visad.java3d.DisplayImplJ3D;
import java.rmi.RemoteException;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import visad.util.*;
import java.io.*;

public class mytest{

  public mytest(String []args)
    throws RemoteException, VisADException {
    RealType X = new RealType("X",SI.meter,null);	
    RealType Y = new RealType("Y",SI.meter,null);
    RealType Z = new RealType("Z",SI.meter,null);
    RealType T = new RealType("T",SI.kelvin,null);
    
    RealTupleType domain = new RealTupleType(X, Y ,Z );
    RealTupleType Temp = new RealTupleType(T);
    FunctionType function = new FunctionType( domain, Temp);
    int N=100;
    float[][] samples =new float[3][N];   
        for(int r = 0; r < N; r++)
        { 
             samples[0][ r ] = (float)(r/10);
             samples[1][ r ] = (float)(r-10*(r/10));
             samples[2][ r ] = (float)(0);
        }


    
    Set domain_set = new Irregular3DSet(domain, samples);

    FlatField vals_ff = new FlatField(function , domain_set);
  
  float[][] flat_samples =new float[1][N];   
 	
        for(int r = 0; r < N; r++)
        { 
             flat_samples[0][ r ] = (float)(r);
        }
        vals_ff.setSamples( flat_samples ); 
  
    
    
    DisplayImpl display = new DisplayImplJ3D("display1", DisplayImplJ3D.POLYGON_LINE);
    GraphicsModeControl dispGMC = (GraphicsModeControl)  display.getGraphicsModeControl();
    dispGMC.setScaleEnable(true);  

    ScalarMap XMap = new ScalarMap( X, Display.XAxis );
    ScalarMap YMap = new ScalarMap( Y, Display.YAxis );
    ScalarMap ZMap = new ScalarMap( Z, Display.ZAxis );
    ScalarMap TMap = new ScalarMap( T,  Display.RGB );
    
    display.addMap( XMap );
    display.addMap( YMap );
    display.addMap( ZMap );
    display.addMap( TMap );

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

    JFrame jframe = new JFrame("FEM 3D viewer");
    jframe.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {System.exit(0);}
    });

    jframe.getContentPane().setLayout(new BorderLayout());
    jframe.getContentPane().add(display.getComponent(),BorderLayout.CENTER);
 
    
    jframe.setSize(600, 750);
    jframe.setVisible(true);
    
  }
  public static void main(String[] args)
    throws RemoteException, VisADException
  {
    new mytest(args);
  }
}

