[7849] | 1 | package elements.axis {
|
---|
| 2 | import flash.display.Sprite;
|
---|
| 3 | import flash.geom.Point;
|
---|
| 4 | import string.Utils;
|
---|
| 5 |
|
---|
| 6 |
|
---|
| 7 | public class RadarAxis extends Sprite {
|
---|
| 8 |
|
---|
| 9 | private var style:Object;
|
---|
| 10 | private var TO_RADIANS:Number = Math.PI / 180;
|
---|
| 11 |
|
---|
| 12 | private var colour:Number;
|
---|
| 13 | private var grid_colour:Number;
|
---|
| 14 | private var labels:RadarAxisLabels;
|
---|
| 15 | private var spoke_labels:RadarSpokeLabels;
|
---|
| 16 |
|
---|
| 17 | function RadarAxis( json:Object )
|
---|
| 18 | {
|
---|
| 19 | // default values
|
---|
| 20 | this.style = {
|
---|
| 21 | stroke: 2,
|
---|
| 22 | colour: '#784016',
|
---|
| 23 | 'grid-colour': '#F5E1AA',
|
---|
| 24 | min: 0,
|
---|
| 25 | max: null,
|
---|
| 26 | steps: 1
|
---|
| 27 | };
|
---|
| 28 |
|
---|
| 29 | if( json != null )
|
---|
| 30 | object_helper.merge_2( json, this.style );
|
---|
| 31 |
|
---|
| 32 | this.colour = Utils.get_colour( this.style.colour );
|
---|
| 33 | this.grid_colour = Utils.get_colour( this.style['grid-colour'] );
|
---|
| 34 |
|
---|
| 35 | this.labels = new RadarAxisLabels( json.labels );
|
---|
| 36 | this.addChild( this.labels );
|
---|
| 37 |
|
---|
| 38 | this.spoke_labels = new RadarSpokeLabels( json['spoke-labels'] );
|
---|
| 39 | this.addChild( this.spoke_labels );
|
---|
| 40 | }
|
---|
| 41 |
|
---|
| 42 | //
|
---|
| 43 | // how many items in the X axis?
|
---|
| 44 | //
|
---|
| 45 | public function get_range():Range {
|
---|
| 46 | return new Range( this.style.min, this.style.max, this.style.steps, false );
|
---|
| 47 | }
|
---|
| 48 |
|
---|
| 49 | public function resize( sc:ScreenCoordsRadar ):void
|
---|
| 50 | {
|
---|
| 51 | this.x = 0;
|
---|
| 52 | this.y = 0;
|
---|
| 53 | this.graphics.clear();
|
---|
| 54 |
|
---|
| 55 | // this is going to change the radius
|
---|
| 56 | this.spoke_labels.resize( sc );
|
---|
| 57 |
|
---|
| 58 | var count:Number = sc.get_angles();
|
---|
| 59 |
|
---|
| 60 | // draw the grid behind the axis
|
---|
| 61 | this.draw_grid( sc, count );
|
---|
| 62 | this.draw_axis( sc, count );
|
---|
| 63 |
|
---|
| 64 | this.labels.resize( sc );
|
---|
| 65 | }
|
---|
| 66 |
|
---|
| 67 | private function draw_axis( sc:ScreenCoordsRadar, count:Number ): void {
|
---|
| 68 |
|
---|
| 69 | this.graphics.lineStyle(this.style.stroke, this.colour, 1, true);
|
---|
| 70 |
|
---|
| 71 | for ( var i:Number = 0; i < count; i++ ) {
|
---|
| 72 |
|
---|
| 73 | //
|
---|
| 74 | // assume 0 is MIN
|
---|
| 75 | //
|
---|
| 76 | var p:flash.geom.Point = sc.get_get_x_from_pos_and_y_from_val( i, 0 );
|
---|
| 77 | this.graphics.moveTo( p.x, p.y );
|
---|
| 78 |
|
---|
| 79 | var q:flash.geom.Point = sc.get_get_x_from_pos_and_y_from_val( i, sc.get_max() );
|
---|
| 80 | this.graphics.lineTo( q.x, q.y );
|
---|
| 81 | }
|
---|
| 82 | }
|
---|
| 83 |
|
---|
| 84 | private function draw_grid( sc:ScreenCoordsRadar, count:Number ):void {
|
---|
| 85 |
|
---|
| 86 | this.graphics.lineStyle(1, this.grid_colour, 1, true);
|
---|
| 87 |
|
---|
| 88 | // floating point addition error:
|
---|
| 89 | var max:Number = sc.get_max() + 0.00001;
|
---|
| 90 |
|
---|
| 91 | var r_step:Number = this.style.steps;
|
---|
| 92 | var p:flash.geom.Point;
|
---|
| 93 |
|
---|
| 94 | //
|
---|
| 95 | // start in the middle and move out drawing the grid,
|
---|
| 96 | // don't draw at 0
|
---|
| 97 | //
|
---|
| 98 | for ( var r_pos:Number = r_step; r_pos <= max; r_pos+=r_step ) {
|
---|
| 99 |
|
---|
| 100 | p = sc.get_get_x_from_pos_and_y_from_val( 0, r_pos );
|
---|
| 101 | this.graphics.moveTo( p.x, p.y );
|
---|
| 102 |
|
---|
| 103 | // draw from each spoke
|
---|
| 104 | for ( var i:Number = 1; i < (count+1); i++ ) {
|
---|
| 105 |
|
---|
| 106 | p = sc.get_get_x_from_pos_and_y_from_val( i, r_pos );
|
---|
| 107 | this.graphics.lineTo( p.x, p.y );
|
---|
| 108 | }
|
---|
| 109 | }
|
---|
| 110 | }
|
---|
| 111 |
|
---|
| 112 | public function die(): void {
|
---|
| 113 |
|
---|
| 114 | this.style = null;
|
---|
| 115 | this.labels.die();
|
---|
| 116 | this.spoke_labels.die();
|
---|
| 117 |
|
---|
| 118 | this.graphics.clear();
|
---|
| 119 | while ( this.numChildren > 0 )
|
---|
| 120 | this.removeChildAt(0);
|
---|
| 121 | }
|
---|
| 122 | }
|
---|
| 123 | }
|
---|