From a3548b2578e40d8e5524764cf0665aeaab5c7605 Mon Sep 17 00:00:00 2001 From: "xuying.xu" Date: Mon, 5 Feb 2024 16:19:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20transposed=E4=B8=BAfalse=E6=97=B6?= =?UTF-8?q?=E9=A5=BC=E5=9B=BE=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/f2/src/components/geometry/index.tsx | 35 ++++++-- ...16\257\345\275\242\345\233\276-1-snap.png" | Bin 0 -> 11356 bytes ...16\257\345\275\242\345\233\276-2-snap.png" | Bin 0 -> 11520 bytes .../interval/example/doughnut.test.tsx | 85 +++++++++++++++++- 4 files changed, 114 insertions(+), 6 deletions(-) create mode 100644 "packages/f2/test/components/interval/example/__image_snapshots__/doughnut-test-tsx-\347\216\257\345\275\242\345\233\276-\347\216\253\347\221\260\347\216\257\345\275\242\345\233\276-1-snap.png" create mode 100644 "packages/f2/test/components/interval/example/__image_snapshots__/doughnut-test-tsx-\347\216\257\345\275\242\345\233\276-\347\216\253\347\221\260\347\216\257\345\275\242\345\233\276-2-snap.png" diff --git a/packages/f2/src/components/geometry/index.tsx b/packages/f2/src/components/geometry/index.tsx index 03d1d9c1a..9af14bc96 100644 --- a/packages/f2/src/components/geometry/index.tsx +++ b/packages/f2/src/components/geometry/index.tsx @@ -674,6 +674,24 @@ class Geometry< }); } + _getXSnapRecords(invertPointX, records) { + const xScale = this.getXScale(); + const { field: xField } = xScale; + const xValue = xScale.invert(invertPointX); + // category + if (xScale.isCategory) { + return records.filter((record) => record[FIELD_ORIGIN][xField] === xValue); + } + // linear + return records.filter((record) => { + const rangeX = record[xField]; + if (rangeX[0] <= xValue && rangeX[1] >= xValue) { + return true; + } + return false; + }); + } + // 把 records 拍平 flatRecords() { const { records } = this; @@ -721,11 +739,18 @@ class Geometry< }; // 处理饼图 - if (adjust === 'stack' && coord.isPolar && coord.transposed) { - // 弧度在半径范围内 - if (invertPoint.x >= 0 && invertPoint.x <= 1) { - const snapRecords = this._getYSnapRecords(invertPoint.y, records); - return snapRecords; + if (adjust === 'stack' && coord.isPolar) { + if (coord.transposed) { + // 弧度在半径范围内 + if (invertPoint.x >= 0 && invertPoint.x <= 1) { + const snapRecords = this._getYSnapRecords(invertPoint.y, records); + return snapRecords; + } + } else { + if (invertPoint.y >= 0 && invertPoint.y <= 1) { + const snapRecords = this._getXSnapRecords(invertPoint.x, records); + return snapRecords; + } } } diff --git "a/packages/f2/test/components/interval/example/__image_snapshots__/doughnut-test-tsx-\347\216\257\345\275\242\345\233\276-\347\216\253\347\221\260\347\216\257\345\275\242\345\233\276-1-snap.png" "b/packages/f2/test/components/interval/example/__image_snapshots__/doughnut-test-tsx-\347\216\257\345\275\242\345\233\276-\347\216\253\347\221\260\347\216\257\345\275\242\345\233\276-1-snap.png" new file mode 100644 index 0000000000000000000000000000000000000000..f1e525b11238583ccc9b6ce0ff743d3d56d8edda GIT binary patch literal 11356 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 essC?j;7%r2t!vHH7 { it('基础环形图', async () => { @@ -233,4 +233,87 @@ describe('环形图', () => { await delay(1000); expect(context).toMatchImageSnapshot(); }); + + it('玫瑰环形图', async () => { + const data = [ + { + name: '股票类', + percent: 10, + a: [0, 83], + }, + { + name: '债券类', + percent: 40, + a: [83, 110], + }, + { + name: '现金类', + percent: 80, + a: [110, 134], + }, + ]; + + const map = {}; + data.forEach(function(obj) { + map[obj.name] = obj.percent + '%'; + }); + + const context = createContext('基础环形图'); + const chartRef = { current: null }; + const { type, props } = ( + + + { + return { + r: value.yMax * 1.4, + }; + }, + }} + /> + { + return map[name]; + }} + valuePrefix=" " + /> + + + ); + + const canvas = new Canvas(props); + await canvas.render(); + + await delay(1000); + expect(context).toMatchImageSnapshot(); + await delay(20); + + await gestureSimulator(context.canvas, 'click', { x: 133, y: 64 }); + await delay(100); + expect(context).toMatchImageSnapshot(); + }); });