    class
    	EV_RELATIVE_POINT

    General
    	cluster: interface
    	description:
    		"Positions relative to other positions.
    		Takes another relative point as origin and then defines a
    		hor. & vert. scaling factor, x, y and angle.
    		You can then access absolute scale_x, scale_y, x, y and angle
    		which are recomputed only if invalidate_absolute_position has
    		been called.
    		You may also choose to specify a positioner. This is an agent
    		that gets called everytime a recomputation is requested.
    		When a positioner is installed, the other attributes are ignored.
    		The x and y are transformed by the angle and scaling of the origin.
    		This implies that the scale_x, scale_y and angle features of this
    		object are only for propagation to referring points."
    	keywords: "point, position, location, origin"
    	create: make_with_position, make_with_origin, default_create, make_with_positioner, make_with_origin_and_position

    Ancestors
    	EV_FIGURE_MATH
    	IDENTIFIED

    Queries
    	absolute_coordinates: EV_COORDINATE
    	angle: REAL_64
    	angle_abs: REAL_64
    	being_positioned: BOOLEAN
    	has_positioner: BOOLEAN
    	id_object (an_id: INTEGER_32): IDENTIFIED
    	object_id: INTEGER_32
    	origin: EV_RELATIVE_POINT
    	out_abs: STRING_8
    	out_rel: STRING_8
    	positioner: PROCEDURE [ANY, TUPLE [[like Current] EV_RELATIVE_POINT]]
    	relative_to (org: EV_RELATIVE_POINT): BOOLEAN
    	scale_x: REAL_64
    	scale_x_abs: REAL_64
    	scale_y: REAL_64
    	scale_y_abs: REAL_64
    	x: INTEGER_32
    	x_abs: INTEGER_32
    	y: INTEGER_32
    	y_abs: INTEGER_32

    Commands
    	change_origin (new_origin: EV_RELATIVE_POINT)
    	set_angle (new_angle: REAL_64)
    	set_angle_abs (new_angle_abs: REAL_64)
    	set_origin (new_origin: EV_RELATIVE_POINT)
    	set_position (new_x, new_y: INTEGER_32)
    	set_positioner (pos_agent: [like positioner] PROCEDURE [ANY, TUPLE [[like Current] EV_RELATIVE_POINT]])
    	set_scale (new_scale: REAL_64)
    	set_scale_x (new_scale_x: REAL_64)
    	set_scale_x_abs (new_scale_x_abs: REAL_64)
    	set_scale_y (new_scale_y: REAL_64)
    	set_scale_y_abs (new_scale_y_abs: REAL_64)
    	set_x (new_x: INTEGER_32)
    	set_x_abs (new_x_abs: INTEGER_32)
    	set_y (new_y: INTEGER_32)
    	set_y_abs (new_y_abs: INTEGER_32)

    Constraints
    	notify list exists
    	has origin implies origin notifies