public void scale(double scalex,double scaley,Point2D from){
  AffineTransform xf=AffineTransform.getTranslateInstance(from.getX(),from.getY());
  xf.scale(scalex,scaley);
  xf.translate(-from.getX(),-from.getY());
  inverse=null;
  transform.preConcatenate(xf);
  fireStateChanged();
}

public void scale ( double scalex , double scaley , Point2D from ) { AffineTransform xf = AffineTransform . getTranslateInstance ( from . getX ( ) , from . getY ( ) ) ; xf . scale ( scalex , scaley ) ; xf . translate ( - from . getX ( ) , - from . getY ( ) ) ; inverse = null ; transform . preConcatenate ( xf ) ; fireStateChanged ( ) ; }
setter for the scale fires a propertychangeevent with the affinetransforms representing the previous and new values for scale and offset
