[7849] | 1 | package charts {
|
---|
| 2 | import flash.display.Sprite;
|
---|
| 3 | import flash.geom.Point;
|
---|
| 4 | import string.Utils;
|
---|
| 5 |
|
---|
| 6 | public class Arrow extends Base {
|
---|
| 7 |
|
---|
| 8 | private var style:Object;
|
---|
| 9 |
|
---|
| 10 | public function Arrow( json:Object )
|
---|
| 11 | {
|
---|
| 12 | this.style = {
|
---|
| 13 | start: [],
|
---|
| 14 | end: [],
|
---|
| 15 | colour: '#808080',
|
---|
| 16 | alpha: 0.5,
|
---|
| 17 | 'barb-length': 20
|
---|
| 18 |
|
---|
| 19 | };
|
---|
| 20 |
|
---|
| 21 | object_helper.merge_2( json, this.style );
|
---|
| 22 |
|
---|
| 23 | this.style.colour = string.Utils.get_colour( this.style.colour );
|
---|
| 24 |
|
---|
| 25 | // for each ( var val:Object in json.values )
|
---|
| 26 | // this.style.points.push( new flash.geom.Point( val.x, val.y ) );
|
---|
| 27 | }
|
---|
| 28 |
|
---|
| 29 | public override function resize( sc:ScreenCoordsBase ): void {
|
---|
| 30 |
|
---|
| 31 | this.graphics.clear();
|
---|
| 32 | this.graphics.lineStyle(1, this.style.colour, 1);
|
---|
| 33 |
|
---|
| 34 | this.graphics.moveTo(
|
---|
| 35 | sc.get_x_from_val(this.style.start.x),
|
---|
| 36 | sc.get_y_from_val(this.style.start.y));
|
---|
| 37 |
|
---|
| 38 | var x:Number = sc.get_x_from_val(this.style.end.x);
|
---|
| 39 | var y:Number = sc.get_y_from_val(this.style.end.y);
|
---|
| 40 | this.graphics.lineTo(x, y);
|
---|
| 41 |
|
---|
| 42 | var angle:Number = Math.atan2(
|
---|
| 43 | sc.get_y_from_val(this.style.start.y) - y,
|
---|
| 44 | sc.get_x_from_val(this.style.start.x) - x
|
---|
| 45 | );
|
---|
| 46 |
|
---|
| 47 | var barb_length:Number = this.style['barb-length'];
|
---|
| 48 | var barb_angle:Number = 0.34;
|
---|
| 49 |
|
---|
| 50 | //first point is end of one barb
|
---|
| 51 | var a:Number = x + (barb_length * Math.cos(angle - barb_angle));
|
---|
| 52 | var b:Number = y + (barb_length * Math.sin(angle - barb_angle));
|
---|
| 53 |
|
---|
| 54 | //final point is end of the second barb
|
---|
| 55 | var c:Number = x + (barb_length * Math.cos(angle + barb_angle));
|
---|
| 56 | var d:Number = y + (barb_length * Math.sin(angle + barb_angle));
|
---|
| 57 |
|
---|
| 58 | this.graphics.moveTo(x, y);
|
---|
| 59 | this.graphics.lineTo(a, b);
|
---|
| 60 |
|
---|
| 61 | this.graphics.moveTo(x, y);
|
---|
| 62 | this.graphics.lineTo(c, d);
|
---|
| 63 |
|
---|
| 64 | }
|
---|
| 65 | }
|
---|
| 66 | }
|
---|