/*	File: CirclArc.h
 *
 *	Interface Description:
 *		Provides a concrete class CircleArc which is a kind of a figure.
 *		A CircleArc object is described by a circle and two angles.
 *		See also Figure.h.
 *	History:
 *		Date:		 Author:	 Change:
 *		97-05-26	 KHU		 Creation.
 */

#ifndef CIRCLARC_H_
#define CIRCLARC_H_

#include "Figure.h"
#include "Circle.h"

	class CircleArc : virtual public Figure
	{
	protected:
		// Attributes:

		Circle refCircle;

		Float  angleFrom,
				 angleTo;
			// Invariant: 0 <= angle* <= 2 * PI.

		// Commands:

		void Draw ();

	public:
		// Queries:

		Float Extent () const;

		const Circle & RefCircle () const
		{
			return refCircle;
		};

		Float AngleFrom () const
		{
			return angleFrom;
		};

		Float AngleTo () const
		{
			return angleTo;
		};

		// Commands:

		void Move (/* IN */ const CoordinatePair & delta);

		void MoveTo (/* IN */ const CoordinatePair & newRefPoint);

		// Constructors:

		CircleArc
			(/* IN */ const Circle & refCircle, Float angleFrom, Float angleTo);
			// Precondition: 0.0 <= angle* <= 2 * PI.

	protected:
		void CheckInvariant ();

	}; // CircleArc

#endif // CIRCLARC_H_