1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.getReplaceAttrs = exports.getPolygonCentroid = exports.getAngle = exports.getArcPath = exports.getSectorPath = exports.polarToCartesian = void 0;
|
4 | var util_1 = require("@antv/util");
|
5 |
|
6 | function getPointsBox(points) {
|
7 | if ((0, util_1.isEmpty)(points)) {
|
8 | return null;
|
9 | }
|
10 | var minX = points[0].x;
|
11 | var maxX = points[0].x;
|
12 | var minY = points[0].y;
|
13 | var maxY = points[0].y;
|
14 | (0, util_1.each)(points, function (point) {
|
15 | minX = minX > point.x ? point.x : minX;
|
16 | maxX = maxX < point.x ? point.x : maxX;
|
17 | minY = minY > point.y ? point.y : minY;
|
18 | maxY = maxY < point.y ? point.y : maxY;
|
19 | });
|
20 | return {
|
21 | minX: minX,
|
22 | maxX: maxX,
|
23 | minY: minY,
|
24 | maxY: maxY,
|
25 | centerX: (minX + maxX) / 2,
|
26 | centerY: (minY + maxY) / 2,
|
27 | };
|
28 | }
|
29 | function uniqueValues(array) {
|
30 | return Array.from(new Set(array)).length === 1;
|
31 | }
|
32 | function mid(array) {
|
33 | return ((0, util_1.min)(array) + (0, util_1.max)(array)) / 2;
|
34 | }
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 | function polarToCartesian(centerX, centerY, radius, angleInRadian) {
|
45 | return {
|
46 | x: centerX + radius * Math.cos(angleInRadian),
|
47 | y: centerY + radius * Math.sin(angleInRadian),
|
48 | };
|
49 | }
|
50 | exports.polarToCartesian = polarToCartesian;
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 | function getSectorPath(centerX, centerY, radius, startAngleInRadian, endAngleInRadian, innerRadius) {
|
62 | if (innerRadius === void 0) { innerRadius = 0; }
|
63 | var start = polarToCartesian(centerX, centerY, radius, startAngleInRadian);
|
64 | var end = polarToCartesian(centerX, centerY, radius, endAngleInRadian);
|
65 | var innerStart = polarToCartesian(centerX, centerY, innerRadius, startAngleInRadian);
|
66 | var innerEnd = polarToCartesian(centerX, centerY, innerRadius, endAngleInRadian);
|
67 | if (endAngleInRadian - startAngleInRadian === Math.PI * 2) {
|
68 |
|
69 | var middlePoint = polarToCartesian(centerX, centerY, radius, startAngleInRadian + Math.PI);
|
70 | var innerMiddlePoint = polarToCartesian(centerX, centerY, innerRadius, startAngleInRadian + Math.PI);
|
71 | var circlePathCommands = [
|
72 | ['M', start.x, start.y],
|
73 | ['A', radius, radius, 0, 1, 1, middlePoint.x, middlePoint.y],
|
74 | ['A', radius, radius, 0, 1, 1, end.x, end.y],
|
75 | ['M', innerStart.x, innerStart.y],
|
76 | ];
|
77 | if (innerRadius) {
|
78 | circlePathCommands.push(['A', innerRadius, innerRadius, 0, 1, 0, innerMiddlePoint.x, innerMiddlePoint.y]);
|
79 | circlePathCommands.push(['A', innerRadius, innerRadius, 0, 1, 0, innerEnd.x, innerEnd.y]);
|
80 | }
|
81 | circlePathCommands.push(['M', start.x, start.y]);
|
82 | circlePathCommands.push(['Z']);
|
83 | return circlePathCommands;
|
84 | }
|
85 | var arcSweep = endAngleInRadian - startAngleInRadian <= Math.PI ? 0 : 1;
|
86 | var sectorPathCommands = [
|
87 | ['M', start.x, start.y],
|
88 | ['A', radius, radius, 0, arcSweep, 1, end.x, end.y],
|
89 | ['L', innerEnd.x, innerEnd.y],
|
90 | ];
|
91 | if (innerRadius) {
|
92 | sectorPathCommands.push(['A', innerRadius, innerRadius, 0, arcSweep, 0, innerStart.x, innerStart.y]);
|
93 | }
|
94 | sectorPathCommands.push(['L', start.x, start.y]);
|
95 | sectorPathCommands.push(['Z']);
|
96 | return sectorPathCommands;
|
97 | }
|
98 | exports.getSectorPath = getSectorPath;
|
99 |
|
100 |
|
101 |
|
102 |
|
103 |
|
104 |
|
105 |
|
106 |
|
107 |
|
108 |
|
109 | function getArcPath(centerX, centerY, radius, startAngleInRadian, endAngleInRadian) {
|
110 | var start = polarToCartesian(centerX, centerY, radius, startAngleInRadian);
|
111 | var end = polarToCartesian(centerX, centerY, radius, endAngleInRadian);
|
112 | if ((0, util_1.isNumberEqual)(endAngleInRadian - startAngleInRadian, Math.PI * 2)) {
|
113 | var middlePoint = polarToCartesian(centerX, centerY, radius, startAngleInRadian + Math.PI);
|
114 | return [
|
115 | ['M', start.x, start.y],
|
116 | ['A', radius, radius, 0, 1, 1, middlePoint.x, middlePoint.y],
|
117 | ['A', radius, radius, 0, 1, 1, start.x, start.y],
|
118 | ['A', radius, radius, 0, 1, 0, middlePoint.x, middlePoint.y],
|
119 | ['A', radius, radius, 0, 1, 0, start.x, start.y],
|
120 | ['Z'],
|
121 | ];
|
122 | }
|
123 | var arcSweep = endAngleInRadian - startAngleInRadian <= Math.PI ? 0 : 1;
|
124 | return [
|
125 | ['M', start.x, start.y],
|
126 | ['A', radius, radius, 0, arcSweep, 1, end.x, end.y],
|
127 | ];
|
128 | }
|
129 | exports.getArcPath = getArcPath;
|
130 |
|
131 |
|
132 |
|
133 |
|
134 |
|
135 |
|
136 |
|
137 | function getAngle(shapeModel, coordinate) {
|
138 | var points = shapeModel.points;
|
139 | var box = getPointsBox(points);
|
140 | var endAngle;
|
141 | var startAngle;
|
142 | var coordStartAngle = coordinate.startAngle, coordEndAngle = coordinate.endAngle;
|
143 | var diffAngle = coordEndAngle - coordStartAngle;
|
144 | if (coordinate.isTransposed) {
|
145 | endAngle = box.maxY * diffAngle;
|
146 | startAngle = box.minY * diffAngle;
|
147 | }
|
148 | else {
|
149 | endAngle = box.maxX * diffAngle;
|
150 | startAngle = box.minX * diffAngle;
|
151 | }
|
152 | endAngle += coordStartAngle;
|
153 | startAngle += coordStartAngle;
|
154 | return {
|
155 | startAngle: startAngle,
|
156 | endAngle: endAngle,
|
157 | };
|
158 | }
|
159 | exports.getAngle = getAngle;
|
160 |
|
161 |
|
162 |
|
163 |
|
164 | function getPolygonCentroid(xs, ys) {
|
165 | if ((0, util_1.isNumber)(xs) && (0, util_1.isNumber)(ys)) {
|
166 |
|
167 | return [xs, ys];
|
168 | }
|
169 | xs = xs;
|
170 | ys = ys;
|
171 |
|
172 |
|
173 |
|
174 |
|
175 |
|
176 |
|
177 | if (uniqueValues(xs) || uniqueValues(ys))
|
178 | return [mid(xs), mid(ys)];
|
179 | var i = -1;
|
180 | var x = 0;
|
181 | var y = 0;
|
182 | var former;
|
183 | var current = xs.length - 1;
|
184 | var diff;
|
185 | var k = 0;
|
186 | while (++i < xs.length) {
|
187 | former = current;
|
188 | current = i;
|
189 | k += diff = xs[former] * ys[current] - xs[current] * ys[former];
|
190 | x += (xs[former] + xs[current]) * diff;
|
191 | y += (ys[former] + ys[current]) * diff;
|
192 | }
|
193 | k *= 3;
|
194 | return [x / k, y / k];
|
195 | }
|
196 | exports.getPolygonCentroid = getPolygonCentroid;
|
197 |
|
198 |
|
199 |
|
200 |
|
201 | function getReplaceAttrs(sourceShape, targetShape) {
|
202 | var originAttrs = sourceShape.attr();
|
203 | var newAttrs = targetShape.attr();
|
204 | (0, util_1.each)(originAttrs, function (v, k) {
|
205 | if (newAttrs[k] === undefined) {
|
206 | newAttrs[k] = undefined;
|
207 | }
|
208 | });
|
209 | return newAttrs;
|
210 | }
|
211 | exports.getReplaceAttrs = getReplaceAttrs;
|
212 |
|
\ | No newline at end of file |