/* ---------- */ /* BACKGROUND */ /* ---------- */ protected override void _drawPlotBackground(List <UIVertex> pVertexList) { if (mPlotBackgroundMesh == null) { NGraphUtils.AddMesh(mPlotBackgroundGo, out mPlotBackgroundMeshRenderer, out mPlotBackgroundMesh); } mPlotBackgroundMesh.Clear(); mPlotBackgroundMeshRenderer.material = PlotBackgroundMaterial; mPlotBackgroundMeshRenderer.material.SetColor("_TintColor", PlotBackgroundColor); List <Vector3> pVertices = new List <Vector3>(); List <Vector2> pUvs = new List <Vector2>(); List <int> pTriangles = new List <int>(); UIVertex a = pVertexList [1]; UIVertex b = pVertexList [2]; UIVertex c = pVertexList [0]; UIVertex d = pVertexList [3]; pVertices.Add(c.position); pVertices.Add(a.position); pVertices.Add(b.position); pVertices.Add(d.position); pUvs.Add(c.uv0); pUvs.Add(a.uv0); pUvs.Add(b.uv0); pUvs.Add(d.uv0); /* * 1a 2b * * * * 0c 3d * */ pTriangles.Add(0); pTriangles.Add(1); pTriangles.Add(2); pTriangles.Add(0); pTriangles.Add(2); pTriangles.Add(3); mPlotBackgroundMesh.vertices = pVertices.ToArray(); mPlotBackgroundMesh.uv = pUvs.ToArray(); mPlotBackgroundMesh.triangles = pTriangles.ToArray(); }
protected override void _drawAxes(Rect xAxis, Rect yAxis) { if (mAxisMeshRendererX == null) { NGraphUtils.AddMesh(mXAxesGo, out mAxisMeshRendererX, out mXAxisMesh); } if (mAxisMeshRendererY == null) { NGraphUtils.AddMesh(mYAxesGo, out mAxisMeshRendererY, out mYAxisMesh); } mAxisMeshRendererX.material = AxisMaterial; mAxisMeshRendererX.material.SetColor("_TintColor", AxisColor); mAxisMeshRendererY.material = AxisMaterial; mAxisMeshRendererY.material.SetColor("_TintColor", AxisColor); NGraphUtils.DrawRect(xAxis, mXAxisMesh); NGraphUtils.DrawRect(yAxis, mYAxisMesh); }
protected override void _drawMajorGridLine(Axis axis, int index, float r, GameObject pGridLineGameObject) { MeshRenderer pMeshRenderer; Mesh pMesh; NGraphUtils.AddMesh(pGridLineGameObject, out pMeshRenderer, out pMesh); mXAxisTicks.Add(pMeshRenderer); pMeshRenderer.material = AxisMaterial; pMeshRenderer.material.SetColor("_TintColor", GridLinesColorMajor); if (axis == Axis.X) { NGraphUtils.DrawRect(new Rect(adjustPointX(r) - (GridLinesThicknesMajor / 2f), adjustPointY(YRange.y), GridLinesThicknesMajor, adjustPointY(YRange.x) - adjustPointY(YRange.y)), pMesh); } else if (axis == Axis.Y) { NGraphUtils.DrawRect(new Rect(adjustPointX(XRange.x), adjustPointY(r) + (GridLinesThicknesMajor / 2f), adjustPointX(XRange.y) - adjustPointX(XRange.x), -GridLinesThicknesMajor), pMesh); } }
protected override void _drawAxisTick(Axis axis, int index, GameObject pTickGameObject) { MeshRenderer pMeshRenderer; Mesh pMesh; NGraphUtils.AddMesh(pTickGameObject, out pMeshRenderer, out pMesh); mXAxisTicks.Add(pMeshRenderer); pMesh.Clear(); pMeshRenderer.material = AxisMaterial; pMeshRenderer.material.SetColor("_TintColor", AxisColor); if (axis == Axis.X) { NGraphUtils.DrawRect(new Rect(-AxesThickness / 2, AxesThickness / 2 + 4, AxesThickness, -AxesThickness - 8), pMesh); } else if (axis == Axis.Y) { NGraphUtils.DrawRect(new Rect(-AxesThickness / 2 - 4, -AxesThickness / 2, AxesThickness + 8, AxesThickness), pMesh); } }
protected void drawMarker(Vector2 pDataPoint, int dataPointIndex) { Mesh pMesh = null; GameObject pMarkerGo = NGraphUtils.AddGameObject(mGameObject, NGraph.LEVEL_STEP, "Marker - " + dataPointIndex); CanvasRenderer pCanvasRenderer = null; if (mGraph.UnityGui) { pCanvasRenderer = NGraphUtils.AddCanvasRenderer(pMarkerGo); Material pMat = new Material(PlotMaterial); pMat.SetColor("_TintColor", mMarkerColor); pMat.SetVector("_Clipping", new Vector4(mClipping.x, mClipping.y, mClipping.z, mClipping.w)); pCanvasRenderer.SetMaterial(pMat, null); } else { NGraphUtils.AddMesh(pMarkerGo, out mMeshRenderer, out pMesh); mMeshRenderer.material = PlotMaterial; mMeshRenderer.material.SetColor("_TintColor", mMarkerColor); mMeshRenderer.material.SetVector("_Clipping", new Vector4(mClipping.x, mClipping.y, mClipping.z, mClipping.w)); } mMarkerGos.Add(pMarkerGo); List <Vector3> pVertices = new List <Vector3>(); List <Vector2> pUvs = new List <Vector2>(); List <int> pTriangles = new List <int>(); switch (MarkersStyle) { case MarkerStyle.Box: { /* * c d * * * b a */ pVertices.Add(new Vector3(mMarkerWeight / 2 + pDataPoint.x, -mMarkerWeight / 2 + pDataPoint.y, 0)); pVertices.Add(new Vector3(-mMarkerWeight / 2 + pDataPoint.x, -mMarkerWeight / 2 + pDataPoint.y, 0)); pVertices.Add(new Vector3(-mMarkerWeight / 2 + pDataPoint.x, mMarkerWeight / 2 + pDataPoint.y, 0)); pVertices.Add(new Vector3(mMarkerWeight / 2 + pDataPoint.x, mMarkerWeight / 2 + pDataPoint.y, 0)); pUvs.Add(new Vector2(0, 0)); pUvs.Add(new Vector2(1, 0)); pUvs.Add(new Vector2(0, 1)); pUvs.Add(new Vector2(1, 1)); pTriangles.Add(0); pTriangles.Add(1); pTriangles.Add(2); pTriangles.Add(2); pTriangles.Add(3); pTriangles.Add(0); break; } case MarkerStyle.Triangle: { /* * c * * * a b */ pVertices.Add(new Vector3(pDataPoint.x, pDataPoint.y + mMarkerWeight / 2, 0)); pVertices.Add(new Vector3(mMarkerWeight / 2 + pDataPoint.x, -mMarkerWeight / 2 + pDataPoint.y, 0)); pVertices.Add(new Vector3(-mMarkerWeight / 2 + pDataPoint.x, -mMarkerWeight / 2 + pDataPoint.y, 0)); pUvs.Add(new Vector2(0, 0)); pUvs.Add(new Vector2(1, 0)); pUvs.Add(new Vector2(0.5f, 1)); if (mGraph.UnityGui) { pVertices.Add(new Vector3(-mMarkerWeight / 2 + pDataPoint.x, -mMarkerWeight / 2 + pDataPoint.y, 0)); pUvs.Add(new Vector2(0.5f, 1)); } pTriangles.Add(0); pTriangles.Add(1); pTriangles.Add(2); break; } } if (mGraph.UnityGui) { List <UIVertex> vertices = new List <UIVertex>(pVertices.Count); for (int i = 0; i < pVertices.Count; i++) { UIVertex pVertex = new UIVertex(); pVertex.position = pVertices[i]; pVertex.uv0 = pUvs[i]; vertices.Add(pVertex); } pCanvasRenderer.SetVertices(vertices); } else { pMesh.vertices = pVertices.ToArray(); pMesh.uv = pUvs.ToArray(); pMesh.triangles = pTriangles.ToArray(); } }
public override void DrawSeries() { if (mGameObject == null || mData == null) { return; } base.DrawSeries(); clearMarkers(); int meshCount = mData.Count; if (mPlotStyle == Style.Line) { meshCount = 1; } clearMeshes(meshCount); clearCanvasRenderers(meshCount); List <Vector3> pVertices = new List <Vector3>(); List <Vector2> pUvs = new List <Vector2>(); List <int> pTriangles = new List <int>(); Mesh pMesh; CanvasRenderer pCanvasRenderer; if (!mGraph.UnityGui && mMeshes == null) { mMeshes = new List <KeyValuePair <GameObject, Mesh> >(); } else if (mGraph.UnityGui && mCanvasRenderers == null) { mCanvasRenderers = new List <KeyValuePair <GameObject, CanvasRenderer> >(); } Vector2 pZero = mGraph.adjustPoint(Vector2.zero); for (int i = 0; i < mData.Count; ++i) { Vector2 pDataPoint = mData[i]; pDataPoint = mGraph.adjustPoint(pDataPoint); if (MarkersStyle != MarkerStyle.None) { drawMarker(pDataPoint, i); } if (mPlotStyle == Style.Line && i == 0) { continue; } if (mPlotStyle == Style.Line) { Vector2 pPrevDataPoint = mData[i - 1]; NGraphUtils.addSegment(mGraph.adjustPoint(pPrevDataPoint), pDataPoint, PlotThickness, pVertices, pUvs, pTriangles, mGraph.UnityGui); } else if (mPlotStyle == Style.Bar) { if (mGraph.UnityGui) { if (i >= mCanvasRenderers.Count) { GameObject pChildBarGo = NGraphUtils.AddGameObject(mGameObject, 0, "Bar - " + i); pCanvasRenderer = NGraphUtils.AddCanvasRenderer(pChildBarGo); mCanvasRenderers.Add(new KeyValuePair <GameObject, CanvasRenderer>(pChildBarGo, pCanvasRenderer)); } else { pCanvasRenderer = mCanvasRenderers[i].Value; } Material pMat = new Material(PlotMaterial); pMat.SetColor("_TintColor", PlotColor); pMat.SetVector("_Clipping", new Vector4(mClipping.x, mClipping.y, mClipping.z, mClipping.w)); pCanvasRenderer.SetMaterial(pMat, null); float h = pDataPoint.y - pZero.y; float top = pZero.y; NGraphUtils.DrawRect(new Rect(-mPlotThickness / 2 + pDataPoint.x, top, mPlotThickness, h), pCanvasRenderer); } else { if (i >= mMeshes.Count) { GameObject pChildBarGo = NGraphUtils.AddGameObject(mGameObject, 0, "Bar - " + i); NGraphUtils.AddMesh(pChildBarGo, out mMeshRenderer, out pMesh); mMeshes.Add(new KeyValuePair <GameObject, Mesh>(pChildBarGo, pMesh)); mMeshRenderer.material = new Material(PlotMaterial); mMeshRenderer.material.SetColor("_TintColor", PlotColor); mMeshRenderer.material.SetVector("_Clipping", new Vector4(mClipping.x, mClipping.y, mClipping.z, mClipping.w)); } else { pMesh = mMeshes[i].Value; } pMesh.Clear(); NGraphUtils.DrawRect(new Rect(-mPlotThickness / 2 + pDataPoint.x, pZero.y, mPlotThickness, pDataPoint.y - pZero.y), pMesh); } } } if (mPlotStyle == Style.Line) { if (mGraph.UnityGui) { if (mCanvasRenderers.Count == 0) { GameObject pChildBarGo = NGraphUtils.AddGameObject(mGameObject, 0, "Line"); pCanvasRenderer = NGraphUtils.AddCanvasRenderer(pChildBarGo); mCanvasRenderers.Add(new KeyValuePair <GameObject, CanvasRenderer>(pChildBarGo, pCanvasRenderer)); } else { pCanvasRenderer = mCanvasRenderers[0].Value; } Vector3[] e = new Vector3[4]; mGraph.GetComponent <RectTransform>().GetWorldCorners(e); Material pMat = new Material(PlotMaterial); pMat.SetColor("_TintColor", PlotColor); pMat.SetVector("_Clipping", new Vector4(mClipping.x, mClipping.y, mClipping.z, mClipping.w)); pCanvasRenderer.SetMaterial(pMat, null); List <UIVertex> vertices = new List <UIVertex>(pVertices.Count); for (int i = 0; i < pVertices.Count; i++) { UIVertex pVertex = new UIVertex(); pVertex.position = pVertices[i]; pVertex.uv0 = pUvs[i]; vertices.Add(pVertex); } pCanvasRenderer.SetVertices(vertices); } else { if (mMeshes.Count == 0) { GameObject pChildBarGo = NGraphUtils.AddGameObject(mGameObject, 0, "Line"); NGraphUtils.AddMesh(pChildBarGo, out mMeshRenderer, out pMesh); mMeshes.Add(new KeyValuePair <GameObject, Mesh>(pChildBarGo, pMesh)); mMeshRenderer.material = new Material(PlotMaterial); mMeshRenderer.material.SetColor("_TintColor", PlotColor); mMeshRenderer.material.SetVector("_Clipping", new Vector4(mClipping.x, mClipping.y, mClipping.z, mClipping.w)); } else { pMesh = mMeshes[0].Value; } pMesh.Clear(); pMesh.vertices = pVertices.ToArray(); pMesh.uv = pUvs.ToArray(); pMesh.triangles = pTriangles.ToArray(); } } // Draw data labels if available foreach (dataLabelStruct labelInfo in mDataLabels) { drawDataLabel(labelInfo); } }
protected override void _drawAxisBackground(List <UIVertex> pVertexList) { if (mAxisBackgroundMesh == null) { NGraphUtils.AddMesh(mAxesBackgroundGo, out mAxisBackgroundMeshRenderer, out mAxisBackgroundMesh); } mAxisBackgroundMesh.Clear(); /* * a b&m n&i j * p o * * * * l k * e f * c d&g h * */ List <Vector3> pVertices = new List <Vector3>(); List <Vector2> pUvs = new List <Vector2>(); List <int> pTriangles = new List <int>(); int idx = 0; UIVertex a = pVertexList[idx++]; UIVertex b = pVertexList[idx++]; UIVertex c = pVertexList[idx++]; UIVertex d = pVertexList[idx++]; UIVertex e = pVertexList[idx++]; UIVertex f = pVertexList[idx++]; UIVertex g = pVertexList[idx++]; UIVertex h = pVertexList[idx++]; UIVertex i = pVertexList[idx++]; UIVertex j = pVertexList[idx++]; UIVertex k = pVertexList[idx++]; UIVertex l = pVertexList[idx++]; UIVertex m = pVertexList[idx++]; UIVertex n = pVertexList[idx++]; UIVertex o = pVertexList[idx++]; UIVertex p = pVertexList[idx++]; //Left pVertices.Add(d.position); pVertices.Add(c.position); pVertices.Add(a.position); pVertices.Add(b.position); //Bottom pVertices.Add(h.position); pVertices.Add(g.position); pVertices.Add(e.position); pVertices.Add(f.position); //Right pVertices.Add(l.position); pVertices.Add(k.position); pVertices.Add(i.position); pVertices.Add(j.position); //Top pVertices.Add(p.position); pVertices.Add(o.position); pVertices.Add(m.position); pVertices.Add(n.position); //Left pUvs.Add(c.uv0); pUvs.Add(d.uv0); pUvs.Add(a.uv0); pUvs.Add(b.uv0); //Bottom pUvs.Add(e.uv0); pUvs.Add(f.uv0); pUvs.Add(g.uv0); pUvs.Add(h.uv0); //Right pUvs.Add(l.uv0); pUvs.Add(k.uv0); pUvs.Add(i.uv0); pUvs.Add(j.uv0); //Right pUvs.Add(m.uv0); pUvs.Add(n.uv0); pUvs.Add(p.uv0); pUvs.Add(o.uv0); //Left int offset = 0; pTriangles.Add(offset + 0); pTriangles.Add(offset + 2); pTriangles.Add(offset + 1); pTriangles.Add(offset + 1); pTriangles.Add(offset + 2); pTriangles.Add(offset + 3); //Bottom offset += 4; pTriangles.Add(offset + 0); pTriangles.Add(offset + 2); pTriangles.Add(offset + 1); pTriangles.Add(offset + 1); pTriangles.Add(offset + 2); pTriangles.Add(offset + 3); //Right offset += 4; pTriangles.Add(offset + 0); pTriangles.Add(offset + 2); pTriangles.Add(offset + 1); pTriangles.Add(offset + 1); pTriangles.Add(offset + 2); pTriangles.Add(offset + 3); //Top offset += 4; pTriangles.Add(offset + 0); pTriangles.Add(offset + 2); pTriangles.Add(offset + 1); pTriangles.Add(offset + 1); pTriangles.Add(offset + 2); pTriangles.Add(offset + 3); mAxisBackgroundMesh.vertices = pVertices.ToArray(); mAxisBackgroundMesh.uv = pUvs.ToArray(); mAxisBackgroundMesh.triangles = pTriangles.ToArray(); mAxisBackgroundMeshRenderer.material = AxisMaterial; mAxisBackgroundMeshRenderer.material.SetColor("_TintColor", MarginBackgroundColor); }