public void ResetData(string key, float data)
        {
            if (!lineMap.ContainsKey(key))
            {
                Debug.LogError("LineChart:not contain line key:" + key);
                return;
            }
            LineData_old line = lineMap[key];

            line.AddData(data, GetMaxPointCount());
        }
        public void AddLine(string key, string name, Color lineColor, Color pointColor)
        {
            LineData_old line = new LineData_old();

            line.key        = key;
            line.name       = name;
            line.lineColor  = lineColor;
            line.pointColor = pointColor;
            lineList.Add(line);
            AddLineToLineMap(line);
        }
 private void AddLineToLineMap(LineData_old line)
 {
     if (lineMap.ContainsKey(line.key))
     {
         Debug.LogError("LineChart:line key is duplicated:" + line.key);
     }
     else
     {
         lineMap[line.key] = line;
     }
 }
        public void AddPoint(string key, float point)
        {
            if (!lineMap.ContainsKey(key))
            {
                Debug.LogError("LineChart:not contain line key:" + key);
                return;
            }
            LineData_old line = lineMap[key];

            line.AddData(point, GetMaxPointCount());
            UpdateMesh();
            CheckMaxDataChange();
        }
        void OnClickButton(string key)
        {
            LineData_old line = lineMap[key];

            line.visible = !line.visible;
            if (line.visible)
            {
                line.step = graduationStep;
                line.UpdateMinMax();
            }
            CheckMaxDataChange();
            UpdateMesh();
        }
 protected override void Awake()
 {
     base.Awake();
     InitGraduation();
     InitLineButton();
     InitHideAndShowButton();
     for (int i = 0; i < lineList.Count; i++)
     {
         LineData_old line = lineList[i];
         line.dataList.Clear();
         if (line.button)
         {
             Color bcolor = line.visible ? line.lineColor : Color.grey;
             line.button.GetComponent <Image>().color         = bcolor;
             line.button.GetComponentInChildren <Text>().text = line.name;
             line.button.onClick.AddListener(delegate()
             {
                 OnClickButton(line.key);
             });
         }
         AddLineToLineMap(line);
     }
 }
 private void CheckLineSizeChange()
 {
     if (lastChartHig != chartHig)
     {
         lastChartHig = chartHig;
         //update graduation pos
         for (int i = 0; i < graduationList.Count; i++)
         {
             Vector3 pos  = graduationList[i].rectTransform.localPosition;
             float   posY = lastChartHig * i / (graduationList.Count - 1);
             graduationList[i].rectTransform.localPosition = new Vector3(pos.x, posY, pos.z);
         }
         //update line button pos
         btnAll.transform.localPosition = new Vector3(-graduationWidth, chartHig + 30, 0);
         for (int i = 0; i < lineList.Count; i++)
         {
             LineData_old line = lineList[i];
             if (line.button)
             {
                 line.button.transform.localPosition = new Vector3(i * 50, chartHig + 30, 0);
             }
         }
     }
     if (lastGraduationWid != graduationWidth)
     {
         if (graduationWidth < 40)
         {
             graduationWidth = 40;
         }
         lastGraduationWid = graduationWidth;
         Vector2 sizeDelta = new Vector2(graduationWidth, 20);
         btnAll.GetComponent <RectTransform>().sizeDelta = sizeDelta;
         btnAll.transform.Find("Text").GetComponent <RectTransform>().sizeDelta = sizeDelta;
         btnAll.transform.localPosition = new Vector3(-graduationWidth, chartHig + 30, 0);
     }
 }
        protected override void OnPopulateMesh(VertexHelper vh)
        {
            vh.Clear();
            int   dataRectWid = (int)(chartWid / pointWidth) * pointWidth;
            float dataMax     = GetAllLineMax();
            // draw bg
            Vector3 p1 = new Vector3(-graduationWidth, chartHig + 30);
            Vector3 p2 = new Vector3(dataRectWid + 50, chartHig + 30);
            Vector3 p3 = new Vector3(dataRectWid + 50, -20);
            Vector3 p4 = new Vector3(-graduationWidth, -20);

            ChartUtils.DrawPolygon(vh, p1, p2, p3, p4, backgroundColor);
            // draw coordinate
            Vector3 coordZero = Vector3.zero;

            ChartUtils.DrawLine(vh, new Vector3(dataRectWid + 5, -5),
                                new Vector3(dataRectWid + 5, chartHig + 0.5f), 1, Color.grey);
            // draw graduation
            for (int i = 0; i < graduationList.Count; i++)
            {
                Vector3 sp = new Vector3(-5, chartHig * i / (graduationList.Count - 1));
                Vector3 ep = new Vector3(dataRectWid + 5, chartHig * i / (graduationList.Count - 1));
                ChartUtils.DrawLine(vh, sp, ep, 0.5f, Color.grey);
            }

            // draw line
            for (int index = 0; index < lineList.Count; index++)
            {
                LineData_old line = lineList[index];
                if (!line.visible)
                {
                    continue;
                }
                Vector3 lp = Vector3.zero;
                Vector3 np = Vector3.zero;

                for (int i = 0; i < line.dataList.Count; i++)
                {
                    float data = line.dataList[i] * chartHig / dataMax;
                    np = new Vector3(i * pointWidth, data);
                    if (i > 0)
                    {
                        ChartUtils.DrawLine(vh, lp, np, lineSize, line.lineColor);
                    }
                    lp = np;
                }

                // draw point
                for (int i = 0; i < line.dataList.Count; i++)
                {
                    UIVertex[] quadverts = new UIVertex[4];
                    float      data      = line.dataList[i] * chartHig / dataMax;
                    Vector3    p         = new Vector3(i * pointWidth, data);
                    ChartUtils.DrawPolygon(vh, p, pointSize, line.pointColor);
                }
            }

            //draw x,y axis
            float xLen = dataRectWid + 25;
            float yLen = chartHig + 15;
            float xPos = 0;
            float yPos = -5;

            ChartUtils.DrawLine(vh, new Vector3(xPos, yPos - 1.5f), new Vector3(xPos, yLen), 1.5f, Color.white);
            ChartUtils.DrawLine(vh, new Vector3(xPos, yPos), new Vector3(xLen, yPos), 1.5f, Color.white);
            //draw arrows
            ChartUtils.DrawTriangle(vh, new Vector3(xPos - arrowSize, yLen - arrowLen), new Vector3(xPos, yLen + 4),
                                    new Vector3(xPos + arrowSize, yLen - arrowLen), Color.white);
            ChartUtils.DrawTriangle(vh, new Vector3(xLen - arrowLen, yPos + arrowSize), new Vector3(xLen + 4, yPos),
                                    new Vector3(xLen - arrowLen, yPos - arrowSize), Color.white);
        }