private void CheckVisualMap(VisualMap visualMap) { if (visualMap == null || !visualMap.enable || !visualMap.show) { return; } Vector2 local; if (chart.canvas == null) { return; } if (!chart.ScreenPointToChartPoint(Input.mousePosition, out local)) { if (visualMap.runtimeSelectedIndex >= 0) { visualMap.runtimeSelectedIndex = -1; chart.RefreshChart(); } return; } if (local.x < chart.chartX || local.x > chart.chartX + chart.chartWidth || local.y < chart.chartY || local.y > chart.chartY + chart.chartHeight || !visualMap.IsInRangeRect(local, chart.chartRect)) { if (visualMap.runtimeSelectedIndex >= 0) { visualMap.runtimeSelectedIndex = -1; chart.RefreshChart(); } return; } var pos1 = Vector3.zero; var pos2 = Vector3.zero; var halfHig = visualMap.itemHeight / 2; var centerPos = chart.chartPosition + visualMap.location.GetPosition(chart.chartWidth, chart.chartHeight); var selectedIndex = -1; double value = 0; switch (visualMap.orient) { case Orient.Horizonal: pos1 = centerPos + Vector3.left * halfHig; pos2 = centerPos + Vector3.right * halfHig; value = visualMap.min + (local.x - pos1.x) / (pos2.x - pos1.x) * (visualMap.max - visualMap.min); selectedIndex = visualMap.GetIndex(value); break; case Orient.Vertical: pos1 = centerPos + Vector3.down * halfHig; pos2 = centerPos + Vector3.up * halfHig; value = visualMap.min + (local.y - pos1.y) / (pos2.y - pos1.y) * (visualMap.max - visualMap.min); selectedIndex = visualMap.GetIndex(value); break; } visualMap.runtimeSelectedValue = value; visualMap.runtimeSelectedIndex = selectedIndex; chart.RefreshChart(); }