package flare.vis.operator.label
{
    import flare.display.TextSprite;
    import flare.util.Shapes;
    import flare.vis.data.Data;
    import flare.vis.data.DataSprite;
    
    import flash.text.TextFormat;

    /**
     * Labeler that positions labels around a circle in polar coordinates.
     * 
     * <p>If <code>rotateLabels</code> is set to <codetrue</code>, labels will
     * be rotated such that they align radially. That is, the will be aligned
     * along lines emanating out of the center of the circle. In this case, it
     * is recommend that each label's <code>textMode</code> property be set to
     * <code>TextSprite.EMBED</code> and that the appropriate fonts be
     * embedded in your application. Otherwise, the text labels may be
     * illegible due to rotation artifacts (for <code>BITMAP</code> labels) or
     * will disappear alltogether (for <code>DEVICE</code> labels).</p>
     */
    public class RadialLabeler extends Labeler
    {
        /** If true, labels will be rotated to align along the radius. */
        public var rotateLabels:Boolean = false;
        
        /** The number of pixels to offset labels along the radius. */
        public var radiusOffset:Number = 0;
        
        /** The number of radians to offset a label's angle. */
        public var angleOffset:Number = 0;
        
        /**
         * Creates a new RadialLabeler. 
         * @param source the property from which to retrieve the label text.
         *  If this value is a string or property instance, the label text will
         *  be pulled directly from the named property. If this value is a
         *  Function or Expression instance, the value will be used to set the
         *  <code>textFunction<code> property and the label text will be
         *  determined by evaluating that function.
         * @param rotate flag indicating if labels should be rotated to align
         *  along the radius. If true, all text sprite labels should use
         *  embedded fonts to keep the rotated labels legibile. If false,
         *  labels will instead have their horizontal and vertical anchor
         *  settings adjusted according to their angle.
         * @param format optional text formatting information for labels
         * @param filter a Boolean-valued filter function determining which
         *  items will be given labels
         * @param policy the label creation policy. One of LAYER (for adding a
         *  separate label layer) or CHILD (for adding labels as children of
         *  data objects)
         */
        public function RadialLabeler(source:*=n