Skip to content

Commit 0b1bf97

Browse files
committed
fix: horizontal bezier fix
1 parent 9d7c88e commit 0b1bf97

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

src/charting/renderer/LineChartRenderer.ts

+18-14
Original file line numberDiff line numberDiff line change
@@ -239,19 +239,19 @@ export class LineChartRenderer extends LineRadarRenderer {
239239
const phaseY = this.mAnimator.getPhaseY();
240240
const xKey = dataSet.xProperty;
241241
const yKey = dataSet.yProperty;
242-
let prev = dataSet.getEntryForIndex(this.mXBounds.min);
243-
let prevXVal = getEntryXValue(prev, xKey, this.mXBounds.min);
244-
let cur = prev;
245-
const float32arr = this.mLineBuffer;
246-
float32arr[0] = prevXVal;
247-
float32arr[1] = cur[yKey] * phaseY;
248242

249243
const firstIndex = Math.max(0, this.mXBounds.min);
250244
// let firstIndex = this.mXBounds.min + 1;
251245
const lastIndex = this.mXBounds.min + this.mXBounds.range;
246+
let prev = dataSet.getEntryForIndex(firstIndex);
247+
let prevXVal = getEntryXValue(prev, xKey, firstIndex);
248+
let cur = prev;
249+
let curXVal = prevXVal;
250+
const float32arr = this.mLineBuffer;
251+
let index = 0;
252+
float32arr[index++] = prevXVal;
253+
float32arr[index++] = cur[yKey] * phaseY;
252254
// let the spline start
253-
let index = 2,
254-
curXVal;
255255

256256
for (let j = firstIndex + 1; j <= lastIndex; j++) {
257257
const newEntry = dataSet.getEntryForIndex(j);
@@ -260,8 +260,8 @@ export class LineChartRenderer extends LineRadarRenderer {
260260
}
261261
prev = cur;
262262
prevXVal = curXVal;
263-
cur = dataSet.getEntryForIndex(j);
264-
curXVal = getEntryXValue(prev, xKey, j);
263+
cur = newEntry;
264+
curXVal = getEntryXValue(cur, xKey, j);
265265
const cpx = prevXVal + (curXVal - prevXVal) / 2.0;
266266

267267
float32arr[index++] = cpx;
@@ -305,12 +305,13 @@ export class LineChartRenderer extends LineRadarRenderer {
305305
// let firstIndex = this.mXBounds.min + 1;
306306
const lastIndex = this.mXBounds.min + this.mXBounds.range;
307307

308-
let prevPrev;
309-
let prevPrevXVal;
310308
let i = Math.max(firstIndex - 2, 0);
309+
let prevPrev = dataSet.getEntryForIndex(i);
310+
let prevPrevXVal = getEntryXValue(prevPrev, xKey, i);
311+
i = Math.max(firstIndex - 1, 0);
311312
let prev = dataSet.getEntryForIndex(i);
312313
let prevXVal = getEntryXValue(prev, xKey, i);
313-
i = Math.max(firstIndex - 1, 0);
314+
i = Math.max(firstIndex, 0);
314315
let cur = dataSet.getEntryForIndex(i);
315316
let curXVal = getEntryXValue(cur, xKey, i);
316317
let next = cur;
@@ -321,6 +322,8 @@ export class LineChartRenderer extends LineRadarRenderer {
321322

322323
const float32arr = this.mLineBuffer;
323324
let index = 0;
325+
// outputPath.reset();
326+
// outputPath.moveTo(curXVal, cur[yKey] * phaseY);
324327
float32arr[index++] = curXVal;
325328
float32arr[index++] = cur[yKey] * phaseY;
326329
// let the spline start
@@ -335,7 +338,7 @@ export class LineChartRenderer extends LineRadarRenderer {
335338
prevXVal = curXVal;
336339
cur = nextIndex === j ? next : newEntry;
337340
curXVal = nextIndex === j ? nextXVal : getEntryXValue(newEntry, xKey, j);
338-
nextIndex = j + 1 < dataSet.getEntryCount() ? j + 1 : j;
341+
nextIndex = Math.min(j + 1, dataSet.getEntryCount() - 1);
339342
next = dataSet.getEntryForIndex(nextIndex);
340343
nextXVal = getEntryXValue(next, xKey, nextIndex);
341344
if (next[yKey] === undefined || next[yKey] === null) {
@@ -352,6 +355,7 @@ export class LineChartRenderer extends LineRadarRenderer {
352355
float32arr[index++] = (cur[yKey] - curDy) * phaseY;
353356
float32arr[index++] = curXVal;
354357
float32arr[index++] = cur[yKey] * phaseY;
358+
// outputPath.cubicTo(prevXVal + prevDx, (prev[yKey] + prevDy) * phaseY, curXVal - curDx, (cur[yKey] - curDy) * phaseY, curXVal, cur[yKey] * phaseY);
355359
}
356360
const points = Utils.pointsFromBuffer(float32arr);
357361
outputPath.setCubicLines(points, 0, index);

0 commit comments

Comments
 (0)