Skip to content

Commit 63c289d

Browse files
authored
Merge pull request #3895 from VisActor/feat/gauge-clip
feat: gauge support clip when mark outof axis. close#3859
2 parents b0b3269 + 7ef5dd2 commit 63c289d

File tree

13 files changed

+148
-12
lines changed

13 files changed

+148
-12
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@visactor/vchart",
5+
"comment": "feat: gauge support clip when mark outof axis. close#3859",
6+
"type": "none"
7+
}
8+
],
9+
"packageName": "@visactor/vchart"
10+
}

docs/assets/option/en/series/circular-progress.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,30 @@
1616
seriesMarks = ['progress', 'track']
1717
) }}
1818

19+
#${prefix} tickMask(Object)
20+
Tick mode display. Supported since `1.4.0` version.
21+
22+
##${prefix} angle(number)
23+
Default width of a single tick, angle value.
24+
25+
##${prefix} offsetAngle(number)
26+
Offset angle of a single tick, angle value.
27+
28+
##${prefix} forceAlign(boolean)
29+
Whether the primitives under the tick mask are forced to align with the tick edge.
30+
31+
##${prefix} style(Object)
32+
{{ use: mark-style(
33+
markName = 'area'
34+
) }}
35+
36+
{{ use: mark-area(
37+
prefix = '##' + ${prefix}
38+
) }}
39+
40+
#${prefix} clamp(boolean) = false
41+
Supported since `1.13.9` version, whether the out-of-axis range is clipped (except tick mode, because tick mode has its own clipping).
42+
1943
#${prefix} categoryField(string|string[])
2044

2145
Category field, mapped to the radius axis. Can be declared as an array type, internally grouping data according to the declared fields.

docs/assets/option/en/series/gauge.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,30 @@
1414
seriesMarks = ['segment'],
1515
) }}
1616

17+
#${prefix} tickMask(Object)
18+
Tick mode display. Supported since `1.4.0` version.
19+
20+
##${prefix} angle(number)
21+
Default width of a single tick, angle value.
22+
23+
##${prefix} offsetAngle(number)
24+
Offset angle of a single tick, angle value.
25+
26+
##${prefix} forceAlign(boolean)
27+
Whether the primitives under the tick mask are forced to align with the tick edge.
28+
29+
##${prefix} style(Object)
30+
{{ use: mark-style(
31+
markName = 'area'
32+
) }}
33+
34+
{{ use: mark-area(
35+
prefix = '##' + ${prefix}
36+
) }}
37+
38+
#${prefix} clamp(boolean) = false
39+
Supported since `1.13.9` version, whether the out-of-axis range is clipped (except tick mode, because tick mode has its own clipping).
40+
1741
#${prefix} padAngle(number)
1842

1943
Configure the angle between sectors.

docs/assets/option/en/series/linear-progress.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,6 @@ Background bar style configuration.
7878

7979
Progress bar width.
8080
In pixel (px) units.
81+
82+
#${prefix} clamp(boolean) = false
83+
Supported since `1.13.9` version, whether the out-of-axis range is clipped.

docs/assets/option/zh/series/circular-progress.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,30 @@
1616
seriesMarks = ['progress', 'track']
1717
) }}
1818

19+
#${prefix} tickMask(Object)
20+
tick 模式显示. 自`1.4.0`版本支持。
21+
22+
##${prefix} angle(number)
23+
单个 tick 的默认宽度,角度值。
24+
25+
##${prefix} offsetAngle(number)
26+
单个 tick 的偏移角度,角度值。
27+
28+
##${prefix} forceAlign(boolean)
29+
tick mask 下的图元是否强制和 tick 的边线对齐。
30+
31+
##${prefix} style(Object)
32+
{{ use: mark-style(
33+
markName = 'area'
34+
) }}
35+
36+
{{ use: mark-area(
37+
prefix = '##' + ${prefix}
38+
) }}
39+
40+
#${prefix} clamp(boolean) = false
41+
`1.13.9`版本支持,超出轴范围是否被裁剪(除tick模式外, 因为tick模式自带裁剪)。
42+
1943
#${prefix} categoryField(string|string[])
2044

2145
类别字段,映射到半径轴。可以声明为数组类型,内部会依次按照声明的字段进行数据分组。

docs/assets/option/zh/series/gauge.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,30 @@
1414
seriesMarks = ['segment'],
1515
) }}
1616

17+
#${prefix} tickMask(Object)
18+
tick 模式显示. 自`1.4.0`版本支持。
19+
20+
##${prefix} angle(number)
21+
单个 tick 的默认宽度,角度值。
22+
23+
##${prefix} offsetAngle(number)
24+
单个 tick 的偏移角度,角度值。
25+
26+
##${prefix} forceAlign(boolean)
27+
tick mask 下的图元是否强制和 tick 的边线对齐。
28+
29+
##${prefix} style(Object)
30+
{{ use: mark-style(
31+
markName = 'area'
32+
) }}
33+
34+
{{ use: mark-area(
35+
prefix = '##' + ${prefix}
36+
) }}
37+
38+
#${prefix} clamp(boolean) = false
39+
`1.13.9`版本支持,超出轴范围是否被裁剪(除tick模式外, 因为tick模式自带裁剪)。
40+
1741
#${prefix} padAngle(number)
1842

1943
配置扇区间隔角度。

docs/assets/option/zh/series/linear-progress.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,6 @@
7878

7979
进度条宽度。
8080
以像素值(px)为单位。
81+
82+
#${prefix} clamp(boolean) = false
83+
`1.13.9`版本支持,超出轴范围是否被裁剪。

packages/vchart/src/chart/progress/linear/linear-progress-transformer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export class LinearProgressChartSpecTransformer<
1212
}
1313

1414
protected _getDefaultSeriesSpec(spec: T): ILinearProgressChartSpec {
15-
const series = super._getDefaultSeriesSpec(spec, ['bandWidth', 'progress', 'track']);
15+
const series = super._getDefaultSeriesSpec(spec, ['bandWidth', 'progress', 'track', 'clamp']);
1616
series.direction = spec.direction ?? 'horizontal';
1717

1818
series.cornerRadius = spec.cornerRadius ?? 0;

packages/vchart/src/series/gauge/gauge.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { GaugeSeriesSpecTransformer } from './gauge-transformer';
1717
import { registerArcMark } from '../../mark/arc';
1818
import { registerPolarLinearAxis } from '../../component/axis/polar';
1919
import { AttributeLevel } from '../../constant/attribute';
20+
import { valueInScaleRange } from '../../util';
2021

2122
export class GaugeSeries<T extends IGaugeSeriesSpec = IGaugeSeriesSpec> extends ProgressLikeSeries<T> {
2223
static readonly type: string = SeriesTypeEnum.gauge;
@@ -157,19 +158,21 @@ export class GaugeSeries<T extends IGaugeSeriesSpec = IGaugeSeriesSpec> extends
157158
protected _getAngleValueStartWithoutMask(datum: Datum) {
158159
const startAngle = this._getAngleValueStartWithoutPadAngle(datum);
159160
const endAngle = this._getAngleValueEndWithoutPadAngle(datum);
160-
return clamper(
161+
const angle = clamper(
161162
startAngle,
162163
(startAngle + endAngle) / 2
163164
)(startAngle + (endAngle > startAngle ? 1 : -1) * Math.abs(this._padAngle / 2));
165+
return this._spec.clamp ? valueInScaleRange(angle, this.angleAxisHelper.getScale(0)) : angle;
164166
}
165167

166168
protected _getAngleValueEndWithoutMask(datum: Datum) {
167169
const startAngle = this._getAngleValueStartWithoutPadAngle(datum);
168170
const endAngle = this._getAngleValueEndWithoutPadAngle(datum);
169-
return clamper(
171+
const angle = clamper(
170172
endAngle,
171173
(startAngle + endAngle) / 2
172174
)(endAngle - (endAngle > startAngle ? 1 : -1) * Math.abs(this._padAngle / 2));
175+
return this._spec.clamp ? valueInScaleRange(angle, this.angleAxisHelper.getScale(0)) : angle;
173176
}
174177

175178
protected _getAngleValueStartWithoutPadAngle(datum: Datum) {

packages/vchart/src/series/polar/progress-like/interface.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ export interface IProgressLikeSeriesSpec extends IPolarSeriesSpec {
3333
* @since 1.4.0
3434
*/
3535
tickMask?: Omit<IMarkSpec<IArcMarkSpec>, 'state'> & ITickMaskSpec;
36+
37+
/**
38+
* 超出轴范围是否被裁剪(除tick模式外, 因为tick模式自带裁剪)
39+
* @since 1.13.9
40+
* @default false
41+
*/
42+
clamp?: boolean;
3643
}
3744

3845
export interface IProgressLikeSeriesTheme extends IPolarSeriesTheme {

0 commit comments

Comments
 (0)