I've just committed an important update to GeoMason. For GeomVectorField instances that contain dynamic geometry -- e.g., corresponding to moving entities -- the spatial index no longer is updated for each geometry update, particularly those effected via setGeometryLocation() invocations. This is because updating the spatial index for every single geometry change is computationally burdensome. It's more efficient to move all the entities first and then update the corresponding spatial index in one go.
And so there are two new GeomVectorField member functions: updateSpatialIndex() and scheduleSpatialIndexUpdater(). The former rebuilds the spatial index from the current set of geometry stored in the field. The latter is a convenience function for returning a Steppable that you can schedule to invoke updateSpatialIndex() with each time step.
The following is an example pulled from the modified CampusWorld demo:
public void start()
agents.clear(); // clear any existing agents from previous runs
// Ensure that the spatial index is made aware of the new agent
// positions. Scheduled to guaranteed to run after all agents moved.
schedule.scheduleRepeating( agents.scheduleSpatialIndexUpdater(), Integer.MAX_VALUE, 1.0 );
Yes, this hints that a new minor release of GeoMason is forthcoming. I've a few more loose ends to tie up before I finalizing it, though; I'm hoping to have it out the door by the end of the week.
-- [log in to unmask]