diff --git a/Assets/XCharts/Scripts/Editor/BaseChartEditor.cs b/Assets/XCharts/Scripts/Editor/BaseChartEditor.cs
index 228442a0..108c11e1 100644
--- a/Assets/XCharts/Scripts/Editor/BaseChartEditor.cs
+++ b/Assets/XCharts/Scripts/Editor/BaseChartEditor.cs
@@ -20,9 +20,8 @@ namespace XCharts
protected SerializedProperty m_Legend;
protected SerializedProperty m_Tooltip;
protected SerializedProperty m_Series;
-
+ protected SerializedProperty m_Settings;
protected SerializedProperty m_Large;
- protected SerializedProperty m_LineSmoothStyle;
protected float m_DefaultLabelWidth;
protected float m_DefaultFieldWidth;
@@ -43,7 +42,7 @@ namespace XCharts
m_Series = serializedObject.FindProperty("m_Series");
m_Large = serializedObject.FindProperty("m_Large");
- m_LineSmoothStyle = serializedObject.FindProperty("m_LineSmoothStyle");
+ m_Settings = serializedObject.FindProperty("m_Settings");
}
public override void OnInspectorGUI()
@@ -78,17 +77,7 @@ namespace XCharts
protected virtual void OnMiddleInspectorGUI()
{
EditorGUILayout.PropertyField(m_Series, true);
- m_BaseModuleToggle = EditorGUILayout.Foldout(m_BaseModuleToggle,
- new GUIContent("Settings", "基础配置"),
- ChartEditorHelper.foldoutStyle);
- if (m_BaseModuleToggle)
- {
- EditorGUI.indentLevel++;
- var largeTip = "Whether to enable the optimization of large-scale graph. \n是否启用大规模线图的优化,在数据图形特别多的时候(>=5k)可以开启。";
- EditorGUILayout.PropertyField(m_Large, new GUIContent("Large", largeTip));
- EditorGUILayout.PropertyField(m_LineSmoothStyle,true);
- EditorGUI.indentLevel--;
- }
+ EditorGUILayout.PropertyField(m_Settings, true);
}
protected virtual void OnEndInspectorGUI()
diff --git a/Assets/XCharts/Scripts/Editor/PropertyDrawers/SettingsDrawer.cs b/Assets/XCharts/Scripts/Editor/PropertyDrawers/SettingsDrawer.cs
new file mode 100644
index 00000000..e60b1e7e
--- /dev/null
+++ b/Assets/XCharts/Scripts/Editor/PropertyDrawers/SettingsDrawer.cs
@@ -0,0 +1,49 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace XCharts
+{
+ [CustomPropertyDrawer(typeof(Settings), true)]
+ public class SettingsDrawer : PropertyDrawer
+ {
+ private bool m_SettingsModuleToggle = false;
+
+ public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label)
+ {
+ Rect drawRect = pos;
+ drawRect.height = EditorGUIUtility.singleLineHeight;
+
+ SerializedProperty m_LineSmoothStyle = prop.FindPropertyRelative("m_LineSmoothStyle");
+ SerializedProperty m_LineSmoothness = prop.FindPropertyRelative("m_LineSmoothness");
+ SerializedProperty m_LineSegmentDistance = prop.FindPropertyRelative("m_LineSegmentDistance");
+ SerializedProperty m_CicleSmoothness = prop.FindPropertyRelative("m_CicleSmoothness");
+
+ ChartEditorHelper.MakeFoldout(ref drawRect, ref m_SettingsModuleToggle, "Settings");
+ EditorGUI.LabelField(drawRect, "Settings", EditorStyles.boldLabel);
+ drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
+ if (m_SettingsModuleToggle)
+ {
+ ++EditorGUI.indentLevel;
+ EditorGUI.PropertyField(drawRect, m_LineSmoothStyle);
+ drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
+ EditorGUI.PropertyField(drawRect, m_LineSmoothness);
+ drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
+ EditorGUI.PropertyField(drawRect, m_LineSegmentDistance);
+ drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
+ EditorGUI.PropertyField(drawRect, m_CicleSmoothness);
+ drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
+ --EditorGUI.indentLevel;
+ }
+ }
+
+ public override float GetPropertyHeight(SerializedProperty prop, GUIContent label)
+ {
+ int num = 1;
+ if (m_SettingsModuleToggle)
+ {
+ num = 5;
+ }
+ return num * EditorGUIUtility.singleLineHeight + (num - 1) * EditorGUIUtility.standardVerticalSpacing;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/XCharts/Scripts/Editor/PropertyDrawers/SettingsDrawer.cs.meta b/Assets/XCharts/Scripts/Editor/PropertyDrawers/SettingsDrawer.cs.meta
new file mode 100644
index 00000000..11a0c6c6
--- /dev/null
+++ b/Assets/XCharts/Scripts/Editor/PropertyDrawers/SettingsDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 70536a1ba3af245e7ad3b11e97682d8d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/XCharts/Scripts/UI/Component/Radar.cs b/Assets/XCharts/Scripts/UI/Component/Radar.cs
index 3f16bafa..d0cd10c3 100644
--- a/Assets/XCharts/Scripts/UI/Component/Radar.cs
+++ b/Assets/XCharts/Scripts/UI/Component/Radar.cs
@@ -191,7 +191,7 @@ namespace XCharts
radar.center[0] = 0.5f;
radar.center[1] = 0.45f;
radar.splitArea.show = true;
- radar.lineStyle.width = 0.3f;
+ radar.lineStyle.width = 0.6f;
return radar;
}
}
diff --git a/Assets/XCharts/Scripts/UI/Component/Settings.cs b/Assets/XCharts/Scripts/UI/Component/Settings.cs
new file mode 100644
index 00000000..d86d772c
--- /dev/null
+++ b/Assets/XCharts/Scripts/UI/Component/Settings.cs
@@ -0,0 +1,46 @@
+using UnityEngine;
+using System;
+
+namespace XCharts
+{
+ ///
+ /// Global parameter setting component. The default value can be used in general, and can be adjusted when necessary.
+ /// 全局参数设置组件。一般情况下可使用默认值,当有需要时可进行调整。
+ ///
+ [Serializable]
+ public class Settings
+ {
+ [SerializeField] [Range(1, 10)] protected float m_LineSmoothStyle = 3f;
+ [SerializeField] [Range(1f, 20)] protected float m_LineSmoothness = 2f;
+ [SerializeField] [Range(1f, 20)] protected float m_LineSegmentDistance = 3f;
+ [SerializeField] [Range(1, 10)] protected float m_CicleSmoothness = 2f;
+
+ ///
+ /// Curve smoothing factor. By adjusting the smoothing coefficient, the curvature of the curve can be changed,
+ /// and different curves with slightly different appearance can be obtained.
+ /// 曲线平滑系数。通过调整平滑系数可以改变曲线的曲率,得到外观稍微有变化的不同曲线。
+ ///
+ public float lineSmoothStyle { get { return m_LineSmoothStyle; } set { m_LineSmoothStyle = value <= 0 ? 1f : value; } }
+ ///
+ /// Smoothness of curve. The smaller the value, the smoother the curve, but the number of vertices will increase.
+ /// When the area with gradient is filled, the larger the value, the worse the transition effect.
+ /// 曲线平滑度。值越小曲线越平滑,但顶点数也会随之增加。当开启有渐变的区域填充时,数值越大渐变过渡效果越差。
+ ///
+ ///
+ public float lineSmoothness { get { return m_LineSmoothness; } set { m_LineSmoothness = value <= 0 ? 1f : value; } }
+ ///
+ /// The partition distance of a line segment. A line in a normal line chart is made up of many segments,
+ /// the number of which is determined by the change in value. The smaller the number of segments,
+ /// the higher the number of vertices. When the area with gradient is filled, the larger the value, the worse the transition effect.
+ /// 线段的分割距离。普通折线图的线是由很多线段组成,段数由该数值决定。值越小段数越多,但顶点数也会随之增加。当开启有渐变的区域填充时,数值越大渐变过渡效果越差。
+ ///
+ ///
+ public float lineSegmentDistance { get { return m_LineSegmentDistance; } set { m_LineSegmentDistance = value <= 0 ? 1f : value; } }
+ ///
+ /// the smoothess of cricle.
+ /// 圆形的平滑度。数越小圆越平滑,但顶点数也会随之增加。
+ ///
+ public float cicleSmoothness { get { return m_CicleSmoothness; } set { m_CicleSmoothness = value <= 0 ? 1f : value; } }
+
+ }
+}
\ No newline at end of file
diff --git a/Assets/XCharts/Scripts/UI/Component/Settings.cs.meta b/Assets/XCharts/Scripts/UI/Component/Settings.cs.meta
new file mode 100644
index 00000000..955b36cb
--- /dev/null
+++ b/Assets/XCharts/Scripts/UI/Component/Settings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f3d421d759f9447daab3a45e123f13a7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/XCharts/Scripts/UI/Internal/BaseChart.cs b/Assets/XCharts/Scripts/UI/Internal/BaseChart.cs
index 382bb561..0b991aa1 100644
--- a/Assets/XCharts/Scripts/UI/Internal/BaseChart.cs
+++ b/Assets/XCharts/Scripts/UI/Internal/BaseChart.cs
@@ -39,8 +39,8 @@ namespace XCharts
[SerializeField] protected Legend m_Legend = Legend.defaultLegend;
[SerializeField] protected Tooltip m_Tooltip = Tooltip.defaultTooltip;
[SerializeField] protected Series m_Series = Series.defaultSeries;
+ [SerializeField] protected Settings m_Settings = new Settings();
[SerializeField] protected float m_Large = 1;
- [SerializeField] [Range(1, 8)] protected float m_LineSmoothStyle = 2f;
[SerializeField] protected Action m_CustomDrawCallback;
[NonSerialized] private Theme m_CheckTheme = 0;
@@ -184,7 +184,7 @@ namespace XCharts
var legendObject = ChartHelper.AddObject(s_LegendObjectName, transform, anchorMin, anchorMax,
pivot, new Vector2(chartWidth, chartHeight));
legendObject.transform.localPosition = m_Legend.location.GetPosition(chartWidth, chartHeight);
-
+
m_LegendRealShowName = m_Series.GetSerieNameList();
List datas;
if (m_Legend.show && m_Legend.data.Count > 0)
@@ -642,12 +642,10 @@ namespace XCharts
case SerieSymbolType.None:
break;
case SerieSymbolType.Circle:
- ChartDrawer.DrawCricle(vh, pos, symbolSize, color, GetSymbolCricleSegment(symbolSize));
+ ChartDrawer.DrawCricle(vh, pos, symbolSize, color, m_Settings.cicleSmoothness);
break;
case SerieSymbolType.EmptyCircle:
- int segment = GetSymbolCricleSegment(symbolSize);
- ChartDrawer.DrawCricle(vh, pos, symbolSize, m_ThemeInfo.backgroundColor, segment);
- ChartDrawer.DrawDoughnut(vh, pos, symbolSize - tickness, symbolSize, 0, 360, color, segment);
+ ChartDrawer.DrawEmptyCricle(vh, pos, symbolSize, tickness, color, m_ThemeInfo.backgroundColor, m_Settings.cicleSmoothness);
break;
case SerieSymbolType.Rect:
ChartDrawer.DrawPolygon(vh, pos, symbolSize, color);
@@ -719,15 +717,6 @@ namespace XCharts
}
}
- private int GetSymbolCricleSegment(float radiu)
- {
- int max = 50;
- int segent = (int)(2 * Mathf.PI * radiu / ChartDrawer.CRICLE_SMOOTHNESS);
- if (segent > max) segent = max;
- segent = (int)(segent / (1 + (m_Large - 1) / 10));
- return segent;
- }
-
public virtual void OnPointerDown(PointerEventData eventData)
{
}
diff --git a/Assets/XCharts/Scripts/UI/Internal/BaseChart_API.cs b/Assets/XCharts/Scripts/UI/Internal/BaseChart_API.cs
index c84aa622..8040350c 100644
--- a/Assets/XCharts/Scripts/UI/Internal/BaseChart_API.cs
+++ b/Assets/XCharts/Scripts/UI/Internal/BaseChart_API.cs
@@ -40,15 +40,7 @@ namespace XCharts
/// The height of chart.
/// 图表的高
///
- ///
public float chartHeight { get { return m_ChartHeight; } }
-
- ///
- /// the smooth line chart style.
- /// 平滑折线图的平滑系数。
- ///
- ///
- public float lineSmoothStyle { get { return m_LineSmoothStyle; } set { m_LineSmoothStyle = value; } }
///
/// 自定义绘制回调。
///
diff --git a/Assets/XCharts/Scripts/UI/Internal/CoordinateChart_DrawLine.cs b/Assets/XCharts/Scripts/UI/Internal/CoordinateChart_DrawLine.cs
index f9ec1250..b70a613a 100644
--- a/Assets/XCharts/Scripts/UI/Internal/CoordinateChart_DrawLine.cs
+++ b/Assets/XCharts/Scripts/UI/Internal/CoordinateChart_DrawLine.cs
@@ -288,47 +288,6 @@ namespace XCharts
return showData[index].data[1];
}
- private float GetDetailProgress(Serie serie, Axis axis, Vector3 lp, Vector3 np, Vector3 llp,
- Vector3 nnp, bool fine)
- {
- var isYAxis = axis is YAxis;
- float progress = 0;
- switch (serie.lineType)
- {
- case LineType.Normal:
- var lineWidth = serie.lineStyle.width;
- var ySmall = Mathf.Abs(lp.y - np.y) < lineWidth * 3;
- var xSmall = Mathf.Abs(lp.x - np.x) < lineWidth * 3;
- if ((isYAxis && ySmall) || (!isYAxis && xSmall))
- {
- progress = 1;
- }
- else
- {
- progress = Vector3.Distance(lp, np) / 3f - 1;
- }
- break;
- case LineType.Smooth:
- ChartHelper.GetBezierList(ref bezierPoints, lp, np, llp, nnp, fine, lineSmoothStyle);
- if (bezierPoints.Count > 0) progress = bezierPoints.Count - 1;
- break;
- case LineType.StepStart:
- var middle = isYAxis ? new Vector3(np.x, lp.y) : new Vector3(lp.x, np.y);
- progress = (Vector3.Distance(middle, np)) / 3f - 1;
- break;
- case LineType.StepMiddle:
- var middle1 = isYAxis ? new Vector2(lp.x, (lp.y + np.y) / 2) : new Vector2((lp.x + np.x) / 2, lp.y);
- var middle2 = isYAxis ? new Vector2(np.x, (lp.y + np.y) / 2) : new Vector2((lp.x + np.x) / 2, np.y);
- progress = (Vector3.Distance(lp, middle1) + Vector3.Distance(middle2, np)) / 3f - 1;
- break;
- case LineType.StepEnd:
- middle = isYAxis ? new Vector3(lp.x, np.y) : new Vector3(np.x, lp.y);
- progress = Vector3.Distance(lp, middle) / 3f - 1;
- break;
- }
- return progress;
- }
-
private float GetDataPoint(Axis xAxis, Axis yAxis, List showData, float yValue, float startX, int i,
float scaleWid, float serieHig, ref Vector3 np)
{
@@ -547,9 +506,7 @@ namespace XCharts
var smoothPoints = serie.GetUpSmoothList(dataIndex);
var smoothDownPoints = serie.GetDownSmoothList(dataIndex);
var dist = Vector3.Distance(lp, np);
- var fine = m_Series.IsAnyGradientSerie(serie.stack);
- var tick = fine ? 3f : 3f; // 3f:30f
- int segment = (int)(dist / tick);
+ int segment = (int)(dist / m_Settings.lineSegmentDistance);
if (segment <= 3) segment = (int)(dist / lineWidth);
smoothPoints.Clear();
smoothDownPoints.Clear();
@@ -883,8 +840,8 @@ namespace XCharts
var smoothPoints = serie.GetUpSmoothList(dataIndex);
var smoothDownPoints = serie.GetDownSmoothList(dataIndex);
var fine = isStack && m_Series.IsAnyGradientSerie(serie.stack);
- if (isYAxis) ChartHelper.GetBezierListVertical(ref bezierPoints, lp, np, fine, lineSmoothStyle);
- else ChartHelper.GetBezierList(ref bezierPoints, lp, np, llp, nnp, fine, lineSmoothStyle);
+ if (isYAxis) ChartHelper.GetBezierListVertical(ref bezierPoints, lp, np, m_Settings.lineSmoothness, m_Settings.lineSmoothStyle);
+ else ChartHelper.GetBezierList(ref bezierPoints, lp, np, llp, nnp, m_Settings.lineSmoothness, m_Settings.lineSmoothStyle);
Vector3 start, to;
if (serie.lineType == LineType.SmoothDash)
@@ -1101,7 +1058,7 @@ namespace XCharts
if (Vector3.Distance(lp, middle) > 2 * lineWidth)
{
- ChartHelper.GetPointList(ref linePointList, start, middle - diff1, 3f);
+ ChartHelper.GetPointList(ref linePointList, start, middle - diff1, m_Settings.lineSegmentDistance);
sp = linePointList[0];
for (int i = 1; i < linePointList.Count; i++)
{
@@ -1128,7 +1085,7 @@ namespace XCharts
}
}
- ChartHelper.GetPointList(ref linePointList, middle + diff2, end, 3f);
+ ChartHelper.GetPointList(ref linePointList, middle + diff2, end, m_Settings.lineSegmentDistance);
sp = linePointList[0];
for (int i = 1; i < linePointList.Count; i++)
{
@@ -1165,7 +1122,7 @@ namespace XCharts
//draw lp to middle1
if (Vector3.Distance(lp, middle1) > 2 * lineWidth)
{
- ChartHelper.GetPointList(ref linePointList, start, middle1 - diff1, 3f);
+ ChartHelper.GetPointList(ref linePointList, start, middle1 - diff1, m_Settings.lineSegmentDistance);
sp = linePointList[0];
for (int i = 1; i < linePointList.Count; i++)
{
@@ -1194,7 +1151,7 @@ namespace XCharts
//draw middle1 to middle2
if (Vector3.Distance(middle1, middle2) > 2 * lineWidth)
{
- ChartHelper.GetPointList(ref linePointList, middle1 + diff2, middle2 - diff2, 3f);
+ ChartHelper.GetPointList(ref linePointList, middle1 + diff2, middle2 - diff2, m_Settings.lineSegmentDistance);
sp = linePointList[0];
for (int i = 1; i < linePointList.Count; i++)
{
@@ -1215,7 +1172,7 @@ namespace XCharts
//draw middle2 to np
if (Vector3.Distance(middle2, np) > 2 * lineWidth)
{
- ChartHelper.GetPointList(ref linePointList, middle2 + diff1, np - diff1, 3f);
+ ChartHelper.GetPointList(ref linePointList, middle2 + diff1, np - diff1, m_Settings.lineSegmentDistance);
sp = linePointList[0];
for (int i = 1; i < linePointList.Count; i++)
{
@@ -1250,7 +1207,7 @@ namespace XCharts
if (Vector3.Distance(lp, middle) > 2 * lineWidth)
{
- ChartHelper.GetPointList(ref linePointList, start, middle - diff1, 3f);
+ ChartHelper.GetPointList(ref linePointList, start, middle - diff1, m_Settings.lineSegmentDistance);
sp = linePointList[0];
for (int i = 1; i < linePointList.Count; i++)
{
@@ -1278,7 +1235,7 @@ namespace XCharts
if (Vector3.Distance(middle, np) > 2 * lineWidth)
{
- ChartHelper.GetPointList(ref linePointList, middle + diff2, end, 3f);
+ ChartHelper.GetPointList(ref linePointList, middle + diff2, end, m_Settings.lineSegmentDistance);
sp = linePointList[0];
for (int i = 1; i < linePointList.Count; i++)
{
diff --git a/Assets/XCharts/Scripts/UI/PieChart.cs b/Assets/XCharts/Scripts/UI/PieChart.cs
index 42c0873a..c48bee3c 100644
--- a/Assets/XCharts/Scripts/UI/PieChart.cs
+++ b/Assets/XCharts/Scripts/UI/PieChart.cs
@@ -140,12 +140,12 @@ namespace XCharts
center.y + serieData.pieOffsetRadius * currCos);
ChartDrawer.DrawDoughnut(vh, serieData.pieOffsetCenter, serieData.pieInsideRadius, serieData.pieOutsideRadius,
- startDegree, serieData.pieCurrAngle, color);
+ color, m_ThemeInfo.backgroundColor, m_Settings.cicleSmoothness, startDegree, serieData.pieCurrAngle);
}
else
{
ChartDrawer.DrawDoughnut(vh, center, serieData.pieInsideRadius, serieData.pieOutsideRadius,
- startDegree, serieData.pieCurrAngle, color);
+ color, m_ThemeInfo.backgroundColor, m_Settings.cicleSmoothness, startDegree, serieData.pieCurrAngle);
}
serieData.canShowLabel = serieData.pieCurrAngle >= serieData.pieHalfAngle;
isDrawPie = true;
@@ -282,7 +282,7 @@ namespace XCharts
ChartDrawer.DrawLine(vh, pos3, pos5, serie.label.lineWidth, color);
break;
case SerieLabel.LineType.Curves:
- ChartDrawer.DrawCurves(vh, pos1, pos5, pos1, pos2, serie.label.lineWidth, color);
+ ChartDrawer.DrawCurves(vh, pos1, pos5, pos1, pos2, serie.label.lineWidth, color, m_Settings.lineSmoothness);
break;
case SerieLabel.LineType.HorizontalLine:
ChartDrawer.DrawCricle(vh, pos0, horizontalLineCircleRadius, color, 20);
diff --git a/Assets/XCharts/Scripts/UI/RadarChart.cs b/Assets/XCharts/Scripts/UI/RadarChart.cs
index 43a49b21..d508b406 100644
--- a/Assets/XCharts/Scripts/UI/RadarChart.cs
+++ b/Assets/XCharts/Scripts/UI/RadarChart.cs
@@ -293,7 +293,7 @@ namespace XCharts
{
ChartDrawer.DrawLine(vh, startPoint, firstPoint, serie.lineStyle.width, lineColor);
}
- if (serie.symbol.type != SerieSymbolType.None )
+ if (serie.symbol.type != SerieSymbolType.None)
{
var symbolSize = (isHighlight ? serie.symbol.selectedSize : serie.symbol.size);
var symbolColor = serie.symbol.color != Color.clear ? serie.symbol.color : lineColor;
@@ -377,11 +377,13 @@ namespace XCharts
outsideRadius = insideRadius + block;
if (radar.splitArea.show)
{
- ChartDrawer.DrawDoughnut(vh, p, insideRadius, outsideRadius, 0, 360, color);
+ ChartDrawer.DrawDoughnut(vh, p, insideRadius, outsideRadius, color, Color.clear,
+ m_Settings.cicleSmoothness, 0, 360);
}
if (radar.lineStyle.show)
{
- ChartDrawer.DrawCicleNotFill(vh, p, outsideRadius, radar.lineStyle.width, lineColor);
+ ChartDrawer.DrawEmptyCricle(vh, p, outsideRadius, radar.lineStyle.width, lineColor,
+ Color.clear, m_Settings.cicleSmoothness);
}
insideRadius = outsideRadius;
}
diff --git a/Assets/XCharts/Scripts/UI/Utility/ChartDrawer.cs b/Assets/XCharts/Scripts/UI/Utility/ChartDrawer.cs
index dd5781b5..6ad8037d 100644
--- a/Assets/XCharts/Scripts/UI/Utility/ChartDrawer.cs
+++ b/Assets/XCharts/Scripts/UI/Utility/ChartDrawer.cs
@@ -7,7 +7,6 @@ namespace XCharts
{
public static class ChartDrawer
{
- public static float CRICLE_SMOOTHNESS = 2f;
private static UIVertex[] vertex = new UIVertex[4];
private static List s_CurvesPosList = new List();
@@ -182,44 +181,21 @@ namespace XCharts
}
public static void DrawCricle(VertexHelper vh, Vector3 p, float radius, Color32 color,
- int segments = 0)
+ float smoothness = 2f)
{
- if (segments <= 0)
- {
- segments = (int)((2 * Mathf.PI * radius) / CRICLE_SMOOTHNESS);
- }
- if (segments < 3) segments = 3;
- DrawSector(vh, p, radius, color, 0, 360, segments);
+ DrawSector(vh, p, radius, color, 0, 360, smoothness);
}
- public static void DrawCicleNotFill(VertexHelper vh, Vector3 p, float radius, float tickness,
- Color32 color, int segments = 0)
+ public static void DrawEmptyCricle(VertexHelper vh, Vector3 p, float radius, float tickness,
+ Color32 color, Color emptyColor, float smoothness = 2f)
{
- if (segments <= 0)
- {
- segments = (int)((2 * Mathf.PI * radius) / CRICLE_SMOOTHNESS);
- }
- float startDegree = 0, toDegree = 360;
- Vector3 p2, p3;
- float startAngle = startDegree * Mathf.Deg2Rad;
- float angle = (toDegree - startDegree) * Mathf.Deg2Rad / segments;
- p2 = new Vector3(p.x + radius * Mathf.Sin(startAngle), p.y + radius * Mathf.Cos(startAngle));
- for (int i = 0; i <= segments; i++)
- {
- float currAngle = startAngle + i * angle;
- p3 = new Vector3(p.x + radius * Mathf.Sin(currAngle), p.y + radius * Mathf.Cos(currAngle));
- DrawLine(vh, p2, p3, tickness, color);
- p2 = p3;
- }
+ DrawDoughnut(vh, p, radius - tickness, radius, color, emptyColor, smoothness);
}
public static void DrawSector(VertexHelper vh, Vector3 p, float radius, Color32 color,
- float startDegree, float toDegree, int segments = 0)
+ float startDegree, float toDegree, float smoothness = 2f)
{
- if (segments <= 0)
- {
- segments = (int)((2 * Mathf.PI * radius) / CRICLE_SMOOTHNESS);
- }
+ int segments = (int)((2 * Mathf.PI * radius) / (smoothness < 0 ? 2f : smoothness));
Vector3 p2, p3;
float startAngle = startDegree * Mathf.Deg2Rad;
float angle = (toDegree - startDegree) * Mathf.Deg2Rad / segments;
@@ -235,18 +211,15 @@ namespace XCharts
}
public static void DrawDoughnut(VertexHelper vh, Vector3 p, float insideRadius, float outsideRadius,
- float startDegree, float toDegree, Color32 color, int segments = 0)
+ Color32 color, Color emptyColor, float smoothness = 2f, float startDegree = 0, float toDegree = 360)
{
if (insideRadius <= 0)
{
- DrawSector(vh, p, outsideRadius, color, startDegree, toDegree, segments);
+ DrawSector(vh, p, outsideRadius, color, startDegree, toDegree, smoothness);
return;
}
- if (segments <= 0)
- {
- segments = (int)((2 * Mathf.PI * outsideRadius) / CRICLE_SMOOTHNESS);
- }
Vector3 p1, p2, p3, p4;
+ int segments = (int)((2 * Mathf.PI * outsideRadius) / (smoothness < 0 ? 2f : smoothness));
float startAngle = startDegree * Mathf.Deg2Rad;
float angle = (toDegree - startDegree) * Mathf.Deg2Rad / segments;
p1 = new Vector3(p.x + insideRadius * Mathf.Sin(startAngle),
@@ -260,6 +233,7 @@ namespace XCharts
p.y + outsideRadius * Mathf.Cos(currAngle));
p4 = new Vector3(p.x + insideRadius * Mathf.Sin(currAngle),
p.y + insideRadius * Mathf.Cos(currAngle));
+ if (emptyColor != Color.clear) DrawTriangle(vh, p, p1, p4, emptyColor);
DrawPolygon(vh, p1, p2, p3, p4, color);
p1 = p4;
p2 = p3;
@@ -277,10 +251,10 @@ namespace XCharts
/// 曲线宽
/// 曲线颜色
public static void DrawCurves(VertexHelper vh, Vector3 sp, Vector3 ep, Vector3 cp1, Vector3 cp2,
- float lineWidth, Color lineColor)
+ float lineWidth, Color lineColor, float smoothness)
{
var dist = Vector3.Distance(sp, ep);
- var segment = (int)(dist / 1f);
+ var segment = (int)(dist / (smoothness <= 0 ? 2f : smoothness));
ChartHelper.GetBezierList2(ref s_CurvesPosList, sp, ep, segment, cp1, cp2);
if (s_CurvesPosList.Count > 1)
{
diff --git a/Assets/XCharts/Scripts/UI/Utility/ChartHelper.cs b/Assets/XCharts/Scripts/UI/Utility/ChartHelper.cs
index c4523376..9e9a37be 100644
--- a/Assets/XCharts/Scripts/UI/Utility/ChartHelper.cs
+++ b/Assets/XCharts/Scripts/UI/Utility/ChartHelper.cs
@@ -236,7 +236,7 @@ namespace XCharts
return labelObj;
}
-
+
public static void GetPointList(ref List posList, Vector3 sp, Vector3 ep, float k = 30f)
{
Vector3 dir = (ep - sp).normalized;
@@ -252,7 +252,7 @@ namespace XCharts
}
public static void GetBezierList(ref List posList, Vector3 sp, Vector3 ep,
- Vector3 lsp, Vector3 nep, bool fine, float k = 2.0f)
+ Vector3 lsp, Vector3 nep, float smoothness = 2f, float k = 2.0f)
{
float dist = Mathf.Abs(sp.x - ep.x);
Vector3 cp1, cp2;
@@ -271,13 +271,13 @@ namespace XCharts
if (nep == ep) cp2 = ep;
else cp2 = ep - (nep - sp).normalized * diff;
dist = Vector3.Distance(sp, ep);
- int segment = (int)(dist / (fine ? 2f : 6f));
+ int segment = (int)(dist / (smoothness <= 0 ? 2f : smoothness));
if (segment < 1) segment = (int)(dist / 0.5f);
if (segment < 4) segment = 4;
GetBezierList2(ref posList, sp, ep, segment, cp1, cp2);
}
- public static void GetBezierListVertical(ref List posList, Vector3 sp, Vector3 ep, bool fine, float k = 2.0f)
+ public static void GetBezierListVertical(ref List posList, Vector3 sp, Vector3 ep, float smoothness = 2f, float k = 2.0f)
{
Vector3 dir = (ep - sp).normalized;
float dist = Vector3.Distance(sp, ep);
@@ -285,7 +285,7 @@ namespace XCharts
Vector3 cp2 = sp + dist / k * dir * (k - 1);
cp1.x = sp.x;
cp2.x = ep.x;
- int segment = (int)(dist / (fine ? 3f : 7f));
+ int segment = (int)(dist / (smoothness <= 0 ? 2f : smoothness));
GetBezierList2(ref posList, sp, ep, segment, cp1, cp2);
}
@@ -332,39 +332,6 @@ namespace XCharts
t * t * t * ep;
}
- public static List GetBezierN(List arrayToCurve, float smoothness = 1.0f)
- {
- List points;
- List curvedPoints;
- int pointsLength = 0;
- int curvedLength = 0;
-
- if (smoothness < 1.0f) smoothness = 1.0f;
-
- pointsLength = arrayToCurve.Count;
-
- curvedLength = (pointsLength * Mathf.RoundToInt(smoothness)) - 1;
- curvedPoints = new List(curvedLength);
-
- float t = 0.0f;
- for (int pointInTimeOnCurve = 0; pointInTimeOnCurve < curvedLength + 1; pointInTimeOnCurve++)
- {
- t = Mathf.InverseLerp(0, curvedLength, pointInTimeOnCurve);
-
- points = new List(arrayToCurve);
-
- for (int j = pointsLength - 1; j > 0; j--)
- {
- for (int i = 0; i < j; i++)
- {
- points[i] = (1 - t) * points[i] + t * points[i + 1];
- }
- }
- curvedPoints.Add(points[0]);
- }
- return curvedPoints;
- }
-
public static bool IsValueEqualsColor(Color32 color1, Color32 color2)
{
return color1.a == color2.a &&
diff --git a/Doc/XCharts配置项手册.md b/Doc/XCharts配置项手册.md
index c992a6a0..b46909f7 100644
--- a/Doc/XCharts配置项手册.md
+++ b/Doc/XCharts配置项手册.md
@@ -432,14 +432,12 @@
---
-全局配置。
+全局参数设置组件。一般情况下可使用默认值,当有需要时可进行调整。
-* `large`:
-* `minShowDataNumber`:图表所显示数据的最小索引。
-* `maxShowDataNumber`:图表所显示数据的最大索引。
-* `maxCacheDataNumber`:图表每个系列中可缓存的最大数据量。默认为0没有限制,大于`0`时超过指定值会移除旧数据再插入新数据。
-* `lineSmoothStyle`:平滑折线图的平滑系数。
-* `sampleDist`:采样的最小像素距离,默认为`0`时不采样。当两个数据点间的像素距离小于改值时,开启采样,保证两点间的像素距离不小于改值。
+* `lineSmoothStyle`:曲线平滑系数。通过调整平滑系数可以改变曲线的曲率,得到外观稍微有变化的不同曲线。
+* `lineSmoothness`:曲线平滑度。值越小曲线越平滑,但顶点数也会随之增加。当开启有渐变的区域填充时,数值越大渐变过渡效果越差。
+* `lineSegmentDistance`: 线段的分割距离。普通折线图的线是由很多线段组成,段数由该数值决定。值越小段数越多,但顶点数也会随之增加。当开启有渐变的区域填充时,数值越大渐变过渡效果越差。
+* `cicleSmoothness`:圆形(包括扇形、环形等)的平滑度。数越小圆越平滑,但顶点数也会随之增加。
[返回首页](https://github.com/monitor1394/unity-ugui-XCharts)
[XChartsAPI接口](XChartsAPI.md)
diff --git a/README.md b/README.md
index c70339e8..a6f6e9c5 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,7 @@ QQ交流群:XCharts交流群(202030963)
## 更新日志
+* (2019.10.10)增加`Settings`全局参数配置组件,开放更多参数可配置
* (2019.10.09)增加`AreaStyle`的高亮相关参数配置鼠标悬浮时高亮之前区域
* (2019.10.09)优化`DataZoom`组件,增加双指缩放
* (2019.10.05)增加`SerieLabel`的`LineType`给饼图配置不同类型的视觉引导线