You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by ov...@apache.org on 2022/11/30 08:48:14 UTC

[echarts] branch fix-17980 created (now bd767e20f)

This is an automated email from the ASF dual-hosted git repository.

ovilia pushed a change to branch fix-17980
in repository https://gitbox.apache.org/repos/asf/echarts.git


      at bd767e20f fix(polar): support borderRadius for polar bars #17980

This branch includes the following new commits:

     new bd767e20f fix(polar): support borderRadius for polar bars #17980

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org


[echarts] 01/01: fix(polar): support borderRadius for polar bars #17980

Posted by ov...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ovilia pushed a commit to branch fix-17980
in repository https://gitbox.apache.org/repos/asf/echarts.git

commit bd767e20f0fc8ba227e3c430ac529d107ab6fe32
Author: Ovilia <zw...@gmail.com>
AuthorDate: Wed Nov 30 16:46:33 2022 +0800

    fix(polar): support borderRadius for polar bars #17980
---
 src/chart/bar/BarSeries.ts          |   4 +-
 src/chart/bar/BarView.ts            |  23 ++++-
 src/chart/helper/pieHelper.ts       |  41 --------
 src/chart/pie/PieView.ts            |   2 +-
 src/chart/sunburst/SunburstPiece.ts |   2 +-
 test/bar-polar-borderRadius.html    | 180 ++++++++++++++++++++++++++++++++++++
 6 files changed, 204 insertions(+), 48 deletions(-)

diff --git a/src/chart/bar/BarSeries.ts b/src/chart/bar/BarSeries.ts
index eb838c11f..de03a19ea 100644
--- a/src/chart/bar/BarSeries.ts
+++ b/src/chart/bar/BarSeries.ts
@@ -53,8 +53,8 @@ interface BarStatesMixin {
 }
 
 export interface BarItemStyleOption<TCbParams = never> extends ItemStyleOption<TCbParams> {
-    // Border radius is not supported for bar on polar
-    borderRadius?: number | number[]
+    // for polar bars, this is used for sector's cornerRadius
+    borderRadius?: (number | string)[] | number | string
 }
 export interface BarDataItemOption extends BarStateOption,
     StatesOptionMixin<BarStateOption, BarStatesMixin>,
diff --git a/src/chart/bar/BarView.ts b/src/chart/bar/BarView.ts
index 0de06c481..346f3d9da 100644
--- a/src/chart/bar/BarView.ts
+++ b/src/chart/bar/BarView.ts
@@ -21,6 +21,8 @@ import Path, {PathProps} from 'zrender/src/graphic/Path';
 import Group from 'zrender/src/graphic/Group';
 import {extend, each, map} from 'zrender/src/core/util';
 import {BuiltinTextPosition} from 'zrender/src/core/types';
+import {SectorProps} from 'zrender/src/graphic/shape/Sector';
+import {RectProps} from 'zrender/src/graphic/shape/Rect';
 import {
     Rect,
     Sector,
@@ -66,6 +68,7 @@ import { warn } from '../../util/log';
 import {createSectorCalculateTextPosition, SectorTextPosition, setSectorTextRotation} from '../../label/sectorLabel';
 import { saveOldStyle } from '../../animation/basicTransition';
 import Element from 'zrender/src/Element';
+import { getSectorCornerRadius } from '../helper/sectorHelper';
 
 const mathMax = Math.max;
 const mathMin = Math.min;
@@ -338,7 +341,7 @@ class BarView extends ChartView {
                     }
                     const bgLayout = getLayout[coord.type](data, newIndex);
                     const shape = createBackgroundShape(isHorizontalOrRadial, bgLayout, coord);
-                    updateProps(bgEl, { shape }, animationModel, newIndex);
+                    updateProps<RectProps | SectorProps>(bgEl, { shape }, animationModel, newIndex);
                 }
 
                 let el = oldData.getItemGraphicEl(oldIndex) as BarPossiblePath;
@@ -971,7 +974,8 @@ function createPolarPositionMapping(isRadial: boolean)
 
 function updateStyle(
     el: BarPossiblePath,
-    data: SeriesData, dataIndex: number,
+    data: SeriesData,
+    dataIndex: number,
     itemModel: Model<BarDataItemOption>,
     layout: RectLayout | SectorLayout,
     seriesModel: BarSeriesModel,
@@ -981,7 +985,20 @@ function updateStyle(
     const style = data.getItemVisual(dataIndex, 'style');
 
     if (!isPolar) {
-        (el as Rect).setShape('r', itemModel.get(['itemStyle', 'borderRadius']) || 0);
+        const borderRadius = itemModel
+            .get(['itemStyle', 'borderRadius']) as number | number[] || 0;
+        (el as Rect).setShape('r', borderRadius);
+    }
+    else if (!seriesModel.get('roundCap')) {
+        const sector = el as Sector;
+        const sectorShape = (el as Sector).shape;
+        const cornerRadius = getSectorCornerRadius(
+            itemModel.getModel('itemStyle'),
+            sectorShape,
+            true
+        );
+        extend(sectorShape, cornerRadius);
+        sector.setShape(sectorShape);
     }
 
     el.useStyle(style);
diff --git a/src/chart/helper/pieHelper.ts b/src/chart/helper/pieHelper.ts
deleted file mode 100644
index e55ded398..000000000
--- a/src/chart/helper/pieHelper.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import type Model from '../../model/Model';
-import type Sector from 'zrender/src/graphic/shape/Sector';
-import { isArray, map } from 'zrender/src/core/util';
-import { parsePercent } from 'zrender/src/contain/text';
-
-export function getSectorCornerRadius(
-    model: Model<{ borderRadius?: string | number | (string | number)[] }>,
-    shape: Pick<Sector['shape'], 'r0' | 'r'>,
-    zeroIfNull?: boolean
-) {
-    let cornerRadius = model.get('borderRadius');
-    if (cornerRadius == null) {
-        return zeroIfNull ? { cornerRadius: 0 } : null;
-    }
-    if (!isArray(cornerRadius)) {
-        cornerRadius = [cornerRadius, cornerRadius, cornerRadius, cornerRadius];
-    }
-    const dr = Math.abs(shape.r || 0 - shape.r0 || 0);
-    return {
-        cornerRadius: map(cornerRadius, cr => parsePercent(cr, dr))
-    };
-}
diff --git a/src/chart/pie/PieView.ts b/src/chart/pie/PieView.ts
index 77f5c445e..cb0e1d635 100644
--- a/src/chart/pie/PieView.ts
+++ b/src/chart/pie/PieView.ts
@@ -31,7 +31,7 @@ import PieSeriesModel, {PieDataItemOption} from './PieSeries';
 import labelLayout from './labelLayout';
 import { setLabelLineStyle, getLabelLineStatesModels } from '../../label/labelGuideHelper';
 import { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';
-import { getSectorCornerRadius } from '../helper/pieHelper';
+import { getSectorCornerRadius } from '../helper/sectorHelper';
 import { saveOldStyle } from '../../animation/basicTransition';
 import { getBasicPieLayout } from './pieLayout';
 
diff --git a/src/chart/sunburst/SunburstPiece.ts b/src/chart/sunburst/SunburstPiece.ts
index 873a686f1..8c7be8c1a 100644
--- a/src/chart/sunburst/SunburstPiece.ts
+++ b/src/chart/sunburst/SunburstPiece.ts
@@ -28,7 +28,7 @@ import { PathStyleProps } from 'zrender/src/graphic/Path';
 import { ColorString } from '../../util/types';
 import Model from '../../model/Model';
 import { getECData } from '../../util/innerStore';
-import { getSectorCornerRadius } from '../helper/pieHelper';
+import { getSectorCornerRadius } from '../helper/sectorHelper';
 import {createOrUpdatePatternFromDecal} from '../../util/decal';
 import ExtensionAPI from '../../core/ExtensionAPI';
 import { saveOldStyle } from '../../animation/basicTransition';
diff --git a/test/bar-polar-borderRadius.html b/test/bar-polar-borderRadius.html
new file mode 100644
index 000000000..9fbf9e973
--- /dev/null
+++ b/test/bar-polar-borderRadius.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+
+<html>
+    <head>
+        <meta charset="utf-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1" />
+        <script src="lib/simpleRequire.js"></script>
+        <script src="lib/config.js"></script>
+        <script src="lib/jquery.min.js"></script>
+        <script src="lib/facePrint.js"></script>
+        <script src="lib/testHelper.js"></script>
+        <!-- <script src="ut/lib/canteen.js"></script> -->
+        <link rel="stylesheet" href="lib/reset.css" />
+    </head>
+    <body>
+        <style>
+        </style>
+
+
+
+        <div id="main0"></div>
+        <div id="main1"></div>
+        <div id="main2"></div>
+
+
+
+        <script>
+            require([
+                'echarts',
+                // 'map/js/china',
+                // './data/nutrients.json'
+            ], function (echarts) {
+                var option;
+
+                option = {
+                    angleAxis: {
+                        type: 'category',
+                        data: ['a', 'b', 'c'],
+                        z: 10
+                    },
+                    tooltip: {
+                    },
+                    radiusAxis: {
+                    },
+                    polar: {
+                        radius: [50, 150]
+                    },
+                    series: [{
+                        type: 'bar',
+                        data: [2, -1, 3],
+                        itemStyle: {
+                            borderRadius: [5, 10, 20, 30]
+                        },
+                        coordinateSystem: 'polar'
+                    }]
+                };
+
+                var chart = testHelper.create(echarts, 'main0', {
+                    title: [
+                        'borderRadius: [5, 10, 20, 30]'
+                    ],
+                    option: option,
+                    // height: 300,
+                    // recordCanvas: true,
+                });
+            });
+            </script>
+
+            <script>
+                require([
+                    'echarts',
+                    // 'map/js/china',
+                    // './data/nutrients.json'
+                ], function (echarts) {
+                    var option;
+
+                    option = {
+                        angleAxis: {
+                            type: 'category',
+                            data: ['a', 'b', 'c'],
+                            z: 10
+                        },
+                        tooltip: {
+                        },
+                        radiusAxis: {
+                        },
+                        polar: {
+                            radius: [50, 150]
+                        },
+                        series: [{
+                            type: 'bar',
+                            data: [2, -1, 3],
+                            itemStyle: {
+                                borderRadius: [10, 20]
+                            },
+                            coordinateSystem: 'polar'
+                        }]
+                    };
+
+                    var chart = testHelper.create(echarts, 'main1', {
+                        title: [
+                            'borderRadius: [10, 20]'
+                        ],
+                        option: option,
+                        // height: 300,
+                        // recordCanvas: true,
+                    });
+                });
+            </script>
+
+            <script>
+                require([
+                    'echarts',
+                    // 'map/js/china',
+                    // './data/nutrients.json'
+                ], function (echarts) {
+                    var option;
+
+                    option = {
+                        angleAxis: {
+                            type: 'category',
+                            data: ['a', 'b', 'c'],
+                            z: 10
+                        },
+                        tooltip: {
+                        },
+                        radiusAxis: {
+                        },
+                        polar: {
+                            radius: [50, 150]
+                        },
+                        series: [{
+                            type: 'bar',
+                            data: [{
+                                value: 2,
+                                itemStyle: {
+                                    borderRadius: [20, 5]
+                                }
+                            }, -1, 3],
+                            itemStyle: {
+                                borderRadius: 10
+                            },
+                            coordinateSystem: 'polar'
+                        }]
+                    };
+
+                    var chart = testHelper.create(echarts, 'main2', {
+                        title: [
+                            'borderRadius: 10',
+                            'value 2 borderRadius: [20, 5]'
+                        ],
+                        option: option,
+                        // height: 300,
+                        // recordCanvas: true,
+                    });
+                });
+            </script>
+
+
+    </body>
+</html>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org