Version 0
	Initial release at Agent2003 Conference

Version 1
	mason and mason3d directories collapsed.
	mousetraps application included.
	Various small bugs squashed.
	Documentation updated.
	Known bug: 3D Heat information not provided (bug in inspector)

Version 2
	Released at the 2003 Workshop on the Mathematics and Algorithms
		of Social Insects
	sim.app.networktest.CustomNode now specifies its font
	sim.portrayal.FieldPortrayal's CustomInspector properly sets its
		SimState instance variable.  This enables 3D HeatBugs, among
		other things, to properly update their inspectors.
	Various static variables converted to instance variables to
		facilitate simultaneous parallel models in one
		process.
	Improved class docs
	Moved the color mapping functionality out of FastValueGrid2DPortrayal
		and ValueGrid2DPortrayal.  Now they use sim.guil.ColorMap.
		This is slightly slower; however we've compensated with an
		improved code in ColorMap so it's about the same speed still.
		This change will require applications which use these 
		portrayals to change themselves slightly: no longer is there
		a setLevels() or setColors() function -- it's gone -- and 
		instead, there's a setMap() function which does the same
		thing.  See HeatBugsWithUI.java for an example of how to
		convert over (it's a one-line change).
	The info HTML page may now be loaded in the Console via a file
		rather than specified by a string.  See GUIState.getInfo()
	Fixes to 3D inspectors to avoid flashing
	Cleanups and fixes to 3D applications
	2D displays update when their options are modified (in the wrench 
		window)
	Bug fix so 2D display backgrounds are striped rather than white
		in MacOS X Panther (10.3)
	Reformatting
	MacOS X Panther 1.3.1 has a bug which causes a number of drawing
		events to reset the clip afterwards (messing up later
		drawing events).  I don't know HOW they messed this up.
		We've only worked around this where it wouldn't impact
		redrawing significantly: clips are set before stretched
		image drawing, before drawing sparse grids (because
		they're often circles, which trigger the bug for some
		reason).  Expect a slight slow-down in sparse grid
		graphics until Apple fixes this stupidity and we can
		remove our fix hack.
	New nifty Makefile

Version 3
	Scale can no longer be 0
	Display2Ds may be offset (see the options pane -- useful
		for Tutorial 5 and Lsystem).  Lsystem's offset facility
		has been eliminated as a result.
	If the inspector pane has been removed, switching to it will no
		longer generate an error -- it just won't do anything
	LabelledPortrayal2D added.  This is a "wrapper Portrayal" which
		is meant to use an underlying portrayal to draw the
		main object -- then LabelledPortrayal2D will add a label.
	Added some Triangular grid code to the Grid2D objects.  No
		FieldPortrayal yet tho.
	CircledPortrayal2D added.  Another "wrapper Portrayal" which
		draws a circle around the underlying portrayal.  Will
		be useful for showing selection.
	Added sim.util.DoubleDimension2D, which is a concrete subclass
		of Dimension2D that stores dimension information as
		doubles.  For some reason Java doesn't have such
		a class (nor a "FloatDimension2D") -- it only has
		Dimension (for ints).  Yet it has equivalents for
		Point2D (Point2D.Double, Point2D.Float, Point),
		Rectangle2D (Rectangle2D.Double, Rectangle2D.Float,
		Rectangle), etc.  Totally inexplicable.  Anyway, this
		class should make the new movement and selection APIs
		easy to implement.
	Partially implemented the movement and selection APIs in
		FieldPortrayal2D and SimplePortrayal2D.  More yet to
		do however.
	Modified sim.util.Indexed so that it has consistent naming
		(setValue and getValue).  Neither approach is good,
		but this is better.  Updated Bag, DoubleBag, IntBag
		with the new function name.
	Made DoubleBag Indexed.  Dunno why it wasn't.
	Slight bugfix which properly brings up the dialog box when
		jmf.jar is missing but the user asks to make a movie.
	Modified PropertyField to be able to switch among property
		display styles.
	Replaced deprecated getClipRect() with getClipBounds.  Dunno
		why we didn't see that earlier.  No biggie.
	Bug fix to Bag.resize(), IntBag.resize(), and 
		DoubleBag.resize().  If requested size to resize to
		is the same size as the bag, now nothing happens.
		Previously the bag doubled in size.
	Bug fix to [Double|Int|]Bag.addAll(...).  numObjs was not
		being correctly changed.
	Addition of [Double|int|]Bag.doubleCapacityPlusOne() private
		function in order to bring add(...) and push(...)
		back under 35 bytes for inlining.  Couldn't use
		normal resize() function because it wasted a few
		bytes (ARG!!!)
	Added a little efficiency to SparseField.getObjectsAtLocations,
		SparseGrid[2|3]D.getObjectsAtLocations, and
		Continuous[2|3]D.getObjectsWithinDistance: if the
		discovered object bags are null or empty, they're
		not added to the result; if they're 1 they're added
		using Bag.add, and if the're > 1 in size they're
		added using Bag.addAll.  With any luck this should
		be a bit faster.	
	Added some further discussion in the hashCode() code for
		Int2D, Int3D, Double2D, and Double3D.  We may want
		to simplify the code to make it faster, though it
		is of very high quality, particularly for Java
		1.4.1.  Any comments would be welcome.
	Bag Iterators now allow remove(), and next() now throws
		an exception if we're at the end, rather than
		returning null.
	Major revisions to Display3D and various portrayal3D objects,
		including complete revisions of updating and creating
		scene graphs, updating and creating models,
		transformations, facility for resetting rotations 
		etc. on option panel, etc.  This will NOT be very
		backward-compatible, sorry.  But now we have a 
		more orthogonal approach to 3D, and the start() and 
		init() methods in the example applications are much 
		cleaner and simpler.
	Added Oriented2D and OrientedPortrayal2D to make it easier
		to describe oriented objects.  OrientedPortrayal2D
		is yet another "wrapper portrayal".
	Display3D no longer puts a black band at the bottom of
		pictures and movies (oops).
	getPolygonAttributes is now polygonAttributes in order to
		prevent it from showing up as a property in the
		inspector.
	Addition of CircledPortrayal3D, LabeledPortrayal3D, and 
		TransformedPortrayal3D "wrapper portrayals", the equivalent
		of their counterparts in 2D more or less.
	Addition of ConePortrayal3D, CylinderPortrayal3D,
		(untested)Shape3DPortrayal.
	Removed FixPortrayal3D.  Added SharedGroupPortrayal3D in its place.
	Removed DirectionalLightPortrayal3D and replaced it with
		the general LightPortrayal3D.
	Added Scale to the Display3D.  This is different from zoom.  Scale 
		magnifies.  Zoom moves the eye closer to center (and thus 
		possibly past some objects which are now behind you).
		We may remove this if it proves too confusing.
	Modified ImagePortrayal2D so that it no longer requires square images 
		(or tries to squish them into a square).
	Added ImagePortrayal3D
	fastgridcell package renamed to quad package
	GridQuadCellPortrayal renamed to QuadPortrayal.
	MeshCellPortrayal renamed to MeshPortrayal.
	TileGridCellPortrayal renamed to TilePortrayal.
	NoZGridCellPortrayal deleted (it's the same as TileGridCellPortrayal 
		at 0 z scale)
	Color map and scaling moved into QuadPortrayal.
	setData() method on QuadPortrayals now has a width and a height.  
		Accordingly all QuadPortrayals have had changes in their 
		constructors.
	QuadPortrayals now have their getName() methods called.  Previously 
		that was interrupted by the ValueGrid2D3DPortrayal which used 
		its own getName method.
	GridCellInfo renamed to ValueGridCellInfo
	Display2D now creates BufferedImages using getGraphicsConfiguration
		rather than the older way of just using Component.createImage
		and casting it to a BufferedImage and hoping for the best. :-)
	Moved Axes to 3D Options.  Added the ability to have a backdrop.
	Can now turn on/off left/right vs. up/down rotation and translation
	Can now autospin negative values.  Still don't know what to think about
		bugs in Java3D's handling of autospinning.  :-(
	Added Tutorial6 and Tutorial7
	Display3D used to hang until you moved the mouse if there's *no* 
		change to the underlying model in-between steps.  This is due 
		to a stupidity in Java3D.  Now we get around that by adding a
		single (supposedly invisible) point and reset its location
		each timestep.
	Fixed little bug in GUIState which generated a null pointer exception
		when trying to load the index.html and discovering that one
		doesn't exist.  Oops!
	If the user doesn't set the location of the Console in the GUIState's
		init() method, then the Console will attempt to place itself
		to the far right of the rightmost attached window; if there
		is no room, it'll go to the default location.
	Bug fix to Bag.iterator.next() and Bag.iterator.remove(); they had
		a comparator wrong and thus were always throwing exceptions.
		Thanks to Matthew Nelson (mnelson@mailsnare.net).
	SimpleInspector has slightly more space between labels and widgets
	Added the (temporary) convert and convert_h scripts and UPGRADING
		file to help upgrade
	SwarmGame added
	null inspectors not added to the list.
	GREAT RENAMING.  We've renamed all the 2D and 3D field portrayals 
		to be consistent with the rest of the system.  Well, more 
		consistent.  Anyway, it's better than it used to be.  Now 
		the system is as follows: if a 2D field portrayal can handle 
		(or will in the future be able to handle :-) both 2D and 3D 
		fields, it's called FooPortrayal2D.  Similarly, a 3D field 
		portrayal would be FooPortrayal3D.  If the field portrayal 
		is designed specifically for 2D fields only, it's 
		Foo2DPortrayal2D or Foo2DPortrayal3D.  Similarly for 3D fields 
		only...  At present none of the 2D field portrayals can display 
		3D fields; but they will in the future so they're named
		appropriately.  Renamed portrayals:

		ValueGridPortrayal2D
		FastValueGridPortrayal2D
		HexaValueGridPortrayal2D
		ObjectGridPortrayal2D
		HexaObjectGridPortrayal2D
		SparseGridPortrayal2D
		HexaSparseGridPortrayal2D
		ContinuousPortrayal2D
		NetworkPortrayal2D
		ValueGrid2DPortrayal3D
		SparseGrid2DPortrayal3D
		SparseGridPortrayal3D
		ContinuousPortrayal3D

	Changed some demos to use loaded index.html files rather than embedded
		HTML.  No particularly good reason other than demonstration.
	MAVs in the MAV demo no longer can have their size changed.  This is
		because we're using OrientedPortrayal2Ds and OvalPortrayal2Ds
		to portray the MAVs rather than having them portray themselves,
		also primarily for demonstration purposes.  To see a portrayal
		which changes its size, Tutorial5 is useful.
	Set Oriented2D's sole method to be "orientation2D" rather than
		our original "get2DOrientation".  The reason is that we don't
		necessarily want it showing up as a property of the underlying
		object.  It's in radians rather than degrees (the Java3D stuff
		we've done is in degrees) because the vast majority of time
		you'll already have it in radians:  Math.atan2(dy,dx).  So
		yeah, an inconsistency there...
