增加BaseChartTriggerTooltip()接口尝试触发ToolTip

This commit is contained in:
monitor1394
2023-04-14 13:35:45 +08:00
parent 674d937104
commit 0af76517e1
6 changed files with 98 additions and 0 deletions

View File

@@ -667,5 +667,64 @@ namespace XCharts.Runtime
SerieHelper.GetItemColor(out color, out toColor, serie, null, m_Theme);
return color;
}
/// <summary>
/// trigger tooltip by data index.
/// |尝试触发指定数据项的Tooltip.
/// </summary>
/// <param name="dataIndex">数据项索引</param>
/// <returns></returns>
[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);
}
/// <summary>
/// trigger tooltip by chart local position.
/// |在指定的位置尝试触发Tooltip.
/// </summary>
/// <param name="localPosition"></param>
/// <returns></returns>
[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;
}
/// <summary>
/// cancel tooltip.
/// |取消Tooltip.
/// </summary>
[Since("v3.7.0")]
public void CancelTooltip()
{
var tooltip = GetChartComponent<Tooltip>();
if (tooltip != null)
{
tooltip.SetActive(false);
}
}
}
}

View File

@@ -173,6 +173,32 @@ namespace XCharts.Runtime
return true;
}
/// <summary>
/// chart local point to screen point.
/// |图表内坐标转屏幕坐标。
/// </summary>
/// <param name="localPoint">图表内的坐标</param>
/// <returns>屏幕坐标</returns>
[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);
}
/// <summary>
/// chart local point to world point.
/// |图表内坐标转世界坐标。
/// </summary>
/// <param name="localPoint">图表内的坐标</param>
/// <returns>世界坐标</returns>
[Since("v3.7.0")]
public Vector2 LocalPointToWorldPoint(Vector2 localPoint)
{
return rectTransform.TransformPoint(localPoint);
}
/// <summary>
/// 保存图表为图片。
/// </summary>