| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | 'use strict';module.exports = function(Chart) {	var helpers = Chart.helpers,		globalOpts = Chart.defaults.global;	globalOpts.elements.arc = {		backgroundColor: globalOpts.defaultColor,		borderColor: '#fff',		borderWidth: 2	};	Chart.elements.Arc = Chart.Element.extend({		inLabelRange: function(mouseX) {			var vm = this._view;			if (vm) {				return (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));			}			return false;		},		inRange: function(chartX, chartY) {			var vm = this._view;			if (vm) {				var pointRelativePosition = helpers.getAngleFromPoint(vm, {						x: chartX,						y: chartY					}),					angle = pointRelativePosition.angle,					distance = pointRelativePosition.distance;				// Sanitise angle range				var startAngle = vm.startAngle;				var endAngle = vm.endAngle;				while (endAngle < startAngle) {					endAngle += 2.0 * Math.PI;				}				while (angle > endAngle) {					angle -= 2.0 * Math.PI;				}				while (angle < startAngle) {					angle += 2.0 * Math.PI;				}				// Check if within the range of the open/close angle				var betweenAngles = (angle >= startAngle && angle <= endAngle),					withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);				return (betweenAngles && withinRadius);			}			return false;		},		getCenterPoint: function() {			var vm = this._view;			var halfAngle = (vm.startAngle + vm.endAngle) / 2;			var halfRadius = (vm.innerRadius + vm.outerRadius) / 2;			return {				x: vm.x + Math.cos(halfAngle) * halfRadius,				y: vm.y + Math.sin(halfAngle) * halfRadius			};		},		getArea: function() {			var vm = this._view;			return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));		},		tooltipPosition: function() {			var vm = this._view;			var centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2),				rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;			return {				x: vm.x + (Math.cos(centreAngle) * rangeFromCentre),				y: vm.y + (Math.sin(centreAngle) * rangeFromCentre)			};		},		draw: function() {			var ctx = this._chart.ctx,				vm = this._view,				sA = vm.startAngle,				eA = vm.endAngle;			ctx.beginPath();			ctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);			ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);			ctx.closePath();			ctx.strokeStyle = vm.borderColor;			ctx.lineWidth = vm.borderWidth;			ctx.fillStyle = vm.backgroundColor;			ctx.fill();			ctx.lineJoin = 'bevel';			if (vm.borderWidth) {				ctx.stroke();			}		}	});};
 |