[7849] | 1 | package charts.series.dots {
|
---|
| 2 |
|
---|
| 3 | import flash.display.Sprite;
|
---|
| 4 | import flash.display.Graphics;
|
---|
| 5 | import flash.display.BlendMode;
|
---|
| 6 | import charts.series.Element;
|
---|
| 7 | import caurina.transitions.Tweener;
|
---|
| 8 | import caurina.transitions.Equations;
|
---|
| 9 | import string.Utils;
|
---|
| 10 | import flash.geom.Point;
|
---|
| 11 |
|
---|
| 12 | public class bow extends PointDotBase {
|
---|
| 13 |
|
---|
| 14 | public function bow( index:Number, value:Properties ) {
|
---|
| 15 |
|
---|
| 16 | var colour:Number = string.Utils.get_colour( value.get('colour') );
|
---|
| 17 |
|
---|
| 18 | super( index, value );
|
---|
| 19 |
|
---|
| 20 | this.tooltip = this.replace_magic_values( value.get('tip') );
|
---|
| 21 | this.attach_events();
|
---|
| 22 |
|
---|
| 23 | // if style.x is null then user wants a gap in the line
|
---|
| 24 | //
|
---|
| 25 | // I don't understand what this is doing...
|
---|
| 26 | //
|
---|
| 27 | // if (style.x == null)
|
---|
| 28 | // {
|
---|
| 29 | // this.visible = false;
|
---|
| 30 | // }
|
---|
| 31 | // else
|
---|
| 32 | // {
|
---|
| 33 |
|
---|
| 34 | if (value.get('hollow'))
|
---|
| 35 | {
|
---|
| 36 | // Hollow - set the fill to the background color/alpha
|
---|
| 37 | if (value.get('background-colour') != null)
|
---|
| 38 | {
|
---|
| 39 | var bgColor:Number = string.Utils.get_colour( value.get('background-colour') );
|
---|
| 40 | }
|
---|
| 41 | else
|
---|
| 42 | {
|
---|
| 43 | bgColor = colour;
|
---|
| 44 | }
|
---|
| 45 |
|
---|
| 46 | this.graphics.beginFill(bgColor, value.get('background-alpha'));
|
---|
| 47 | }
|
---|
| 48 | else
|
---|
| 49 | {
|
---|
| 50 | // set the fill to be the same color and alpha as the line
|
---|
| 51 | this.graphics.beginFill( colour, value.get('alpha') );
|
---|
| 52 | }
|
---|
| 53 |
|
---|
| 54 | this.graphics.lineStyle( value.get('width'), colour, value.get('alpha') );
|
---|
| 55 |
|
---|
| 56 | this.draw(this.graphics, this.radius, value.get('rotation'));
|
---|
| 57 | // Check to see if part of the line needs to be erased
|
---|
| 58 | if (value.get('halo-size') > 0)
|
---|
| 59 | {
|
---|
| 60 | var s:Sprite = new Sprite();
|
---|
| 61 | s.graphics.lineStyle( 0, 0, 0 );
|
---|
| 62 | s.graphics.beginFill( 0, 1 );
|
---|
| 63 | this.draw(s.graphics, value.get('halo-size')+this.radius, value.get('rotation'));
|
---|
| 64 | s.blendMode = BlendMode.ERASE;
|
---|
| 65 | s.graphics.endFill();
|
---|
| 66 | this.line_mask = s;
|
---|
| 67 | }
|
---|
| 68 | // }
|
---|
| 69 |
|
---|
| 70 | }
|
---|
| 71 |
|
---|
| 72 |
|
---|
| 73 | public override function set_tip( b:Boolean ):void {
|
---|
| 74 | if ( b )
|
---|
| 75 | {
|
---|
| 76 | if ( !this.is_tip )
|
---|
| 77 | {
|
---|
| 78 | Tweener.addTween(this, {scaleX:1.3, time:0.4, transition:"easeoutbounce"} );
|
---|
| 79 | Tweener.addTween(this, {scaleY:1.3, time:0.4, transition:"easeoutbounce" } );
|
---|
| 80 | if (this.line_mask != null)
|
---|
| 81 | {
|
---|
| 82 | Tweener.addTween(this.line_mask, {scaleX:1.3, time:0.4, transition:"easeoutbounce"} );
|
---|
| 83 | Tweener.addTween(this.line_mask, {scaleY:1.3, time:0.4, transition:"easeoutbounce" } );
|
---|
| 84 | }
|
---|
| 85 | }
|
---|
| 86 | this.is_tip = true;
|
---|
| 87 | }
|
---|
| 88 | else
|
---|
| 89 | {
|
---|
| 90 | Tweener.removeTweens(this);
|
---|
| 91 | Tweener.removeTweens(this.line_mask);
|
---|
| 92 | this.scaleX = 1;
|
---|
| 93 | this.scaleY = 1;
|
---|
| 94 | if (this.line_mask != null)
|
---|
| 95 | {
|
---|
| 96 | this.line_mask.scaleX = 1;
|
---|
| 97 | this.line_mask.scaleY = 1;
|
---|
| 98 | }
|
---|
| 99 | this.is_tip = false;
|
---|
| 100 | }
|
---|
| 101 | }
|
---|
| 102 |
|
---|
| 103 | private function draw( aGraphics:Graphics, aRadius:Number, aRotation:Number ):void
|
---|
| 104 | {
|
---|
| 105 | var angle:Number = 60;
|
---|
| 106 |
|
---|
| 107 | // Start at center point
|
---|
| 108 | aGraphics.moveTo(0, 0);
|
---|
| 109 |
|
---|
| 110 | // Upper right side point (unrotated)
|
---|
| 111 | var degrees:Number = -90 + aRotation + angle;
|
---|
| 112 | var xVal:Number = calcXOnCircle(aRadius, degrees);
|
---|
| 113 | var yVal:Number = calcYOnCircle(aRadius, degrees);
|
---|
| 114 | aGraphics.lineTo(xVal, yVal);
|
---|
| 115 |
|
---|
| 116 | // Lower right side point (unrotated)
|
---|
| 117 | degrees += angle;
|
---|
| 118 | xVal = calcXOnCircle(aRadius, degrees);
|
---|
| 119 | yVal = calcYOnCircle(aRadius, degrees);
|
---|
| 120 | aGraphics.lineTo(xVal, yVal);
|
---|
| 121 |
|
---|
| 122 | // Back to the center
|
---|
| 123 | aGraphics.lineTo(xVal, yVal);
|
---|
| 124 |
|
---|
| 125 | // Upper left side point (unrotated)
|
---|
| 126 | degrees = -90 + aRotation - angle;
|
---|
| 127 | xVal = calcXOnCircle(aRadius, degrees);
|
---|
| 128 | yVal = calcYOnCircle(aRadius, degrees);
|
---|
| 129 | aGraphics.lineTo(xVal, yVal);
|
---|
| 130 |
|
---|
| 131 | // Lower Left side point (unrotated)
|
---|
| 132 | degrees -= angle;
|
---|
| 133 | xVal = calcXOnCircle(aRadius, degrees);
|
---|
| 134 | yVal = calcYOnCircle(aRadius, degrees);
|
---|
| 135 | aGraphics.lineTo(xVal, yVal);
|
---|
| 136 |
|
---|
| 137 | // Back to the center
|
---|
| 138 | aGraphics.lineTo(xVal, yVal);
|
---|
| 139 | }
|
---|
| 140 | }
|
---|
| 141 | }
|
---|