Skip to content

Commit 9ff67f7

Browse files
committed
Add hover highlight, fix scale compute
1 parent 6d4cd2e commit 9ff67f7

File tree

2 files changed

+69
-15
lines changed

2 files changed

+69
-15
lines changed

src/chart/chord.js

Lines changed: 62 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,18 @@ define(function(require) {
109109
var groupAnglesArr = groupAngles.toArray();
110110
var subGroupIndicesArr = subGroupIndices.toArray();
111111
var subGroupAnglesArr = subGroupAngles.toArray();
112+
var sumOutArray = sumOut.toArray();
112113

113114
var sectorAngles = [];
114115
var groupsTmp = [];
115116
var chordAngles = new NDArray(len, len).toArray();
117+
var values = [];
116118
var start = 0;
117119
var end = 0;
118120
for (var i = 0; i < len; i++) {
119121
var sortedIdx = groupIndicesArr[i];
120122
groupsTmp[sortedIdx] = groups[i];
123+
values[sortedIdx] = sumOutArray[i];
121124

122125
end = start + groupAnglesArr[i];
123126
sectorAngles[sortedIdx] = [start, end - padding];
@@ -155,11 +158,14 @@ define(function(require) {
155158
innerRadius
156159
);
157160

161+
var res = normalizeValue(values);
158162
_buildScales(
159-
sumOut.toArray(),
163+
res[0],
164+
res[1],
160165
sectorAngles,
161166
center,
162-
outerRadius
167+
outerRadius,
168+
new NDArray(res[0]).sum() / (360 - padding * len)
163169
);
164170
}
165171

@@ -175,8 +181,9 @@ define(function(require) {
175181
padding
176182
) {
177183
var startAngle = 90;
184+
var len = groups.length;
178185

179-
for (var i = 0; i < angles.length; i++) {
186+
for (var i = 0; i < len; i++) {
180187

181188
var group = groups[i];
182189
var angle = angles[i];
@@ -185,6 +192,7 @@ define(function(require) {
185192
id : zr.newShapeId(self.type),
186193
shape : 'sector',
187194
zlevel : _zlevelBase,
195+
hoverable : false,
188196
style : {
189197
x : center[0],
190198
y : center[1],
@@ -197,6 +205,42 @@ define(function(require) {
197205
}
198206
}
199207

208+
sector.onmouseover = (function(idx) {
209+
return function() {
210+
for (var i = 0; i < len; i++) {
211+
if (i !== idx) {
212+
sectorShapes[i].style.opacity = 0.1;
213+
zr.modShape(sectorShapes[i].id, sectorShapes[i]);
214+
215+
for (var j = 0; j < len; j++) {
216+
var chordShape = chordShapes[i][j];
217+
chordShape.style.opacity = 0.03;
218+
zr.modShape(chordShape.id, chordShape);
219+
}
220+
}
221+
}
222+
zr.refresh();
223+
}
224+
})(i);
225+
226+
sector.onmouseout = (function(idx) {
227+
return function() {
228+
for (var i = 0; i < len; i++) {
229+
sectorShapes[i].style.opacity = 1.0;
230+
zr.modShape(sectorShapes[i].id, sectorShapes[i]);
231+
232+
for (var j = 0; j < len; j++) {
233+
var chordShape = chordShapes[i][j];
234+
chordShape.style.opacity = 0.5;
235+
zr.modShape(chordShape.id, chordShape);
236+
}
237+
}
238+
zr.refresh();
239+
}
240+
})(i);
241+
242+
self.shapeList.push(sector);
243+
sectorShapes.push(sector);
200244
zr.addShape(sector);
201245
}
202246
}
@@ -216,7 +260,7 @@ define(function(require) {
216260
for (var j = 0; j < len; j++) {
217261

218262
if (chordShapes[j][i]) {
219-
continue;
263+
chordShapes[i][j] = chordShapes[j][i];
220264
}
221265

222266
var angleIJ = angles[i][j][0];
@@ -248,22 +292,20 @@ define(function(require) {
248292
}
249293

250294
chordShapes[i][j] = chord;
295+
self.shapeList.push(chord);
251296
zr.addShape(chord);
252297
}
253298
}
254299
}
255300

256301
function _buildScales(
257302
values,
303+
unitPostfix,
258304
angles,
259305
center,
260-
radius
306+
radius,
307+
unitValue
261308
) {
262-
var res = normalizeValue(values);
263-
var values = res[0];
264-
var unitPostfix = res[1];
265-
var unitValue = new NDArray(values).sum() / (360 / scaleUnitAngle);
266-
267309
for (var i = 0; i < angles.length; i++) {
268310
var startAngle = angles[i][0];
269311
var endAngle = angles[i][1];
@@ -282,6 +324,7 @@ define(function(require) {
282324
shape : 'line',
283325
id : zr.newShapeId(self.type),
284326
zlevel : _zlevelBase - 1,
327+
hoverable : false,
285328
style : {
286329
xStart : start[0],
287330
yStart : start[1],
@@ -293,32 +336,37 @@ define(function(require) {
293336
}
294337
}
295338

339+
self.shapeList.push(scaleShape);
296340
zr.addShape(scaleShape);
297341

298342
scaleAngle += scaleUnitAngle;
299343
}
300344

301345
var scaleTextAngle = startAngle;
302-
var scaleValues = NDArray.range(0, values[i], unitValue).toArray();
346+
var step = unitValue * 5 * scaleUnitAngle;
347+
var scaleValues = NDArray.range(0, values[i], step).toArray();
303348
while (scaleTextAngle < endAngle) {
304349
var scaleTextAngleFixed = scaleTextAngle - 90;
305350
var isRightSide = scaleTextAngleFixed <= 90 && scaleTextAngleFixed >= -90;
306351
var textShape = {
307352
shape : 'text',
308353
id : zr.newShapeId(self.type),
309354
zlevel : _zlevelBase - 1,
355+
hoverable : false,
310356
style : {
311357
x : isRightSide
312358
? radius + scaleLineLength + 2
313-
: -radius - scaleLineLength - 20,
359+
: -radius - scaleLineLength - 34,
314360
y : 0,
315-
text : Math.round(scaleValues.shift()) + unitPostfix
361+
text : Math.round(scaleValues.shift()*10)/10 + unitPostfix
316362
},
317363
position : center.slice(),
318364
rotation : isRightSide
319365
? [-scaleTextAngleFixed / 180 * Math.PI, 0, 0]
320366
: [-(scaleTextAngleFixed + 180) / 180 * Math.PI, 0, 0]
321367
}
368+
369+
self.shapeList.push(textShape);
322370
zr.addShape(textShape);
323371
scaleTextAngle += scaleUnitAngle * 5;
324372
}
@@ -343,7 +391,7 @@ define(function(require) {
343391
}
344392

345393
for (var i = 0; i < values.length; i++) {
346-
result[i] = Math.round(values[i] * unitScale);
394+
result[i] = values[i] * unitScale;
347395
}
348396
return [result, unitPostfix];
349397
}

src/util/shape/chord.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,14 @@ define(function(require) {
116116
(cy - sy0) * 0.70 + sy0,
117117
sx0, sy0);
118118
},
119+
119120
getRect : function(){
120-
return [0, 0, 0, 0];
121+
return {
122+
x : 0,
123+
y : 0,
124+
width : 0,
125+
height : 0
126+
};
121127
}
122128
}
123129

0 commit comments

Comments
 (0)