Beispiel #1
0
        protected override void RefreshTooltip()
        {
            base.RefreshTooltip();
            bool showTooltip = false;

            for (int i = 0; i < m_PieTempDataList.Count; i++)
            {
                int index = m_Tooltip.dataIndex[i];
                if (index < 0)
                {
                    continue;
                }
                showTooltip = true;
                var    serie = m_Series.GetSerie(i);
                string key   = serie.data[index].name;
                if (string.IsNullOrEmpty(key))
                {
                    key = m_Legend.GetData(index);
                }
                float value = serie.data[index].data[1];
                sb.Length = 0;
                if (!string.IsNullOrEmpty(serie.name))
                {
                    sb.Append(serie.name).Append("\n");
                }
                sb.Append("<color=#").Append(m_ThemeInfo.GetColorStr(index)).Append(">● </color>")
                .Append(key).Append(": ").Append(ChartCached.FloatToStr(value));
                m_Tooltip.UpdateContentText(sb.ToString());

                var pos = m_Tooltip.GetContentPos();
                if (pos.x + m_Tooltip.width > chartWidth)
                {
                    pos.x = chartWidth - m_Tooltip.width;
                }
                if (pos.y - m_Tooltip.height < 0)
                {
                    pos.y = m_Tooltip.height;
                }
                m_Tooltip.UpdateContentPos(pos);
            }
            m_Tooltip.SetActive(showTooltip);
        }
Beispiel #2
0
 public string GetFormatterContent(int dataIndex, Series series, string category, DataZoom dataZoom = null)
 {
     if (string.IsNullOrEmpty(m_Formatter))
     {
         return("");
     }
     else
     {
         string content = m_Formatter;
         for (int i = 0; i < series.Count; i++)
         {
             var serie = series.GetSerie(i);
             if (serie.show)
             {
                 var needCategory = serie.type == SerieType.Line || serie.type == SerieType.Bar;
                 var serieData    = serie.GetSerieData(dataIndex, dataZoom);
                 if (i == 0)
                 {
                     content = content.Replace("{a}", serie.name);
                     content = content.Replace("{b}", needCategory ? category : serieData.name);
                     content = content.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1)));
                     //if (serie.type == SerieType.Pie)
                     {
                         var percent = serieData.GetData(1) / serie.yTotal * 100;
                         content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1));
                     }
                 }
                 content = content.Replace("{a" + i + "}", serie.name);
                 content = content.Replace("{b" + i + "}", needCategory ? category : serieData.name);
                 content = content.Replace("{c" + i + "}", ChartCached.FloatToStr(serieData.GetData(1)));
                 //if (serie.type == SerieType.Pie)
                 {
                     var percent = serieData.GetData(1) / serie.yTotal * 100;
                     content = content.Replace("{d" + i + "}", ChartCached.FloatToStr(percent, 1));
                 }
             }
         }
         content = content.Replace("\\n", "\n");
         content = content.Replace("<br/>", "\n");
         return(content);
     }
 }
        public string GetFormatterContent(float value)
        {
            if (string.IsNullOrEmpty(m_Formatter))
            {
                if (value - (int)value == 0)
                {
                    return(ChartCached.IntToStr((int)value));
                }
                else
                {
                    return(ChartCached.FloatToStr(value, 1));
                }
            }
            else
            {
                var content = m_Formatter;
                if (content.Contains("{value:f2}"))
                {
                    content = m_Formatter.Replace("{value:f2}", ChartCached.FloatToStr(value, 2));
                }
                else if (content.Contains("{value:f1}"))
                {
                    content = m_Formatter.Replace("{value:f1}", ChartCached.FloatToStr(value, 1));
                }
                else if (content.Contains("{value}"))
                {
                    if (value - (int)value == 0)
                    {
                        content = m_Formatter.Replace("{value}", ChartCached.IntToStr((int)value));
                    }
                    else
                    {
                        content = m_Formatter.Replace("{value}", ChartCached.FloatToStr(value, 1));
                    }
                }

                content = content.Replace("\\n", "\n");
                content = content.Replace("<br/>", "\n");
                return(content);
            }
        }
        private static void InitPieTooltip(ref StringBuilder sb, Tooltip tooltip, Serie serie, int index,
                                           ThemeInfo themeInfo)
        {
            string key              = serie.data[index].name;
            var    serieData        = serie.GetSerieData(index);
            var    numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData);

            float value = serieData.GetData(1);

            sb.Length = 0;
            if (!string.IsNullOrEmpty(serie.name))
            {
                sb.Append(serie.name).Append(FormatterHelper.PH_NN);
            }
            sb.Append("<color=#").Append(themeInfo.GetColorStr(index)).Append(">● </color>");
            if (!string.IsNullOrEmpty(key))
            {
                sb.Append(key).Append(": ");
            }
            sb.Append(ChartCached.FloatToStr(value, numericFormatter));
        }
Beispiel #5
0
        public static void ReplaceAxisLabelContent(ref string content, string numericFormatter, float value)
        {
            var mc = s_RegexForAxisLabel.Matches(content);

            foreach (var m in mc)
            {
                var old       = m.ToString();
                var args      = s_RegexSubForAxisLabel.Matches(m.ToString());
                var argsCount = args.Count;
                if (argsCount <= 0)
                {
                    continue;
                }
                if (argsCount >= 2)
                {
                    numericFormatter = args[1].ToString();
                }
                content = content.Replace(old, ChartCached.FloatToStr(value, numericFormatter));
            }
            content = TrimAndReplaceLine(content);
        }
 public string GetFormatterContent(string serieName, string dataName, float dataValue, float dataTotal = 0)
 {
     if (string.IsNullOrEmpty(m_Formatter))
     {
         return(ChartCached.FloatToStr(dataValue));
     }
     else
     {
         var content = m_Formatter.Replace("{a}", serieName);
         content = content.Replace("{b}", dataName);
         content = content.Replace("{c}", ChartCached.FloatToStr(dataValue));
         if (dataTotal > 0)
         {
             var percent = dataValue / dataTotal * 100;
             content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1));
         }
         content = content.Replace("\\n", "\n");
         content = content.Replace("<br/>", "\n");
         return(content);
     }
 }
Beispiel #7
0
        protected override void RefreshTooltip()
        {
            base.RefreshTooltip();
            int serieIndex = m_Tooltip.dataIndex[0];

            if (serieIndex < 0)
            {
                if (m_Tooltip.IsActive())
                {
                    m_Tooltip.SetActive(false);
                    RefreshChart();
                }
                return;
            }
            m_Tooltip.SetActive(true);
            var           serie     = m_Series.GetSerie(serieIndex);
            var           radar     = m_Radars[serie.radarIndex];
            var           serieData = serie.GetSerieData(m_Tooltip.dataIndex[1]);
            StringBuilder sb        = new StringBuilder(serieData.name);

            for (int i = 0; i < radar.indicatorList.Count; i++)
            {
                string key   = radar.indicatorList[i].name;
                float  value = serieData.GetData(i);
                sb.Append("\n");
                sb.AppendFormat("{0}: {1}", key, ChartCached.FloatToStr(value, 0, m_Tooltip.forceENotation));
            }
            m_Tooltip.UpdateContentText(sb.ToString());
            var pos = m_Tooltip.GetContentPos();

            if (pos.x + m_Tooltip.width > chartWidth)
            {
                pos.x = chartWidth - m_Tooltip.width;
            }
            if (pos.y - m_Tooltip.height < 0)
            {
                pos.y = m_Tooltip.height;
            }
            m_Tooltip.UpdateContentPos(pos);
        }
        private void UdpateTooltipLabel()
        {
            if (tooltip.type != Tooltip.Type.Corss)
            {
                return;
            }
            var m_Polar = GetPolar(tooltip.runtimePolarIndex);

            if (m_Polar == null)
            {
                return;
            }
            var m_AngleAxis  = GetAngleAxis(m_Polar.index);
            var m_RadiusAxis = GetRadiusAxis(m_Polar.index);
            var cenPos       = m_Polar.runtimeCenterPos;
            var radius       = m_Polar.runtimeRadius;

            m_AngleAxis.SetTooltipLabelActive(true);
            m_RadiusAxis.SetTooltipLabelActive(true);
            m_AngleAxis.UpdateTooptipLabelText(ChartCached.FloatToStr(tooltip.runtimeAngle));
            var tooltipAngle = tooltip.runtimeAngle + m_AngleAxis.runtimeStartAngle;
            var ep           = ChartHelper.GetPos(cenPos, radius + 5, tooltipAngle, true);

            m_AngleAxis.UpdateTooltipLabelPos(ep);

            var dist = Vector2.Distance(pointerPos, cenPos);

            if (dist > radius)
            {
                dist = radius;
            }
            float min   = m_RadiusAxis.runtimeMinValue;
            float max   = m_RadiusAxis.runtimeMaxValue;
            var   value = (float)(min + dist / radius * m_RadiusAxis.runtimeMinMaxRange);

            m_RadiusAxis.UpdateTooptipLabelText(ChartCached.FloatToStr(value));
            m_RadiusAxis.UpdateTooltipLabelPos(ChartHelper.GetPos(cenPos, dist, m_AngleAxis.runtimeStartAngle, true));
        }
        public static string GetFormatterContent(Serie serie, SerieData serieData,
                                                 float dataValue, float dataTotal, SerieLabel serieLabel = null)
        {
            if (serieLabel == null)
            {
                serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
            }
            var numericFormatter = GetLabelNumericFormatter(serie, serieData);
            var serieName        = serie.name;
            var dataName         = serieData != null ? serieData.name : null;

            if (string.IsNullOrEmpty(serieLabel.formatter))
            {
                return(ChartCached.NumberToStr(dataValue, numericFormatter));
            }
            else
            {
                var content = serieLabel.formatter.Replace("{a}", serieName);
                content = content.Replace("{b}", dataName);
                content = content.Replace("{c}", ChartCached.NumberToStr(dataValue, numericFormatter));
                content = content.Replace("{c:f0}", ChartCached.IntToStr((int)Mathf.Round(dataValue)));
                content = content.Replace("{c:f1}", ChartCached.FloatToStr(dataValue, string.Empty, 1));
                content = content.Replace("{c:f2}", ChartCached.FloatToStr(dataValue, string.Empty, 2));
                if (dataTotal > 0)
                {
                    var percent = dataValue / dataTotal * 100;
                    content = content.Replace("{d}", ChartCached.NumberToStr(percent, numericFormatter));
                    content = content.Replace("{d:f0}", ChartCached.IntToStr((int)Mathf.Round(percent)));
                    content = content.Replace("{d:f1}", ChartCached.FloatToStr(percent, string.Empty, 1));
                    content = content.Replace("{d:f2}", ChartCached.FloatToStr(percent, string.Empty, 2));
                }
                content = content.Replace("\\n", "\n");
                content = content.Replace("<br/>", "\n");
                return(content);
            }
        }
Beispiel #10
0
        public string GetFormatterContent(float value, float minValue, float maxValue, bool isLog = false)
        {
            if (showAsPositiveNumber && value < 0)
            {
                value = Mathf.Abs(value);
            }
            if (string.IsNullOrEmpty(m_Formatter))
            {
                if (isLog)
                {
                    if (value - (int)value == 0)
                    {
                        return(ChartCached.IntToStr((int)value));
                    }
                    else
                    {
                        return(ChartCached.FloatToStr(value));
                    }
                }
                if (minValue >= -1 && minValue <= 1 && maxValue >= -1 && maxValue <= 1)
                {
                    int minAcc = ChartHelper.GetFloatAccuracy(minValue);
                    int maxAcc = ChartHelper.GetFloatAccuracy(maxValue);
                    int curAcc = ChartHelper.GetFloatAccuracy(value);
                    int acc    = Mathf.Max(Mathf.Max(minAcc, maxAcc), curAcc);
                    return(ChartCached.FloatToStr(value, acc, m_ForceENotation));
                }
                else if (value - (int)value == 0)
                {
                    return(ChartCached.IntToStr((int)value));
                }
                else
                {
                    return(ChartCached.FloatToStr(value, 1));
                }
            }
            else if (m_Formatter.Contains("{value"))
            {
                var content = m_Formatter;
                if (content.Contains("{value:f0}"))
                {
                    content = m_Formatter.Replace("{value:f0}", ChartCached.IntToStr((int)value));
                }
                if (content.Contains("{value:f2}"))
                {
                    content = m_Formatter.Replace("{value:f2}", ChartCached.FloatToStr(value, 2));
                }
                else if (content.Contains("{value:f1}"))
                {
                    content = m_Formatter.Replace("{value:f1}", ChartCached.FloatToStr(value, 1));
                }
                else if (content.Contains("{value}"))
                {
                    if (value - (int)value == 0)
                    {
                        content = m_Formatter.Replace("{value}", ChartCached.IntToStr((int)value));
                    }
                    else
                    {
                        content = m_Formatter.Replace("{value}", ChartCached.FloatToStr(value, 1));
                    }
                }

                content = content.Replace("\\n", "\n");
                content = content.Replace("<br/>", "\n");
                return(content);
            }
            else
            {
                return(value.ToString(m_Formatter));
            }
        }
        public static string GetPolarFormatterContent(Tooltip tooltip, Series series, ThemeInfo themeInfo, AngleAxis angleAxis)
        {
            if (string.IsNullOrEmpty(tooltip.formatter))
            {
                var sb = ChartHelper.sb;
                sb.Length = 0;
                var title       = tooltip.titleFormatter;
                var formatTitle = !string.IsNullOrEmpty(title);
                if ("{i}".Equals(tooltip.titleFormatter))
                {
                    title       = string.Empty;
                    formatTitle = false;
                }
                else if (string.IsNullOrEmpty(title))
                {
                    var angle = angleAxis.clockwise ? tooltip.runtimeAngle : 360 - tooltip.runtimeAngle;
                    title = ChartCached.FloatToStr(angle);
                }
                foreach (var serie in series.list)
                {
                    if (serie.show && IsSelectedSerie(tooltip, serie.index))
                    {
                        if (formatTitle)
                        {
                            FormatterHelper.ReplaceContent(ref title, 0, tooltip.numericFormatter, serie, series, themeInfo, null, null);
                        }
                        var dataIndexList = tooltip.runtimeSerieIndex[serie.index];

                        for (int i = 0; i < dataIndexList.Count; i++)
                        {
                            var   dataIndex = dataIndexList[i];
                            var   serieData = serie.GetSerieData(dataIndex);
                            var   itemFormatter = GetItemFormatter(tooltip, serie, serieData);
                            var   numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData);
                            float xValue, yValue;
                            serie.GetXYData(dataIndex, null, out xValue, out yValue);
                            if (string.IsNullOrEmpty(itemFormatter))
                            {
                                sb.Append("<color=#").Append(themeInfo.GetColorStr(serie.index)).Append(">● </color>");
                                if (!string.IsNullOrEmpty(serie.name))
                                {
                                    sb.Append(serie.name).Append(": ");
                                }
                                sb.AppendFormat("{0}", ChartCached.FloatToStr(xValue, numericFormatter));
                                if (i != dataIndexList.Count - 1)
                                {
                                    sb.Append(FormatterHelper.PH_NN);
                                }
                            }
                            else
                            {
                                string content = itemFormatter;
                                FormatterHelper.ReplaceContent(ref content, dataIndex, tooltip.numericFormatter, serie, series, themeInfo, null, null);
                                var dotColorIndex = serie.type == SerieType.Pie || serie.type == SerieType.Radar || serie.type == SerieType.Ring ? dataIndex : serie.index;
                                sb.Append(ChartCached.ColorToDotStr(themeInfo.GetColor(dotColorIndex)));
                                sb.Append(content);
                            }
                        }
                        sb.Append(FormatterHelper.PH_NN);
                    }
                }
                if (string.IsNullOrEmpty(title))
                {
                    return(FormatterHelper.TrimAndReplaceLine(sb));
                }
                else
                {
                    title = FormatterHelper.TrimAndReplaceLine(title);
                    return(title + FormatterHelper.PH_NN + FormatterHelper.TrimAndReplaceLine(sb));
                }
            }
            else
            {
                string content = tooltip.formatter;
                FormatterHelper.ReplaceContent(ref content, 0, tooltip.numericFormatter, null, series, themeInfo, null, null);
                return(content);
            }
        }
        public static void InitRadarTooltip(ref StringBuilder sb, Tooltip tooltip, Serie serie, Radar radar,
                                            ThemeInfo themeInfo)
        {
            if (!serie.show)
            {
                return;
            }
            if (serie.radarIndex != radar.index)
            {
                return;
            }
            var dataIndex = tooltip.runtimeDataIndex[1];
            var serieData = serie.GetSerieData(dataIndex);

            if (!serieData.show)
            {
                return;
            }
            var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData);

            switch (serie.radarType)
            {
            case RadarType.Multiple:
                if (radar.isAxisTooltip)
                {
                    var dimension = tooltip.runtimeDataIndex[2];
                    if (!string.IsNullOrEmpty(serie.name))
                    {
                        sb.Append(serie.name).Append("\n");
                    }
                    var total = serie.GetDataTotal(dimension);
                    var first = true;
                    for (int i = 0; i < serie.dataCount; i++)
                    {
                        var sd = serie.GetSerieData(i);
                        if (!sd.show)
                        {
                            continue;
                        }
                        var key           = sd.name;
                        var value         = sd.GetData(dimension);
                        var itemFormatter = GetItemFormatter(tooltip, serie, sd);
                        numericFormatter = GetItemNumericFormatter(tooltip, serie, sd);
                        if (!first)
                        {
                            sb.Append("\n");
                        }
                        first = false;
                        sb.Append("<color=#").Append(themeInfo.GetColorStr(i)).Append(">● </color>");
                        if (string.IsNullOrEmpty(itemFormatter))
                        {
                            if (string.IsNullOrEmpty(key))
                            {
                                key = radar.indicatorList[dataIndex].name;
                            }
                            if (string.IsNullOrEmpty(key))
                            {
                                sb.AppendFormat("{0}\n", ChartCached.FloatToStr(value, numericFormatter));
                            }
                            else
                            {
                                sb.AppendFormat("{0}: {1}\n", key, ChartCached.FloatToStr(value, numericFormatter));
                            }
                        }
                        else
                        {
                            string content = itemFormatter;
                            FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, value, total, serie.name, sd.name);
                            sb.Append(content);
                        }
                    }
                }
                else
                {
                    if (serie.index != tooltip.runtimeDataIndex[0])
                    {
                        return;
                    }
                    sb.Append(serieData.name);
                    for (int i = 0; i < radar.indicatorList.Count; i++)
                    {
                        string key   = radar.indicatorList[i].name;
                        float  value = serieData.GetData(i);
                        if ((i == 0 && !string.IsNullOrEmpty(serieData.name)) || i > 0)
                        {
                            sb.Append(FormatterHelper.PH_NN);
                        }
                        sb.AppendFormat("{0}: {1}", key, ChartCached.FloatToStr(value, numericFormatter));
                    }
                }
                break;

            case RadarType.Single:
                var key2           = serieData.name;
                var value2         = serieData.GetData(1);
                var total2         = serie.GetDataTotal(1);
                var itemFormatter2 = GetItemFormatter(tooltip, serie, serieData);
                if (string.IsNullOrEmpty(itemFormatter2))
                {
                    if (string.IsNullOrEmpty(key2))
                    {
                        key2 = radar.indicatorList[dataIndex].name;
                    }
                    sb.AppendFormat("{0}: {1}", key2, ChartCached.FloatToStr(value2, numericFormatter));
                }
                else
                {
                    string content = itemFormatter2;
                    FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, value2, total2, serie.name, serieData.name);
                    sb.Append(content);
                }

                break;
            }
        }
Beispiel #13
0
        /// <summary>
        /// 替换字符串中的通配符,支持的通配符有{.}、{a}、{b}、{c}、{d}。
        /// </summary>
        /// <param name="content">要替换的字符串</param>
        /// <param name="dataIndex">选中的数据项serieData索引</param>
        /// <param name="numericFormatter">默认的数字格式化</param>
        /// <param name="serie">选中的serie</param>
        /// <param name="series">所有serie</param>
        /// <param name="theme">用来获取指定index的颜色</param>
        /// <param name="category">选中的类目,一般用在折线图和柱状图</param>
        /// <param name="dataZoom">dataZoom</param>
        /// <returns></returns>
        public static bool ReplaceContent(ref string content, int dataIndex, string numericFormatter, Serie serie, Series series,
                                          ChartTheme theme, string category = null, DataZoom dataZoom = null)
        {
            var foundDot = false;
            var mc       = s_Regex.Matches(content);

            foreach (var m in mc)
            {
                var old       = m.ToString();
                var args      = s_RegexSub.Matches(m.ToString());
                var argsCount = args.Count;
                if (argsCount <= 0)
                {
                    continue;
                }
                int  targetIndex = 0;
                char p           = GetSerieIndex(args[0].ToString(), ref targetIndex);
                if (targetIndex >= 0)
                {
                    serie = series.GetSerie(targetIndex);
                    if (serie == null)
                    {
                        continue;
                    }
                }
                else if (serie != null)
                {
                    targetIndex = serie.index;
                }
                else
                {
                    serie       = series.GetSerie(0);
                    targetIndex = 0;
                }
                if (serie == null)
                {
                    continue;
                }
                if (p == '.')
                {
                    var bIndex = targetIndex;
                    if (argsCount >= 2)
                    {
                        var args1Str = args[1].ToString();
                        if (s_RegexN.IsMatch(args1Str))
                        {
                            bIndex = int.Parse(args1Str);
                        }
                    }
                    content  = content.Replace(old, ChartCached.ColorToDotStr(theme.GetColor(bIndex)));
                    foundDot = true;
                }
                else if (p == 'a' || p == 'A')
                {
                    if (argsCount == 1)
                    {
                        content = content.Replace(old, serie.name);
                    }
                }
                else if (p == 'b' || p == 'B')
                {
                    var bIndex = dataIndex;
                    if (argsCount >= 2)
                    {
                        var args1Str = args[1].ToString();
                        if (s_RegexN.IsMatch(args1Str))
                        {
                            bIndex = int.Parse(args1Str);
                        }
                    }
                    var needCategory = serie.type == SerieType.Line || serie.type == SerieType.Bar;
                    if (needCategory)
                    {
                        content = content.Replace(old, category);
                    }
                    else
                    {
                        var serieData = serie.GetSerieData(bIndex, dataZoom);
                        content = content.Replace(old, serieData.name);
                    }
                }
                else if (p == 'c' || p == 'C' || p == 'd' || p == 'D')
                {
                    var isPercent      = p == 'd' || p == 'D';
                    var bIndex         = dataIndex;
                    var dimensionIndex = -1;
                    if (argsCount >= 2)
                    {
                        var args1Str = args[1].ToString();
                        if (s_RegexFn.IsMatch(args1Str))
                        {
                            numericFormatter = args1Str;
                        }
                        else if (s_RegexN_N.IsMatch(args1Str))
                        {
                            var temp = args1Str.Split('-');
                            bIndex         = int.Parse(temp[0]);
                            dimensionIndex = int.Parse(temp[1]);
                        }
                        else if (s_RegexN.IsMatch(args1Str))
                        {
                            dimensionIndex = int.Parse(args1Str);
                        }
                        else
                        {
                            Debug.LogError("unmatch:" + args1Str);
                            continue;
                        }
                    }
                    if (argsCount >= 3)
                    {
                        numericFormatter = args[2].ToString();
                    }
                    if (dimensionIndex == -1)
                    {
                        dimensionIndex = 1;
                    }
                    if (numericFormatter == string.Empty)
                    {
                        numericFormatter = SerieHelper.GetNumericFormatter(serie, serie.GetSerieData(bIndex));
                    }
                    var value = serie.GetData(bIndex, dimensionIndex, dataZoom);
                    if (isPercent)
                    {
                        var total   = serie.GetDataTotal(dimensionIndex);
                        var percent = total == 0 ? 0 : value / serie.yTotal * 100;
                        content = content.Replace(old, ChartCached.FloatToStr(percent, numericFormatter));
                    }
                    else
                    {
                        content = content.Replace(old, ChartCached.FloatToStr(value, numericFormatter));
                    }
                }
            }
            content = s_RegexNewLine.Replace(content, PH_NN);
            return(foundDot);
        }
Beispiel #14
0
 internal string GetFormatterContent(int dataIndex, Series series, string category, DataZoom dataZoom = null)
 {
     if (string.IsNullOrEmpty(m_Formatter))
     {
         if (string.IsNullOrEmpty(m_ItemFormatter))
         {
             return("");
         }
         else
         {
             var sb           = ChartHelper.sb;
             var title        = m_TitleFormatter;
             var formatTitle  = !string.IsNullOrEmpty(title);
             var needCategory = false;
             var first        = true;
             sb.Length = 0;
             for (int i = 0; i < series.Count; i++)
             {
                 var serie     = series.GetSerie(i);
                 var serieData = serie.GetSerieData(dataIndex, dataZoom);
                 var percent   = serieData.GetData(1) / serie.yTotal * 100;
                 needCategory = needCategory || (serie.type == SerieType.Line || serie.type == SerieType.Bar);
                 if (serie.show)
                 {
                     string content = m_ItemFormatter;
                     content = content.Replace("{a}", serie.name);
                     content = content.Replace("{b}", needCategory ? category : serieData.name);
                     content = content.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, m_ForceENotation));
                     content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1));
                     if (!first)
                     {
                         sb.Append("\n");
                     }
                     sb.Append(content);
                     first = false;
                 }
                 if (formatTitle)
                 {
                     if (i == 0)
                     {
                         title = title.Replace("{a}", serie.name);
                         title = title.Replace("{b}", needCategory ? category : serieData.name);
                         title = title.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, m_ForceENotation));
                         title = title.Replace("{d}", ChartCached.FloatToStr(percent, 1));
                     }
                     title = title.Replace("{a" + i + "}", serie.name);
                     title = title.Replace("{b" + i + "}", needCategory ? category : serieData.name);
                     title = title.Replace("{c" + i + "}", ChartCached.FloatToStr(serieData.GetData(1), 0, m_ForceENotation));
                     title = title.Replace("{d" + i + "}", ChartCached.FloatToStr(percent, 1));
                 }
             }
             if (string.IsNullOrEmpty(title))
             {
                 if (needCategory)
                 {
                     return(category + "\n" + sb.ToString());
                 }
                 else
                 {
                     return(sb.ToString());
                 }
             }
             else
             {
                 title = title.Replace("\\n", "\n");
                 title = title.Replace("<br/>", "\n");
                 return(title + "\n" + sb.ToString());
             }
         }
     }
     else
     {
         string content = m_Formatter;
         for (int i = 0; i < series.Count; i++)
         {
             var serie = series.GetSerie(i);
             if (serie.show)
             {
                 var needCategory = serie.type == SerieType.Line || serie.type == SerieType.Bar;
                 var serieData    = serie.GetSerieData(dataIndex, dataZoom);
                 var percent      = serieData.GetData(1) / serie.yTotal * 100;
                 if (i == 0)
                 {
                     content = content.Replace("{a}", serie.name);
                     content = content.Replace("{b}", needCategory ? category : serieData.name);
                     content = content.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, m_ForceENotation));
                     content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1));
                 }
                 content = content.Replace("{a" + i + "}", serie.name);
                 content = content.Replace("{b" + i + "}", needCategory ? category : serieData.name);
                 content = content.Replace("{c" + i + "}", ChartCached.FloatToStr(serieData.GetData(1), 0, m_ForceENotation));
                 content = content.Replace("{d" + i + "}", ChartCached.FloatToStr(percent, 1));
             }
         }
         content = content.Replace("\\n", "\n");
         content = content.Replace("<br/>", "\n");
         return(content);
     }
 }
Beispiel #15
0
        protected override void OnRefreshLabel()
        {
            var isYAxis = (m_YAxises[0].show && m_YAxises[0].type == Axis.AxisType.Category) ||
                          (m_YAxises[1].show && m_YAxises[1].type == Axis.AxisType.Category);

            for (int i = 0; i < m_Series.Count; i++)
            {
                var serie = m_Series.GetSerie(i);
                if (serie.type == SerieType.Bar && serie.show)
                {
                    var zeroPos = Vector3.zero;
                    if (serie.label.position == SerieLabel.Position.Bottom || serie.label.position == SerieLabel.Position.Center)
                    {
                        if (isYAxis)
                        {
                            var xAxis = m_XAxises[serie.axisIndex];
                            zeroPos = new Vector3(coordinateX + xAxis.zeroXOffset, coordinateY);
                        }
                        else
                        {
                            var yAxis = m_YAxises[serie.axisIndex];
                            zeroPos = new Vector3(coordinateX, coordinateY + yAxis.zeroYOffset);
                        }
                    }
                    for (int j = 0; j < serie.data.Count; j++)
                    {
                        var serieData = serie.data[j];
                        if (serie.label.show)
                        {
                            var pos = serie.dataPoints[j];
                            switch (serie.label.position)
                            {
                            case SerieLabel.Position.Center:
                                pos = isYAxis ? new Vector3(zeroPos.x + (pos.x - zeroPos.x) / 2, pos.y) :
                                      new Vector3(pos.x, zeroPos.y + (pos.y - zeroPos.y) / 2);
                                break;

                            case SerieLabel.Position.Bottom:
                                pos = isYAxis ? new Vector3(zeroPos.x, pos.y) : new Vector3(pos.x, zeroPos.y);
                                break;
                            }
                            var value = serieData.data[1];
                            serieData.SetLabelActive(true);
                            serieData.SetLabelText(ChartCached.FloatToStr(value));
                            if (isYAxis)
                            {
                                if (value >= 0)
                                {
                                    serieData.SetLabelPosition(new Vector3(pos.x + serie.label.distance, pos.y));
                                }
                                else
                                {
                                    serieData.SetLabelPosition(new Vector3(pos.x - serie.label.distance, pos.y));
                                }
                            }
                            else
                            {
                                if (value >= 0)
                                {
                                    serieData.SetLabelPosition(new Vector3(pos.x, pos.y + serie.label.distance));
                                }
                                else
                                {
                                    serieData.SetLabelPosition(new Vector3(pos.x, pos.y - serie.label.distance));
                                }
                            }
                        }
                        else
                        {
                            serieData.SetLabelActive(false);
                        }
                    }
                }
            }
        }
 public static string GetFormatterContent(Tooltip tooltip, int dataIndex, Series series, ThemeInfo themeInfo,
                                          string category = null, DataZoom dataZoom = null, bool isCartesian = false)
 {
     if (string.IsNullOrEmpty(tooltip.formatter))
     {
         var sb           = ChartHelper.sb;
         var title        = tooltip.titleFormatter;
         var formatTitle  = !string.IsNullOrEmpty(title);
         var needCategory = false;
         var first        = true;
         sb.Length = 0;
         for (int i = 0; i < series.Count; i++)
         {
             var serie = series.GetSerie(i);
             if (!serie.show)
             {
                 continue;
             }
             var serieData = serie.GetSerieData(dataIndex, dataZoom);
             if (serieData == null)
             {
                 continue;
             }
             var itemFormatter = GetItemFormatter(tooltip, serie, serieData);
             var percent       = serieData.GetData(1) / serie.yTotal * 100;
             needCategory = needCategory || (serie.type == SerieType.Line || serie.type == SerieType.Bar);
             if (serie.show)
             {
                 if (string.IsNullOrEmpty(itemFormatter))
                 {
                     if (!first)
                     {
                         sb.Append("\n");
                     }
                     InitDefaultContent(ref sb, tooltip, serie, dataIndex, category, themeInfo, dataZoom, isCartesian);
                     first = false;
                     continue;
                 }
                 string content = itemFormatter;
                 content = content.Replace("{a}", serie.name);
                 content = content.Replace("{b}", needCategory ? category : serieData.name);
                 content = content.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation));
                 content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1));
                 if (!first)
                 {
                     sb.Append("\n");
                 }
                 sb.Append("<color=#").Append(themeInfo.GetColorStr(i)).Append(">● </color>");
                 sb.Append(content);
                 first = false;
             }
             if (formatTitle)
             {
                 if (i == 0)
                 {
                     title = title.Replace("{a}", serie.name);
                     title = title.Replace("{b}", needCategory ? category : serieData.name);
                     title = title.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation));
                     title = title.Replace("{d}", ChartCached.FloatToStr(percent, 1));
                 }
                 title = title.Replace("{a" + i + "}", serie.name);
                 title = title.Replace("{b" + i + "}", needCategory ? category : serieData.name);
                 title = title.Replace("{c" + i + "}", ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation));
                 title = title.Replace("{d" + i + "}", ChartCached.FloatToStr(percent, 1));
             }
         }
         if (string.IsNullOrEmpty(title))
         {
             if (needCategory)
             {
                 return(category + "\n" + sb.ToString());
             }
             else
             {
                 return(sb.ToString());
             }
         }
         else
         {
             title = title.Replace("\\n", "\n");
             title = title.Replace("<br/>", "\n");
             return(title + "\n" + sb.ToString());
         }
     }
     else
     {
         string content = tooltip.formatter;
         for (int i = 0; i < series.Count; i++)
         {
             var serie = series.GetSerie(i);
             if (serie.show)
             {
                 var needCategory = serie.type == SerieType.Line || serie.type == SerieType.Bar;
                 var serieData    = serie.GetSerieData(dataIndex, dataZoom);
                 var percent      = serieData.GetData(1) / serie.yTotal * 100;
                 if (i == 0)
                 {
                     content = content.Replace("{a}", serie.name);
                     content = content.Replace("{b}", needCategory ? category : serieData.name);
                     content = content.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation));
                     content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1));
                 }
                 content = content.Replace("{a" + i + "}", serie.name);
                 content = content.Replace("{b" + i + "}", needCategory ? category : serieData.name);
                 content = content.Replace("{c" + i + "}", ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation));
                 content = content.Replace("{d" + i + "}", ChartCached.FloatToStr(percent, 1));
             }
         }
         content = content.Replace("\\n", "\n");
         content = content.Replace("<br/>", "\n");
         return(content);
     }
 }
Beispiel #17
0
 public static string GetFormatterContent(Tooltip tooltip, int dataIndex, Series series, ThemeInfo themeInfo,
                                          string category = null, DataZoom dataZoom = null, bool isCartesian = false)
 {
     if (string.IsNullOrEmpty(tooltip.formatter))
     {
         var sb           = ChartHelper.sb;
         var title        = tooltip.titleFormatter;
         var formatTitle  = !string.IsNullOrEmpty(title);
         var needCategory = false;
         var first        = true;
         var isScatter    = false;
         sb.Length = 0;
         for (int i = 0; i < series.Count; i++)
         {
             var serie = series.GetSerie(i);
             if (serie.type == SerieType.Scatter || serie.type == SerieType.EffectScatter)
             {
                 if (serie.show && IsSelectedSerie(tooltip, serie.index))
                 {
                     isScatter = true;
                     var itemFormatter = GetItemFormatter(tooltip, serie, null);
                     if (string.IsNullOrEmpty(itemFormatter))
                     {
                         if (!first)
                         {
                             sb.Append(PH_NN);
                         }
                         InitDefaultContent(ref sb, tooltip, serie, dataIndex, category, themeInfo, dataZoom, isCartesian);
                         first = false;
                         continue;
                     }
                     var itemTitle = title;
                     if (!string.IsNullOrEmpty(itemTitle))
                     {
                         Replace(ref itemTitle, PH_A, i, serie.name, true);
                         sb.Append(itemTitle).Append(PH_NN);
                     }
                     var dataIndexList = tooltip.runtimeSerieDataIndex[serie.index];
                     foreach (var tempIndex in dataIndexList)
                     {
                         var    foundDot  = false;
                         var    serieData = serie.GetSerieData(tempIndex);
                         string content   = itemFormatter;
                         Replace(ref content, PH_A, i, serie.name, true);
                         Replace(ref content, PH_B, i, needCategory ? category : serieData.name, true);
                         if (itemFormatter.IndexOf(PH_I) >= 0)
                         {
                             foundDot = true;
                             Replace(ref content, PH_I, i, ChartCached.ColorToDotStr(themeInfo.GetColor(serie.index)), true);
                         }
                         for (int n = 0; n < serieData.data.Count; n++)
                         {
                             var valueStr = ChartCached.FloatToStr(serieData.GetData(n), 0, tooltip.forceENotation);
                             Replace(ref content, GetPHCC(n), i, valueStr, true);
                         }
                         if (!foundDot)
                         {
                             sb.Append(ChartCached.ColorToDotStr(themeInfo.GetColor(serie.index)));
                         }
                         sb.Append(content).Append(PH_NN);
                     }
                 }
             }
             else
             {
                 var serieData = serie.GetSerieData(dataIndex, dataZoom);
                 if (serieData == null)
                 {
                     continue;
                 }
                 var itemFormatter = GetItemFormatter(tooltip, serie, serieData);
                 var percent       = serieData.GetData(1) / serie.yTotal * 100;
                 needCategory = needCategory || (serie.type == SerieType.Line || serie.type == SerieType.Bar);
                 if (formatTitle)
                 {
                     var valueStr = ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation);
                     Replace(ref title, PH_A, i, serie.name, true);
                     Replace(ref title, PH_B, i, needCategory ? category : serieData.name, true);
                     Replace(ref title, PH_C, i, valueStr, true);
                     Replace(ref title, PH_D, i, ChartCached.FloatToStr(percent, 1), true);
                 }
                 if (serie.show)
                 {
                     if (string.IsNullOrEmpty(itemFormatter))
                     {
                         if (!first)
                         {
                             sb.Append(PH_NN);
                         }
                         InitDefaultContent(ref sb, tooltip, serie, dataIndex, category, themeInfo, dataZoom, isCartesian);
                         first = false;
                         continue;
                     }
                     string content  = itemFormatter;
                     var    valueStr = ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation);
                     Replace(ref content, PH_A, i, serie.name, true);
                     Replace(ref content, PH_B, i, needCategory ? category : serieData.name, true);
                     Replace(ref content, PH_C, i, valueStr, true);
                     Replace(ref content, PH_D, i, ChartCached.FloatToStr(percent, 1), true);
                     for (int n = 0; n < serieData.data.Count; n++)
                     {
                         valueStr = ChartCached.FloatToStr(serieData.GetData(n), 0, tooltip.forceENotation);
                         Replace(ref content, GetPHCC(n), i, valueStr, true);
                     }
                     if (!first)
                     {
                         sb.Append(PH_NN);
                     }
                     sb.Append(ChartCached.ColorToDotStr(themeInfo.GetColor(i)));
                     sb.Append(content);
                     first = false;
                 }
             }
         }
         if (isScatter)
         {
             return(TrimAndReplaceLine(sb));
         }
         else if (string.IsNullOrEmpty(title))
         {
             if (needCategory)
             {
                 return(category + PH_NN + TrimAndReplaceLine(sb));
             }
             else
             {
                 return(TrimAndReplaceLine(sb));
             }
         }
         else
         {
             title = title.Replace(PH_ON, PH_NN);
             title = title.Replace(PH_BR, PH_NN);
             return(title + PH_NN + TrimAndReplaceLine(sb));
         }
     }
     else
     {
         string content = tooltip.formatter;
         for (int i = 0; i < series.Count; i++)
         {
             var serie = series.GetSerie(i);
             if (serie.show)
             {
                 var needCategory = serie.type == SerieType.Line || serie.type == SerieType.Bar;
                 var serieData    = serie.GetSerieData(dataIndex, dataZoom);
                 var percent      = serieData.GetData(1) / serie.yTotal * 100;
                 Replace(ref content, PH_A, i, serie.name);
                 Replace(ref content, PH_B, i, needCategory ? category : serieData.name);
                 Replace(ref content, PH_C, i, ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation));
                 Replace(ref content, PH_D, i, ChartCached.FloatToStr(percent, 1));
                 Replace(ref content, PH_I, i, ChartCached.ColorToDotStr(themeInfo.GetColor(i)));
                 for (int n = 0; n < serieData.data.Count; n++)
                 {
                     var valueStr = ChartCached.FloatToStr(serieData.GetData(n), 0, tooltip.forceENotation);
                     if (i == 0)
                     {
                         Replace(ref content, GetPHCC(n), i, valueStr, true);
                     }
                     Replace(ref content, GetPHCC(i, n), i, valueStr, true);
                 }
             }
         }
         content = content.Replace(PH_ON, PH_NN);
         content = content.Replace(PH_BR, PH_NN);
         return(content);
     }
 }