| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-chart-axis-Gauge'>/**</span> * @class Ext.chart.axis.Gauge * * Gauge Axis is the axis to be used with a Gauge series. The Gauge axis * displays numeric data from an interval defined by the `minimum`, `maximum` and * `step` configuration properties. The placement of the numeric data can be changed * by altering the `margin` option that is set to `10` by default. * * A possible configuration for this axis would look like: * *     axes: [{ *         type: 'gauge', *         position: 'gauge', *         minimum: 0, *         maximum: 100, *         steps: 10, *         margin: 7 *     }], */Ext.define('Ext.chart.axis.Gauge', {    /* Begin Definitions */    extend: 'Ext.chart.axis.Abstract',    /* End Definitions */<span id='Ext-chart-axis-Gauge-cfg-minimum'>    /**</span>     * @cfg {Number} minimum (required)     * The minimum value of the interval to be displayed in the axis.     */<span id='Ext-chart-axis-Gauge-cfg-maximum'>    /**</span>     * @cfg {Number} maximum (required)     * The maximum value of the interval to be displayed in the axis.     */<span id='Ext-chart-axis-Gauge-cfg-steps'>    /**</span>     * @cfg {Number} steps (required)     * The number of steps and tick marks to add to the interval.     */<span id='Ext-chart-axis-Gauge-cfg-margin'>    /**</span>     * @cfg {Number} [margin=10]     * The offset positioning of the tick marks and labels in pixels.     */<span id='Ext-chart-axis-Gauge-cfg-title'>    /**</span>     * @cfg {String} title     * The title for the Axis.     */    position: 'gauge',    alias: 'axis.gauge',    drawAxis: function(init) {        var chart = this.chart,            surface = chart.surface,            bbox = chart.chartBBox,            centerX = bbox.x + (bbox.width / 2),            centerY = bbox.y + bbox.height,            margin = this.margin || 10,            rho = Math.min(bbox.width, 2 * bbox.height) /2 + margin,            sprites = [], sprite,            steps = this.steps,            i, pi = Math.PI,            cos = Math.cos,            sin = Math.sin;        if (this.sprites && !chart.resizing) {            this.drawLabel();            return;        }        if (this.margin >= 0) {            if (!this.sprites) {                //draw circles                for (i = 0; i <= steps; i++) {                    sprite = surface.add({                        type: 'path',                        path: ['M', centerX + (rho - margin) * cos(i / steps * pi - pi),                                    centerY + (rho - margin) * sin(i / steps * pi - pi),                                    'L', centerX + rho * cos(i / steps * pi - pi),                                    centerY + rho * sin(i / steps * pi - pi), 'Z'],                        stroke: '#ccc'                    });                    sprite.setAttributes({                        hidden: false                    }, true);                    sprites.push(sprite);                }            } else {                sprites = this.sprites;                //draw circles                for (i = 0; i <= steps; i++) {                    sprites[i].setAttributes({                        path: ['M', centerX + (rho - margin) * cos(i / steps * pi - pi),                                    centerY + (rho - margin) * sin(i / steps * pi - pi),                               'L', centerX + rho * cos(i / steps * pi - pi),                                    centerY + rho * sin(i / steps * pi - pi), 'Z'],                        stroke: '#ccc'                    }, true);                }            }        }        this.sprites = sprites;        this.drawLabel();        if (this.title) {            this.drawTitle();        }    },    drawTitle: function() {        var me = this,            chart = me.chart,            surface = chart.surface,            bbox = chart.chartBBox,            labelSprite = me.titleSprite,            labelBBox;        if (!labelSprite) {            me.titleSprite = labelSprite = surface.add({                type: 'text',                zIndex: 2            });        }        labelSprite.setAttributes(Ext.apply({            text: me.title        }, me.label || {}), true);        labelBBox = labelSprite.getBBox();        labelSprite.setAttributes({            x: bbox.x + (bbox.width / 2) - (labelBBox.width / 2),            y: bbox.y + bbox.height - (labelBBox.height / 2) - 4        }, true);    },<span id='Ext-chart-axis-Gauge-method-setTitle'>    /**</span>     * Updates the {@link #title} of this axis.     * @param {String} title     */    setTitle: function(title) {        this.title = title;        this.drawTitle();    },    drawLabel: function() {        var chart = this.chart,            surface = chart.surface,            bbox = chart.chartBBox,            centerX = bbox.x + (bbox.width / 2),            centerY = bbox.y + bbox.height,            margin = this.margin || 10,            rho = Math.min(bbox.width, 2 * bbox.height) /2 + 2 * margin,            round = Math.round,            labelArray = [], label,            maxValue = this.maximum || 0,            minValue = this.minimum || 0,            steps = this.steps, i = 0,            adjY,            pi = Math.PI,            cos = Math.cos,            sin = Math.sin,            labelConf = this.label,            renderer = labelConf.renderer || function(v) { return v; };        if (!this.labelArray) {            //draw scale            for (i = 0; i <= steps; i++) {                // TODO Adjust for height of text / 2 instead                adjY = (i === 0 || i === steps) ? 7 : 0;                label = surface.add({                    type: 'text',                    text: renderer(round(minValue + i / steps * (maxValue - minValue))),                    x: centerX + rho * cos(i / steps * pi - pi),                    y: centerY + rho * sin(i / steps * pi - pi) - adjY,                    'text-anchor': 'middle',                    'stroke-width': 0.2,                    zIndex: 10,                    stroke: '#333'                });                label.setAttributes({                    hidden: false                }, true);                labelArray.push(label);            }        }        else {            labelArray = this.labelArray;            //draw values            for (i = 0; i <= steps; i++) {                // TODO Adjust for height of text / 2 instead                adjY = (i === 0 || i === steps) ? 7 : 0;                labelArray[i].setAttributes({                    text: renderer(round(minValue + i / steps * (maxValue - minValue))),                    x: centerX + rho * cos(i / steps * pi - pi),                    y: centerY + rho * sin(i / steps * pi - pi) - adjY                }, true);            }        }        this.labelArray = labelArray;    }});</pre></body></html>
 |