I am trying to follow the pattern shown in SimpleAnimation.java to create
an animated display of my own data set, but I appear to be making a subtle
mistake in setting up my data structures.
Basically, I create two 2D FieldImpl's mapping ( (lat, lon) -> temp) ), then
create a new FieldImpl mapping (time -> ( (lat, lon) -> temp) ). I use the
setSample method to make my first 2D field correspond to time 0, and the
second to time 1. Then I animate the result, and turn on stepping ( I think).
The first frame displays properly, and the legend in the lower right hand
corner says 1 of 2, but the second frame doesn't ever appear.
Code is below: if anyone sees whatever obvious thing it is I've missed I'd
appreciate it.
Edward
DisplayImplJ2D makeAnimationDisplay(FieldImpl displayField1, FieldImpl
displayField2) throws VisADException, java.rmi.RemoteException
{
// get the FunctionType of the flatfield
FunctionType myFuncType = (FunctionType)displayField1.getType();
RealType rangeType = (RealType) myFuncType.getRange();
RealTupleType domainType = (RealTupleType) myFuncType.getDomain();
RealType domainComponents[] = domainType.getRealComponents();
// create a new FieldImpl containing the two slices as alternate times
RealType time = RealType.Time;
RealTupleType timeTupleType = new RealTupleType(time);
FunctionType animatedFuncType = new FunctionType(time, myFuncType);
// fake up a time domain
float timeSamples[][] = { {0, 1} };
Gridded1DSet timeSet = new Gridded1DSet(RealType.Time,
timeSamples, 2);
// fake up a Field
FieldImpl displayField = new FieldImpl(animatedFuncType, timeSet);
// add the first layer to the time stream
double timeSample1[] = { (double) timeSamples[0][0] };
double timeSample2[] = { (double) timeSamples[0][1] };
RealTuple time1 = new RealTuple(timeTupleType, timeSample1);
RealTuple time2 = new RealTuple(timeTupleType, timeSample2);
displayField.setSample(time1, displayField1);
displayField.setSample(time2, displayField2);
// check the function type
FunctionType seqType = (FunctionType) displayField.getType();
RealTupleType testDomainType = seqType.getDomain();
RealType indexType = (RealType) testDomainType.getComponent(0);
Set domainSet = (Gridded1DSet) displayField.getDomainSet();
// create the display and the scales
DisplayImplJ2D display = new DisplayImplJ2D("myDisplay");
GraphicsModeControl dispGMC = (GraphicsModeControl)
display.getGraphicsModeControl();
dispGMC.setScaleEnable(true);
AnimationControl animC = new AnimationControlJ2D(display,
time);
animC.setOn(true);
//animC.setStep(1);
animC.setDirection(true);
ScalarMap colMap = new ScalarMap( domainComponents[1],
Display.XAxis );
ScalarMap rowMap = new ScalarMap( domainComponents[0],
Display.YAxis );
ScalarMap pixMap = new ScalarMap( rangeType, Display.RGB );
ScalarMap animMap = new ScalarMap( indexType , Display.Animation);
// Add maps to display
display.addMap( colMap );
display.addMap( rowMap );
display.addMap( pixMap );
display.addMap( animMap );
// create data reference
DataReferenceImpl dataReference = new DataReferenceImpl("displayRef");
dataReference.setData(displayField);
// add reference to display
display.addReference( dataReference);
return display;
}