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.
Basically, I create two 2D FieldImpl's mapping ( (lat, lon) -> temp) ), thencreate 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.
EdwardDisplayImplJ2D 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; }
visad
archives: