class interface CUSTOM_MAPPING

creation
   make

feature(s) from CUSTOM_MAPPING
   --  from GENERAL

   copy (other: like Current)
      --  Update current object using fields of object attached
      --  to other, so as to yield equal objects.

      require
         other_not_void: other /= Void
      ensure
         is_equal: is_equal(other)

   is_equal (other: like Current): BOOLEAN
      --  Is other attached to an object considered equal to 
      --  current object ?

      require
         other_not_void: other /= Void
      ensure
         consistent: standard_is_equal(other) implies Result;
         symmetric: Result implies other.is_equal(Current)

feature(s) from CUSTOM_MAPPING
   --  Origin

   set_origin (pt: POINT)
      --  Set where the origin (0, 0) is relatively to the default origin 
      --  of the device, in logical coordinates.

      require
         valid_point: pt /= Void

feature(s) from CUSTOM_MAPPING
   --  Mode

   is_isotropic: BOOLEAN
      --  Isotropic mode?


   isotropic
      --  Isotropic mode (both axis scale proportionally, that is 
      --  squares remain square).
      --  This is the default.


   anisotropic
      --  Axis may be scaled independently.


feature(s) from CUSTOM_MAPPING
   --  Scale

   set_scale (nx: DOUBLE)
      --  Change x axis scale factor (1.0 = unchanged).
      --  If isotropic, changes both axis.
      --  Default: 1.0 (no change)

      require
         not_zero: nx /= 0.0
      ensure
         done: x_factor = nx;
         iso: is_isotropic implies y_factor = x_factor

feature(s) from CUSTOM_MAPPING
   --  Scale

   set_x_scale (nx: DOUBLE)
      --  Change x axis scale factor (1.0 = unchanged).
      --  If isotropic, changes both axis.
      --  Default: 1.0 (no change)

      require
         not_zero: nx /= 0.0
      ensure
         done: x_factor = nx;
         iso: is_isotropic implies y_factor = x_factor

   set_y_scale (ny: DOUBLE)
      --  Change y_axis scale factor.
      --  Default: 1.0 (no change)

      require
         not_iso: not is_isotropic;
         not_zero: ny /= 0.0
      ensure
         done: y_factor = ny


end of CUSTOM_MAPPING