package visad.test;

import java.awt.BorderLayout;
import java.rmi.RemoteException;

import javax.media.j3d.BranchGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;

import visad.AnimationControl;
import visad.CoordinateSystem;
import visad.GridCoordinateSystem;
import visad.DataReference;
import visad.DataReferenceImpl;
import visad.Display;
import visad.DisplayImpl;
import visad.Field;
import visad.FieldImpl;
import visad.FlatField;
import visad.FunctionType;
import visad.Integer1DSet;
import visad.Linear2DSet;
import visad.Gridded2DSet;
import visad.RealTupleType;
import visad.RealType;
import visad.ScalarMap;
import visad.VisADException;
import visad.bom.ImageRendererJ3D;
import visad.java3d.DisplayImplJ3D;
import visad.java3d.DisplayRendererJ3D;
import visad.util.Util;

/**
 * Simple test for AnimationControl and ImageRendererJ3D.
 */
public class ImageAnimationTest extends JPanel {

  ImageRendererJ3D imgRend;

  public static final float[] makeSinusoidalSamples(int lenX, int lenY, int waveNum) {
    float[] samples = new float[lenX*lenY];
    int index = 0;
    double PI = Math.PI;
    for (int ii = 0; ii < lenX; ii++) {
      for (int jj = 0; jj < lenY; jj++) {
        samples[index] = (float) (
            Math.sin((waveNum*PI) / 100 * jj) *
            Math.sin((waveNum*PI) / 100 * ii));
        index++;
      }
    }
    return samples;
  }
  
  protected float[][] makeSamples(int size, int num) {
    float[][] samples = new float[num][size^2];
    for (int i=0; i ((x, y) -> val))
    RealTupleType pxlA = new RealTupleType(RealType.getRealType("x_a"), RealType.getRealType("y_a"));
    //-Linear2DSet imgSet = new Linear2DSet(pxl, 0, size-1, size, 0, size-1, size); 
    Linear2DSet set = new Linear2DSet(RealTupleType.Generic2D, 0, size-1, size, 0, size-1, size); 
    float[][] locs = set.getSamples();
    Gridded2DSet locs_set = new Gridded2DSet(pxlA, locs, size, size); 
    GridCoordinateSystem gcs = new GridCoordinateSystem(locs_set);


    //-RealTupleType pxl = new RealTupleType(RealType.getRealType("x"), RealType.getRealType("y"));
    RealTupleType pxl = new RealTupleType(RealType.getRealType("x"), RealType.getRealType("y"), gcs, null);
    Linear2DSet imgSet = new Linear2DSet(pxl, 0, size-1, size, 0, size-1, size); 
    FunctionType pxlVal = new FunctionType(pxl, RealType.getRealType("val"));
    FunctionType timePxlVal = new FunctionType(RealType.Time, pxlVal);
    


    Field timeFld = new FieldImpl(timePxlVal, new Integer1DSet(RealType.Time, num));
    
    float[][] samples = makeSamples(size, num);
    
    for (int i = 0; i < samples.length; i++) {
      FlatField imgFld = new FlatField(pxlVal, imgSet);

      imgFld.setSamples(new float[][]{samples[i]}, false);
      
      // set image for time
      timeFld.setSample(i, imgFld, false);
    }
    System.out.println("makeSamples done");
    
    DataReference ref = new DataReferenceImpl("image");
    ref.setData(timeFld);
    
    DisplayImpl display = new DisplayImplJ3D("image display");
    imgRend = new ImageRendererJ3D();
    System.err.println("Renderer:"+imgRend.toString());

    //-display.addMap(new ScalarMap(RealType.getRealType("x"), Display.XAxis));
    //-display.addMap(new ScalarMap(RealType.getRealType("y"), Display.YAxis));
    display.addMap(new ScalarMap(RealType.getRealType("x_a"), Display.XAxis));
    display.addMap(new ScalarMap(RealType.getRealType("y_a"), Display.YAxis));
    display.addMap(new ScalarMap(RealType.getRealType("val"), Display.RGB));
    
    ScalarMap aniMap = new ScalarMap(RealType.Time, Display.Animation);
    display.addMap(aniMap);
    AnimationControl aniCtrl = (AnimationControl) aniMap.getControl();
    aniCtrl.setStep(500);
    aniCtrl.setOn(true);
    display.addReferences(imgRend, ref);
    
    setLayout(new BorderLayout());
    add(display.getComponent());
    
    try {
      Thread.sleep(1000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

    //-BranchGroup scene = ((DisplayRendererJ3D) imgRend.getDisplayRenderer()).getRoot();
    //-Util.printSceneGraph(scene);
  }

  public static void main(String[] args) throws RemoteException, VisADException {
    
    int num = 0;
    int size = 0;
    try {
      num = Integer.parseInt(args[0]);
      size = Integer.parseInt(args[1]);
    } catch (Exception e) {
      System.err.println("USAGE: ImageAnimationTest  ");
      System.exit(1);
    }
    
    Util.printJ3DProperties(null);
    
    JFrame frame = new JFrame("Image Animation Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BorderLayout());
    final ImageAnimationTest aniTest = new ImageAnimationTest(num, size);
    frame.add(aniTest);
    frame.setSize(600, 600);
    frame.setVisible(true);

  }
}

 

Ads help maintain this website.