private Vector3 GetLabelPosition(PolarCoord polar, Axis axis, float startAngle, float totalWidth) { var cenPos = polar.context.center; var dire = ChartHelper.GetDire(startAngle, true).normalized; var tickLength = axis.axisTick.GetLength(chart.theme.axis.tickLength); var tickVector = ChartHelper.GetVertialDire(dire) * (tickLength + axis.axisLabel.distance); return(ChartHelper.GetPos(cenPos, totalWidth, startAngle, true) + tickVector); }
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; } }
private Vector3 GetPolarPos(PolarCoord m_Polar, AngleAxis m_AngleAxis, SerieData serieData, double min, double max, float polarRadius) { var angle = 0f; if (!m_AngleAxis.clockwise) { angle = m_AngleAxis.GetValueAngle((float)serieData.GetData(1)); } else { angle = m_AngleAxis.GetValueAngle((float)serieData.GetData(1)); } var value = serieData.GetData(0); var radius = (float)((value - min) / (max - min) * polarRadius); angle = (angle + 360) % 360; serieData.context.angle = angle; serieData.context.position = ChartHelper.GetPos(m_Polar.context.center, radius, angle, true); return(serieData.context.position); }
public static void UpdatePolarCenter(PolarCoord polar, Vector3 chartPosition, float chartWidth, float chartHeight) { if (polar.center.Length < 2) { return; } var centerX = polar.center[0] <= 1 ? chartWidth * polar.center[0] : polar.center[0]; var centerY = polar.center[1] <= 1 ? chartHeight * polar.center[1] : polar.center[1]; polar.context.center = chartPosition + new Vector3(centerX, centerY); if (polar.radius <= 0) { polar.context.radius = 0; } else if (polar.radius <= 1) { polar.context.radius = Mathf.Min(chartWidth, chartHeight) * polar.radius; } else { polar.context.radius = polar.radius; } }
private void DrawPolarLine(VertexHelper vh, Serie serie) { var datas = serie.data; if (datas.Count <= 0) { return; } m_SeriePolar = chart.GetChartComponent <PolarCoord>(serie.polarIndex); if (m_SeriePolar == null) { return; } var m_AngleAxis = ComponentHelper.GetAngleAxis(chart.components, m_SeriePolar.index); var m_RadiusAxis = ComponentHelper.GetRadiusAxis(chart.components, m_SeriePolar.index); if (m_AngleAxis == null || m_RadiusAxis == null) { return; } var startAngle = m_AngleAxis.startAngle; var radius = m_SeriePolar.context.radius; var min = m_RadiusAxis.context.minValue; var max = m_RadiusAxis.context.maxValue; var firstSerieData = datas[0]; var lp = GetPolarPos(m_SeriePolar, m_AngleAxis, firstSerieData, min, max, radius); var cp = Vector3.zero; var lineColor = SerieHelper.GetLineColor(serie, null, chart.theme, serie.index, serie.highlight); var lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth); var currDetailProgress = 0f; var totalDetailProgress = datas.Count; serie.animation.InitProgress(currDetailProgress, totalDetailProgress); var ltp = Vector3.zero; var lbp = Vector3.zero; var ntp = Vector3.zero; var nbp = Vector3.zero; var itp = Vector3.zero; var ibp = Vector3.zero; var clp = Vector3.zero; var crp = Vector3.zero; bool bitp = true, bibp = true; for (int i = 1; i < datas.Count; i++) { if (serie.animation.CheckDetailBreak(i)) { break; } var serieData = datas[i]; cp = GetPolarPos(m_SeriePolar, m_AngleAxis, datas[i], min, max, radius); var np = i == datas.Count - 1 ? cp : GetPolarPos(m_SeriePolar, m_AngleAxis, datas[i + 1], min, max, radius); UGLHelper.GetLinePoints(lp, cp, np, lineWidth, ref ltp, ref lbp, ref ntp, ref nbp, ref itp, ref ibp, ref clp, ref crp, ref bitp, ref bibp, i); if (i == 1) { UGL.AddVertToVertexHelper(vh, ltp, lbp, lineColor, false); } if (bitp == bibp) { if (bitp) { UGL.AddVertToVertexHelper(vh, itp, ibp, lineColor, true); } else { UGL.AddVertToVertexHelper(vh, ltp, clp, lineColor, true); UGL.AddVertToVertexHelper(vh, ltp, crp, lineColor, true); } } else { if (bitp) { UGL.AddVertToVertexHelper(vh, itp, clp, lineColor, true); UGL.AddVertToVertexHelper(vh, itp, crp, lineColor, true); } else if (bibp) { UGL.AddVertToVertexHelper(vh, clp, ibp, lineColor, true); UGL.AddVertToVertexHelper(vh, crp, ibp, lineColor, true); } } lp = cp; } if (!serie.animation.IsFinish()) { serie.animation.CheckProgress(totalDetailProgress); serie.animation.CheckSymbol(serie.symbol.GetSize(null, chart.theme.serie.lineSymbolSize)); chart.RefreshChart(); } }