private void DrawXAxisIndicator(VertexHelper vh, Tooltip tooltip, GridCoord grid)
        {
            var xAxes     = chart.GetChartComponents <XAxis>();
            var lineType  = tooltip.lineStyle.GetType(chart.theme.tooltip.lineType);
            var lineWidth = tooltip.lineStyle.GetWidth(chart.theme.tooltip.lineWidth);

            foreach (var component in xAxes)
            {
                var xAxis = component as XAxis;
                if (xAxis.gridIndex == grid.index)
                {
                    if (double.IsInfinity(xAxis.context.pointerValue))
                    {
                        continue;
                    }
                    var   dataZoom   = chart.GetDataZoomOfAxis(xAxis);
                    int   dataCount  = chart.series.Count > 0 ? chart.series[0].GetDataList(dataZoom).Count : 0;
                    float splitWidth = AxisHelper.GetDataWidth(xAxis, grid.context.width, dataCount, dataZoom);
                    switch (tooltip.type)
                    {
                    case Tooltip.Type.Corss:
                    case Tooltip.Type.Line:
                        float pX = grid.context.x;
                        pX += xAxis.IsCategory() ?
                              (float)(xAxis.context.pointerValue * splitWidth + (xAxis.boundaryGap ? splitWidth / 2 : 0)) :
                              xAxis.GetDistance(xAxis.context.axisTooltipValue, grid.context.width);
                        Vector2 sp        = new Vector2(pX, grid.context.y);
                        Vector2 ep        = new Vector2(pX, grid.context.y + grid.context.height);
                        var     lineColor = TooltipHelper.GetLineColor(tooltip, chart.theme);
                        ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, sp, ep, lineColor);
                        if (tooltip.type == Tooltip.Type.Corss)
                        {
                            sp = new Vector2(grid.context.x, chart.pointerPos.y);
                            ep = new Vector2(grid.context.x + grid.context.width, chart.pointerPos.y);
                            ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, sp, ep, lineColor);
                        }
                        break;

                    case Tooltip.Type.Shadow:
                        if (xAxis.IsCategory() && !double.IsInfinity(xAxis.context.pointerValue))
                        {
                            float tooltipSplitWid = splitWidth < 1 ? 1 : splitWidth;
                            pX = (float)(grid.context.x + splitWidth * xAxis.context.pointerValue -
                                         (xAxis.boundaryGap ? 0 : splitWidth / 2));
                            float   pY = grid.context.y + grid.context.height;
                            Vector3 p1 = new Vector3(pX, grid.context.y);
                            Vector3 p2 = new Vector3(pX, pY);
                            Vector3 p3 = new Vector3(pX + tooltipSplitWid, pY);
                            Vector3 p4 = new Vector3(pX + tooltipSplitWid, grid.context.y);
                            UGL.DrawQuadrilateral(vh, p1, p2, p3, p4, chart.theme.tooltip.areaColor);
                        }
                        break;
                    }
                }
            }
        }
        private void DrawPolarIndicator(VertexHelper vh, Tooltip tooltip, PolarCoord m_Polar)
        {
            if (tooltip.context.angle < 0)
            {
                return;
            }
            var theme        = chart.theme;
            var m_AngleAxis  = ComponentHelper.GetAngleAxis(chart.components, m_Polar.index);
            var lineColor    = TooltipHelper.GetLineColor(tooltip, theme);
            var lineType     = tooltip.lineStyle.GetType(theme.tooltip.lineType);
            var lineWidth    = tooltip.lineStyle.GetWidth(theme.tooltip.lineWidth);
            var cenPos       = m_Polar.context.center;
            var radius       = m_Polar.context.radius;
            var sp           = m_Polar.context.center;
            var tooltipAngle = m_AngleAxis.GetValueAngle(tooltip.context.angle);

            var ep = ChartHelper.GetPos(sp, radius, tooltipAngle, true);

            switch (tooltip.type)
            {
            case Tooltip.Type.Corss:
                ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, sp, ep, lineColor);
                var dist = Vector2.Distance(chart.pointerPos, cenPos);
                if (dist > radius)
                {
                    dist = radius;
                }
                var outsideRaidus = dist + tooltip.lineStyle.GetWidth(theme.tooltip.lineWidth) * 2;
                UGL.DrawDoughnut(vh, cenPos, dist, outsideRaidus, lineColor, Color.clear);
                break;

            case Tooltip.Type.Line:
                ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, sp, ep, lineColor);
                break;

            case Tooltip.Type.Shadow:
                UGL.DrawSector(vh, cenPos, radius, lineColor, tooltipAngle - 2, tooltipAngle + 2, chart.settings.cicleSmoothness);
                break;
            }
        }