Draw Pie

Ns.Chart.pie = function () { Ns.Chart.chartBase.apply(this, arguments); this.color = "#0ff11"; this.r = 200; this.cx = -1; this.cy = -1; this.marginX = 10; this.r2 = 100; this.marginY = 30; this.strokeWidth = 5; this.mode = "annular"; this.draw = function () { var h = $(this.parent.svgdom).height(), w = $(this.parent.svgdom).width(); if (this.cx == -1) { this.cx = (w - (this.r) * 2) / 2 + this.marginX + this.r; } if (this.cy == -1) { this.cy = (h - (this.marginY + this.r) * 2) / 2 + this.marginY + this.r; } if (this.svgTitle.enabled) { if (this.svgTitle.x == -1) { this.svgTitle.x = (this.r + this.marginX); } this.svgTitle.draw(); } var starAngle = 0; var total = Ns.Data.Filter.Sum(this.series, function (series) { if (series.data && !window.isNaN(series.data)) { return series.data; } if (series.datasource && series.datasource[0]) { series.data = window.parseFloat(series.datasource[0][series.valueField]); return series.data; } return null; }); var g = this.svg.draw("g"); for (var i = 0; i < this.series.length; i++) { var color = this.color; if (this.color) { var c = new Ns.SVG.Base.Color(this.color); c.r = c.r + 15 * i; c.g = c.g + 15 * i; c.b = c.b + 15 * i; color = c.toString(); } if (!this.series[i].css) { this.series[i].css = {}; } if (!this.series[i].css.fill) { this.series[i].css.fill = color; } var deg = this.series[i].data / total * 360; this.series[i].startDeg = starAngle; this.series[i].endDeg = starAngle + deg; starAngle = this.series[i].endDeg; if (this.mode == "annular") { this._drawAnnular(g, this.series[i], this.series.length, i); } else { this._drawPath(g, this.series[i], this.series.length, i); } } } this._drawPath = function (canvas, series) { var x0 = this.cx + this.r * Math.cos(series.startDeg * Math.PI / 180); var y0 = this.cy - this.r * Math.sin(series.startDeg * Math.PI / 180); var x1 = this.cx + this.r * Math.cos(series.endDeg * Math.PI / 180); var y1 = this.cy - this.r * Math.sin(series.endDeg * Math.PI / 180); var g = canvas.draw("path", { d: "M " + this.cx + "," + this.cy + " L " + x0 + "," + y0 + " A " + this.r + "," + this.r + " 0 0,0 " + x1 + "," + y1 + " Z" }); g.css({ "stroke-width": this.strokeWidth, "stroke": "#ffffff" }); if (series.fill) { g.css({ fill: series.fill }); } if (series.color) { g.css({ fill: series.color }); } if (series.css) { g.css(series.css); } if (series.attr) { g.attr(series.attr); } g.attr({ "ns-chart": "pie", "ns-chart-pie-start": series.startDeg, "ns-chart-pie-end": series.endDeg, "ns-chart-data": series.data, "ns-chart-argument": series.argumentField }); } this._drawAnnular = function (canvas, series) { var x0 = this.cx + this.r * Math.cos(series.startDeg * Math.PI / 180); var y0 = this.cy - this.r * Math.sin(series.startDeg * Math.PI / 180); var x1 = this.cx + this.r * Math.cos(series.endDeg * Math.PI / 180); var y1 = this.cy - this.r * Math.sin(series.endDeg * Math.PI / 180); var x2 = this.cx + this.r2 * Math.cos(series.startDeg * Math.PI / 180); var y2 = this.cy - this.r2 * Math.sin(series.startDeg * Math.PI / 180); var x3 = this.cx + this.r2 * Math.cos(series.endDeg * Math.PI / 180); var y3 = this.cy - this.r2 * Math.sin(series.endDeg * Math.PI / 180); //var g = canvas.draw("path", { d: "M " + x2 + "," + y2 + " L " + x0 + "," + y0 + " A " + this.r + "," + this.r + " 0 0,0 " + x1 + "," + y1 + " L " + x3 + "," + y3 + " A " + this.r2 + "," + this.r2 + " 0 1,0 "+ x2 + "," + y2 + " " }); var g = canvas.draw("path", { d: "M " + this.cx + "," + this.cy + " L " + x0 + "," + y0 + " A " + this.r + "," + this.r + " 0 0,0 " + x1 + "," + y1 + " Z" }); var g2 = canvas.draw("path", { d: "M " + this.cx + "," + this.cy + " L " + x2 + "," + y2 + " A " + this.r2 + "," + this.r2 + " 0 0,0 " + x3 + "," + y3 + " Z" }); g2.css({ "fill": "#ffffff" }); g.css({ "stroke-width": this.strokeWidth, "stroke": "#ffffff" }); if (series.fill) { g.css({ fill: series.fill }); } if (series.color) { g.css({ fill: series.color }); } if (series.css) { if (series.css["stroke"]) { g2.css({ "fill": series.css["stroke"] }); } g.css(series.css); } if (series.attr) { g.attr(series.attr); } g.attr({ "ns-chart": "pie", "ns-chart-pie-start": series.startDeg, "ns-chart-pie-end": series.endDeg, "ns-chart-value": series.data, "ns-chart-data": series.data, "ns-chart-argument": series.argumentField }); } this.initialize = function (exp) { var p = exp; if (Ns.Judge.isStr(exp)) { p = $(exp)[0]; } if (p.nodeName.toLowerCase() == "svg") { this.canvas = $(p).parent(); this.svg = new Ns.SVG.base(p); this.parent = new Ns.SVG.base(this.canvas); } else { this.canvas = $(p)[0]; this.parent = new Ns.SVG.base(this.canvas); var chl = $(this.canvas).children("svg"); if (chl.length <= 0) { this.svg = Ns.SVG.Base.createBC("svg"); this.svg.appendTo($(this.canvas)); } else { this.svg = new Ns.SVG.base(chl[0]); this.svg.guid = $(this); this.id = $(this).attr("id"); } } this.hovering = Ns.Event.EventTarget.register("hovering", null, this, this.svg ? this.svg.svgdom : null); this.drawing = Ns.Event.EventTarget.register("drawing", null, this, null); this.drawed = Ns.Event.EventTarget.register("drawed", null, this, null); this.initialized.fire(arguments); } this._init = function () { this.initialized.addEvent(function (e, args) { this.series = Ns.Chart.Series(this.datasource, this.series); if (this.title) { this.svgTitle = new Ns.Chart.title(); this.svgTitle.initialize(this.svg, this.canvas); this.svgTitle.text = this.title; this.svgTitle.x = -1; this.svgTitle.y = 20; this.svgTitle.attr = { "ns-chart-title": this.title }; } }); } this._init.apply(this, arguments); } Ns.Extend.pro(Ns.Chart.pie, Ns.Chart.chartBase);
posted @ 2015-11-27 17:42  Sekeys  阅读(289)  评论(0编辑  收藏  举报