| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- package elements.axis {
- import flash.display.Sprite;
- import flash.geom.Point;
- import string.Utils;
-
-
- public class RadarAxis extends Sprite {
-
- private var style:Object;
- private var TO_RADIANS:Number = Math.PI / 180;
-
- private var colour:Number;
- private var grid_colour:Number;
- private var labels:RadarAxisLabels;
- private var spoke_labels:RadarSpokeLabels;
-
- function RadarAxis( json:Object )
- {
- // default values
- this.style = {
- stroke: 2,
- colour: '#784016',
- 'grid-colour': '#F5E1AA',
- min: 0,
- max: null,
- steps: 1
- };
-
- if( json != null )
- object_helper.merge_2( json, this.style );
-
- this.colour = Utils.get_colour( this.style.colour );
- this.grid_colour = Utils.get_colour( this.style['grid-colour'] );
-
- this.labels = new RadarAxisLabels( json.labels );
- this.addChild( this.labels );
-
- this.spoke_labels = new RadarSpokeLabels( json['spoke-labels'] );
- this.addChild( this.spoke_labels );
- }
-
- //
- // how many items in the X axis?
- //
- public function get_range():Range {
- return new Range( this.style.min, this.style.max, this.style.steps, false );
- }
-
- public function resize( sc:ScreenCoordsRadar ):void
- {
- this.x = 0;
- this.y = 0;
- this.graphics.clear();
-
- // this is going to change the radius
- this.spoke_labels.resize( sc );
-
- var count:Number = sc.get_angles();
-
- // draw the grid behind the axis
- this.draw_grid( sc, count );
- this.draw_axis( sc, count );
-
- this.labels.resize( sc );
- }
-
- private function draw_axis( sc:ScreenCoordsRadar, count:Number ): void {
-
- this.graphics.lineStyle(this.style.stroke, this.colour, 1, true);
-
- for ( var i:Number = 0; i < count; i++ ) {
- //
- // assume 0 is MIN
- //
- var p:flash.geom.Point = sc.get_get_x_from_pos_and_y_from_val( i, 0 );
- this.graphics.moveTo( p.x, p.y );
-
- var q:flash.geom.Point = sc.get_get_x_from_pos_and_y_from_val( i, sc.get_max() );
- this.graphics.lineTo( q.x, q.y );
- }
- }
-
- private function draw_grid( sc:ScreenCoordsRadar, count:Number ):void {
-
- this.graphics.lineStyle(1, this.grid_colour, 1, true);
-
- // floating point addition error:
- var max:Number = sc.get_max() + 0.00001;
-
- var r_step:Number = this.style.steps;
- var p:flash.geom.Point;
-
- //
- // start in the middle and move out drawing the grid,
- // don't draw at 0
- //
- for ( var r_pos:Number = r_step; r_pos <= max; r_pos+=r_step ) {
-
- p = sc.get_get_x_from_pos_and_y_from_val( 0, r_pos );
- this.graphics.moveTo( p.x, p.y );
-
- // draw from each spoke
- for ( var i:Number = 1; i < (count+1); i++ ) {
-
- p = sc.get_get_x_from_pos_and_y_from_val( i, r_pos );
- this.graphics.lineTo( p.x, p.y );
- }
- }
- }
-
- public function die(): void {
-
- this.style = null;
- this.labels.die();
- this.spoke_labels.die();
-
- this.graphics.clear();
- while ( this.numChildren > 0 )
- this.removeChildAt(0);
- }
- }
- }
|