Notes on Angle Axes.

These are curved axis (currently restricted to circles or circular arcs)
which are used for scales in plor plots or to construct pie charts etc.
The basic axis is a complete circle, but it may be restricted to an arc.
There are two levels of scale. Input from the calling program unit is 
either in degrees, radians, or user defined units. (e.g. In a pie chart 
it may be convenient to express the complete circle by the range 0 - 
100. ) Inputs are passed to the DrawAngleAxis procedure by setting values 
in a global record a1axis or a2axis within the calling program. The 
DrawAngleAxis procedure uses the global parameter AngleMeasure and the 
settings of the scale limits ScaleHi and ScaleLo to convert angle inputs 
into radian measure.
 
Most of the features of an angle axis are similar to those of a normal 
rectalinear axis, so both types use the samethe same record type taxis.
DrawAngle axis merely interprets some of the parameters in a different 
way. For example, in a retalinear axis grid lines are straight lines at 
an angle 'gridangle' (usually 90 deg.) to the axis with all grid lines 
having the same length. In the case of an angle axis they are straight 
lines from the axis towards the centre point of the arc. Since 
congestion of these lines will occur close to the centre DrawAngle Axis 
will allow different lengths for the main grid lines and the sub classes, 
midgridlines and subgridlines. In the case of rectilinear axes the 
lengths are fixed and only the thickness, colour and style of the 
individual classes of grid lines may be altered.

Angle axis scales are limited to linear scales. I cannot think of any 
use for angle scales based on log. units. Likewise, initial tests have 
shown that there is no advantage in allowing for non circular arcs. If 
log. scales and/or elliptical arcs are needed these may be impliented by 
external subroutines and by use of the 'begin scale' block structure.

The interpretation of a taxis record by the procedure DrawAngleaxis is 
as follows:

   tAxis=record        {Data for linear axes or curved angle axes}
     xstart,           {The start angle for an angle axis. This is
                        set in degrees or radians according to the
                        setting of 'AngleMeasure'. The angle is 
                        measuredrelative to the horizontal line, 
                        positive direction anticlockwise.} 
     ystart,           {The radius of the angle axis in cms}
     xend,             {The end angle of the axis. If this is more 
                        negative than the start angle the axis will 
                        be drawn in a clockwise direction, and this 
                        in turn will define the positive direction 
                        for ScaleLo and ScaleHi.}
     yend,             {The radius of a small circle at the axis centre 
                        point which is drawn in the current line colour 
                        and filled with the current brush colour and 
                        style. This is merely a cosmetic feature.}
     xcentre,ycentre,  {The centre point of a curved axis.}
     AxisStartAngle,AxisEndAngle, {Only used by the associated radial 
                         polar axes.}
     StartAt,StepBy,EndAt, {Parameters used for multiple axes. Currently 
                        used in constructing polar radial axes, but might 
                        also be used for inserting multiple angle axes etc}
     AxisLength,       {the axis angular length in degrees or radians.}
     AxisAngle,    {For curved axes this is used to specify the scale 
                    length.}
     ScaleHi,ScaleLo, {Scale limits. in case of angle axis these may 
                       represent degrees or radians, or other units.}
     TickStart,SubTickStart,MidTickStart,        {First tick positions}
     dTicks,dSubTicks,dMidTicks,                 {Tick spacings}
     {The above are all in the scale units specified by ScaleHi and 
      ScaleLo and are converted into radians within DrawAngleAxis.}

     TickLength,SubTickLength,MidTickLength,
     TickLineWidth,SubTickLineWidth,MidTickLineWidth,
     {All in cms. Similar to rectalinear axes.} 
     TickAngle, {Not normally used by angle axes.}

     GridStart,SubGridStart,MidGridStart,        {Grid Starting Points}
     dGrid,dSubGrid,dMidGrid,GridLength,         {Grid spacings}
     GridLineWidth,SubGridLineWidth,MidGridLineWidth,
     GridAngle,
     {As for Ticks}

     {Titles labels and names are handled much as rectalinear axes, except that
      Offsets are now in Scale measure andthe length of the string is taken 
      into account.} 
     TitleAngle,
     NameDist,NameShift,NameAngle, {Name shift in degs/rads for angle axes}
     AxisLineWidth,

     MidLabelShift,MidLabelDist,  {Label shift in degs/rads for angle axes}
     LabelShift,LabelDist,LabelAngle,
     TitleHei,MidLabelHei,LabelHei,NameHei,      {Text heights in cm}
     
     TitleShift,TitleDist:double;  {Title position, both in cms}

     nTicks,nSubTicks,nMidTicks,                 {Number of ticks}
     nGrids,nSubGrids,nMidGrids,                 {Number of Grid lines}

     AxisType,   {Axis Type Ignored by DrawAxis since all angle axes 
                  are linear.}}

     {All the remaining parameters are handled as in rectalinear axes.
      PolarAxis and AngleAxis are flags used internally to select 
      Alternative processing for these types of axis/}   
     TickColor,SubTickColor,MidTickColor,        {Tick colours}
     GridColor,SubGridcolor,MidGridColor,        {Grid colours}
     AxisColor,NameColor,
     NumOfNames,NumOfPlaces,                     {Size of arrays}
     MidLabelSFigs,MidLabelDFigs,
     LabelSFigs,LabelDFigs,
     TitleColor,MidLabelColor,LabelColor:integer; {Title colours}
     TickStyle,SubTickStyle,MidTickStyle,        {Tick styles}
     GridStyle,SubGridStyle,MidGridStyle,        {Grid and tick line styles}
     AxisLineStyle:TPenStyle;
     Title,TitleFontName,LabelFontName,MidLabelFontName,NameFontName:string;
     AxisLabels,ANames:array[0 ..50] of string;
     ShowName,ShowPlace,ShowMidPlace:array[0 .. 50] of boolean;
     AxisOff,SideOn,
     Negate,
     PolarAxis,AngleAxis,                        {Flags}
     NoFirst,NoLast,LabelsOn,MidLabelsOn,
     GridOn,TicksOn,MidTicksOn,SubTicksOn,
     SymmetricTicks,SymmetricMidticks,SymmetricSubticks,
     MidGridOn,SubGridOn,NamesOn:Boolean;
   end; {tAxis}

  