diff --git a/Documentation~/en/api.md b/Documentation~/en/api.md
index e939a50c..89e77704 100644
--- a/Documentation~/en/api.md
+++ b/Documentation~/en/api.md
@@ -204,6 +204,7 @@ Inherits or Implemented: [BaseGraph](#basegraph),[ISerializationCallbackReceiver
|CanAddChartComponent()||public bool CanAddChartComponent(Type type)|
|CanAddSerie()||public bool CanAddSerie(Type type)|
|CanAddSerie<T>()||public bool CanAddSerie<T>() where T : Serie|
+|CancelTooltip()|v3.7.0|public void CancelTooltip()
cancel tooltip. |
|CanMultipleComponent()||public bool CanMultipleComponent(Type type)|
|ClampInChart()||public void ClampInChart(ref Vector3 pos)|
|ClampInGrid()||public Vector3 ClampInGrid(GridCoord grid, Vector3 pos)|
@@ -319,6 +320,8 @@ Inherits or Implemented: [BaseGraph](#basegraph),[ISerializationCallbackReceiver
|SetSeriePainterMaterial()||public void SetSeriePainterMaterial(Material material)
设置Serie Painter的材质球 |
|SetTopPainterMaterial()||public void SetTopPainterMaterial(Material material)
设置Top Painter的材质球 |
|SetUpperPainterMaterial()||public void SetUpperPainterMaterial(Material material)
设置Upper Painter的材质球 |
+|TriggerTooltip()|v3.7.0|public bool TriggerTooltip(int dataIndex)
trigger tooltip by data index. |
+|TriggerTooltip()|v3.7.0|public bool TriggerTooltip(Vector3 localPosition)
trigger tooltip by chart local position. |
|TryAddChartComponent()||public bool TryAddChartComponent(Type type)|
|TryAddChartComponent<T>()||public bool TryAddChartComponent<T>() where T : MainComponent|
|TryAddChartComponent<T>()||public bool TryAddChartComponent<T>(out T component) where T : MainComponent|
@@ -355,6 +358,8 @@ Inherits or Implemented: [MaskableGraphic](#maskablegraphic),[IPointerDownHandle
|onPointerUp||public Action<PointerEventData, BaseGraph> onPointerUp
鼠标弹起回调。 |
|onScroll||public Action<PointerEventData, BaseGraph> onScroll
鼠标滚动回调。 |
|CheckWarning()||public string CheckWarning()
检测警告信息。 |
+|LocalPointToScreenPoint()|v3.7.0|public Vector2 LocalPointToScreenPoint(Vector2 localPoint)
chart local point to screen point. |
+|LocalPointToWorldPoint()|v3.7.0|public Vector2 LocalPointToWorldPoint(Vector2 localPoint)
chart local point to world point. |
|OnBeginDrag()||public virtual void OnBeginDrag(PointerEventData eventData)|
|OnDrag()||public virtual void OnDrag(PointerEventData eventData)|
|OnEndDrag()||public virtual void OnEndDrag(PointerEventData eventData)|
diff --git a/Documentation~/zh/api.md b/Documentation~/zh/api.md
index 0b1b60b7..0efaac1a 100644
--- a/Documentation~/zh/api.md
+++ b/Documentation~/zh/api.md
@@ -204,6 +204,7 @@ Inherits or Implemented: [BaseGraph](#basegraph),[ISerializationCallbackReceiver
|CanAddChartComponent()||public bool CanAddChartComponent(Type type)|
|CanAddSerie()||public bool CanAddSerie(Type type)|
|CanAddSerie<T>()||public bool CanAddSerie<T>() where T : Serie|
+|CancelTooltip()|v3.7.0|public void CancelTooltip()
取消Tooltip. |
|CanMultipleComponent()||public bool CanMultipleComponent(Type type)|
|ClampInChart()||public void ClampInChart(ref Vector3 pos)|
|ClampInGrid()||public Vector3 ClampInGrid(GridCoord grid, Vector3 pos)|
@@ -319,6 +320,8 @@ Inherits or Implemented: [BaseGraph](#basegraph),[ISerializationCallbackReceiver
|SetSeriePainterMaterial()||public void SetSeriePainterMaterial(Material material)
设置Serie Painter的材质球 |
|SetTopPainterMaterial()||public void SetTopPainterMaterial(Material material)
设置Top Painter的材质球 |
|SetUpperPainterMaterial()||public void SetUpperPainterMaterial(Material material)
设置Upper Painter的材质球 |
+|TriggerTooltip()|v3.7.0|public bool TriggerTooltip(int dataIndex)
尝试触发指定数据项的Tooltip. |
+|TriggerTooltip()|v3.7.0|public bool TriggerTooltip(Vector3 localPosition)
在指定的位置尝试触发Tooltip. |
|TryAddChartComponent()||public bool TryAddChartComponent(Type type)|
|TryAddChartComponent<T>()||public bool TryAddChartComponent<T>() where T : MainComponent|
|TryAddChartComponent<T>()||public bool TryAddChartComponent<T>(out T component) where T : MainComponent|
@@ -355,6 +358,8 @@ Inherits or Implemented: [MaskableGraphic](#maskablegraphic),[IPointerDownHandle
|onPointerUp||public Action<PointerEventData, BaseGraph> onPointerUp
鼠标弹起回调。 |
|onScroll||public Action<PointerEventData, BaseGraph> onScroll
鼠标滚动回调。 |
|CheckWarning()||public string CheckWarning()
检测警告信息。 |
+|LocalPointToScreenPoint()|v3.7.0|public Vector2 LocalPointToScreenPoint(Vector2 localPoint)
图表内坐标转屏幕坐标。 |
+|LocalPointToWorldPoint()|v3.7.0|public Vector2 LocalPointToWorldPoint(Vector2 localPoint)
图表内坐标转世界坐标。 |
|OnBeginDrag()||public virtual void OnBeginDrag(PointerEventData eventData)|
|OnDrag()||public virtual void OnDrag(PointerEventData eventData)|
|OnEndDrag()||public virtual void OnEndDrag(PointerEventData eventData)|
diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md
index ceed1398..5c3e5963 100644
--- a/Documentation~/zh/changelog.md
+++ b/Documentation~/zh/changelog.md
@@ -66,6 +66,7 @@ slug: /changelog
## master
+* (2023.04.14) 增加`BaseChart`的`TriggerTooltip()`接口尝试触发`ToolTip`
* (2023.04.12) 优化`RadarCood`设置`startAngle`时文本也跟随调整位置
* (2023.04.12) 增加`Radar`对通配符`{b}`的支持
* (2023.04.11) 修复动态添加组件时`Inspector`可能异常的问题
diff --git a/Runtime/Internal/BaseChart.API.cs b/Runtime/Internal/BaseChart.API.cs
index fb8cf4d0..e999614b 100644
--- a/Runtime/Internal/BaseChart.API.cs
+++ b/Runtime/Internal/BaseChart.API.cs
@@ -667,5 +667,64 @@ namespace XCharts.Runtime
SerieHelper.GetItemColor(out color, out toColor, serie, null, m_Theme);
return color;
}
+
+ ///
+ /// trigger tooltip by data index.
+ /// |尝试触发指定数据项的Tooltip.
+ ///
+ /// 数据项索引
+ ///
+ [Since("v3.7.0")]
+ public bool TriggerTooltip(int dataIndex)
+ {
+ var serie = GetSerie(0);
+ if (serie == null) return false;
+ var dataPoints = serie.context.dataPoints;
+ var dataPoint = Vector3.zero;
+ if (dataPoints.Count == 0)
+ {
+ if (serie.dataCount == 0) return false;
+ dataIndex = dataIndex % serie.dataCount;
+ var serieData = serie.GetSerieData(dataIndex);
+ if (serieData == null) return false;
+ dataPoint = serie.GetSerieData(dataIndex).context.position;
+ }
+ else
+ {
+ dataIndex = dataIndex % dataPoints.Count;
+ dataPoint = dataPoints[dataIndex];
+ }
+ return TriggerTooltip(dataPoint);
+ }
+
+ ///
+ /// trigger tooltip by chart local position.
+ /// |在指定的位置尝试触发Tooltip.
+ ///
+ ///
+ ///
+ [Since("v3.7.0")]
+ public bool TriggerTooltip(Vector3 localPosition)
+ {
+ var screenPoint = LocalPointToScreenPoint(localPosition);
+ var eventData = new PointerEventData(EventSystem.current);
+ eventData.position = screenPoint;
+ OnPointerEnter(eventData);
+ return true;
+ }
+
+ ///
+ /// cancel tooltip.
+ /// |取消Tooltip.
+ ///
+ [Since("v3.7.0")]
+ public void CancelTooltip()
+ {
+ var tooltip = GetChartComponent();
+ if (tooltip != null)
+ {
+ tooltip.SetActive(false);
+ }
+ }
}
}
\ No newline at end of file
diff --git a/Runtime/Internal/BaseGraph.API.cs b/Runtime/Internal/BaseGraph.API.cs
index 499c24b1..553249f9 100644
--- a/Runtime/Internal/BaseGraph.API.cs
+++ b/Runtime/Internal/BaseGraph.API.cs
@@ -173,6 +173,32 @@ namespace XCharts.Runtime
return true;
}
+ ///
+ /// chart local point to screen point.
+ /// |图表内坐标转屏幕坐标。
+ ///
+ /// 图表内的坐标
+ /// 屏幕坐标
+ [Since("v3.7.0")]
+ public Vector2 LocalPointToScreenPoint(Vector2 localPoint)
+ {
+ var cam = canvas.renderMode == RenderMode.ScreenSpaceOverlay ? null : canvas.worldCamera;
+ var wordPoint = rectTransform.TransformPoint(localPoint);
+ return RectTransformUtility.WorldToScreenPoint(cam, wordPoint);
+ }
+
+ ///
+ /// chart local point to world point.
+ /// |图表内坐标转世界坐标。
+ ///
+ /// 图表内的坐标
+ /// 世界坐标
+ [Since("v3.7.0")]
+ public Vector2 LocalPointToWorldPoint(Vector2 localPoint)
+ {
+ return rectTransform.TransformPoint(localPoint);
+ }
+
///
/// 保存图表为图片。
///
diff --git a/Runtime/Serie/Pie/PieHandler.cs b/Runtime/Serie/Pie/PieHandler.cs
index 45bf20cf..c568a1e6 100644
--- a/Runtime/Serie/Pie/PieHandler.cs
+++ b/Runtime/Serie/Pie/PieHandler.cs
@@ -233,10 +233,12 @@ namespace XCharts.Runtime
serieData.context.currentAngle = serieData.context.toAngle;
}
var halfDegree = (serieData.context.toAngle - startDegree) / 2;
+ var halfRadius = serie.context.insideRadius + (serieData.context.outsideRadius - serie.context.insideRadius) / 2;
serieData.context.halfAngle = startDegree + halfDegree;
serieData.context.angle = startDegree + halfDegree;
serieData.context.offsetCenter = serie.context.center;
serieData.context.insideRadius = serie.context.insideRadius;
+ serieData.context.position = ChartHelper.GetPosition(serie.context.center, serieData.context.halfAngle, halfRadius);
if (offset > 0)
{
var currRad = serieData.context.halfAngle * Mathf.Deg2Rad;