Example #1
0
        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();
        }