修复Line开启clip时绘制的顶点数可能反而增加的问题

This commit is contained in:
monitor1394
2023-12-25 23:05:06 +08:00
parent cbd527316e
commit 178215d980
8 changed files with 43 additions and 14 deletions

View File

@@ -1443,6 +1443,7 @@ Grid component.
|ContainsX()|v3.7.0|public bool ContainsX(float x)<br/>Whether the given x is in the grid. |
|ContainsY()|v3.7.0|public bool ContainsY(float y)<br/>Whether the given y is in the grid. |
|IsPointerEnter()||public bool IsPointerEnter()<br/>Whether the pointer is in the grid. |
|NotAnyIntersect()|v3.10.0|public bool NotAnyIntersect(Vector3 sp, Vector3 ep)<br/>Determines whether a given line segment will not intersect the Grid boundary at all. |
|UpdateRuntimeData()||public void UpdateRuntimeData(BaseChart chart)|
## GridCoordContext

View File

@@ -1443,6 +1443,7 @@ Drawing grid in rectangular coordinate. Line chart, bar chart, and scatter chart
|ContainsX()|v3.7.0|public bool ContainsX(float x)<br/>给定的x是否在网格内。 |
|ContainsY()|v3.7.0|public bool ContainsY(float y)<br/>给定的y是否在网格内。 |
|IsPointerEnter()||public bool IsPointerEnter()<br/>指针是否在网格内。 |
|NotAnyIntersect()|v3.10.0|public bool NotAnyIntersect(Vector3 sp, Vector3 ep)<br/>判断给定的线段是否与Grid边界是否完全不会相交。 |
|UpdateRuntimeData()||public void UpdateRuntimeData(BaseChart chart)|
## GridCoordContext

View File

@@ -70,6 +70,7 @@ slug: /changelog
## master
* (2023.12.25) 修复`Line`开启`clip`时绘制的顶点数可能反而增加的问题
* (2023.12.22) 修复`Scatter`散点图部分边界数据不显示的问题
* (2023.12.21) 修复`TriggerTooltip()`接口在指定0或最大index时可能无法触发的问题
* (2023.12.19) 修复`Legend``LabelStyle`设置`formatter`后不生效的问题

View File

@@ -45,7 +45,7 @@
![XCharts](Documentation~/zh/img/xcharts.png)
一款基于`UGUI`的功能强大、简单易用的数据可视化图表插件。支持`折线图``柱状图``饼图``雷达图``散点图``热力图``环形图``K线图``极坐标``平行坐标`等十多种内置图表,以及`3D饼图``3D柱图``3D金字塔``漏斗图``仪表盘``水位图``象形柱图``甘特图``矩形树图`扩展图表。
一款基于`UGUI`的功能强大、简单易用的数据可视化图表插件。支持`折线图``柱状图``饼图``雷达图``散点图``热力图``环形图``K线图``极坐标``平行坐标`等十多种内置图表,以及`3D饼图``3D柱图``3D金字塔``漏斗图``仪表盘``水位图``象形柱图``甘特图``矩形树图``桑基图`等多种扩展图表。
[XCharts 官方主页](https://xcharts-team.github.io)
[XCharts 在线示例](https://xcharts-team.github.io/examples)
@@ -59,12 +59,12 @@
## 特性
- __纯代码绘制__图表完全纯代码绘制无需额外的贴图和Shader资源。
- __可视化配置__参数可视化配置效果实时预览支持运行时代码动态修改配置和数据。
- __纯代码绘制__图表纯代码绘制无需额外的贴图和Shader资源。
- __可视化配置__参数可视化配置效果实时预览支持运行时代码动态修改配置和数据。
- __高自由定制__支持从主题和配置参数上任意调整支持代码自定义绘制自定义回调以及自定义实现图表。
- __多内置图表__支持线图、柱状图、饼图、雷达图、散点图、热力图、环形图、K线图、极坐标、平行坐标等多种内置图表。
- __多扩展图表__支持3D柱图、3D饼图、漏斗图、金字塔、仪表盘、水位图、象形柱图、甘特图、矩形树图等多种扩展图表。
- __多扩展组件__支持表格、统计数值等扩展UI组件。
- __多扩展图表__支持3D柱图、3D饼图、漏斗图、金字塔、仪表盘、水位图、象形柱图、甘特图、矩形树图、桑基图等多种扩展图表。
- __多扩展组件__支持表格、统计数值等多种扩展UI组件。
- __多图表组合__支持内置图表的任意组合同一图中可同时显示多个相同或不同类型的图表。
- __多种坐标系__支持直角坐标系、极坐标系、单轴等多种坐标系。
- __丰富的组件__支持标题、图例、提示框、标线、标域、数据区域缩放、视觉映射等常用组件。
@@ -121,7 +121,7 @@
- `XCharts3.0` 不完全兼容 `XCharts2.0` 版本,升级`3.0`时,部分代码和配置可能需要重新调整。建议旧项目可以继续使用`XCharts2.0`,新项目推荐使用`XCharts3.0`
- `XCharts2.0` 进入维护阶段,后续只修复严重`bug`,原则上不再加新功能。
- `XCharts` 理论上支持`Unity 5.6`及以上版本,但由于版本测试有限难免疏漏,发现版本兼容问题可提`Issue`
- `XCharts` 理论上支持`Unity 5.6`及以上版本,但由于版本测试有限难免疏漏,发现问题可提`Issue`
- 本仓库只包含`XCharts`源码,不包含`Demo`示例部分。需要查看`Demo`示例源码请到[XCharts-Demo](https://github.com/XCharts-Team/XCharts-Demo)仓库。也可以在浏览器查看`WebGL`下的运行效果 [在线Demo](https://xcharts-team.github.io/examples/) 。
## 使用
@@ -155,8 +155,8 @@
## Licenses
- [MIT License](https://github.com/XCharts-Team/XCharts/blob/master/LICENSE.md)
- 可免费商用,可二次开发
- 扩展图表和高级功能部分需购买使用授权
- 可免费商用,可二次开发
- 扩展图表和高级功能部分需购买使用授权
## 订阅

View File

@@ -254,6 +254,27 @@ namespace XCharts.Runtime
else if (pos.y > context.y + context.height) pos.y = context.y + context.height;
}
/// <summary>
/// Determines whether a given line segment will not intersect the Grid boundary at all.
/// ||判断给定的线段是否与Grid边界是否完全不会相交。
/// </summary>
/// <param name="sp"></param>
/// <param name="ep"></param>
/// <returns></returns>
[Since("v3.10.0")]
public bool NotAnyIntersect(Vector3 sp, Vector3 ep)
{
if (sp.x < context.x && ep.x < context.x)
return true;
if (sp.x > context.x + context.width && ep.x > context.x + context.width)
return true;
if (sp.y < context.y && ep.y < context.y)
return true;
if (sp.y > context.y + context.height && ep.y > context.y + context.height)
return true;
return false;
}
/// <summary>
/// 给定的线段和Grid边界的交点
/// </summary>

View File

@@ -356,7 +356,7 @@ namespace XCharts.Runtime
serie.animation.InitProgress(serie.context.dataPoints, isY);
VisualMapHelper.AutoSetLineMinMax(visualMap, serie, isY, axis, relativedAxis);
LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, visualMap, lineWidth, isY);
LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, visualMap, lineWidth, isY, m_SerieGrid);
LineHelper.DrawSerieLineArea(vh, serie, lastSerie, chart.theme, visualMap, isY, axis, relativedAxis, m_SerieGrid);
LineHelper.DrawSerieLine(vh, chart.theme, serie, visualMap, m_SerieGrid, axis, relativedAxis, lineWidth);

View File

@@ -470,7 +470,7 @@ namespace XCharts.Runtime
}
internal static void UpdateSerieDrawPoints(Serie serie, Settings setting, ThemeStyle theme, VisualMap visualMap,
float lineWidth, bool isY = false)
float lineWidth, bool isY, GridCoord grid)
{
serie.context.drawPoints.Clear();
var last = Vector3.zero;
@@ -485,12 +485,12 @@ namespace XCharts.Runtime
UpdateStepLineDrawPoints(serie, setting, theme, isY, lineWidth);
break;
default:
UpdateNormalLineDrawPoints(serie, setting, visualMap);
UpdateNormalLineDrawPoints(serie, setting, visualMap, grid);
break;
}
}
private static void UpdateNormalLineDrawPoints(Serie serie, Settings setting, VisualMap visualMap)
private static void UpdateNormalLineDrawPoints(Serie serie, Settings setting, VisualMap visualMap, GridCoord grid)
{
var isVisualMapGradient = VisualMapHelper.IsNeedGradient(visualMap);
if (isVisualMapGradient || serie.clip || (serie.lineStyle.IsNotSolidLine()))
@@ -499,11 +499,16 @@ namespace XCharts.Runtime
if (dataPoints.Count > 1)
{
var sp = dataPoints[0];
var ip = Vector3.zero;
for (int i = 1; i < dataPoints.Count; i++)
{
var ep = dataPoints[i];
var ignore = serie.context.dataIgnores[i];
if (serie.clip && grid.NotAnyIntersect(sp, ep))
{
sp = ep;
continue;
}
var dir = (ep - sp).normalized;
var dist = Vector3.Distance(sp, ep);
var segment = (int)(dist / setting.lineSegmentDistance);

View File

@@ -221,7 +221,7 @@ namespace XCharts.Runtime
serie.animation.InitProgress(serie.context.dataPoints, isY);
LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, null, lineWidth, isY);
LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, null, lineWidth, isY, m_SerieGrid);
LineHelper.DrawSerieLineArea(vh, serie, null, chart.theme, null, isY, axis, relativedAxis, m_SerieGrid);
LineHelper.DrawSerieLine(vh, chart.theme, serie, null, m_SerieGrid, axis, relativedAxis, lineWidth);