diff --git a/Scripts/Editor/BaseChartEditor.cs b/Scripts/Editor/BaseChartEditor.cs index 371df737..4e0238c2 100644 --- a/Scripts/Editor/BaseChartEditor.cs +++ b/Scripts/Editor/BaseChartEditor.cs @@ -26,7 +26,6 @@ namespace XCharts protected SerializedProperty m_MaxShowDataNumber; protected SerializedProperty m_MaxCacheDataNumber; protected SerializedProperty m_LineSmoothStyle; - protected SerializedProperty m_SampleDist; protected float m_DefaultLabelWidth; protected float m_DefaultFieldWidth; @@ -51,7 +50,6 @@ namespace XCharts m_MaxShowDataNumber = serializedObject.FindProperty("m_MaxShowDataNumber"); m_MaxCacheDataNumber = serializedObject.FindProperty("m_MaxCacheDataNumber"); m_LineSmoothStyle = serializedObject.FindProperty("m_LineSmoothStyle"); - m_SampleDist = serializedObject.FindProperty("m_SampleDist"); } public override void OnInspectorGUI() @@ -98,11 +96,9 @@ namespace XCharts EditorGUILayout.PropertyField(m_MaxShowDataNumber, true); EditorGUILayout.PropertyField(m_MaxCacheDataNumber, true); EditorGUILayout.PropertyField(m_LineSmoothStyle,true); - EditorGUILayout.PropertyField(m_SampleDist,true); if (m_MinShowDataNumber.intValue < 0) m_MinShowDataNumber.intValue = 0; if (m_MaxShowDataNumber.intValue < 0) m_MaxShowDataNumber.intValue = 0; if (m_MaxCacheDataNumber.intValue < 0) m_MaxCacheDataNumber.intValue = 0; - if (m_SampleDist.floatValue < 0) m_SampleDist.floatValue = 0; EditorGUI.indentLevel--; } } diff --git a/Scripts/Editor/PropertyDrawers/SerieDrawer.cs b/Scripts/Editor/PropertyDrawers/SerieDrawer.cs index 635607ae..83cf8359 100644 --- a/Scripts/Editor/PropertyDrawers/SerieDrawer.cs +++ b/Scripts/Editor/PropertyDrawers/SerieDrawer.cs @@ -26,6 +26,7 @@ namespace XCharts SerializedProperty m_LineStyle = prop.FindPropertyRelative("m_LineStyle"); SerializedProperty m_LineArrow = prop.FindPropertyRelative("m_LineArrow"); SerializedProperty m_LineType = prop.FindPropertyRelative("m_LineType"); + SerializedProperty m_LineSampleDist = prop.FindPropertyRelative("m_LineSampleDist"); SerializedProperty m_BarWidth = prop.FindPropertyRelative("m_BarWidth"); SerializedProperty m_BarGap = prop.FindPropertyRelative("m_BarGap"); SerializedProperty m_BarCategoryGap = prop.FindPropertyRelative("m_BarCategoryGap"); @@ -82,6 +83,8 @@ namespace XCharts { EditorGUI.PropertyField(drawRect, m_LineType); drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + EditorGUI.PropertyField(drawRect, m_LineSampleDist); + drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; } if (serieType == SerieType.Line || serieType == SerieType.Scatter @@ -345,7 +348,7 @@ namespace XCharts if (serieType == SerieType.Line) { height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_LineArrow")); - height += 1 * EditorGUIUtility.singleLineHeight + 1 * EditorGUIUtility.standardVerticalSpacing; + height += 2 * EditorGUIUtility.singleLineHeight + 1 * EditorGUIUtility.standardVerticalSpacing; } if (serieType == SerieType.Bar) { diff --git a/Scripts/UI/Component/Serie.cs b/Scripts/UI/Component/Serie.cs index 5d641e0c..7ec939d1 100644 --- a/Scripts/UI/Component/Serie.cs +++ b/Scripts/UI/Component/Serie.cs @@ -126,6 +126,7 @@ namespace XCharts [SerializeField] private AreaStyle m_AreaStyle = AreaStyle.defaultAreaStyle; [SerializeField] private SerieSymbol m_Symbol = new SerieSymbol(); [SerializeField] private LineType m_LineType = LineType.Normal; + [SerializeField] private float m_LineSampleDist = 0; [SerializeField] private LineStyle m_LineStyle = new LineStyle(); [SerializeField] private float m_BarWidth = 0.6f; [SerializeField] private float m_BarGap = 0.3f; // 30% @@ -203,6 +204,12 @@ namespace XCharts /// public LineType lineType { get { return m_LineType; } set { m_LineType = value; } } /// + /// the min pixel dist of sample. + /// 折线图采样的最小像素距离,默认为0时不采样。当两个数据点间的水平距离小于改值时,开启采样,保证两点间的水平距离不小于改值。 + /// + /// + public float lineSampleDist { get { return m_LineSampleDist; } set { m_LineSampleDist = value < 0 ? 0 : value; } } + /// /// The style of line. /// 线条样式。 /// diff --git a/Scripts/UI/Internal/BaseChart.cs b/Scripts/UI/Internal/BaseChart.cs index d21c8f84..1ad772d4 100644 --- a/Scripts/UI/Internal/BaseChart.cs +++ b/Scripts/UI/Internal/BaseChart.cs @@ -43,7 +43,6 @@ namespace XCharts [SerializeField] protected int m_MaxShowDataNumber; [SerializeField] protected int m_MaxCacheDataNumber; [SerializeField] [Range(1, 8)] private float m_LineSmoothStyle = 2f; - [SerializeField] protected float m_SampleDist; [NonSerialized] private Theme m_CheckTheme = 0; [NonSerialized] private Title m_CheckTitle = Title.defaultTitle; diff --git a/Scripts/UI/Internal/BaseChart_API.cs b/Scripts/UI/Internal/BaseChart_API.cs index c9a98be8..f22b2afd 100644 --- a/Scripts/UI/Internal/BaseChart_API.cs +++ b/Scripts/UI/Internal/BaseChart_API.cs @@ -80,13 +80,6 @@ namespace XCharts /// public float lineSmoothStyle { get { return m_LineSmoothStyle; } set { m_LineSmoothStyle = value; } } - /// - /// the min pixel dist of sample. - /// 采样的最小像素距离,默认为0时不采样。当两个数据点间的像素距离小于改值时,开启采样,保证两点间的像素距离不小于改值。 - /// - /// - public float sampleDist { get { return m_SampleDist; } set { m_SampleDist = value < 0 ? 0 : value; } } - /// /// Set the size of chart. /// 设置图表的大小。 diff --git a/Scripts/UI/Internal/CoordinateChart_DrawLine.cs b/Scripts/UI/Internal/CoordinateChart_DrawLine.cs index c425f6a4..0bc39e57 100644 --- a/Scripts/UI/Internal/CoordinateChart_DrawLine.cs +++ b/Scripts/UI/Internal/CoordinateChart_DrawLine.cs @@ -96,7 +96,8 @@ namespace XCharts } } int rate = 1; - if (m_SampleDist > 0) rate = (int)((maxCount - minShowDataNumber) / (coordinateWid / m_SampleDist)); + var sampleDist = serie.lineSampleDist; + if (sampleDist > 0) rate = (int)((maxCount - minShowDataNumber) / (coordinateWid / sampleDist)); if (rate < 1) rate = 1; for (i = minShowDataNumber; i < maxCount; i += rate) { @@ -282,7 +283,8 @@ namespace XCharts var fine = isStack && m_Series.IsAnyGradientSerie(serie.stack); int rate = 1; - if (m_SampleDist > 0) rate = (int)((maxCount - minShowDataNumber) / (coordinateWid / m_SampleDist)); + var sampleDist = serie.lineSampleDist; + if (sampleDist > 0) rate = (int)((maxCount - minShowDataNumber) / (coordinateWid / sampleDist)); if (rate < 1) rate = 1; for (i = minShowDataNumber; i < maxCount; i += rate) {