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