Compare commits

..

13 Commits
v2.8.0 ... 2.0

Author SHA1 Message Date
monitor1394
1d2f83169d 修复Pie只有一个数据时设置border后显示异常的问题 (#237) 2022-12-28 18:17:00 +08:00
monitor1394
a7c4e24555 [bug][datazoom] fix datazoom range error (#221) 2022-08-30 08:10:18 +08:00
monitor1394
6fad4fcccc update to Unity2019.4.39f1 2022-08-16 06:54:04 +08:00
monitor1394
95e40c6f1a v2.8.2 2022-08-15 22:12:44 +08:00
monitor1394
8e30a370b5 support tooltip formatter for HeatmapChart 2022-08-15 22:11:36 +08:00
monitor1394
d94e304058 v2.8.2 2022-07-13 21:45:54 +08:00
monitor1394
34dc49004e fix serielabel refresh exception (#215) 2022-07-13 21:45:09 +08:00
monitor1394
61c6d68c4c set tooltip on heighest layer 2022-06-30 13:38:46 +08:00
monitor1394
50a666fecc v2.8.1 2022-05-06 08:20:32 +08:00
monitor1394
626a187758 v2.8.1 2022-05-06 08:16:48 +08:00
monitor1394
dee06f8d6f add delegate callback function for legend 2022-05-03 22:30:51 +08:00
monitor1394
e6eea34a45 fix ring tooltip bug #192 2022-04-21 22:07:30 +08:00
monitor1394
76b8146e53 fix datazoom exception 2022-04-21 22:07:07 +08:00
16 changed files with 179 additions and 77 deletions

View File

@@ -2,6 +2,8 @@
# 更新日志 # 更新日志
[branch-2.0](#branch-2.0) [branch-2.0](#branch-2.0)
[v2.8.2](#v2.8.2)
[v2.8.1](#v2.8.1)
[v2.8.0](#v2.8.0) [v2.8.0](#v2.8.0)
[v2.7.0](#v2.7.0) [v2.7.0](#v2.7.0)
[v2.6.0](#v2.6.0) [v2.6.0](#v2.6.0)
@@ -44,6 +46,19 @@
## branch-2.0 ## branch-2.0
## v2.8.2
* (2022.08.15) Release `v2.8.2` version
* (2022.08.15) Added support for the `HeatmapChart` formatter for custom Tooltip
* (2022.07.13) Fixed `SerieLabel` refresh exception #215
* (2022.06.30) Optimize `Radar` so that the `Tooltip` layer is above `Indicator`
## v2.8.1
* (2022.05.03) Added `onLegendClick`, `onLegendEnter` and `onLegendExit` delegate callbacks for `Legend`
* (2022.04.21) Fixed bug #192 with `RingChart` `Tooltip` exception
* (2022.04.21) Fixed error when setting `minShowNum` in `DataZoom`
## v2.8.0 ## v2.8.0
* (2022.04.10) Added the debug information panel * (2022.04.10) Added the debug information panel

View File

@@ -2,6 +2,8 @@
# 更新日志 # 更新日志
[branch-2.0](#branch-2.0) [branch-2.0](#branch-2.0)
[v2.8.2](#v2.8.2)
[v2.8.1](#v2.8.1)
[v2.8.0](#v2.8.0) [v2.8.0](#v2.8.0)
[v2.7.0](#v2.7.0) [v2.7.0](#v2.7.0)
[v2.6.0](#v2.6.0) [v2.6.0](#v2.6.0)
@@ -44,6 +46,23 @@
## branch-2.0 ## branch-2.0
* (2022.12.28) 修复`Pie`只有一个数据时设置`border`后显示异常的问题 (#237)
* (2022.08.30) 修复`DataZoom`在某些情况下计算范围不准确的问题 (#221)
## v2.8.2
* (2022.08.15) 发布`v2.8.2`版本
* (2022.08.15) 增加`HeatmapChart`对自定义`Tooltip``formatter`的支持
* (2022.07.13) 修复`SerieLabel`刷新异常的问题 #215
* (2022.06.30) 优化`Radar``Tooltip`的层在`Indicator`之上
## v2.8.1
* (2022.05.06) 发布`v2.8.1`版本
* (2022.05.03) 增加`Legend``onLegendClick`,`onLegendEnter``onLegendExit`委托回调
* (2022.04.21) 修复`RingChart``Tooltip`异常的问题 #192
* (2022.04.21) 修复`DataZoom`设置`minShowNum`时可能会报错的问题
## v2.8.0 ## v2.8.0
* (2022.04.10) 发布`v2.8.0`版本 * (2022.04.10) 发布`v2.8.0`版本

View File

@@ -132,7 +132,21 @@ namespace XCharts
/// 点击饼图区域回调。参数PointerEventDataSerieIndexSerieDataIndex /// 点击饼图区域回调。参数PointerEventDataSerieIndexSerieDataIndex
/// </summary> /// </summary>
public Action<PointerEventData, int, int> onPointerClickPie { set { m_OnPointerClickPie = value; m_ForceOpenRaycastTarget = true; } get { return m_OnPointerClickPie; } } public Action<PointerEventData, int, int> onPointerClickPie { set { m_OnPointerClickPie = value; m_ForceOpenRaycastTarget = true; } get { return m_OnPointerClickPie; } }
/// <summary>
/// the callback function of click legend.
/// 点击图例按钮回调。参数legendIndex, legendName, show
/// </summary>
public Action<int, string, bool> onLegendClick { set { m_OnLegendClick = value; } }
/// <summary>
/// the callback function of enter legend.
/// 鼠标进入图例回调。参数legendIndex, legendName
/// </summary>
public Action<int, string> onLegendEnter { set { m_OnLegendEnter = value; } }
/// <summary>
/// the callback function of exit legend.
/// 鼠标退出图例回调。参数legendIndex, legendName
/// </summary>
public Action<int, string> onLegendExit { set { m_OnLegendExit = value; } }
/// <summary> /// <summary>
/// Redraw chart in next frame. /// Redraw chart in next frame.
/// 在下一帧刷新图表。 /// 在下一帧刷新图表。

View File

@@ -712,13 +712,13 @@ namespace XCharts
int start = 0, end = 0; int start = 0, end = 0;
if (dataZoom.runtimeInvert) if (dataZoom.runtimeInvert)
{ {
end = Mathf.CeilToInt(data.Count * dataZoom.end / 100); end = Mathf.RoundToInt(data.Count * dataZoom.end / 100);
start = end - range; start = end - range;
if (start < 0) start = 0; if (start < 0) start = 0;
} }
else else
{ {
start = Mathf.FloorToInt(data.Count * dataZoom.start / 100); start = Mathf.RoundToInt(data.Count * dataZoom.start / 100);
end = start + range; end = start + range;
if (end > data.Count) end = data.Count; if (end > data.Count) end = data.Count;
} }
@@ -728,13 +728,15 @@ namespace XCharts
filterEnd = end; filterEnd = end;
filterMinShow = dataZoom.minShowNum; filterMinShow = dataZoom.minShowNum;
m_NeedUpdateFilterData = false; m_NeedUpdateFilterData = false;
if (data.Count > 0) if (data.Count > 0 && filterMinShow < data.Count)
{ {
if (range < dataZoom.minShowNum) if (range < filterMinShow)
{ {
if (dataZoom.minShowNum > data.Count) range = data.Count; if (filterMinShow > data.Count) range = data.Count;
else range = dataZoom.minShowNum; else range = filterMinShow;
} }
if (range > data.Count - start)
start = data.Count - range;
filterData = data.GetRange(start, range); filterData = data.GetRange(start, range);
} }
else else

View File

@@ -35,8 +35,8 @@ namespace XCharts
m_YAxes[0].splitNumber = 10; m_YAxes[0].splitNumber = 10;
RemoveData(); RemoveData();
var heatmapGridWid = 10f; var heatmapGridWid = 10f;
int xSplitNumber = (int)(grid.runtimeWidth / heatmapGridWid); int xSplitNumber = (int) (grid.runtimeWidth / heatmapGridWid);
int ySplitNumber = (int)(grid.runtimeHeight / heatmapGridWid); int ySplitNumber = (int) (grid.runtimeHeight / heatmapGridWid);
SerieTemplate.AddDefaultHeatmapSerie(this, "serie1"); SerieTemplate.AddDefaultHeatmapSerie(this, "serie1");
@@ -49,8 +49,20 @@ namespace XCharts
visualMap.location.align = Location.Align.BottomLeft; visualMap.location.align = Location.Align.BottomLeft;
visualMap.location.bottom = 100; visualMap.location.bottom = 100;
visualMap.location.left = 30; visualMap.location.left = 30;
var colors = new List<string>{"#313695", "#4575b4", "#74add1", "#abd9e9", "#e0f3f8", "#ffffbf", var colors = new List<string>
"#fee090", "#fdae61", "#f46d43", "#d73027", "#a50026"}; {
"#313695",
"#4575b4",
"#74add1",
"#abd9e9",
"#e0f3f8",
"#ffffbf",
"#fee090",
"#fdae61",
"#f46d43",
"#d73027",
"#a50026"
};
visualMap.inRange.Clear(); visualMap.inRange.Clear();
foreach (var str in colors) foreach (var str in colors)
{ {
@@ -80,11 +92,27 @@ namespace XCharts
#endif #endif
protected override void UpdateTooltip() protected override void UpdateTooltip()
{
var dataIndex = GetDataIndex();
if (dataIndex < 0) return;
var content = TooltipHelper.GetFormatterContent(tooltip, dataIndex, this);
TooltipHelper.SetContentAndPosition(tooltip, content, chartRect);
tooltip.SetActive(true);
for (int i = 0; i < m_XAxes.Count; i++)
{
UpdateAxisTooltipLabel(i, m_XAxes[i]);
}
for (int i = 0; i < m_YAxes.Count; i++)
{
UpdateAxisTooltipLabel(i, m_YAxes[i]);
}
}
private int GetDataIndex()
{ {
var xData = tooltip.runtimeXValues[0]; var xData = tooltip.runtimeXValues[0];
var yData = tooltip.runtimeYValues[0]; var yData = tooltip.runtimeYValues[0];
if (IsCategory() && (xData < 0 || yData < 0)) return; if (IsCategory() && (xData < 0 || yData < 0)) return -1;
sb.Length = 0;
for (int i = 0; i < m_Series.Count; i++) for (int i = 0; i < m_Series.Count; i++)
{ {
var serie = m_Series.GetSerie(i); var serie = m_Series.GetSerie(i);
@@ -96,30 +124,11 @@ namespace XCharts
{ {
if (IsCategory()) if (IsCategory())
{ {
string key = serie.name; return (int) xData * yCount + (int) yData;
var serieData = serie.data[(int)xData * yCount + (int)yData];
var value = serieData.data[2];
var color = visualMap.enable ? visualMap.GetColor(value) :
m_Theme.GetColor(serie.index);
sb.Append("\n")
.Append(key).Append(!string.IsNullOrEmpty(key) ? "\n" : "")
.Append("<color=#").Append(ChartCached.ColorToStr(color)).Append(">● </color>")
.Append(xAxis.data[(int)xData]).Append(": ")
.Append(ChartCached.FloatToStr(value, string.Empty));
} }
} }
} }
TooltipHelper.SetContentAndPosition(tooltip, sb.ToString().Trim(), chartRect); return -1;
tooltip.SetActive(true);
for (int i = 0; i < m_XAxes.Count; i++)
{
UpdateAxisTooltipLabel(i, m_XAxes[i]);
}
for (int i = 0; i < m_YAxes.Count; i++)
{
UpdateAxisTooltipLabel(i, m_YAxes[i]);
}
} }
} }
} }

View File

@@ -642,13 +642,13 @@ namespace XCharts
int start = 0, end = 0; int start = 0, end = 0;
if (dataZoom.runtimeInvert) if (dataZoom.runtimeInvert)
{ {
end = Mathf.CeilToInt(data.Count * dataZoom.end / 100); end = Mathf.RoundToInt(data.Count * dataZoom.end / 100);
start = end - range; start = end - range;
if (start < 0) start = 0; if (start < 0) start = 0;
} }
else else
{ {
start = Mathf.FloorToInt(data.Count * dataZoom.start / 100); start = Mathf.RoundToInt(data.Count * dataZoom.start / 100);
end = start + range; end = start + range;
if (end > data.Count) end = data.Count; if (end > data.Count) end = data.Count;
} }
@@ -666,6 +666,8 @@ namespace XCharts
if (dataZoom.minShowNum > data.Count) range = data.Count; if (dataZoom.minShowNum > data.Count) range = data.Count;
else range = dataZoom.minShowNum; else range = dataZoom.minShowNum;
} }
if (range > data.Count - start)
start = data.Count - range;
serie.m_FilterData = data.GetRange(start, range); serie.m_FilterData = data.GetRange(start, range);
} }
else else

View File

@@ -33,7 +33,7 @@ namespace XCharts
if (!string.IsNullOrEmpty(serieData.name)) if (!string.IsNullOrEmpty(serieData.name))
sb.Append(serieData.name).Append(": "); sb.Append(serieData.name).Append(": ");
sb.AppendFormat("({0},{1})", ChartCached.FloatToStr(xValue, numericFormatter), sb.AppendFormat("({0},{1})", ChartCached.FloatToStr(xValue, numericFormatter),
ChartCached.FloatToStr(yValue, numericFormatter)); ChartCached.FloatToStr(yValue, numericFormatter));
if (i != dataIndexList.Count - 1) if (i != dataIndexList.Count - 1)
{ {
sb.Append("\n"); sb.Append("\n");
@@ -41,7 +41,6 @@ namespace XCharts
} }
} }
private static void InitPieTooltip(ref StringBuilder sb, Tooltip tooltip, Serie serie, int index, private static void InitPieTooltip(ref StringBuilder sb, Tooltip tooltip, Serie serie, int index,
ChartTheme theme) ChartTheme theme)
{ {
@@ -72,7 +71,7 @@ namespace XCharts
if (!string.IsNullOrEmpty(serieData.name)) if (!string.IsNullOrEmpty(serieData.name))
{ {
sb.Append("<color=#").Append(theme.GetColorStr(index)).Append(">● </color>") sb.Append("<color=#").Append(theme.GetColorStr(index)).Append(">● </color>")
.Append(serieData.name).Append(": ").Append(ChartCached.FloatToStr(value, numericFormatter)); .Append(serieData.name).Append(": ").Append(ChartCached.FloatToStr(value, numericFormatter));
} }
else else
{ {
@@ -196,7 +195,7 @@ namespace XCharts
double xValue, yValue; double xValue, yValue;
serie.GetXYData(index, dataZoom, out xValue, out yValue); serie.GetXYData(index, dataZoom, out xValue, out yValue);
var isIngore = serie.IsIgnorePoint(index); var isIngore = serie.IsIgnorePoint(index);
if(isIngore) return; if (isIngore) return;
var serieData = serie.GetSerieData(index, dataZoom); var serieData = serie.GetSerieData(index, dataZoom);
var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData); var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData);
if (isCartesian) if (isCartesian)
@@ -234,6 +233,35 @@ namespace XCharts
} }
} }
private static void InitHeatmapTooltip(ref StringBuilder sb, Tooltip tooltip, Serie serie, int index,
CoordinateChart chart)
{
if (serie.type != SerieType.Heatmap) return;
var xData = tooltip.runtimeXValues[0];
var yData = tooltip.runtimeYValues[0];
if (chart.IsCategory() && (xData < 0 || yData < 0)) return;
sb.Length = 0;
var xAxis = chart.GetXAxis(serie.xAxisIndex);
var yAxis = chart.GetYAxis(serie.yAxisIndex);
var xCount = xAxis.data.Count;
var yCount = yAxis.data.Count;
var visualMap = chart.visualMap;
if (chart.IsCategory())
{
string key = serie.name;
var serieData = serie.data[(int) xData * yCount + (int) yData];
var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData);
var value = serieData.data[2];
var color = visualMap.enable ? visualMap.GetColor(value) :
chart.theme.GetColor(serie.index);
sb.Append("\n")
.Append(key).Append(!string.IsNullOrEmpty(key) ? "\n" : "")
.Append("<color=#").Append(ChartCached.ColorToStr(color)).Append(">● </color>")
.Append(xAxis.data[(int) xData]).Append(": ")
.Append(ChartCached.FloatToStr(value, numericFormatter));
}
}
private static void InitDefaultContent(ref StringBuilder sb, Tooltip tooltip, Serie serie, int index, private static void InitDefaultContent(ref StringBuilder sb, Tooltip tooltip, Serie serie, int index,
BaseChart chart, DataZoom dataZoom = null, bool isCartesian = false, BaseChart chart, DataZoom dataZoom = null, bool isCartesian = false,
Radar radar = null) Radar radar = null)
@@ -259,6 +287,7 @@ namespace XCharts
InitRingTooltip(ref sb, tooltip, serie, index, chart.theme); InitRingTooltip(ref sb, tooltip, serie, index, chart.theme);
break; break;
case SerieType.Heatmap: case SerieType.Heatmap:
InitHeatmapTooltip(ref sb, tooltip, serie, index, chart as CoordinateChart);
break; break;
case SerieType.Gauge: case SerieType.Gauge:
InitGaugeTooltip(ref sb, tooltip, serie, index, chart.theme); InitGaugeTooltip(ref sb, tooltip, serie, index, chart.theme);
@@ -335,8 +364,8 @@ namespace XCharts
{ {
string content = itemFormatter; string content = itemFormatter;
FormatterHelper.ReplaceContent(ref content, dataIndex, tooltip.numericFormatter, serie, chart, null); FormatterHelper.ReplaceContent(ref content, dataIndex, tooltip.numericFormatter, serie, chart, null);
var dotColorIndex = serie.type == SerieType.Pie || serie.type == SerieType.Radar var dotColorIndex = serie.type == SerieType.Pie || serie.type == SerieType.Radar ||
|| serie.type == SerieType.Ring ? dataIndex : serie.index; serie.type == SerieType.Ring ? dataIndex : serie.index;
sb.Append(ChartCached.ColorToDotStr(chart.theme.GetColor(dotColorIndex))); sb.Append(ChartCached.ColorToDotStr(chart.theme.GetColor(dotColorIndex)));
sb.Append(content); sb.Append(content);
} }
@@ -449,8 +478,8 @@ namespace XCharts
string content = itemFormatter; string content = itemFormatter;
FormatterHelper.ReplaceContent(ref content, dataIndex, tooltip.numericFormatter, serie, chart, dataZoom); FormatterHelper.ReplaceContent(ref content, dataIndex, tooltip.numericFormatter, serie, chart, dataZoom);
if (!first) sb.Append(FormatterHelper.PH_NN); if (!first) sb.Append(FormatterHelper.PH_NN);
var dotColorIndex = serie.type == SerieType.Pie || serie.type == SerieType.Radar var dotColorIndex = serie.type == SerieType.Pie || serie.type == SerieType.Radar ||
|| serie.type == SerieType.Ring ? dataIndex : i; serie.type == SerieType.Ring ? dataIndex : i;
sb.Append(ChartCached.ColorToDotStr(chart.theme.GetColor(dotColorIndex))); sb.Append(ChartCached.ColorToDotStr(chart.theme.GetColor(dotColorIndex)));
sb.Append(content); sb.Append(content);
first = false; first = false;

View File

@@ -74,6 +74,9 @@ namespace XCharts
protected Action<VertexHelper, Serie> m_OnCustomDrawSerieBeforeCallback; protected Action<VertexHelper, Serie> m_OnCustomDrawSerieBeforeCallback;
protected Action<VertexHelper, Serie> m_OnCustomDrawSerieAfterCallback; protected Action<VertexHelper, Serie> m_OnCustomDrawSerieAfterCallback;
protected Action<PointerEventData, int, int> m_OnPointerClickPie; protected Action<PointerEventData, int, int> m_OnPointerClickPie;
protected Action<int, string, bool> m_OnLegendClick;
protected Action<int, string> m_OnLegendEnter;
protected Action<int, string> m_OnLegendExit;
protected bool m_RefreshLabel = false; protected bool m_RefreshLabel = false;
internal bool m_ReinitLabel = false; internal bool m_ReinitLabel = false;
@@ -525,12 +528,12 @@ namespace XCharts
m_ChartMaxAnchor, m_ChartPivot, m_ChartSizeDelta); m_ChartMaxAnchor, m_ChartPivot, m_ChartSizeDelta);
m_SerieLabelRoot.hideFlags = chartHideFlags; m_SerieLabelRoot.hideFlags = chartHideFlags;
SerieLabelPool.ReleaseAll(m_SerieLabelRoot.transform); SerieLabelPool.ReleaseAll(m_SerieLabelRoot.transform);
int count = 0;
for (int i = 0; i < m_Series.Count; i++) for (int i = 0; i < m_Series.Count; i++)
{ {
var serie = m_Series.list[i]; var serie = m_Series.list[i];
serie.index = i; serie.index = i;
SerieHelper.UpdateCenter(serie, chartPosition, chartWidth, chartHeight); SerieHelper.UpdateCenter(serie, chartPosition, chartWidth, chartHeight);
int count = 0;
for (int j = 0; j < serie.data.Count; j++) for (int j = 0; j < serie.data.Count; j++)
{ {
var serieData = serie.data[j]; var serieData = serie.data[j];
@@ -847,6 +850,8 @@ namespace XCharts
} }
OnYMaxValueChanged(); OnYMaxValueChanged();
} }
if(m_OnLegendClick != null)
m_OnLegendClick(index, legendName, show);
} }
protected virtual void OnLegendButtonEnter(int index, string legendName) protected virtual void OnLegendButtonEnter(int index, string legendName)
@@ -862,6 +867,8 @@ namespace XCharts
RefreshPainter(serie); RefreshPainter(serie);
} }
} }
if(m_OnLegendEnter != null)
m_OnLegendEnter(index, legendName);
} }
protected virtual void OnLegendButtonExit(int index, string legendName) protected virtual void OnLegendButtonExit(int index, string legendName)
@@ -877,6 +884,8 @@ namespace XCharts
RefreshPainter(serie); RefreshPainter(serie);
} }
} }
if(m_OnLegendExit != null)
m_OnLegendExit(index, legendName);
} }
protected virtual void UpdateTooltip() protected virtual void UpdateTooltip()

View File

@@ -266,6 +266,8 @@ namespace XCharts
var offset = new Vector3(textStyle.offset.x, textStyle.offset.y); var offset = new Vector3(textStyle.offset.x, textStyle.offset.y);
AxisHelper.AdjustCircleLabelPos(txt, pos, radar.runtimeCenterPos, txtHig, offset); AxisHelper.AdjustCircleLabelPos(txt, pos, radar.runtimeCenterPos, txtHig, offset);
} }
if(chart.tooltip.gameObject != null)
chart.tooltip.gameObject.transform.SetSiblingIndex(chart.transform.childCount-1);
chart.RefreshBasePainter(); chart.RefreshBasePainter();
}; };
radar.refreshComponent.Invoke(); radar.refreshComponent.Invoke();
@@ -482,7 +484,7 @@ namespace XCharts
} }
else if (!serieNameSet.ContainsKey(dataName)) else if (!serieNameSet.ContainsKey(dataName))
{ {
serieNameCount++; serieNameCount++;
serieNameSet.Add(dataName, serieNameCount); serieNameSet.Add(dataName, serieNameCount);
serieIndex = serieNameCount; serieIndex = serieNameCount;
} }

View File

@@ -136,7 +136,6 @@ namespace XCharts
public bool CheckTootipArea(Vector2 local) public bool CheckTootipArea(Vector2 local)
{ {
if (!chart.series.Contains(SerieType.Ring)) return false; if (!chart.series.Contains(SerieType.Ring)) return false;
if (!PointerIsInRingSerie(chart.series, local)) return false;
if (m_IsEnterLegendButtom) return false; if (m_IsEnterLegendButtom) return false;
bool selected = false; bool selected = false;
chart.tooltip.runtimeDataIndex.Clear(); chart.tooltip.runtimeDataIndex.Clear();

View File

@@ -33,8 +33,8 @@ namespace XCharts
[ExecuteInEditMode] [ExecuteInEditMode]
public class XChartsMgr : MonoBehaviour public class XChartsMgr : MonoBehaviour
{ {
internal static string _version = "2.8.0"; internal static string _version = "2.8.2";
internal static int _versionDate = 20220410; internal static int _versionDate = 20220815;
public static string version { get { return _version; } } public static string version { get { return _version; } }
public static int versionDate { get { return _versionDate; } } public static int versionDate { get { return _versionDate; } }
public static string fullVersion { get { return version + "-" + versionDate; } } public static string fullVersion { get { return version + "-" + versionDate; } }

View File

@@ -34,7 +34,7 @@ namespace XUGL
/// <param name="dent">箭头凹度</param> /// <param name="dent">箭头凹度</param>
/// <param name="color">颜色</param> /// <param name="color">颜色</param>
public static void DrawArrow(VertexHelper vh, Vector3 startPoint, Vector3 arrowPoint, float width, public static void DrawArrow(VertexHelper vh, Vector3 startPoint, Vector3 arrowPoint, float width,
float height, float offset, float dent, Color32 color) float height, float offset, float dent, Color32 color)
{ {
var dir = (arrowPoint - startPoint).normalized; var dir = (arrowPoint - startPoint).normalized;
var sharpPos = arrowPoint + (offset + height / 4) * dir; var sharpPos = arrowPoint + (offset + height / 4) * dir;
@@ -435,7 +435,7 @@ namespace XUGL
/// <param name="color">颜色</param> /// <param name="color">颜色</param>
/// <param name="vertical">是否垂直方向</param> /// <param name="vertical">是否垂直方向</param>
public static void DrawRectangle(VertexHelper vh, Vector3 p, float xRadius, float yRadius, public static void DrawRectangle(VertexHelper vh, Vector3 p, float xRadius, float yRadius,
Color32 color, bool vertical = true) Color32 color, bool vertical = true)
{ {
DrawRectangle(vh, p, xRadius, yRadius, color, color, vertical); DrawRectangle(vh, p, xRadius, yRadius, color, color, vertical);
} }
@@ -1063,7 +1063,7 @@ namespace XUGL
} }
public static void DrawTriangle(VertexHelper vh, Vector3 p1, public static void DrawTriangle(VertexHelper vh, Vector3 p1,
Vector3 p2, Vector3 p3, Color32 color, Color32 color2, Color32 color3) Vector3 p2, Vector3 p3, Color32 color, Color32 color2, Color32 color3)
{ {
UIVertex v1 = new UIVertex(); UIVertex v1 = new UIVertex();
v1.position = p1; v1.position = p1;
@@ -1091,7 +1091,7 @@ namespace XUGL
} }
public static void DrawCricle(VertexHelper vh, Vector3 center, float radius, Color32 color, public static void DrawCricle(VertexHelper vh, Vector3 center, float radius, Color32 color,
Color32 toColor, float smoothness = 2f) Color32 toColor, float smoothness = 2f)
{ {
DrawSector(vh, center, radius, color, toColor, 0, 360, 0, s_ClearColor32, smoothness); DrawSector(vh, center, radius, color, toColor, 0, 360, 0, s_ClearColor32, smoothness);
} }
@@ -1138,13 +1138,13 @@ namespace XUGL
} }
public static void DrawSector(VertexHelper vh, Vector3 center, float radius, Color32 color, public static void DrawSector(VertexHelper vh, Vector3 center, float radius, Color32 color,
float startDegree, float toDegree, float smoothness = 2f) float startDegree, float toDegree, float smoothness = 2f)
{ {
DrawSector(vh, center, radius, color, color, startDegree, toDegree, 0, s_ClearColor32, smoothness); DrawSector(vh, center, radius, color, color, startDegree, toDegree, 0, s_ClearColor32, smoothness);
} }
public static void DrawSector(VertexHelper vh, Vector3 center, float radius, Color32 color, Color32 toColor, public static void DrawSector(VertexHelper vh, Vector3 center, float radius, Color32 color, Color32 toColor,
float startDegree, float toDegree, int gradientType = 0, bool isYAxis = false, float smoothness = 2f) float startDegree, float toDegree, int gradientType = 0, bool isYAxis = false, float smoothness = 2f)
{ {
DrawSector(vh, center, radius, color, toColor, startDegree, toDegree, 0, s_ClearColor32, 0, smoothness, DrawSector(vh, center, radius, color, toColor, startDegree, toDegree, 0, s_ClearColor32, 0, smoothness,
gradientType, isYAxis); gradientType, isYAxis);
@@ -1183,10 +1183,11 @@ namespace XUGL
float smoothness, int gradientType = 0, bool isYAxis = false) float smoothness, int gradientType = 0, bool isYAxis = false)
{ {
if (radius == 0) return; if (radius == 0) return;
if (space > 0 && Mathf.Abs(toDegree - startDegree) >= 360) space = 0; var isCircle = Mathf.Abs(toDegree - startDegree) >= 360;
if (space > 0 && isCircle) space = 0;
radius -= borderWidth; radius -= borderWidth;
smoothness = (smoothness < 0 ? 2f : smoothness); smoothness = (smoothness < 0 ? 2f : smoothness);
int segments = (int)((2 * Mathf.PI * radius) * (Mathf.Abs(toDegree - startDegree) / 360) / smoothness); int segments = (int) ((2 * Mathf.PI * radius) * (Mathf.Abs(toDegree - startDegree) / 360) / smoothness);
if (segments < 1) segments = 1; if (segments < 1) segments = 1;
float startAngle = startDegree * Mathf.Deg2Rad; float startAngle = startDegree * Mathf.Deg2Rad;
float toAngle = toDegree * Mathf.Deg2Rad; float toAngle = toDegree * Mathf.Deg2Rad;
@@ -1223,7 +1224,7 @@ namespace XUGL
if (realToAngle < realStartAngle) realToAngle = realStartAngle; if (realToAngle < realStartAngle) realToAngle = realStartAngle;
p2 = UGLHelper.GetPos(center, radius, realStartAngle); p2 = UGLHelper.GetPos(center, radius, realStartAngle);
} }
if (needBorder) if (needBorder && !isCircle)
{ {
borderDiff = borderLineWidth / Mathf.Sin(halfAngle); borderDiff = borderLineWidth / Mathf.Sin(halfAngle);
realCenter += borderDiff * middleDire; realCenter += borderDiff * middleDire;
@@ -1259,9 +1260,9 @@ namespace XUGL
{ {
p4 = new Vector3(p3.x, realCenter.y); p4 = new Vector3(p3.x, realCenter.y);
var dist = p4.x - realCenter.x; var dist = p4.x - realCenter.x;
var tcolor = Color32.Lerp(color, toColor, dist >= 0 var tcolor = Color32.Lerp(color, toColor, dist >= 0 ?
? dist / radius dist / radius :
: Mathf.Min(radius + dist, radius) / radius); Mathf.Min(radius + dist, radius) / radius);
if (isLeft && (i == segments || i == 0)) tcolor = toColor; if (isLeft && (i == segments || i == 0)) tcolor = toColor;
DrawQuadrilateral(vh, lastP4, p2, p3, p4, lastColor, tcolor); DrawQuadrilateral(vh, lastP4, p2, p3, p4, lastColor, tcolor);
lastP4 = p4; lastP4 = p4;
@@ -1374,11 +1375,12 @@ namespace XUGL
insideRadius += borderWidth; insideRadius += borderWidth;
smoothness = smoothness < 0 ? 2f : smoothness; smoothness = smoothness < 0 ? 2f : smoothness;
Vector3 p1, p2, p3, p4, e1, e2; Vector3 p1, p2, p3, p4, e1, e2;
var isCircle = Mathf.Abs(toDegree - startDegree) >= 360;
var needBorder = borderWidth != 0; var needBorder = borderWidth != 0;
var needSpace = space != 0; var needSpace = space != 0;
var diffAngle = Mathf.Abs(toDegree - startDegree) * Mathf.Deg2Rad; var diffAngle = Mathf.Abs(toDegree - startDegree) * Mathf.Deg2Rad;
int segments = (int)((2 * Mathf.PI * outsideRadius) * (diffAngle * Mathf.Rad2Deg / 360) / smoothness); int segments = (int) ((2 * Mathf.PI * outsideRadius) * (diffAngle * Mathf.Rad2Deg / 360) / smoothness);
if (segments < 1) segments = 1; if (segments < 1) segments = 1;
float startAngle = startDegree * Mathf.Deg2Rad; float startAngle = startDegree * Mathf.Deg2Rad;
float toAngle = toDegree * Mathf.Deg2Rad; float toAngle = toDegree * Mathf.Deg2Rad;
@@ -1441,7 +1443,7 @@ namespace XUGL
p2 = UGLHelper.GetPos(center, outsideRadius, realStartOutAngle, false); p2 = UGLHelper.GetPos(center, outsideRadius, realStartOutAngle, false);
e2 = UGLHelper.GetPos(center, outsideRadius, realToOutAngle, false); e2 = UGLHelper.GetPos(center, outsideRadius, realToOutAngle, false);
} }
if (needBorder) if (needBorder && !isCircle)
{ {
var borderDiff = borderWidth / Mathf.Sin(halfAngle); var borderDiff = borderWidth / Mathf.Sin(halfAngle);
realCenter += Mathf.Abs(borderDiff) * middleDire; realCenter += Mathf.Abs(borderDiff) * middleDire;
@@ -1624,7 +1626,7 @@ namespace XUGL
float lineWidth, Color32 lineColor, float smoothness) float lineWidth, Color32 lineColor, float smoothness)
{ {
var dist = Vector3.Distance(sp, ep); var dist = Vector3.Distance(sp, ep);
var segment = (int)(dist / (smoothness <= 0 ? 2f : smoothness)); var segment = (int) (dist / (smoothness <= 0 ? 2f : smoothness));
UGLHelper.GetBezierList2(ref s_CurvesPosList, sp, ep, segment, cp1, cp2); UGLHelper.GetBezierList2(ref s_CurvesPosList, sp, ep, segment, cp1, cp2);
if (s_CurvesPosList.Count > 1) if (s_CurvesPosList.Count > 1)
{ {
@@ -1648,4 +1650,4 @@ namespace XUGL
} }
} }
} }
} }

View File

@@ -1,9 +1,9 @@
{ {
"name": "com.monitor1394.xcharts", "name": "com.monitor1394.xcharts",
"displayName": "XCharts", "displayName": "XCharts",
"version": "2.8.0", "version": "2.8.2",
"date": "20220410", "date": "20220815",
"checkdate": "20220410", "checkdate": "20220815",
"desc": "如果 XCharts 对您有帮助,希望您能在 Github 上点 Star 支持,非常感谢!", "desc": "如果 XCharts 对您有帮助,希望您能在 Github 上点 Star 支持,非常感谢!",
"unity": "2018.3", "unity": "2018.3",
"description": "A charting and data visualization library for Unity.", "description": "A charting and data visualization library for Unity.",

View File

@@ -1,7 +1,7 @@
{ {
"version": "2.8.0", "version": "2.8.2",
"date": "20220410", "date": "20220815",
"checkdate": "20220410", "checkdate": "20220815",
"desc": "如果 XCharts 对您有帮助,希望您能在 Github 上点 Star 支持,非常感谢!", "desc": "如果 XCharts 对您有帮助,希望您能在 Github 上点 Star 支持,非常感谢!",
"homepage": "https://github.com/monitor1394/unity-ugui-XCharts" "homepage": "https://github.com/monitor1394/unity-ugui-XCharts"
} }

View File

@@ -9,15 +9,15 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 0} m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
m_Name: m_Name:
m_EditorClassIdentifier: UnityEditor:UnityEditor.PackageManager.UI:PackageManagerProjectSettings m_EditorClassIdentifier:
m_ScopedRegistriesSettingsExpanded: 1 m_ScopedRegistriesSettingsExpanded: 1
oneTimeWarningShown: 0 oneTimeWarningShown: 0
m_Registries: m_Registries:
- m_Id: main - m_Id: main
m_Name: m_Name:
m_Url: https://packages.unity.cn m_Url: https://packages.unity.com
m_Scopes: [] m_Scopes: []
m_IsDefault: 1 m_IsDefault: 1
m_UserSelectedRegistryName: m_UserSelectedRegistryName:

View File

@@ -1,2 +1,2 @@
m_EditorVersion: 2019.4.13f1c1 m_EditorVersion: 2019.4.39f1
m_EditorVersionWithRevision: 2019.4.13f1c1 (ddecf0c37a3b) m_EditorVersionWithRevision: 2019.4.39f1 (78d14dfa024b)