1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121 | 1×
1×
1×
1×
2975×
2975×
2975×
2975×
1×
433×
433×
433×
433×
433×
433×
668×
668×
668×
668×
552×
668×
262×
171×
1×
615×
1×
552×
552×
552×
552×
552×
552×
552×
552×
552×
2968×
2968×
2810×
93×
2875×
158×
158×
158×
158×
158×
158×
158×
158×
158×
158×
158×
158×
158×
158×
6×
2717×
256×
290×
1×
2717×
2717×
2992×
2992×
1×
332×
332×
332×
297×
3006×
3006×
1023×
332×
1×
332×
332×
332×
264×
68×
332×
332×
1321×
1321×
291×
41×
1×
1×
| define(["require", "exports", "../../common/utils/helper"], function (require, exports, helper_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ChartData = (function () {
function ChartData(chart) {
this.currentPoints = [];
this.previousPoints = [];
this.chart = chart;
this.lierIndex = 0;
}
ChartData.prototype.getData = function () {
var chart = this.chart;
var point = null;
var series = null;
var width;
var height;
for (var len = chart.visibleSeries.length, i = len - 1; i >= 0; i--) {
series = chart.visibleSeries[i];
width = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))
? (series.marker.height + 5) / 2 : 0;
height = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))
? (series.marker.width + 5) / 2 : 0;
if (series.visible && helper_1.withInBounds(chart.mouseX, chart.mouseY, series.clipRect, width, height)) {
point = this.getRectPoint(series, series.clipRect, chart.mouseX, chart.mouseY);
}
if (point) {
return new helper_1.PointData(point, series);
}
}
return new helper_1.PointData(point, series);
};
ChartData.prototype.isSelected = function (chart) {
return (chart.selectionMode.indexOf('Drag') > -1 && chart.selectionModule && chart.selectionModule.rectPoints !== null);
};
ChartData.prototype.getRectPoint = function (series, rect, x, y) {
var currentRect;
var fromCenterX;
var fromCenterY;
var clickAngle;
var arcAngle = 0;
var startAngle;
var endAngle;
var distanceFromCenter;
for (var _i = 0, _a = series.points; _i < _a.length; _i++) {
var point = _a[_i];
if (!point.regionData) {
if (!point.regions || !point.regions.length) {
continue;
}
}
if (point.regionData && this.chart.chartAreaType === 'PolarRadar' && series.drawType.indexOf('Column') > -1) {
fromCenterX = x - (series.clipRect.width / 2 + series.clipRect.x);
fromCenterY = y - (series.clipRect.height / 2 + series.clipRect.y);
arcAngle = 2 * Math.PI * (point.regionData.currentXPosition < 0 ? 1 + point.regionData.currentXPosition
: point.regionData.currentXPosition);
clickAngle = (Math.atan2(fromCenterY, fromCenterX) + 0.5 * Math.PI - arcAngle) % (2 * Math.PI);
clickAngle = clickAngle < 0 ? 2 * Math.PI + clickAngle : clickAngle;
clickAngle = clickAngle + 2 * Math.PI * series.chart.primaryXAxis.startAngle;
startAngle = point.regionData.startAngle;
startAngle -= arcAngle;
startAngle = startAngle < 0 ? 2 * Math.PI + startAngle : startAngle;
endAngle = point.regionData.endAngle;
endAngle -= arcAngle;
endAngle = endAngle < 0 ? 2 * Math.PI + endAngle : endAngle;
distanceFromCenter = Math.sqrt(Math.pow(Math.abs(fromCenterX), 2) + Math.pow(Math.abs(fromCenterY), 2));
if (clickAngle >= startAngle && clickAngle <= endAngle &&
(((distanceFromCenter >= point.regionData.innerRadius && distanceFromCenter <= point.regionData.radius) ||
(distanceFromCenter <= point.regionData.innerRadius && distanceFromCenter >= point.regionData.radius))
&& distanceFromCenter <= series.chart.radius)) {
return point;
}
}
else if (this.checkRegionContainsPoint(point.regions, rect, x, y)) {
return point;
}
}
return null;
};
ChartData.prototype.checkRegionContainsPoint = function (regionRect, rect, x, y) {
var _this = this;
return regionRect.some(function (region, index) {
_this.lierIndex = index;
return helper_1.withInBounds(x, y, new helper_1.Rect((_this.chart.chartAreaType === 'Cartesian' ? rect.x : 0) + region.x, (_this.chart.chartAreaType === 'Cartesian' ? rect.y : 0) + region.y, region.width, region.height));
});
};
ChartData.prototype.getClosest = function (series, value) {
var xData = series.xData;
var closest;
if (value >= series.xMin - 0.5 && value <= series.xMax + 0.5) {
for (var _i = 0, xData_1 = xData; _i < xData_1.length; _i++) {
var data = xData_1[_i];
if (closest == null || Math.abs(data - value) < Math.abs(closest - value)) {
closest = data;
}
}
}
return closest;
};
ChartData.prototype.getClosestX = function (chart, series) {
var value;
var rect = series.clipRect;
if (!chart.requireInvertedAxis) {
value = helper_1.getValueXByPoint(chart.mouseX - rect.x, rect.width, series.xAxis);
}
else {
value = helper_1.getValueYByPoint(chart.mouseY - rect.y, rect.height, series.xAxis);
}
var closest = this.getClosest(series, value);
for (var _i = 0, _a = series.points; _i < _a.length; _i++) {
var point = _a[_i];
if (closest === point.xValue && point.visible) {
return new helper_1.PointData(point, series);
}
}
return null;
};
return ChartData;
}());
exports.ChartData = ChartData;
});
|