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); }