Hi Joe,
the problem is that the BalloonCanvas (or some objects it is using) aren't fully reset after some drawing operations.
(the drawString method for example sets the sourceForm as glyph to be drawn).
it should work if you do not store the canvas instance, but create a new in every loop:
������ points do: [ :p |
������������ canvas := form getCanvas asBalloonCanvas aaLevel:4; yourself.
������������ canvas drawPolygon: p
������������������ color: Color transparent
������������������ borderWidth: 1
������������������ borderColor: Color red.
������������ canvas drawString: p first asString
������������������ at: p first
������������������ font: nil
������������������ color: Color green.
������ ].
Or just reset the engine state (but I don't like this solution, the engine state should be private to the canvas).
������ points do: [ :p |
������
������������ canvas drawPolygon: p
������������������ color: Color transparent
������������������ borderWidth: 1
������������������ borderColor: Color red.
������������ canvas drawString: p first asString
������������������ at: p first
������������������ font: nil
������������������ color: Color green.
������������ canvas resetEngine.
������ ].