缩放时如何避免多边形失真?
How to avoid polygon distortion when zooming?
这里是完整的jsfiddle example
我使用自定义系列并绘制多边形:
data = [
[80.9251933067, 207.9047427038],
[52.8853803102, 337.7443022089],
[25.9926385814, 120.3586150136]
];
我使用 echarts.graphi.clipPointsByRect() (like in this echarts-example) 来确保多边形没有绘制在网格之外。
echarts.graphic.clipPointsByRect(points, {
x: params.coordSys.x,
y: params.coordSys.y,
width: params.coordSys.width,
height: params.coordSys.height
})
最初绘制的多边形是正确的,如下所示:
但是当我放大时,多边形是扭曲的:例如您可以单击图表下方的 zoom part
按钮从 40 放大到 60 - 在这种情况下,我希望看到形状的一部分(如上图中以黄色突出显示) - 但我看到的是这个扭曲的图像:
也许这个函数不适用于这个用例,或者这是一个错误?
这个用例还有其他功能吗?或者有人知道解决方法吗?
更新
版本 4.4.x 包含新的 clip
功能。这样可以很容易地避免失真:
- 在渲染函数中我们不需要裁剪我们的形状:即不需要调用
clipPointsByRect()
- 相反,我们只是在自定义系列上激活
clip
:
新系列定义 clip: 'true'
:
series: [{
type: 'custom',
clip: 'true',
renderItem: renderItem,
data: data
}]
这是更新后的 jsfiddle expample
原版
看来该功能确实没有按预期工作 - 参见 echarts-source code comment:
export function clipPointsByRect(points, rect) {
// FIXME: this way migth be incorrect when grpahic clipped by a corner.
// and when element have border.
我已经为电子图表项目创建了一个问题 #10222
目前的解决方法是使用自定义裁剪函数
例如lineclip supports the Sutherland-Hodgman algorithm 用于多边形裁剪
这是更新后的 jsfiddle-example,放大后显示正确的结果:
这里是完整的jsfiddle example
我使用自定义系列并绘制多边形:
data = [
[80.9251933067, 207.9047427038],
[52.8853803102, 337.7443022089],
[25.9926385814, 120.3586150136]
];
我使用 echarts.graphi.clipPointsByRect() (like in this echarts-example) 来确保多边形没有绘制在网格之外。
echarts.graphic.clipPointsByRect(points, {
x: params.coordSys.x,
y: params.coordSys.y,
width: params.coordSys.width,
height: params.coordSys.height
})
最初绘制的多边形是正确的,如下所示:
但是当我放大时,多边形是扭曲的:例如您可以单击图表下方的 zoom part
按钮从 40 放大到 60 - 在这种情况下,我希望看到形状的一部分(如上图中以黄色突出显示) - 但我看到的是这个扭曲的图像:
也许这个函数不适用于这个用例,或者这是一个错误?
这个用例还有其他功能吗?或者有人知道解决方法吗?
更新
版本 4.4.x 包含新的 clip
功能。这样可以很容易地避免失真:
- 在渲染函数中我们不需要裁剪我们的形状:即不需要调用
clipPointsByRect()
- 相反,我们只是在自定义系列上激活
clip
:
新系列定义 clip: 'true'
:
series: [{
type: 'custom',
clip: 'true',
renderItem: renderItem,
data: data
}]
这是更新后的 jsfiddle expample
原版
看来该功能确实没有按预期工作 - 参见 echarts-source code comment:
export function clipPointsByRect(points, rect) {
// FIXME: this way migth be incorrect when grpahic clipped by a corner.
// and when element have border.
我已经为电子图表项目创建了一个问题 #10222
目前的解决方法是使用自定义裁剪函数
例如lineclip supports the Sutherland-Hodgman algorithm 用于多边形裁剪
这是更新后的 jsfiddle-example,放大后显示正确的结果: