From 3a478c2abc394914c9eb6226c0c7e3b9372d3129 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Sat, 30 Nov 2019 21:24:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0GaugeChart=E4=BB=AA=E8=A1=A8?= =?UTF-8?q?=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/XCharts/CHANGELOG.md | 1 + .../XCharts/Demo/Runtime/Demo30_PieChart.cs | 44 +- Assets/XCharts/Demo/Runtime/Demo70_Gauge.cs | 70 + .../XCharts/Demo/Runtime/Demo70_Gauge.cs.meta | 11 + Assets/XCharts/Demo/Runtime/Demo_Test.cs | 21 +- .../Documentation/XCharts配置项手册.md | 60 +- Assets/XCharts/Editor/GaugeChartEditor.cs | 33 + .../XCharts/Editor/GaugeChartEditor.cs.meta | 11 + .../Editor/PropertyDrawers/AnimationDrawer.cs | 30 +- .../Editor/PropertyDrawers/GaugeAxisDrawer.cs | 82 + .../PropertyDrawers/GaugeAxisDrawer.cs.meta | 11 + .../PropertyDrawers/GaugeAxisLineDrawer.cs | 76 + .../GaugeAxisLineDrawer.cs.meta | 11 + .../GaugeAxisLineStageColorDrawer.cs | 33 + .../GaugeAxisLineStageColorDrawer.cs.meta | 11 + .../PropertyDrawers/GaugeAxisSplitDrawer.cs | 54 + .../GaugeAxisSplitDrawer.cs.meta | 11 + .../PropertyDrawers/GaugeAxisTickDrawer.cs | 57 + .../GaugeAxisTickDrawer.cs.meta | 11 + .../PropertyDrawers/GaugePointerDrawer.cs | 51 + .../GaugePointerDrawer.cs.meta | 11 + .../Editor/PropertyDrawers/SerieDrawer.cs | 333 +- .../PropertyDrawers/SerieLabelDrawer.cs | 5 +- .../PropertyDrawers/TitleStyleDrawer.cs | 51 + .../PropertyDrawers/TitleStyleDrawer.cs.meta | 11 + Assets/XCharts/Editor/XChartEditor.cs | 6 + Assets/XCharts/README.md | 4 +- Assets/XCharts/Runtime/Component/Main/Axis.cs | 120 +- .../XCharts/Runtime/Component/Main/Serie.cs | 145 +- .../XCharts/Runtime/Component/Main/Series.cs | 35 +- .../Runtime/Component/Sub/GaugeAxis.cs | 305 + .../Runtime/Component/Sub/GaugeAxis.cs.meta | 11 + .../Runtime/Component/Sub/GaugePointer.cs | 40 + .../Component/Sub/GaugePointer.cs.meta | 11 + .../Runtime/Component/Sub/SerieAnimation.cs | 29 +- .../Runtime/Component/Sub/SerieData.cs | 88 +- .../Runtime/Component/Sub/SerieLabel.cs | 5 + .../Runtime/Component/Sub/TitleStyle.cs | 109 + .../Runtime/Component/Sub/TitleStyle.cs.meta | 11 + Assets/XCharts/Runtime/GaugeChart.cs | 432 + Assets/XCharts/Runtime/GaugeChart.cs.meta | 11 + Assets/XCharts/Runtime/Internal/BaseChart.cs | 107 +- .../Runtime/Internal/CoordinateChart.cs | 25 +- .../Internal/CoordinateChart_DrawBar.cs | 12 +- .../Internal/CoordinateChart_DrawHeatmap.cs | 1 + .../Internal/CoordinateChart_DrawLine.cs | 70 +- .../Internal/CoordinateChart_DrawScatter.cs | 1 + .../XCharts/Runtime/Internal/LabelObject.cs | 96 + .../Runtime/Internal/LabelObject.cs.meta | 11 + .../Runtime/Internal/SerieLabelPool.cs | 6 +- Assets/XCharts/Runtime/PieChart.cs | 190 +- Assets/XCharts/Runtime/Utility/ChartHelper.cs | 30 + Assets/XChartsDemo/demo_xchart.unity | 162667 ++++++++++++++- 53 files changed, 156699 insertions(+), 8979 deletions(-) create mode 100644 Assets/XCharts/Demo/Runtime/Demo70_Gauge.cs create mode 100644 Assets/XCharts/Demo/Runtime/Demo70_Gauge.cs.meta create mode 100644 Assets/XCharts/Editor/GaugeChartEditor.cs create mode 100644 Assets/XCharts/Editor/GaugeChartEditor.cs.meta create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugeAxisDrawer.cs create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugeAxisDrawer.cs.meta create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugeAxisLineDrawer.cs create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugeAxisLineDrawer.cs.meta create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugeAxisLineStageColorDrawer.cs create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugeAxisLineStageColorDrawer.cs.meta create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugeAxisSplitDrawer.cs create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugeAxisSplitDrawer.cs.meta create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugeAxisTickDrawer.cs create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugeAxisTickDrawer.cs.meta create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugePointerDrawer.cs create mode 100644 Assets/XCharts/Editor/PropertyDrawers/GaugePointerDrawer.cs.meta create mode 100644 Assets/XCharts/Editor/PropertyDrawers/TitleStyleDrawer.cs create mode 100644 Assets/XCharts/Editor/PropertyDrawers/TitleStyleDrawer.cs.meta create mode 100644 Assets/XCharts/Runtime/Component/Sub/GaugeAxis.cs create mode 100644 Assets/XCharts/Runtime/Component/Sub/GaugeAxis.cs.meta create mode 100644 Assets/XCharts/Runtime/Component/Sub/GaugePointer.cs create mode 100644 Assets/XCharts/Runtime/Component/Sub/GaugePointer.cs.meta create mode 100644 Assets/XCharts/Runtime/Component/Sub/TitleStyle.cs create mode 100644 Assets/XCharts/Runtime/Component/Sub/TitleStyle.cs.meta create mode 100644 Assets/XCharts/Runtime/GaugeChart.cs create mode 100644 Assets/XCharts/Runtime/GaugeChart.cs.meta create mode 100644 Assets/XCharts/Runtime/Internal/LabelObject.cs create mode 100644 Assets/XCharts/Runtime/Internal/LabelObject.cs.meta diff --git a/Assets/XCharts/CHANGELOG.md b/Assets/XCharts/CHANGELOG.md index f94f397d..e5f3a012 100644 --- a/Assets/XCharts/CHANGELOG.md +++ b/Assets/XCharts/CHANGELOG.md @@ -1,6 +1,7 @@ # 更新日志 +* (2019.11.30) 增加`GaugeChart`仪表盘 * (2019.11.22) 修复`BarChart`清空数据重新赋值后`SerieLabel`显示异常的问题 * (2019.11.16) 修复`SerieLabel`设置`color`等参数不生效的问题 * (2019.11.12) 发布`v1.0.5`版本 diff --git a/Assets/XCharts/Demo/Runtime/Demo30_PieChart.cs b/Assets/XCharts/Demo/Runtime/Demo30_PieChart.cs index 1ae027c7..90f506be 100644 --- a/Assets/XCharts/Demo/Runtime/Demo30_PieChart.cs +++ b/Assets/XCharts/Demo/Runtime/Demo30_PieChart.cs @@ -66,10 +66,10 @@ namespace XCharts chart.RemoveData(); serie = chart.AddSerie(SerieType.Pie, "访问来源"); - serie.pieRadius[0] = 0; - serie.pieRadius[1] = 110; - serie.pieCenter[0] = 0.5f; - serie.pieCenter[1] = 0.4f; + serie.radius[0] = 0; + serie.radius[1] = 110; + serie.center[0] = 0.5f; + serie.center[1] = 0.4f; chart.AddData(0, 335, "直接访问"); chart.AddData(0, 310, "邮件营销"); chart.AddData(0, 243, "联盟广告"); @@ -105,10 +105,10 @@ namespace XCharts IEnumerator Doughnut() { chart.title.subText = "圆环图"; - serie.pieRadius[0] = 2f; - while (serie.pieRadius[0] < serie.pieRadius[1] * 0.7f) + serie.radius[0] = 2f; + while (serie.radius[0] < serie.radius[1] * 0.7f) { - serie.pieRadius[0] += m_RadiusSpeed * Time.deltaTime; + serie.radius[0] += m_RadiusSpeed * Time.deltaTime; chart.RefreshChart(); yield return null; } @@ -134,14 +134,14 @@ namespace XCharts chart.AddData(1, 335, "直达"); chart.AddData(1, 679, "营销广告"); chart.AddData(1, 1548, "搜索引擎"); - serie1.pieRadius[0] = 0; - serie1.pieRadius[1] = 2f; - serie1.pieCenter[0] = 0.5f; - serie1.pieCenter[1] = 0.4f; + serie1.radius[0] = 0; + serie1.radius[1] = 2f; + serie1.center[0] = 0.5f; + serie1.center[1] = 0.4f; chart.RefreshChart(); - while (serie1.pieRadius[1] < serie.pieRadius[0] * 0.75f) + while (serie1.radius[1] < serie.radius[0] * 0.75f) { - serie1.pieRadius[1] += m_RadiusSpeed * Time.deltaTime; + serie1.radius[1] += m_RadiusSpeed * Time.deltaTime; chart.RefreshChart(); yield return null; } @@ -163,7 +163,7 @@ namespace XCharts chart.legend.show = false; serie1.ClearData(); serie.ClearData(); - serie1.pieRadius = serie.pieRadius = new float[2] { 0, 80 }; + serie1.radius = serie.radius = new float[2] { 0, 80 }; serie1.label.position = SerieLabel.Position.Outside; serie1.label.lineType = SerieLabel.LineType.Curves; serie1.label.color = Color.clear; @@ -179,24 +179,24 @@ namespace XCharts chart.AddData(i, 40, "rose8"); } - while (serie.pieCenter[0] > 0.25f || serie1.pieCenter[0] < 0.7f) + while (serie.center[0] > 0.25f || serie1.center[0] < 0.7f) { - if (serie.pieCenter[0] > 0.25f) serie.pieCenter[0] -= m_CenterSpeed * Time.deltaTime; - if (serie1.pieCenter[0] < 0.7f) serie1.pieCenter[0] += m_CenterSpeed * Time.deltaTime; + if (serie.center[0] > 0.25f) serie.center[0] -= m_CenterSpeed * Time.deltaTime; + if (serie1.center[0] < 0.7f) serie1.center[0] += m_CenterSpeed * Time.deltaTime; chart.RefreshChart(); yield return null; } yield return new WaitForSeconds(1); - while (serie.pieRadius[0] > 3f) + while (serie.radius[0] > 3f) { - serie.pieRadius[0] -= m_RadiusSpeed * Time.deltaTime; - serie1.pieRadius[0] -= m_RadiusSpeed * Time.deltaTime; + serie.radius[0] -= m_RadiusSpeed * Time.deltaTime; + serie1.radius[0] -= m_RadiusSpeed * Time.deltaTime; chart.RefreshChart(); yield return null; } - serie.pieRadius[0] = 0; - serie1.pieRadius[0] = 0; + serie.radius[0] = 0; + serie1.radius[0] = 0; serie.pieRoseType = RoseType.Area; serie1.pieRoseType = RoseType.Radius; chart.RefreshChart(); diff --git a/Assets/XCharts/Demo/Runtime/Demo70_Gauge.cs b/Assets/XCharts/Demo/Runtime/Demo70_Gauge.cs new file mode 100644 index 00000000..d97a90f9 --- /dev/null +++ b/Assets/XCharts/Demo/Runtime/Demo70_Gauge.cs @@ -0,0 +1,70 @@ +using System.Runtime.InteropServices; +/******************************************/ +/* */ +/* Copyright (c) 2018 monitor1394 */ +/* https://github.com/monitor1394 */ +/* */ +/******************************************/ + + +using UnityEngine; + +namespace XCharts +{ + [DisallowMultipleComponent] + [ExecuteInEditMode] + public class Demo70_Gauge : MonoBehaviour + { + private GaugeChart chart; + private float updateTime; + + void Awake() + { + chart = gameObject.GetComponent(); + if (chart == null) + { + chart = gameObject.AddComponent(); + } + chart.title.text = "GaugeChart"; + chart.RemoveData(); + + var serie = chart.AddSerie(SerieType.Gauge, "速度"); + serie.min = 0; + serie.max = 220; + serie.startAngle = -125; + serie.endAngle = 125; + serie.center[0] = 0.5f; + serie.center[1] = 0.5f; + serie.radius[0] = 80; + serie.splitNumber = 5; + serie.animation.updateAnimation = true; + serie.arcShaped = true; + + serie.titleStyle.show = true; + serie.titleStyle.textStyle.offset = new Vector2(0, 20); + + serie.label.show = true; + serie.label.offset = new Vector3(0, -20); + + serie.gaugeAxis.show = true; + serie.gaugeAxis.axisLine.width = 15; + + serie.gaugePointer.show = true; + serie.gaugePointer.width = 15; + + var value = UnityEngine.Random.Range(serie.min, serie.max); + chart.AddData(0, value, "km/h"); + } + + void Update() + { + updateTime += Time.deltaTime; + if (updateTime > 2) + { + updateTime = 0; + var value = UnityEngine.Random.Range(0, 220); + chart.UpdateData(0, 0, value); + } + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Demo/Runtime/Demo70_Gauge.cs.meta b/Assets/XCharts/Demo/Runtime/Demo70_Gauge.cs.meta new file mode 100644 index 00000000..d5569309 --- /dev/null +++ b/Assets/XCharts/Demo/Runtime/Demo70_Gauge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 250f744fcb07d4401994d964c4369d9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Demo/Runtime/Demo_Test.cs b/Assets/XCharts/Demo/Runtime/Demo_Test.cs index cb171b5c..b78d166e 100644 --- a/Assets/XCharts/Demo/Runtime/Demo_Test.cs +++ b/Assets/XCharts/Demo/Runtime/Demo_Test.cs @@ -14,27 +14,24 @@ namespace XCharts [ExecuteInEditMode] public class Demo_Test : MonoBehaviour { - LineChart chart; + private float updateTime = 0; + CoordinateChart chart; void Awake() { - chart = gameObject.GetComponent(); + chart = gameObject.GetComponent(); if (chart == null) { - chart = gameObject.AddComponent(); + chart = gameObject.AddComponent(); } - - var buttom = transform.parent.gameObject.GetComponentInChildren