swarm-support
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Lists of Raster objects


From: Matt M. Burke
Subject: Lists of Raster objects
Date: Fri, 3 Apr 1998 13:29:04 -0500 (EST)

Help!  I'm sure I'm overlooking something simple....

First, I should mention I'm using the Win95 version since my access
to our Sun network is temporarily down.

I've been trying to whip up a "simple" little test and have hit a snag.

Problem Summary:  I create a list of ZoomRasters and a list of
Value2dDisplays and hook them up to a list of ConwayLife2ds.  The model
compiles and runs, but all the raster windows are empty.

Details: (Code is attached at the end of this message.)

In ConwayModelSwarm I  create a list of ConwayLife2ds.  The Swarm
implements a method "getWorldList" which returns this list of CAs.

In ConwayObserverSwarm I fetch the list of CAs from the model swarm
and iterate over this list creating a ZoomRaster and a Value2dDisplay
for each.

Now I build an ActionGroup and the first things I stick in there are
a createActionForEach targeting the Value2dDisplay list and sending the
message 'update' and then a createActionForEach targeting the raster list
and sending a drawSelf message.

Now, here's the kicker:  I create two global variables myRaster and
myDisplay and use them to temporarily hold each of the rasters/v2ds as
I'm iterating over my list of CAs.  So when I finish the loop the two
variables still point to the last raster/v2d that I created.  If I then
stick the appropriate createAction messages so that myDisplay is given
an update and myRaster is given a drawSelf then when I run the model I
get (n-1) blank rasters and 1 raster that displays properly.

Ok, what am I overlooking?  Here's the relevent code from 
ConwaryObserverSwarm:


In buildObjects:


  index = [ [conwayModelSwarm getWorldList] begin: [self getZone]];
  while ( (world = [index next]) ) {
    id <ZoomRaster> worldRaster;
    Value2dDisplay* lifeDisplay;

    worldRaster = [ZoomRaster createBegin: [self getZone]];
    SET_WINDOW_GEOMETRY_RECORD_NAME (worldRaster);
    worldRaster = [worldRaster createEnd];
    [worldRaster enableDestroyNotification: self
                 notificationMethod: @selector (_worldRasterDeath_:)];
    [worldRaster setColormap: colormap];
    [worldRaster setZoomFactor: 4];
    [worldRaster setWidth: [conwayModelSwarm getWorldXSize] 
                 Height: [conwayModelSwarm getWorldYSize]];
    [worldRaster setWindowTitle: "Conway's Life World"];
    [worldRaster pack];         
    [rasterList addLast: worldRaster];

    myRas = worldRaster;

    lifeDisplay = [Value2dDisplay createBegin: [self getZone]];
    [lifeDisplay setDisplayWidget: worldRaster colormap: colormap];
    [lifeDisplay setDiscrete2dToDisplay: world];
    lifeDisplay = [lifeDisplay createEnd];

    myDis = lifeDisplay;

  }



and in buildActions:

  displayActions = [ActionGroup create: [self getZone]];

  [displayActions createActionForEach: displayList message: M(display)];
  [displayActions createActionForEach: rasterList message: M(drawSelf)];
  [displayActions createActionTo: myDis message: M(display)];
  [displayActions createActionTo: myRas message: M(drawSelf)];
  [displayActions createActionTo: probeDisplayManager message: M(update)];
  [displayActions createActionTo: actionCache message: M(doTkEvents)];

  displaySchedule = [Schedule createBegin: [self getZone]];
  [displaySchedule setRepeatInterval: displayFrequency]; 
  displaySchedule = [displaySchedule createEnd];
  [displaySchedule at: 0 createAction: displayActions];



                  ==================================
   Swarm-Support is for discussion of the technical details of the day
   to day usage of Swarm.  For list administration needs (esp.
   [un]subscribing), please send a message to <address@hidden>
   with "help" in the body of the message.
                  ==================================


reply via email to

[Prev in Thread] Current Thread [Next in Thread]