From bafe032bb9647e9ed44adcf46ff1bc3ac6dbad85 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Sun, 22 May 2022 22:17:38 +0800 Subject: [PATCH] 3.0 --- .github/FUNDING.yml | 2 +- CHANGELOG.md | 2 + Documentation/SUPPORT.md | 86 ++- Documentation/XChartsAPI-EN.md | 44 +- Documentation/XChartsAPI-ZH.md | 44 +- Documentation/XChartsConfiguration-EN.md | 115 +++- Documentation/XChartsConfiguration-ZH.md | 115 +++- Documentation/XChartsFAQ-EN.md | 11 - Documentation/XChartsFAQ-ZH.md | 13 - Documentation/XChartsTutorial01-ZH.md | 67 ++- Documentation/res/alipay.png | Bin 85194 -> 31382 bytes Documentation/res/linechart-simple.png | Bin 4974 -> 7058 bytes Documentation/res/linechart.png | Bin 3957 -> 5843 bytes Documentation/res/linechart1.png | Bin 5771 -> 6903 bytes Documentation/res/linechart2.png | Bin 7621 -> 10668 bytes Documentation/res/linechart3.png | Bin 9620 -> 11889 bytes Documentation/res/linechart4.png | Bin 8996 -> 11978 bytes Documentation/res/op_addchart.png | Bin 53866 -> 0 bytes Documentation/res/op_addcomponent.png | Bin 47426 -> 61620 bytes Documentation/res/op_addserie.png | Bin 44226 -> 51413 bytes Documentation/res/op_addseriecomponent.png | Bin 43865 -> 64321 bytes .../res/op_addseriedatacomponent.png | Bin 40136 -> 56038 bytes Documentation/res/op_textmeshpro.png | Bin 68094 -> 65659 bytes Documentation/res/op_textmeshpro2.png | Bin 42654 -> 0 bytes Documentation/res/op_textmeshpro2.png.meta | 76 --- Documentation/res/op_textmeshpro3.png | Bin 87761 -> 30997 bytes Documentation/res/wechat.png | Bin 0 -> 11704 bytes .../{op_addchart.png.meta => wechat.png.meta} | 2 +- Editor/Attributes/ComponentEditorAttribute.cs | 2 - Editor/Attributes/SerieEditorAttribute.cs | 2 - Editor/Charts/BaseChartEditor.cs | 5 +- Editor/ChildComponents/AnimationDrawer.cs | 1 - Editor/ChildComponents/AreaStyleDrawer.cs | 1 - Editor/ChildComponents/BasePropertyDrawer.cs | 30 +- Editor/ChildComponents/CommentItemDrawer.cs | 26 + ...awer.cs.meta => CommentItemDrawer.cs.meta} | 2 +- .../ChildComponents/CommentMarkStyleDrawer.cs | 22 + .../CommentMarkStyleDrawer.cs.meta | 2 +- .../ChildComponents/ComponentThemeDrawer.cs | 7 +- Editor/ChildComponents/DebugInfoDrawer.cs | 1 - Editor/ChildComponents/EmphasisStyleDrawer.cs | 19 +- Editor/ChildComponents/IconStyleDrawer.cs | 1 - Editor/ChildComponents/ImageStyleDrawer.cs | 1 - Editor/ChildComponents/ItemStyleDrawer.cs | 1 - Editor/ChildComponents/LabelLineDrawer.cs | 1 - Editor/ChildComponents/LabelStyleDrawer.cs | 2 +- Editor/ChildComponents/LevelStyleDrawer.cs | 1 - Editor/ChildComponents/LineArrowDrawer.cs | 3 +- Editor/ChildComponents/LineDrawer.cs | 2 +- Editor/ChildComponents/LineStyleDrawer.cs | 1 - Editor/ChildComponents/LocationDrawer.cs | 1 - .../SerieDataBaseInfoDrawer.cs | 25 - Editor/ChildComponents/SerieSymbolDrawer.cs | 5 +- Editor/ChildComponents/SettingsDrawer.cs | 9 +- Editor/ChildComponents/SymbolStyleDrawer.cs | 3 +- Editor/ChildComponents/TextLimitDrawer.cs | 1 - Editor/ChildComponents/TextPaddingDrawer.cs | 1 - Editor/ChildComponents/TextStyleDrawer.cs | 1 - Editor/ChildComponents/ThemeDrawer.cs | 45 +- Editor/ChildComponents/TitleStyleDrawer.cs | 2 +- Editor/MainComponents/AxisEditor.cs | 19 +- Editor/MainComponents/BackgroundEditor.cs | 2 - Editor/MainComponents/CommentEditor.cs | 18 + Editor/MainComponents/CommentEditor.cs.meta | 11 + Editor/MainComponents/DataZoomEditor.cs | 1 - Editor/MainComponents/GridCoordEditor.cs | 1 - Editor/MainComponents/LegendEditor.cs | 3 +- .../MainComponents/MainComponentBaseEditor.cs | 13 +- Editor/MainComponents/MainComponentEditor.cs | 6 +- .../MainComponents/MainComponentListEditor.cs | 9 +- Editor/MainComponents/MarkAreaEditor.cs | 3 +- Editor/MainComponents/MarkLineEditor.cs | 3 +- Editor/MainComponents/ParallelCoordEditor.cs | 1 - Editor/MainComponents/PolarCoordEditor.cs | 1 - Editor/MainComponents/RadarCoordEditor.cs | 1 - Editor/MainComponents/ThemeEditor.cs | 19 +- Editor/MainComponents/TitleEditor.cs | 1 - Editor/MainComponents/TooltipEditor.cs | 1 - Editor/MainComponents/VisualMapEditor.cs | 13 +- Editor/Series/HeatmapEditor.cs | 1 - Editor/Series/RadarEditor.cs | 2 +- Editor/Series/SerieBaseEditor.cs | 22 +- Editor/Series/SerieEditor.cs | 256 +++----- Editor/Series/SerieListEditor.cs | 12 +- Editor/Series/SimplifiedBarEditor.cs | 1 - Editor/Utilities/ChartEditorHelper.cs | 33 +- Editor/Utilities/EditorStyles.cs | 8 +- Editor/Utilities/ThemeCheck.cs | 1 - Editor/Widgets/ProgressBarEditor.cs | 1 - Editor/Windows/PraseExternalDataEditor.cs | 4 +- Editor/Windows/XCSettingsEditor.cs | 7 +- Editor/Windows/XChartsEditor.cs | 4 +- .../{Runtime => }/Example00_CheatSheet.cs | 21 +- .../Example00_CheatSheet.cs.meta | 0 .../{Runtime => }/Example01_UpdateData.cs | 1 - .../Example01_UpdateData.cs.meta | 0 .../{Runtime => }/Example02_ChartEvent.cs | 1 - .../Example02_ChartEvent.cs.meta | 0 .../{Runtime => }/Example03_ChartAnimation.cs | 1 - .../Example03_ChartAnimation.cs.meta | 0 Examples/{Runtime => }/Example10_LineChart.cs | 1 - .../{Runtime => }/Example10_LineChart.cs.meta | 0 .../{Runtime => }/Example11_AddSinCurve.cs | 1 - .../Example11_AddSinCurve.cs.meta | 0 .../{Runtime => }/Example12_CustomDrawing.cs | 18 +- .../Example12_CustomDrawing.cs.meta | 0 .../{Runtime => }/Example13_LineSimple.cs | 15 +- .../Example13_LineSimple.cs.meta | 0 Examples/{Runtime => }/Example20_BarChart.cs | 8 +- .../{Runtime => }/Example20_BarChart.cs.meta | 0 Examples/Example21_BarRace.cs | 46 ++ Examples/Example21_BarRace.cs.meta | 11 + Examples/{Runtime => }/Example30_PieChart.cs | 7 +- .../{Runtime => }/Example30_PieChart.cs.meta | 0 .../{Runtime => }/Example31_PieUpdateName.cs | 1 - .../Example31_PieUpdateName.cs.meta | 0 Examples/{Runtime => }/Example40_Radar.cs | 1 - .../{Runtime => }/Example40_Radar.cs.meta | 0 .../{Runtime => }/Example41_RadarUpdate.cs | 1 - .../Example41_RadarUpdate.cs.meta | 0 Examples/{Runtime => }/Example50_Scatter.cs | 5 +- .../{Runtime => }/Example50_Scatter.cs.meta | 0 Examples/{Runtime => }/Example60_Heatmap.cs | 34 +- .../{Runtime => }/Example60_Heatmap.cs.meta | 0 Examples/{Runtime => }/Example80_Polar.cs | 2 - .../{Runtime => }/Example80_Polar.cs.meta | 0 .../{Runtime => }/Example90_Candlestick.cs | 24 +- .../Example90_Candlestick.cs.meta | 0 Examples/{Runtime => }/Example_AddChart.cs | 1 - .../{Runtime => }/Example_AddChart.cs.meta | 0 Examples/{Runtime => }/Example_Component.cs | 5 +- .../{Runtime => }/Example_Component.cs.meta | 0 Examples/{Runtime => }/Example_Dynamic.cs | 5 +- .../{Runtime => }/Example_Dynamic.cs.meta | 0 Examples/{Runtime => }/Example_LargeData.cs | 1 - .../{Runtime => }/Example_LargeData.cs.meta | 0 Examples/{Runtime => }/Example_PieChart.cs | 1 - .../{Runtime => }/Example_PieChart.cs.meta | 0 Examples/{Runtime => }/Example_Test.cs | 24 +- Examples/{Runtime => }/Example_Test.cs.meta | 0 Examples/{Runtime => }/Example_TestTime.cs | 1 - .../{Runtime => }/Example_TestTime.cs.meta | 0 .../XCharts.Examples.Runtime.asmdef | 0 .../XCharts.Examples.Runtime.asmdef.meta | 0 Documentation/README-EN.md => README-EN.md | 0 .../README-EN.md.meta => README-EN.md.meta | 2 +- README.md | 27 +- Runtime/Chart/BarChart.cs | 3 +- Runtime/Chart/CandlestickChart.cs | 4 +- Runtime/Chart/HeatmapChart.cs | 27 +- Runtime/Chart/LineChart.cs | 4 +- Runtime/Chart/ParallelChart.cs | 3 +- Runtime/Chart/PieChart.cs | 3 +- Runtime/Chart/PolarChart.cs | 4 +- Runtime/Chart/RadarChart.cs | 3 +- Runtime/Chart/RingChart.cs | 4 +- Runtime/Chart/ScatterChart.cs | 3 +- Runtime/Chart/SimplifiedBarChart.cs | 4 +- Runtime/Chart/SimplifiedCandlestickChart.cs | 4 +- Runtime/Chart/SimplifiedLineChart.cs | 4 +- Runtime/Component/Animation/AnimationStyle.cs | 21 +- .../Animation/AnimationStyleContext.cs | 1 - .../Animation/AnimationStyleHelper.cs | 6 +- Runtime/Component/Axis/AngleAxis/AngleAxis.cs | 1 - .../Axis/AngleAxis/AngleAxisHandler.cs | 8 +- Runtime/Component/Axis/Axis.cs | 35 +- Runtime/Component/Axis/AxisContext.cs | 10 +- Runtime/Component/Axis/AxisHandler.cs | 178 +++--- Runtime/Component/Axis/AxisHelper.cs | 60 +- Runtime/Component/Axis/AxisLabel.cs | 15 +- Runtime/Component/Axis/AxisLine.cs | 1 - Runtime/Component/Axis/AxisName.cs | 1 - Runtime/Component/Axis/AxisSplitArea.cs | 3 +- Runtime/Component/Axis/AxisSplitLine.cs | 1 - Runtime/Component/Axis/AxisTick.cs | 2 - .../Axis/ParallelAxis/ParallelAxis.cs | 2 - .../Axis/ParallelAxis/ParallelAxisHander.cs | 12 +- .../Component/Axis/RadiusAxis/RadiusAxis.cs | 1 - .../Axis/RadiusAxis/RadiusAxisHandler.cs | 13 +- .../Component/Axis/SingleAxis/SingleAxis.cs | 13 +- .../Axis/SingleAxis/SingleAxisHandler.cs | 15 +- Runtime/Component/Axis/XAxis/XAxis.cs | 1 - Runtime/Component/Axis/XAxis/XAxisHander.cs | 35 +- Runtime/Component/Axis/YAxis/YAxis.cs | 1 - Runtime/Component/Axis/YAxis/YAxisHander.cs | 35 +- Runtime/Component/Background/Background.cs | 1 - .../Component/Background/BackgroundHandler.cs | 5 +- Runtime/Component/Child/AreaStyle.cs | 9 +- Runtime/Component/Child/ArrowStyle.cs | 1 - Runtime/Component/Child/BaseLine.cs | 1 - Runtime/Component/Child/IconStyle.cs | 4 +- Runtime/Component/Child/ImageStyle.cs | 3 +- Runtime/Component/Child/ItemStyle.cs | 20 +- Runtime/Component/Child/LineArrow.cs | 2 +- Runtime/Component/Child/LineStyle.cs | 14 +- Runtime/Component/Child/Location.cs | 35 +- Runtime/Component/Child/SerieDataBaseInfo.cs | 33 - Runtime/Component/Child/SerieSymbl.cs | 13 +- Runtime/Component/Child/StageColor.cs | 1 - Runtime/Component/Child/SymbolStyle.cs | 4 +- Runtime/Component/Child/TextLimit.cs | 6 +- Runtime/Component/Child/TextPadding.cs | 3 +- Runtime/Component/Child/TextStyle.cs | 5 +- .../Component/Comment.meta | 2 +- Runtime/Component/Comment/Comment.cs | 65 ++ Runtime/Component/Comment/Comment.cs.meta | 11 + Runtime/Component/Comment/CommentHander.cs | 71 +++ .../Component/Comment/CommentHander.cs.meta | 11 + Runtime/Component/Comment/CommentItem.cs | 47 ++ Runtime/Component/Comment/CommentItem.cs.meta | 11 + Runtime/Component/Comment/CommentMarkStyle.cs | 23 + .../Comment/CommentMarkStyle.cs.meta | 11 + Runtime/Component/DataZoom/DataZoom.cs | 13 +- Runtime/Component/DataZoom/DataZoomContext.cs | 1 - Runtime/Component/DataZoom/DataZoomHandler.cs | 35 +- Runtime/Component/DataZoom/DataZoomHelper.cs | 1 - Runtime/Component/Debug/DebugInfo.cs | 20 +- Runtime/Component/Emphasis.meta | 8 + .../Component/{Child => Emphasis}/Emphasis.cs | 2 - .../{Child => Emphasis}/Emphasis.cs.meta | 0 .../Component/Emphasis/EmphasisItemStyle.cs | 11 + .../Emphasis/EmphasisItemStyle.cs.meta | 11 + .../Component/Emphasis/EmphasisLabelLine.cs | 11 + .../Emphasis/EmphasisLabelLine.cs.meta | 11 + .../Component/Emphasis/EmphasisLabelStyle.cs | 11 + .../Emphasis/EmphasisLabelStyle.cs.meta | 11 + Runtime/Component/Interaction.meta | 8 + .../Interaction}/InteractData.cs | 16 +- .../Interaction}/InteractData.cs.meta | 2 +- Runtime/Component/Label.meta | 8 + .../{Child => Label}/EndLabelStyle.cs | 1 - .../{Child => Label}/EndLabelStyle.cs.meta | 0 .../Component/{Child => Label}/LabelLine.cs | 3 +- .../{Child => Label}/LabelLine.cs.meta | 0 .../Component/{Child => Label}/LabelStyle.cs | 25 +- .../{Child => Label}/LabelStyle.cs.meta | 0 Runtime/Component/Legend/Legend.cs | 68 ++- Runtime/Component/Legend/LegendContext.cs | 1 - Runtime/Component/Legend/LegendHandler.cs | 28 +- Runtime/Component/Legend/LegendHelper.cs | 8 +- Runtime/Component/Mark/MarkArea.cs | 1 - Runtime/Component/Mark/MarkAreaHandler.cs | 3 +- Runtime/Component/Mark/MarkLine.cs | 6 +- Runtime/Component/Mark/MarkLineHandler.cs | 8 +- Runtime/Component/Mark/MarkLineHelper.cs | 3 +- Runtime/Component/Radar/RadarCoord.cs | 17 +- Runtime/Component/Radar/RadarCoordContext.cs | 3 +- Runtime/Component/Radar/RadarCoordHandler.cs | 15 +- Runtime/Component/Settings/Settings.cs | 27 +- Runtime/Component/Title/Title.cs | 11 +- Runtime/Component/Title/TitleHandler.cs | 55 +- Runtime/Component/Title/TitleStyle.cs | 3 +- Runtime/Component/Tooltip/Tooltip.cs | 11 +- Runtime/Component/Tooltip/TooltipContext.cs | 1 - Runtime/Component/Tooltip/TooltipHandler.cs | 85 ++- Runtime/Component/Tooltip/TooltipHelper.cs | 2 +- Runtime/Component/Tooltip/TooltipView.cs | 11 +- Runtime/Component/VisualMap/VisualMap.cs | 240 ++++---- .../Component/VisualMap/VisualMapContext.cs | 3 +- .../Component/VisualMap/VisualMapHandler.cs | 45 +- .../Component/VisualMap/VisualMapHelper.cs | 19 +- Runtime/Coord/Calendar/CalendarCoord.cs | 4 +- .../Coord/Calendar/CalendarCoordHandler.cs | 4 +- Runtime/Coord/Grid/GridCoord.cs | 1 - Runtime/Coord/Grid/GridCoordContext.cs | 1 - Runtime/Coord/Grid/GridCoordHandler.cs | 9 +- Runtime/Coord/Parallel/ParallelCoord.cs | 1 - .../Coord/Parallel/ParallelCoordContext.cs | 1 - .../Coord/Parallel/ParallelCoordHandler.cs | 11 +- Runtime/Coord/Polar/PolarCoord.cs | 2 - Runtime/Coord/Polar/PolarCoordContext.cs | 1 - Runtime/Coord/Polar/PolarCoordHandler.cs | 2 - Runtime/Coord/Polar/PolarHelper.cs | 1 - Runtime/Coord/SingleAxis/SingleAxisCoord.cs | 4 +- Runtime/Helper/CheckHelper.cs | 13 +- Runtime/Helper/FormatterHelper.cs | 125 ++-- Runtime/Helper/SerieHelper.cs | 72 +-- Runtime/Helper/SerieLabelHelper.cs | 10 +- Runtime/Helper/SeriesHelper.cs | 17 +- Runtime/I18n/Lang.cs | 97 ++- .../Attributes/ListForComponentAttribute.cs | 3 +- .../Attributes/ListForSerieAttribute.cs | 3 +- .../SerieDataExtraComponentAttribute.cs | 80 +++ .../SerieDataExtraComponentAttribute.cs.meta | 11 + .../SerieDataExtraFieldAttribute.cs | 75 +++ .../SerieDataExtraFieldAttribute.cs.meta | 11 + .../SerieExtraComponentAttribute.cs | 66 +- .../Attributes/SerieHandlerAttribute.cs | 1 - Runtime/Internal/BaseChart.API.cs | 21 +- Runtime/Internal/BaseChart.Component.cs | 29 +- Runtime/Internal/BaseChart.Custom.cs | 10 +- Runtime/Internal/BaseChart.Draw.cs | 15 +- Runtime/Internal/BaseChart.Serie.cs | 124 +++- Runtime/Internal/BaseChart.cs | 97 ++- Runtime/Internal/BaseGraph.API.cs | 9 +- Runtime/Internal/BaseGraph.cs | 564 +++++++++--------- Runtime/Internal/Basic/BaseSerie.cs | 12 +- Runtime/Internal/Basic/ChildComponent.cs | 4 +- Runtime/Internal/Basic/CoordSystem.cs | 5 +- Runtime/Internal/Basic/MainComponent.cs | 18 +- .../Internal/Basic/MainComponentContext.cs | 1 - Runtime/Internal/Misc/DelegateFunction.cs | 2 - Runtime/Internal/Misc/Enums.cs | 2 - Runtime/Internal/Misc/INeedSerieContainer.cs | 1 - Runtime/Internal/Misc/IPropertyChanged.cs | 4 +- Runtime/Internal/Misc/ISerieContainer.cs | 1 - Runtime/Internal/Misc/ISerieDataComponent.cs | 4 +- Runtime/Internal/Misc/ISerieExtraComponent.cs | 1 - Runtime/Internal/Misc/ISimplifiedSerie.cs | 4 +- Runtime/Internal/Misc/IUpdateRuntimeData.cs | 1 - Runtime/Internal/Object/ChartLabel.cs | 3 +- Runtime/Internal/Object/ChartObject.cs | 1 - Runtime/Internal/Object/ChartText.cs | 60 +- Runtime/Internal/Object/LegendItem.cs | 1 - Runtime/Internal/Painter.cs | 3 +- Runtime/Internal/Pools/ListPool.cs | 4 +- Runtime/Internal/Pools/ObjectPool.cs | 3 +- Runtime/Internal/Pools/SerieDataPool.cs | 7 +- Runtime/Internal/Pools/SerieLabelPool.cs | 5 +- Runtime/Internal/Utilities/ChartCached.cs | 20 +- Runtime/Internal/Utilities/ChartConst.cs | 1 - Runtime/Internal/Utilities/ChartDrawer.cs | 6 +- Runtime/Internal/Utilities/ChartHelper.cs | 57 +- Runtime/Internal/Utilities/ComponentHelper.cs | 4 +- Runtime/Internal/Utilities/DataHelper.cs | 1 - Runtime/Internal/Utilities/LayoutHelper.cs | 17 +- Runtime/Internal/Utilities/MathUtil.cs | 3 +- Runtime/Internal/XCResourcesImporter.cs | 8 +- Runtime/Internal/XCSettings.cs | 63 +- Runtime/Internal/XCThemeMgr.cs | 2 - Runtime/Internal/XChartsMgr.cs | 6 +- Runtime/Serie/Bar/Bar.cs | 9 +- Runtime/Serie/Bar/BarHandler.cs | 54 +- Runtime/Serie/Bar/SimplifiedBar.cs | 3 +- Runtime/Serie/Bar/SimplifiedBarHandler.cs | 18 +- Runtime/Serie/Candlestick/Candlestick.cs | 3 +- .../Serie/Candlestick/CandlestickHandler.cs | 39 +- .../Candlestick/SimplifiedCandlestick.cs | 3 +- .../SimplifiedCandlestickHandler.cs | 39 +- Runtime/Serie/Heatmap/Heatmap.cs | 12 +- Runtime/Serie/Heatmap/HeatmapHandler.cs | 48 +- Runtime/Serie/Line/Line.cs | 11 +- Runtime/Serie/Line/LineHandler.GridCoord.cs | 64 +- Runtime/Serie/Line/LineHandler.PolarCoord.cs | 21 +- Runtime/Serie/Line/LineHandler.cs | 3 +- Runtime/Serie/Line/LineHelper.cs | 57 +- Runtime/Serie/Line/SimplifiedLine.cs | 3 +- Runtime/Serie/Line/SimplifiedLineHandler.cs | 13 +- Runtime/Serie/Parallel/Parallel.cs | 16 +- Runtime/Serie/Parallel/ParallelHandler.cs | 16 +- Runtime/Serie/Pie/Pie.cs | 6 +- Runtime/Serie/Pie/PieHandler.cs | 32 +- Runtime/Serie/Radar/Radar.cs | 7 +- Runtime/Serie/Radar/RadarHandler.cs | 44 +- Runtime/Serie/Ring/Ring.cs | 5 +- Runtime/Serie/Ring/RingHandler.cs | 17 +- Runtime/Serie/Scatter/BaseScatter.cs | 1 - Runtime/Serie/Scatter/BaseScatterHandler.cs | 34 +- Runtime/Serie/Scatter/EffectScatter.cs | 5 +- Runtime/Serie/Scatter/EffectScatterHandler.cs | 1 - Runtime/Serie/Scatter/Scatter.cs | 7 +- Runtime/Serie/Scatter/ScatterHandler.cs | 4 +- Runtime/Serie/Serie.ExtraComponent.cs | 47 +- Runtime/Serie/Serie.cs | 60 +- Runtime/Serie/SerieContext.cs | 2 +- Runtime/Serie/SerieData.cs | 175 ++++-- Runtime/Serie/SerieDataContext.cs | 11 +- Runtime/Serie/SerieHandler.cs | 127 ++-- Runtime/Serie/SerieParams.cs | 2 +- Runtime/Theme/AxisTheme.cs | 34 +- Runtime/Theme/ComponentTheme.cs | 1 - Runtime/Theme/DataZoomTheme.cs | 3 +- Runtime/Theme/LegendTheme.cs | 3 +- Runtime/Theme/SerieTheme.cs | 1 - Runtime/Theme/SubTitleTheme.cs | 1 - Runtime/Theme/Theme.cs | 17 +- Runtime/Theme/ThemeStyle.cs | 8 +- Runtime/Theme/TitleTheme.cs | 1 - Runtime/Theme/TooltipTheme.cs | 1 - Runtime/Theme/VisualMapTheme.cs | 3 +- Runtime/Utilities/ColorUtil.cs | 3 +- Runtime/Utilities/DateTimeUtil.cs | 21 +- Runtime/Utilities/DefineSymbolsUtil.cs | 8 +- Runtime/Utilities/PropertyUtil.cs | 3 +- Runtime/Utilities/ReflectionUtil.cs | 14 +- Runtime/Utilities/RuntimeUtil.cs | 7 +- Runtime/Widgets/ProgressBar.cs | 6 +- Runtime/XUGL/SVG/SVGPath.cs | 6 +- Runtime/XUGL/UGL.cs | 46 +- Runtime/XUGL/UGLHelper.cs | 67 +-- package.json | 6 +- 391 files changed, 3718 insertions(+), 2774 deletions(-) delete mode 100644 Documentation/res/op_addchart.png delete mode 100644 Documentation/res/op_textmeshpro2.png delete mode 100644 Documentation/res/op_textmeshpro2.png.meta create mode 100644 Documentation/res/wechat.png rename Documentation/res/{op_addchart.png.meta => wechat.png.meta} (97%) create mode 100644 Editor/ChildComponents/CommentItemDrawer.cs rename Editor/ChildComponents/{SerieDataBaseInfoDrawer.cs.meta => CommentItemDrawer.cs.meta} (83%) create mode 100644 Editor/ChildComponents/CommentMarkStyleDrawer.cs rename Runtime/Component/Child/SerieDataBaseInfo.cs.meta => Editor/ChildComponents/CommentMarkStyleDrawer.cs.meta (83%) delete mode 100644 Editor/ChildComponents/SerieDataBaseInfoDrawer.cs create mode 100644 Editor/MainComponents/CommentEditor.cs create mode 100644 Editor/MainComponents/CommentEditor.cs.meta rename Examples/{Runtime => }/Example00_CheatSheet.cs (96%) rename Examples/{Runtime => }/Example00_CheatSheet.cs.meta (100%) rename Examples/{Runtime => }/Example01_UpdateData.cs (99%) rename Examples/{Runtime => }/Example01_UpdateData.cs.meta (100%) rename Examples/{Runtime => }/Example02_ChartEvent.cs (99%) rename Examples/{Runtime => }/Example02_ChartEvent.cs.meta (100%) rename Examples/{Runtime => }/Example03_ChartAnimation.cs (99%) rename Examples/{Runtime => }/Example03_ChartAnimation.cs.meta (100%) rename Examples/{Runtime => }/Example10_LineChart.cs (99%) rename Examples/{Runtime => }/Example10_LineChart.cs.meta (100%) rename Examples/{Runtime => }/Example11_AddSinCurve.cs (99%) rename Examples/{Runtime => }/Example11_AddSinCurve.cs.meta (100%) rename Examples/{Runtime => }/Example12_CustomDrawing.cs (76%) rename Examples/{Runtime => }/Example12_CustomDrawing.cs.meta (100%) rename Examples/{Runtime => }/Example13_LineSimple.cs (82%) rename Examples/{Runtime => }/Example13_LineSimple.cs.meta (100%) rename Examples/{Runtime => }/Example20_BarChart.cs (97%) rename Examples/{Runtime => }/Example20_BarChart.cs.meta (100%) create mode 100644 Examples/Example21_BarRace.cs create mode 100644 Examples/Example21_BarRace.cs.meta rename Examples/{Runtime => }/Example30_PieChart.cs (96%) rename Examples/{Runtime => }/Example30_PieChart.cs.meta (100%) rename Examples/{Runtime => }/Example31_PieUpdateName.cs (99%) rename Examples/{Runtime => }/Example31_PieUpdateName.cs.meta (100%) rename Examples/{Runtime => }/Example40_Radar.cs (99%) rename Examples/{Runtime => }/Example40_Radar.cs.meta (100%) rename Examples/{Runtime => }/Example41_RadarUpdate.cs (99%) rename Examples/{Runtime => }/Example41_RadarUpdate.cs.meta (100%) rename Examples/{Runtime => }/Example50_Scatter.cs (87%) rename Examples/{Runtime => }/Example50_Scatter.cs.meta (100%) rename Examples/{Runtime => }/Example60_Heatmap.cs (79%) rename Examples/{Runtime => }/Example60_Heatmap.cs.meta (100%) rename Examples/{Runtime => }/Example80_Polar.cs (99%) rename Examples/{Runtime => }/Example80_Polar.cs.meta (100%) rename Examples/{Runtime => }/Example90_Candlestick.cs (75%) rename Examples/{Runtime => }/Example90_Candlestick.cs.meta (100%) rename Examples/{Runtime => }/Example_AddChart.cs (99%) rename Examples/{Runtime => }/Example_AddChart.cs.meta (100%) rename Examples/{Runtime => }/Example_Component.cs (84%) rename Examples/{Runtime => }/Example_Component.cs.meta (100%) rename Examples/{Runtime => }/Example_Dynamic.cs (93%) rename Examples/{Runtime => }/Example_Dynamic.cs.meta (100%) rename Examples/{Runtime => }/Example_LargeData.cs (99%) rename Examples/{Runtime => }/Example_LargeData.cs.meta (100%) rename Examples/{Runtime => }/Example_PieChart.cs (99%) rename Examples/{Runtime => }/Example_PieChart.cs.meta (100%) rename Examples/{Runtime => }/Example_Test.cs (67%) rename Examples/{Runtime => }/Example_Test.cs.meta (100%) rename Examples/{Runtime => }/Example_TestTime.cs (99%) rename Examples/{Runtime => }/Example_TestTime.cs.meta (100%) rename Examples/{Runtime => }/XCharts.Examples.Runtime.asmdef (100%) rename Examples/{Runtime => }/XCharts.Examples.Runtime.asmdef.meta (100%) rename Documentation/README-EN.md => README-EN.md (100%) rename Documentation/README-EN.md.meta => README-EN.md.meta (75%) delete mode 100644 Runtime/Component/Child/SerieDataBaseInfo.cs rename Examples/Runtime.meta => Runtime/Component/Comment.meta (77%) create mode 100644 Runtime/Component/Comment/Comment.cs create mode 100644 Runtime/Component/Comment/Comment.cs.meta create mode 100644 Runtime/Component/Comment/CommentHander.cs create mode 100644 Runtime/Component/Comment/CommentHander.cs.meta create mode 100644 Runtime/Component/Comment/CommentItem.cs create mode 100644 Runtime/Component/Comment/CommentItem.cs.meta create mode 100644 Runtime/Component/Comment/CommentMarkStyle.cs create mode 100644 Runtime/Component/Comment/CommentMarkStyle.cs.meta create mode 100644 Runtime/Component/Emphasis.meta rename Runtime/Component/{Child => Emphasis}/Emphasis.cs (99%) rename Runtime/Component/{Child => Emphasis}/Emphasis.cs.meta (100%) create mode 100644 Runtime/Component/Emphasis/EmphasisItemStyle.cs create mode 100644 Runtime/Component/Emphasis/EmphasisItemStyle.cs.meta create mode 100644 Runtime/Component/Emphasis/EmphasisLabelLine.cs create mode 100644 Runtime/Component/Emphasis/EmphasisLabelLine.cs.meta create mode 100644 Runtime/Component/Emphasis/EmphasisLabelStyle.cs create mode 100644 Runtime/Component/Emphasis/EmphasisLabelStyle.cs.meta create mode 100644 Runtime/Component/Interaction.meta rename Runtime/{Serie => Component/Interaction}/InteractData.cs (95%) rename Runtime/{Serie => Component/Interaction}/InteractData.cs.meta (83%) create mode 100644 Runtime/Component/Label.meta rename Runtime/Component/{Child => Label}/EndLabelStyle.cs (99%) rename Runtime/Component/{Child => Label}/EndLabelStyle.cs.meta (100%) rename Runtime/Component/{Child => Label}/LabelLine.cs (99%) rename Runtime/Component/{Child => Label}/LabelLine.cs.meta (100%) rename Runtime/Component/{Child => Label}/LabelStyle.cs (95%) rename Runtime/Component/{Child => Label}/LabelStyle.cs.meta (100%) create mode 100644 Runtime/Internal/Attributes/SerieDataExtraComponentAttribute.cs create mode 100644 Runtime/Internal/Attributes/SerieDataExtraComponentAttribute.cs.meta create mode 100644 Runtime/Internal/Attributes/SerieDataExtraFieldAttribute.cs create mode 100644 Runtime/Internal/Attributes/SerieDataExtraFieldAttribute.cs.meta diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 884a6e9d..deb70662 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -10,4 +10,4 @@ liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry -custom: ['https://www.paypal.com/paypalme/monitor1394','https://github.com/XCharts-Team/XCharts/blob/master/Documentation/res/alipay.png'] +custom: ['https://www.paypal.me/monitor1394','https://github.com/XCharts-Team/XCharts/blob/master/Documentation/res/alipay.png','https://github.com/XCharts-Team/XCharts/blob/master/Documentation/res/wechat.png'] diff --git a/CHANGELOG.md b/CHANGELOG.md index a290019a..18ac27a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,8 @@ ## master +* (2022.05.06) 修复代码动态创建图表异常的问题 + ## v3.0.0-preivew9 * (2022.05.06) 发布`v3.0.0-preivew9`版本 diff --git a/Documentation/SUPPORT.md b/Documentation/SUPPORT.md index 8b7ad6a3..8ed7384b 100644 --- a/Documentation/SUPPORT.md +++ b/Documentation/SUPPORT.md @@ -1,40 +1,74 @@ -## 技术支持 +# 技术支持 -如需技术支持,可订阅VIP服务。扫后面的支付宝二维码后可加VIP群(`867291970`,验证信息请输入支付宝账号)。企业VIP可加官方群私聊群主了解详情。 +如需技术支持,可订阅`个人VIP`服务。扫后面的二维码后可加VIP群`867291970`,验证信息请输入付费的账号。 企业商务合作可联系QQ:3525422251(XCharts技术支持)。 ## 订阅服务 -| |免费用户|付费咨询|个人`1`年`VIP`|个人`2`年`VIP` | 个人长期`VIP` | -| ----- |--|--|--|--|--| -| 订阅费用 | -- | `98`¥ | `298`¥ | `498`¥ | `888`¥ | -| 席位时长 | -- | `1`个席位
`7`天,`7`小时* | `1`个席位
`1`年 | `1`个席位
`2`年 | `1`个席位
`长期` | -| `服务方式:`| -| 官方QQ群交流 | √ | √ | √ | √ | √ | -| 即时一对一交流 | | √ | √ | √ | √ | -| 专属VIP群交流 | | | √ | √ | √ | -| `服务内容:`| -| 可商用 | √ | √ | √ | √ | √ | -| 可二次开发 | √ | √ | √ | √ | √ | -| 有问必答 | | √ | √ | √ | √ | -| 即时回应 | | √ | √ | √ | √ | -| 新手指导 | | √ | √ | √ | √ | -| 开发指导 | | √ | √ | √ | √ | -| 优化指导 | | √ | √ | √ | √ | -| 其他技术支持 | | | √ | √ | √ | -| 问题及时处理 | | | √ | √ | √ | -| 需求优先考虑 | | | √ | √ | √ | -| 可另付费定制 | | | √ | √ | √ | -| 可另付费加急 | | | √ | √ | √ | -| 付费图表优惠 | | | 95折 | 95折 | 85折 | +订阅服务分个人订阅和企业订阅: + +- 个人订阅:个人VIP属于个人,不可转让,XCharts只服务于订阅当事人。 +- 企业订阅:企业VIP属于企业,席位内可安排固定职员,职员离职可重新安排,XCharts通过专属企业群为企业服务。 + +订阅服务的优势? + +- 提高工作效率,节省时间成本。一方面,XCharts功能强大,相关配置项非常多,VIP服务可快速帮您定位,节省去查找和核对的时间;另一方面,VIP的即时回答服务可快速为您答疑解惑,避免中断开发流程。总之,订阅VIP可让您能快速上手,快速处理问题,至少能提高`10`倍以上的工作效率。 +- 更多技术交流,更多经验交流。XCharts团队从业多年,有丰富的技术和工作经验。VIP服务不仅可以交流XCharts相关的内容,也可以咨询其他方面的技术。VIP群也有更多的交流。 +- 订阅VIP后可享受更多其他增值服务。 + +| |免费用户|付费咨询|个人`1`年`VIP`|个人`2`年`VIP` | 个人长期`VIP` | 个人长期`SVIP` | 企业`1`年`VIP` | +| ----- |--|--|--|--|--|--|--| +| 订阅费用 | -- | `98`¥ | `298`¥ | `498`¥ | `898`¥ | `1998`¥ | `联系我们` | +| 订阅时长 | -- | `7`天 | `1`年 | `2`年 | `长期` | `长期` | `1`年 +| 订阅席位 | -- | `1`个席位 | `1`个席位 | `1`个席位 | `1`个席位|`1`个席位|`5`个以上席位| +| __`服务方式:`__| +| 官方QQ群交流 | √ | √ | √ | √ | √ | √ | √ | +| 即时一对一交流 | | √ | √ | √ | √ | √ | √ | +| 专属VIP群交流 | | | √ | √ | √ | √ | √(专属企业群) | +| __`服务内容:`__| +| 可商用 | √ | √ | √ | √ | √ | √ | √ | +| 可二次开发 | √ | √ | √ | √ | √ | √ | √ | +| 有问必答 | | √ | √ | √ | √ | √ | √ | +| 即时回答 | | √ | √ | √ | √ | √ | √ | +| 新手指导 | | √ | √ | √ | √ | √ | √ | +| 开发指导 | | √ | √ | √ | √ | √ | √ | +| 优化指导 | | √ | √ | √ | √ | √ | √ | +| 其他技术支持 | | | √ | √ | √ | √ | √ | +| 问题及时处理 | | | √ | √ | √ | √ | √ | +| 需求优先考虑 | | | √ | √ | √ | √ | √ | +| 可另付费定制 | | | √ | √ | √ | √ | √ | +| 可另付费加急 | | | √ | √ | √ | √ | √ | +| 扩展图表购买 | | | √ | √ | √ | √ | √ | +| 扩展图表优惠 | | | | | 85折 | 全部免费 | | + +## 扩展图表 + +扩展图表为另付费购买图表,目前只对订阅了VIP服务的用户开放购买。对于`个人长期SVIP`的用户,后续新增的所有扩展图表都可以免费使用。 + +扩展图表购买后可访问和下载源码,长期有效,并可获得持续的更新支持。 + +|编号|扩展图表|价格|备注| +|--|--|--|--| +| 101 | PictorialBarChart | 98¥ | 象形柱图 | +| 102 | FunnelChart | 98¥ | 漏斗图 | +| 103 | PyramidChart | 98¥ | 3D金字塔 | +| 104 | TreemapChart | 98¥ | 树形矩图 | +| 201 | Bar3DChart | 198¥ | 3D柱图 | +| 202 | Pie3DChart | 198¥ | 3D饼图 | +| 203 | GanttChart | 198¥ | 甘特图 | +| 204 | GaugeChart | 198¥ | 仪表盘 | +| 205 | LiquidChart | 198¥ | 水位图 | + ## 备注说明 1. __`付费定制`__ 是指用户可根据自己的需求定制不同的图表或新功能,只有`VIP`用户才享有`付费定制`权利。 2. __`付费加急`__ 是指用户可对自己非常紧急的需求进行付费,将开发优先级提到最高,并可要求在`Deadline`内交付,只有`VIP`用户才享有`付费加急`权利。 3. __`付费咨询`__ 付费咨询有效期`7`天,且总咨询时长不超过`7`个小时。 +4. __`扩展图表`__ 扩展图表需要另付费购买,目前只有VIP用户才享有购买`扩展图表`权利。购买后可访问和下载源码,长期有效,并可获得持续的更新支持。 ## 捐助支持 -如果这个项目对您有帮助,请右上方点 `Star` 予以支持!也欢迎任何金额的赞助,非常感谢! +如果这个项目对您有帮助,请右上方点 `Star` 予以支持!也欢迎任意金额的捐助,非常感谢! -![alipay-qrcode](res/alipay.png) \ No newline at end of file +![alipay-qrcode](res/alipay.png) +![wechat-qrcode](res/wechat.png) diff --git a/Documentation/XChartsAPI-EN.md b/Documentation/XChartsAPI-EN.md index b168396f..1903d45e 100644 --- a/Documentation/XChartsAPI-EN.md +++ b/Documentation/XChartsAPI-EN.md @@ -65,6 +65,8 @@ - [SerieContext](#SerieContext) - [SerieConvertAttribute](#SerieConvertAttribute) - [SerieDataContext](#SerieDataContext) +- [SerieDataExtraComponentAttribute](#SerieDataExtraComponentAttribute) +- [SerieDataExtraFieldAttribute](#SerieDataExtraFieldAttribute) - [SerieExtraComponentAttribute](#SerieExtraComponentAttribute) - [SerieHandler](#SerieHandler) - [SerieHandler](#SerieHandler) @@ -144,10 +146,12 @@ Inherits or Implemented: [BaseGraph](#BaseGraph),[ISerializationCallbackReceiver |public method|description| |--|--| | `AddChartComponent()` |public MainComponent AddChartComponent(Type type)
| +| `AddData()` |public SerieData AddData(int serieIndex, DateTime time, double yValue, string dataName = null, string dataId = null)
Add a (time,y) data to serie. | | `AddData()` |public SerieData AddData(int serieIndex, double data, string dataName = null, string dataId = null)
Add a data to serie. | | `AddData()` |public SerieData AddData(int serieIndex, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
| | `AddData()` |public SerieData AddData(int serieIndex, double xValue, double yValue, string dataName = null, string dataId = null)
Add a (x,y) data to serie. | | `AddData()` |public SerieData AddData(int serieIndex, List multidimensionalData, string dataName = null, string dataId = null)
Add an arbitray dimension data to serie,such as (x,y,z,...). | +| `AddData()` |public SerieData AddData(string serieName, DateTime time, double yValue, string dataName = null, string dataId = null)
Add a (time,y) data to serie. | | `AddData()` |public SerieData AddData(string serieName, double data, string dataName = null, string dataId = null)
Add a data to serie. | | `AddData()` |public SerieData AddData(string serieName, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
| | `AddData()` |public SerieData AddData(string serieName, double xValue, double yValue, string dataName = null, string dataId = null)
Add a (x,y) data to serie. | @@ -338,7 +342,7 @@ Inherits or Implemented: [BaseChart](#BaseChart) | `GetMaxDivisibleValue()` |public static double GetMaxDivisibleValue(double max, int ceilRate)
| | `GetMaxLogValue()` |public static double GetMaxLogValue(double value, float logBase, bool isLogBaseE, out int splitNumber)
| | `GetMinDivisibleValue()` |public static double GetMinDivisibleValue(double min, int ceilRate)
| -| `GetMinLogValue()` |public static float GetMinLogValue(double value, float logBase, bool isLogBaseE, out int splitNumber)
| +| `GetMinLogValue()` |public static double GetMinLogValue(double value, float logBase, bool isLogBaseE, out int splitNumber)
| | `GetPointList()` |public static void GetPointList(ref List posList, Vector3 sp, Vector3 ep, float k = 30f)
| | `GetPos()` |public static Vector3 GetPos(Vector3 center, float radius, float angle, bool isDegree = false)
| | `GetPosition()` |public static Vector3 GetPosition(Vector3 center, float angle, float radius)
| @@ -483,6 +487,7 @@ Inherits or Implemented: [Attribute](#Attribute) |public method|description| |--|--| +| `NeedFormat()` |public static bool NeedFormat(string content)
| | `ReplaceAxisLabelContent()` |public static void ReplaceAxisLabelContent(ref string content, string numericFormatter, double value)
| | `ReplaceAxisLabelContent()` |public static void ReplaceAxisLabelContent(ref string content, string value)
| | `TrimAndReplaceLine()` |public static string TrimAndReplaceLine(string content)
| @@ -721,6 +726,38 @@ Inherits or Implemented: [Attribute](#Attribute) |--|--| | `Reset()` |public void Reset()
| +## `SerieDataExtraComponentAttribute` + +Inherits or Implemented: [Attribute](#Attribute) + +|public method|description| +|--|--| +| `Contains()` |public bool Contains(Type type)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute()
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5, Type type6)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5, Type type6, Type type7)
| + +## `SerieDataExtraFieldAttribute` + +Inherits or Implemented: [Attribute](#Attribute) + +|public method|description| +|--|--| +| `Contains()` |public bool Contains(string field)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute()
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2, string field3)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6, string field7)
| + ## `SerieExtraComponentAttribute` Inherits or Implemented: [Attribute](#Attribute) @@ -745,6 +782,7 @@ Inherits or Implemented: [SerieHandler where T](#SerieHandler where T),[Serie](# |public method|description| |--|--| +| `GetSerieDataAutoColor()` |public virtual Color GetSerieDataAutoColor(SerieData serieData)
| | `GetSerieDataLabelOffset()` |public virtual Vector3 GetSerieDataLabelOffset(SerieData serieData, LabelStyle label)
| | `GetSerieDataLabelPosition()` |public virtual Vector3 GetSerieDataLabelPosition(SerieData serieData, LabelStyle label)
| | `GetSerieDataTitlePosition()` |public virtual Vector3 GetSerieDataTitlePosition(SerieData serieData, TitleStyle titleStyle)
| @@ -777,13 +815,13 @@ Inherits or Implemented: [Attribute](#Attribute) | `GetAreaStyle()` |public static AreaStyle GetAreaStyle(Serie serie, SerieData serieData)
| | `GetAreaToColor()` |public static Color32 GetAreaToColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight)
| | `GetAverageData()` |public static double GetAverageData(Serie serie, int dimension = 1, DataZoom dataZoom = null)
| -| `GetItemColor()` |public static Color32 GetItemColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight)
| +| `GetItemColor()` |public static Color32 GetItemColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight, bool opacity = true)
| | `GetItemColor0()` |public static Color32 GetItemColor0(Serie serie, SerieData serieData, ThemeStyle theme, bool highlight, Color32 defaultColor)
| | `GetItemFormatter()` |public static string GetItemFormatter(Serie serie, SerieData serieData, string defaultFormatter = null)
| | `GetItemMarker()` |public static string GetItemMarker(Serie serie, SerieData serieData, string defaultMarker = null)
| | `GetItemStyle()` |public static ItemStyle GetItemStyle(Serie serie, SerieData serieData, bool highlight = false)
| | `GetItemStyleEmphasis()` |public static ItemStyle GetItemStyleEmphasis(Serie serie, SerieData serieData)
| -| `GetItemToColor()` |public static Color32 GetItemToColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight)
| +| `GetItemToColor()` |public static Color32 GetItemToColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight, bool opacity = true)
| | `GetLineColor()` |public static Color32 GetLineColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight)
| | `GetLineStyle()` |public static LineStyle GetLineStyle(Serie serie, SerieData serieData)
| | `GetMaxData()` |public static double GetMaxData(Serie serie, int dimension = 1, DataZoom dataZoom = null)
| diff --git a/Documentation/XChartsAPI-ZH.md b/Documentation/XChartsAPI-ZH.md index 1fe9bc1a..bdf17833 100644 --- a/Documentation/XChartsAPI-ZH.md +++ b/Documentation/XChartsAPI-ZH.md @@ -65,6 +65,8 @@ - [SerieContext](#SerieContext) - [SerieConvertAttribute](#SerieConvertAttribute) - [SerieDataContext](#SerieDataContext) +- [SerieDataExtraComponentAttribute](#SerieDataExtraComponentAttribute) +- [SerieDataExtraFieldAttribute](#SerieDataExtraFieldAttribute) - [SerieExtraComponentAttribute](#SerieExtraComponentAttribute) - [SerieHandler](#SerieHandler) - [SerieHandler](#SerieHandler) @@ -144,10 +146,12 @@ Inherits or Implemented: [BaseGraph](#BaseGraph),[ISerializationCallbackReceiver |public method|description| |--|--| | `AddChartComponent()` |public MainComponent AddChartComponent(Type type)
| +| `AddData()` |public SerieData AddData(int serieIndex, DateTime time, double yValue, string dataName = null, string dataId = null)
添加(time,y)数据到指定的系列中。 | | `AddData()` |public SerieData AddData(int serieIndex, double data, string dataName = null, string dataId = null)
添加一个数据到指定的系列中。 | | `AddData()` |public SerieData AddData(int serieIndex, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
| | `AddData()` |public SerieData AddData(int serieIndex, double xValue, double yValue, string dataName = null, string dataId = null)
添加(x,y)数据到指定系列中。 | | `AddData()` |public SerieData AddData(int serieIndex, List multidimensionalData, string dataName = null, string dataId = null)
添加多维数据(x,y,z...)到指定的系列中。 | +| `AddData()` |public SerieData AddData(string serieName, DateTime time, double yValue, string dataName = null, string dataId = null)
添加(time,y)数据到指定的系列中。 | | `AddData()` |public SerieData AddData(string serieName, double data, string dataName = null, string dataId = null)
If serieName doesn't exist in legend,will be add to legend. | | `AddData()` |public SerieData AddData(string serieName, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
| | `AddData()` |public SerieData AddData(string serieName, double xValue, double yValue, string dataName = null, string dataId = null)
添加(x,y)数据到指定系列中。 | @@ -338,7 +342,7 @@ Inherits or Implemented: [BaseChart](#BaseChart) | `GetMaxDivisibleValue()` |public static double GetMaxDivisibleValue(double max, int ceilRate)
| | `GetMaxLogValue()` |public static double GetMaxLogValue(double value, float logBase, bool isLogBaseE, out int splitNumber)
| | `GetMinDivisibleValue()` |public static double GetMinDivisibleValue(double min, int ceilRate)
| -| `GetMinLogValue()` |public static float GetMinLogValue(double value, float logBase, bool isLogBaseE, out int splitNumber)
| +| `GetMinLogValue()` |public static double GetMinLogValue(double value, float logBase, bool isLogBaseE, out int splitNumber)
| | `GetPointList()` |public static void GetPointList(ref List posList, Vector3 sp, Vector3 ep, float k = 30f)
| | `GetPos()` |public static Vector3 GetPos(Vector3 center, float radius, float angle, bool isDegree = false)
| | `GetPosition()` |public static Vector3 GetPosition(Vector3 center, float angle, float radius)
| @@ -483,6 +487,7 @@ Inherits or Implemented: [Attribute](#Attribute) |public method|description| |--|--| +| `NeedFormat()` |public static bool NeedFormat(string content)
| | `ReplaceAxisLabelContent()` |public static void ReplaceAxisLabelContent(ref string content, string numericFormatter, double value)
| | `ReplaceAxisLabelContent()` |public static void ReplaceAxisLabelContent(ref string content, string value)
| | `TrimAndReplaceLine()` |public static string TrimAndReplaceLine(string content)
| @@ -721,6 +726,38 @@ Inherits or Implemented: [Attribute](#Attribute) |--|--| | `Reset()` |public void Reset()
| +## `SerieDataExtraComponentAttribute` + +Inherits or Implemented: [Attribute](#Attribute) + +|public method|description| +|--|--| +| `Contains()` |public bool Contains(Type type)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute()
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5, Type type6)
| +| `SerieDataExtraComponentAttribute()` |public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5, Type type6, Type type7)
| + +## `SerieDataExtraFieldAttribute` + +Inherits or Implemented: [Attribute](#Attribute) + +|public method|description| +|--|--| +| `Contains()` |public bool Contains(string field)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute()
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2, string field3)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6)
| +| `SerieDataExtraFieldAttribute()` |public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6, string field7)
| + ## `SerieExtraComponentAttribute` Inherits or Implemented: [Attribute](#Attribute) @@ -745,6 +782,7 @@ Inherits or Implemented: [SerieHandler where T](#SerieHandler where T),[Serie](# |public method|description| |--|--| +| `GetSerieDataAutoColor()` |public virtual Color GetSerieDataAutoColor(SerieData serieData)
| | `GetSerieDataLabelOffset()` |public virtual Vector3 GetSerieDataLabelOffset(SerieData serieData, LabelStyle label)
| | `GetSerieDataLabelPosition()` |public virtual Vector3 GetSerieDataLabelPosition(SerieData serieData, LabelStyle label)
| | `GetSerieDataTitlePosition()` |public virtual Vector3 GetSerieDataTitlePosition(SerieData serieData, TitleStyle titleStyle)
| @@ -777,13 +815,13 @@ Inherits or Implemented: [Attribute](#Attribute) | `GetAreaStyle()` |public static AreaStyle GetAreaStyle(Serie serie, SerieData serieData)
| | `GetAreaToColor()` |public static Color32 GetAreaToColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight)
| | `GetAverageData()` |public static double GetAverageData(Serie serie, int dimension = 1, DataZoom dataZoom = null)
| -| `GetItemColor()` |public static Color32 GetItemColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight)
| +| `GetItemColor()` |public static Color32 GetItemColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight, bool opacity = true)
| | `GetItemColor0()` |public static Color32 GetItemColor0(Serie serie, SerieData serieData, ThemeStyle theme, bool highlight, Color32 defaultColor)
| | `GetItemFormatter()` |public static string GetItemFormatter(Serie serie, SerieData serieData, string defaultFormatter = null)
| | `GetItemMarker()` |public static string GetItemMarker(Serie serie, SerieData serieData, string defaultMarker = null)
| | `GetItemStyle()` |public static ItemStyle GetItemStyle(Serie serie, SerieData serieData, bool highlight = false)
| | `GetItemStyleEmphasis()` |public static ItemStyle GetItemStyleEmphasis(Serie serie, SerieData serieData)
| -| `GetItemToColor()` |public static Color32 GetItemToColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight)
| +| `GetItemToColor()` |public static Color32 GetItemToColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight, bool opacity = true)
| | `GetLineColor()` |public static Color32 GetLineColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight)
| | `GetLineStyle()` |public static LineStyle GetLineStyle(Serie serie, SerieData serieData)
| | `GetMaxData()` |public static double GetMaxData(Serie serie, int dimension = 1, DataZoom dataZoom = null)
| diff --git a/Documentation/XChartsConfiguration-EN.md b/Documentation/XChartsConfiguration-EN.md index 1701d78e..7b8b835c 100644 --- a/Documentation/XChartsConfiguration-EN.md +++ b/Documentation/XChartsConfiguration-EN.md @@ -47,6 +47,7 @@ - [Axis](#Axis) - [Background](#Background) - [CalendarCoord](#CalendarCoord) +- [Comment](#Comment) - [CoordSystem](#CoordSystem) - [DataZoom](#DataZoom) - [GridCoord](#GridCoord) @@ -82,9 +83,14 @@ - [AxisTick](#AxisTick) - [BaseAxisTheme](#BaseAxisTheme) - [BaseLine](#BaseLine) +- [CommentItem](#CommentItem) +- [CommentMarkStyle](#CommentMarkStyle) - [ComponentTheme](#ComponentTheme) - [DataZoomTheme](#DataZoomTheme) - [Emphasis](#Emphasis) +- [EmphasisItemStyle](#EmphasisItemStyle) +- [EmphasisLabelLine](#EmphasisLabelLine) +- [EmphasisLabelStyle](#EmphasisLabelStyle) - [EndLabelStyle](#EndLabelStyle) - [IconStyle](#IconStyle) - [ImageStyle](#ImageStyle) @@ -103,7 +109,6 @@ - [RadarAxisTheme](#RadarAxisTheme) - [RadiusAxisTheme](#RadiusAxisTheme) - [SerieData](#SerieData) -- [SerieDataBaseInfo](#SerieDataBaseInfo) - [SerieSymbol](#SerieSymbol) - [SerieTheme](#SerieTheme) - [StageColor](#StageColor) @@ -116,13 +121,16 @@ - [TitleStyle](#TitleStyle) - [TitleTheme](#TitleTheme) - [TooltipTheme](#TooltipTheme) -- [VisualMapPieces](#VisualMapPieces) +- [VisualMapRange](#VisualMapRange) - [VisualMapTheme](#VisualMapTheme) ## ISerieExtraComponent - [AreaStyle](#AreaStyle) - [Emphasis](#Emphasis) +- [EmphasisItemStyle](#EmphasisItemStyle) +- [EmphasisLabelLine](#EmphasisLabelLine) +- [EmphasisLabelStyle](#EmphasisLabelStyle) - [ImageStyle](#ImageStyle) - [LabelLine](#LabelLine) - [LabelStyle](#LabelStyle) @@ -133,12 +141,14 @@ - [AreaStyle](#AreaStyle) - [Emphasis](#Emphasis) +- [EmphasisItemStyle](#EmphasisItemStyle) +- [EmphasisLabelLine](#EmphasisLabelLine) +- [EmphasisLabelStyle](#EmphasisLabelStyle) - [ImageStyle](#ImageStyle) - [ItemStyle](#ItemStyle) - [LabelLine](#LabelLine) - [LabelStyle](#LabelStyle) - [LineStyle](#LineStyle) -- [SerieDataBaseInfo](#SerieDataBaseInfo) - [SerieSymbol](#SerieSymbol) - [TitleStyle](#TitleStyle) @@ -414,6 +424,45 @@ Inherits or Implemented: [Serie](#Serie),[INeedSerieContainer](#INeedSerieContai ## `ChildComponent` +## `Comment` + +Inherits or Implemented: [MainComponent](#MainComponent) + +comment of chart. + +|field|default|comment| +|--|--|--| +| `show` |true | Set this to false to prevent the comment from showing. | +| `labelStyle` | | The text style of all comments. [LabelStyle](LabelStyle)| +| `markStyle` | | The text style of all comments. [CommentMarkStyle](CommentMarkStyle)| +| `items` | | | + +## `CommentItem` + +Inherits or Implemented: [ChildComponent](#ChildComponent) + +comment of chart. + +|field|default|comment| +|--|--|--| +| `show` |true | Set this to false to prevent this comment item from showing. | +| `content` | | content of comment. | +| `position` | | position of comment. | +| `markRect` | | | +| `markStyle` | | [CommentMarkStyle](CommentMarkStyle)| +| `labelStyle` | | The text style of all comments. [LabelStyle](LabelStyle)| + +## `CommentMarkStyle` + +Inherits or Implemented: [ChildComponent](#ChildComponent) + +comment of chart. + +|field|default|comment| +|--|--|--| +| `show` |true | Set this to false to prevent this comment item from showing. | +| `lineStyle` | | [LineStyle](LineStyle)| + ## `ComponentTheme` Inherits or Implemented: [ChildComponent](#ChildComponent) @@ -516,6 +565,27 @@ Inherits or Implemented: [ChildComponent](#ChildComponent),[ISerieExtraComponent | `labelLine` | | [LabelLine](LabelLine)| | `itemStyle` | | 图形样式。 [ItemStyle](ItemStyle)| +## `EmphasisItemStyle` + +Inherits or Implemented: [ItemStyle](#ItemStyle),[ISerieExtraComponent](#ISerieExtraComponent),[ISerieDataComponent](#ISerieDataComponent) + +高亮的图形样式 + + +## `EmphasisLabelLine` + +Inherits or Implemented: [LabelLine](#LabelLine),[ISerieExtraComponent](#ISerieExtraComponent),[ISerieDataComponent](#ISerieDataComponent) + +高亮的标签引导线样式 + + +## `EmphasisLabelStyle` + +Inherits or Implemented: [LabelStyle](#LabelStyle),[ISerieExtraComponent](#ISerieExtraComponent),[ISerieDataComponent](#ISerieDataComponent) + +高亮的标签样式 + + ## `EndLabelStyle` Inherits or Implemented: [LabelStyle](#LabelStyle) @@ -704,11 +774,13 @@ Legend component.The legend component shows different sets of tags, colors, and | `itemHeight` |12.0f | Image height of legend symbol. | | `itemGap` |10f | The distance between each legend, horizontal distance in horizontal layout, and vertical distance in vertical layout. | | `itemAutoColor` |true | Whether the legend symbol matches the color automatically. | -| `textAutoColor` |false | Whether the legend text matches the color automatically. | +| `itemOpacity` |1 | the opacity of item color. | | `formatter` | | | +| `numericFormatter` | | Standard numeric format strings. | | `labelStyle` | | the style of text. [LabelStyle](LabelStyle)| | `data` | | Data array of legend. An array item is usually a name representing string. (If it is a pie chart, it could also be the name of a single data in the pie chart) of a series. | | `icons` | | 自定义的图例标记图形。 | +| `colors` | | | ## `LegendTheme` @@ -749,7 +821,7 @@ Inherits or Implemented: [ChildComponent](#ChildComponent),[ISerieExtraComponent |field|default|comment| |--|--|--| | `show` | | Whether to show the arrow. | -| `position` | | The position of arrow.
`LineArrow.Position`:
- `End`: 末端箭头
- `Start`: 头端箭头
| +| `position` | | The position of arrow.
`LabelStyle.Position`:
- `Default`: The position of label.
- `Outside`: Outside of sectors of pie chart, which relates to corresponding sector through visual guide line.
- `Inside`: Inside the sectors of pie chart.
- `Center`: In the center of pie chart.
- `Top`: top of symbol.
- `Bottom`: the bottom of symbol.
- `Left`: the left of symbol.
- `Right`: the right of symbol.
- `Start`: the start of line.
- `Middle`: the middle of line.
- `End`: the end of line.
| | `arrow` | | the arrow of line. [ArrowStyle](ArrowStyle)| ## `LineStyle` @@ -954,7 +1026,9 @@ Inherits or Implemented: [BaseSerie](#BaseSerie),[IComparable](#IComparable) | `lineArrows` | | | | `areaStyles` | | | | `titleStyles` | | | -| `emphases` | | | +| `emphasisItemStyles` | | | +| `emphasisLabels` | | | +| `emphasisLabelLines` | | | | `index` | | The index of serie. | | `show` |true | Whether to show serie in chart. | | `coordSystem` | | the chart coord system of serie. | @@ -977,8 +1051,8 @@ Inherits or Implemented: [BaseSerie](#BaseSerie),[IComparable](#IComparable) | `lineType` | | The type of line chart.
`LineType`:
- `Normal`: the normal line chart, 普通折线图。
- `Smooth`: the smooth line chart, 平滑曲线。
- `StepStart`: step line.
- `StepMiddle`: step line.
- `StepEnd`: step line.
| | `barType` | | 柱形图类型。
`BarType`:
- `Normal`: 普通柱形图
- `Zebra`: 斑马柱形图
- `Capsule`: 胶囊柱形图
| | `barPercentStack` |false | 柱形图是否为百分比堆积。相同stack的serie只要有一个barPercentStack为true,则就显示成百分比堆叠柱状图。 | -| `barWidth` |0.6f | The width of the bar. Adaptive when default 0. | -| `barGap` |0.3f; // 30 | The gap between bars between different series, is a percent value like '0.3f' , which means 30% of the bar width, can be set as a fixed value. | +| `barWidth` |0 | The width of the bar. Adaptive when default 0. | +| `barGap` |0.1f | The gap between bars between different series, is a percent value like '0.3f' , which means 30% of the bar width, can be set as a fixed value. | | `barZebraWidth` |4f | 斑马线的粗细。 | | `barZebraGap` |2f | 斑马线的间距。 | | `min` | | 最小值。 | @@ -1035,29 +1109,21 @@ A data item of serie. | `name` | | the name of data item. | | `id` | | 数据项的唯一id。唯一id不是必须设置的。 | | `parentId` | | | -| `baseInfos` | | | +| `ignore` | | 是否忽略数据。当为 true 时,数据不进行绘制。 | +| `selected` | | Whether the data item is selected. | +| `radius` | | 自定义半径。可用在饼图中自定义某个数据项的半径。 | | `itemStyles` | | | | `labels` | | | | `labelLines` | | | -| `emphases` | | | | `symbols` | | | | `lineStyles` | | | | `areaStyles` | | | | `titleStyles` | | | +| `emphasisItemStyles` | | | +| `emphasisLabels` | | | +| `emphasisLabelLines` | | | | `data` | | An arbitrary dimension data list of data item. | -## `SerieDataBaseInfo` - -Inherits or Implemented: [ChildComponent](#ChildComponent),[ISerieDataComponent](#ISerieDataComponent) - -数据项的其他基础数据。 - -|field|default|comment| -|--|--|--| -| `ignore` |false | 是否忽略数据。当为 true 时,数据不进行绘制。 | -| `selected` | | Whether the data item is selected. | -| `radius` | | 自定义半径。可用在饼图中自定义某个数据项的半径。 | - ## `SerieSymbol` Inherits or Implemented: [SymbolStyle](#SymbolStyle),[ISerieDataComponent](#ISerieDataComponent) @@ -1392,11 +1458,10 @@ VisualMap component. Mapping data to visual elements such as colors. | `location` | | The location of component. [Location](Location)| | `workOnLine` |true | Whether the visualmap is work on linestyle of linechart. | | `workOnArea` |false | Whether the visualmap is work on areaStyle of linechart. | -| `inRange` | | Defines the visual color in the selected range. | | `outOfRange` | | Defines a visual color outside of the selected range. | -| `pieces` | | 分段式每一段的相关配置。 | +| `inRange` | | 分段式每一段的相关配置。 | -## `VisualMapPieces` +## `VisualMapRange` Inherits or Implemented: [ChildComponent](#ChildComponent) diff --git a/Documentation/XChartsConfiguration-ZH.md b/Documentation/XChartsConfiguration-ZH.md index 791a485b..44f062f2 100644 --- a/Documentation/XChartsConfiguration-ZH.md +++ b/Documentation/XChartsConfiguration-ZH.md @@ -47,6 +47,7 @@ - [Axis](#Axis) - [Background](#Background) - [CalendarCoord](#CalendarCoord) +- [Comment](#Comment) - [CoordSystem](#CoordSystem) - [DataZoom](#DataZoom) - [GridCoord](#GridCoord) @@ -82,9 +83,14 @@ - [AxisTick](#AxisTick) - [BaseAxisTheme](#BaseAxisTheme) - [BaseLine](#BaseLine) +- [CommentItem](#CommentItem) +- [CommentMarkStyle](#CommentMarkStyle) - [ComponentTheme](#ComponentTheme) - [DataZoomTheme](#DataZoomTheme) - [Emphasis](#Emphasis) +- [EmphasisItemStyle](#EmphasisItemStyle) +- [EmphasisLabelLine](#EmphasisLabelLine) +- [EmphasisLabelStyle](#EmphasisLabelStyle) - [EndLabelStyle](#EndLabelStyle) - [IconStyle](#IconStyle) - [ImageStyle](#ImageStyle) @@ -103,7 +109,6 @@ - [RadarAxisTheme](#RadarAxisTheme) - [RadiusAxisTheme](#RadiusAxisTheme) - [SerieData](#SerieData) -- [SerieDataBaseInfo](#SerieDataBaseInfo) - [SerieSymbol](#SerieSymbol) - [SerieTheme](#SerieTheme) - [StageColor](#StageColor) @@ -116,13 +121,16 @@ - [TitleStyle](#TitleStyle) - [TitleTheme](#TitleTheme) - [TooltipTheme](#TooltipTheme) -- [VisualMapPieces](#VisualMapPieces) +- [VisualMapRange](#VisualMapRange) - [VisualMapTheme](#VisualMapTheme) ## ISerieExtraComponent Serie额外组件 - [AreaStyle](#AreaStyle) - [Emphasis](#Emphasis) +- [EmphasisItemStyle](#EmphasisItemStyle) +- [EmphasisLabelLine](#EmphasisLabelLine) +- [EmphasisLabelStyle](#EmphasisLabelStyle) - [ImageStyle](#ImageStyle) - [LabelLine](#LabelLine) - [LabelStyle](#LabelStyle) @@ -133,12 +141,14 @@ - [AreaStyle](#AreaStyle) - [Emphasis](#Emphasis) +- [EmphasisItemStyle](#EmphasisItemStyle) +- [EmphasisLabelLine](#EmphasisLabelLine) +- [EmphasisLabelStyle](#EmphasisLabelStyle) - [ImageStyle](#ImageStyle) - [ItemStyle](#ItemStyle) - [LabelLine](#LabelLine) - [LabelStyle](#LabelStyle) - [LineStyle](#LineStyle) -- [SerieDataBaseInfo](#SerieDataBaseInfo) - [SerieSymbol](#SerieSymbol) - [TitleStyle](#TitleStyle) @@ -414,6 +424,45 @@ Inherits or Implemented: [Serie](#Serie),[INeedSerieContainer](#INeedSerieContai ## `ChildComponent` +## `Comment` + +Inherits or Implemented: [MainComponent](#MainComponent) + +图表注解组件。 + +|field|default|comment| +|--|--|--| +| `show` |true | 是否显示注解组件。 | +| `labelStyle` | | 所有组件的文本样式。 [LabelStyle](LabelStyle)| +| `markStyle` | | 所有组件的文本样式。 [CommentMarkStyle](CommentMarkStyle)| +| `items` | | | + +## `CommentItem` + +Inherits or Implemented: [ChildComponent](#ChildComponent) + +注解项。 + +|field|default|comment| +|--|--|--| +| `show` |true | 是否显示当前注解项。 | +| `content` | | 注解的文本内容。 | +| `position` | | 注解项的位置坐标。 | +| `markRect` | | | +| `markStyle` | | [CommentMarkStyle](CommentMarkStyle)| +| `labelStyle` | | 注解项的文本样式。 [LabelStyle](LabelStyle)| + +## `CommentMarkStyle` + +Inherits or Implemented: [ChildComponent](#ChildComponent) + +注解项。 + +|field|default|comment| +|--|--|--| +| `show` |true | 是否显示当前注解项。 | +| `lineStyle` | | [LineStyle](LineStyle)| + ## `ComponentTheme` Inherits or Implemented: [ChildComponent](#ChildComponent) @@ -516,6 +565,27 @@ Inherits or Implemented: [ChildComponent](#ChildComponent),[ISerieExtraComponent | `labelLine` | | [LabelLine](LabelLine)| | `itemStyle` | | 图形样式。 [ItemStyle](ItemStyle)| +## `EmphasisItemStyle` + +Inherits or Implemented: [ItemStyle](#ItemStyle),[ISerieExtraComponent](#ISerieExtraComponent),[ISerieDataComponent](#ISerieDataComponent) + +高亮的图形样式 + + +## `EmphasisLabelLine` + +Inherits or Implemented: [LabelLine](#LabelLine),[ISerieExtraComponent](#ISerieExtraComponent),[ISerieDataComponent](#ISerieDataComponent) + +高亮的标签引导线样式 + + +## `EmphasisLabelStyle` + +Inherits or Implemented: [LabelStyle](#LabelStyle),[ISerieExtraComponent](#ISerieExtraComponent),[ISerieDataComponent](#ISerieDataComponent) + +高亮的标签样式 + + ## `EndLabelStyle` Inherits or Implemented: [LabelStyle](#LabelStyle) @@ -704,11 +774,13 @@ Inherits or Implemented: [MainComponent](#MainComponent),[IPropertyChanged](#IPr | `itemHeight` |12.0f | 图例标记的图形高度。 [default:12f] | | `itemGap` |10f | 图例每项之间的间隔。横向布局时为水平间隔,纵向布局时为纵向间隔。 [default:10f] | | `itemAutoColor` |true | 图例标记的图形是否自动匹配颜色。 [default:true] | -| `textAutoColor` |false | 图例标记的文本是否自动匹配颜色。 [default:false] | +| `itemOpacity` |1 | 图例标记的图形的颜色透明度。 | | `formatter` | | | +| `numericFormatter` | | 标准数字格式字符串。用于将数值格式化显示为字符串。 使用Axx的形式:A是格式说明符的单字符,支持C货币、D十进制、E指数、F定点数、G常规、N数字、P百分比、R往返、X十六进制的。xx是精度说明,从0-99。 参考:https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/standard-numeric-format-strings | | `labelStyle` | | 文本样式。 [LabelStyle](LabelStyle)| | `data` | | If data is not specified, it will be auto collected from series. | | `icons` | | 自定义的图例标记图形。 | +| `colors` | | | ## `LegendTheme` @@ -749,7 +821,7 @@ Inherits or Implemented: [ChildComponent](#ChildComponent),[ISerieExtraComponent |field|default|comment| |--|--|--| | `show` | | 是否显示箭头。 | -| `position` | | 箭头位置。
`LineArrow.Position`:
- `End`: 末端箭头
- `Start`: 头端箭头
| +| `position` | | 箭头位置。
`LabelStyle.Position`:
- `Default`: 标签的位置。
- `Outside`: 饼图扇区外侧,通过视觉引导线连到相应的扇区。
- `Inside`: 饼图扇区内部。
- `Center`: 在饼图中心位置。
- `Top`: 图形标志的顶部。
- `Bottom`: 图形标志的底部。
- `Left`: 图形标志的左边。
- `Right`: 图形标志的右边。
- `Start`: 线的起始点。
- `Middle`: 线的中点。
- `End`: 线的结束点。
| | `arrow` | | 箭头。 [ArrowStyle](ArrowStyle)| ## `LineStyle` @@ -954,7 +1026,9 @@ Inherits or Implemented: [BaseSerie](#BaseSerie),[IComparable](#IComparable) | `lineArrows` | | | | `areaStyles` | | | | `titleStyles` | | | -| `emphases` | | | +| `emphasisItemStyles` | | | +| `emphasisLabels` | | | +| `emphasisLabelLines` | | | | `index` | | 系列索引。 | | `show` |true | 系列是否显示在图表上。 | | `coordSystem` | | 使用的坐标系。 | @@ -977,8 +1051,8 @@ Inherits or Implemented: [BaseSerie](#BaseSerie),[IComparable](#IComparable) | `lineType` | | 折线图样式类型。
`LineType`:
- `Normal`: the normal line chart, 普通折线图。
- `Smooth`: the smooth line chart, 平滑曲线。
- `StepStart`: 阶梯线图:当前点。
- `StepMiddle`: 阶梯线图:当前点和下一个点的中间。
- `StepEnd`: 阶梯线图:下一个拐点。
| | `barType` | | 柱形图类型。
`BarType`:
- `Normal`: 普通柱形图
- `Zebra`: 斑马柱形图
- `Capsule`: 胶囊柱形图
| | `barPercentStack` |false | 柱形图是否为百分比堆积。相同stack的serie只要有一个barPercentStack为true,则就显示成百分比堆叠柱状图。 | -| `barWidth` |0.6f | 柱条的宽度,不设时自适应。支持设置成相对于类目宽度的百分比。 | -| `barGap` |0.3f; // 30 | Set barGap as '-1' can overlap bars that belong to different series, which is useful when making a series of bar be background. | +| `barWidth` |0 | 柱条的宽度,不设时自适应。支持设置成相对于类目宽度的百分比。 | +| `barGap` |0.1f | Set barGap as '-1' can overlap bars that belong to different series, which is useful when making a series of bar be background. | | `barZebraWidth` |4f | 斑马线的粗细。 | | `barZebraGap` |2f | 斑马线的间距。 | | `min` | | 最小值。 | @@ -1035,29 +1109,21 @@ Inherits or Implemented: [ChildComponent](#ChildComponent) | `name` | | 数据项名称。 | | `id` | | 数据项的唯一id。唯一id不是必须设置的。 | | `parentId` | | | -| `baseInfos` | | | +| `ignore` | | 是否忽略数据。当为 true 时,数据不进行绘制。 | +| `selected` | | 该数据项是否被选中。 | +| `radius` | | 自定义半径。可用在饼图中自定义某个数据项的半径。 | | `itemStyles` | | | | `labels` | | | | `labelLines` | | | -| `emphases` | | | | `symbols` | | | | `lineStyles` | | | | `areaStyles` | | | | `titleStyles` | | | +| `emphasisItemStyles` | | | +| `emphasisLabels` | | | +| `emphasisLabelLines` | | | | `data` | | 可指定任意维数的数值列表。 | -## `SerieDataBaseInfo` - -Inherits or Implemented: [ChildComponent](#ChildComponent),[ISerieDataComponent](#ISerieDataComponent) - -数据项的其他基础数据。 - -|field|default|comment| -|--|--|--| -| `ignore` |false | 是否忽略数据。当为 true 时,数据不进行绘制。 | -| `selected` | | 该数据项是否被选中。 | -| `radius` | | 自定义半径。可用在饼图中自定义某个数据项的半径。 | - ## `SerieSymbol` Inherits or Implemented: [SymbolStyle](#SymbolStyle),[ISerieDataComponent](#ISerieDataComponent) @@ -1392,11 +1458,10 @@ Inherits or Implemented: [MainComponent](#MainComponent) | `location` | | 组件显示的位置。 [Location](Location)| | `workOnLine` |true | 组件是否对LineChart的LineStyle有效。 | | `workOnArea` |false | 组件是否对LineChart的AreaStyle有效。 | -| `inRange` | | 定义 在选中范围中 的视觉颜色。 | | `outOfRange` | | 定义 在选中范围外 的视觉颜色。 | -| `pieces` | | 分段式每一段的相关配置。 | +| `inRange` | | 分段式每一段的相关配置。 | -## `VisualMapPieces` +## `VisualMapRange` Inherits or Implemented: [ChildComponent](#ChildComponent) diff --git a/Documentation/XChartsFAQ-EN.md b/Documentation/XChartsFAQ-EN.md index a2ac762d..d3b00d5b 100644 --- a/Documentation/XChartsFAQ-EN.md +++ b/Documentation/XChartsFAQ-EN.md @@ -32,7 +32,6 @@ [QA 26: How do I use the background component? What are the conditions?](#How-do-I-use-the-background-component-What-are-the-conditions) [QA 27: Mesh can not have more than 65000 vertices?](#Mesh-cannot-have-more-than-65000-vertices) [QA 28: Why are the parameters set in Serie reset after they run?](#Why-are-the-parameters-set-in-Serie-reset-after-they-run) -[QA 29: Why are many custom colors lost after upgrading to 1.6.0? How should I upgrade?](#Why_are_many_custom_colors_lost_after_upgrading_to_1_6_0_How_should_I_upgrade) ## How-to-adjust-the-margin-between-the-axis-and-the=-background @@ -146,16 +145,6 @@ A: This is the limit of `UGUI` on the number of vertices for a single `Graphic`. A: Check whether `RemoveData()` and add new `Serie` in the code. If you want to keep the configuration of `Serie`, you can only `ClearData()` which just clear data and then readd the data to the old serie. -## Why_are_many_custom_colors_lost_after_upgrading_to_1_6_0_How_should_I_upgrade - -A: In version `1.6.0`, in order to reduce implicit conversion, all drawing related `Color` was changed to `Color32`, so some custom colors were lost. The main components affected are: `ItemStyle`, `LineStyle`, `AreaStyle`, `Vessel`, `VisualMap`, `AxisSplitArea`, `AxisSplitLine`, `GaugeAxis`,`SerieLabel`, etc. Can use the script [UpgradeChartColor.cs](https://github.com/XCharts-Team/XCharts/blob/master/Assets/XCharts/Editor/Tools/UpgradeChartColor.cs) to upgrade. -The upgrade steps are as follows: -1. Back up the project. -2. Download or copy the script [UpgradeChartColor.cs](https://github.com/XCharts-Team/XCharts/blob/master/Assets/XCharts/Editor/Tools/UpgradeChartColor.cs) in the old project `Editor`, Change the `color` field inside to `color.clear` (because some fields may not exist in the old version). -3. After compilation, the old version of color configuration file is exported through `menu bar -> XCharts-> ExportColorConfig` (the configuration file is saved by default to `color.config` under `Assets`). -4. Upgrade `XCharts` to the latest version. -5. The custom color can be restored by importing `color.config` through `menu bar -> XCharts-> ImportColorConfig` (if `color.config` is not under `Assets` of the upgraded project, copy it to this directory). - [XCharts Homepage](https://github.com/XCharts-Team/XCharts)
[XCharts API](XChartsAPI-EN.md)
[XCharts Configuration](XChartsConfiguration-EN.md) \ No newline at end of file diff --git a/Documentation/XChartsFAQ-ZH.md b/Documentation/XChartsFAQ-ZH.md index 0a10d4f3..f9d051c0 100644 --- a/Documentation/XChartsFAQ-ZH.md +++ b/Documentation/XChartsFAQ-ZH.md @@ -32,7 +32,6 @@ [QA 26:如何使用背景组件?有什么条件限制?](#如何使用背景组件_有什么条件限制) [QA 27:Mesh can not have more than 65000 vertices?](#Mesh_cannot_have_more_than_65000_vertices) [QA 28:为什么serie里设置的参数运行后又被重置了?](#为什么serie里设置的参数运行后又被重置了) -[QA 29:为什么升级到1.6.0版本后很多自定义颜色丢失了?应该如何升级?](#为什么升级到1_6_0版本后很多自定义颜色丢失了_应该如何升级) ## 如何调整坐标轴与背景的边距 @@ -150,18 +149,6 @@ 答:检测下代码里是否调用了`RemoveData()`并重新添加`Serie`了。如果想保留`Serie`的配置可以只`ClearData()`,然后重新添加数据。 -## 为什么升级到1_6_0版本后很多自定义颜色丢失了_应该如何升级 - -答:1.6.0版本为了减少隐式转换,将所有的绘制相关的`Color`都改为了`Color32`,所以会导致一些自定义的颜色的丢失。影响到的主要组件有:`ItemStyle`,`LineStyle`,`AreaStyle`,`Vessel`,`VisualMap`,`AxisSplitArea`,`AxisSplitLine`,`GaugeAxis`,`SerieLabel`等。可以用脚本[UpgradeChartColor.cs](https://github.com/XCharts-Team/XCharts/blob/master/Assets/XCharts/Editor/Tools/UpgradeChartColor.cs)进行升级。 -升级步骤如下: -1. 备份好你的项目。 -2. 先不升级`XCharts`,只下载或拷贝脚本[UpgradeChartColor.cs](https://github.com/XCharts-Team/XCharts/blob/master/Assets/XCharts/Editor/Tools/UpgradeChartColor.cs)放到旧项目的`Editor`下,由于旧版本可能不存在某些新版本才有的图表或者属性配置,可能会编译错误,需要处理按3,4步骤处理一下。 -3. 若是由`itemStyle.toColor2`引起的编译报错,可将导出地方的`itemStyle.toColor2`改为`Color.clear`;导入的地方注释掉即可。 -4. 若是由`LiquidChart`引起的编译报错,将所有涉及`LiquidChart`的地方都注释掉即可。 -5. 编译通过后,通过`菜单栏->XCharts->ExportColorConfig`导出旧版本的颜色配置文件(配置文件默认保存到`Assets`下的`color.config`)。 -6. 升级`XCharts`到最新版本。 -7. 通过`菜单栏->XCharts->ImportColorConfig`将`color.config`导入即可恢复自定义的颜色(如果`color.config`不在升级后的项目的`Assets`下的话需要拷贝到此目录下)。 - [XCharts主页](https://github.com/XCharts-Team/XCharts) [XChartsAPI](XChartsAPI-ZH.md) [XCharts配置项手册](XChartsConfiguration-ZH.md) diff --git a/Documentation/XChartsTutorial01-ZH.md b/Documentation/XChartsTutorial01-ZH.md index cd456c12..fbd181b7 100644 --- a/Documentation/XChartsTutorial01-ZH.md +++ b/Documentation/XChartsTutorial01-ZH.md @@ -7,7 +7,7 @@ ## 获取和导入 XCharts -1. 直接放入XCharts源码到项目 +1. 直接将XCharts源码到项目 下载好XCharts源码后,直接将XCharts目录拷贝到Unity项目工程的Assets目录下。 @@ -17,46 +17,46 @@ 3. 通过`Package Manager`导入XCharts - 对于Unity 2018.3以上版本,可通过 Package Manager来导入XCharts,打开Package Manager后,通过 `Add package form git URL...`,输入XCharts的github URL: https://github.com/XCharts-Team/XCharts.git#master 稍等片刻后即可使用XCharts。 + 对于Unity 2018.3以上版本,可通过 Package Manager来导入XCharts,打开Package Manager后,通过 `Add package form git URL...`,输入XCharts3.0的GitHub URL: `https://github.com/XCharts-Team/XCharts.git#3.0` 稍等片刻后即可使用XCharts。 也可以直接将package加入到`manifest.json`文件:打开`Packages`目录下的`manifest.json`文件,在`dependencies`下加入: ``` json - "com.monitor1394.xcharts": "https://github.com/XCharts-Team/XCharts.git#master", + "com.monitor1394.xcharts": "https://github.com/XCharts-Team/XCharts.git#3.0", ``` 如需更新`XCharts`,删除`manifest.json`文件(部分Unity版本可能是packages-lock.json文件)的`lock`下的`com.monitor1394.xcharts`相关内容即会重新下载编译。 ## 添加一个简单图表 -在`Hierarchy`试图下右键或菜单栏`GameObject`下拉:`XCharts->LineChart`: - -![op_addchart](res/op_addchart.png) - -即可快速创建一个简单的折线图出来: +在`Hierarchy`视图下右键或菜单栏`GameObject`下拉选择`XCharts->LineChart`,即可快速创建一个默认的折线图出来: ![linechart1](res/linechart1.png) ## 添加多个Seire -如何在上图的基础上添加两条折线呢,只需`Add Serie`按钮,选择对应的`Serie`类型即可: +在`Inspector`视图,找到`LineChart`的面板,通过`Add Serie`按钮,可以添加第二条`Line`折线: + ![op_addserie](res/op_addserie.png) ![linechart2](res/linechart2.png) ## 添加其他组件 默认图表没有`Legend`,需要`Legend`组件可通过`Add Component`按钮添加: + ![op_addcomponent](res/op_addcomponent.png) ## 添加Serie组件 -如果需要给折线图区域填充颜色,可单独给`Serie`添加`Component`: +Serie只自带了几个常见的组件,其他组件按需额外添加。比如,需要给折线图区域填充颜色,可单独给`Serie`添加`AreaStyle`组件: + ![op_addseriecomponent](res/op_addseriecomponent.png) ![linechart3](res/linechart3.png) ## 添加SerieData组件 -如果需要个性化定制每个数据项的配置,可以单独给每个`SerieData`添加`Component`。比如我们给第一个折线图的第二个数据单独显示`Label`: +如果需要个性化定制每个数据项的配置,可以单独给每个`SerieData`添加`Component`。比如我们给折线图的第二个数据单独显示`Label`: + ![op_addseriedatacomponent](res/op_addseriedatacomponent.png) ![linechart4](res/linechart4.png) @@ -68,11 +68,17 @@ ## 如何快速调整参数 -`XCharts`是配置参数驱动。想要什么效果,你只需要去调整对应组件下的配置参数就可以,不需要去改`Hierarchy`试图下的节点,因为那些节点是由`XCharts`内部根据配置参数生成的。你改了也会变还原。 +`XCharts`是配置参数驱动。想要什么效果,你只需要去调整对应组件下的配置参数就可以,不需要去改`Hierarchy`视图下的节点,因为那些节点是由`XCharts`内部根据配置参数生成的,即使改了也会在刷新时被还原回来。 快速定位你想要改的效果对应的组件。这就需要对组件有一定的了解。比如我们想要让X轴的轴线末端显示箭头,如何定位?第一步,X轴定位到`XAxis0`;第二步,轴线定位到`AxisLine`;最后,再去看`AxisLine`组件下有没有这样的参数可以实现这个效果。 -`XCharts`提供从全局`Theme`、系列`Serie`、单个数据项`SerieData`全方位的参数配置。优先级从大到小为:`SerieData`->`Serie`->`Theme`。以`ItemStyle`的颜色例,如果`SerieData`的`ItemStyle`配置有颜色值,则优先用这个颜色值。 +`XCharts`提供从全局`Theme`、系列`Serie`、单个数据项`SerieData`全方位的参数配置。优先级从大到小为:`SerieData`->`Serie`->`Theme`。以`ItemStyle`的颜色为例: + +1. 如果`SerieData`的`ItemStyle`配置有非`0000`颜色值,则优先用这个颜色值。 +2. 如果`Serie`的`ItemStyle`配置有非`0000`颜色值,则优先用这个颜色值。 +3. 否则颜色值取自主题`Theme`的`Color Palette`。 + +通常颜色值为0000时表示用主题默认颜色,配置为0或null时表示用主题默认配置。 ## 用代码添加折线图 @@ -140,6 +146,7 @@ for (int i = 0; i < 10; i++) ``` 这样一个简单的折线图就出来了: + ![linechart-simple](res/linechart-simple.png) 如果一个Chart里面有多个系列时,则Axis的data只需要加一次,不要多个循环加重复了。记住:Axis的数据个数要和Serie的数据个数一致。 @@ -148,16 +155,38 @@ for (int i = 0; i < 10; i++) 你还可以用代码控制更多的参数,`Examples`下还有更多的其他例子,凡是`Inspector`上看到的可配置的参数,都可以通过代码来设置。[XCharts配置项手册](XChartsConfiguration-ZH.md)里面的所有参数都是可以通过代码控制的。 -另外,除非定制,建议调用[XChartsAPI接口](https://github.com/XCharts-Team/XCharts/master/Documentation/XChartsAPI-ZH.md) 里面的接口,这些接口内部会做一些关联处理,比如刷新图表等。如果自己调用了内部组件的接口,需要自己处理刷新等其他问题。 +另外,除非定制,建议调用`Chart`下提供的`public`接口,特别是数据相关操作部分。这些接口内部会做一些关联处理,比如刷新图表等。常见的接口有: + +1. `chart.ClearData()`:清空图表数据(不移除Series) +2. `chart.RemoveData()`:清除图表数据(会移除所有Serie) +3. `chart.AddSerie()`:添加Serie +4. `chart.AddXAxisData()`:添加X轴数据 +5. `chart.AddData()`:添加Serie数据 +6. `chart.UpdateData()`:更新Serie数据 +7. `chart.UpdateXAxisData()`:更新X轴数据 +8. `chart.UpdateDataName()`:更新Serie数据的名字 + +XCharts内部有自动刷新机制,但也是在一定条件下。如果自己调用了内部组件的接口,碰到组件没有刷新,确实找不到原因的话,可以用以下两个接口强制刷新: + +1. `chart.RefreshAllComponent()`:刷新图表组件,会重新初始化所有组件,不建议频繁待用。 +2. `chart.RefreshChart()`:刷新图表绘制,只刷新绘制部分,不会刷新组件文本,位置等部分。 ## 使用TextMeshPro -XCharts支持TextMeshPro,但默认是不开启的,需要自己手动切换。可通过一下两种方式开启和关闭: +XCharts支持TextMeshPro,但默认是不开启的,需要自己手动切换。可通过以下方式开启和关闭: + ![textmeshpro1](res/op_textmeshpro.png) -![textmeshpro2](res/op_textmeshpro2.png) + 开启后需要设置好TextMeshPro要用的全局字体,也可以在主题Theme里单独设置: + ![textmeshpro-font](res/op_textmeshpro3.png) -建议在项目初就规划好是否使用TextMeshPro,在有很多图表的情况下再切换,可能导致某些图表无法正常初始化,这时可能需要每个图表单独的使用`Remove All Chart Object`来清理让图表重新初始化。 + +建议在项目初就规划好是否使用TextMeshPro,并设置好字体。在已有很多图表的情况下切换TMP时,可能某些图表无法自动刷新,可以手动点击`Rebuild Chart Object`按钮来重建图表,即可正常初始化。 + +开启了TMP项目在更新XCharts时,可能会碰到丢失了TMP引用而无法编译通过的问题,可通过以下两种方式解决: + +1. 找到`XCharts.Runtime.asmdef`和`XCharts.Editor.asmdef`,手动加上 `TextMeshPro`的引用 +2. 移除`PlayerSetting`中`Scripting Define Symbols`的`dUI_TextMeshPro`宏 ## 用代码改图表参数 @@ -180,7 +209,7 @@ xAxis.type = Axis.AxisType.Category; ### 改Serie的参数 -新添加Serie: +新添加的Serie: ```C# var serie = chart.AddSerie(); @@ -220,7 +249,7 @@ var serieData = chart.AddData(0, 20); //var serieData = serie.GetSerieData(0); //从已有数据中获取 serieData.radius = 10; -var itemStyle = serieData.GetOrAddComponent(); //启用SerieData的Component +var itemStyle = serieData.GetOrAddComponent(); //给数据项添加ItemStyle组件 itemStyle.color = Color.blue; ``` diff --git a/Documentation/res/alipay.png b/Documentation/res/alipay.png index 7cd5ff784c9a99e394cb1aa92003cb27defe6b97..209d49d2e4c5605934a327dfdfd32fd7ca099462 100644 GIT binary patch literal 31382 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 z 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 literal 85194 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 diff --git a/Documentation/res/linechart-simple.png b/Documentation/res/linechart-simple.png index f58a464c2ee16d7d29da24531f334f572bd89a5e..39e521fdd34dde94b01d78ac88fa6f9f4f935ae0 100644 GIT binary patch literal 7058 zcmcgxMNk}olEoc@OmO!J65N8r;E)OKPVm7JbO_GC;O;KL0>RyayL+%9Xn2=rZu0C|tdsQ6?)=FFud*Z1n`>fzxbKQHg^-@o_w_fJnx!$U)7XJ@y!w-*-|H`mww?}YDeZx5TB zo*y2L4iBI1?z}xcCk*vAH#Tl>ZbE~Ctjx{rY-}FR&USzO3iS7PadJXzZ;y|S;QPE35dzP|f?)Y{xUWoo#;zyEjrXGeQ`3>@z1;bCfIG_DOE0?E8Q zJ^lXudn+TY=G(XXlas5JmF}*tgt)ky-QCsI)$^I@qqf$@`uhFqDnxG9dJKF*Pb)n& z_3`TJa%mA38akq`{BUtG3Rb(`+FbVcop*JfwzfDqKJM%7J*cgjb9T@MgKNKk-~C#$ zQ;@fj5a(oXf7no8R$4kgH+MEU@n>|TvZ7+IqI}8M>l%UhRa}^rk+BvLwh|ODAoXrD zB{32PbAv!`5B8T97f*)t4q< zEsNihrLPX&Xu#ORET%srAEJf#^cHd>RsIa#XV~Nfh38OFp-kS`&nFMPQF*J0JhM}w zZ)&a$(RS$KAdT?`Q^?wL*%la}O|O}^aeQsOZ_+#&)2C8Py|j8=wA&<(C37|XMo6X3 zgf2X%niHZ&97r?omEvOJQ)T&$rCmp^NvyBMY9!yP@=fMgQ^QW^KBGhvoP@@pQ=t0V zznhxOmFF1ayzX;V;iCMq8`#17obt>;T?e!SYip`Dp!ci7jPhvL*T*SbokSugZ+`T?#bFV<@C4w_| z%%+_<4Uy9DQat;S=+GYVIzlq!&*Mo(#Q%%~4%b=36{L98RKqlvABA5>OxY4%#1yKl zLC@~53isocO=Q&^$c4jQA9y2jb(kr*8FM_T^NV zn;o#qK)zl4iW$99X=+>d%U|8f1;b>ql)b9VTKE<7hP7+{O1duP zs=n>(Lz3Z6q$)=LH{C0(^}3*5k=UK?vFbv?8eima?;=L@f)?{-R)9X50`7uz1KGgU z5iG+Z+#u7#P~gP_Dk;3*6NEaV=L1dEhvO0bJ94a4MmaRq1cqQ!xZqq{pfa5=(3G{cw{_4`J29s3>t3-cW81&d< z;2~tJMkWT-6*71ny-0nNenp>TSzti7rRPxD_pxm*R1Iz-nKtB-3XLBMpg*ow^&Wqt z?`CdSa$8Q@a!a#BrarAl!G+I%lYZFqsW)DQH?8vmZTx0WCth#SmAF2R*W$a0QnBVZ zl|~@PpnKG_T*z288v`xBN#h=d(N1xagMV@PdDR(3b1ddHTgJ-?rC%055YF zVy8rZ_XMTdNK6i~bFW#c)5HIxv?hol!E$A7{_Iuogr4;3To%WI?Ap#ssR#~GWkc6@ zr{+2O%BogCZ123vT@hO;U^L)PADCKN7b={6OR=q&77Y|S6K~|8`&?{13tTKkP`dC* z-N>Xe8&Wg&gw@}NK2ojbN$SE)zT^yL{oE_StH^{>%&_C%>9)~DV}BJ{sn+R`vx5xg zmuH@oM<|uHj1hl%HoFYc1h9Ib{z=MyFJQaTk`s;fnzc@<^iKI@yRUdS!~LezvRwlU zt~*JbfMWy&%Z|fa1xMy6u}jOUf9ujVv;XZ!J}5sHkgr-MHL~efA=gNiBTP1j7r1jH zgigZ|YF=g#dWX9?(Y+$TYiGPDL{5$|{M4em=bHvx0YbP?=16TxIQ}jM&oY4w$J0~N z0D|wX$KMMWqWKcIhW|v}_!mokkqEc*umLwBXrA`m*2YM^&=n}$bZSxRGwRlrNL?AG)eTLu^|*zWPeWblDTNpuvw9~7Tyx&%swH$ARY zx7|+ScaS#Dc*z1+AF;g*If@~_E}#+QZl!GQ5z*x~H?;QwV`!9 z8(G`HoztlZy+;126vD8unR5b;M}{kC&ivs9v*xFeA>9_IjB!RT;pDLh12=Ys+Fn1W z)0BjuZtJW1_j|sq$%TaM65^J%86Q?UW(mLg^m9AWN=mdxo8Pss)VWG%W_=atPM3x! z&Uu_;HMTX|kHc(G-pW5}H-8gv>|Gk$6kYabF za23nN1ZI~fju)M|C`#(FZKmDLjbo$zFgd_N6lv}&RX-^-rdIs&+C;@Q8Kf_mhcEAH zrbPW`VPB#I#FaI_(ki`H&(39Kpdp(c;}M{E)|- zaZ)>Db50Mh^ezm$0VM+64Me**-@WnlDT_F-gVF!_KF8saPXEW&?=xHJYc2%=*Wd(e zxT)1W(&bo`LD}$3V^%(jqJS{HVrwk4|*5PWNiIIo!4Y2bF>+!;s|Y{5xt{ zFm`Ul=bwYxr}K{#vAt>p&_TSAL#~f-NP$bZI5gO|`H)~~7OZY~tdCD_gE%4O^$cC1 znRk3bRdeLk`ZV|;ZfzOsP+;|3_vf$j>b=8_CBd&mqhp8%5DAMmAs?r4BZ05GV z7Xo?Jyxo*_#usu9d6TH{cD_H&1#-qM_!#N^MCjpIT)`b*cMl1`?5XVhXFwLTef zQvb3VMaKc7=2=dFQ_2C3X%j6!lG{%zl7!_jX1t@cqkc<0Ki(1K`<uZv4%fC1zc#u8Hl7xZ=k1i!hV^}jiPTZ3Jijz1ExYu9Du z708n%TphF4cd;SQY2uvo>%#rLvC~)4c-IU>bKc|i#H#>t-n*V6zkf#EQ?I(pOv7&3 zxRtlCTe5Jd_1oX=;l17A!A2q)?kdx#S<}jzo#4~G{_t~>xLERPnxn(bR6^E44V6A)15;;w4^uUG+)sk*VJb=c8nJhl!4_HUDyzMeBY2h@JtU;>x2K z#lnba@+NGyv*b@fP&%oNgb`>7bU+{6cbEKXq?rdWD!0NvyKrH;XChF<_tZ&;B9p1$ z6r~YyT`#{*Hj-!y@N&w|OF5P{@E4n3FJ1nKcSueKlHgi4*={P@I!K26;H=o}_!go38{#eKBGj=hAH zATQqh-my-8yu9AiZuwZMl)4D7%3r_)LE4yjgOeJ>fP*ei!V7jK)zXLtbAUchUkxoQA^K0<9DiL;ETxFK zaaa!l7%Bb6OH^X-Nna_HB@_yp#58~w|8R(k#N?iSW_QbiOcr)xeyC*n8JBH=Rt}hm z<*^d-kTF}-CmC>0gr%-@Bw*Nvces<@E1yg4b_)4jr>Y(iq{DCGJz`wP}9PvT(0EjZUz^vU#O zT?m${=4jw(x_&S_TX}M-#B_)IljXC9eC<+jw(^CagCo-Fy5`VNzwkd)8h6t z#;q#-M|XjF>oo7ILV&#6Jn|1GZ%Ro7KH}%I<^wg}E}i0&D-C^Oyh=h?3k*<*a3JTQCelRVga0jOOL%=P zMymv-0tNJo>QrSdIu#si8FwGvW<^^KEA>r zXM;&Vkn4E5P+Tm=8w)V;3}BZ?!%+Wbf_#p%Gv5YB0F;4NS@ndqbeie=Pb_3%6s^68)M11TI@DU97eYvp4ZJY4UP z1wL0!Nj@LfsAnQd%vrW}++xqe53(46MlRQqo5-HsU+Vo{digUE-6AzCr^r3cj~~JE z2Y))B{%Pi|MZoLup$CD17al063bt*5nLj-JQun+NLgOUiTY_mSxmgG_<#oc;=QYIu zO@iQ+?`aQ%9;VDt%{l^J)}ALhJ9!?t@|t#cz`OgL)d2U#?&XRE&i z$8XtmeewHzlNS78+4_l{LP4-|^YMpGQ3TDzaI!BfRl9iAUE#&pxH_`RLI>0js(=)J!r+PpSRlmo5Z)yjY<;+v9q28T%|0ULah{WSx$9YHl}r`vt0~RXj|o?smEUY*r)r z99*hYZnvKWL()ABcsa&JRZo~j>I{Ow@&&?6mF&^}rC6DaB}4)s6(&1)vcfa~7?Tgw zq?FMr7Wmitk8n=sd7Lv4$%EH-_DhuIUp%e zBZ8-Y#WEMs1_!vDf4K{%!U!kSWDW&jGk|2368;~d;iu+hKPJ$sE_YM=`e{ADer@f6 z?X4a0<0IdilVpl!vGe<}-J|UxHF(3x>9b>P*T!`e;&XGm;e=Q~^x%N0&w^;y)qA$N z9cyj%>U-G8t@SJi0Y=WH@*k+1PcP!|u(&GrK5k&*&-8C?jD_O6zVg$v9|J|(Qi>^Q z8wGpY^IX;4a{REN%jYGhm&?b;rv=}$rE|07OPP{@Y_*EsVsQxhy!zlkZ;R(_O>7(V z{85BrkrT2_kQDCK0(BGgIYb<~@wqg$JeRSK{+;+Tx3?WaCUEj*lPer_?kt+h$klG* z-{E6?U#;{2scBvxss&*4WZw3xlLLum;i2)248=-V|EKVFy?VWY69?U#{7aoyZWWfS z+Q5|XYk590MnEuCK}ir-VZM4+;b+3}$6KHM9n5i2er^72$8C*%7?lQy5wxuy0SFUj z&;)FRDt+)K`Ck=G%es95+^>N+HA3Ql{HO$p{-M1LZiTGef1`MP>umCuwGs-?4EsFf z1DzNDi?1m^>-Opqog;XI!mHE24Su_kd&hOpRyc@&&?Ki}T z+3I!7zH2_zd=tnEiaf5t{yxeY;44kXe70KEtGXJL#Dc!nkfN{!xTvvKeB{vCDpnSD zHB{#RUOrEuR3=-@t_gL6?>5>6+i+?EfL&ssIzjdN8^<*_jUMHZ-pa#3y-6DM5!jZ% z9TRDAE(G~c+Aw5W|Yq6(K zBFv&it4GH4+Z{%3|F%~gkx0w)y#N9iVby7>eg+i~dd&Us!Bv!kZp(sVY;KpYcH<-z~Y`a!SJ>4Neq^Ze(N{f7Co3RUh1dUiaZEW&}5N;D- zXj88(EHaT4vI6D-|45&W^XOW;%Ic`?F+cK4)*Zl-w!G;n#1j+)HYNFPfSy@C8rZvn z`QD`W7S&>hZNIrpdNeWd-m`*8?Ji+zNv9FKpjKUzKeQy!Ol~cn1E6aV0S*_J_tNZyOt??(2ARzD53SL5|MFZEO*i@Buc;*d zw!uY-SE=h^Tq=S<@yl32?@aRQI*!~-hb7kCV~}|a!%4(rj%_7$`cxVN-UK6k;_3b>$3vg;;RF+~P*S_B844AetiV`0Hh_rP zj#`#g-rI=4>r}tDEt>P{EIriY`0B2B4C-+p#8hYlN)2}(d3baj+wStj|zxNP~ z!iFpnyQU%Qw@hvnL4lA7N0gp6B}E+8dRT#{bQO1?(n(0Kot3;vu|ek1w+2S@c(aLh zw0dI<&T7RY*uZ1;V>$Gq6Zp?q6~Hvww&=SSive5bPJs_SRhGCibEei56(!0Z!2){u${ zT4#SIP7csgl5a@UV&Lp~x^CUugm2T{8%VXh7^r$j%30jf6C}&iz2Y0NzP&C~!WFC3 z6pcxTE_!xIVB^)9IPQ)}#fe4tqM%+)yZJPKgS>jHX2)`?r_}J@G}rS;797yUP*7`0 z*CES*KQe}*t&EokexAM*$KaqdV1@YulWO~cD0#NJutBNo!m5~xpuW>pX-8flGgY8^ zQ8@n;^>pKo`cCxWKEk}4Wnfm;*UjXqaLc~o4w;>XE^?zO3rG&N<}jbur3RATAVtJj zKL2g^4BymyYXUa=Y(L+0lg>vY{+q~MB4tI3Glv9x>c?K=?AUJpz0)PAcj{9; z#tKncG?HQwT9#6y^kl_f|B|D$}e5#iyTs!9uw@~)YgjofnEc{^}) zbhN*}AA`X-*w|QIyVh7=@8aa-d;50f%aq{S2MqpLLfOE{ocL+Jnlz! z8$Sy)xpCjvt>{PBiB}TD7px39{}}KwXqPyuO{00Kyp6g@bUf~v<6e>)S*~fY=PA&W z^E*gpn$0ukHgGQb^JJHavC6<4H@Zl*3Jv6R=N{DEw=Y+mFS|{@DP{CwTX$&2ttg`T zAT@2I-=`5-^%8TlQN41#@JDlGmT?%6h*q}ndS(0LBbSd;NUHk}jkLSn2H(RAC_@T3 zZ~kG{26UH6THE8&uvOW-gtK9PJH&Z8ai(S2o$&N~eN^3@vKE_4us?Rb(+5y7&VQmj zAhk6()=kaId-BV>x4}|q3iS)6jtoFszQjm3rbz~)O@oR0;&s_o1`y#0VWGe3PWQdK z@HIWtI)@*9-DcOs@w~1NaPOXjx*LCiXn;DEC{(^EgUGh~y!hN2Y-TQO=zGsNamqGc zOrviqJ{aA&%_$JcLkZ?b7YSyr%?r+T6(=Ic&cdvOrVo8c1-8}#hQx1NzoJu+^EPM{ zF2SgR*qSDp$M-`zTA?0YoBig60xs~*i0MCCJv#!6`ej64;AFcwtzQ~J8hgMPB*q!P zCvfRMpUeO7zf;ED5s44k1_pl)B-3}Gt$lLFV_mRJ0m|BrDwSXto$CJCgmy0Zd}_{U zf1{v?xzK4{el_XtVzy>I(AhCtNm&(j{n-+p=bJu7vjvuLp%72zsyh8e*;fR%7cEBN z{w(tcOxY3JWB2Z7Gi@g*yqRukqr10#k@SC)c5(iyoni9n%JLAL2~hvTx!RI+Fm%z5 zbU<&j0Jbk_%@3JuiQ|bx%lLhGAhpBpij{G7h2_gn#>>|7iJc|O_MY_a;HPaoz zqNIzsd4eABTo-VBVIuMz1w3)8mRumzQ${v|n$kt))y)Z8Xsx^97P%Vcgk?0JpU`$P z=#qCZP{mm`5yrPeP^0WdYIG;_uM^dAb*$^{+VVKUdh`J7y|)iAw-L;eEAo8e19IMN zp^NQ+sETtcle|W;`S#9N-3Ol38Ruvs4pu(Qm-ZR;8gthe96pF@iNW%SPuiBFZrNxE z_)r9xr;dW|9$@oJ6g=1xOP_Vi_!wTxSB`fhqr5azrn6508#`BnUAo=jYk?{5?bJ#0 zD~b26da!06IM&6GC5sxjYTnqdg3fL?FEJBTbK8e4CRT2UfRE?E@#JH)hr=UEJ>xeJF;RtV(m+nH>tMv)xI%hI9(3S-8#6CV z_oUzItCKzUrFl@^4ANz7krTM!@45Oe!5Ghxl@8OcJ9g{mEKzafx&G^`t8ReuU@Rxk z1^P*^b&S7aZC0hUD>lDJE6@A9)L1kW%FBMnLTV}M_**g|T2b!rV}@h{M7)(VjoSke z{Id3*)dKwp!;<*wW5g<}Z6)8{PG!$&4LxlkEu@^Fi%3=6&+WLCj`uiBwi>ZBhI~SN zXIz{}01aqq3H>;Qg~=eTJ-ohDl_tjF(CMCt*74ylcNP{D-NE5U3NMskehA8K)i-gt zpo|5@E^|D|=nMP+xkBAI;}`_$a7oGr`r6%QiwFNqc1AcYtFxmEUr4&@>O^BzOec_p z0w7#)WFGw6SpCx*SYdP~r9r3!!o`Q2_3hc%3ORL&o~oGsJ^ZiG1u&E0+_N)}n3GE; z9#VEZlen}L7d-2gYxt?v--A}D4xE+gP*z;9Vgav+Q4e)cvSPfwod3fpOQNXr^Z6)G zw^^CJov(b?Pi;Mg;VK;~8Unxr^hL(PG9pYrNci|ic)t50Q?Y|3=NlGULz-NNnJG{; z$Zu(TeDn8Ej5!H}aqfC3 z%Y1avMn;+;uTa6kt8G$ayii(sqk#m|TDVg>bjF&Q5Nwy7^F~b(8b2U8k0Cq=nWQNAC9Tju2!DyVts#A!x)V6}QOP6wy*;$7CPtVms8>0}29tuw zjCK3+Wnucux;i&(DugKk_NGG_cOorF8#wqIN*>oDiVL*bq0~x~lzfwj!`E`HCdO$S zd-`8bvLt?Q23fpY_!Px6${kv<;Eyu28vJ-U5VotyUs7|n2P_&oJF9nUsV)X>q@lRU zZr2ClDicFmK8CH$z?2T1v-n!6BT$$~{`s((jGyei+}t8i>hP;?Nu7UnzYsIy(51K_ zi8VaviBvSR(HBKt2yW-siM zLDI)MT?Rd~e(rD(2v{_vRBi{!1H65wiad-VPvbJ_$BZ2o&=E*EmCCN3>3vP9qOIZf zr|zX?G+X~rvTeWOL>6chKOdjXBo!|kwt$vGzH!mv<_R1~MN8SdH4;GJdK5<+;BZY6 z7VR;rgt+AjN2^}xqnA9D+JUDBDq(9n%i++3%MdO-Bs1JVM#KZlUR=`-f#ISypNv>6 zD)Q-!Ju)}fyNQDGK=~%@zR@rFn|So_H|Ay8XU+#AB34aaEc>sTX+AxHtr>uQpi78* zc1TLAkFq69co>fUSeFLh?UFEz>Dc+@n(bTKluVyW(ZN~9QV;0TzzDiH!?)lzTf#O} z!)>;=5i1f_br#-QxQazf(j?dsVV~V9w@ei;*3J-=n6!F$guAU|Kbhp{M#2ax9Xk=N zaZ0{HlLbnDpWeY2VB1lwWFtUSMQD21JWs<6eBTC;&b`K;o_#fB{^!;54QH zqum?7xbQTie-6F7H?Zuz;$5+f9!B9$+!L#$AeP9-g`k0!xM}}@r2GT&U+vhJh$TD? zh0KZtPBU0+F7%?65fyYV7WFHXSbrH7_109V+jWu{rGY_pRkoMP!`0KMfr1r=D)v|% z5BT2AxWufk#lW@^?WKw^iqkqUdgu;3Q5i2Og}|b%q5;&OR^DD7IHMY_gB$+S3JHk& zgAZ2s?uu2ag5e3)TDJ5tP{8|CDAkegf0)3{#-rxeWlcb(w33_@+_^odjV*>xjWvyTH*%F>dJpPx8C!%fm8jKr!f})?MpGOthmN(z+urw@v_x_1c&# z(KhP_>+UuAuGd9yLpiiA%#_<_HDAPD340Q8;br((UwYYC`322FYiDVf@GY`J*s+aY z6B{l4&(`1Mx+T%nG_%WcFUeh{N0wC_tZcN*7r#-r?sz!m;t)K|V0b+B{yxV*4^*9_ zqJIp1>D*~_ySYQ|=;PVI_N1@Voa)~_M7qF>81(8!`0P6P#-aF>74m>0Q zP+Y=@LpjuM^n!I^@PPLJn-pquOq>TK1_IR*SQ0_T^cbnood z?3|Vd_@wslxcICMRZ)>i1wn_PJMKehZtYr@2eC9{5@LK&>Gkq)3TppG78CC|RYp*h zEh}9LfaOk0n3T}TG>`nlJ|2Hyvxe8~R&p+s6Ros8I66+I2Pc_Ut2ux_K2wT{%SzpGI zzaAgn1hQbwEZ_06`%MQR8hj-ImwVE)0>xUml|NHX(Bak}XlGHaeCDGnL|cZt`O@i8 z1hoH7*ablFx@gU$l}B{m`v+WBrW;l$_P(Kor0XW~ZC9^T#@g3IU*lc1Ki6_ZMrd3W z5)}06SWz0Ymm01xTq!rZ-m5Bxgb0aO~Ch4tjdJ z(BZmR#>X-P@neXW>}PsZYUQ9C8Jfgn>ATr0d+r%CVny1m7R8sd@C5*hd11?b^(u@! zG~i>E^CD+3u-n7{=IIV0B2m=}PvJw}>Yi7f3>3C^ON=}a8)4-JLd-#qxrzeE{l&CJ zvwRBqWaRdzE`|Sm^VoFmUAdXvkeRk#fzBymv6hAUCcLZG%jF_%QVKAylJOF<_8Ou2 zFei5CL4U8X_NPO!%#7H8wcqFJ^PssSrM_WR#%rdC@h z4-Fk?8~9K|VCtg0#<)+6xoLJevHQsK_cuFF?ZH=D`?>L9ImYEJJ(fHl{t%@}l*=`)_7& Z2stP^bkBuD%Km)GjPg8N73S1in|5^6et9DFQrIvcMnjs6qgX(p?INCin|2Y;MU-f z0Oj)i@5_C;=iG-oXV0GB?#%vnXJ>XEHs-y$(ldg82rw`(o+*PAv@kHRAQ%{!Kz!`S z8RI(%xyM1w`*+&Fhld9w66x>jdvSiApO<(0C}{NM<>meTJ*=?s`uh6p?CkpL3WY+U zk;u!{m4p3#TT9FPo12^6ou2OQ$q!Z|y5K%psg>nrM1HP^tLu=uN`GHpM|*pAW~Ps) zr~QWy7fXxBzq$`QJK9=Wf&v0QJ396&%Kg2){d0VLba*&5Ik{6&wwj#yB{sHKQWSM` zI6gM!>g+sbVz|Dxwz#->K0iM^G_==HS6EOmpbVUGc9@@^FDofYN=V4f&W1!shlPX; zYiT^(-|z13R+g7<6&5T*qM{-q7Q=!ktj(>>&3i-zk9&KX8yn&7E{^v0=ElaOhI)4w z7uTDcyS3F*pFZ4OU7b#hZ(=Te-;j3PfPXl z_O`ROzDJ|KCMWM~Z$tC*&!#5p>*`h#;OCz+ba@dNLPfF9^J7>75_TJ%SBO;)8f!k z+3MTJ^|+N;dUVxLZp3RB9#^A`d-#2nJvGoRgnzUE6IubgvD=tzG4sOQGoK|l*PaZf zC4$*izv_Qd%Q?4-x#_?DZrOuaVGeX!5FGb1e#Rnu zm~I)tK1GqLX7r`As5Ec1!Or0YCD9>c{QjLPPbB9#388GE z1N|<5jOa-tTu~4^M2A*D#@$hcP-<`=d7Zt^ule8C|DPEA&kl{JAFw8AN58F&d}2Vl z5*;{OHhR~gxNl+L)*}$@WM#}9J5z4uodJO42t_-+cBV~T^!7OfKCKjM~dr;@+M zf?YN>OvVyQHouLr@SL8yBSJy{+Vt^ux(-UY$SPEt1w_wq(=kS|>g&Dif*$yzP56#! zaLD+vq0*e*EqK0x^zcseBRq46J2mRy`#g1q&&;3fYVpQ&#ub(3ZLeQEiMcH~Z%B$k z!i5Ks^p*=)#h{>X2}dh@pU&O``cC;f!Qmj+B(HL+se;eAvY}1{FXRloj z)h_9Qb`x7DA!#j15ZOQOD;d+{H7{WJqcL*#wSg{WkMNmGTjyCJy&3plgQP$Ff{;C; zN3_0W;6w0A3{NY3csM}PS4>y|hW||vRr%|8P+ApD;P(x5cupW$ve5Lx(++kFt)Et`-jui4OY191n!08 zH6CgX3_vQ=3K#v67=9RAw=G4KII+eWJ#fJ{swI1L;W!$knLQTNVYfo&2b#1`X$S2i zV&4S=9Gha$J!Ipu)Q{Yr5`u*3#ET$J;_H@oO=d?46fnCE3HFAW(wZekAa!G*%U(x{ zK_WE3(C1a|JJH9(c9 zDU84jp(uSx_js!BNzkfg66uU*L=uk#Hk}LYw>7YWH^l2CQ|poVxR_JE*c>1RzGR}K zX9S^d$jSHyv`IlANs5k4cu?+=M4zk?4=&PUeD|B!8hH2ZHTQ}qa>c(fvl(lt7IHK^ zdX{wewwAbJKuiw`U~llN3)PWex379H*gCQmpiqg3nL4q}6pXCNtb?$I^6t^OZ1sHB zGN&-uKKpl0?|tncWsRj$yUyY}$4f z-osJ65i>@|pd)VScp&cl@ZZ2q}bgUDHsUQHV4*iA8Pw2%*ACYV6 zHv*XEEk1g9@+BI1xqOqBKbx)=k!qD@S0 zblBn2bJD%EH4>DX7mfLT zedU($RqOfw@%#db9EHZ=x{{gMT7_z+i6JSG-Qx493`&?)lA1gH!~pZX*69_I&HMDd z>jx2-nGhM?+#t(6{WIniP#Af@u1j)Y#M9^)#Vdv2{Oth&GZLCRh0lKKI9?Ov7TW2Q zvLUf^c$lVUQoCjw>$W9s#X#mbPg1)Swf-mVW}!0gu=~!(^x}Vs^J$DmQ*)rsN+J2w*SyKY zvidQTlnR?DnI^j5vc5g8g}BNb zSPQ`;<$9t^xDje3AjN6$ELzv|x8=fdeFS3?$WBRHTUq&ea+^_o6C2}+S0{5bp*Bv1 zH^#8~39R7?^t)-4HnymQX*761n#V9NHQWma_|AEro}^;ljaI4yz?R-@z$}|$-OUKW z{>5<>+}k6bt?ns={_sNgl+IYWoqQs&79y!rD>$byGi~N;L9v|9FLmEp`q5OHeUSO_=LiYV+j6OTRa_w$j(J+;`UHt`>4jpkX7)B2!-r zS=pubI$^b-(`z!PxF!%+HHr=Xi(4`8NWE|*R@mOl_pD;x;v0(vPQ=}=t ztG}pGmPY6RZiI{q2yS^Dtf_T1YiS$&FxbO&BwSmo(%s1NYSFi7uuK!@ z`e4#)?AFsW^orAqE7+~E?0QYdU69`R3J@H~V^kdSz&zFWSrJd>dqU7MeN+`=>PnTJ zCzA=+R%xKG1&6|UN-&%JpMW3FKJQF5eoBZOw5UjTtKrrsucGkddhexq3%06GR^E7Y zru9w0p-@+cQctsnnV-La-b7wlgl{qlFo#-zXG1{Lk@Ij~0sSM;MWqxGi^Pc>%M)+Q z66J4=FCER|0XLI>bN*yq^dwrW@3us-xkBXM=N@$YRCMYVaw-?<6$cpQm$I)W^&e(l zF8QLe43GM!021~=8iUel6&_+?X^B7!ukaA#D3ow9(676<^%lY66GZQ`W?K^X7D@L& zB76){8nABhD8{82_U>;iOXP!{Pn)yY9t=O@-H4pUEWaPpQ1}47Q(%)+XV)}8*{5OD zc0nBdR;LKMxV-FWgDn){b_W-8Gvvh3;`BBB#=xq&x#iDQoX(9$AF^PmQPbcrh6buj zq+J!X+~Wxku=svF8B35y3tqY|QaNdeNfXcgTV@xN0}~^Ym0{g6f#d6oV+Ej}kChgh zBuSQkqyT~i+AWf|k~2Km2oJF+zF+^lou@~a9dLfr-(Z2UIqio-6c!fN{KqvYIQX;c z;FxsBPuAkv4^l|(uir#bKbiSwHl&F+4w9zMjQ#4b$K4M%6R}^3x^E2FB%5aA<4UP( zX#5Nk3<&Y_B$l~7wV%tC?ceN-P+;OuHstT-Gidm*6L5p3$b7n%zp*j=H)QgVu1$jG zS9ZBVeSwQ!qD;-G!~9W;7321A4&tCY*X!Aokm~V~x_4uG&^zs4;H(f+SLS2Pf1F*R zp2C0ZFx|<=f38hlTPLTN?Wn^#P%|xrzP4{oT)?*{cpmF5tD|}s8Llw`bRUI$!3h!2 z!noKc=`&en4Y3iWR!oOa$NVF!>v6z*((nfUiMnybRmP#35v;zgP88e3%HGDIa-=|^ zzcs&0Y?Y(PN;!zK?N{^ahR7P(@ok`bmA3)X|IGnj zzS8kj$-XYR%!aU0+~l_% z1#X^j4qr_nC9$FZLu2NKu%FlLv;t+M#f{^kdmoQ37h|a5%VneMMnge(3w1mN5mb@- zGbX^Yi`gmW=kiC^Zk9r9$vO?zYmb}oEy58RyN^`G*AMG!X??*mkWR~jx8Ry_HKEv* zwUR&ZfIr}ug#WOk{~0}-nV9&!mG!L2GcW6$+(so1F9Q%TPS`%2buFFkv}ou^ld~@6 z;Zl%lX|(Bk312DOaYL3@A8%w{368ouXKbTz2F<#z^_k*fSkDezXc|=9qR~ zcUo{KtP;88wNV~~0gNDo4I098&hK&;z!}+PO4m&y>^yjb2o&ced!_7_fo8~JjP zgDe2{cGW6^Yh2H=Y+UPmnWT}=sAw*lyH{zH|IYhMNuVlO9S}k)`~TT)9-i;g5gmzG zr_sKmn%_uf^ksH|2?$-C?l4d<>n)jzB{Kpq22KVn8hS{0(3he@{s<9vsFK!8lZK)k z)dlgT5v@TaEj!ff>`=;7T<~O!%gv@k9q`=7uP7<^j5_@YjrDD zT92ynrC#>O8-|v?O;SBUwP~u35z@d-r%ZTIKk5E>@a&sErO9=Bz~>fy+{ZAq@4TSL zt$>-lRiCtWCSt&=b*qYct}}H^%(iUS3h2d~KrzX=z&dF0i5)J{-h|{D&!2qVAGBh; zd;4+8ie1vrjM(KgCv1+^u<+0@?K$%tCtOH z2mak!MW{faOiVz{=gCmEr^=eC;V?E8IV}J)13M%+5dc&M{jci7Nu|S>=|n&;Jl-(o z<%qkorm<0dO#z)6Gtk8*@)#?VP6dJ(>a>;YTKD9IZjM zph3sJN_A6Re!!qtvu<8-XBZ{3{gQ_9tJ!C}vb&=fQbk#pAqTE%b4&TkE1_n3j$vyc znh-Oi_-^M41lX>b`8PLSG6Ja#F=n@%qB1CJO9nj1Xj!XHsvJ$PhkUkxyWplh32d_o zHS4ht&ilB(USe>=bYO_X5Kbz0*Dyxh!oK8#us5GIVO>q_s@{lvk{*%bMeH=ZX@O;X ziTapkTlQ4<^sN|c3H!WSL%_2i15HL%vz$&C8S!SX|33dwS5&GOKfDJ7Cz4loA?C_6 zC$G5KVhKVb3ijz#4}+UV7PJJ)(Kh-(YT;i*b7E>{$g&QqB?tD|1nFpWnFn$<9L0%$&=IwCG*M4SB%%{A({)1YrjuPO`=NUV=dg~ySVB5JrUN`vN18dzyPB- zqeu;lY4!xTqD0{&0V1L z8D|8x8N`mM9X0hU>S_?)UD)Jf%41K*8%P@81zTLWIe!uvhL^$%^uIL28t+n-YRY!_ zl4Xtq1TC{eEp|7D&-wDG)-7$WNM8;~Om%OuufYpO!Qh3TY&f)A0Bo#MO!|O^&xCDZ z({S&$?Iv_E_osHdFT5v2q9eWW(*_ywUl4fjZG1EjY4gDNV?-|8 zwXD>yn~)B!befslWjG)YdS?zsa+zvJ&|d3wjkZ9e;rGSh=H+u#DO&p72_-sZR}Jo+ zgR!;kkxCb_kkW)q|G_?0Y1fzaEdJb@I?{rMYoGzCR~3$)9+FQ!*<#@ zDHa*d4R$V}9bF~vHRKsd)jc*vId^`s$RL%&XZZc|4{Hv9xSKT%DF66bjiC%wSE!aV G5B)C`4}ru0 literal 3957 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 E0F{48J^%m! diff --git a/Documentation/res/linechart1.png b/Documentation/res/linechart1.png index 56ff993331b056c062f0314cff102eba1ee12d5e..703c6902401a6c198b936ebbd765dba9c4403d96 100644 GIT binary patch literal 6903 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 literal 5771 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 L>8VyI+rIcOP2FJ2 diff --git a/Documentation/res/linechart2.png b/Documentation/res/linechart2.png index be5275d4ab14271b42d9a4047e1c227fb0ebb748..308870d8de136f37aa12845b3370c2173de1c548 100644 GIT binary patch literal 10668 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 Y-cRi^kx?T3w}lBOE2#vi6gLX|A8EfJlK=n! literal 7621 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 diff --git a/Documentation/res/linechart3.png b/Documentation/res/linechart3.png index 402987b33ab4d22bbd6dafcf8e5d37a60a397b42..a91064e4e6aa3973b78f3a0aaf2b805b1b977da4 100644 GIT binary patch literal 11889 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 literal 9620 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 KQ>jS70{uV0Siju> diff --git a/Documentation/res/linechart4.png b/Documentation/res/linechart4.png index 11da1846b6bb44b66ea45d0c80f5b8a0a6cdc2af..929591e717de1c2aabec2cf7d98c3de7f01159c9 100644 GIT binary patch literal 11978 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 R|4##wl~j_b`u;26e*xQRfoA{! literal 8996 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 diff --git a/Documentation/res/op_addchart.png b/Documentation/res/op_addchart.png deleted file mode 100644 index ff67262b4ab56c153e7bc7add41ed85cd67f11fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53866 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

YzZ+&xBU*Szfh5&2Wcs!oBpPtWzn@`uP{~X` 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

0n_59XlS1 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

h|qN2jm!qVQ}!O_v_RaAa8DfOIB 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

D6r6rjv{I$dp;uwj_dPUv3b@O zLyKy@QYiQY*?;=3R(!V@)L9I!s!Is1lDaC_>YHz4NMd{A9P2(H=cGJ$Rxci{kGJZ@ z!m~-aN5&v_lV8))(Ph-*irQK$2<8l};^4~+haSxF0*Z0!wonxJ{vh~uw~B&OE&L?d z=8DOkomPI;Zp>Y(=O@301!Jq0+&MWeE_wta`){>V8`zPU>C*~Ofyjy0Bdj*CxiJy%n86(-^5pKw#R1-%xsx@9;??2#zI#-LqVEXRM> zD(d~j4y$M#Q}>0~{)u0a49!CIwy$VBxd=+((ox;6xh_kEu>}#)-KlNF70aLJl@dHt zTbxlW>7&XvpqOpNW!px+HmaER3Q3pHW0pj}W*J|6UvUC#JDnsJA6mu7ATyn>7?_EB z<8{CFoHVyTq${3u3V~z3qpz$Nm9HXMh#k;Y>CW)cjvH%h8VFNw*(miO} zKF_$~8j4zoJDp(5tjO!WRotvkJaE>P%lii2@m?;O=#HnEe{Wzq>abruOmwq7w5#l3uE)ERbPM__Q>b+#pZzl zv#A^ui|1;yfhZa-i+Kof8_GrXU463-C_c&KvqY!h&b%xX3$@z21jha@w0c{(hhm0W zMQ-XgU*ZQ{bvMLK0*m_090-{jh8lR$MONrS6AyYpvx<|r;xGOMbD-fs$>|K}VB@4} zBG-=j%<5%(_SrVn7f#NSZb5XMCX;g$%b6R&mbuk5GO{<9JeyAtVti|-P;aAW^X6(4 ziuA!coNspC20DhBKfK1JGpu4o{eP-|P*LnTSAt!+Hj|mm8PNe%t7VuRYH&57oi(LK z)2Vbi-TpC=NK~ua+ofFY=cOQ-nZxgB{0Y@_`)-~s@k5A;{B7U*;CXFPCi`^cHL_;&_C|zGqL80ZRIz!QYOK%p; z;nj&KGT9M$bSC1VXe0tz)ofZ?XaLe;Fby@hvYM; z)jTr?rgQD7NZl4Qr0IgLBIb}K;l+M^#gQ-nwZ1Y9^=V{1;%x*%Iznw8CvTOY2!yDj<#BKQwGSK|_Es5p0wc(b*K+*Tp z+{S!6tn`p2w=$(XoJ^(Jpz67g+C(FWS-Mi%XmD>{M=bm$&|LU*eOAW{^WW#nue zqYOFayqM0sfVb&iKJ1}%&*tJRT@(t1=b@MHCl@pa`m>=JEagDeal6t@vFrTd;j2@p z(nGef`clWucFv(y%-epeVrg#&6kYB_E^(vR)45T%@(&bAr0zW*PO85u4_2at-^QEg)ty_e zR4OkFzb&RGF_`1||4@_^UZ>eZ)T{h)t_yIbeDlQ<|7f@;isgJK3rB}fwaRqu(y7>w zYA+RCj^<%@->TKq#lzKqWYhKv4aYsB+{j)i4z)EFy|VXwPs`4kRvTR*?q} zuef`xb>?8ajURRnxX?NaB$B�+giQmB3z`g5JIG7i)l`T2R%~9qcTU7`H*{rSJa> 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�o=rF_8gUeJEIPvc@Ct?9-*~D& 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 YL=a~}pqP?42;t?UuB@$8r(hfTf2%*jTL1t6 diff --git a/Documentation/res/op_addserie.png b/Documentation/res/op_addserie.png index 66300c2bc93c0a21cc39a44e9af58580f94ef9f9..294b5fe73c9326af56ab86185bec16c82450419f 100644 GIT binary patch literal 51413 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 T8>@7s00000NkvXXu0mjfb8ER- literal 44226 zcmZtt1ymeO)HaHekl^m_?(Xic!F_NKu7Ti#y9Xyo(7|28;O;IN2(H2X%=>-kod4dt zZmn6pO7^q&vv<{0byasqYpBViA`v0Mz`&p?D#&QTzUrmt=rb?-`_twJsTMw-rL(-T3k9mKR-G=oS$D99~+;Wo3F30_wn(eprDwT zm^?l@vaqn|>g@9J@@i~sOioVj>F(a%+Uf1-2?+`D^z>|PX~o3E%*)HCqoV^43^X(} zG&MEt?(U9`j2s>u5D^hIH#b*RRTUHz=H}*JUR<7@oOZOg{(B3fHpv$3*?iHW(mxZ>mEmz0!zhJ(}7)8pso*U-?2h=`c1sey%s z<>BE0003XUd|_f@%E-v{^YiEAm*!$<^dw6!uh+olMcKc?1?`(P7B(P?sx@#t*bu+Md{?EZl$H-!G6b=}79L15vKu&#H-;GSz@ldNUbi->GO15|!ub$J;w zG-CR#C@?f`V`1^k%8pCHE;{{ZO4EjpN9LWEACrhNr?|%C%64VnYHGuRcQ*K2R=cEW zxQLwg?8a_tSyxhSxrn+`@4~)&`tQQpK6!oTBU4L@y6M>3$%V8Gn~0hNbE~L|ak((hB#`SMCF((-W%N_$d@CxTKz%xs@q?Yv-MD!(hrNPh8M zJKZo-Fw!IGyCRP}w@@dJ>KwOH597S!;E=-hh*q7rk&I`V8d|V2=aHiZ)s&e;x2!2S zQ!I&>7{M!#o5QX)Byh^+K`3DD>lc@Vn&K2@H8wxl>yfu~pZmDR-J1#Rt~nifi=`R6 zrg->k_mHSNY85iX6f?w(@tsS2>z+3_kT|=ILXIav#<_K>B=A3LUQXQ#99$tgbr3hV z`d*w*m1t{kZ)u4)iI9;I^mKH;9sEX^k0mcaLZ%cQhq@IAPTQN0skCJTDC=vv32^zo z&z8ue8G!k^jmmeH@IT60?@#4rXW!ly6=mWCJ)`0fl;Lttyix1wyr_ay*XpzCE9T2# zW5z0he{u1NB}clPdcASO0XY+s^ab>oB?ao39%umfzK2rfE*r zcN3QNt*x~&Hyf~9P0iUEOJ@Oa5x4aqY@{Z)v(z)HkZRpG_V0&XS=T(a7I z(cJW>#ZV;Zw4#TUeeL~smGtj-g5K?m@2|o;qwrr`>dtQ)DAtC(K%{7e4WkD}reuWe z?$#umJ)(ky@k4;wL*WYrYMZPnwMH3R`hin=fY;zoy6nrDPpE6}GvATCIG?dK><3G( z>|d18{m-O?_%A)t2*0LcsqaTMWjP@J>fb5M=ozftO`Jx`;gzW5si)={_7tgf^)4ruT$Xbuir62knfA_!0T%6GZ+{Ey&aADI$ zi)Q|gQ&W3*6aE~Fdd(0O%MN|{Y;`!yb(um zN<=6O#7z8I`2cGG*0YvF>?qNetsWvW&&>GD=!h`RtW%xdfEkBc`jGiWZVz)Aqqtuh zmoiGCl;qdjfH}%{@Z)Lt4Qx6u-TYz|GV=9x@(2=il9Zo4L}oV!$4r9zBoK)R6ncwh zI(V^MYIp!e5Hqax=;uycBP+~cHm}@mxSNUc_^kfzPBE`)@qP3km7h#!cBw-e{V_;~ zHN7=tx`aa=Z?Zmuedh9WsvcGP{_;G#UGb5JnaC>wm0R?gHyw7{du8bf8GG5DXJI&Z zabvGRHd?a5a*Sh(!2aUo`tK}&YF}Q=#JUL04q)%j=9?4;yA#kgxF}9v#qB^Jhl&AQ z*RuJ6L`p%T!8`!r=tD9mWQ&kql5eGY^)U2wnt2QFd;sbE!ac@K} zsPwesE1M~%!oIM)0Xk{oH@L843H!FmnSx<_sP6p zwmD}KIf+Xy&?KDXKWd7p`LHLPQbZ|<4W>)@|Fd!AXFf3`lkMFAWw<3F~xg5O&4LOK95yRtOGE-Dr6mA~H-p9)v=})+y zJ{014@G0#(c`($S9CpIE{K*-7WJ0`xNoVbSgD!+kO&vmFJsm`7?Cjf8vxn=h%G7M^ zbrl@cqFg00G5_4Xz#1j1ny^|Kl5qlLy`j&5IA3eQw@4<)pFfJfiAnQu_`vv4QBn6X z`fV3}Z|g#_(e3ea)cHJRiTZ+}!@BxB;Y~E;m64v98@|=#^xpIXUmV zR2TXjsIwn->@G1)V;_J*5V}#dmhlO*Y`xf4m%l%bPXGa5`!gqevdpe4S^9y)!?rd< z!>*eh0X{A+S{SkEX$tRvVK=r+gWrFd*!Yl1(2`~xKly9Oi2yN!c_T5|hg(}(G6pPU z!T7TbiiGVW>tXPa8DT8 zu}xsjCeebkj$GW*k{H=Q%)piMfRS_?zph-IoWfjuETKG$3;k4>RIh*%E=WU<|NFN@ zAo1WUBH*i=IGmW2ae(~9&ioV2wazs%cRDLNxm-zOV`}RCxvH8R)yat_POJgTKXUI+ zVQiVpj&i1THCenv)r+BDG{QnDYz@G`T}S3N?l*@34`&Y#W8ACEP^&>va@y%T zOgGpeJD7I&iHb2~#cF^IBIO4eB|+N6at^cW=(DT; zFHB-KJ05(LUqJjvAU46(PPt>|QVX6AW^e{r@3gnogDSR7hrL39nDY~Co1D;xxN$BmZEnq- zJUb(S=kg*_C1uce0Sp>B=I-*7$D6DfZy2LhQN3Bg>x!g584|gTJ>FmrxP=Cay~%ir zNoX*HM{$o~lD%O9Aoy=cieRB2qEt+cV-a-phpv_k3^R7*ndo5&BcLxCz8i(ccRk2O z`osasOfX%>xC@wC9fwnxqwg2>P|PqScYS@`k~#YCBnU_aXgyz&7cO%t?dkaGVN1sO zg`Bo4Uz!5*<`b|`wwxq67|+s?K_uSCkOnhsJdqv%j>L0M`|I;LRHOXEj0Cde8+Kx> zFU$em=gGN8hv?`aD~?z`J~}!+zOphryfSZA);uBFU~Q2wfm#wb5^4@2lUg3vPeOqN zb22Q|gIAN_Nd*BeoM@Rn%o8v1jn|y}*X8Y9_CLP&@Ofl+B|Iyq4Dg?gJT!fhyK&|& z*RCUs>HsntcQ*j>qfbsfeubSCbM?!B=VhR?_38ivQ7-d?x&?5vZ;QRtnWVUiEZaWGsvU5QqNmV;^!>VVrP<43%I@2Qi( zapo!=rty&Ce99lH5kZhR=>66I`P~iq2UJ}%FwrBvk00eXnfT$P4|Fuu!?!Tk%{?7^ z;H0OTHtX(tab7NW1vhxWSJ}&0;CzoDzlM{}QU+Tsr_(4nb=rjnfBb+g>40si#gU*2 z`ArZ*nIy+q=!r?Sr}`ArEz}fT&aFps1Ss?98Kj8f?i}C%n(9npN?83J`<0jDTFvwc z!vdFAZBkE%?}JQM&9BPGG^+0k+DO!qSpz`Iy9^>wcd%zmE@h(B)l3#JZc*eZ>x!R- z--k!onb^InjebRonyf*WJ*nQz6OtB+ZBbKyx4W{Qw6QU(m0C_op2QdhHgo_R<+k4j zoF}jRaR^#&pMawSTo)$`3;d~yYo%-lmEf`qCkX2XCt%VWtY9MBG882GmDV}COe%u0 z%fF$H#*-SApXGd{sdnL7{mxo9+Z7=r5kmxpBTgP8J&I&H4c2$EATQdClArdU6382wNQ6-kT zs3A}8DXjftvf2-=uT+Mo4*tX`#KMNjwk`33G+%(2vA61jB_CO@nOitej|e7#)#fi>8_eeCN%XB->M4E1W>5H(GCH#qko}!J`5G38DmvWM2QLI z7F>iZ+A7&jk~6U4xUf6tBXkGr}!|s)qPru8Q})=&Nqb|NJ%3m z%h_*aN2=IaZ=I5WFVk6}qlth5;kB!@>!KmZU5P)T<7LaSGwY8~FGMyg-;UGT!!i67 zn{D~tn@*H8(3WC>Y|$MJ==ehcCk-`3B-A{_7GpffNWr8qMf|2+0L)8 z^}g{Apdp6gBlO892i$E%T}1d!ReW`6@AdxZ0~RFQ*7c*sq?;zG^9C~JQ^1hR5(Sbu z>tm~DtRgCg9s~=lmxb%oWM(mc+jDl z9rxcNUh16um7$ORI6aF~=ZUSV1auYU&N}FxZb9e^9*fQ+0z}QH{l&~~cZB44O^thJ zM12)T|G0ymxw7Z7L3fQd`1qY6aD+Dcv@xW9f;6ADm@~E2D)H+)+RNgTjl7@#R6Zt`+5VI7;fm9W-2VPx3$|GU>TNK7NY4mjB^j~#4e!tO6N?q);Ye6v8 zMM2++Ag=-)i)*W9Zn7EM0eNqf$8H+w>LZ@21dYfygg zhYVT84u2?kBnPzmmRSRZtyUn2&An6m|FTf5**eU!b{L^b&!qxAjs*>pP!3$xFd>B; zIOr%>MA4-Ay3Z$0`ShSEc7^JH4H>WA8D3PYq^oUWnC1AIZr@_4-OLGM;MwSh6iNOy z&6(*vTjd3uOI2I<=2sb09WWyBLx@rI4 zLxRO3CWG*L-)v^bFut<^!gR62eCfz|=5FYpM>zh^c$L`kg0VxSgge88 zfsxoLY=rfUnnJ5-e(}>1;GW|rd{$?&pIOCpLO(jih((M2AsLLxf3FyPc#6;h@8vy{ z%arMZMyFCfn5;Kc{w4hTRKkv5pzSbI`DR)qR%sS@D(ddeImZ!t9%=ve!&HL6bj6@| ztL2YnD??&gedqIvU~%Jh#K16kA>q(NP#!6+DQ)K5tlO6g_jZlLs(4ddc)#`MJTlif zXW>nLtrZH)lS-V}DP$xrPw!8&mcqi`S^QEoM8ZP*RkTw&RRPUc-m2B!{`xv>WsS5^ z%hvQF!!{j&GKLYT2P%mtr-y9Z!{Vd0YqON&2*po_k@{yhhhzY1nFU*a%Bion%_w#M zx9I69L9Y4!g0hy75VX6_ZdUe=jj%*bf%mIuZ%3F=vSn=sUeMUI6`XD=*CAUFz+c*ynC%qUqy)vJa4-pY0d`yLj&*5{<2p+HIqVE; z=GtgzvD^$0l9PTU)$cfA;PK%>us|5Z&|8Y^O3u7x!b(t<-^n|2w%Ct*lh^r)GZFQd zY*J?QRf0WfZUHK(>ICVEgmC?qwZ5a!QX*S#JJvvpa)u@i9hOfF(&MlQuZ$~kT}QA@?9G28Ag={os_c5uUM z+QJR}oH@z;T5hT}f|PTNu=%UE|C{sH zzBpaoBAZ39^~Qi6s{enc*HVBZttq=uR;%h2@f_t8^NRGOq6?@*UXvXieq3)9-f zTECrJZQ>|J!~r&Di zpT(B-kg$0m*RBGWtJG?jWWuVUELV%y=>b`<&vX{$1#}T@(VCYjYgAw;4^hx9`Dmc^i4g!b24l7d{89G?Kbc- zy$R**q_ujTbEy>9)@8C54=%ToetD=oxSAi9E^vaO%~z#i6aw$^u1@U~`qOPN|2}^a zqTk|_=xsqmZ7NwNVJ-UN*ffK=oG?3fd4KKWz?*`4Ra3wI4dza9qMdv#C`hfI8>Cj*g~8wT8kz?+c9!HPAeMvTrUWMbur!=~ zIS`LE#)Som<1(hx$6k56w*A-V!r4NN{RQyw+%8NT?DL!FBL2x7_ORCyI8U|3F~r8i z<>|61B;G+yDHflqbo0U+0*4koUO`PSSAjLKJ-x|@O4)Pq^mY4sN|^HPYXRkwj0})j zfI<4Rc?gF3ZZ(#u&mepjKCOS0gI z&5REY!ANd!<%2r10iKgb)t}Icm}|L?nKyo6evt&e=EZT3M*6y(6B=K8Om|^Jls!B= zP(XCWbTPGX-p{n4WjL50U=<>{HR#AZa)fA(AUC3(b zw-B!y1tayzld)x|VSZXJ{q1i4EbY`Z`|FH(HBaN_S06>A&()|m@_@$raP`2vKG#oO zNnqH2T|hf55~$ABP5@B-l$fW}&L%Rr`dNxa8~ShVos1zB`>(kg4%R8&;O z!ToB#Z-P0b7FKE-)kniEf+1gG7Yo`@Zs)$s1<)mrsmqg#DQ;X~~2SFS7_ z2~vpw(Aomu*JvH#?|~KcS3Qs=L{!da>~i&qH}EVa-oUGHe3?aDBb++%s|U)K84P*2DB0js^&c*rPuPjLkZ%H@ z5zRbcEct)T30|Xzk=$U#7iFLl)y*rE=fy1x+=%z|D+T(FAa!~hH#s`EXKcr_3$|0; z&x@wj<71`f!GN0AN!AvkUy{u~f!sr-U74eAU_;_}i>MKYmBlTx-ZeA%UBHEgGuOFV zy*OxS$nW%Ym@n7EGHKSkB6J*;wu0m%xni zRJ``cKbO90$U6=Js=(48?Ni0v|IlljuW+$}dX%@|B{dp~w{@7TED}rg!f26xhT8UEUu(c2zs0#Gu6%4QP>7t^i(GxR`!# zDuFO#<;KtVjO?ktk=kGC{FDO%`!;F>i55eTP7JE6nhnb%)x>ePjl$8JI+beP%k82i zyZ6iTM!)u&IkZ@AHa3LfVxTyICW~bwHlZHIis=ElNx6ZD04gSEQ_k+F5y|yeov)!we5)eY6Rq5-lG{F*p9B31vODl3c{Q zljn+L2w~;UgDCKr+sZdZ%&yK#X~)4~^&H*NZpj%yE2A8^S+5A$x|=s|R9o4v(7gXs zUBNg1SB6xcs|ji2p=>>~Edh7-dmibpNl(jVa5hT%jKXtSr5O4<7P}EcG~DT_hI3i# zN(PC?ZLWP0x9H~^KVZDRe;cvknElFX(V9~fY2psa;+=BZcER-`R$Kzjn*tdlm@xc&lJU!_EICr+cI8BWXM z?_EP+|suj>*LHtQ~z=P@r3Jd)ao)$i?!8f-G9;pQ;C@m zaNcq^7GiEqlX>c0IUk?6e#VyDq!ZT->WdBfAtMs9U&)~l*DY)=a~23d_NVB3B+%nC zxh(ME9bs|tw}ScYVL_Gm(fp)4#+&dg+3MAXJ6PLocksww*&2}tDsmYtJF7Pq!w1gr zZ5Sq5(B_%HGC~pI3llN^F$u)nVjt?P>>f$HZp5C|PE$C|^}bk$fgB|Hy)Py=*Ey?; zeeX11J@#gki|EF*WZBNdy~Sj;|3~D5E2yT^TUW-E4+DFeOo?kw##KkAW#im&6z|fy z3q0zyL6R1TqXV_L){8F86|j<4^m>)vkBj6+XyER~swMJuNp>%So1lwU%sx$g=~sQ4 z=-@~oVDatS=?ktkXU24rQYT{kS&UL>flsKZvReI0_Jsm)dlNDhfJJlbWf6Y=?feyU?NvEfUQQ`mZ=mRxE zr-Ph{#Z?dh_aDINbk%irRq}oEC6DxxOb9^o2bf3d34JDcdN@!s(#O2KWo`?EjuYU@uokkbhuc6-cSpr`zSF zv=s^|Mmsy76*CoQeTcz9IsQU<{LvCyujjieKHClM6Pn45mw!9L2;)4;3|ROfm{Vvs zT{u_V#%dy1$v9U>`;;qd^#d%Yh0U--#PqfY9=EVLhup+zn`Klv0NRr1x|2@q|Lj@`fbU|Eh_m#^{5p=7NrG3f95Nyg#rrofh+WpkmQ_XTH<7FD zN;RM54R)^c_aH#!v={_+>L=Z%+6HdiYEyw1R;5kL)eq^(bOvs*$MgSy+$YEK zFnNuD%iHwDlTg_jcTTynzzBMxtC4ampwaW;bU|6;m6X4p@v!&}c4FK($fJjT; zd}>3V7*|ivnq8e7mq`6;dq-oc$-f>{hCTX^w!qYgt4pc)Mu<>QQGstM>b&~KCif2r z2_xlOb;-%l+JzdBw`Sr|H&Z7~NJLshPDbaAqIMVmDY_tB@_+QVwuzKgAC=PjWv@}< zIU2Svu6Um^gP(-y4~zt*1#O+S0>k%nHHR%yEK5xeCo_MM$tjmQO%5?) zy8|V~Ieo*S5-Wc_zX+#7wXAU`r0VW;ze%y&{eyo6?`*1X91%{PusBkI0jdF`Y7cL$ zErb8xty_CCE6ia38Y3zCg8h}BLH|J!q0lQlBcJI@qu8oRdPgoWpyudv=EA7cj{^n2 zW`TDOFlLPp&@8t5MFL7e)sXDzV`R{XbbzEqhCwK(hlavD2^fYprCIcma=* zL4d=@6@xnzvvdBb>S`3Xd&BV;IBq?u`Gv2`xR3yP8tE=sRAm4=`HVUWg#5cmKx9Ed zK3mF8_nq7MI>96T{V_T;cp^90B?SVPGwN|c00KnlIPH@b=ln$W6ixX6#r>Z{mj8db zS3+0>ns9=TiO|M4?p%Y0h@U79)pGhY|IEBsMJHuOP#W3KdYx^ZLn$tqRueW#$gl?M z2BLy~7TQMTP+Hb)Zy_un%pPvBggkZ)k(7{v^uDZ8BfxNeR8f1M z*x)RueisM(*Y^mXF1bS1tBh`o(1L7rBH6$4Vwiy3Y|vqI9GXm*rfh0r>S#k`zObF$`wGd@Ac|<3@Me8jPw&EB}bJuVTFt zW3hoTM0nE8R`xc6!4%RYV;5?+yAd~Rn5ui_ZAsJQn6p(Cxz)}r^Cb;uCoWHszUUWf zpTY<N%8Zw5ye0e_l~rbgSS%ekDlfAs>-WUG<>2rECup*Zoq* zus%k^Ke=U?bx27)GLAq$;vB^|A%+z2Ns*wWqW}07bAxatzwZ{a=$l}-$=EaN)-;#d zlyvaqNC-Ll6!lw%Tel8_9(ngq1d*-c=&@p3{5SLgnJPT;S?Y!}a`Yo&$m9iro5YL7 zMUeL#uvj3W0JW!2UFx@X#i*TQj*?<$pVAzj^9RL+9R|!Kgg3%8tTS^X)toe)RyG9T zt^Uu7_Z>T;PoKIyvdTP@LXo)%1q&vvezWvulbq*`s=V*6y9a}jHD1e-FER{wNa!D; zSf=tY^=j(V+l8s`DhC*`L@~>+?hNjq5ZXr)+UBj|LmdQ`?Ule}oFWiC4OEvuedX09 z_sY-KX+JPsDb--9#hNl{-{eSumZ2=#eMIfy)Gig?mcy;6KSyD&oVCxvrksI46h0O( zqUUa5yM1)C1>;tuC#<{`2f2d%_C~Nqs1(@#0Cl=JRd-|7MKJh@ut0h!@0R@Wkggc* z%_8PD7^T4`BCiy1J?pzI_x%cl0sFYIYI1@tOC z#|0%|8R%B8cLzME1&-sk`cd@QD}c8+JsYV}7l3@2S5QZzFm{1@i=#uI<(;T_s?d6} zHL3Qc^I15p4n}E7+?4GdgPV--qF1Qj8qY{HwzA;V+nFhUc>8P!3?o*x3F7h<vkdAW&Bnl;A5O{_{y*Mqo%GP=-SMrdH47Guk)Jt@1cB{F-q(0 z1&^%ke{!Y7wx|{ew$=Jr6LBPn2YmEPQ923Mjo&0382hZXuf}j@w6GM8Hpc_L(M5;y0Ebf`;|Yv z5r?r+k66;f;Pwl$9PCoFupRU+H7wSid4CpWC0`Bdel z6~6T$P-PkNxHKxI!K(tTIEg=vevB07yfjyN;1PTHEXqyVFvG!u=m;PVUe6Z1C+n~h zqMzg&Q*i`dC`4|WnTikdyhlB_&N|@!!kpJan04XZkgGKb49A*FJ`9vC=?a21W&}g` zJwe#5a-k<3gG-5T4K41j;=zv`?(EM!l<(-n#{kTxbv7O`yAQKEJxHJ>z5C3y;ej?O z;ATv*)M-Na*_2%8%#%uP$8k_*-&07Hb;-59tDK9lLucDs+hs^XG2d5fj~)30nUkvL z@pCguu%@ggWrAG4Z-HI)Om3N~>aBUgoox@Pk2e)-?9G>5tJO-R1{i9+-+j2|^%N3j zO#2FQk9th#A2m_mYk?&n|CM_t@ekqnok;H}SP_41vU>K=-NsJR_JjfOP zd>rarF&F4yLHpWAc=uf>R+ibujyn4I`>=Z8E6FA-*xK45>>a(ZUsx9fNG_+9O5uTke;$#J{GM$30dE4y#sP zTnl*77#2K}pfMK&d%vrM`$FUz{S1J9vX6ODS&85Ec!C}CY}z1OO0I6sh#*$o7&cJ| zteDubmv@j-`#+06gMSvBYLUn;wF}C72pE|-%Zp(#V`{T34#GS*g|WH|w$0SUgOS7{ z?fIg*qhJ4vcOp!x&5Lx7o{mR?zoT}*^M6dMWE!LEe7RbEZjQorBesf<&}xE{9U68X zDQh{vp^S}X@ivK0w>a6E2V`WL`|3hIAP8f|{t?9LPOO8Wy%vQo?!kNOJjpwVDBpl* zP-mRX3Ut;6H%gohL`!6)t1l{ys?`X$>54aVrPSto^b_piuJK40K?=>DQ`qoKeV8#8 z`VE$T|EeAHtrt*`eIqS=c?T*MXF}X*yv8|>d13W=1z^o?-~8TR-e!avgD1)=sjAVh z$j@tQ2JI=3Z1X5E=llenJ3xx5JrN-);on2~7nu6j!;q*PPF^E3O_rHtuVR*EgXiA( zd$~!MT^4(Aiq_e=5AFt|jvhrO&Kpi^2f-hhAtsHxA2z>#lScQL+M4Coj&P!H;1u~L z;pu`Ndf+MgS@#e(MWC~@ zEfmIH73dmpykYfnYpidJg)nW_^Ax+)o;{uY{cC-`>%Q*VYSQMNE4=`6=+V3GYJp!K zvP7w_Cid-dS}r{Z2~W-c3wktr-0HecJ>aIlkGs9fW|0P?^)%&r=Uw7s=i`FJxxMGu zMfPtv&$z8eys6e>%B7#CUM6wFkQpR9A{&zbE-kbB+T~2g)I64D^74@Ev?w#`s4j^x zI*z3xk9KbdAM zfBu6}ul*}Z^)DBXy)dLnDy!Ze?k5WJq_MM~E>p!I|F1}*o zpXx$?&~vik%*&9lFr3n$*$i?%IhEi(;lcIG7dQH`^`P5hs953MLr7Zu!d*Uxh{>}H zj;~hFS?@brwFUK&j>}8TkRL7h&byEB@=4&xxs3qB5v0*h;EZEHZ+obiuJ~lKn7gc) z|Nfv(3|j=PaK0Kj)qIY?b#s(6E=d(7J|~?U)UDz#{4-f~uv9x=$eV0HBG_;}AF)n< znT$~sL>vr^i` zp=P{7rCCl^&nt{6rZ|R~(!t0#q4=xtW$zR`ex?OZM7;&03}MWY4v-*=4ge~A;KBlB zVNTnB;|`L7T{+*RoP91SNP;>XM)|?9PKZwUThu%?GlJd`ie8ZXz5GT8FoX-wI&LbR zC@;=jI$lAqatPL{a*D?|!^$B2r@>EdW=Qp~xnD|5U0U(iWk0O1r%Rls%e}@BOY`Ms z+zq6bY_QaOv7?ZYgrf)EzoW~m%fF8iR?pDZWDNxUwXTVw&0 zbKa_vurkP{J~;9$D^O4VQsqpgYO4O_nexw0>6hwc!`a8^`N32H#pNS`$=cmQUH(G> zwZ@}*uODjjNs;g?!q<~NodRSH3DH>aO2g6I8QgEr{|ap|$(>a4z()WnBh2#a*k8Z* z+f%;`(R1i_tZaPYo16_rnUQUS(+%6~AL{Rryf#lg`8ouf5heYcdp-G1bAe*GhEOa( z7Hgnb*vb-OO0z>bY)k?X;DFyG!9p6(pB+SqJ=pgz13ofseOT?@QDpPj49D3fU)Z4CN%FiA;H_U#SpJeuAI{F3^ zMwEc*sbN};Ilr=kw6Hgr@|cq5gxPlO^9q9VDV?XtxSK5k3q55uY>qp4T& zBgO3I?6{OCt0y`7*eUX&{);zao9OY7ZO5TEqE6N=QX1e;p|*D-T4jiz<7k*a$uUn^ z;{agnMihvYyr7z#`{iF|8|QH8sW6wR%eKpvZ^>`N1ow05)+rClc&oj*xwwA1++;`5 ztTiH>a}1T0?LaF+if;Y1ZK!MuyME@)isuPStTIz?zINUcR{QgGjbev%rEoIWnYaly z(tX6|$O&eeL9B@aXonFv;v_qr@-tpcIg-YH@m>>UfU=lSQZ$>oX z$~REB$Ez>*e$||>)2&zUJpH+wOqXr7Hc3cjuEV~!sQY{Q`PuBh(z4bW(Divz~b zDY0IN_Pv$X`^1=<8Q0+H4HRlQlQvZ&?F#5B<^ILxRJiEfBNty0?%c;K=15q#>^@!l zdZiNPU&W^w@nxjG*s_{xh)#j1rC~uKepyi|Ek{>lFzX1VU@*cFzbA@$SuFg$(IjWC z*jmx!<&LLZ@LPx8d%oc2Y5sQ9YT(Pmoo%3hT~O?t6eXSnwlqFBo_toax8Q8)!@Xpa zU!gF#V6Y`SF086lx7IaYBUp~vR$ry0vfLv>o55VsZA6f!WY}et12{B{zcH7NzXs>W z&0;fSx@1<)It-p&XFi~9p&c-XWs~Z14+CG<+fh*IW{e$>~+iC#YDmALFWxA<=^1Q^5}5y>aX|0vI(F- zvQ8Ttx%GW^8VoaEy?-nJ3hp-(nkr+M{`l)pgcP%KZ=`1oIsy=J%_miOo_;1an0&te zYI|SHy=l@V`_z*)N4NAcU9S%2F>clHtp5Fu!Jk}Qn>u}9)H9O=7}1;BTXma>IGfvj zBH}K7%hK(#keY~}qHJM-7tENk#E&aR^Yp$@fWE}>&^$OhO40l9kH)1_A1m#95!D9| zS(In*C=yi@gc^)LI)E*VC;_nUtQ*bE%ID$=SkhZ0&eW2;*f5XSDhxY6K2xu=@dJYf zEa9WGv$_+i7nKU+qR&)aN)z(nW4Fz?2P|dF8W#n2 z)9b=mZ4zZLL?Th1M|Cr4;`sQZ{=W}z7QkBo0VNxNiEZQnge;{A?=FLGxf$o*5#Uze z5^sdxDzYA?FEk*Oft`b;$xkreC}jepEY>G65u4xh<+qA4*qEhgm<>bLWPvi`yPO@qgcilp~T1^G6l z!~R0i08!LCgyHxJ*g|gudb$kHGxX!WlKo=4At+>EmOpbZ)=+ozWI2AnD>6)c5`|$Z z(H_~kNL@+|RJZ9TK2-447oRzmlFzgDR&2bP&U zo2kp$(^23P^G_Jsk66UV+5bo3roiHEJkY4gEOt2H`N)Z6p@Pq8D3fyVZqj$9%-gm4 zy@OD_!_(?y*&q8>qcxgn^^OrFC>vFDe5j}yAdsC$q<9eiG~VPJSuXu!lwwF08URU# zV-15vVnKzL-`|8)-QhJ&5H4mmb9_W&n zN9c5mLJb~Q`sum$J5)+4k@Vp@rUTKxgpX^AS0zGi5_pUOIL814$5qZBdWu%9>grXX z({W@l^j~;oZCEwfW(C%o#7$sBL^IL@+=bKKUnmKs0^4i82nGGn8~k66-9;sGuoZ$% zzACfIyHyovl>43@8In8;7bp=9o<7d%zVuQkj>8PC7wv%lVUdXSh@r50Nd@fAxl=CEGipdSy1jACI>`_S~fOm|O}H7JWwH)LLJO(--L^w;lGw#aWL17pur z1hj+5I;%7nR?+NRYv~H)o2CP@=aBt0O)?Vn;eoRsznm`;(`8Rz)P^;>#LT5nb$rh1 z`+?jtCXWMZZrUhCEUV{Om`*c|o+PwK+S~)ufYeb~Y<>zj{4JaQu78b_s5&LHZxYBq z$#t`05>kvtNEIW{mNoVDdkf!W@9!4nIuCy#8fEEfSn$h+DRmk8EIIO6puq7;;L359 zOf=#KAHzpyd1s($qW1z39IQKtxYI4yndk0{zacFGDxv)-<-`lE$u5R+;>Oa_J2e=R zmbnbpj~Sn_^udi0vWmC!y;z)qAL(5A3T(+Z@Aa3gZ26Io_5obIUPc>qewi5mT<6nL z=6+oOdL%_>CT5nVS*K84E3^_0mt>!Bdi%4#rsV!>M5%he9lK=7u8G)0pNNwixGZ*! zPsgKvwUS2uH#}C&HUPRyYSUeJ@aQP)G<40p4`5B6_E-N z?gGXW|AHBuA7*G08#dpM&D}E{&oW}9eoR{FYNe!oMR0HsqNz-l415WWSb3XDwc-U$ zU$FkKa^Es?a?)fB@KfLLo1pUV+xDK^{%GerOzX<}H)j@N)q^N3a^{?y>oFE|53;}S2M{4k(bYXWA_ zIQpdge}=In0{wjBsK(i zXEGJ;6cIBkd=c@^8SR7*&L{h|FJ$vBl_*891fZh~KZzwwc_B-*ZSVaeINOz-?EU#q z9*-6~LddJKRJC8iSz@MvYTR>&gdo&%wx+DN@GmBpb~j9fYo*XtkTKi5d+@Bh6ZC_5 zyXAoj>ZPAw+-1j%(Ew+bEK@FYyKDvMcp&Hyw&!V{XsUrA>oEMr|8sN%gK_t0oMgc| zm5&UPgct-rRfKVi7NnFemoSbFQQQTR4Xh38|M-?+%#|G&l-Nol>b-`N>0V;Jq%pD{!Wd3ap5R4QYVd5%$M51aL($CfZIWk~dS5T<_yyXJ8O=PaO7u zGNF1+51#S-znFUOc(~f20W^9It3>Zzln~wOy+jwCu&YMzMDMFd?*!38uzD9Pq6fk1 ztQNgRFS+}E-*@lt{=H{s=9%`)%$YNTW!Bb+H*DLB4_ikcyk6X~q!8jiz=@zs{MtiC zKLicu50OjwmaTJi{y;IXX_U4TFY~COEg?*em)FnR)i7%anux4}HFM*G8O9@?eDB7@ zv!=Fjhitieu>S{Oxnl5#y^B8pN4Bd2@dW%cLvKG7evy|DG>hJg1fE;PQ5-%bJmg31 z;T&<2bVU}L_H2QyyF!XQQuyE-8jfowln?^YSXSum@|SGcBapApC$ZwH-_$?eP(A<1 z=G=DwATse0RHPi$CKn?b0*>)uN>~=}&i|!(%LP>856{hhMfy>7d<>_ne!$W0yjs47 zGVV?-VVLB87UyLd9e-sRIz#P_IzJf*6S}Z<0bMV+CFVN!UB`#Tcd;pn6?Ya0W$U>f zeO{sN#9o6N_ejA^iYeXz`)k;){T}Zf?VNYJ$bJ04><56ow=E6B9~Lnl=~jgTB~oIfsh8W@kS@k6Haea7v43HSFSyX8rb zy#@XaEuM$Oz?(89`sJyeI4h9^kj}-$6QYJPqJhP8J0&H}7lsw$&whnmO(vc8P(q%D zM_5~kA0#`Ljk$Dib|1qne^MHAqEuZv^R2MEf{&2oX1M^k9O$Z z=rsxB>cOqZc@1PBa7OdA&9t0G4G}~`SmtPeS-9@Rhqq7;e7R#YeOKB~)IYiT`F+1M zW5JpDjoIlw@?|kD*gIm;Nx%UOq@nHPE5t?#YlF_NPO^IXgFU6f*cpw*a`6X4+9=hG z)2FYX_D{5aMVD4Y8*}srnN-PoR8_>naoOTEwfHd-G@Qeiy541H%R5 z0!CsCXKl0dD`w09X4Nb_(g*KW&seiH_@g05CcPK^jPPOIv}x0neMMp-K9Gb-1lUL@ z(Z0g@^1COYY2>j_`JhlPb&Zg>P|)-PS)$Bi6bJ7Wcqn`;ko6j?t7ExcUyVBN60sYO z_vd}yrMRN|XLS;t`o>Gz@9Q?}1tsWt4eAZwe0l;p8~0ie=_kb+%teQiP5X?kJ{MAw|s9L{5hXviohSd>vJg--DP}% zSt<_T%hPj>os~;J+NBs@-QuIp{1N{^t^4K*VX1eW=WSKW6RX^+WP4`@lJq>pJlB5( zb>8~EVm(_ubW<~()xL-W`%FIvY-Uy1qcay z+Y8l?$!N!Crw%w|Ij6<)=?r7c7dp?v^g8e~9dsgdr~gotE6;zU+QSu+tZ7=s)!~P@ zE;{je@*CH3V?wpoj=q1RlFqavg+QBq^L&jn!G4G-w~?!p=^{6pG_8^0;sxm3 zi%M4^ENz;&jFYtzt#i<&RUQ^F0gANtt&^=3Hf%Kr`SRvOZEVVc$ zp695y=Cuj})0bH$(H7gv0)v}^zb%Dw$@_Dw2Xv^JVmjeYBn@GU%U&#+Jr*RFGxR( zwm#JTvw^l3h*v-KBoFR3N&cCM$U?TkyoSEjGl7%w@slNBnz2_ zi3SRU(NZ<|Ed2HcK48i#gfut(*qRnL>B_HcG$}Z?5`%|Yz4MvFX{qlTWz4k8eXm@* z_=$_b^}0Z2oFuKg2+y6aPQ9a4+I57SeRX`X?*Iqs0$9lTg+oF!{4w=zGhmogPHRi! zS_7Fy$qsfP%WPuyEy8q3G2uMZ@82u(XS}^vgC+>6|Ix5@tmCCA$Mo@;;e&*v1e9J9 zD06j?g^n^@Q_l&GK}H-T@Ss@gm#iGZ7H`+h`S#=<*$qG{z(9-tL#VaYd++8`kGE`k`re8- zUZ#sOo+o^IM_g8eOQsnWMEdGu{@7SH)TEv`0OkCyou=PV3(A32Pu%zv`-F5V3P`7t z5+vTwW$p7f^V#jS=LMUcb%Cwph1i!0djV1^X)$PCZ`=inrb9ZwTRTnb*WoCJM2hH_ zyKD4rKE49;W4DnCl9!46Vng@$Zu&~35NfT%Yg$>c`A?XL_hM%`ev~P1l=wZ8$PBAu zpOEg~jHxVf;-{(jS5fJMm(!k7Q#m4H%s3|1Kvg&PZJ9mI*}_k@i9TAjyxgJ%Zfb8f ze%Mw&%EWB(#cLiv^22wZBMPbT;hHvWzY}RuMV;jwKl6-O=`q42cEOA8R3O<*EGeuv z%ojGCO1KQcdsr~1YQNt9v*WMM@hS#vn&l4v_DU1So4ZCR{nbselu>qW=dmSsu|#6o zJlA`c15;xr@&v7_1C5OD>ZgSp<&}?lPS{P;oRgA9cdxr0ZAgr`u#SFJ@20dhM&?s;}?u;7f`kxb3a{vnvGjfXXV^7LHDy?lN2%cGk9(Yrcrf-{;movX43b)jaPNf&Zd}PWPcd;`1 z^SfR%INLGQW@Y(*5aPTk3~!@V^uXy*Lwn3H1V2#ISH}ibvU|09%JNz{(PbxKN{Q_k zMq=DEIXLuTX_S`u_%tOCOo@*E-M&KOV6_~)%B4&H7W;jR-=DhoTCg>m9=9T+G|@la7n`p!dF|*xg{DVG z)}Q4M^>GNOO%luWh}Y}Jpg$RQ{|Cy1!gQ)i!-}Pq3h0wgC!rWun2z1Kxs8li9XL zpJD$+PGWW;2x;lXqBd>=MEu~ISGt+*HT(SPq{#@wnW7Q!Ma*iEWj5yzWP}|vTr8{S z);LlkpO3dPnZjrj0{SmT;ZrFBEI0wgSpCDoH-d&bkQOls`tX+DBsqAfn}kqXHIgj;ye;*6G~_h`D6>|SQMm|;;{C7 zc$ybRwhw9+$G=Kne_YsXTXS9?o*kht&~w3sj9R-E&%EKTrk6?w+7ZK;wqxd&S7k`ul8_hql-31f_~at2SnZU4uXtly(g z)sz(Gh|b@{6eNqd_@N<>`)jUdY)i2=*>l9NlssD}21aoTz;y8yZ(F6^+XIe*wLKh7(F^1iFMKhfG+{5?g-_Do*wrfy9<*~ot-uEW;g$oC9=<>(c}&LIAiyQE5S zwW#e#(nptr^b-^7y=$O{O}K5`^ZUc%uzt#9&NO<`Kc~NQ$}Xw76Qrxyl(K(_zq~Y6 zXi9VUj)h~rw-1toTKuH&j+-+w>u!IF9a{xwm8Y2FG_gpxzm;8k+?aKY61eBo(+{bb zsjzW70yas_dfnr_bW8^)f9wIP`@?zJ7caB z-ZK+v;w+n)AZ=rsJ-gjY@-Mfmb=??tNp{MKR1isc?TMDzHC?A5PieQL>?t0PH_5h` zkof*wia7JXg>l{Tw&$cN{hsRdixU?uc9(4iuao^$d&0Lm?&BcoFIIV!hzRyjzxUkX zHct;hswVzD9A+G8GZIT}EdK;x$DI2M;d-}+2~?1_rIh8OwiQXA&}?txC7A#vB@x-4 zQD9Z<*W{PA!&|oVB7+~km5AG5Qo}R(xbPwIho^kA&mW(X?{uWT_2#Hbj!21W`IGk~ z-B8ts(ULUxS=))=&b0`34?eF@mCs1`g{O>{8bYHkWPfKQh`Acy8lLDg9N(x=Y+Q~iq`kl61Uw3J->>W~14i>$y z&0~U`1fiEq4Vr&XBz9=^787HcdQim6aEq6WY&5lJ_KyznrgezyVm35X7wyn&Pg7Z* z?mx(yy-~HDZxyBz!acvJ?2vX}{7-l|Pe-19pF5;7rde0bgDwSE;_S>6x}C%sl;R!B z%^c~A6QQ-WRaPdP-+BkeV`D4-yyKkdV7z{R%DMc$vWvRWH&%iyFakfBSb2LA4i>VCrBz2cn~+luvRm1tYvnB6z?jf ziTbnxPZFMum%5X7R{3y=Jqwi~FD>NJM0814O6$R%}eUnjo5>$n=x^n3Bx^o*5rGyyR zmnuET7JAUD=gS2Ij zf>o|KF7VMiaru}`xgB$i+h!weEIiIn1VuB$$?u9@K%99J&p5j%A%%G7DT1k7QM4!S z+)b6A7ww4H=~QyKsa5LGw?zl*x}-4NWpeT>(a0yirknI_WK7?N7tpmk2-<#qZ+2e! z!9PEuE!gnW+F9}!^PTc~#IB`F2*TqAUbeq5A|y^TXhlT1N+%hW0I7_4`2zaILT|a| zTT6fvSJyxNkgR{Td8CG4W7Ru#Ap}uKDkEORa5NsYp3GYK(yDtFIVZB2d>USs|2sn~ zd6T$`k}Z)DozS!muq{+u5QXX5*7h~?B+5KU+{!Kah@c~M=|IChP1g2j)@9Ca=SoZ8 zMOxOfl$`E7!sS<>yvGwbVa^WgH8M`{41!2JzQ8C_Q?@;i2a>GLVO|Z7X78eg-IBK* zl0Of=eOJH~h7X18&N+VU)Rew-2yKHr^ZqjrrEoS+m2;eOnX&Q?yEu{M0tn|hez969 z_qK&P1RE_nscV;aFHDn_3=1@vi?T1jIM6pKop$lEa)6C83S0h?VDd-b{GRR(`qfz! zbDJaRikWzlj_$Uu?x0#p}x!rUV1ur-?|M4RdrFWc20L%C1!k2WRx){>d< zoOYj*fU^4YCqY$ac>+xp6qx$Vul))VW#j$5c)q|vK!E4}Fpfa;O;eq{-IX5YD%;^f zwCd36s}%Bx9C?$m_yfOA4P&XGmqGkbv_-KmKuydnrB~CN?4zA0RCcY6o#j*QmH~3h z!srCaH|d2#Ez53*YpiY0u~?z~{T%oAv)59%Mz0XPzp*INID)=%(Er_Iv`Fy~lhcq$ z4z?NihXXTqxDoNrG%@Mf zxp`-FPs&)o!onB3T}l-G z_eR`UXnwuwGG%>4ur_a-DKMUVPrwk6PpO*KhH5$mDYHsc4S( zF;yYFn>6e7{Dy!ZDzaM20dTbkxW;1mc0MaCTUVt}+ z)!|m^j0AcR;}C@2DKtRF;uqsnXbo-Zba%j$-@)8{+M!oJu7B&beb6Po{~Blf!SBQG z?;CpffX~|m|3_hfHPwR1_Q=q{E&bN^d5fn1&6zwYRi`$`3nI9roWUDSb2FCh_k^EZ z2_Mc+J+DeP)$)mS&PH=Sbq$llF5UsBun6S4!j{5zeP1G8@sBZ6QPb8Mmi(EKeN=mN z10eQcscrp+D9{Yj7+-V)5_Y|cHSkU7iuIPdT=*wSa~Bj5!<|!+(DEyRAnI+oG^THQ zb+Jsg-I;5t@4-(6;`Hsx7i|O+2<2DoXIfpJ+WsQ2bl)&Gz>1JpkK% z=d4h;29Mv=g2%-PEYP^i6l1_Z?#O?0v=MAK4EAkGaACoSD$rlb`lVQ>h&r^G`PO{* z9{AMymEX*BtTcnE6Z_f0T;5#%FGk9Yz01LgeicdvdRpi!TO~8C#8I4~Lz5;nc50_( zE5n2b=)X>H3WT+B*WMQJ4TK5?XM3g`yMAhbL?k$zgR!)e;vGa)6u;ESNl=on-?m+^ zyE9ZCk%RySyZ=!m%=q8ju=_~(_>2H(61vUJ+kRjuNvi#pnPs?Xj!SSZ1=uK)1C9!bCLDBHN3L{R*UKSv0p1R1=vW6a}nbU#n%qKh}x znj1*Ud22h!xqu6U*TZRqW8k1T$s0=8NaYr^QLFx1H=Y)Q;_;gOi_S&FCdFIKW0Yn( z>l2a7p~WB;CUw{BpOez&Lse!a+?amPgHkYo8r#XN!Lq9EAV|vU%OCCcTvLqgOwW^c zZ*l~DJ<9MKP~4;C|B!sROZiF*d?14jp8O*Li9{KlXdU?-Ii=BwJ?Rf-{{hGI3H?&2 z42o_ZibOs7LpT_)mqpT*D|^~rx{Gl?dC}42C;u?zvl=|Xza$LrQ@R2kukeG~wMFuy zhBf~O)DiJV=s-rhTQStp(pv%FWY2lt9+>+T5a4&%A2e-L8+H9S%8(Qe8V1{C3I1h0 zyBLTX!?i-M=418C`$mz*Y53OgXNSL#upRspWOXs;QSk6T0*^>apJB_($TZ+)45w4T z3=0xLf8o3R3`-iG6fOqnF^bjlqvMw*$*`gna9qajzKsfkXps%f%SbfqcCq}A3|mIr zoU%K_85-nUTA7U^b2Lfkb65aAHoJDeHP2iALzgq06l*twgczMuM*dw#LjC#6@Z>Z8 z0+`ie)o60$DV8?5;N?IEtVrxDlxvi(lO&Xnp(P(gI7iFz6k7mit&FL{8js(|&$)MJ zw<@GmmrtP9kS$E-ny}F!DZ-9Ed;tZTa^TcRLz%%%T9t#E2BCe>(?lr359Ab{F?f+? z&iF@)5_`dhm4NIm>VtMy>5E1!xcIm*$0L7>azcim2WpHrvrfKR7^p)l@GYQrOpPYL z6u?dkIVLsGWcZQ2e|;Wq7vg~$;H1OHokhYPzVRu8B!}i$>qy3_=x4y7Om+|ml$`;q zWak)Qo=(TxQLyD*4rIc{9Ju0O&-84{RS_402KB3fq@Ot~RnNoW{y^^ zE-yzpUJh*ynEj8lpD?4`;AgDdCmQsf6OtEh1q=jsDEvt2wiP&2b*~spLV-Bw3pfao z0M@LPBDk1Oi;eB8xQe-LhYcSo9Q26IPw6D_Tmro9($FoR7Ig;L`}Lsi)4?*2Jy+M2 zHq;7^`&SQ2{p_I|pJcnB^{G}!akVynzsUH=ZWr$HZRm+esf_w8P5$Q}_lFXz2efg9 zTC~B<@ykcn{{?7#-Cgqg7{C4U=2w8(-9Gyip%tM>HbD`3#Va?_t-6>G;%`6k>GY>nfnk?)%YEZ*_n zk7c-qbd>x_7ge!eLJPMNn+{NV=}pz-3Mu)ct6UrRSHg@#KAc?43ZOj2g}ht4mls8w zjdCY!bM~}4Fy&A2p_e!Clv^8zz-=s}e%=64g4bmyCtw&ueY&Xc>Gh zEMLSlX0STysjt7Evuwd>|?E zX>BzA)+*>I@@jq$ZT2-5TCV`Eyx)b;(Dvpx&@HrN2o+0 zZK=H5H4`nS?J3n=LGQ!-NmyOu0B5EquI zJ6?@LPW*pFCAOEf&tOc%Za0&E=-e@=nc8IXe~w5cUW5tBV#k64o9Ot?fWBr1!Qu;? zsqt2!Dzv^lXxaxBt2jcC?I1(>O_ENMu^5J35k&)4voFFqNgC}(1#x?X+BlrF1`AQ@ zk~D^5W#0bfw62UWM=^YUbidX7*FVr;K}+C*D8Qx3N+|N$3_Mt!wB>IVJT&`dEVoNI zJ}R63!K?aa1^9ORe1+BDV|q)hwddm>-{=KO>27*uPuHKrNAg0uv2;5sF|6vc940HD}2|!S{?FrmmoqEpXxnZbBAKR=$LYczry*%NNRCGni02#q7L>K=gHq!g7`zw zVJfqkw{g|kGv(Ol_>8rH4F`ZoUb#49WElBV92kC2=V}$Yu0EB(^+n)-y@f&$gN!SbvgYAEb$MPcgZl-Mkp14-w z`|%Ei`O{YW*fhCkSv~d7W9T&jUU{58R{CU=21KzCDpor z-Og46Ge?o>5)fa?dI5v}J!c#eK5xVxPMi$a#@(l(ZLZN^Oa6Dz?T*;abw+mqOP^QIxjarTrY1W1bggE3AV6>uZFhXP?9SuLeIg1sH9 z9snR)W@0)4}++ocR+J0h`U~X*df(`RA?+HX@s)NJ8=#^ zZnpXA-7z5pn6?59u#3Zd`xn+g-9L9*$y=Te^Lq{#${l(*nSZ^dhwvi1M6QAB{dkV9 zf5>L{e4s+NpF*^x88p8b?ov0@7pw@G#ZoH>g;KolV{}Us+~Ohc$Y>*!FeGV0)tiG;JXG)Ze}->zg~tIQH(9Qj3E;*TR$AD}2-J-8bpE zlu8mJ=A$tPy`<$u;gq@UZb8WgYLRKQNGPsy`gOLLj2Xs2i;bcBcYJ1-!DD;~GFoz; zSto3i>i=8v6ck%1CGGe(j<*i{u9PMHr1Nmh%@f?HSe0V6-I|y4A19D9IVPSG8J~9c8?N5}WQm#~eakDC>a)=wjCy*->zg<+7)M z`o{JY!e6y2oN2|E|BkF-^PUfXNHF?4YCBmpQR|TpS&75&u~VMqRn&%9ioNBhpxzSg zxO(B`eJ?>)?Ap5ztKODv#xeCa3=5%r#FLYxcE%x~|NcO6#lBYCBYmEQZUlydK08`c z075v{{x=wOM%W~~kHh=6Cx6%X(iR7M__Yhk7 zC?8MVg3&MdAqv2vtv5w?VXOmOt81mj4f42`N|XJ`61ykE7xVFa}?`Ok^dT;sJJ4iMFHg zYanPuFpt4WXb{WoDIto&iVlcWN=|ks62*q(Eb=#T?$)VG6e(V6VWQM6ksn@ee$snP z?jQ>xfQ>i2VJYzFH?Xp`GlNIFqvLP2yWmrlwuYlZmr;WqWhtsqtfIhcPK?5D*zH3= z75VjA@RWiBc6z#Uj3`~=Sr1hFJ$o@Lj2^1~E3^2px*_hT!)!pOjwbdWt)nANI7jeT zSx(j$&@7%oBM2vqS;r=R!W^yB05Gomz{byf+XleeGtxLpClQV#M-CT0cN?#!kxJGX z3l>kD&}L+}WF=S#ty9EiZcc~&tC#I1yL>+f6YJYCx;}oTjUP$WLDl#Xlqx5oRCH*s zkv~S;nqQx7$y20SPgdBIG{|=y3nfMd&;@XoBfV^yoPtG^O(S$taB|`?37+b`rJ*Pt z4D+W+#v2{&jX`=egxhClC~N6tL_rYZW{c^~0K7m(m4=#5uLWM>fazZAR+HQI(SDiw z{!pF2LXitO!wW2PGz4vozy41!I`yPuiu~W>x{rPmaPf0!mhEVf+GQp>BChjudvK$x zG0wUKKl}@qD>HmqS35XY2lLFKF^@&^UaC*6h6WCG2K^?%2VKDzqcZ$>9gQ^c)jks3 zlA;(qF(@Uq0}jVx=mA@};vW1Rn!Gg}ytfnN+^FXw;OIx1<(2Y9s0y#h>4wTdux zUoyAhUKXs4H{0|r82Lwdv7`!k?pwS>d;-1uCr)bNzghQD>&Pq=?qA=iS5Gi2JzBRs z7`;>Gho7jYG-Cw8_yoFffUr7zA=*zvH^WP1m>zG^Ut>^J?TF5!dx;QtA9ojrWO&Gx zQdD^q8CfE!!2&Kv1_dWtWO$%r4-cJH`Lz%$>uA)k`$+M^Qd>LAtd!#ZxH8RHxGJkF zbdc#X)Y1=8!4fP6nzO6F<$o!PCC|qKQV(i<7h^tvjW{}G#D5^k=F7topq$bMW54|sfv+6liu(fFYc(ZD!H-=+E zGV8%KAw^oGpkXH7kgxrA!4Dfj_i6S`hL=dhj74c+8Wa_@t%t|IW`Em2K}NdU3udo> zhG}Xz72Wnhy9R|N-rc}u+^xfDffe=|M; z8C7|6XA0vRu|Y6vMq7#neeJf0i--a=XhHudPUMpdG2PLboIsyyI_!%P;N4hklF~~A zo4DTuqf2V0_XCV<2Rjm}4@Kwp$VSYx(*M;XX|(L-x$D=KyOFHsix>dPW48{<;Q30+AA$0WTUhK!Vq z)(T$?l8mO%a!k@ZbFfiN%Sy1Q&IHQ74n#%Fr?R|KTli{IGzVa2BQD#NhR1oD5LK2^`GRMQR#H+(nV5{SMjS8!)@=92m(Yjs3ks~e^2$35io7*H&>t9L zpo5N5u$5Su_(=)Q$IOXkCB(H|?K!@EdwqmT)j_xL%3P1w;B5-`Z}l>-GF|@5yODzD zsBFGWMzTk>=#n&|h1WMP12Mib@e{7JRfr>xNL>*DQxoa>C|yUo~dE zG}3yUMa-HXC=oIV$>FER3J%qE$5A7sK@D$R2^daZQIg@hJKa%`t6fnzDTwQhceZy$ z5bYlX(#z8f63ajZtJ^%|>Xy}i?us&(i-oq?p+~=b;bd%3@`6OCasjN(s!q@CdtN+^ z%>)$@|Gj`44zDo$vEsl|SVsU%N}D=Yslm^rGXg|wA?h(A+ttd%yWE83i-LsDp~!t( z(#i-99ux|BdRq=9PGaT!Kq(OjOp^Hm_JXn&{#H}8)=t))f1tNZ8sVn3GL<4a8X|s9 za-KOu0ICyLr3Xw7Xqx$BQ*j3}CZr_rrDCq2XA&QwOSn@}kYC9$g!gp{cRRzSSj3r)5*8QLkt`BdN{t{apBGS!E?* zKx%{-rp!1c8Plb%SWt)D=E8ip62NrMzNZiRGMTYWp~tPnu)F02)s-x${meSVbE`7C zzeQ@=bT^O{+PBA?-YB`n|ItuS)7qM)$d_3SGKmL$`-{?=fr`r@H4oQq+}T|?ulz6i z4m@AQdgMeMD7#X40rTJ>$b`VO-3qgHo!avqEO=oe8DZjNJM7$F^6jbOh|A(qtmQwU zM$ig^T7S0|W;1j95oAwb#`PjPrCzh#jm&MD|QNAoPu2~vOgTPdvuigj|JB}`TJ3nm> zeUitS9z7OObNvIVLod!I!%!7g)7D0|y^Ps%y`nk}E&8)A;htvI2gQeOLl~`Mmz5A7 zU(2P4u4vkm)5p@+d|s>3Xo_!fr2xkt#S)h!!$194yUU>L^>*IDTbs3Y>_vnmv}a`4 z?9?oowUhaS~EkyZH-*H+idwge_>4cMS@S6_)sUdq&4bTWoH8D zeur%q^Er6;a6bM=AxRy43IlwXMEu3gs|D`Z+dR2;UMThP_@;iNHPK<{SyTX|TSrdF ze{!hJ-4AaF)O(lNmWnyRH<&{76@JeTB+8KFUuT@M!3(6A=mXH(wr|J zC*pR+M~*P`R;n&htEi#ky&%g3f9A9t%P;@FlL8_{R&am_03`llxPt}~yA^3`kIA=t z85-(VAP2>Xrrn0K-M<7)LOGl{l~Q6PM0<);;H5{Ad7cA|^KY1m(Ll9W36j@&xZAB% z3GeG=HK63wCD+qBFKB~{Jt6ds6%K0&6E4nZpsM8Ay|jQKGS^rzF9rx^rLlSAgNbCE z8fhHAz2P`15yVpkdbN;7%S52A=m&yg>#b~>wH(%yWIt~qimJHcVEIA@oelfT zhsUtvt)YTPM+zQdqa+`US=jc@sK3o%<^?^*@hsUJ!ee)v?3}KLV`35t>YIj#{LI19 z4}Vsy*uVMWpN~qm^yN_>5yZ5W5xPscOG=g3K?4-^eu;aJuMEo9Xv^j%zT;6_viNr&H3s*!dwuV^+Q>ts;dW#G=pA8oBFo__@HAJ1Eeey?pT$6;WPT|AChPanG&ni|C)WIvM`$dmX|L|niqjgsrID;D&#{&d4eCXTBZ&quc_-$_~)nK;`5=J z(mXOptwW2ZYqO1+!G?d)uJKHkOr@AX?0jZ&VS6PPUl=jl8b}L*)^0`wA=i? zWovOJ&CMDsAWBrxrpBBvVDr%K%lAi0pFqQF?La1Meq3W5x4Ef3h~wuyT#hty2b%22R!Nu#`*EPs%2_&-1FC9^?P%l4>yctLD-O; zL)j0gAouYynHrW*{&WWEVir714<{&v6aO6!xv$T_SalyDYyW}&D{_>71$%Mz=Uxe+f0*z z@K@eo$2=X#bKe61>I=-W+)3^D5TVrmm_knC0nN`Ks27_#f4rD4%)u9&Mf!(#(NRB0 zIN}C0X^reUGFF?QEeh;*AsK3)R(Ue@RrClq8rA$6PZO)fzd{wK?5dGQ^-{#sJLOhy z8w1joyOtg*+B#U6F=fl%ve>r1WCIQZ9M&yX_itMD#Tfl%WXP;l4mYCl6ayUM1{0?{ z=xxN~DTS?|+iJN1Wy_IENXicLD1yMr$BrG(Siq)wR@ui~$=}E!#T4&HEwEwKPFw5q zH%MkuK2TOZ0OF<4VHa0F0heIjm!N!;%|7@Smb}3VtzS*IxQjRvP4qd~lbZU+6Z5n$ z1K5f)N7u{=pjk66;=na@Vcfz68z3Y6q$wM&u_cZ3$!ope>m6Ty(wx8|lVq{rjE|K2Vy$kOu^9u5dq~!49+*S|TmSYe z(r`$8-yc3_0|6$(KvYpQu~A%^40Kvzwq=JY*%k1bi3fblx!$zgSq_4n3WlDkYjuh+ zIJmWmB%ImMoU51kjg0LW2RdH~$q0ghQL?lkxWb-R{7M7jl@V&_qm1c61 z{G&QXEJ?zQ!BSdDaQC;X$*@M`cHmhpO5mf#-fIc#qqSpYtXZrI1`DgBIh2xXrhwMS ziT6$}G!4rYlI|bLNDwZEa#|G2A%6pp_`xk}n261%C(hLvqk{qIA}>i|*bF~;AxO_F zkL}t+F#3ns5DZ8^KAIa(f@>Z3Pky zH+G6pSrO3XAil&(_loGngus~jZC~WDr}#Bba0?G#b~QT!Dc0R^bOd*)Eaamp`g^cA zb$k;+V#K~L`0Fz$$tdG?A7Yi2-jQ>*_ys6Vy*!sGi0_Q`Gn=*Vn$&tl{!?3j=8S}Q z7g`os@cAp*$%T``qOR(^d6Qi(XA7JYqTaS_O6J|lkvTg^`<= zvMwBvq~VS|5a{UTEfyY|?JppJ%u`s8pP z&EsHwS{%){2xOZs`(B&h3+P)2tedH@5OPU5NYzS$vmLj|He=jC0;_N2Ryyh@I?;(6 zbV4LCWJ7!3c5*r{B;KJnk@=Xs9A;~ZnG0AiB)B1G)uML-zyJ7{e=B~O}YmBBq+Iia6=E}0C zp<)+Zq<*-;i}UAfea>7tJU#C36j zG~iwZSHul6&w1US}{+3PwdqvwkOeI6}|!C z)J5M`Wd6!EHSv51lBn9Cxg5++*WSJ)8V3%SVn}jIn^wo2>!ujxno6KVc!d+<&crG( zMJKu!Mc&TsM{Yb<*~K4_1b^YyAjV}GJhaUAu~v{G+LFY`itrQSWQ#6}Itw&$!q^-s z-j7lv1t>FZ7Nz*TXHn&IOv4@QSWgZ<57bj4imRkS_!YOCi9=Hlg)vdT;wVpEY+i<|6rR2|xqE9tjL7)vSEb^lv?&(8%9njq zsZb@H@-K&^E`jB_(d071+N()TC&d{R`t2K$$*Uq677O75BgHtPxU3}DiqT<+{jXe! z0!SzV`B9)rBCB*wkzma@D9hS`D zD8KZ3oajqw1D5Mo9;b$dRa993Y!|_fpd|N3ffqx{b_?s7;eM<*7MWI>^%``$B=F0EkT-SNVQ zR;|>LH0$pMv!pNa)g4g|Cd%2UrlS13i7ZM4t%x4&4+-jU-p<8tK@~8=ME}VvBIJ1g zp06HkGyi#lET|F#(5%Wb(_c{vFf>*2MA?vj>?%qxDt^W0=Mb%$YX03wPBR}e#Fv#r z_)j~G*hi~-@kffv%8IV)1dXiVWLs%=85 zpMU+1dp%?+db!HD_OEr@80XhNYDn3gw$oCO42`U`gS8d=!%Q2}Kw=3{FOZUfge0Cv48S#XX{-rWJ_Trn~YOW_Az((63`J&M{o%QM#HHPvvBc7wdZ)>RvA2wf!Niy?FSDA0g zS*Xn&w3N-xaMITWEHC%zhTNaqdgcY%SNLAq6mA<-(ExpyQ8PJqT4-P0?qJK~vfwqC zW>yYth_8Ep(7()ZIiA2K%m2LakSgk=xV3no01ZzUrPrCOV3@bSgG$sfgOf2Cw@6{C z>cdCb$qU`qZ-3tJRydZar9S4p*_(4uK6V(PT$N%W=Ny%&m*Y?MQW3&9%~j=7bBs%H zg2ymp#4R)Bf;&1!ml?Q4ncpy&x4gBY4dkmP@jLY;Ko|{@5&XwG*TjaME+Uvn=m9(`^LVFVAwk5@HRx~%v?|aB{=ZNQ@ z^wEv`4wPQ9{cXp;?zF;_ypGM|lAQ-$>A7gSq;hTLC?M^cc2@t1sVwVSutT5$EEn;v zzO-wB!D*NHjS9s11~noD808l}Umt5AKJC;i%i=;&bJ)VbyGF%odlcC=On2?_atjaZ zKFz)DCed7jVKNY8NDfp2duaLpRNIOIaAkUM4-a=2myjA6ZW8-wT5YznJxg+-<>t*i z8Sks<9ppLLc?y_vn$wuqQ=9QNdcqkle;62{RkYT$wsUe2sGxO*8m2kKj_3ZM#=oEN zF({!jfMRmMb=P?M-^34GPQ%gRc-2CLC6&ab@0?@0(()*7|>c zQ@-{0e*53-J@d>n=bX87@0~MeN+1;BarJ&h3_hwLneQMGMph(QIYmJa*(l*X{;-J7 zHv&(?m*tJIgPGM_wjM%rqqRYM*!b}UGR_v0P4x}Pi8EDE{yGcIpBWc;k%6+wm~l|o zK@B94I0|CX56m$Ud)osL6@(~C06ec=D$9a1%bz7Dcs01)(gZp_!J8^2cfz1me z>E%hnwc}~#91HFMH*ZlYTEkzZIqJ6x;?&8}yt~R#mkD{D@B?c?_}t^s_O;di@qHyZ z`CG-OQ_jOLzNv+1jf*gp*l>3SZDR2%G0XZD#O^>38LN&+v~XxC`?MfcQs1IS0fY{H zy6h3+%&yxAfJeFTd{Q zKtxGEoa;)#jK=vepYEfL9D^)Y?#sRw?jnW{+~&zHmsMIgvL61_+DpJj_Dw~zF3Bx0}nf=&GG>L&eI zp0z%rkZ7^aDojF*lXd0AwfCPNwQc;=nGeE6%P{q16l1|>H*=_2!%mz%n8L5`)=e|R zp&`cEw-RLAwWj2Kzp7W{%!7NX%1H_rk|kf?Z&#=KOvbt1^_$YQDs^5caP8ESC5rih zCUTbvW5)R%Xkg2v`z~}#jl0wo3F;~{8tCT5tWxh!6$LlQvm2$(wC$3~Wrg-B+mgGk zu&nNnYTK z2h$CBrOgTXWhg7-`a3B8MG(V}zFY$y5l)*eNpkd`G_qncNW?`%K7W{0lpbp#YwEzM zZc2r72L(f)*9_vPV_Hb66qL{m$&mbfr@~a3(j!@`F2u+kONBY&gSRv>h$C2<8jr}| zUsE?qd0kj7NT#pEUn>Bm*I4HTrOY`S_?y%jEYnzWwv_`aiERHMC&hLPNh68JVYvgf zh_(9muUN}(Rn+p*wh0Ufw(?KFd>wqcsLcwbI#UJ4YdMN%jwbIQD@}v-xS$7*BSmLf zymPWrY})!*z1~o-N5Koa9BPI|srftmWFM^${QMj=2F5}$)Hwd=9p}17fvHq|EID0+ zO55X8Q38bt5MSkTVNvz`_hatJZKmgLGG{_OpL*|BXm)Tw#` z$qFbleL3z7E=__auun}lTcLchMJ84#{fAxwAIz}bMdZHSY&&C|eni6I5U$4o?fBBE zX9#s#J7KckN);CLa{eCY(#^9mpoKm)XpU=lD$^z2Gv=;P*%U^6SS++dQL^o-N+Cr~n99$?zH!Hda~@PwjgC z2*E~8nSF57eq38exkcutE@1G&wM`?7zH*v<>su@clTwk!IMuaR%kk7cNW{YB0rjIcfMRIu51d%2ac43r_)N7 znd}3&u(yUbiIJVcY@@NS$|4;B*z=cjGN`2&D;v0Z@_}C|_7Y`R?2M>!yv<*r z2@(FdVtrq?d=O;s^VO_oUza#CXv!A^Sa}5N_2oQJQwxnyxs|zaH*Cxde1D-%?c5a% zER`)yT|tNK#V=~*HxU`t$xjn>bv(_i0@}KKX8%=DUUzi29u~yjN`8Z&k20072I8Rh zND(=IuiC3VADp$O=l;!AXuo-G{&C~OL&nPFS55Y;m5szVZ+7pn!Lzvi!84 zirgs=+Y5YNdSNSX9$jih@|I-VvRDm*u@d#$e8I#2>AF0*(ga zjck3^rabXFJBqtgVvhxM@GdtHrj?U^t*$xe%&7WJ)X_|(jpi+X886~_sDN1m>&mVq zYN{Jfu+3h;L{ji}O}E3+?YGm44*kEJgMC!aOR z?FXQ|iY{J7B4ufc9cfZE(XTYX=H9iU{lqECYTU2CPDsmN?ljBv?hgjbE_y1c*s{hy zE4FaKSCDb$=pQpRI;^~?=+-_|n6t+Yw$}32-&dRgda{titCa-dp8rD-)1;!dwvd){ z7A6dw$eUip^Oz$S7O?OnsL(;Zs~~JBv(mU8*FZ^_u((}*ibP_bEbPsW+2du%96r)PDj|#NO;&V zioSwb;tq()N{_`6W03CRu;EI*gGgl20ZfDX&POF?dfr^htRQz^wX1&b&K~2TeLM3s zhM`M?w-WsAfDa+WZ9*D>hXA*+>qfotxtOVukf8lk6G+OJNqFp!I%6iuUVO0P##^w@ zCBbr^F>zJ!xp~`=lW-N(rDo|7nmni3@+I=4jpMW_L^I7wm5f)9znUib4;{_qGo2b( zE1cJyVt{w?6nsm_+8uPXb8+OM7>owrD)&tZs@Z#y_~kn0xCxZTZRGIX2R(f%(Z-BS zR7(OuOgISa2?9!#!YGyP6}C5WZ;b?lHL4bFTCf{jW{c0-=?V^FX`fg4ImYjbdmWbO zmXZJ6Ey#HVo=Oy1(F0o}4GEr$kYqVS9$XA)cvkxFowWwk^<1-e4ns8p;+Vn<-Zu(` z_ZBwG5X-UqdhK3^S)T8Gs}vohiV;3F9}5Gi5E4X&$zJq~7@&riPvQ^qd9Q`2p{DVh z6|EGJIVbOw*+L~Vdz3d8gLvQur@tsDX-VR+n2U9}@vCsIzm6l9HU#!2mj3Mj3_PR5 zo{Wa&AxN2(4o!!m*5SUnm7dlTQmm<3BUfSx+1Z2JbwlWM)m7XE#ZAE zQQ`Br`r_W(P{Ayt5b7qUd|!H%)xeP?O^B;shni@f?y)A#m91sP+xE!r`!_jUtv>B0 z^jl$?p(`c(AU$wUBjIG!cZgJq8gnA8Ns`~1?}YATQ>&Ea4QHo!d*gH%87+QS69^!< z873*R- z&9Y(?uKfVlWj8{UNi>0Sa9d1(S?&C0JX-tq!q1xD2qkirq8LC)ilyAy_&^zY-cD z2?V5|o<($g!tZK8v>GnJT!?4suZI`9K)xmIn@+*O*S#7fJkTX2TdRPduijGP^0F>F z9y2SN0e&FH$2K1(4})K}#{jwxABZVZCPwWQ6LRDGUgl|Y5J^u)N@)^JCJjIk#Iqiv ziHhl?uHHLFE#RiU2l_kWzH{l-MSJa8Rbih#C~#0@!=e@IpD`y6UfK~@?>*@P(j#Te zz&O&X&L1lYyLeRc=xM7kcO-SjKpt7533_6`mw1e`4+WlpyR5^&2ueEoL~Kg8!jMr#svW)L-2e#2Z>393}Hca-V5 zC|pA%hf(3JGK{S;js!?AJil1cn+kH?G;7^4(s_fY$f>6S&ddQ*gEK(e$eQpvgu@+O zOE4g$7C!_{iHr6))f0^DFAFS&nHQ!J0vQu+n5#fk>Kw6%hZ-o-{8H#*Wn_^8EHjQE zcn-kyiW4-cJUe$!S#$NRhntCo9$B#q#EId2Wi_LkL!c9wc05A@<@N>H{VqThtxL}tUYOayA6=Nc+YwQ;jrie2bJ&v10B>S1nM+-i2_(*5!Hs&cNj8ICQhA|yMF&Pk40DsRs^g1A2xyb- zt@SqfmPw8<^~WRNffg;uLQ-7=Ce1q=7GYTe-O%DQvmYWB;G#}e5jy|zf#MN8Qa&MX z!jick$g7<}h2-<&3YtK!v0ym}ER~+Uw~{o)AK#Jy+Cn{<^BACyn+0Y~5TGfTDtMZ^H?rSkahwZaWoR42wf9d_dR@6AO7cW$-}Avym3b;z=|G z47SFA3w*NiVI)>?_Lvi8Z;z;PmQ_DdkO~hi5ZY~+q}a<-Tm(HY1-M|D;J_^7^^0L~ zc@aODKPx3=~Wg<~>@hjl0`VsWl>DVfX&x173uT0)$)1oMlhSJwH8|R=R2UQB2qyO_htnND% zS7nX?jp|G62N>~5@grn^B0DnZeNcCo{XYRh9)H9O$e-P7wfu&%`Bv9{=0)WwFabI)`!VANi2P5 z>~FdihhsS;!pr@u%8L=ZnEm?$;$2+atgLPqm^k>oj0wjEIeJo7G8#|A?vMCTfb%bo z%H8pzWhtm{E^o1vtVlni#qUlDO=MvsD#`{AVH}o^T(Mh^*W%VzuEeaTV}TgZL>Ih=hwgta)V?kdGMly4JnbrEYjhB?d#D}6m_MJ_Lgw*38z7}E|8wh-Fsp^5Ez5{vdb_YP>k znLmhD=rY2;WpRAb;Kf_=HPBZ3NbJ(~bvUXt{ovqtf=%SG6Be!(hgSC1Hc`pqXC`t2 z?1se#FVVxLAY1jL!!41o%IKk?XPU{qYR;x_(94nSH+CR{$aW#hz_$AB?iZROkRTecX>HsvqY!Ahf*hjNQg0sg69*Dv_~_AYkF@KD7<6rEh4 zR2?3?*y$0RCb+t9MyKCs{{2|Dy=*w(t=?J&s8t& zLZlDID_i#h!j)fF%Tg0u@VD+0t!##(?g95OsUK}LS3BunzY}F#P-o_L5=vegr7nd_ zGAc5-5{KZaUbgS@e$oxknzA`cosV>y6LQGNy%VeqcBunP1kZbHuFkI3n-SxuS*$_U z^|cN@CJvx(GX*wvNd8jo>5tW<6F=fc7kQkzO6w8d0M;58Z=Z_YcgdAE0PH`7UwxM` z-X*hOh5yRDOwiNz=0+2dK`3+tytv_m|jej%I>}>dPeuR&ur<_`A9d2O>uxr_2WhRx^zVSsBVFCC0)D>iN#}REup1{xU?9X_G)I&nV*W^F93H zps9E{0@vi)9!We$qLT|OA|2ih4(*6fHfKEa$5YcG4nNpY7G|7iPsWK$!8P5KO`K^| zS+yq2N3hH+ObO0^-J%wNg;(<80mugCHxwB9#n?}!lf!nW!-(`Tc(SXz|NA4GL084H zCu({Q1!u`vK|w`wA}X?$AM}rBMV$kQgl=Di03QBvVV*8Zaf-N(51z_AS6E2@vtJ$bmbdK3V}qvhM|5U_maux;!Xjh$qDZcsB%^bD>3kd1@gR4zjH z)2~{klJ+N(o-yQ-@%)_6E7t`$TPVfSr3L(OfL4++k~ZNBp3Bw41?qWtFYv>>i}336 ztX?fX5%`J;1AElT-1M};X`+E+3==a6-l$0zNBQtGLpSJhq<nyzoOHg+4N9xz1}`@5-@^zz$cCQg&urk4yr+k;<3h1PAc zl7lqthCrYYe+-#XM*DjXn9t6ybD-+k6{3T=ipmH_GabvoM3}?=;|0eshOSqSfqKij zxWi|8a{orF>bJV!)^nV=4x6m3*)GA0-0cHMiqzb6+NOx+)G!n2s8M+=cPk6M&m6?` zA7Y_3Qwz;eqW)7!0qf7d21ThmB2Rku2ZX0zj6HDKkOgGKta3}(hUkL*KI^SZCVkys z*%sYpPZ{g;@JV%+r_3dKh*?wWy3awh{`A$8745PWhU*cx?ME2>k8T6m9-x@qG8cOz z@HLrGXiT$ClV;v7>GxcZ5izP4n+!9N1&WRukum3_*|WjXG`r@4V$ROBkKj=Kt{8WK z?F`4+7>IOA_w=G`;rS}~xfhIR)Mw93-y)OqJM@29j0v z@|d_t^61{@hiw;~FXnyktie$OR(S1J*#@=^2Q3x z58r#3?m?(IY}CoUa=D=+AeS`OS%r`V`+x<}nPpKP-oTLB5LC2GyHDGed5N)|aI8$P z;ZWSp%sJ?I<>&!>g`?B9NK>8FSWTPG^Tl8vn)sZJ4GkNb4ng|5`J`V7Jeli?MtDDIlF1@+OW2r)H&*z zpZeWwT(;{CfTEofSYp4mp@|CG(keRC846XwPE+=0u(qhhoD}OpuG_!Z8v_!2KfORL z_SW?Qx*6IjOHEbaCZszut=>b;GjSSkFl`%Jcxe(&F)KPjg5*yzdfWh zltUs~h-VBk?|Qtz12O*&ebUeRr7)R^VBSz~{#)Gk>s#}GHyTLC-jwh`&9IcMJJ0#x z=2GhO+wSeW&g-6odHf8d=hvXKU`*D{w05HqzMHMR{a2G!yXb+B&SUT520l;3k1XgI zxN@cX%v*7HQ9Fl6uJUNxHQZTujkBgQU{-DKd1d#WkvCv^`orx;nNat3v*0uIW!v%Z zpVXM?oT0gu?2WV4GnZfNe*`|@;tBkb#w#CBq^hihC)G@-wo9~dsK>^(=;tg8voLC4 zb5L$&!<9MIH%9L0Smd+4?{LBn{hy?SQWM;a}z<2^&N9E8JJO`P_sV5$oD1g)^Ld+XP+&r>x

qt$^R(uY(;?YKlbJufi<2 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 B*Kz;= diff --git a/Documentation/res/op_addseriecomponent.png b/Documentation/res/op_addseriecomponent.png index 4976c79e64a800e1854d309ddbcaf49b7319265e..ecc517fb1e4a5cdbf0096e2f02f925cd7e897aae 100644 GIT binary patch literal 64321 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 vV4MN=e_lu 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 NLp@X7a&1WX{{fxSK)nC} diff --git a/Documentation/res/op_textmeshpro.png b/Documentation/res/op_textmeshpro.png index 5d498e9aacc04e5e3dd69d52ea3cd31898d486bd..8ea4172e7b7ce4b1065488095e319ed0d87dd3dc 100644 GIT binary patch literal 65659 zcmV(}K+wO5P)Br3u)OXC@EA`S5Z@0Q&n42R$F6aWgZ?L zh=_?vnp5<>lp0Q&m`8 zUs+pWS6g3JS6*6PVRw0dTwh~cU1CsDRC9HCa&vZab9r}odYhY^USVZsXlqnhUZSF- zU}R=tVrX4oWpj6W8yg#;qo=>X!ru~o}X!HYr{`VUSVd$#Ky+P$7pMC z4Gj&0g^6HgXq}&OQ&U;O!o%nw9Sv&Q(bChkwzpbdV|saiXlZV2 zZF56JMQ(3)i;RzDYHns`Y|YNkhKP)JcYM3NzGGx+frEz$5+S&`y0WsfVPgS7CTiT5(j8uC>Ot&-9`bhkY9a2471jeg_#8mr}+K7jiDpzdt13|GR71ESMk)#LJUHMP+bubPgN1( z*hWoLnxCMC(;WmT+#b2BM~-CZMu|5P_P23Q>bq+bB^9 z1`46tPf-?forJQGYC`N)<@>HxJJ^R3RsTG3_1cO$yYK^H%_0}igo1)5Xh80$eJu7~ z^mS+evM}rV8M>GH$KM%3;vuI#jmlPGQr3cuqpE@wLkWmAwzCWWoLsXug^Q3zgf?1J z5OWd2S|CJtLd1DQOob4H3YDu>A`3#KmGd`1#h(pG_B$x=K~goKJcd>+O@w*a2fN-q z?1$c!bOeVSK|of!Ez}!A6}-36!c7Dk*%3iRsW?SczGo^4e~y|_B-dDgGeY_nVvVcl z(_W-5)HQMqnij-}I3kjkMb{3Zk+Dm5Q$=o`X-fzi!C8Xl6^?~XBq86 z082mE3V#RXsBjMKSG!a<;wr+T4tI#$-3A-@?yQEd)+yE@u^PX(5x#LC&rCz==g8ZH zX4bsSO`cM}?74m9U_imc&=rAZbZ6t45aeK?Ab~nU%?33Q6{2PYHAHlfTJEB4b4#JE zg5J|t1h1L#&!@C^C#4>G*j;o4%UXT&`CK{1u6lH|JMPMsCI0skHHMDP& zM*g`$gW+l=cg?o<98LmZYMjUdPGua&+C{xVXl9QsZq<}K*EBd+kyHcX)&*4dA!^8a zGlFW7(UAR+lnufFvb+eDb(c^XLvXo_ATJ3)G7q>c{|*(Q{aqG`G*_zoMb33V%dgRb zvQeJJRNafRke*kFY!Iy=4aCC%Jn)>xV>B`s6KU528AHn&*(PTQ1rDq6_?~fxbd3Re zTi$!Ngdeal43=aX^H^e^5ClRDUCl1CfjSZW6v{#%mMB9|lE;u4_roqBUnit49oNK| z7y}`)gwxtEiddG9dmdXP&Ac?=<;qN_m))r`}giS7zJM23!PA#R?QdxWkv-+UOc zVT&-u49M0lM+{VyQE`Ecip*y^cO#OEL{-Irc5f>wCQne7u}X+SD=oPQZ3emml7j3) zqSIP(Wj&A3uPg+{A5_PYHb?)Y-?>Bl!$<6KDRbzOqCk9X2^tPc@xn%$Lcngge|jG& zPzN*vat-lN!k0PjoqbTRRRmP~Wz=Qwm@ketoVJL~5A_>xF-5Mfpk*PVRqA3MHrgZq z6Bv{ja(MgpArZxNxN3X6 zN#vXE?*6;Un;>y@i_?@{^)Rk<_z@!Qc#&w+;1(*X$2&yKs9 zBcEE4D&paQ(tNsjaGZS{9~`_q^wRCK2iFcioJ|+*M3dN+^MiEuX+V;J`b3n4a$(=` zt%C==H@x%Y;4KyzT=!g0Uz*Sbzw+kMxCl|btTU2^MuaYzM%2VEA_DDjbsi8ez+J>a zfHf)XUw5CRbn()SGm~`lNtgepr&lkgcu}csc9+4x00#IO*TCva$O*6RZ(4V z){tIF^5`v4%n(GiULttME;Oi2WUW9DQ3ys=|Act=CxjUd1p|nPGOkhDw&xq?X0w~P z6~*zhG>Sb+RuyU=q5E#Kh^oFu(}##)oo%<-@BrO+(S6mWE87SQ8-hWA0P|Im0D&Y_ z%}D*9b5FQ&6SY!L7<_&IzRU!EoUiK%H$>;#q?u2@rRY!p9a#48za{4bNl+{{hjh2a zkf==7o+IkFfMPeMUaR{1@Q$cAZw1s47sr*J!M&ctzW9 z)R#~R4=dSRj}K}#5wJAkXalw$R4Qz?SgC9!YgST})r8c7WXl$n3S~?Fi6$8j{HK^E z0gr+t&l8Mf*z|+s7H2%0g)*0>zTfP0Fex4lN(Yia<%^bgIQl}ud6s8QpQSJjy&%hz z5c5IuKvA9=7_H+}uXya^;1Ae~9@{tVJ~cpIZQfuaA+?_y)W0z(wk4yiRyDb7wKSZ-|g%F6u*|I7bhM3 zzKo*gnRzD-9KH@^hNL1=>tOA>4!LEm#3m?Ws9sSdKkej+*s@<=bkD*k9X(w$|g-#mHH2(KQWgLDxK}h_oYzV0G{N+i+%tl?qlwGMi@oO| zk(!*y1h8p-cjz7^0=D(%^^XbOs%|M;!gew`lr$7-npt6zEL+E5g zIoA9|bO0t93LqiHdPI9`jmEz{qbOu5ily`ieWy~$5}-qh;z;HWzEd{nSrBc@TqJz> zB9&E=CJQ9lJu#A)l}bm+x>ii6WFxMH{R642lA`FCO+S?iStK3H1o$m{>jO_uwTf|f z{H$20;dYGs`4EJGM*2H;FNbH#OZ^7BbfaYs{-KxX5))Bzo8CJRwNdY9Uj+Da=;aaxTDI zN%}M*u@xli->g(FN`-P-rE*a!Tj@A7lWdBjwPr+%fH6?>@twbyXzk+2UU36bvxw31 z!b^$-#fukqs1vFus6X6QfOXpo+KE>jF<=XdGF%|5{HIgeh*wnIr>VLueOd8#uOawfB%!|`F(hgVsFkufOY+1@& z>UfDu4Mlr4rphK-LmwKls&lOcAA<~Qohq{R&s`*MQg zkV7uEUxv$wx{RXB0AfljXrS2d4&i1oYaZqaT>kN{FTH27Hf}ux2C<)9p|xVY;@OJ> z%Uw#Hv_XG*kboK%gl9AWrP2*rc~5Q}I(v5#1LkIhR(6}vhEg+OE9f_NkNlb_31A7i zPo|ku3Lyl%WP5TkJC+@Vt!4ZCq2v@Kqig)s;B2?_jAS{qUQfK85>;@Iwut^nl983( z_7y`{AahCHe0JK+$eFE06)X({Mxsu3+2*jAV{Q z@mp!RAXFqyPA(MK3!|8x&<0?Zxf|4XI(5oH)8d}417zT{((%q4`><>}k}FPU#W^YEIcYor4OZYQ7T!9&x?}rjs=O{be=;rb3?6K{IKbZR}`sE z*QsMrbpDCr!l2ktuP6o20K7SZqN6D8i59oUI{pzw>lHOiwCx=1LBr%8F7=JDM?${_ z^$$0?ho*wAvea(3t5rr(?!{pg+ZR%(EawQ&RY6grujGpC0MQ|z_W^5Ti5C}1wg-Q& zaeyuW;yI-)Rd#}p{|y~BwDbRgVo6XebtuZrULm8Hz$>z3yrTa-k{zlfPUGU?7djk! z(l%Gq(~?SDLCYtr6*QMTw`!?py`qqtp8IuU=7qU|P1Adl<|!@8WTErGATRV=i1cZCsk0 z7%_B*HAT?`=&p-G1=8{upl?{x-4=lXjAC#hxnhYsVmqli7WihP1{#g%v%_Wq6tgGl6+4Dav+>8dVk$5M zfv?RR%@y&_K(6?96UA=+*;{aoWV?+YOA5|=NgbcAQl<>_wo*|^)@eMpKmR7_?GVU|WT9j>6qIBOnIJaPrS39)*6h6-9ygvKbs!;UgOnXVR| zqNo8{N*=o}Xj|NxCTc3kokZDYY0CkW#T0jWgRebDtVT~;H~z#cE?xH#&Tn{k4A8RI z2NYd?iRGHRLIvI7l`*05@O_Vrk?W*(ym0iIS*L+Egl#CZP>dBJsY*;4ecwp%Oo% z)UN$9UN}$R%=h=+fQidH4Cai@oo}$8G-ohv_f2syZ&;YlJU`ZWVqh@D?bu4IC|sV& zy5677-nkq!s8}wUj)4blNeahA_wj1HY_PYA4D#>#zOsMYhxnfl`3^M>{w!?>bc2xR zLECJaBTn^xdHt+Js4tbcV*Y%yncX!XK*GQRZC+2;S7VSiv)C2oFE;DXU^Hmw?G@8? zVNT{}>&1cj*!X3E?#Jfox=%-3TT>b0*0Suj*uEGZ3$6!0GJbMhe!Uo+e<>Iq6e`m3 z5Gqa(2*0^F{}d|~g=rE38l4Y%HwgG#3@%2pK$C|2t2}6LG*}4{GyR+v28KLxRxu(K zqn}jFu5xp7bv^ySxMGCR_`T2T^~>By-9$RZn|h0LX%ItD2VLtJ{lYO)QP|t4ktC6YGSV$Z-F7bqPr_9l-ef6y(_lmOT9OAdRlbgeNYAd&; zh~xZ$k*$E1GguBUT;nrLAri(N92uQw!ZQIM(h1v8QUfIwq@1jvh!BT^l!}(06f3ig zRX-&w`YUGo#2VU-dDO9L6{orLpr-}Cv*>XCn?=moGWY!g@^NH5E)hVXwLV3fUZAA$2s^-N zjmSP1=+emfcou_<(~fy~CMNXlN-i&t`IP=4z1-x?;B{1#)B0Dh=?^CpsnY z!ZC(@nO(+nn;`MGp5j)%IO1H@iy$MkIaP}ylL|@{ihRgXEYVrKMMxK0;t_#5h!cE> zhYBLL4ebh*blxuCWhyz6p^7A|Mgl4>r93CAASpiaAE;0Vr8xCMCFxPRSE!^J5GrX8 zr23{-sHD}NbbEC|CG0!E69E4ZDrx>jp^_9OI6AA5ArP@&s6-)K1M#Nbks{+Q4HHmt zX&ZR^o>0lotgujtbGHG7g-W775GslOpHK;@_z#3i>|UXgX01?3>vuvWtvaESCLuZe zbD670)VmaS(E6XP$ha5_Lc7pg$KXQQw3IKdBNHDoFxDCAaUE zA{A>O8<<6+DP%+42N)_;;ucU`X|w6BPzeAPDp4pPRMJwR65R8JN}{k($u<<-PN;-b z3a~p2ML`V{j0z$ZF_dIVZ;!>EBjZVq=%|Ghy`@k|5*8{^#>&w_BqAWc974rIY*?s- zCx!YS^3w{k3WbD9Y>iNfJ8eUj&8Pc>N}iCK0ihB?t&mU&E@>ufgi4y8P)TE-P)W2$ zs3f|*P>Djj?SQ=Ar(tsRotrbrX&45g=$2XJ0G4vj93+>59UOv#V1JGD_=*O%Nddt~ zP2Idq7uA=WDDiuJdk1mK8QE%GELUdXs)a~ouU%%2MYZGQORnelJ#drCFJQgQAwN?mDH$_ltiNnhskZCk_yH5iAvhP7nQ7O zBhez~eISGph)UK{RHDsGrqD$tMI8kZQ6A)`L}C;rTKwFQDbyV%bm@4IE0}~-AQP2P zbb%VZg{TB1cvV!=u82yObLbJG5~YsX=AshGAcVGEH6pxkDJtnaMJ3#AndQ(b7IuX( z+uaT*D#S&KJ4{qZhe>{ki%JTINhK;_-IWRyLJh=&UM7lg#B!}0ruN0MR zg{Z_tO^8aywiK1*-|}ECD#2mWUwbd}D>jWOM?72O0d3lXDpAQC;V|JC4>9@5mJuIB zB?z4kHWCUHmqjHY7nOkKq7t8>u8B(K$VDZfT2!Lb!W5M#c|zN+VIS{f=%NzEPv}cg z$&RR`zqzQyiXzc(;(K?Ds(Wcd)hKqe>(>8Jz)8!<94@x-jwmBK(YH!|B)L_8k|S2Be~pDOc= z%&AUfHjy~#M0rCEs!0U|C!$L1hgxMf;u&F1qCrOF5~R~(2msd@9vx5p7Rc0nDF}uoDSvpcj{4 z#O|uf!vLpct(x5mn!^yimQr4y> zagcW~jp8;+xLRDUz6%o|<_$aHM}(gcvw(|}dAAV*>g3mx+V2Hbkdu$n<59bzGQYV0 z`pxq<{R?Jr#V%8m-MI9UQ5B^T@Dg6CvH!u zn2l<`Oy&s6=phobk$AKC=o5B3vmO&uJx%YSng4ZK|2^8fexljm_uboWzw;)t>id4R z>X#SKY_3F2=}>m;{h{c%Ro_I#PX|&}mf}nyV zU{|skX;M6)6N`}(@tjD4AX%Z`Mj5I(=^+ASAURBKPHdaSnPtE1`<%DVlXJP>=J)#P z$w`)C7GXA?ZcN|x{c^dy=BpwQ^<(OrGI8{B$s@l`NtVO|v5_UA_;vBkM-f|Pc!HQp z(IC;02&f=eDwJdcq0&#tjv!NZf_aZeV);hg9%Cfck)Xdyn_Fj=OE1H&_sMIu7<20F zX)DG3%=K*A-md(0^2Fcp-ByHm`z%EN8~4;Ro14&F1r^L{h$0ipkJj-+c#BZ$7BQ2W zG(t5_VsKJ1|9OfV7AND+dc#KA|5s?Q`!}*`r5I(HQU9)J-@em( z&lq`T%nS=cqr5J;5PBNrdmoTruh=L^1dt>EmBFZBC5Cv)K;l1Nqe_D~$&N*^fuu~Y zC9F=I#1p}z2*QkbqzXHVByWf$;V8v}#ZZlHVeGrpn3F8U)zs@(ePr26@!;SWTk2@|X+lU0}uWklko6I7}U#NQ*C69%FmkOskK zWK^8YiMI%cNOmCJq9+IEFSk(zEs77I%5;K&#<7G(N;XQMN%56xv6@zEWZjbR2*hms$v?{P zIa6rsmc>=q)w9sf%xCU&viFm7@43@e31ee5qd)iDbNqX_f29!(B{ZfS1dq%VQLooa zS<$a3NC;G*P*2eMFc&FQ69Z8Js{<*7paC>wq;snp!meM%8wj;RN2;Wd0u<6Q!8<@P zp@O!Al_R0Qp0VaGa3xx6ss4=Jw+A>l>%|U;?hkx_c;101nI}1XNpd$OT$kP-N>$wzS2@e-<8cam|eCyJyJk}z|p#-3uNFE+M zdtn3u1V{n`t#+uSkOrhv5yE8-5YHi1ln+3fiW5SR4xWy$1_^03q!aQJQuR8dHAl5p z{-e+oqr=+>0ny@7D{}2YryM`A|NAlWD%=D$&qG{c;P9~bNHK&MC?wXZfHcc z{_-3k6t+M;%@8(fXyPv+?A0Nu=f4qlvEn;0F@UW2`6-&U^O6mXNEnFu35d$$F-)T4 z!6%-3%tkPDX>+a5MsO1*@-}3}8(KjS?8?u-``~9!y?HwgaiQ;DA9!C0F+$(U=vhjd zjG(kuMYtTc4$wFwTu`gFBBU}xri`i05T)o)j9XPdOKC*vpFrcy5Dp+K2H+x@Sj&v` zr+Lh5W=_`arsDkxd#k&zf0o~8+fS~y$5VW8u9TbT`DY^4&+%^R;DUqk>vLy6csFuz zLQTbqx>pasUTMU^>5#)!ONoI%;Aa}35hNb3!tfjmJ1~Ne^UCl?h4i`%B^hl=l1Uth z$`<=c83KrM6-o*5%*W{m+N7KE3*W2od-*1*gcF57#6>Gr;UTml#1|y{LZ_a21h3iw z(il}+QBqb9kza)-ezhJ6MhcKW#J3TuBL6>xl+bGr-v$*CY-4TGctnh5drNh@?d5z| zH+M;U*)d6~R?22?ud%q%Pe(U;hdh@yEOCANpOf`up2AV?I%&%nZ%v1Ld$Z+%nR*qE zx^G5TE_^IuqlnQcL_|1$xpC!Lsz@LRkJ9wCODFxPyQz-R$-37hX|sduQ=#8xn`99} ziOGjTTsP~4(25r4W*m|oC-N(bqRrhT?UFk*&C{u8Deu5vpmAg&MyomZA}#9q1uh08 zfOJN1f)uH5r4tI(Aq~m00fnk4^pBy}T(>y`2QnV2$S)j!=*^LhLPJ*UGR-;K7+mYk z#C<(8twyg^TuX<;<@uhfioPR7z|r~4a8ng8YBkquI@0N+*_&Ucqhp2MuzRiG2wNLf z7p2-Q``W(YItoGovh-mserCv6+^=ui>gH|Y?GB!cvW?Jc!5O|<$b7l z&y?^J!lYgX($R{Lz?*`D+)7gwWRX&vbn`S$>sY@@k}|qZDr$_lm5f%fuG&hUV)QCh zlnLpLsMZR=M!J49QjbI$Id^HKUkW8$KXtN-zHSc>(%mT!x!BV;dUwPZnVInUA|qrA zQr-++6Hu|iCDYvO_Vt-&SH$O=&4lwa_Tg~$q|etC-k#_g8=a|2)e|2bi||%rq{lZq z+Sijl3~s11gsL=>2p$e8K0-CBx-zZq*fbPh5Q!kqm1Qg@_bnBCEJ` zXUP5%Ob9CJQ#4rH&!Ksp*GBJ9R-A%#e*7*C?Y=K!=QbywUoV@(uRpKRQ4^wU&GmV^mbYkC8 z@ql%`WQD`V2KnhZpATcZgzZ!&JWw{n3*AN-VRrc@#uiO%6yv_;!79E>@7=rMl5b)s zY|Yxo=Z773Bgtitj6WOCzIxoD?%!|pkkI)G?yDYB~lI-HjQix z=`fAanh;Kpj6{4cXqq2hD_h}K$eGKBhxZFfv+Qv}#jKUt%Xzkj4P&je>>A6PnbKN5 zT%M_RGk5->0C>xV3$uhgrEt+TvL7y1QBPt7uL#L?bt8&j_K<_>6^hQPiewScExR_&?kOOn(}d4y(N zFRXm;7f?}ZdpTpE!FNFg_C1g;ybKqG|4!^k_nGINW~qq z;zGo;+0(9w+kmMJ(e5yCS`Tfun)@^LsLQmrxjsid#qxA26q!Lo7;`}YO2VKviyUvXNhDYM=+>= zdF#?Cs7PNm^p9)wf;~;+FDYnK*wJ-Vu~2dAFW3;zOsq-^?MEy(!}N zNiVNQ2G7B#B@HTWssc3(re2uvYZ_EMQF!{6* z-Eqf0R#|9pK+|HvKSdc*k3kaLoUSrbY@`AC8Tn;}(KwKPxkx<*X^fU0 z{wb&j;o^BWRD_Isd8p{NhCKMoZBH9@DkhU-u1MNA=W2|J1=Dm#cykjo#(K147RjIM z-R7*zH`ABG_K4d!?;0F7cRhT@yu(3BZNtbXkm2HekxQ%C-M(g7edJ?HBfhFC+CFmG z%z?_8$7Vz@7=((C$x|VLDL*~(BO_79Do|6WWf~w2h~|nNgktcEvm#VHF^^X2UDC_% zO<{bk0LfVAsmME$^rJ?tXn>o7TTt<#$F!K*ElI^EwO5{a1Zgjbv)+^+gNi3*AnhKM zEkeTu$AzF)vR}ak6++OOgsvfl5!Rk{HAE?lkzyl1Bk|9p72o(y*T!~d=ehL0lUyw3 z=e&bPz9ouCmF%oI`3Du}iUo?2i(+usG_#3n7TioVs@MwSD2es+;5s&%o6Z{*sEA9} zt2k*H?xC@sTFaRN$J$s;MI)KdC$omNj0+B%$jyx*MQtmf1po0y?JbHcj=;ccB9e)$ zqOMa`d=}D?Ig}K%@eqEo&`sY~(eadzkxB#fDNLKhxXyFMmuP@K@hW|zVNtr}MeQc( zzOD6^_4V=z$w4aSRt1nk7ep(lnAedcU%5$I^l7V)KEHH2H-L#|Ds%=a2B~J%sDc)& z8d|B|kptD+!~#whgFM4(tGuXP5` zE$;HFPSG*v9W&BnUW8}I*p7O3%nS544;4RfbwkCd_v5TZk>^giU|5#9>!UteF!yG- zx9lE+iVG0U`)+|$oZYlc!>|nFLNqdL=5PiORHTw~;-x%B`TTT>kK!e6aX7y7dhH8B z#cVd4%xC6$T;AC|bB6?||18OiU>~r@+fm-9xZ;Q-V82qpLoyK#=;L4Bnz+-CaR|?K z@uR4M3l~M807k(=&u|HG1ub+e>jBXK9r8M)`}~CVrCYwyrCQuT19VvzLX$&W0%)Y- zuA=yZkKY0n)u)O#OLi>r04;!o{}fb&Pdaj-DyS9Ju|g2iXy+nC7sNDHyO7*ia z2aGi!^^!u|q0GJy6l> z{Q&>0sZy!TMG^f;YiP)_E3&i!yVUvWu4`%=;_jaiZ-sIih+Y)JDePB zB19w=Upq5J&mwq1PZ9KWKs>>tbz&LErpEdC8ZG8Li@{OQ59W#+3aO|7QC56I+#uat z`D*3!m6fkno>#xSMQVGSs?w19(N;eF1V3%T)%6!BD_)SKd@jDUf->c8&WZ{ZNvkwK z2Nj)K2}(mOpN(kXycp31SCOQ3Qj&@qAX$S%HKbk=siGND8jzxa*thYv>!U&)7F@ zx#y#YDi)#QeA1f5`R9`sR4g2*c)i=Ac9X4SmM@uw^v&aBO+`fiqLGQy#>|$r=i@_? ztwS?Y0#_IX_y}HWB9e)m6gexN;eQOE#jyGTCrL;9K^`h<8DlgdQt=)&#z;)xEWH$Z z7%B>qb4|MCEwv!E4cv|%{c3vXhtR_g*!HZTQEvN0b%}eI)mo^uZmbL8-v?Q&rvH6Xp0Tm}2R1A2(bEC$_d(Ozt;c-{{ zqLJV3?;BmqTASV8z)QwJ6lbxD@r+TLA6sx^EDwAL7141(V;N)X`a#!*<;ZRiEvqFO2%IfvqyPfA_Ew932RZ4t8W6E+;xAM|)5P8W&wvO8 zwE}cR38P||@+(#Jg(U4h83^3@*sISvd4LX5*+NLg0R5mcf(7pRN1e2Ky(5%mOa|Rw zzZ!V*V@wEN*EJfTX`z_2;_Fx!dLi&p2`HsgR@4c}9j%hIaH>OA;hfOz+lV0(0@09+ zDcq4LrUNOA)XPT7AyO|w8b0d~aaLp*FQgaUj(lbhDmnvWZYmOXH?8eJAhKy0s5c5$ zJ|5^Aby65kLt2O zx#Cwfs3lZhSyPZ7&~E}r2n|czhmlseY?SWdfuNC9=R$r-@qxX1gIg=@uCSA0%Tx=n8QbR>()N_8VTxgvg zD$WObT8m@E5hDY8`xo#LFYTB2HgWb*ac^-b(r{pOb2yVJY_wAoU#qcw^;BdXYxxjS z%ZWczR!p3k!g8G|Fft<@LPi>#1$slLX_P>I6x#bW6?+Bdiml=dR8)YV;zKX$%12vl z*L{x91X`WieW+Sa?@!2zz>~l&B`9RyT~g+W*vHHs=%uoSvZ4kAsh@VAkR-f9*5qBia%Fnbh@IQ6i#RSY`+UWrb^by07bOh z7x=RgnVs!E0(p9x97OfYdCubtTvkL=vm<;x&f8;>otF5u;T>E58tSxzMPw6y`57v{ z<`v|dBKs-*z(4c{Wd%w_s*S|sla+&57m4$g_mz(M%IiYIiJw$*&uBt@E;qDRS~&M@ zjF((i+h5vqJ4yp*UlG_(ov*y5K#DuoE2ke*PhB_ART}v2!Aixe-rhc4Q3(mT9>Zu~89FIf|X_t*+gp_8V#c0KK|1ZD%!YWc=U?CTC`SRS1r*GTg zNY#3vu^)J|;cz43onu-dnzd?vL8i^oNHOh^oL4be!kULw6WK*l@mb1<8kfT{`qy{5 zM#CGNQne6}EC}hbkQ_Wf0tgnyUZ52aR5Yzso)6%oApv=UdqC61SUaM|3XnhocuahoOk=qwe+kDya z;@B2#Lig@Jb*%LoR-f_wF#5n|)cz*g(f$n;IUJf|AI1A8=)ayv3zl~503@4!)Hn`w zsZw&v%$@jCAutl;N{rKOmP$e+VHOUAB@!peDyl&!kY7!d^wT?p#QQR`uIS}ajPifo z+g8(26yJV@Vl9=sUPXQHB0i5FU8(~CYC*vsS zK=j-iaY31}L;I#q64$9S!X(j2zdTC6HLCPf(1^XCOb`!lyuW;TK0i_?Zr7ftx2%Ra z-D$U-+fsipik8KLV?`8q)fufx^eCRUaG)z>9I$h7P9Rt()N(>LVkaX}SzU}pwZKV8 zrIGp*)kZnRDE6a%f*6D)(s%)7i(<6JMHDTJQQH#4Kiw6_C3?u>E?=OZT)uZ@ z_k(i{$TUkp9NSSIUX2kEHY(Iu> zLJZQLbe$Tf`-eVWwiSAAQ5>7%tv-ia(-i+?6n*g+a~KQso?3H@;`7}PPYAWi4W)oY zBc88ZW>O?g69=*|aD_@w1r6KT#14aGh4^zc+k|FoBpcAU!`sK-->XqPVo{7FMpumK z{U626YK-Dyf!;HA#aCxlC}dIqEtJ|8mj2MLr`g4;SC3wOckSGQv?u9DL8VdR#DiyN z?p}Y{I^B8uxDugkv>-JN32nzwBe9Z9l6;Hs1(In}BPC=*YMRzbZ`%SruPby-;;uf6 zOI>k$viOO*Giz}o2;z9DpbrTiB$fk0S4X_?#zur?bw$?`4>Vr*;K6uFmHiefxa@McAYT}46hi}*#X>Yg!965Y7yLn=!T$&Y_08UEDKd05yzV7UBsrunEe z)t@AcxLY3L#W*W+ulS{FxslAKFeH)`;QKlbBTvzxtDj1xa;bEqFJGDKP$k&DXXpjVvK}N*r_O>?vUUf)Re?UP4WNBc84pD@tiozP? zj2@{F_wv}1EYQ_naY##L#ms;)WFr3uxkB^t^~{-O-r1LDUgfqWtT@X}&|i)$m&0f2 z)zP_++}UEtS4$M3(-6m)-c`RM$tP(1WU41!?*t#CC$C@?ThSO~MB4ZbLs5y75s{H4 z8oRw*q(%tIvg#irN}`|^=~_f6f`Iop>I$?tQLI>hn$t2PG&~(3GMR~$LUH)t#FqTm zX1=}Lszg$Zy~qQ!6zIK^lvXCNnhaXqvDWyO-TBOz(4l+m!As-EpIF4#YeZE7?0;RuEDU=x9R~DrKy;1{oQnW~ZPWBb`Jhp&AHv#K<&@6eA*H zM3w{*BV=TLL4p79{#?-?EcRqZI4`;z+ImNeFn)l@WGaQ>lm9aEg{HoKVsxomah4Ql znV{zeA!#W}0pE3PDI|+%mB|uC=mo&XRc$Nx9QqFMm{E`oLtUp@3~*usW;d_C39$H4 zU;sW;HzX|^;#?G!K{Os6WGf0%^(eF!|A5TkktU5gLSck-JwlJjA=fKzsMcqRU(a${ z<~XMrE9O7^trdqCnoWzzq{tJrgp4fKF z0t}r%lsmq^)c&x4$(o?Up6x3h?Rh-EI4J|rxlZO1G;GRi*a6VH=}oEq@s+VE2-M2s z`Eq-?c)m>`_4J)QGUUdN$+Pn>)6m)Xezq%$Xc;N%KZa69RAl}gQjAO$X|xf-oJU$K z3Tu$|$V!2(^e~*gyHNqcGqb`-6tM3EFwl_ljN1j3$`|NQxO5 z*GrM+H6V)63%24OL3aR3x5-v~Q<(aAh;n%VDa@azbaNJ*F0%{y7H{65fQP@&0o5E(*6+M*l=5+W+~e~=Vlj1iI5s5L5$MAR5{ zO{pDQ*oUoW#AdQ$Phl`t{MyW$SBrDCRg`e&id>+H!@Ca2M)Rjt#9<>OR&2ABTXzFe zAFR5{-s`+kUIgh!X5~rX=)Cl<4Pa3L2}PyvTwX)QfpRymZwy@-2k9N9hbb8Sj)*Hb zKfCl{@B5)?SbSsq5mabNyiQUk4Jp}38)KFIcL;w){HF!UR~D5bowd9+M%vz;;>VU* z$q9OQ%Xv|(=o4b2<OB zVBABF9cchxK%l>PxFEn0T&Aa9JXlP_=Q%mCVqwGH)yTdZ5eB@2b)rx)c)ajI*HeIY zqz`Ery8ii{YXF~&Sg|vI;K-ERwsk2Ox^*jh6{^@yXwc=b0D~rwN+N{`)L7*VhgOiJ zKM6r039?Bf8{VB4k1fuNwXI@H^@?J+#=(YcXvIRsT{6369bU-~#)^>-t68yHp!fN) zrE5)~l}6OANm827YLc211ZHl8PQ%YQIbG{%7ccH&bo?01*qmi6_GekK9H9FMtI*6P zjiO=;9!8~?%!jnaZ4WN4LYzAtpu7v&iqGaSB9yU3iwa|vL8TnB+T!n#a>z7BNtLcg z=#h$46d|lbI!0ZqIVTNaG! zx{U^nwOS)($tWZ?B#~8;6C!j9AT^p}Od8UUr&+am*VcQl&h(Chac$GtimydA2jJLg zQK3_z)tmq~@`hK30?0f&<;kg6`}+aLZ?rdg!d4`z1#Cr(Rob8yLwKaLF)>nFp-rMX zm2DdN4Yh2j`2~j*3R2l5;x+4#zB}*R298E7l(?`mE^3mZQs!)-J6C=W9Ug8&al>tz1eB(zLu_E5&S}q9nMVA$0m0VPS9=QiPg!U)G z8e|g4$jds~5bKdwF|I}0tCUAMj|eTsXr~)nF2q?e(JBsUtpZ)HFVUsq!EKtd7vhvBg_)=U74t2_*}Vlp-R9QJ176bQYj*l0#bnhUebM4=U~5-D6YplkI4a8zZqD~NiXx2TTa}vFCWPFuCSF|UiM1wOqWBo!X(CF%t;L|! zRS~rzcOYs}Bc{@NL2WLvXNejm5u+A^BB{TkKnYNyp_GId^e^Bq;g!$x%-qdxZ;xwF zP|xYHx3`}>b34p8GtVgHMU0|JIUKz0 z3G*>ainCirdU7LNa^vQ$W2D@I6zwx9BSiY=q$p2YNQ&FZ8RGu3{jTXn=d?40Mk$L% zNs1c;eMRFVC8z7I?B6wY^GiHIZy_lP`i0O2WA%JKf2{9wk|I~gQvCd@8|c&iU86f{ zqaq_KMW3wbAoAfaG)V495Z^{NlG79l=rmcOP9q6UfDoO^!B!}Ur(=~ynvB^TcG$2b zmx`dYuv2e3ARx zjz@AEf~Xh~$;+W4U3bV@DRju({33+TN?8<;?gSBVNNbC7g&h59D z(@=_)>nKIHi&6)4Y8YBHY7I0N>R#LCmS~+ON}rL{3_A`gi2{q*lS^7@hje3VQ#@LZZ$RP0+On`eu@%eF)uN zi;7gdvnO(gdS7JKO?UR>#(F1eQslGiDaE9xNG}()kQRA6#1KW$;&ze0u4PQrGM32n zWKm)U`__W4q~WW<4eq5(|cao z=w~8WySg8<(8i+st~Ao9mW^=f$hXKW;1~n}Ap&X}b>Xuy30 z912^c(#WimSX6J7jQ|>1sYXaI7eO6@#mILE%rcEZJ|T?`1x2L{QiQbrda!Pjm|M$f zzx|4v7jpR*PmgcE@Z044_9aHpB*jASmCL4_pKVEsi?>6JS7&H`@He$d944)KLXxRj zDVg8ssFNsQ6lm25sT9K25nex}!6B_==C%kFw+H0S42YOO;13Pdtt(bnYFUNtv$$xa z_|)W6NA@giTY2I5aVN!!pypDPa-|h1E`IViUUL@ZY0Cz!WONYMJyrmKzPL&B5xKj} z(Pqu3zS7S);z2I*>rqEJC#D->n>rMv4AmB?~Vd;OZA zCdIW29b?;8cAPwrA4`mim8(i|%lY#oy<4tOId$>!<%?&QEyb%QDxoFrQa=wIK6kzk zDDFCH0D76h3p623$Y-Q9e>AdHz*dS5HKdn@Fcaw{($@xQgHRKacDbgp_B5LsE1*Nw ziVy@GK-&uGOr*F^hQ*uPJ5dSC?Uy_6?0tQ5C!g-EO0m*xF~^n8E2PCMt&fU@p3Fog zdp9WwI>C+~+(UebWI;`$Nvt8oT0-`pFldNi5mGH6b*&LlBW=3~DMqfz5=B=L{ZY$( zbXHU$mL4#PO5D1lc#G}#5ZcSpT6Qr1M5VBBoP>8~o0Z~KwnKD`Q=1Q^E|C;ZwYo_x z9YVWAC3B^I`7e(Gc8dZTCNywA0KE)S4xydD1o>j+5H3c6McN>JEfFpUDT9C!y}5R! zk!`XWVU<$o(3`^bPUR8ErIq!1<2ld5d)ykpi6WCB7=N+UW& zv64|ykPnOihd#_qR8nZaL?z>Mx8JsXnv{3)`0c-~+&eS(R6c)j?k>7;-6!b8vzEF< zCA6+M)vp5-M@fY~vhGx*NtfbK5z>qxq+Vu(8tJ1iNGq}OuO)&S(n)lG3c)fF5Xxv5 z5QTJ;d5PQnZ&)iTj1(h~*(zDvBLa4Xs*7(ylb();gp^Lb`^cXy}2= zL?wl`)1v+Hsg)id+zfr4f0AFFolUq`pQvQCUxf%57U=+?B2_Bm`~%WE6d4tVe|Z1> zd*8ozuup+fn`S0{rCtjO`A9FaB7;y34{d(+$&a=pqrvaCeD4rjX{ps(H9OlLbWy1Xz*@dS6yjyY||~?O7%A%NBcPL2i7k6)7HS z`pxM?C58G#C8Gmj1YxLXhNc;brznhBo5s0{_=vCkQK?K&e#L|36@YN8%X_<|7#Y=a z=&fLQ=8s#uyocX_yA<|h4At{nhA-0hwb>x#?wXFXXk)-(GC}JomQc3~+efFnkO7~kU`a-y6jdz1Z zBy->j6?JUYDrSVcCJwwoim5{!vr5=PW@+RqbO@WHFo7_M5JC_wMub9(po*}Dia7Ov zjEbqSr5&?3RYygcnqAoJ;^>cag+n9DPHIQc+ zA%I_uWEBHJ^DgdHUwrW1rEdDI^D!8h`SEBUDubx6$SNE-+ePg3?}t5l+l;tky?2<9 ztq^#4QS1VQ39I5E&)ew`SOgH06<9039${vMF{7|`v=)Fo5vksctb`&$5VI9b4QD1Q zDYRpvlB<;I6ErCHjGb8CxY#+f#8jX3a-(7*QORH2o!O5}K@`Rd!2=PJYdm;SV#__2 zN+m)%9t6R`#C~kCMpB!m5=#UTiQU8?Vh>>wOL!1Z{7=4f?lrBoWx|7S=IXxg zuTNFosc%kIb>BXBv|Yu$f2nEEQzkJZl_5v`SX_z}nSF!IaqiNR{!5oO4{+{LCCXG% zl!MBxX5B}+fhFRoRu<^L@(RzK8&QJ>DT=jT4ZlD&&0z1p zgR;`=#|S@F6b*3|Ws>~<1@(zaAjW_1%Pnr_&#f8fp(ob)5>;bII`{hObP-CdP4$Uo zOY>67eB>BeVt^Qli?=f(lNTL2fe;nnG(vrR6*}8ZJ=$AAvl)|LHjO;-Y%#pHV0hkP zJA~IHM!!J1{65_;M10sZ(FZUr)jMB>t-?Fx4XxugDW|AfN=4yv>glMRc>$80BwOc!!drU{1JIMqGYOv*Nrc!Jcws?A(x=zWnSz zL|zfPWws8`DNNmfari`|Mn&@XG12SKS>;78KCWmOj{g`o$eY!HB5XGQ*HO zgA}WE!HYBT1!5NJK;c{Dt6tK1L^Un!EaCz+FR4pZ@-M!@{r9B!>qI4(D+&=Orod8R zf-zGHDS7Mx32crlZQ{6jDKu(SlmV`4^cbrbrXrS+FcIF&X^Ys4Q(V(F-u}9;E37p` zRJ<@FGEfdFj$(^Jo^T{1#$yy=CW0VJBsfTh%&Us5E=68`j7TDNpoWeXX1_w&SBO(e z`xpN&iAuWsCHqyP5=e2lX^4_U&Lt%#AxSxhJWvGE4nekX4E%V@Pq{E!>>t%-xyIyD&hT6jy8MoK%Vy^Ms?- z1*0f96bT1QL>)*EMMVU}RWC6_QhG@h#RB2nNOzJ{&-`U%Pl#6XLQ=MLjEfh$#;0A zZ@lVI=s-C!SqtfFFR4LU9ikHL8GL>3-sjJ8b461h@&~Z z0R)gR3jhKKMwEa77$tI0lqB#;mEv;kV-+QY6&e*8@!$gckURTG#r!SULCPlOjEkTd5rbW4qn`mu|CTK-r`f&faMP!u3o*@M>BS!yr$SA;Q^QwtjtfWHe z3j)wCq_l#J&`_AA3|Y}EMd1fX=SNJ6N8fo=T;oyk!g^O?zp3%hO3^Pa$5M*7Zryry zN2T~orFdu>p+G+{+jGUO6nu%<612W9>5lM|y}7%VC|dSxaoJ?w z*hy%$;vm})XJ`iv2WJfMBbMP-D~{E+#Zw<$y`*Yhw2#?TfNJFxq@!63U`HO}&zH;Y zNiZo2SflJABeNp6O00;Xfq>Mi-Y`hLVTJUD+YyK!{HYW#x)gPs%37>+*hfnId!%?S z7mFGdy;d|St|bHjDu4hqHj+TW0s@c_GYa=MZyvl&5hP(oy0G~=qTt?(-CJ9_7v?V! zRz$a7TsnUF(u;$K70J~nn+GNVkawFeYHoh;;@PY2nmx}q@4%T)HlN=Hl1%#hpLCyH zIFk~vpZJJyl8n%nJmxhJ7-C&YHB!QE<;ZU84H>>z5qMLQtps&ZZ49v?n=(opLcC^D zJX$5_EX6V^nhyWhia#ICU+1b5bdHL5wN^Y6A}|0WB?ch~g(o_K0;xtRx0K)rg9nVX zbms1*YLyW#-F^7T!&oALIH^VqTQ@9aHiS$iVnN(CMwf+CiMU2)l?+LRV3PDk^aF$? z%5ESkDm|<=6h-WapdB5W+>l~!TS_JNQPc8gr8uan70-Fs;z2P-#h2E$96J+%L_Gbf z2!$90hyWo$Y@kH`6=pzG7?FV$p-5m1KSAOM9VH6rXcoIwFEm;*N^M9Cary>vM&Kwl z5t+8g-zy^tfI)(-CaDo{=z)&76g@vzwc_*V{g|QutP}?|g5udKLBGyz%f^Bt0hs=X zF#=0K(3?Poga(p~WN8oxfq?)O0W(4<5w##hq0s_jf<{!H6cxfexLvniV8zKH4DW1LiVo3LXOH_0zdQkKPZEZ^x71u@~ zhzvGFCsYuV&AfP|V2v~&2qxx&a_yxk0V{%pfC7rb&rkx;HDO6C5zy0iWmTh)7%?E@ z7ZjM=5L8Hj^M<_;D1r#dP%=bp9+GX?bRHE!iJ*ZrL3`Wsu6&rYrYaR(iv1K9e}fe7 z9{4a}!rO54QhTkKJ7^DzRaDekaW4=76%nL}1V!Ot(1*7$id>>(Ap(GFq?e#b)T&0I z9igE_i3$b*_6^aHln77)s#PKk8R5?mlp7kVJ^Tg%5OD1VWe=h9kQ&bSMs&oZ;=8Y& zD_$tI*iRwxw@C5n+s>nv#fQ$ORZT7S>RPfCtJ9V%Q;Pa$uvVQOJ#lt5CXSwbU`SU>K_7?Tzwz1lDW4{c zx7V{To^-d2Hz{7ZGXBn~AzSoQZ`Z$jnM=jj&##}ldqr!-yDG&EOJj_LMO+dil8#8^ zX?dIK6Aej>Um?_g+Y*`T6sZ-U2TL(42|qwmBG3&1kPHzCDx!=yp_0nVQMN)yu{R<^ zNzu};Q6h{bN=Sw{yAdcOFb|Vi)y}t~Ba1+yXer(i`;`pg2vI4)1ZL79#n>Y1U4vHh+ck}#9wiPo0HRREt*@ zjytjN)BADHkBC&t16BJGu`s}4e#Z_y=5&{B>dRbCf+_2)1mY7lk7!te0 zZxEEomK5oYA^I`muQtRYkxn59b5d3!s8LXa$$DW_gpQzzxHmEZQRBTLKsgdJ)gQmc2Po4XP2VHg=9#2NH(BW>9om{)AEDeg?0Q~MT+4ac3~ zSbw{lL)X8>oh6eRg``-@t%3fc{hnLI-zZ&{twyu+a{Ww)-9^|2ben)glgEnJNQzFr zkbE6?+7A_Ol$}MTYR9_^p9Wvvb!#!KL1U~)8l=p{r2l!X4WUdS1a!xV3M1hoOX1`J z8FfboWO<0akT8LShn6=(!bjX7@FpN%DcVOSH_h`%-H;n6^uHqWkH~Kj`lcQ18QynU zfo_`eOO`#09FiIp(BBAt@e8i1th+TB_vQ zQA}~HC)f8a)s`4xy2M>WZ|?<_F{tnmImvu+h@|M!W6R9qJY>+Xov(+cJ2_hT8z1N> zS1OR=J}D^p+FDDk6uAbe$rUJ^5vYlfK}aw%JY)a?lkBus7Uw0%z!#T^4w;?BUNMqw%1X8QxGT%z%!X=jhM^<-_^KI?nMc7AiHOhGLZ3L2^eV%WmNb-*mJp;bB`m3IZAh8Gsi622M4Axf z=_9j_EJ8{zUk-#12*IHcGMXV_3RC?=_>7`!19?`4vOTNr-y#7kBix|L$kYH~r1`rT z3DH1;tpFL>qB%kaO-c+*ao5w9R-4QTN^u@iiY_jb4;GsTXl&aTrL)mb*%Z8^AD}Z` z@gyBIK0dz489{(vSnOIHA1H>Th}j&H;v&cY_61oUE3#KqN+>C9C7?QXl9qrr6?{&& zLiP5^)RR=|N@oLUB~4g)BPm$HdzMGuz}6z|;aroICS3@`Me-|Kdw2Hie00V`$45>v z(wb1i%CyMJFnlW$HO^ldb>o;Y3RqeCHwZ=R01EUF{R{Lkh^zqWCe$r<4H+ zfxZ)CF}Bu~Ibp9jkUz_1@)SBG#T$J&h%l4I2LG=0RAN2Qrsx~1XV6Q1?>XR9qD$k8 zk7Qma``v+PGAPAD2?09g?7}TBV<=UY;&q{*LPOdJ%uE4Gjff05$w z#KN;w&o3FB)TrrXjweM5(DwZH_BEKy;nL%L7g0k@%DSg_7eL@x?gR^!ZgRSaFhpn0;VMA0vFeP~k zzlV7JElOYE%OL_@kuvBO94&^Vm`S)p==?~n;~z5UWa<5IZ=0D&Wrz7M|D}8FHL3iC zQo+N6m>OD|j26lZ+@pjiyJgF5b8G~bMx3Yz~RCedAU2cZZ(kbkZ(n(JB+Yp6#6b7 z8H_;wgf6la`Em#pf3;<_^%Cf?6k}&6oQ|(w7dy2-^gq1t_i1TQ&R&z-O_6wfX)a}_ za%0s7eO+_hc&(#Yyi|fPhn$I&`EH?~wnY831tAt*@ld~8tYNjW3>eu6iV1M zVoZ>;Bk?GiP~;~WJ&!~NA3s@@>csO)0B1mfXe0~$(Nd*ll6lvo{ znJwofB*g=f$mcbLIw7ey!s^^oy}WTSe~$7RCHM3{T~R1sp#Y6gdTzL|@qXs{GN2RH z{@xjbhYxo4L4d0*(zn7RL1UW{pg-;@-&pbbR;P`xk#8?V*GBJLgpGbv>CZhYe6K#o zoinq}SC8+96?Fs1Ku-kq5H*dB^$W6^BI_3<2?+_SzeX2N@@fmbVq@WNwDs<>YIZrq zXg=TnC!>G8bhhx|&uZj)ZRMSQkm0BR+?9U_}4>9j-WK_DH=%q z4yhngK*DAu3F&`92+-v`uR(_bw4b%KP=x*;?rnh-y}PW!_d)O2r$}w|LWLY6ij5k5 zMo3FVUhxZ%-anI`uLvcsKc8F+!CX`_eVOk1+c+x%Dc+M0XTt$LeTuyg+cvYDHk=>5 zJ}WZwjeED9zn(jBN3ribV zL8;N;X$`FRP~SN-#Z2oW*CD9x(1V^Cd6Szv{`GD2lElVQmZ@uIMdEj{2BFm=Rxu@t zh%)4|myw}_Mv9Iu6)E<9$e@Sa+cLJM75|hJYj1?Ek)m9%sFy>mUQfhoh~kBjSk_Du zujLpvnKr2_Chq)@F^3AtR5R_titW=;E^z|2y@JkqcRU%)ixiUz{I1g3IS4OY<-5e` z?(b=#oT;lgqN=lrzyZ2v9Y5V_%$CS$&RmeJTZo1sM;X$?ja)@&q z$g)Vz5?fX`#8$9uqvtAeYouyysnl3E1#$`T%j zk*+*yGwZHb} z)9$YpDk;w75X2XwrG%M0drL7gTcQXQf%coMArvpgf%2-eYbq}wzMWxf9ja+F`WH2W zW^QZV`ef%ooyl*oaK+VvHbRPN=-?e=T#U4_z4J-$X5>A$`H-3V zJON@>Dc1B#0x3dsk-v@X$Wbyv(l)}ahdZEu4s-iTtWIkWs(mYCBV zg5+VBkt1KaU<@ahZqCj6+-adhh~-Ix^txcC^^zOji-@ZTf=Py>ScBqdkynHtOM-|6 z#R$~kijAajE=gLjfA)ITonKyL99j9(N)F`f4$e9@rIWmgFsC1&2k87UmeqtD#NGmzqLCsG7TNL`UW^oq_o*{&kSAwlkQ zlzfT!6KeQ~>{pPBKm^1YA|TbG^eWDLmwlVb%@a4}E*H5pLc%qcG1W}p=-S=!{R6+b zP|3MV)<b}4V-hV`$Sun$ROf@|r=jZHIC?T4*q5N{d1) z4~Q#1L>}EECzv5pw0S5Az2;33DR#jXfucp)ldlAwB5IN;ZgoXs{}3niOOU%<0=lUI zx&tQwB1$fpDU)Ipvr=cpA{tQ?qo-Qrh9mwKvOhpH46!1Pg2;wq%YuP{2Ynb~WA>pH z?P~W0{Sw=&N`xiNQWNdzgXni2zb<-fl1C+<)p!a9<&|dp0aYarzFqiP8icfs!T=}+*Ag*X5 zC+dpDYsQ>P{K7hM#UQRIi0$2+8DFl>%6MYuf+WC-#K0{BB|n2`IAX$ECMR!MWe7o& zqL87JEelY;x9?3qKE8kaxV5!g+b0pu82?|2-)$o(R8p7^1B4K*7eRVYj2-cT7_7Bi z4&)h9?B76^xE1q?``f2xpdFirPA0H4| zks>>PR;1_$a&m%UX$u1pUB=;Mt-BK|ah5D$2~6!EkQ)^g>}6iHjQU(3l}QyntsGF-7p%;L1OI-oTrDH5ORSdlb9 zlbu-7K8-mUE1ofRJwQynTTV6Ypr*CN(X(zSvO(8BhxiM`c-I6(g1je-?(Bp7Y4{WZ z^vefBkRn`B<1@5~@cchOkGR!N=6t14N#S0bmjR*|Uknr^E<>8Ki~V2)-AdD*jq((F zk=EaD_S@1otq&&cs80*tbGV*_f*oZW`8VF1SzwibGt zyTryvN(HgBxJ@F5Ile_*gE&DDRJ0L%HX@1%DYQtDDK26ml8Bf~P>70;xGDE<@;kGe zn_UxQe1HTTad&opcOv9|&g|?ayLg#SV)j8LUA+fwD@F%EO`ml-7=(f<8De1&CNX8o zkjRtl5NtEc(vpu3z zR$@$&pqh|9T_Pc(Y4W}1Q)Ld-endj#>@jr?SmgxtT z)UyvN@e?$XV$%UIBrXe;tymo$g**|6ND?ZGbvnx_5jzMRr&yj?@BKxY81rNBn%Qy zln@e=_Npiy%n&RknoWqyn94t*@()OUL=`0l)u!l3GAinzhzk(ux~0B+r;3>G~D4Cb6y)^fE^=SU)h@_6z+oQ49vR*1q^! zm!XMbh2 zx8>|TYb;xzjtnsP_x~CQ%H&j^Zfx)f>II zfBjIr*jbMHwI47OFH=xTscKOe8ws23l2uBVEddetwr zwc_DD2%Z>IHYC=H#oy3R!e|v@Yz&Qw6GCcPGnWwgz%tDtw?U+t!B)%0;z(#gqA8*& zl0PJ#O-KC%{lSllNfKMRQE|yGaR*1@;@$qx@?pkwGwtw($OLS$Mk7DEaj_RpS=hTk)t3Ie?6d!rN{$zA^4~tl4 zV&`0lygAm;Fo#ZLniyIRodYo`F;K`7_R}O|q8v#|JR$xW(XSCH$xIR@{zW>R-fh9v zoOIcez42FAwh1~o)Ngm2bD}tP>M@DpuF;^q!$pqI@VVry%BHpt8{9|`@_&`6!{rIIpctVlTI1xhdN+DUK zDYVuwLTJXMQ>^hMB`ZvhM2iIxNQcrNlaHzrQ?f+YoO(jR@gI|wF|l=H($KmL5l_9~ zLL{Q2;s9C11g$5Ft=tN_uyms$%KRuEFX^+HG>Q9n`-a>KI*sCs=z#8mYti+T8b{&_ z`0jHt=~IjDpy^BVLLs;wJ=7Vbe#=L3^U5%}m^13#c;0DmuU>yYcrv_v3FDkG&XlZf zQ7ryoSSw*ip|RHH$ceLrT0)j=2_$pKgMgSpE+HmyPRxXO23esD@ejz6Wj~Lm#7e|q zG&q|j>nZ<&3z4yYf*#-a!@9+vD>hIxgv+#qUNDM{t2Ja1X{618ZwBGVB&Qqv2bBcs{y_?O=5{I8_~X@HUM{#pAs%h$6Ds-|-appdYODMqh?2h@uY} z>84adEL}-kLNO&&(3aBvl&q4qN&>PV9eEs@W|4S8YbXxrgh9v)lkY|NaW;bF{|Rx1 z7-k3oLVZHwd%39>v2d;@Fp2Q4IRceS_fb zmpIy=P-lp*+ZWoS;lLkWi>~SJLj15FzxN-9XeFcKo7H_u6t`D*VhMffOEYRl#mjrb zuw+USB4sBuF&al4Yc6G)bOJVvsJRe{Q?d|2=0XwewLvCBMnpnJE*%1bDtRI(3Xx&S zl3Re>d@6e)Pm(7#N@(+BKr&4xPv6)(x1T10D2%W5_F%&$XiOyfpvLjRYjlGTV!-&M zQ!jKHWkht1Q3F9V)u{D;Yqqssh-so#Nd+xQ8>^zBNu?3R@@D@gzjL-yDxeU3kiW|IkP)62zlGrjWOK(hslex3I_OZl9S!>I=dNRQaaQR3e59WraXY!9tC%aIZ5e(ykVsy_dQbEY zy0hNaLLuTwP3^O`r4*W4SUR>nj4W*(2)=ILcl-t+0fciHSr&UyEqj%aEFnw8#vqN} zkfl2=25#?p?Gqw~ruOCedr%W2_CgtQVg#>gAT5Ekb1xi{v=#wbKfFBUUggN~k`tqY zJ;Nthi6q5iB`LyYj0&eGMF=j~lyLn@ilG$q+RlQPLgdlNvM5*AN6yneJe<$)jVcR~ z4UW|DuTg@y%v#I z5w*QoKN&*hSmY_8on>ezqFu@B*T_?j&_KtXzpMs3@8uPoKHm9QvY9gFZ|YLS8AGmL zN^xi;7^0)@;S^$Fu&}U|Y3)kqx#FF|(l8y0LSR|s7I*H7QVeg%AEO@hvHXW*BDp?t zmZkWrjU)(xu^M3zn`NQ`l@J?CPQAe}R<^2neHJ4r8DWza`AHlot1TJ*NXLO(>wp~_ zMG{C0rw2~z)NigEjx{{-X^W&tND`v{2H%~o&YgD$-5-qR#-s6GvWP53a>5G=_L>yw z3DCh{sRy0l@rtmSJ-3CVICYyaD!yx38Fq#13!PzCsIz5RvWT-I1$yVwo#(eLry||S z%)1q*r#VI{D2paHhcn6T z7*>6#966EHa@1^HtTrA4$<_UCgf)up{1Y?DJ;3ZfV z7CI6RdgeE(enQegWY#Fcy~ZLj21!QcUUEuENRnbUmr6PhbBeE9LNiZ^e^H9C0jyoO zduikgH0X`w8!O4aAP&Y`A|qekT*Eg?Yl zEkSOtgM~%3>u#jAW1g*Kz|5L`B3&2 zF4OlWdbqCj+In2DCo_0$SMFQu>0J$2naQ~qtsSbUfo{9ky4`iM2NzVr*A+T^uKz?c zl)fvIJu^G;E!5VPt}+(nQZ?))C>`adpZi&wy~Hn(_%kHiAK|$oJy>KV@*{5N&EL#@ z#63NmWaw=8NhUhs*+bc%>q}#}c}77r)1Mw)s3i6A>#UJiJ}tCTCP_|dWlN!85>@yV zQQR;R&luf{Z$o|4O@qw+>7rEYifLc^h+4VbDRvnS4ry^W%EblAM_Se(HAHyzHx0Rs z>ph&FS~YcR(vNh7vBSmZ_3o9@zIWL1Pn}UR;dY;+a$u`d*AGowPHvz{F`O(aYOZnk zSJ6(^B@P&o6tiOoiE*;{f11_QZSsXmc$yU!DuEQ6Aw2;dDu~TCl}#bRR#FHhY(mn0 zN{ez11e5~8cF_e<)ls6CYd(u|mH%-Cl0I=Q;ddKVH+$#0AfM`+y$|HuAr!XO;gmt2 z-e|z8>poraL#2|E0xjjM)fcp?0H`|WccgX@`-N~`Q}n_7ml-V189eAVb__J#_U$%BOaT#Kj(?T6+0+5d?tdhyc^aVE(KVA^q8?n@x_?=oG#8NpyOk)qV<&34sL_$dHDhLfRl0mAmJn{#5 z@jbs*TgEy@EOC05U+>578to_N{(jfZnR#VRLpXMn7D#AUY9ZFNWksbrS}1MvqY!g% z>FC+ffvzSZ*D-w0a$JO0uL#eTOwp^lJxaFW z>TiD+zHe4!#Wjbsn!XBSI|yR9ZNttynH!BEHI&sdB!(qm%ZJkzedtle25z(~< zDh@k_gCSN>$clyrBP+7Dmjc5cR0y$uA7RAFUv4(MmkK)otQ@jlg+F| zg^IDtp@}GGQjZCR!B8&jQJ5$r7rtiRvij`PTu@O|W2m^T{XB-0ryky#v<6u*sAwmYaDh(OC;8Z0 zV1_FW2uJ8Mh`x^Kdl0edX)1R7FI4i=Dq`(bsN`O=P|1xlDf|=l5YbypSS%ef8bG8@ z=SQ8)$zXDpJUbF?tUlg`3u-IZRug5()1fx@rkw z2EB~3=y(9=Ko`Fnx40*8a1pbeYsH$1l+8iKtsS_Ra|r1En1+g3QVtjBf~M0z(3Zgl)Bg-Vw7HSlz1zr+qK2s~Eu@)6<;9seh=bs{j& zd0|1z!AQ@fs$>XKR&dF@?$UH=joqPU=r{kQ(*YRLl`+#;UUIw6qP?O@$CLPNSLAfV zNEBTZlG}-B%w=+Zb|UdehlH`B!(pqSJoKtdAMZ>=$sNQ{QPC^LSn<-)dr|bxr4JvB zY}&FKDjIUqzCD_~$BDXhny|78X3RB2qT;@d=<7&Y5Cz07Xj9i~JQ!wAggvT1JG;YT znZ5q1h}!;ySZ8s_0#Dv;KxDQYeKD_GB7%8R^sEFWxoQc~7Uepcm5djRDU#S(jPZ8IU_7P={zSxq<;4>RN`cN&_g=qWR zB3k)J27W2vxcz0ZB&e)DW}m9s8*#!?6%mIvUh(DWBkGgdXE6?Jo*q<54qU;zZYINV zOj{Pi-e;!QOJ7=M`%aei`Gny_{*3By%Zi>&@y+>U{d~uADhd@vozDdo7ayB#WDKS) zJGGKX91$hxD^JGY=z{{ON=Ru+h#Cs|gikpYtuJ0 z{s+*P11fewJ_{AL2DViXJ6XJlvK?2I!4Ga9oN?ghos9wc!H@5u`p=V{Kx>bjUw!O+ z_p&=Z$APYPKdaoH#eRMFol0dRPO|iIWo+lO3G;B?eLX!>l|_h@cb~dFLaMg2B_PvNSbiD> z>pqX>6<)3E9ewzM`u1h_ABx8R{;(eft1Yc6&b#P+irJE#_rXT43a3&gsEGN=K;qjM zPny@&L>HIr@^w_$wY${p6}Pwh(5tJQ5)t-ScCM|8n8KoBi}mu-kr^~=y_e4+nYnda zK@71tLlh8k`&BQj9&dUfK^W2|a(zPbd9+~WiC+F;^Y_J{pyG!JpI}Q?yy)X%%KMmn zm8-EYvM*M}7kvp*0L5NoWuPMdjQ3R`--@V)_!E>0y%b0|Rs~Wj!LvG|2BI$^Zb4cU z5lxW-q4fcAE2{QJ{tJjcMgFr$ThWDFUB$oDzM2}BKjUwbw1_9P(*`JI_fc4K1Hc+J_(adv(g4ZEKc zl>e!x5(Hq9EXF>-c;|z01|m^7PcW=FOXy#J&_&BHqlv~kNaW0lfw;Ne+qx$Veg)U1E>F=TFK+3=FwAwL2DYL zkI{oK3B56N7C2ccnuQ*b#PJ3SU(+l&iFl}D6lMzbpGK8fg=`bCCad~NOzlulDoNah z;*y?xpJtWL=zP3uLk#z_{--FiKKP9sqImr-6b6%IkbqpPVAa-mpR}K)I{P!^ zSOOhZQRO*BE6T){$CgfjwhF-H%?-W21*+6MRGbh+r6bp%k9?2<^ z;x{P%4hjQZe=}bR;*dYTxqj|X9cccms((jH7MtUDQvxg-c!r#^kDvnMw3Fn(38&6Dohm>c;Wl(y5E_wzA=C3u-^85H=H*Bv?>h5C)1-*`=%k zNeWpdTab8g#Vr7wm!GBZlXRw?4?*0!eQ>o79A@KdY-4Si{e5(J^?e>h-y3~byax5; zy~%);?Jc)xHFY@wB-%)5IU2|k`x`BUMDmtK>TIAA%aLGH(iP&W%mFzWSZunW;8#+~ zFO+0IMz)D;JB3v`b#cxhp7w2U?OyNvfSSLa1CQcAtHxh`ZU|&kqNuD6imq#!v<%D0 z8J+T+kgij5(o8`rWCGVxq`X4jH)8nPLzI_j{2_H ztXI9gdsN&NdDO;pwT-shySBe|rAi)Gve+EIgEp(SJaX4r*P6Z2oOliGtj#tOCX}3V zn_J5{St`5Rlxz#>*JPE&sr2yUk&n-v>MFQ?nmUgs1g)d z7XKH z#POAkP_Yg{EUK5ghpzA zBdt;PUG;<@zv*{JWKTQ~|+gQPCGcaSPZ+wV+->VL!j~Gsycc zf{6MPT3Hem?YhlS2W_T{ipZi)8SMrgslyYf=d$OrD~1J(Ug%w9c+^IsV%{R#6%Rnw z-1yCR$rmfw^T6xPo^0RbSYEqxUmPSlH#*O#=lAvY}GwF{0CQE$>7R(Ro)?JaFvhyK~K2AZ@eIe>HQkwX23Z zygPd7Mss$iyy?NVW<*{F$iIn;F zKbvq(Ma5M+Ss9~PvsNl>i1KiuwTqYSjjYF@VlG50r7OC6SBh+&qgm>^S+Y5GS>Gg^ z?7G8)6ipJ68GxL~y*gUojwnf@O|3RNQPbTYL{t;0(;g0Gg5pM%=seSY4VfZpsEKpM;cPbQoi9W6dWDJ1XU9lrGQpD+_ zqD^OCT-!CLE)t4!%nFBMIb{x5Aui4pi;72-MNrYH^DQVB?aM-}0p>y$Zls2ZXfod# zP7tMvJB}V7#Cbd$v*xAbq`|cboFf@p-Np`>dX)EJ?x!o~z94$QHBs@|)8hAXomFD~rRLR>Wa!sC~l~(AA-A`e6541UAxEiN~$zQ89%UY?? zSnP_Z7=1a!W@v)wieBmvX&_Iry)0KVmm{%RCV4CLUXA zsB)#sD$H85xP`fpUqJc`#7Kx1BN$!H!C2}MDCh?|Jd zCDvvxbtYa|kMa5LYPFi6*aMb|qf7VAgInY5L&f>1LRZX`fClUy&dnqwk}1o0=fvR{ z&E|~`W#<~8szcqX0u_zRY>d6UX6cITLlL6ErP3-(w;KJUaeAvqpyCOOR5MCFWmj%q z8Y!w=?RtV>v~08AMeffa27;Fsab#rs;>G_&SKRQov-eXT+q??%rfW{YuERO@>MLuY(+7!ozTKdWfvg%;CG!N>h~?ch*fb;KeH12L%At*JvWTJL`4Q-( zSmHq|cReodMoRK$mFBm3AAqDTTNE+?WyHi=}Dqo&b~OE}rSsHj+$ zu80~@Q6_|nTba2675)7^sOwH7<51CT78MQ9e5mNJyGb-|AOntCy^vQ`U_fnEP;#)`&bI0(o8 z{G5t7kf@chL&c=1IH%xCTeO?9fo_bph#2E@&2J-7ac79;K*hsrFyWy_6PeZAVrCO% zmK_?eV7DGOqT(2;PJ}8NQ4teD#W;^gi6$;pD?Kr&cm^AEgn^D>gXW=0qG9%}2-Pd+ zUizYddsoqw5El_b?Y@;VxF|NRu8Iq9VZ=1nDt-*uA-EU>g`@4@2XaLnDk?~dA}$sG zfxpG~%uH&prfn*^%Sm#Z_UTM6xlhlTIe{LAiuLLQR2=WASYj1J@LN38al42bCY%-< zrLo3Xd2EA<_df4w3!#i7Wt9>J_TeEMk$_JW5vzDLpaZPpWR-g}O1UTRyGPXZq_hg8 z@fue|2KPEb(aEq@G^`>fWEI_8lylbeK7WOZr5Bd0?6R2RE=u<_n6MX@u-kSaD>@2U zaWtvC1-gQ)NUY*Xj~rC2r#^98B@ov7oaPk!gr97M+;2#1jrO%wy;+MYmZ2iM2pheK z$xy^WJnVff`QZAD=&4w{_j&iSfrZ9O!AVaE<%F?(&#ZG1`L$v|oE5J=JcL3!WmTtI zDtGPuWb~eLbI4p@--zrk_P5F@R?%U?E^k|`GN|8q#7=u^dEX6^9lM8c2w~Hb)s_eIBn=CMKHo+U(~8%Z4j5+;a-yoF(N* zlNHwJh;E|a(hg`ZRD3Cp-XHZdqj&gFt(Dea>xvcU_{sg3T%axH<86ym4l0g`PG$X% z(%2{^TpouVSsprBk{2(__4cCuba= zt5C+04M>qS5NhX${zMK41-e#mRx8D|Vw5pShPiQ27kL96w=KwuQAIA$*g?NE+Dk?x ziO3NdZ8VMwkBFY;`METp$<_SB9MH8yuS2cMH^$unB5dpF6etFJX zI5unjr{M~bu^7b>5m^g``XlNg zy9J^G8fhUbHmj)5AuB?~Xd;)Lp^Jm=pnW7I#KvaMM6+3+eKayw9#WRJN2H`10O`F`DyUeggaRF#Iqc%Fmosom zObX2$yo+ANYG~$+v~?ye;ULq@7!8%Q#36-d(r!eiKhm2Ztqe3W=mJ#i zihIB>DHP~h$ckmCSYj0$Txz&J57&x=1s2xu(2H2iiq&eJ zchH&7Ju>5aCQW8iNis8;PVHtWGaHcZg8QaXfz7agGlMT&R|vwo3=q|A2h!aX${02h;Ld0`Mg#{ z8n?|+995i<0XxM=@+jkx_NXwbfC>}FDeyFnqfDGIpe&3ks0bIMim{u+S#hZ1U@GF_ z3v{o=?fZ&9**kxhCxRf1ixw8KNGc0k3k$KeQ4qCH)Kb(fWK;y*fdd`kRE!oHMB&BG zHG&FhYy`1U@B{dvd}j9U_Aa^AL@e);TsHf=S;O7Kvwv>ldlt5M4U0MN=J$y_&OQ~a zPD6OIN0CuYEktcpY=wNQK|2PXse83eP;LiYL)CA4TEN@&qSc=aOe-vSjCTIhQ> z3J3*=FV`U1*O*u9ij^%+Vh^pRSfAc~!}fP2#<#kIw!vabhnQd3lZ9R51^YmuAac-- z;EIUPB5KecQyy^^L9ALq9?0*8d=@Pt3Wlt2ZKJ&=s!&uks4x^#g9)J~qPe=_@wCJ} zu7`>^tAi(QFGf9G=^k{NL2Ek1eC9)7yd+4$xE#6_f*p~_e?$a?1DHH(g?XkI^Ey-4 zI-(9L6mcI4e?p{{h87VmFq}<@Bcd2Z-3F=EAkC*bZAmj|Gewi)&_VB*n-kY_&UBK* zOp2=+3yX*sM!~ZXN<=~qwOPdfh=`bhNI$Di3lHS=A&WmEY9s1Hyotz^w1^`IMJ6mD zA~tD~B2OvG5V0s~8f1WZGi|BnE%n_NY{M$|4$~G4W$JlLBSoY`L|0V%B2^v-R{23b z%z;FNHj%WD3Ty*$7Lg({L3zSwAOdn;R11n^9dSP*MPUtb4}!KTL=mB?jxt1we1&=% zjEDoIXk*3majcl8Eh@qxJ7-s4tXy$iOA(7X>WU9VoCrI1qED9KIH+oZ@P9^3iU3Fv zF{{iy5fG7RWkli?;oT4?#5*DgN;VM3e~aoU>TOUAg&M7W70Ex4!RJ z-)u?iiqPWmm<}2SGqJQAaK?MAJc%LmZL&I|_!RgGf+P#EJqC$FEU1qBX?* zh_i@+LI(9lxeS`$RVmhsITJjZe8r)6-bIVpMs=Fl7+cKDu@3s>Q?sq5E5)gZoLU&( ziLo^Z)zgcQj@`OYZlX+72Hk#i?%0i4LmvzMvo}FpSS&S8}gT8*(h2W&blO<4zPomyu7Lm}2J0B+c z=bNv*OehGF6#PS zy$4-q=1f$Jse>L3LfqOHv6;4v zJJS}N-yvObJ0T`tOs;qq*$|jPs}yfLc4b*I_6`Cp1H@E@(g}(+T0KT1Xe*THg6`eE0!I}J-&6x0#VCe24{Pz$Mg@jVnHYoI>2Ysl_ zpw(sVpwo{}Q@-M8=%9D{9rS2lHB#Kj;(j?T!!iU3W%)q0Q?gs?CB)u2AO|%2hE~3; z&b>Z(6NMMEgb=mNMLk$Y7q8;`JUe*n+)ETjUzZM2yd5M)1w^q$l_JoJML`RnAjJdy z2>TSZY>@mP^tppp)6=J}#mpR)qIJ-9_q^}Wu*UtHz4Li(B8cMn`lAXqgyfWiSCJmH zCm|lBlr%RFPMU*<(qs=FS^^c3((yTCMa@BBX>$-PA`>tzL75f|jZj;XgGc?J{Jz;~ zYiz1*t)4QLCYw*^2lm5zJDcq5kzGVY?0L5ZZ8s`L_vu|oAsHw{a3>@L2dIPqVaX%D zD{nhSb&NRi;DMD3Pm}qTCikj!x>Jm9cDh3v==rN$a=m${(>cQfs`kTFrZhwta1MQI zZotZV5X^_1pvBn7O#Z_Y9{inXze#@oc#kLy&wuzl`uuXbw7UJ8Pc7FUQ)mn(1A4@B zJu-O0+as*dBOT)9V<0*fatS)yb6qk1yy74zp6JsMXuAp8z1vdes8})DYNJVWGls~9 zhO~h()_PP6g4|e)W_L2k(4uuM9=wIEm#9!)iy(nhyn zSGkOUPznvJ$jGUvs!5=HI$)8E8AIuabUuf@_mY^!z4jOUTq}U!TTVrb zii+j!R=Wh*-p<0Rde2;}VrQW~Jsu=h^bCIHLZh*Qfcn-{LDsfsns%t3K%K^D*>wwf zX*SgOW;OiqE8IuAFVZJNW*-qj#ls7g1cMxX8ih)rq9!uNsisL=KEWeN9OuZR93;cR z#9G!h2v^%|098<`Zj@L>?!_wVOF@v0fEpR7NT^1VT9RZ&ajW!=5yZYLkg7)J~VrbnCQadp@mAKS#6}T+H$m_SP>(Ylv4{4+(9)6*Q=92g080b7xHl#NxR-N7gU_&xtdT>*~Wa}+Z95Bo{^07^0(mD zhT$xU6_8sYfJ10jABM=I|mAtj1LNxocwAIC+J@bl|&UumZX$MYH3JX zgG2XwBa$9r+tMun-DpPla4z@3e9d9pR1WnHlh0j(mgv=D6}Os5k^g!*8^8Q(rt zux+`zJJ+2_3Uzf+TKLmSSW`Te*wODI?p9 zqDe%>K7~pWgA9GLLM7vUE^)7tg&czYurhA$cLZgWju9-$kHl!=HLBF{wdyx3)9qRw zDoUuh#AusUJcG^l3yW@?pk*zM1U)x5H-oPUF^xTpwZwBZN-s;2RjhCbW))=?lWcuy zFYpjDbyHGF5kD$v(cB9jMbKl-AyLGsTyqrLgZ%hdZd0v(C|(>jVxe6Dk7zE2I_A@v2i!tj1+eR-=Ly+oZ35TOEKqn zDha44)GT-T#>ewxLbS>ZlJ4Z{{fH2JuE=w-iuUaOiW`L`_y?H~P*>e%W~(3+R!G(g zi54RvG!7Mz+(VYXc9A?1qCX%4vOm~6pVlUVFpQh32ny2Tp$D&v^k55uU=Jd}=H_8$ zwg(S`@gl@!z&VH*WSK}E4=Dt+x3i+%yWlg~T5*>00flQz-QPTJj> z{q>z)`aZt9iMvldzc4D9l~D;@Ean-Ncnu*qr%XV3+=LSu*61}YHm4kmQ=o)}-<;+W>q&Awx2b&nf5L3cm!5A_H1 z4*J~V5|w=4?=z-P)devQvHE;)F!2x_iHJb+`I$Eri0qRI3tm^QCI_ zr3lxmn;W~^_tvW)uj6e^wI%BAFxKvFU!L0!LjysCh@!)a5xS(32~d4%luGf?XE}vY z$uveKkSK+rUIukb4x9OsXX3S{Q!yJ+;vC+uLNO1$Tp~QhcOaa7QjY{xg4oQ)d07ZyzQj;KQ8B-TnhQ~#rSbgsPbl>`OoV)kJ0~FE{<%Sjl zg9%YMTO>}5Jijn1`PW7zr8iX93@0TCVG>OV2Bk3uwdEr_60N7Z-V9Sz#|lwMG36EA zVZ{Fv3bUv_A!5dBj5aDMO5$<;vn4euDGwNxeD-QW2!j_FoTG;hWs)}0Sny*ad8IOs z1kEr0Oc0&sk|?A(ZquMJLFV5eK7b4m23}*7QAu$V_pFRcN;PBYpS{3RgvbF6(7^`5 z!VKb*q8G1zHQ%nUaMEXtc#H(1P#GCd5g&<623a6OD4YQbPk`|98ii5GKQJm;$QqS+ z4Poe1%a}XWats(LgF{qt0h|=s4B}zP1n(mbgb@cqx(^Va92tkg5y+ktnE}Lx5jtpI zqcAF&l^{nMm3X(9VT=iFn6V@$BeaFED1X-EATbV^1ciiwh;xdd6>W$SCzWG78tE9BLr9+-d5w`qB^Qb(@@HaHf~sh(vW976wbp_& zCZH!~s478EM(6-a;_g~aR-q?j0$+)j;3oED2eH+dW> z9%)oksxby7NG+wSMAV#^s5xX4WN9p>MPdxH11RnhVpceWE$*#^m?2{0P^p%0R6&6LeUY#d@K zVh*uDA3`<{v7?XxGK92sNaZ0mfUHA8TePVWPS7Zd14boig;B{2j7lo5Dt>OSAOjFy zfIR3xTS}do zkQ#w>jAV@3D}_JoI=*!88G-~sNpsf;t-8v!)!cs< z$d}Det6w(CH|{OPQN0`G#qVpa=6*}o=)tHrZbG<4EOy)pI>Oy!bFFy7&c^(F^Px}s z`q6x~bobA~r&mn`-EaPg55rFnqtQPM+07zJs4LYWBvpbiijf3jfx<940;!`>1k}D( z7?n)h+@(y`sAS==QAz2%jN)H?71l^r}SwH5g^;icR27kd$;xLtPqlOF_~Khz_QVqZA*FPsA2O^(+;IE)}Z z4AnmjKZucX$j?W-8CX{M{9ZWOqL zx;$gl#VSEPNO74^157&+e`$h?~&j_un_LzIgw!i=utenLMJy!paZ)t^%MJkaVh3%6CX5 z2z}`gF)jN@4I?>(f^n$5;*3fLuN8|k^k4SQ-!+OLisMmF1#<)?g+*GCD`LP#E#wG! z>0UP$7Du!Z%;P`{ktbt!{J5 zdY{bOVfMqDna%lf@WtY;g-WPmR>QpHRFO#tUx9ZbVDw=jQK@1LXbMZe*$2j~7+W;w z%f`k8?t#TQShl?Nd~=j4wr(lPw~BC$-LSkHI4O~{V>oe~6i<;_Rb;=TwjCLrm_k;}RU8&7Ia*G{$sUDD zvhlVA3&_*Iy2ak>;-^YLj zVD`|%Lx2I)E>I+DSCJK{4axR{tb!!F`g@_0(c%Yx!{>?zP;s;m zv60#QTD5PtH-BK49SoLtifd8DfmS=a@i0h)BRMhy@*Fu>1+|I7QISU*K$oue3zduw z3zZy2M$XTB6e`KCM91($0Sktc5SfEiB@wq0^$-L@kHJofm=!J39JYdr_bwqd7Oid~ zE5=92iUR@7;qr3^T$>r0jR_KId3-cSzMLn@13s&?8t8_{5P{l#gz4KtjI9D$1-0PL zp^;aS7f3Ce+O<$geORdEpoL26dlf4Akd12;48FTjJ5v+<8$P&-0BOigy8CQn4w_wW z0x>I!!kmtIuHt$(pQUNXBvjNd+_nHQVB=gvA|K{N1nfdZUE)?}dTgc+6(vH&1)`vI z8v(bwVMz=H!aI2nX$eshWQY2=^wJftVFls3KcY#VeSgH}Y0>s3<+KUJ-EW&f@Z#;*IAFNEKxnBEH(3 z>u?$ug^Ei=QK(`Z?1pQQ0cNT``m zMF!*qt@xe^ARk3mRH2GQ40vHHRJ-9)ATgCe6o8@@i^(VlMY1ajL{1fdL(W%L`}KLn z9feAUzbs?_KW-V_QK)3>SD})Hnl}>>ZF2aNAR?|&&5d@JXaOpo1wtaLFPrBoI#pyV zt`+6e7%ZK8@S;u?z4;#3Ty3Z%cc!syY$_*c2BeDA^{&d)O|BJPsUne3&6l}xNu?X1 z-wh{{;FcpPksKE3fm&tvhlNW1aiNkA**Qvt%kYrbP6e<}V7AiSZp_2Mug-Wus+CM~8`AQ(8<@uomOHlC~(OR9E z>pRwpiPo7FRg@|Mt&UN?$;VKUEnf6}do-_-tEh<=6LfdAPB1;gwIUXmlS@R27Qa|c zif&lhjRFC$5g1KcS>+*{#D!o;a^dBgGtIwQQDrZu8ZX_|hnQAM^|d%Ze2bMaBSxXyqG&||>btMs+#`0~V)CnrBY zNYf6c@bqQ3yw7S5F?`pqLNp%N}u^oPT_7H_irgs)9 z!M0^ZIO2_b^qUaClH#5uiTo9ei)<-dIuKgA7-vNd!Yh=r1HSu_yU6*%N6m(gtxu(m}o^smQyCBM>y7 zw}(nDrclXPp^{a82!a6Bs}&Nipi}7*4Z;p_0NF?+2NC;{cF=OMdGI%%LM2Ds;qD5R zREHuJqEw@KwUj7C=w5{CF8N4=(Wq#UpN4p|*b^#wJKf_R9xAC$iq8XdeOA0pYUT+M z40t)45CW>utcARj^gz@s!R#O5= zz{;5c^d#FNdnW&@NrzEdF4{vSQxkr)P{}IK3?L9@AdLhPi68)uNw%SMD5Wm)7V>>m z)P!~l_XefBm_j9Ehf12SLsVx)g4F~AqgsFf0wj1W;h!Y5P+l}cCG#m%a%`yN{U4!{ z)y*v#fxAxmy({J|9=cSP>h~sW-H;_nh=))YmF2g%m1qF{-2MMz4 zZI5%9Q=H2}Jk4bg4_?IJ!GVzN!-9*KK!P+1HYBJpI*bR8yZ_Txz3z^Qb{v1iJ#`#O zn~zmp%==RBy-xaT;7>3rDbMG(K~Kl1M7tt#!_-Jx0WdaDmVYdL;ZHEXn-p1Fs*+C> zqu)kRuU?Nd>K;PvEsRtw&U&-xQ0MByD9Vm{eN=O(@k3-r(7?})N?z5dM5P$I^<9k{ zvRFc0E`j@I*_}dyep%c(IM~_QUBCQv7d7OLflhXmCTzZ6)R9{2cTmvr%*+qZ)hIRz zCnr37I^u`W;VnWl8F9x`qms4UsAO7Kb25xdf>5trfI*`VX$Yoa8zvcp1O>xf3qRjM zCYEAWlpOU=)4oGUvjI{MO&?jgR7I-DLl%s|E=a~BQ#+^A$qf68j2QOO`` zpfP9|<58;_ME%Fi1`>28NhEGwpWY3T4jiLOG2W`yB+85;XztHT#LiAd0+&0?BE=M; zG1*aK{j}1{MlR}!h#!qijLay41c4dM>U+?+QORo>l?P*N!1pDeCBrMNypaWK|@%(d(Uk)k)gG^~_9)BtoJu=tiV95Y#)W zl>a@BH0qs5QKMRmmDQaOo<QQYZ{ff4~a#{1`rTyhJPny zo$eUGO=byFDb6`0cSrT1R*w@`elDR-&^^LdAsLAPO|KFkUbN+Q=z(zwJL2tmj?xwT z4z0Eg*Z$a#e{bcSaZkFY9&3m`mNd$wWe{^(VU5fPs=XA|1Ys5;*+GvW4*ZEmCHZH> z9=}k`G%6Xs+Y*8<(XByis9^yZiGhuqfD^2>eRNu^%ib;J&mfkxl{$%HlRGDj{ zqc^QYif<}=`g;|9Bpc}bww9?Gl>`wPKx_b`VG9V_36K#O z5o4rM?1q4I7t*pm_hehVc7}vo@>9ocTVU?IU2jU1_Xmb5HTa@kXze8)RC`}ifW|(gE($exw`8$&!@oZZ3 zwJS1&r|D2^vPf}BqZF;B2|*LewnY*e3`B|ut?y~pHtk8EL;RCUF^OUq#e^~P*&sZO z@U>9j=SC${H!68EZd5V|p$Y~pARz)EyAFwLK#mf0Cf#twJw6E%DPE(Z6E$}4>jd5F z>WLOAWl8mBBbxVKyo~ z4Z%~bZ*Mj3?2u0pzt z@L9+_4Q;z^iz@N%4m$ti_H2_hXZRvp+9T10Efjl4zT1Z}7khp0O*eaix# z$+qPTbggJbiYtmXMNyh(+S!k zzb9F5kjKg}F=7=-if|O+ixAvHFhuN-z4GdC)EZKIMP^ehmTkbNSoA^^)*$uc9`YK&Bh%@I^6 z$J^UtY>8gT09r zvh}kO-AD8z1Q}@1%#BK>cZoaOsAM~|U_G`ZPnOst0J4^;ibQ0|p4Yg%*2rCxy+;o%PGb!rv6G7mhrP6PB)bmnxNy-M`K?;fHRQte{@EaAnE+ z*8RM4@K?Q1*ub+w_rxKxt&{G~&XJxAM$5oqg)c_lEy7148#G5hB=%THcBJ<~rxWzp=N0q&{ibA85`@HrKx~n0iJ=Hs1w_BZ)_R!; z>jb?6CGNq4k&rdQc*$Dlr?=h7CEtOCXJm#t`F^dRC5v8b_ ziD+sFN07}x=#b|SKNi^+q9DqRN~R#h2aQUC@IQ9$*tLx$3In+B-nSWe4#sARE7BgR zGKPW2WQ!{fvSik2V*l z&C8I#EX5gwyerlR^u+nR>{qI01`?Gm>~K8lFTB-v^Z^+ zGihkISxpp`Y%GgPzP6}jb$U_BuE}_I2~jCFMAHZh)8=`K z{}+mWw==bQuPA>CnfUpoj}Qp{%{oU1Kc9yX42*~!Z<-N zpOR5DqD-7A{l`=dmPIAs9L0-@O8O~yguvbt=L<&9kzz!tzl}%<#fSz6zjs@jKI-0` zUqK`py{*_13FG>E2eeptYAhCB3<7Y?Roe=tmRg zf9Pt}Vn06$Mret~Mp5wm9}uc#QOR`|l~@!3M36vS0Krod0>gXn8p^j>we;b|qxarJ zNhFU#@C|`%)ZxM1*Zni9G>QYEoi$70i#z)J=Y3V(6(>i508CCew448?Q#pH7$JR) zmJp$%JR8|4qi)q5(PNEbC)&+_tM5;~JAVE|S95}>QOu*Dqof#3$Y&D@9@{O^(`l1L zIPolUS3qHcs``e4AEp(REWZwMMMWijz=Ii)IeIVpH^n590H%iYfPVF$rQu)uL!-g| z)<56(`Y-qQeCOT%Q>P?v_y16Ox&PKixwqRt-@h@mT`|7ZW!z8#4qw=fs;mdJ*Otb= zpLOd0YxmaL>Z_*%M(lmOb=>*1wY~T0m9GBPvtO9bR!FwO;A6YO+2m8E)KYnQa^ut# zm25AIO0Kb}r0bDHJiMS_up@~=&Lc*U)U;>2VoTbJ_#&eCP*1FJIqLV+dp7Fs%6de9 zYvm3Ey>(@4ztde2T08rXw+UT(t4r{rQGAzup5;DxHHd5g3dvK}sYfq@+W}=*b9CVuYhZN>Vxm1q2b0ZUyNMfBSrY`}_Ucz31HL zo_Ov#_o}~FI62E$A8exquFGjF>Zpn`zfSL6bk_2U-=)r*=&;jh<6Aa^CqZc zlGxth3HfJf1pF&0-DjeO(HyPHSqv1h=i6&=IwvZ;jxm9!Z zLy)B4-)!5{QAAQcR%V`?h}>OiWlr4hElKXL`aAC{c0vxSU)B)c-l2MGvjmOSy|F|k z0J#5?xC!s@lmOVjow+U65uXEz1}IVC6yXPld^`nL7Bxj2y*cgBk2hNI$%R|BKt05|o;#LC}4S~hZz94=u4#__o-9?zrPla?>WEQG9AN+i6oxBL{U;E&=5|4CYq(7`gU9#1Se_zak?gtpRJnI(}2y-xwPg;x9 zn*Q|t`>WW5uR>zx0`bc}U}%fmxtBd-=8U7j#yW=BNH8Z42jZe<%@`l+Im^Oa_4XRv#A!Nzh)ipQ>#SLd!aHAAim_5 zWU`T@o(DZ9i?O{B7i#N85U~vkA`wg>9*|4w8SL~Dy$#clLsJ9UdWA+eTV3%=dD!i6 zzhlQQNm`QnO^uEjViuBqRHph5H~pS4tWuuJpjm#^lm0%O-9{(>6!|2Nrn!}g+K%v% z&3^*Z$mDse?E%?Gdap#g5=N?kg8WpuEg3mM+9dXjPd3zE+|_mgYtz3I-bL%tZr1BI zW{Ygb#=^VZ6ZzJNFJ8QItZ-&fo)jvP4yY(`6;urLd7)W|ASttCd~coGDj(z@l!p+A zw-;0?FM!=L3sZooTD|#6RTb`%;KH?r!(7@jVavq{D6Yg8W^<^H+U9i;Q|4rH+%h0Y zDE3U`>dw2$ieKev)$WLiDfAyKCjDmxKlftgEf=3sY@l)502M%O#WSEKuo| z8RJ%5n|Yem?xmmUumkzg3@^`)RG~TV0Trc~9hsdS?z|`3RSPkAkkk=2-SWROmb;5X zhpnx9COuN*v^KqOP@RrPi)uZdi=9Tt%e+GO)LPSbba-JN$4oA?YWcT|fUZ!Lx6*Ii zFoM}C*@ZcNRQZEd*)$_x+?@Ol>bwmG>jTw5BMoX#;QBG6PmX3J0^aHffQ^Ki7++Uv z{ONN$yMGiC@K>enWT)C~^LRTHtaG?UlK3D$Nt}n0`e#r@j2r;0As#LU$#s2D+C zyx&&*zVI3CP4wVMPI6J^fPYuMii-^i5p1j*Hsg|M8{>xVF#?#&LMS2A6;bfgbo)R9 zo&A4#3hr;g@8oKiqKBUhwEEyA-a>;Ogf=sqn@PAm(>)fQ$&H$K`5`HIwuop%@eNCIs80ddh@Jc-0p6}0m()GXeX2emoB+sDYdlz9Pb3FxZZ38TWewQa4Bc9FBe`N}`-pPqx?)oJylJpGGN>PJet$fFl;CHUfdUJk%rnlhzqMrxpEX5}hR>)Y}GEEG;!sw<7_l%=<-Z+qRA zU8yVLN#l%}gssz?f=HHs!0s7sJmElkm(f7XKkg(%!u=ja!sXo!dxq5}YShN#q9{ox z*3v2)?#6+%t!3?0ts*ih_(W3lj6OaP!msw}h0Imi6Yc_%BVhGDRFz66%C$Ahw{7^z zmlB^pKLW!#5#FQ@JP-KGVWOz_p`6ItbF!MHSG|}#%#lsa;}{{;&vAzUwkPTa?wax% z26_yStBKBUZ^`$pIcSVa9W)4v-G!7i#<{a04a-F!!Vn%^JYx{4s&V9RVmssI24Txw zi42bL(r88`#_#J_GVFw@WvMRCpNRxJnqcr&-XOu1>=rW99hN8yW1{OT^no#_xT$`S zRs*##sDWO(d^L%L&zI5>5s?Xz1qdBw3FCe6x0|Jge(>1{>ZR(Y3=3I_z1JhhDwajT zA*Rb+d6=^ZA{I&p=#^ID*9Un+x(V;}@o)-~%=p#f&A~nahSdh$b>yEs%nm8Gr^@+z zfxX2rJ?T5S{jab1)#z{#tyw-hObUz=$$Ojxa`+ytV|Xn87_T=%P>lDn8pr^m_{=`Z z{uaJ)^z(6CM6f_ws->=c-ZlglD=>+tft;(Tf$~sv27T;jOXB8m0XIz#`mLZI`e&e8 zY8MWqVFJ2<(pSl`!~`{!PS6047Mg7Yp%ZmmV|hs6DMqs)`XQgSmeyQ~6%->WMgb}D z_wr;zdWX>=$K8x>Ntb4!qadt@DLQYl01^5xIz!<3W*vLJES|(@Rf^?co=Tk?DLZ<{ z@+kO?wgDw$VOM9*lUvaSF)3zRt@8G2&3w~Lc*$g^D7fE$3LwKWD){IcNyn%G;V60w zExaZXH)@vGGRxshPp=y2xZLqL*&H~P=Nt*=+IcVgr=hj&f>0^rD7`65V6$Z9@UjT>$Uuvw0#ib5RH0e4QE#r6WU^ zXRq!Rh3RaaW=)Scy?LxFvqk%JtIYjiP+IzT<3|Oj)5A(#d3I)O8WCbJwyj&s2M5(J z=aBtZf>AjW?)wjxgN@FrbR*#p02up697nPVkst%5Vz@@Vop*dNNcPBy&)24b%?Z~&i>4kk~Xn}$DSwEPIl6!#P* z+Bhu#D~`b_9=O)YxJxl!;0+p{KC~Q+pybX2=5IZ6Dy+sXzV3&YvyWM%2C&kP3f(IR z#9=0?n%vl&p*&3inr?hZmz&4iZ?3{i#e(eTk9;*jaI z9)D80R9te5{ZuU9%4=tbdx;Yy7)eb}b%^@e$6JP;YTnUKX!tuMvbGK{AT16N?$rdT zC(gp$+$q%FkyLQRJ*>^pK62Hpg2v%6!4Qaf4Zg=pzO1UyG!lCiU0lc$;nWfC_a-Gs z#85=5P5`GYtFqbqiL}&M7 zP&Qs57YvzRi{H>mm8=5nvL8E+sCw&Y@@vLz;(z^sjo{Ivd1L7ORfw9cOnaU~;bT1! zH9i2Akub&jDxNyA-j&I#Io{u@&a$d(L!GAfcMoSb8gCqs7LM+XPcEj< zDpga8ot_J1TSGgufqYTJ2?m#WneIY-M)h=osXT_vMQa|(kFLsmzLQyq$$2WFIpMFxWlPrMX06&@v5);FeRpS>ARApEDrCpww%P|iK&LVe`Oev26 z2Xg4!hF+^VzdQKkzo`5mx24dO{E@F)E`>-41Hh*&e13oZY_+_*3 z>zI1{b&7IvP#=m-t`$a)1G~=sAw0-SeLB~7JV~F$+B|DH<*$v71miMh_G;o_P|l<< z>%#ePm;qs0lcf*!k;@P}@`lh)kKiIrj9kg)3P-ms_10-Gv>(qR zR!>jkduy*V@6Aj2I3DsOd-)VG{N0P^RD4luorDv+c1A8P-8Xnb(HXaF^9Z27GF_Xb z(C~D}+NUVAJ;R}K(j?WqAFY+?o+fY061 zxJM{}>anGQpU#Y5_)$YI4?}N1;&hs(^mF%*6#dR74-t;}0~MzE9LKkEs-Cg5p%nc% zA|~hwnogK)J|l1z&>)!Vk`_sx0juK1s3#6L6q)pzM|+{fA+~q)Q-7)I6dX*_ZOr3$LBQkqUS9YA*&u` zEx9!ZN=r%z@eZYLkn(M_aKM}-ss`? z9^3i+mH<+iHiD9!0wKBucA|;!kTxkP*~5?Wtj){Iqo15w9l!ATu4#LkWDHo~(Xj;R zhCD~KUu-e`w*4IYvU19@I~355IY$FUG>)U+2Oj$kuQ_#vI8E`Q$|!T&MBY`Go( z`V)^1XpZIGu0n56EU@xp8>M#LRu>KFF!lY2)?PHw7r*@#aY%F<8*3&>=ngI`K$*`` zkLrm%=YBfP@tpuD$L1x*ah*cXqWAQ1re ziSaK1nfwJ;N7jqtz|R&M&*-%Gx23hvM^#Nqnl(jZ3^=g2Nhp4y1M2eDH=g-V>6^_B ze!5=vxqMF?OT8#1FDtM~kM5qv%;47!Q-@U>9`sHS65+aS{#AjO#8gKLQP-eo6hos$ zG2#neNH{u1D=cw_O%p6W6GF$y0%`97UhJk*kcj$t`MAEs^Rt8O%W%5hTzN9A*dNtg zk3ob|$6Kb9opHI1sQ*RKK| zKHLCHc~=D(w|45N8jKxQL*_FfhVtlleL}fuDE%BQp*aqtORyhO z@dQq1`0pFkUQgws6FGj}?1z63N}LXqTo51{F8}aA<-k5*hAdQ-kL@TL{2SsH-l0Lp zCE4yq#5>&3vTg5VIo{9<u=$xB0R zNu#P==KU5`eFM^D_^ZJ90`N#FKKg?4ykg4#%zSHMsp!>l(3oaTvUAyS5RjI=pyut9 zqKlUy+?>FfNK>d5SI{XwQFKG%HsPwvuG!B~*Fo=@O~(<1YQTb*g&amn1DW0q2m!&d zV1$k!A&N3UVqEy?Q+Y`SX4#HSUB>?s-npm*1Y-t9mK>%zpw=(BA4j_RU(GS`()e^n zl}T2??h#N6<3%S}X^siC)HCQU@*DmQ-CJxHd&yYzQ!DuuL(rQ>dEHe-gpM+SS!M4f zAR_9;to;Os)&OW3hoPYMxwzZb^qqVe-2ROmzg)#-sEe1%9SLdz1b4Ux{731uRWL6nm1D3E$B8eF+~!dazvi? z?cT00JCCAi<+JP!-r8HB!#WWBHW~_Q&;&fi0eJhz2Ca(}u3-F0_K!j*-271Ct-I|C zUi<1dj=n;Iw9l{|ahjmNi-nxL7t7bXze;MzlCc{RD&1NKh?Qz3b&qpiWv1Rzli2@) z0dYttH|tLrg+9xaw$wNxAtiprx9FGf!b1~5b5He;?gDiLH5dICfQnE{1|yI-Mz2Rl zXaR!Dl8io7{qVwS(fwulZ&?}!1=TtefpoP)LO|89hQ$G#b&=k53|M@VchCCqbFzb7 zIW)cNdyC>WAIDnn=s(W9lHAt{I6#yj6cj@U8=Vkwj|o`6!`tDtZbqKG!(29TfU<{4 zV!Rym3yRzXO7IT*4WWp*Kxe)^Gzunn;3~lHkjz^H(EJA`xR&SiSjIz__;~mY157N^ zg~sp^E&~dJ*%Nl~2YmF+<$cU#0b!IEmK_9Acn!u;!s;?|KzFRqchQ&44;eIj#x^Ae z(a|FOfl0(BX`NhLk7%J2zg!YQMHUu)K^1t-VMJ0n>rOk>wDjn6DCmUff94@@g!(*d zxCvj#7zZb+LZwL}badsU$V+qtn4pl?m^MCoz&`=P^lBPt5IUjH2s{_8oweivA3fja z$vha+kc|P$XoMJq5RPLKG(oMmMw{@O2&qzR2P)-lxdl}m^CnGfYkzO8s*PQ#h?clUzQ*!kS8R?z{c;mMy{ z1x2lDPFkkA1`?F$P5^NX6vX&v&zz~ESxt*r${hL#SB9AS@Yi9oW^EIK(c#n@=x$kz zq5#FimtFkT1k@3OH@XO&AhjMt9A?-J5vOE?w5O9>iZO8MeTAq?is39Xd}@4;pH-U! z%CR*Jon|mb*%xx?Y>)DALKP^pN=q!n`T zuDX%|$l3^%zJgvAI84(hza|GX3T;wv>7Dl=*qim(4{Z@lF(JN2`&;g3`+YsV{VMyC ze1%}~8r_=FNt@J=9o=6dv21iUz+IAp+cqTHHlHf%6E3;rH5pk0V>oh#b~z93($<$q znx3gk%8wkx)1J`xLeu!^39$K6FN=m#i9$+xG(p~PwgnJz4$0luGYaVx1u?0fOfqh(^5(ZI7el|Rmm?LJ2Q#nIjE zqKV0T8yro-|B1!I42iLUoKPWj0zAK@;WeXi05^^}d%~`Ki0+$-Xa)M`%sZL~gD+oR zJzw!l?v0%wAIf!S3|Q70UtT`f~Xe z1fFLiYYvsy(zos`!(q7K@yCB{Odj#)bb2M(-~cscVS0Yix{TBii>y0HYBQv^l0Z$>fKqqdyg1G*SYU}?W-5nn z^d1wVn!nNRHWhQ=R-9P+EcoBvwi}(RYGq0_?+mBYWx#y@Lr25;H%}d(Wtc*1-p5u_ zet)9vpB3cnOpQ6ZD@hthUDyaBos>fx-3KU`Bl&DqO9*{A6}Cv+u3xRTIxS(RCj6Hs zK?hpHXQohm@w6?(bzDSi_3@$~Q=_A0usrvZ49LlUy$bDB*mO3J{rK_ty-MZnPw3+2 z1;btbamUsRiRX?4MeuD@_$FlpfkRgzzbDu%X-4Jj=Z#cDk_bB{PLLa{&7@5rAljvb z5J(Kc#XbjO2XqLz{(J)qvhGBQr(q<}BG^n-g!id7%AV7hWL(wwp0k{Nb(FxCzp&Ze zh~d1vpw^v48J+^LJhPY~(Bz(X*xs^?9NKW6XU&4kn_@qSQD`b)ig-pV??$=!GycsA z7!5?hSJiPCLM;q|Js7|}RrdKJgodwX;-djjP(pz51S%}6d!UVQfqpz~b_gewkY(a$ zv=~dwQ8ozAFIw|GG_EaA%Bj?^&H~WF%CphG5-q%3_|XlYjjZo~AJQL-a(j523{v1p z1o)d{17v2z3h+~nO5p$^1h<;nLx{p504$yWZgU{D`aH`gU=p8q?WAnQMg#RYLKCR% z^~SUpzK4FDOp|>q+V3^%qM9}_%jCGbFI-e-Zo%GqaV|Yb?h?a$ax6n5$+RRgl;P3b z&&rcN9hji(P1jr9-Q=w~(vXS=#=*y59hib4HF0jje2BQ}ULit0W&@<|Dy48Rf$q{g zN;kx-2se^cp;dbb0~08eToIa28dX-WHMUpTlTjugOCxqRM0=bLKk3TyYUk69sfnxC83iQR+LKr#5} z0vEaiG6&qivc|?}!?iyMMSDqTZDizt&i3I<BI4d}0`utzNndoUq!eO%>UL6ca?L|4#4OK(X6i$fruka%)lja;%FBxMF#HT9)g5OPXdAhKd_4k{Zu*#15Z=IR3ACghx z01BB`cLkWVy#5y~l|MpuJzk1ZmyM-@g6NmQY(3g`mYHCPEPy**zLb-v&7Jq7J1<+b z3i#pXjFWn>4GUpF6vXBj&G|dwzWC1G&^tZ6QM7Ybj>a%bIZ<5#CCL5zaT9%5D}50T z@P`|KrJMffCP44~E~-{dZX?Z~eE!YKJL39UnvE+W{L_@Cm+z!XmBk*K`-1g3LZLS~ zWf!k3QUcFeV-8X(SAH=RSbX(r=cjOb8RpC--|FYhX8i}(ro75~qj0mkZ9F+B{rj1> z*T%yrx%-$Y91@9}ogo||rxIcS!=#>6B@JZPayR8ve*iFNlly)f-FcLag65#H&3QhQ zK)uN5wN{s!ct8hKTpO;8cXE>kWu5vqOgxpKZ+*zqI&(Q6D?q_)vv?xEr3z6@;u z#Gtd$eT+)jKPmT)u*=zKJc*7j6y%9sE+mj)Jdm+Ryw>R?!v@bQ`?*KeL|fE zA*Bf{!WTXy*tMIhgQ&X1uCvR2LfrM=B-||F$OFq}0X+vvLOfk7#tYGz>WLE#6>%$Z zAlT!vPkfOqHdSYl_|A&mvCq`f$AOFWe($~S>1KiVNW4LZqS>$= z(NRkrPD_>_BK#jk>|*k^#~2M4_$R2H3BF-s#@0%#C6+e*sw8NE@ z0yc$I)X=Os7>l2B@b1nhe7{tmKG}w7%~t~&a@cWO5Vd2g6JB-8PgV~D>4#t7AnGb_ zJ^TMZNoge<=t_t|&d18pZ*Z7HGt*rc3u60^f4Y_2ni8HELVVRH23?{C2`F)#)7q3^ zpQC?#h~*zKJnH4t6Vb+%=8An_&X@jzo`tQt5eim&Gc-Y4*>VXS=cOT`PSMK{ z>8owf*G=hmG}CFHRX$xRO{8td=*r`C=u4dt>tD4hJ3N89s#Vok|@PP9Kod&}%@ z$VUBwyW&~bUpHGfE6$5lMG}NBjy0&QJL$Cg<=7vVwE^wqjEvI|EkZ@c>CKO|2CdA( z$^+Va_aU(#IRwv$88sz!kN|6ebb?d7Y+G)^3uJ&H2sGFV$dAy8-i9G@A!xlVivhT} zsbjYDgN&BeuTSyz?Gs(4s2|5o@a-)yZfF4_Cn3PaK`&pq5gOc!C_|3_s(AT`A71aO?=Fj~T!XG0#$ zPwpCBh__z`EgC2SY!DO$R2O=p6d%Qji@(BVt2_9k;w6NFpw<;n;XHX1=NI%Vi(01h)o zV?pJUWuuFGcgM4e%%1=N2R{xj$LdW-8 zSMOg|jQQTGvhsq;qEDzLU4P@nU#aAcMTsRa6_+DKV*c)UOYjvl*c&YGW!UwwX+IcpdIn|=KlWz8A%DT+;}Q^Dm&_B;FB zMKj}X>Fs**h~DR&-7>mM%u!`z|2 zljyk%@2Td7M$e%1LCU`Ex^LW2<{YI|Lj-p8ukCvqe~G~D2(CD~Ucl(N_1MrQ2UM4M z)rNjvv9ECF*L$rF2*^vfuDxDwRgm=#XIeIO*@z(Wd;t1lp6Z~otnYK25Xk;v# z1fdJSuJ-?z+By{4X5o7&^EPE!lt(GK>bx;$p6RDT`J=ibIUuNJ$r&cF23*lk~i=HX|>M4?qZ zZ)}qNxDUlue$MHs*H(wQL>L)Hwa(MgLk_KOXOp$~yn2X0-m-oF zZ+1-BRds^1%upkA8UccLH{#&c^_=zU=5QO3nEoB5hiI!9@XZTk@5e+@<^57HT`&0Q zI5*i%&!b$1&@WH-d94mgS@MLY(pw=XAe{fLNnCpDFS{~^0gV81F)f=^DRq6=Xb2bL z$m88ujU_yZkH2fUYMP!@HVasPa2GMSzB#*(`5z^AN65<#p;Haf!U1H}`>MckVjnXK zPD6Jdx4oR(r#D&lfwm&|N?{phcVD5p`XAc>lgkm4JCyQA4gLo-PJZ{|rjW?C*r!tT zyLlS6XaQx@Du+Q6oII#2~`Zs0Cz>eE5LXF1^x?liiZyfw% zx8Vijd-Sv9_tXEuhG4|SaG2#Zd?6w5?Rrx{AP&d6?wr`ENFV6yU8wu{jecC)L-)+4 zYaqA42V}h^7J9Z>#C1^`Vx}*Lh%+prl;yYAp8ODuc(HHR3ZdHP#IX!&oZXu1=ePNm zq@-IALM4`_b)P%$JlW=6iIn!+bpO52YP$b2rnL z!{eZI(?2Dgy86cCDEGW+;X7VF^B*I$Ff{q-6k zbF1P!K(&mv_ibiYc2WR_5BiW$DPv~trGg1kuafJ)iBJOo6xceQlhZ2 z_yg#@2-8`5_8XJuQ`#RGv<+1{rhAIPCz=r|Q6|MeU_FjOy$Sg20pG=}gtHhClY*e( z6|3(TQD)Q66)5^-w5KxE+0wTX?==(ITk%8qA3f`L^jJ)C%Zw|Q((PRYoaY?-#^fC_ z)`3u6vQ(tKajXiWjmVc1NSG7ogZCF6=i`A}$6j5n8Qmg^akB}N-DI4&rOf%%3UUu< z34ijx6Vkm;IFx)&MYHhc<*Lp1j|Rk#EeqvLComSN4UW-t%BqJR(Tn3%+XT%u?A=`P=297`B2#{#;H!9Xn`KHhCG+A>#ca?jOQz^0=u~ zU!-+8W4@k_)M`h>T}1Kl`kjm0B`f8RM}xf@SLaoVjqavRtM}{Z2P~%b)0d4r7B7<- zkEKG*hpIIfzS2JX{z<9hsPA7GQ+Qfq`!|taD?`EHK3TxL$$?06r3j&Ab4K1v5@{%D zK*@sdNkp#?GK_XX4N|U@lDfWh8@LEBFE;w1dptYd`!I&m;^8fjrP9hAb_4)=Nq!qT z2|4V|CEH zJzjG(U_&qI%pA#URT$dOto~Ii2AXOm2q@DEdYmeg$`;>)TongzGD6HBiB#Ug{zQz8 zau~uSJu+cIlI&aGv|Q_9qDiaZNJqXDZ$3;s-z=I2GHrbe>sCnU=w$x%pqNm0!ism0 zfs9L#K{AXa(9xJH&Glr|>Uipfu7EN-=zF>sUO); zhPh}r5%F+1n(%Q6IaPWj{MY22_7MFpg@A#7Ai(!j8+q^VObPQ*@Nvo`A&>WBOdDz- zb%+gyV6Wg9*zg!E+Dv%-O)B7#rmIci(Kqys1r0>!Up3*~fdV z=f9oQbC7!FR>#$?S-}K!bFfS;FvmN5NkWIphuHuj`|}a-Cjf}~Hu|au7RIs`YE?&s zTrN6AUCZF3CuwfNML#e>FIHf~7=CVT`*W9c4s*JS+mJy57HFg4tBgp#gyYUsAE+|= zGj#cT>UWqHeYs?$+*ql>pa~VWoB<-NuK`-j1AJ2DKYvIlb~u#9tnt^}z#glEIF`CU z_~Zlb#lU}1V6SetkoNqG4u-Lnx0iT>qn=(dO;LbaW*!r+_9vs;nyW^uMd z;H7IR0r?w6qnMBc;nEeS+r_0%kTKta>#d_9pUdLbH9%4Xk=xCfyvPVCoH|I;C|(#( z@=uojjG-L|D1aGaiG;UA^8FYIWx1J}0w}A!5*BDs`49!KFLPtOxO6N1x<_Rbd;}?n zj}A)xvh)#K1(tqRVGgBy4dPt2oLKMga0c1VtD@p#8z+c_O@~JYG{z z6~qDUUhkd5l1!@va2fc9o?W$FH^q%=?55-a_&jutu^`EIC;zKvpSe4Ci2>Gret%t= zAX}dokC%(8?jC0q0ZSi9`Dk8#ahwR94ooVf$*J;B%Hd1kKrZidaZPzKBoobaoT#H+ z=Bi|q3>+0_0_BpTk?XhSHt)wyEd4^)#d;Nd^f}@f@XCgMQwLpe;(H$DV_vF)u#$Mq zhjwtP=nQBd+_n|;K z&&#=)XhNg6lD$Bq6q4?DVHQ(iR^|}w@Fk~uC;^RYi&EKk_J4k2dS3*|W=mMo0+GW` zZW=V1svf}vs)EcfUwj!i&=HS-OUx`ZJl}yI0RI>^coClpNw@Q@79ImhQTz+5HsG}< zh3sS#OYL!2st0)3?D)1w-#yAwiunQ4iKhl}FQEo;kk<#?TDq>&Jsx*^+UJTFT%Uh7 zsS}z0JL>~w6?$b%d2SlY4Vivvpd%OqR}QmI&BrX0APpM~;xKv48lWHmWH3abm$`Au z@c?*Cr=8U=Xb~444+?D#*!^tcXx4 z9rfj7LSw%ISJ*#_J+Vco>$cnT6z2nY^$^|k6X?8CmpbtQrb^2?J&Rbw9?vFQwB^3> zKo`3my%RE_hQX7M^xH#Bk_M=n1;W}=X{MWx!M^fRMs|HuQ@}^}@jZx2@A_5b&QFe| zz;xR%*h-QeSdI{%qn$^Q*fTU$c~uib*l7)Cc~yXB`|`qrs7zUaotvWMfF(ZK8YDmS z;3*rhW7H$1iiH?_0{rC40ZF}JoPyjh0Y+^1HCo)gkDi$f@qNS@$GJ%eU z8`C5umr?(+QcdlHBj9~Pql#dH(Pqm7yy~#O3BhZAjeyUH1wZ;yM|YE#SoPEK zPgJFdA@&&P4?IU}yoQ&uHw+bo@^W^GExzB|Mf_}Ync#xB`ZFJ=8-E1lD80Qzs<;U~ShBK&>e3O^!^Org|yDtja zj=V@i9RjvBK)=ugm*{;L@=X5>%@ZZqPVw_1&m@hho_#gWWO$tUQAjh__pwnuugVpA zBtQze9Neo%K|`o%^TMl19Gf>*qLfV23?IpKwZ5L|(JdWo&aP>lhd0QPxb}wpfU*5V zD@GO9%Y91cs}>Oz4Tm2{8^nbOs$6e-0`Wcby-I6cRkyGN^O%x-1T^;e97IFMHO~L? zq%2>#H)$W39Igd5e%WsC&uz+bIt0xP?p05M7FW5gul`*2GoUoejgC#Jg0-kwSx>2h zd@Eh7=r&|yP9|^KnomI%bzjxM$+kvYMX#OD*h^#?`MLYF<=(q0nDNr$L)7J@ zXWk-x|M07u#bmVkd*Ex&@$?6h?R?=sLALa1I1!XSM;5Wno@khA82T1tu1INUeR8kE zgZagyw({W^@_+4KB_E14&X;7mUmsNo#3T*fdA=n z9bz(RIM!SP)FwEj$Rh}VL? z{MJq=h(&LUH2gkRLaIGq6)_R7^b9!yW?e8o5%W-1O_l*jL*TsULt}o|>EgF+zHmSj zX3k$)={-}Zf*-zw(wqEhCZF&7F}>r?dZ^6>{FDcq0=kPVUo`6dez`qscvm73M{p@D zkfmqw*=jAXdd5Y5m1%%HkhTa>R#8R$4Ry5-gmB`BqKq^g7dHTYkP>yaRS z2ISoKkJHg4LNnQaiir$*98K3?BKI%cjKYT3tmjE;S2d1263V6niZDYlMQSg)8RCD= zTApQ~cH2CiY)ulK?#Bgf1W#wp9UJiuW;{4t?{7R$fU`9}p{G9DxoOn`*)w{U)Qc9; z@Rk+Tw)4?UT(}irj^z^JG7wkd5sM?eTn}oQXuQG=ydHpCPD2dN1Z#mLjxv+qE@>US zDn0Wl#ZTlufJ}d8lgw8AU?+KGl6!{*JMhnkGY*#j1fM)u4a0R@2mX{JzX!&0|$xg!1DdUAM0&L&qlMfug)nqIa(~snJ7!7gFjSHhlpu`{w&YzuRWW5O7+GPW5s-D z<;%SSijj{=5IFG;v&h%PQ8w&PCDL(I2QhD|kZX^QYNtdvzN+p|{ll0+=73DaE!um6 z9E^{eDJ?#Cc&e;z{IpKf7aLae!q6$ri~dy%9QjL8%^}yJP!e=YzmfY%c4z$3-f%aQ z2%-Q-Bl0?wKv?Kjo?74GocitQG53pAIk2-O^NHNS)}ez`{@3wU6&1l*+n?R5$A8G3 z{c{$$X>b+^c`p8!YUrDD61{89N*0!{5r7@A|K;BGbA`G0`Ot`@F3aS`nEXz?)85Iy zgW!f8>6~5iYN~6qr0>JIx}P?q<6q{i{k7kiT;FP;eZ6uM@cen}Pc86zKe+tq=RNM7b@2GoHFGY@eG^k%DytHpN6fNzz+S{D#FVNP1_s|QS zY-C038>J{Nr=83!WyUU`>gVX4HfB?!URvg z`X+UdJBIIhYRrIPw5L&XMQ@TPdA@$m`&aR|)9~-10%Ixmzm`A4!ddeBBPhJ{V3;HH zBUP53jc2lhls zNG*gRJ3M~FT zLu{Xgz_*(>XM}6Y;AxcZ@UfO_=>97*0S@)J5kcT%GnR4uXJg4d%WI~Af)XZ>tC{Yb z3_;)+e{um74?H4QfpYBHLC_r?86BdY9fIL>?tO+HFl~ifS0<5Arp;=)$7a!NH3>h8 z@2Lvxr`CfL@6UNdt1^=_UGs5{2K(@mw<1uXAjy;m1#iIci7aOlsLW`nLTHYtMN2%9 zD0BDQzl@L7MtB-F9;UOW{WRFW!SN{XaG|N7C<7cEA&*{eh6Vj40cmO(Z&#NS8S=%S-E7IvrQ` z2@%k?Ib$mG#v8XzrCb9*O>j&w#_rcEL5J* z6`KDTSvVg4GY@BRl>YdRFrp=Xz@{nA2|4P#YJUrKz?y1^{-s(-rk5u5Pome8`LlMH z%U<<;=Bvomk7s1^DifITRq_1F#6^d<5p3V7il}7HmAsAC&cRk9H;SNmIpbIXbxo+k zTz^GvuCqCsWfEi)`_kbcCZ2TFt`u#vc(70mxnpo942k5K%(qyL4&`u;TmQu?uY`&x zVy#Gl=P$s`pT7%L$C|=#mwhM>O%ZI&t~Eq{EN*kXe@Xp#EaOvF?83|~!cPaPr&+1~ HB=Y|Nu1k7! literal 68094 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 a*M0@_FaZA0nV?eu0000)QG diff --git a/Documentation/res/wechat.png b/Documentation/res/wechat.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f8b6777729c2754a31048ed73e17a8a6845000 GIT binary patch literal 11704 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 { - "m_TextBackgroundColor" , + return new List + { + "m_TextBackgroundColor", "m_LineLength", "m_SplitLineLength", }; diff --git a/Editor/ChildComponents/DebugInfoDrawer.cs b/Editor/ChildComponents/DebugInfoDrawer.cs index 5159dec1..af03faf3 100644 --- a/Editor/ChildComponents/DebugInfoDrawer.cs +++ b/Editor/ChildComponents/DebugInfoDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/ChildComponents/EmphasisStyleDrawer.cs b/Editor/ChildComponents/EmphasisStyleDrawer.cs index 509f65c9..89377f3d 100644 --- a/Editor/ChildComponents/EmphasisStyleDrawer.cs +++ b/Editor/ChildComponents/EmphasisStyleDrawer.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -23,4 +22,22 @@ namespace XCharts.Editor } } } + + [CustomPropertyDrawer(typeof(EmphasisItemStyle), true)] + public class EmphasisItemStyleDrawer : ItemStyleDrawer + { + public override string ClassName { get { return "EmphasisItemStyle"; } } + } + + [CustomPropertyDrawer(typeof(EmphasisLabelStyle), true)] + public class EmphasisLabelStyleDrawer : LabelStyleDrawer + { + public override string ClassName { get { return "EmphasisLabel"; } } + } + + [CustomPropertyDrawer(typeof(EmphasisLabelLine), true)] + public class EmphasisLabelLineDrawer : LabelLineDrawer + { + public override string ClassName { get { return "EmphasisLabelLine"; } } + } } \ No newline at end of file diff --git a/Editor/ChildComponents/IconStyleDrawer.cs b/Editor/ChildComponents/IconStyleDrawer.cs index 803179d5..2f2e1a6f 100644 --- a/Editor/ChildComponents/IconStyleDrawer.cs +++ b/Editor/ChildComponents/IconStyleDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/ChildComponents/ImageStyleDrawer.cs b/Editor/ChildComponents/ImageStyleDrawer.cs index 973d923d..8ad71d43 100644 --- a/Editor/ChildComponents/ImageStyleDrawer.cs +++ b/Editor/ChildComponents/ImageStyleDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/ChildComponents/ItemStyleDrawer.cs b/Editor/ChildComponents/ItemStyleDrawer.cs index d41dd7ac..50978b07 100644 --- a/Editor/ChildComponents/ItemStyleDrawer.cs +++ b/Editor/ChildComponents/ItemStyleDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/ChildComponents/LabelLineDrawer.cs b/Editor/ChildComponents/LabelLineDrawer.cs index 3888cbef..dcd2d6c3 100644 --- a/Editor/ChildComponents/LabelLineDrawer.cs +++ b/Editor/ChildComponents/LabelLineDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/ChildComponents/LabelStyleDrawer.cs b/Editor/ChildComponents/LabelStyleDrawer.cs index 04117877..9ead373a 100644 --- a/Editor/ChildComponents/LabelStyleDrawer.cs +++ b/Editor/ChildComponents/LabelStyleDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; @@ -28,6 +27,7 @@ namespace XCharts.Editor PropertyField(prop, "m_Background"); PropertyField(prop, "m_TextStyle"); PropertyField(prop, "m_TextPadding"); + PropertyField(prop, "m_TextLimit"); --EditorGUI.indentLevel; } } diff --git a/Editor/ChildComponents/LevelStyleDrawer.cs b/Editor/ChildComponents/LevelStyleDrawer.cs index 38fb60aa..8879a5e7 100644 --- a/Editor/ChildComponents/LevelStyleDrawer.cs +++ b/Editor/ChildComponents/LevelStyleDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/ChildComponents/LineArrowDrawer.cs b/Editor/ChildComponents/LineArrowDrawer.cs index 35929365..031498fa 100644 --- a/Editor/ChildComponents/LineArrowDrawer.cs +++ b/Editor/ChildComponents/LineArrowDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; @@ -24,7 +23,7 @@ namespace XCharts.Editor } } } - + [CustomPropertyDrawer(typeof(LineArrow), true)] public class LineArrowStyleDrawer : BasePropertyDrawer { diff --git a/Editor/ChildComponents/LineDrawer.cs b/Editor/ChildComponents/LineDrawer.cs index e88a8cd8..b3d4896d 100644 --- a/Editor/ChildComponents/LineDrawer.cs +++ b/Editor/ChildComponents/LineDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; @@ -47,6 +46,7 @@ namespace XCharts.Editor PropertyField(prop, "m_AutoColor"); } } + [CustomPropertyDrawer(typeof(AxisTick), true)] public class AxisTickDrawer : BaseLineDrawer { diff --git a/Editor/ChildComponents/LineStyleDrawer.cs b/Editor/ChildComponents/LineStyleDrawer.cs index 623a5a18..17d6facb 100644 --- a/Editor/ChildComponents/LineStyleDrawer.cs +++ b/Editor/ChildComponents/LineStyleDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/ChildComponents/LocationDrawer.cs b/Editor/ChildComponents/LocationDrawer.cs index dd279697..2cfe5963 100644 --- a/Editor/ChildComponents/LocationDrawer.cs +++ b/Editor/ChildComponents/LocationDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/ChildComponents/SerieDataBaseInfoDrawer.cs b/Editor/ChildComponents/SerieDataBaseInfoDrawer.cs deleted file mode 100644 index 87673c5f..00000000 --- a/Editor/ChildComponents/SerieDataBaseInfoDrawer.cs +++ /dev/null @@ -1,25 +0,0 @@ - -using UnityEditor; -using UnityEngine; -using XCharts.Runtime; - -namespace XCharts.Editor -{ - [CustomPropertyDrawer(typeof(SerieDataBaseInfo), true)] - public class SerieDataBaseInfoDrawer : BasePropertyDrawer - { - public override string ClassName { get { return "BaseInfo"; } } - public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label) - { - base.OnGUI(pos, prop, label); - if (MakeComponentFoldout(prop, "m_Show", false)) - { - ++EditorGUI.indentLevel; - PropertyField(prop, "m_Ignore"); - PropertyField(prop, "m_Selected"); - PropertyField(prop, "m_Radius"); - --EditorGUI.indentLevel; - } - } - } -} \ No newline at end of file diff --git a/Editor/ChildComponents/SerieSymbolDrawer.cs b/Editor/ChildComponents/SerieSymbolDrawer.cs index dac474db..0f3e214a 100644 --- a/Editor/ChildComponents/SerieSymbolDrawer.cs +++ b/Editor/ChildComponents/SerieSymbolDrawer.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -16,7 +15,7 @@ namespace XCharts.Editor if (MakeComponentFoldout(prop, "m_Show", true)) { ++EditorGUI.indentLevel; - var type = (SymbolType)prop.FindPropertyRelative("m_Type").enumValueIndex; + var type = (SymbolType) prop.FindPropertyRelative("m_Type").enumValueIndex; PropertyField(prop, "m_Type"); if (type == SymbolType.Custom) { @@ -28,7 +27,7 @@ namespace XCharts.Editor } PropertyField(prop, "m_Gap"); PropertyField(prop, "m_SizeType"); - switch ((SymbolSizeType)prop.FindPropertyRelative("m_SizeType").enumValueIndex) + switch ((SymbolSizeType) prop.FindPropertyRelative("m_SizeType").enumValueIndex) { case SymbolSizeType.Custom: PropertyField(prop, "m_Size"); diff --git a/Editor/ChildComponents/SettingsDrawer.cs b/Editor/ChildComponents/SettingsDrawer.cs index db2a1c70..ac798997 100644 --- a/Editor/ChildComponents/SettingsDrawer.cs +++ b/Editor/ChildComponents/SettingsDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; @@ -13,10 +12,10 @@ namespace XCharts.Editor { base.OnGUI(pos, prop, label); if (MakeComponentFoldout(prop, "m_Show", false, new HeaderMenuInfo("Reset", () => - { - var chart = prop.serializedObject.targetObject as BaseChart; - chart.settings.Reset(); - }))) + { + var chart = prop.serializedObject.targetObject as BaseChart; + chart.settings.Reset(); + }))) { ++EditorGUI.indentLevel; PropertyField(prop, "m_ReversePainter"); diff --git a/Editor/ChildComponents/SymbolStyleDrawer.cs b/Editor/ChildComponents/SymbolStyleDrawer.cs index fcd854bc..d30ac905 100644 --- a/Editor/ChildComponents/SymbolStyleDrawer.cs +++ b/Editor/ChildComponents/SymbolStyleDrawer.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -16,7 +15,7 @@ namespace XCharts.Editor if (MakeComponentFoldout(prop, "m_Show", true)) { ++EditorGUI.indentLevel; - var type = (SymbolType)prop.FindPropertyRelative("m_Type").enumValueIndex; + var type = (SymbolType) prop.FindPropertyRelative("m_Type").enumValueIndex; PropertyField(prop, "m_Type"); if (type == SymbolType.Custom) { diff --git a/Editor/ChildComponents/TextLimitDrawer.cs b/Editor/ChildComponents/TextLimitDrawer.cs index bcbdfdb4..cbc0bbf3 100644 --- a/Editor/ChildComponents/TextLimitDrawer.cs +++ b/Editor/ChildComponents/TextLimitDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/ChildComponents/TextPaddingDrawer.cs b/Editor/ChildComponents/TextPaddingDrawer.cs index e6821a40..608605d5 100644 --- a/Editor/ChildComponents/TextPaddingDrawer.cs +++ b/Editor/ChildComponents/TextPaddingDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/ChildComponents/TextStyleDrawer.cs b/Editor/ChildComponents/TextStyleDrawer.cs index 800a58f0..edaf6d0e 100644 --- a/Editor/ChildComponents/TextStyleDrawer.cs +++ b/Editor/ChildComponents/TextStyleDrawer.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; #if dUI_TextMeshPro diff --git a/Editor/ChildComponents/ThemeDrawer.cs b/Editor/ChildComponents/ThemeDrawer.cs index f5743e3e..573fb02d 100644 --- a/Editor/ChildComponents/ThemeDrawer.cs +++ b/Editor/ChildComponents/ThemeDrawer.cs @@ -1,4 +1,3 @@ - using System.IO; using UnityEditor; using UnityEngine; @@ -20,17 +19,17 @@ namespace XCharts.Editor var defaultX = pos.x; var chart = prop.serializedObject.targetObject as BaseChart; if (MakeComponentFoldout(prop, "m_Show", false, new HeaderMenuInfo("Reset|Reset to theme default color", () => - { - chart.theme.sharedTheme.ResetTheme(); - chart.RefreshAllComponent(); - }), new HeaderMenuInfo("Export|Export theme to asset for a new theme", () => - { - ExportThemeWindow.target = chart; - EditorWindow.GetWindow(typeof(ExportThemeWindow)); - }), new HeaderMenuInfo("Sync color to custom|Sync shared theme color to custom color", () => - { - chart.theme.SyncSharedThemeColorToCustom(); - }))) + { + chart.theme.sharedTheme.ResetTheme(); + chart.RefreshAllComponent(); + }), new HeaderMenuInfo("Export|Export theme to asset for a new theme", () => + { + ExportThemeWindow.target = chart; + EditorWindow.GetWindow(typeof(ExportThemeWindow)); + }), new HeaderMenuInfo("Sync color to custom|Sync shared theme color to custom color", () => + { + chart.theme.SyncSharedThemeColorToCustom(); + }))) { ++EditorGUI.indentLevel; var chartNameList = XCThemeMgr.GetAllThemeNames(); @@ -46,12 +45,12 @@ namespace XCharts.Editor PropertyField(prop, "m_SharedTheme"); PropertyField(prop, "m_TransparentBackground"); PropertyField(prop, "m_EnableCustomTheme"); - using (new EditorGUI.DisabledScope(!prop.FindPropertyRelative("m_EnableCustomTheme").boolValue)) - { - PropertyField(prop, "m_CustomBackgroundColor"); - PropertyField(prop, "m_CustomColorPalette"); - } - --EditorGUI.indentLevel; + using(new EditorGUI.DisabledScope(!prop.FindPropertyRelative("m_EnableCustomTheme").boolValue)) + { + PropertyField(prop, "m_CustomBackgroundColor"); + PropertyField(prop, "m_CustomColorPalette"); + } + --EditorGUI.indentLevel; } } @@ -71,7 +70,7 @@ namespace XCharts.Editor private string m_ChartName; static void Init() { - window = (ExportThemeWindow)EditorWindow.GetWindow(typeof(ExportThemeWindow), false, "Export Theme", true); + window = (ExportThemeWindow) EditorWindow.GetWindow(typeof(ExportThemeWindow), false, "Export Theme", true); window.minSize = new Vector2(600, 50); window.maxSize = new Vector2(600, 50); window.Show(); @@ -117,14 +116,14 @@ namespace XCharts.Editor } else if (IsAssetsExist(XCThemeMgr.GetThemeAssetPath(m_ChartName))) { - ShowNotification(new GUIContent("ERROR:The asset is exist! \npath=" - + XCThemeMgr.GetThemeAssetPath(m_ChartName))); + ShowNotification(new GUIContent("ERROR:The asset is exist! \npath=" + + XCThemeMgr.GetThemeAssetPath(m_ChartName))); } else { XCThemeMgr.ExportTheme(target.theme.sharedTheme, m_ChartName); - ShowNotification(new GUIContent("SUCCESS:The theme is exported. \npath=" - + XCThemeMgr.GetThemeAssetPath(m_ChartName))); + ShowNotification(new GUIContent("SUCCESS:The theme is exported. \npath=" + + XCThemeMgr.GetThemeAssetPath(m_ChartName))); } } } diff --git a/Editor/ChildComponents/TitleStyleDrawer.cs b/Editor/ChildComponents/TitleStyleDrawer.cs index 98c4384c..66ad6d67 100644 --- a/Editor/ChildComponents/TitleStyleDrawer.cs +++ b/Editor/ChildComponents/TitleStyleDrawer.cs @@ -1,4 +1,4 @@ -using UnityEditor; +using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/MainComponents/AxisEditor.cs b/Editor/MainComponents/AxisEditor.cs index bf5d18ed..652d0d39 100644 --- a/Editor/MainComponents/AxisEditor.cs +++ b/Editor/MainComponents/AxisEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; @@ -13,7 +12,7 @@ namespace XCharts.Editor var m_Type = baseProperty.FindPropertyRelative("m_Type"); var m_LogBase = baseProperty.FindPropertyRelative("m_LogBase"); var m_MinMaxType = baseProperty.FindPropertyRelative("m_MinMaxType"); - var type = (Axis.AxisType)m_Type.enumValueIndex; + var type = (Axis.AxisType) m_Type.enumValueIndex; EditorGUI.indentLevel++; if (component is ParallelAxis) { @@ -41,7 +40,7 @@ namespace XCharts.Editor if (type == Axis.AxisType.Value || type == Axis.AxisType.Time) { PropertyField("m_MinMaxType"); - Axis.AxisMinMaxType minMaxType = (Axis.AxisMinMaxType)m_MinMaxType.enumValueIndex; + Axis.AxisMinMaxType minMaxType = (Axis.AxisMinMaxType) m_MinMaxType.enumValueIndex; switch (minMaxType) { case Axis.AxisMinMaxType.Default: @@ -95,13 +94,11 @@ namespace XCharts.Editor [ComponentEditor(typeof(XAxis))] public class XAxisEditor : AxisEditor - { - } + { } [ComponentEditor(typeof(YAxis))] public class YAxisEditor : AxisEditor - { - } + { } [ComponentEditor(typeof(SingleAxis))] public class SingleAxisEditor : AxisEditor @@ -132,13 +129,11 @@ namespace XCharts.Editor [ComponentEditor(typeof(RadiusAxis))] public class RadiusAxisEditor : AxisEditor - { - } + { } [ComponentEditor(typeof(ParallelAxis))] public class ParallelAxisEditor : AxisEditor - { - } + { } [CustomPropertyDrawer(typeof(AxisLabel), true)] public class AxisLabelDrawer : BasePropertyDrawer @@ -159,6 +154,7 @@ namespace XCharts.Editor PropertyField(prop, "m_ShowEndLabel"); PropertyField(prop, "m_Rotate"); + PropertyField(prop, "m_Offset"); PropertyField(prop, "m_Distance"); PropertyField(prop, "m_Formatter"); PropertyField(prop, "m_NumericFormatter"); @@ -168,6 +164,7 @@ namespace XCharts.Editor PropertyField(prop, "m_Background"); PropertyField(prop, "m_TextStyle"); PropertyField(prop, "m_TextPadding"); + PropertyField(prop, "m_TextLimit"); --EditorGUI.indentLevel; } } diff --git a/Editor/MainComponents/BackgroundEditor.cs b/Editor/MainComponents/BackgroundEditor.cs index 25b9b5d1..33c84f3c 100644 --- a/Editor/MainComponents/BackgroundEditor.cs +++ b/Editor/MainComponents/BackgroundEditor.cs @@ -1,5 +1,3 @@ - - using UnityEditor; using XCharts.Runtime; diff --git a/Editor/MainComponents/CommentEditor.cs b/Editor/MainComponents/CommentEditor.cs new file mode 100644 index 00000000..922e44a4 --- /dev/null +++ b/Editor/MainComponents/CommentEditor.cs @@ -0,0 +1,18 @@ +using UnityEditor; +using XCharts.Runtime; + +namespace XCharts.Editor +{ + [ComponentEditor(typeof(Comment))] + public class CommentEditor : MainComponentEditor + { + public override void OnInspectorGUI() + { + ++EditorGUI.indentLevel; + PropertyField("m_LabelStyle"); + //PropertyField("m_MarkStyle"); + PropertyListField("m_Items", true); + --EditorGUI.indentLevel; + } + } +} \ No newline at end of file diff --git a/Editor/MainComponents/CommentEditor.cs.meta b/Editor/MainComponents/CommentEditor.cs.meta new file mode 100644 index 00000000..8c2401fe --- /dev/null +++ b/Editor/MainComponents/CommentEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f2364066bf3174aa39b79020266ce72d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/MainComponents/DataZoomEditor.cs b/Editor/MainComponents/DataZoomEditor.cs index 81ca348e..f54c0012 100644 --- a/Editor/MainComponents/DataZoomEditor.cs +++ b/Editor/MainComponents/DataZoomEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using XCharts.Runtime; diff --git a/Editor/MainComponents/GridCoordEditor.cs b/Editor/MainComponents/GridCoordEditor.cs index d507a78e..460161ce 100644 --- a/Editor/MainComponents/GridCoordEditor.cs +++ b/Editor/MainComponents/GridCoordEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using XCharts.Runtime; diff --git a/Editor/MainComponents/LegendEditor.cs b/Editor/MainComponents/LegendEditor.cs index b9835e0f..34fc3242 100644 --- a/Editor/MainComponents/LegendEditor.cs +++ b/Editor/MainComponents/LegendEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using XCharts.Runtime; @@ -15,12 +14,14 @@ namespace XCharts.Editor PropertyField("m_ItemHeight"); PropertyField("m_ItemGap"); PropertyField("m_ItemAutoColor"); + PropertyField("m_ItemOpacity"); PropertyField("m_SelectedMode"); PropertyField("m_Orient"); PropertyField("m_Formatter"); PropertyField("m_Location"); PropertyField("m_LabelStyle"); PropertyListField("m_Icons"); + PropertyListField("m_Colors"); PropertyListField("m_Data"); --EditorGUI.indentLevel; } diff --git a/Editor/MainComponents/MainComponentBaseEditor.cs b/Editor/MainComponents/MainComponentBaseEditor.cs index 1646cd4b..eb7b9b09 100644 --- a/Editor/MainComponents/MainComponentBaseEditor.cs +++ b/Editor/MainComponents/MainComponentBaseEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using UnityEngine.Assertions; @@ -28,12 +27,10 @@ namespace XCharts.Editor } public virtual void OnEnable() - { - } + { } public virtual void OnDisable() - { - } + { } internal void OnInternalInspectorGUI() { @@ -42,12 +39,10 @@ namespace XCharts.Editor } public virtual void OnInspectorGUI() - { - } + { } protected virtual void DrawExtendeds() - { - } + { } public virtual string GetDisplayTitle() { diff --git a/Editor/MainComponents/MainComponentEditor.cs b/Editor/MainComponents/MainComponentEditor.cs index e8bc3abb..05e2896a 100644 --- a/Editor/MainComponents/MainComponentEditor.cs +++ b/Editor/MainComponents/MainComponentEditor.cs @@ -1,10 +1,8 @@ - using XCharts.Runtime; namespace XCharts.Editor { public class MainComponentEditor : MainComponentBaseEditor - where T : MainComponent - { - } + where T : MainComponent + { } } \ No newline at end of file diff --git a/Editor/MainComponents/MainComponentListEditor.cs b/Editor/MainComponents/MainComponentListEditor.cs index 68afc0a3..211cb31b 100644 --- a/Editor/MainComponents/MainComponentListEditor.cs +++ b/Editor/MainComponents/MainComponentListEditor.cs @@ -1,9 +1,8 @@ - using System; using System.Collections.Generic; -using UnityEngine.Assertions; -using UnityEditor; using System.Linq; +using UnityEditor; +using UnityEngine.Assertions; using XCharts.Runtime; namespace XCharts.Editor @@ -84,7 +83,7 @@ namespace XCharts.Editor editor.showProperty, () => { ResetComponentEditor(id); }, () => { RemoveComponentEditor(id); } - ); + ); if (displayContent) { editor.OnInternalInspectorGUI(); @@ -120,7 +119,7 @@ namespace XCharts.Editor if (!m_EditorTypes.TryGetValue(settingsType, out editorType)) editorType = typeof(MainComponentBaseEditor); - var editor = (MainComponentBaseEditor)Activator.CreateInstance(editorType); + var editor = (MainComponentBaseEditor) Activator.CreateInstance(editorType); editor.Init(chart, component, property, m_BaseEditor); if (index < 0) diff --git a/Editor/MainComponents/MarkAreaEditor.cs b/Editor/MainComponents/MarkAreaEditor.cs index 6ca86420..43e2894e 100644 --- a/Editor/MainComponents/MarkAreaEditor.cs +++ b/Editor/MainComponents/MarkAreaEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; @@ -31,7 +30,7 @@ namespace XCharts.Editor if (MakeComponentFoldout(prop, "", true)) { ++EditorGUI.indentLevel; - var type = (MarkAreaType)(prop.FindPropertyRelative("m_Type")).enumValueIndex; + var type = (MarkAreaType) (prop.FindPropertyRelative("m_Type")).enumValueIndex; PropertyField(prop, "m_Type"); PropertyField(prop, "m_Name"); switch (type) diff --git a/Editor/MainComponents/MarkLineEditor.cs b/Editor/MainComponents/MarkLineEditor.cs index 053895d7..6c8530ae 100644 --- a/Editor/MainComponents/MarkLineEditor.cs +++ b/Editor/MainComponents/MarkLineEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; @@ -28,7 +27,7 @@ namespace XCharts.Editor if (MakeComponentFoldout(prop, "", true)) { ++EditorGUI.indentLevel; - var type = (MarkLineType)(prop.FindPropertyRelative("m_Type")).enumValueIndex; + var type = (MarkLineType) (prop.FindPropertyRelative("m_Type")).enumValueIndex; var group = prop.FindPropertyRelative("m_Group").intValue; PropertyField(prop, "m_Type"); PropertyField(prop, "m_Name"); diff --git a/Editor/MainComponents/ParallelCoordEditor.cs b/Editor/MainComponents/ParallelCoordEditor.cs index bc76ff4c..3a216f3c 100644 --- a/Editor/MainComponents/ParallelCoordEditor.cs +++ b/Editor/MainComponents/ParallelCoordEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using XCharts.Runtime; diff --git a/Editor/MainComponents/PolarCoordEditor.cs b/Editor/MainComponents/PolarCoordEditor.cs index 374db56d..8d359e74 100644 --- a/Editor/MainComponents/PolarCoordEditor.cs +++ b/Editor/MainComponents/PolarCoordEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using XCharts.Runtime; diff --git a/Editor/MainComponents/RadarCoordEditor.cs b/Editor/MainComponents/RadarCoordEditor.cs index 8b3c076b..752ec816 100644 --- a/Editor/MainComponents/RadarCoordEditor.cs +++ b/Editor/MainComponents/RadarCoordEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; diff --git a/Editor/MainComponents/ThemeEditor.cs b/Editor/MainComponents/ThemeEditor.cs index 29c79595..86fcf5f7 100644 --- a/Editor/MainComponents/ThemeEditor.cs +++ b/Editor/MainComponents/ThemeEditor.cs @@ -1,5 +1,3 @@ - - using UnityEditor; using UnityEngine; using XCharts.Runtime; @@ -12,7 +10,14 @@ namespace XCharts.Editor [CustomEditor(typeof(Theme))] public class ThemeEditor : UnityEditor.Editor { + static class Styles + { + internal static GUIContent btnReset = new GUIContent("Reset", "Reset to default theme"); + internal static GUIContent btnSync = new GUIContent("Sync Font", "Sync main theme font to sub theme font"); + } + private Theme m_Theme; + void OnEnable() { m_Theme = target as Theme; @@ -20,15 +25,15 @@ namespace XCharts.Editor public override void OnInspectorGUI() { - // serializedObject.Update(); - // EditorGUILayout.PropertyField(m_BackgroundColor); - // EditorGUILayout.PropertyField(m_ColorPalette); - // serializedObject.ApplyModifiedProperties(); base.OnInspectorGUI(); - if (GUILayout.Button(new GUIContent("Reset", "Reset to default theme"))) + if (GUILayout.Button(Styles.btnReset)) { m_Theme.ResetTheme(); } + if (GUILayout.Button(Styles.btnSync)) + { + m_Theme.SyncFontToSubComponent(); + } } } } \ No newline at end of file diff --git a/Editor/MainComponents/TitleEditor.cs b/Editor/MainComponents/TitleEditor.cs index 5a275efa..2a22c056 100644 --- a/Editor/MainComponents/TitleEditor.cs +++ b/Editor/MainComponents/TitleEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using XCharts.Runtime; diff --git a/Editor/MainComponents/TooltipEditor.cs b/Editor/MainComponents/TooltipEditor.cs index 6b8b55cc..af7b4344 100644 --- a/Editor/MainComponents/TooltipEditor.cs +++ b/Editor/MainComponents/TooltipEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using XCharts.Runtime; diff --git a/Editor/MainComponents/VisualMapEditor.cs b/Editor/MainComponents/VisualMapEditor.cs index 16354f68..059f3c41 100644 --- a/Editor/MainComponents/VisualMapEditor.cs +++ b/Editor/MainComponents/VisualMapEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; @@ -11,7 +10,7 @@ namespace XCharts.Editor public override void OnInspectorGUI() { ++EditorGUI.indentLevel; - var type = (VisualMap.Type)baseProperty.FindPropertyRelative("m_Type").enumValueIndex; + var type = (VisualMap.Type) baseProperty.FindPropertyRelative("m_Type").enumValueIndex; var isPiece = type == VisualMap.Type.Piecewise; PropertyField("m_Type"); PropertyField("m_SerieIndex"); @@ -39,19 +38,19 @@ namespace XCharts.Editor PropertyField("m_Location"); } PropertyListField("m_OutOfRange"); - PropertyListField(isPiece ? "m_Pieces" : "m_InRange"); + PropertyListField("m_InRange"); --EditorGUI.indentLevel; } } - [CustomPropertyDrawer(typeof(VisualMapPieces), true)] - public class PiecesDrawer : BasePropertyDrawer + [CustomPropertyDrawer(typeof(VisualMapRange), true)] + public class VisualMapRangeDrawer : BasePropertyDrawer { - public override string ClassName { get { return "Pieces"; } } + public override string ClassName { get { return "Range"; } } public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label) { base.OnGUI(pos, prop, label); - if (MakeFoldout(prop, "")) + if (MakeFoldout(prop, "m_Color")) { ++EditorGUI.indentLevel; PropertyField(prop, "m_Min"); diff --git a/Editor/Series/HeatmapEditor.cs b/Editor/Series/HeatmapEditor.cs index 1d2f98bb..739952ba 100644 --- a/Editor/Series/HeatmapEditor.cs +++ b/Editor/Series/HeatmapEditor.cs @@ -1,4 +1,3 @@ - using XCharts.Runtime; namespace XCharts.Editor diff --git a/Editor/Series/RadarEditor.cs b/Editor/Series/RadarEditor.cs index 7c672ec6..aedf9832 100644 --- a/Editor/Series/RadarEditor.cs +++ b/Editor/Series/RadarEditor.cs @@ -9,7 +9,7 @@ namespace XCharts.Editor { PropertyField("m_RadarType"); PropertyField("m_RadarIndex"); - + PropertyField("m_Symbol"); PropertyField("m_LineStyle"); PropertyField("m_ItemStyle"); diff --git a/Editor/Series/SerieBaseEditor.cs b/Editor/Series/SerieBaseEditor.cs index c1a2a390..1022c1f0 100644 --- a/Editor/Series/SerieBaseEditor.cs +++ b/Editor/Series/SerieBaseEditor.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEditor; @@ -17,6 +16,7 @@ namespace XCharts.Editor internal SerializedProperty baseProperty; internal SerializedProperty showProperty; internal List menus = new List(); + internal List serieDataMenus = new List(); protected Dictionary m_CoordOptionsDic; protected List m_CoordOptionsNames; private string m_DisplayName; @@ -62,12 +62,10 @@ namespace XCharts.Editor } public virtual void OnEnable() - { - } + { } public virtual void OnDisable() - { - } + { } internal void OnInternalInspectorGUI() { @@ -76,12 +74,10 @@ namespace XCharts.Editor } public virtual void OnInspectorGUI() - { - } + { } protected virtual void DrawExtendeds() - { - } + { } public virtual string GetDisplayTitle() { @@ -136,11 +132,11 @@ namespace XCharts.Editor { case SerializedPropertyType.Float: if (prop.floatValue < min) - prop.floatValue = (float)min; + prop.floatValue = (float) min; break; case SerializedPropertyType.Integer: if (prop.intValue < min) - prop.intValue = (int)min; + prop.intValue = (int) min; break; } @@ -152,11 +148,11 @@ namespace XCharts.Editor { case SerializedPropertyType.Float: if (prop.floatValue > max) - prop.floatValue = (float)max; + prop.floatValue = (float) max; break; case SerializedPropertyType.Integer: if (prop.intValue > max) - prop.intValue = (int)max; + prop.intValue = (int) max; break; } } diff --git a/Editor/Series/SerieEditor.cs b/Editor/Series/SerieEditor.cs index 2d7fbda9..9b410ea8 100644 --- a/Editor/Series/SerieEditor.cs +++ b/Editor/Series/SerieEditor.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -36,12 +35,11 @@ namespace XCharts.Editor } public virtual void OnCustomInspectorGUI() - { - } + { } private void OnExtraInspectorGUI() { - foreach (var kv in Serie.extraComponentFieldNameDict) + foreach (var kv in Serie.extraComponentMap) { var prop = FindProperty(kv.Value); if (prop.arraySize > 0) @@ -52,11 +50,11 @@ namespace XCharts.Editor private void PropertyFieldData() { m_DataFoldout = ChartEditorHelper.DrawHeader("Data", m_DataFoldout, false, null, null, - new HeaderMenuInfo("Import ECharts Data", () => - { - PraseExternalDataEditor.UpdateData(chart, serie, null); - PraseExternalDataEditor.ShowWindow(); - })); + new HeaderMenuInfo("Import ECharts Data", () => + { + PraseExternalDataEditor.UpdateData(chart, serie, null); + PraseExternalDataEditor.ShowWindow(); + })); if (!m_DataFoldout) return; EditorGUI.indentLevel++; var m_Datas = FindProperty("m_Data"); @@ -75,7 +73,7 @@ namespace XCharts.Editor while (listSize > m_Datas.arraySize) m_Datas.arraySize++; while (listSize < m_Datas.arraySize) m_Datas.arraySize--; } - if (listSize > 30)// && !XCSettings.editorShowAllListData) + if (listSize > 30) // && !XCSettings.editorShowAllListData) { int num = listSize > 10 ? 10 : listSize; for (int i = 0; i < num; i++) @@ -117,69 +115,69 @@ namespace XCharts.Editor } var fieldCount = dimension + (showName ? 1 : 0); m_DataElementFoldout[index] = ChartEditorHelper.DrawHeader("SerieData " + index, flag, false, null, - delegate (Rect drawRect) - { - //drawRect.width -= 2f; - var maxX = drawRect.xMax; - var currentWidth = drawRect.width; - var lastX = drawRect.x; - var lastWid = drawRect.width; - var lastFieldWid = EditorGUIUtility.fieldWidth; - var lastLabelWid = EditorGUIUtility.labelWidth; - var serieData = m_Datas.GetArrayElementAtIndex(index); - var sereName = serieData.FindPropertyRelative("m_Name"); - var data = serieData.FindPropertyRelative("m_Data"); + delegate(Rect drawRect) + { + //drawRect.width -= 2f; + var maxX = drawRect.xMax; + var currentWidth = drawRect.width; + var lastX = drawRect.x; + var lastWid = drawRect.width; + var lastFieldWid = EditorGUIUtility.fieldWidth; + var lastLabelWid = EditorGUIUtility.labelWidth; + var serieData = m_Datas.GetArrayElementAtIndex(index); + var sereName = serieData.FindPropertyRelative("m_Name"); + var data = serieData.FindPropertyRelative("m_Data"); #if UNITY_2019_3_OR_NEWER - var gap = 2; - var namegap = 3; + var gap = 2; + var namegap = 3; #else - var gap = 0; - var namegap = 0; + var gap = 0; + var namegap = 0; #endif - if (fieldCount <= 1) - { - while (2 > data.arraySize) + if (fieldCount <= 1) { - var value = data.arraySize == 0 ? index : 0; - data.arraySize++; - data.GetArrayElementAtIndex(data.arraySize - 1).floatValue = value; - } - SerializedProperty element = data.GetArrayElementAtIndex(1); - var startX = drawRect.x + EditorGUIUtility.labelWidth - EditorGUI.indentLevel * 15 + gap; - drawRect.x = startX; - drawRect.xMax = maxX; - EditorGUI.PropertyField(drawRect, element, GUIContent.none); - } - else - { - var startX = drawRect.x + EditorGUIUtility.labelWidth - EditorGUI.indentLevel * 15 + gap; - var dataWidTotal = (currentWidth - (startX + 20.5f + 1)); - var dataWid = dataWidTotal / fieldCount; - var xWid = dataWid - 2; - for (int i = 0; i < dimension; i++) - { - var dataCount = i < 1 ? 2 : i + 1; - while (dataCount > data.arraySize) + while (2 > data.arraySize) { var value = data.arraySize == 0 ? index : 0; data.arraySize++; data.GetArrayElementAtIndex(data.arraySize - 1).floatValue = value; } - drawRect.x = startX + i * xWid; - drawRect.width = dataWid + 25; - SerializedProperty element = data.GetArrayElementAtIndex(dimension <= 1 ? 1 : i); + SerializedProperty element = data.GetArrayElementAtIndex(1); + var startX = drawRect.x + EditorGUIUtility.labelWidth - EditorGUI.indentLevel * 15 + gap; + drawRect.x = startX; + drawRect.xMax = maxX; EditorGUI.PropertyField(drawRect, element, GUIContent.none); } - if (showName) + else { - drawRect.x = startX + (fieldCount - 1) * xWid; - drawRect.width = dataWid + 40 + dimension * namegap - 2.5f; - EditorGUI.PropertyField(drawRect, sereName, GUIContent.none); + var startX = drawRect.x + EditorGUIUtility.labelWidth - EditorGUI.indentLevel * 15 + gap; + var dataWidTotal = (currentWidth - (startX + 20.5f + 1)); + var dataWid = dataWidTotal / fieldCount; + var xWid = dataWid - 2; + for (int i = 0; i < dimension; i++) + { + var dataCount = i < 1 ? 2 : i + 1; + while (dataCount > data.arraySize) + { + var value = data.arraySize == 0 ? index : 0; + data.arraySize++; + data.GetArrayElementAtIndex(data.arraySize - 1).floatValue = value; + } + drawRect.x = startX + i * xWid; + drawRect.width = dataWid + 25; + SerializedProperty element = data.GetArrayElementAtIndex(dimension <= 1 ? 1 : i); + EditorGUI.PropertyField(drawRect, element, GUIContent.none); + } + if (showName) + { + drawRect.x = startX + (fieldCount - 1) * xWid; + drawRect.width = dataWid + 40 + dimension * namegap - 2.5f; + EditorGUI.PropertyField(drawRect, sereName, GUIContent.none); + } + EditorGUIUtility.fieldWidth = lastFieldWid; + EditorGUIUtility.labelWidth = lastLabelWid; } - EditorGUIUtility.fieldWidth = lastFieldWid; - EditorGUIUtility.labelWidth = lastLabelWid; - } - }); + }); if (m_DataElementFoldout[index]) { if (!(serie is ISimplifiedSerie)) @@ -192,113 +190,53 @@ namespace XCharts.Editor EditorGUI.indentLevel++; var serieData = m_Datas.GetArrayElementAtIndex(index); var m_Name = serieData.FindPropertyRelative("m_Name"); - var m_Id = serieData.FindPropertyRelative("m_Id"); - var m_ParentId = serieData.FindPropertyRelative("m_ParentId"); - - var m_BaseInfo = serieData.FindPropertyRelative("m_BaseInfos"); - var m_Label = serieData.FindPropertyRelative("m_Labels"); - var m_ItemStyle = serieData.FindPropertyRelative("m_ItemStyles"); - var m_Emphasis = serieData.FindPropertyRelative("m_Emphases"); - var m_Symbol = serieData.FindPropertyRelative("m_Symbols"); - var m_LineStyle = serieData.FindPropertyRelative("m_LineStyles"); - var m_AreaStyle = serieData.FindPropertyRelative("m_AreaStyles"); - var m_TitleStyle = serieData.FindPropertyRelative("m_TitleStyles"); PropertyField(m_Name); - PropertyField(m_Id); - PropertyField(m_ParentId); + if (serie.GetType().IsDefined(typeof(SerieDataExtraFieldAttribute), false)) + { + var attribute = serie.GetType().GetAttribute(); + foreach (var field in attribute.fields) + { + PropertyField(serieData.FindPropertyRelative(field)); + } + } - var componentNum = m_BaseInfo.arraySize + m_Label.arraySize + m_ItemStyle.arraySize + m_Emphasis.arraySize - + m_Symbol.arraySize + m_LineStyle.arraySize + m_AreaStyle.arraySize; - var title = "Component"; - if (componentNum == 0) title += " (None)"; - m_DataComponentFoldout = ChartEditorHelper.DrawHeader(title, m_DataComponentFoldout, false, null, null, - new HeaderMenuInfo("Add BaseInfo", () => + serieDataMenus.Clear(); + if (serie.GetType().IsDefined(typeof(SerieDataExtraComponentAttribute), false)) { - serie.GetSerieData(index).GetOrAddComponent(); - }, m_BaseInfo.arraySize == 0), - new HeaderMenuInfo("Add ItemStyle", () => - { - serie.GetSerieData(index).GetOrAddComponent(); - }, m_ItemStyle.arraySize == 0), - new HeaderMenuInfo("Add Label", () => - { - serie.GetSerieData(index).GetOrAddComponent(); - }, m_Label.arraySize == 0), - new HeaderMenuInfo("Add Emphasis", () => - { - serie.GetSerieData(index).GetOrAddComponent(); - }, m_Emphasis.arraySize == 0), - new HeaderMenuInfo("Add Symbol", () => - { - serie.GetSerieData(index).GetOrAddComponent(); - }, m_Symbol.arraySize == 0), - new HeaderMenuInfo("Add LineStyle", () => - { - serie.GetSerieData(index).GetOrAddComponent(); - }, m_LineStyle.arraySize == 0), - new HeaderMenuInfo("Add AreaStyle", () => - { - serie.GetSerieData(index).GetOrAddComponent(); - }, m_AreaStyle.arraySize == 0), - new HeaderMenuInfo("Add TitleStyle", () => - { - serie.GetSerieData(index).GetOrAddComponent(); - }, m_TitleStyle.arraySize == 0), - new HeaderMenuInfo("Remove BaseInfo", () => - { - serie.GetSerieData(index).RemoveComponent(); - }, m_BaseInfo.arraySize > 0), - new HeaderMenuInfo("Remove ItemStyle", () => - { - serie.GetSerieData(index).RemoveComponent(); - }, m_ItemStyle.arraySize > 0), - new HeaderMenuInfo("Remove Label", () => - { - serie.GetSerieData(index).RemoveComponent(); - }, m_Label.arraySize > 0), - new HeaderMenuInfo("Remove Emphasis", () => - { - serie.GetSerieData(index).RemoveComponent(); - }, m_Emphasis.arraySize > 0), - new HeaderMenuInfo("Remove Symbol", () => - { - serie.GetSerieData(index).RemoveComponent(); - }, m_Symbol.arraySize > 0), - new HeaderMenuInfo("Remove LineStyle", () => - { - serie.GetSerieData(index).RemoveComponent(); - }, m_LineStyle.arraySize > 0), - new HeaderMenuInfo("Remove AreaStyle", () => - { - serie.GetSerieData(index).RemoveComponent(); - }, m_AreaStyle.arraySize > 0), - new HeaderMenuInfo("Remove TitleStyle", () => - { - serie.GetSerieData(index).RemoveComponent(); - }, m_TitleStyle.arraySize > 0), - new HeaderMenuInfo("Remove All", () => + var attribute = serie.GetType().GetAttribute(); + foreach (var type in attribute.types) + { + var size = serieData.FindPropertyRelative(SerieData.extraComponentMap[type]).arraySize; + serieDataMenus.Add(new HeaderMenuInfo("Add " + type.Name, () => + { + serie.GetSerieData(index).GetOrAddComponent(type); + EditorUtility.SetDirty(chart); + }, size == 0)); + } + foreach (var type in attribute.types) + { + var size = serieData.FindPropertyRelative(SerieData.extraComponentMap[type]).arraySize; + serieDataMenus.Add(new HeaderMenuInfo("Remove " + type.Name, () => + { + serie.GetSerieData(index).RemoveComponent(type); + EditorUtility.SetDirty(chart); + }, size > 0)); + } + } + serieDataMenus.Add(new HeaderMenuInfo("Remove All", () => { serie.GetSerieData(index).RemoveAllComponent(); - }, componentNum > 0)); + }, true)); + m_DataComponentFoldout = ChartEditorHelper.DrawHeader("Component", m_DataComponentFoldout, false, null, null, serieDataMenus); if (m_DataComponentFoldout) { - if (m_BaseInfo.arraySize > 0) - PropertyField(m_BaseInfo.GetArrayElementAtIndex(0)); - if (m_Label.arraySize > 0) - PropertyField(m_Label.GetArrayElementAtIndex(0)); - if (m_ItemStyle.arraySize > 0) - PropertyField(m_ItemStyle.GetArrayElementAtIndex(0)); - if (m_Emphasis.arraySize > 0) - PropertyField(m_Emphasis.GetArrayElementAtIndex(0)); - if (m_Symbol.arraySize > 0) - PropertyField(m_Symbol.GetArrayElementAtIndex(0)); - if (m_LineStyle.arraySize > 0) - PropertyField(m_LineStyle.GetArrayElementAtIndex(0)); - if (m_AreaStyle.arraySize > 0) - PropertyField(m_AreaStyle.GetArrayElementAtIndex(0)); - if (m_TitleStyle.arraySize > 0) - PropertyField(m_TitleStyle.GetArrayElementAtIndex(0)); + foreach (var kv in SerieData.extraComponentMap) + { + var prop = serieData.FindPropertyRelative(kv.Value); + if (prop.arraySize > 0) + PropertyField(prop.GetArrayElementAtIndex(0)); + } } EditorGUI.indentLevel--; } diff --git a/Editor/Series/SerieListEditor.cs b/Editor/Series/SerieListEditor.cs index a8b67ada..280ee259 100644 --- a/Editor/Series/SerieListEditor.cs +++ b/Editor/Series/SerieListEditor.cs @@ -1,10 +1,9 @@ - using System; using System.Collections.Generic; -using UnityEngine.Assertions; -using UnityEditor; using System.Linq; using System.Reflection; +using UnityEditor; +using UnityEngine.Assertions; using XCharts.Runtime; namespace XCharts.Editor @@ -22,7 +21,6 @@ namespace XCharts.Editor List m_Editors; private bool m_SerieFoldout; - public SerieListEditor(BaseChartEditor editor) { Assert.IsNotNull(editor); @@ -136,7 +134,7 @@ namespace XCharts.Editor if (!m_EditorTypes.TryGetValue(settingsType, out editorType)) editorType = typeof(SerieBaseEditor); - var editor = (SerieBaseEditor)Activator.CreateInstance(editorType); + var editor = (SerieBaseEditor) Activator.CreateInstance(editorType); editor.Init(chart, serie, property, m_BaseEditor); editor.menus.Clear(); editor.menus.Add(new HeaderMenuInfo("Clone", () => @@ -176,7 +174,7 @@ namespace XCharts.Editor var attribute = editor.serie.GetType().GetAttribute(); foreach (var type in attribute.types) { - var size = editor.FindProperty(Serie.extraComponentFieldNameDict[type]).arraySize; + var size = editor.FindProperty(Serie.extraComponentMap[type]).arraySize; editor.menus.Add(new HeaderMenuInfo("Add " + type.Name, () => { editor.serie.AddExtraComponent(type); @@ -187,7 +185,7 @@ namespace XCharts.Editor } foreach (var type in attribute.types) { - var size = editor.FindProperty(Serie.extraComponentFieldNameDict[type]).arraySize; + var size = editor.FindProperty(Serie.extraComponentMap[type]).arraySize; editor.menus.Add(new HeaderMenuInfo("Remove " + type.Name, () => { editor.serie.RemoveExtraComponent(type); diff --git a/Editor/Series/SimplifiedBarEditor.cs b/Editor/Series/SimplifiedBarEditor.cs index fdd9133a..c09d3ee6 100644 --- a/Editor/Series/SimplifiedBarEditor.cs +++ b/Editor/Series/SimplifiedBarEditor.cs @@ -1,4 +1,3 @@ - using XCharts.Runtime; namespace XCharts.Editor diff --git a/Editor/Utilities/ChartEditorHelper.cs b/Editor/Utilities/ChartEditorHelper.cs index a33e9e6e..de606eef 100644 --- a/Editor/Utilities/ChartEditorHelper.cs +++ b/Editor/Utilities/ChartEditorHelper.cs @@ -1,8 +1,7 @@ - -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; using XCharts.Runtime; namespace XCharts.Editor @@ -53,7 +52,7 @@ namespace XCharts.Editor public static void SecondField(Rect drawRect, SerializedProperty prop) { - RectOffset offset = new RectOffset(-(int)EditorGUIUtility.labelWidth, 0, 0, 0); + RectOffset offset = new RectOffset(-(int) EditorGUIUtility.labelWidth, 0, 0, 0); drawRect = offset.Add(drawRect); EditorGUI.PropertyField(drawRect, prop, GUIContent.none); drawRect = offset.Remove(drawRect); @@ -166,7 +165,7 @@ namespace XCharts.Editor } public static bool MakeComponentFoldout(ref Rect drawRect, Dictionary heights, Dictionary moduleToggle, string key, string content, SerializedProperty prop, - bool propEnable, params HeaderMenuInfo[] menus) + SerializedProperty prop2, bool propEnable, params HeaderMenuInfo[] menus) { var sourRect = drawRect; float defaultWidth = drawRect.width; @@ -181,10 +180,16 @@ namespace XCharts.Editor if (prop.propertyType == SerializedPropertyType.Boolean) { if (!propEnable) - using (new EditorGUI.DisabledScope(true)) - MakeBool(drawRect, prop); + using(new EditorGUI.DisabledScope(true)) + MakeBool(drawRect, prop); else MakeBool(drawRect, prop); + if (prop2 != null && !moduleToggle[key]) + { + drawRect.x = EditorGUIUtility.labelWidth - EditorGUI.indentLevel * INDENT_WIDTH + ARROW_WIDTH + BOOL_WIDTH; + drawRect.width = defaultWidth - drawRect.x + ARROW_WIDTH; + EditorGUI.PropertyField(drawRect, prop2, GUIContent.none); + } } else { @@ -201,8 +206,6 @@ namespace XCharts.Editor return moduleToggle[key]; } - - public static void MakeBool(Rect drawRect, SerializedProperty boolProp, int index = 0, string name = null) { float defaultWidth = drawRect.width; @@ -378,9 +381,9 @@ namespace XCharts.Editor { var temp = INDENT_WIDTH + GAP_WIDTH + iconGap; var isSerie = "Serie".Equals(element.type); - var elementRect = isSerie - ? new Rect(drawRect.x, drawRect.y, drawRect.width + INDENT_WIDTH - 2 * iconGap, drawRect.height) - : new Rect(drawRect.x, drawRect.y, drawRect.width - 3 * iconWidth, drawRect.height); + var elementRect = isSerie ? + new Rect(drawRect.x, drawRect.y, drawRect.width + INDENT_WIDTH - 2 * iconGap, drawRect.height) : + new Rect(drawRect.x, drawRect.y, drawRect.width - 3 * iconWidth, drawRect.height); EditorGUI.PropertyField(elementRect, element, new GUIContent("Element " + i)); var iconRect = new Rect(drawRect.width - 3 * iconWidth + temp, drawRect.y, iconWidth, drawRect.height); var oldColor = GUI.contentColor; @@ -436,7 +439,7 @@ namespace XCharts.Editor if (prop.propertyType == SerializedPropertyType.Float && prop.floatValue < minValue) prop.floatValue = minValue; if (prop.propertyType == SerializedPropertyType.Integer && prop.intValue < minValue) - prop.intValue = (int)minValue; + prop.intValue = (int) minValue; var hig = EditorGUI.GetPropertyHeight(prop); drawRect.y += hig; heights[key] += hig; @@ -451,7 +454,7 @@ namespace XCharts.Editor if (prop.propertyType == SerializedPropertyType.Float && prop.floatValue > maxValue) prop.floatValue = maxValue; if (prop.propertyType == SerializedPropertyType.Integer && prop.intValue > maxValue) - prop.intValue = (int)maxValue; + prop.intValue = (int) maxValue; var hig = EditorGUI.GetPropertyHeight(prop); drawRect.y += hig; heights[key] += hig; diff --git a/Editor/Utilities/EditorStyles.cs b/Editor/Utilities/EditorStyles.cs index 08177b78..602a2693 100644 --- a/Editor/Utilities/EditorStyles.cs +++ b/Editor/Utilities/EditorStyles.cs @@ -1,5 +1,3 @@ - - using UnityEditor; using UnityEngine; @@ -9,12 +7,11 @@ namespace XCharts.Editor { static readonly Color splitterDark = new Color(0.12f, 0.12f, 0.12f, 0.5f); static readonly Color splitterLight = new Color(0.6f, 0.6f, 0.6f, 0.5f); - static readonly Texture2D paneOptionsIconDark = (Texture2D)EditorGUIUtility.Load("Builtin Skins/DarkSkin/Images/pane options.png"); - static readonly Texture2D paneOptionsIconLight = (Texture2D)EditorGUIUtility.Load("Builtin Skins/LightSkin/Images/pane options.png"); + static readonly Texture2D paneOptionsIconDark = (Texture2D) EditorGUIUtility.Load("Builtin Skins/DarkSkin/Images/pane options.png"); + static readonly Texture2D paneOptionsIconLight = (Texture2D) EditorGUIUtility.Load("Builtin Skins/LightSkin/Images/pane options.png"); static readonly Color headerBackgroundDark = new Color(0.1f, 0.1f, 0.1f, 0.2f); static readonly Color headerBackgroundLight = new Color(1f, 1f, 1f, 0.2f); - public static readonly GUIStyle headerStyle = UnityEditor.EditorStyles.boldLabel; public static readonly GUIStyle foldoutStyle = new GUIStyle(UnityEditor.EditorStyles.foldout) { @@ -28,7 +25,6 @@ namespace XCharts.Editor public static readonly GUIStyle invisibleButton = "InvisibleButton"; public static readonly GUIStyle smallTickbox = new GUIStyle("ShurikenToggle"); - public static Color splitter { get { return EditorGUIUtility.isProSkin ? splitterDark : splitterLight; } } public static Texture2D paneOptionsIcon { get { return EditorGUIUtility.isProSkin ? paneOptionsIconDark : paneOptionsIconLight; } } public static Color headerBackground { get { return EditorGUIUtility.isProSkin ? headerBackgroundDark : headerBackgroundLight; } } diff --git a/Editor/Utilities/ThemeCheck.cs b/Editor/Utilities/ThemeCheck.cs index d9c33055..bb31b353 100644 --- a/Editor/Utilities/ThemeCheck.cs +++ b/Editor/Utilities/ThemeCheck.cs @@ -1,4 +1,3 @@ - using System.IO; using UnityEditor; using UnityEngine; diff --git a/Editor/Widgets/ProgressBarEditor.cs b/Editor/Widgets/ProgressBarEditor.cs index 8d57260a..112269b4 100644 --- a/Editor/Widgets/ProgressBarEditor.cs +++ b/Editor/Widgets/ProgressBarEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using XCharts.Runtime; diff --git a/Editor/Windows/PraseExternalDataEditor.cs b/Editor/Windows/PraseExternalDataEditor.cs index f2d861cb..2e7667a8 100644 --- a/Editor/Windows/PraseExternalDataEditor.cs +++ b/Editor/Windows/PraseExternalDataEditor.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEditor; @@ -194,8 +193,7 @@ namespace XCharts.Editor else if (a.StartsWith("selected:")) { string selected = a.Substring(9, a.Length - 9); - var baseInfo = serieData.GetOrAddComponent(); - baseInfo.selected = bool.Parse(selected); + serieData.selected = bool.Parse(selected); } } serie.AddSerieData(serieData); diff --git a/Editor/Windows/XCSettingsEditor.cs b/Editor/Windows/XCSettingsEditor.cs index 0908998e..c03ef5b0 100644 --- a/Editor/Windows/XCSettingsEditor.cs +++ b/Editor/Windows/XCSettingsEditor.cs @@ -1,4 +1,3 @@ - using UnityEditor; using UnityEngine; using XCharts.Runtime; @@ -20,10 +19,8 @@ namespace XCharts.Editor { XCResourcesImporter m_ResourceImporter; - public XCResourceImporterProvider() - : base("Project/XCharts", SettingsScope.Project) - { - } + public XCResourceImporterProvider() : base("Project/XCharts", SettingsScope.Project) + { } public override void OnGUI(string searchContext) { diff --git a/Editor/Windows/XChartsEditor.cs b/Editor/Windows/XChartsEditor.cs index 01b638bf..47042a75 100644 --- a/Editor/Windows/XChartsEditor.cs +++ b/Editor/Windows/XChartsEditor.cs @@ -1,8 +1,7 @@ - using UnityEditor; using UnityEngine; -using UnityEngine.UI; using UnityEngine.EventSystems; +using UnityEngine.UI; using XCharts.Runtime; namespace XCharts.Editor @@ -134,6 +133,7 @@ namespace XCharts.Editor { AddChart("CandlestickChart"); } + [MenuItem("XCharts/PolarChart", priority = 54)] [MenuItem("GameObject/XCharts/PolarChart", priority = 54)] public static void PolarChart() diff --git a/Examples/Runtime/Example00_CheatSheet.cs b/Examples/Example00_CheatSheet.cs similarity index 96% rename from Examples/Runtime/Example00_CheatSheet.cs rename to Examples/Example00_CheatSheet.cs index 6429e3da..99bce3df 100644 --- a/Examples/Runtime/Example00_CheatSheet.cs +++ b/Examples/Example00_CheatSheet.cs @@ -1,4 +1,3 @@ - using System.Collections; using System.Collections.Generic; using UnityEngine; @@ -278,13 +277,21 @@ namespace XCharts.Example visualMap.range[0] = 0; visualMap.range[1] = 100; - var colors = new List{"#313695", "#4575b4", "#74add1", "#abd9e9", "#e0f3f8", "#ffffbf", - "#fee090", "#fdae61", "#f46d43", "#d73027", "#a50026"}; - visualMap.inRange.Clear(); - foreach (var str in colors) + var colors = new List { - visualMap.inRange.Add(ThemeStyle.GetColor(str)); - } + "#313695", + "#4575b4", + "#74add1", + "#abd9e9", + "#e0f3f8", + "#ffffbf", + "#fee090", + "#fdae61", + "#f46d43", + "#d73027", + "#a50026" + }; + visualMap.AddColors(colors); var grid = chart.GetChartComponent(); grid.left = 80; grid.bottom = 100; diff --git a/Examples/Runtime/Example00_CheatSheet.cs.meta b/Examples/Example00_CheatSheet.cs.meta similarity index 100% rename from Examples/Runtime/Example00_CheatSheet.cs.meta rename to Examples/Example00_CheatSheet.cs.meta diff --git a/Examples/Runtime/Example01_UpdateData.cs b/Examples/Example01_UpdateData.cs similarity index 99% rename from Examples/Runtime/Example01_UpdateData.cs rename to Examples/Example01_UpdateData.cs index 76abf067..171de5d9 100644 --- a/Examples/Runtime/Example01_UpdateData.cs +++ b/Examples/Example01_UpdateData.cs @@ -1,4 +1,3 @@ - using UnityEngine; using XCharts.Runtime; diff --git a/Examples/Runtime/Example01_UpdateData.cs.meta b/Examples/Example01_UpdateData.cs.meta similarity index 100% rename from Examples/Runtime/Example01_UpdateData.cs.meta rename to Examples/Example01_UpdateData.cs.meta diff --git a/Examples/Runtime/Example02_ChartEvent.cs b/Examples/Example02_ChartEvent.cs similarity index 99% rename from Examples/Runtime/Example02_ChartEvent.cs rename to Examples/Example02_ChartEvent.cs index 599db9d1..59066a4a 100644 --- a/Examples/Runtime/Example02_ChartEvent.cs +++ b/Examples/Example02_ChartEvent.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.EventSystems; using XCharts.Runtime; diff --git a/Examples/Runtime/Example02_ChartEvent.cs.meta b/Examples/Example02_ChartEvent.cs.meta similarity index 100% rename from Examples/Runtime/Example02_ChartEvent.cs.meta rename to Examples/Example02_ChartEvent.cs.meta diff --git a/Examples/Runtime/Example03_ChartAnimation.cs b/Examples/Example03_ChartAnimation.cs similarity index 99% rename from Examples/Runtime/Example03_ChartAnimation.cs rename to Examples/Example03_ChartAnimation.cs index 2ba253ee..736ff80e 100644 --- a/Examples/Runtime/Example03_ChartAnimation.cs +++ b/Examples/Example03_ChartAnimation.cs @@ -1,4 +1,3 @@ - using UnityEngine; using XCharts.Runtime; diff --git a/Examples/Runtime/Example03_ChartAnimation.cs.meta b/Examples/Example03_ChartAnimation.cs.meta similarity index 100% rename from Examples/Runtime/Example03_ChartAnimation.cs.meta rename to Examples/Example03_ChartAnimation.cs.meta diff --git a/Examples/Runtime/Example10_LineChart.cs b/Examples/Example10_LineChart.cs similarity index 99% rename from Examples/Runtime/Example10_LineChart.cs rename to Examples/Example10_LineChart.cs index ed566ad3..1067b991 100644 --- a/Examples/Runtime/Example10_LineChart.cs +++ b/Examples/Example10_LineChart.cs @@ -1,4 +1,3 @@ - using System.Collections; using UnityEngine; using XCharts.Runtime; diff --git a/Examples/Runtime/Example10_LineChart.cs.meta b/Examples/Example10_LineChart.cs.meta similarity index 100% rename from Examples/Runtime/Example10_LineChart.cs.meta rename to Examples/Example10_LineChart.cs.meta diff --git a/Examples/Runtime/Example11_AddSinCurve.cs b/Examples/Example11_AddSinCurve.cs similarity index 99% rename from Examples/Runtime/Example11_AddSinCurve.cs rename to Examples/Example11_AddSinCurve.cs index dd22ca3c..31491178 100644 --- a/Examples/Runtime/Example11_AddSinCurve.cs +++ b/Examples/Example11_AddSinCurve.cs @@ -1,4 +1,3 @@ - using UnityEngine; using XCharts.Runtime; diff --git a/Examples/Runtime/Example11_AddSinCurve.cs.meta b/Examples/Example11_AddSinCurve.cs.meta similarity index 100% rename from Examples/Runtime/Example11_AddSinCurve.cs.meta rename to Examples/Example11_AddSinCurve.cs.meta diff --git a/Examples/Runtime/Example12_CustomDrawing.cs b/Examples/Example12_CustomDrawing.cs similarity index 76% rename from Examples/Runtime/Example12_CustomDrawing.cs rename to Examples/Example12_CustomDrawing.cs index 3f19c62a..ace1318a 100644 --- a/Examples/Runtime/Example12_CustomDrawing.cs +++ b/Examples/Example12_CustomDrawing.cs @@ -1,9 +1,7 @@ - using UnityEngine; using UnityEngine.UI; -using XUGL; using XCharts.Runtime; - +using XUGL; namespace XCharts.Example { @@ -17,15 +15,11 @@ namespace XCharts.Example chart = gameObject.GetComponent(); if (chart == null) return; - chart.onDraw = delegate (VertexHelper vh) - { - }; + chart.onDraw = delegate(VertexHelper vh) { }; // or - chart.onDrawBeforeSerie = delegate (VertexHelper vh, Serie serie) - { - }; + chart.onDrawBeforeSerie = delegate(VertexHelper vh, Serie serie) { }; // or - chart.onDrawAfterSerie = delegate (VertexHelper vh, Serie serie) + chart.onDrawAfterSerie = delegate(VertexHelper vh, Serie serie) { if (serie.index != 0) return; var dataPoints = serie.context.dataPoints; @@ -41,9 +35,7 @@ namespace XCharts.Example } }; // or - chart.onDrawTop = delegate (VertexHelper vh) - { - }; + chart.onDrawTop = delegate(VertexHelper vh) { }; } } } \ No newline at end of file diff --git a/Examples/Runtime/Example12_CustomDrawing.cs.meta b/Examples/Example12_CustomDrawing.cs.meta similarity index 100% rename from Examples/Runtime/Example12_CustomDrawing.cs.meta rename to Examples/Example12_CustomDrawing.cs.meta diff --git a/Examples/Runtime/Example13_LineSimple.cs b/Examples/Example13_LineSimple.cs similarity index 82% rename from Examples/Runtime/Example13_LineSimple.cs rename to Examples/Example13_LineSimple.cs index ed5b94ca..153ef575 100644 --- a/Examples/Runtime/Example13_LineSimple.cs +++ b/Examples/Example13_LineSimple.cs @@ -1,4 +1,3 @@ - using UnityEngine; using XCharts.Runtime; @@ -8,21 +7,25 @@ namespace XCharts.Example [ExecuteInEditMode] public class Example13_LineSimple : MonoBehaviour { + void Awake() + { + AddData(); + } + void Update() { if (Input.GetKeyDown(KeyCode.Space)) { AddData(); - //OnTestBtn(); } } void AddData() { - var chart = gameObject.GetComponent(); + var chart = gameObject.GetComponent(); if (chart == null) { - chart = gameObject.AddComponent(); + chart = gameObject.AddComponent(); chart.Init(); chart.SetSize(580, 300); } @@ -43,8 +46,8 @@ namespace XCharts.Example xAxis.boundaryGap = true; chart.RemoveData(); - chart.AddSerie(); - chart.AddSerie(); + chart.AddSerie(); + chart.AddSerie(); for (int i = 0; i < 200; i++) { chart.AddXAxisData("x" + i); diff --git a/Examples/Runtime/Example13_LineSimple.cs.meta b/Examples/Example13_LineSimple.cs.meta similarity index 100% rename from Examples/Runtime/Example13_LineSimple.cs.meta rename to Examples/Example13_LineSimple.cs.meta diff --git a/Examples/Runtime/Example20_BarChart.cs b/Examples/Example20_BarChart.cs similarity index 97% rename from Examples/Runtime/Example20_BarChart.cs rename to Examples/Example20_BarChart.cs index 594d665e..270321ac 100644 --- a/Examples/Runtime/Example20_BarChart.cs +++ b/Examples/Example20_BarChart.cs @@ -1,4 +1,3 @@ - using System.Collections; using UnityEngine; using XCharts.Runtime; @@ -57,7 +56,7 @@ namespace XCharts.Example yAxis.minMaxType = Axis.AxisMinMaxType.Default; chart.RemoveData(); - serie = chart.AddSerie( "Bar1"); + serie = chart.AddSerie("Bar1"); for (int i = 0; i < m_DataNum; i++) { @@ -67,7 +66,6 @@ namespace XCharts.Example yield return new WaitForSeconds(1); } - IEnumerator BarMutilSerie() { chart.GetChartComponent().subText = "多条柱状图"; @@ -80,7 +78,7 @@ namespace XCharts.Example yield return null; } - serie2 = chart.AddSerie<Bar>( "Bar2"); + serie2 = chart.AddSerie<Bar>("Bar2"); serie2.lineType = LineType.Normal; serie2.barWidth = 0.35f; for (int i = 0; i < m_DataNum; i++) @@ -152,7 +150,7 @@ namespace XCharts.Example serie2.label.textStyle.color = Color.white; serie2.label.formatter = "{d:f0}%"; serie2.labelDirty = true; - + chart.RefreshChart(); yield return new WaitForSeconds(1); } diff --git a/Examples/Runtime/Example20_BarChart.cs.meta b/Examples/Example20_BarChart.cs.meta similarity index 100% rename from Examples/Runtime/Example20_BarChart.cs.meta rename to Examples/Example20_BarChart.cs.meta diff --git a/Examples/Example21_BarRace.cs b/Examples/Example21_BarRace.cs new file mode 100644 index 00000000..c14e3ffc --- /dev/null +++ b/Examples/Example21_BarRace.cs @@ -0,0 +1,46 @@ +using System.Collections; +using UnityEngine; +using XCharts.Runtime; + +namespace XCharts.Example +{ + [DisallowMultipleComponent] + public class Example21_BarRace : MonoBehaviour + { + private BarChart chart; + private float lastTime; + + void Awake() + { + chart = gameObject.GetComponent<BarChart>(); + chart.ClearData(); + for (int i = 0; i < 5; i++) + { + chart.AddYAxisData("y" + i); + chart.AddData(0, Random.Range(0, 200)); + } + } + + void Update() + { + if (Time.time - lastTime >= 3f) + { + lastTime = Time.time; + UpdateData(); + } + } + + void UpdateData() + { + var serie = chart.GetSerie(0); + + for (int i = 0; i < serie.dataCount; i++) + { + if (Random.Range(0, 1f) > 0.9f) + chart.UpdateData(0, i, chart.GetData(0, i) + Mathf.Round(Random.Range(0, 2000))); + else + chart.UpdateData(0, i, chart.GetData(0, i) + Mathf.Round(Random.Range(0, 200))); + } + } + } +} \ No newline at end of file diff --git a/Examples/Example21_BarRace.cs.meta b/Examples/Example21_BarRace.cs.meta new file mode 100644 index 00000000..70e9a193 --- /dev/null +++ b/Examples/Example21_BarRace.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9842ca7fe07044666950b6f53ef65fdb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Examples/Runtime/Example30_PieChart.cs b/Examples/Example30_PieChart.cs similarity index 96% rename from Examples/Runtime/Example30_PieChart.cs rename to Examples/Example30_PieChart.cs index 216a7ac8..e40f063c 100644 --- a/Examples/Runtime/Example30_PieChart.cs +++ b/Examples/Example30_PieChart.cs @@ -1,4 +1,3 @@ - using System.Collections; using UnityEngine; using UnityEngine.EventSystems; @@ -73,7 +72,7 @@ namespace XCharts.Example chart.AddData(0, 135, "视频广告"); chart.AddData(0, 1548, "搜索引擎"); - chart.onPointerClickPie = delegate (PointerEventData e, int serieIndex, int dataIndex) + chart.onPointerClickPie = delegate(PointerEventData e, int serieIndex, int dataIndex) { }; @@ -118,12 +117,12 @@ namespace XCharts.Example chart.RefreshChart(); yield return new WaitForSeconds(1); - serie.data[0].GetOrAddComponent<SerieDataBaseInfo>().selected = true; + serie.data[0].selected = true; chart.RefreshChart(); yield return new WaitForSeconds(1); serie.gap = 0f; - serie.data[0].GetOrAddComponent<SerieDataBaseInfo>().selected = false; + serie.data[0].selected = false; chart.RefreshChart(); yield return new WaitForSeconds(1); } diff --git a/Examples/Runtime/Example30_PieChart.cs.meta b/Examples/Example30_PieChart.cs.meta similarity index 100% rename from Examples/Runtime/Example30_PieChart.cs.meta rename to Examples/Example30_PieChart.cs.meta diff --git a/Examples/Runtime/Example31_PieUpdateName.cs b/Examples/Example31_PieUpdateName.cs similarity index 99% rename from Examples/Runtime/Example31_PieUpdateName.cs rename to Examples/Example31_PieUpdateName.cs index b39f8a95..85091050 100644 --- a/Examples/Runtime/Example31_PieUpdateName.cs +++ b/Examples/Example31_PieUpdateName.cs @@ -1,4 +1,3 @@ - using UnityEngine; using XCharts.Runtime; diff --git a/Examples/Runtime/Example31_PieUpdateName.cs.meta b/Examples/Example31_PieUpdateName.cs.meta similarity index 100% rename from Examples/Runtime/Example31_PieUpdateName.cs.meta rename to Examples/Example31_PieUpdateName.cs.meta diff --git a/Examples/Runtime/Example40_Radar.cs b/Examples/Example40_Radar.cs similarity index 99% rename from Examples/Runtime/Example40_Radar.cs rename to Examples/Example40_Radar.cs index b56e771a..f33dc258 100644 --- a/Examples/Runtime/Example40_Radar.cs +++ b/Examples/Example40_Radar.cs @@ -1,4 +1,3 @@ - using System.Collections; using System.Collections.Generic; using UnityEngine; diff --git a/Examples/Runtime/Example40_Radar.cs.meta b/Examples/Example40_Radar.cs.meta similarity index 100% rename from Examples/Runtime/Example40_Radar.cs.meta rename to Examples/Example40_Radar.cs.meta diff --git a/Examples/Runtime/Example41_RadarUpdate.cs b/Examples/Example41_RadarUpdate.cs similarity index 99% rename from Examples/Runtime/Example41_RadarUpdate.cs rename to Examples/Example41_RadarUpdate.cs index 5effeb66..baaa46be 100644 --- a/Examples/Runtime/Example41_RadarUpdate.cs +++ b/Examples/Example41_RadarUpdate.cs @@ -1,4 +1,3 @@ - using UnityEngine; using XCharts.Runtime; diff --git a/Examples/Runtime/Example41_RadarUpdate.cs.meta b/Examples/Example41_RadarUpdate.cs.meta similarity index 100% rename from Examples/Runtime/Example41_RadarUpdate.cs.meta rename to Examples/Example41_RadarUpdate.cs.meta diff --git a/Examples/Runtime/Example50_Scatter.cs b/Examples/Example50_Scatter.cs similarity index 87% rename from Examples/Runtime/Example50_Scatter.cs rename to Examples/Example50_Scatter.cs index f2ddb276..74b8d6c3 100644 --- a/Examples/Runtime/Example50_Scatter.cs +++ b/Examples/Example50_Scatter.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEngine; @@ -25,12 +24,12 @@ namespace XCharts.Example float SymbolSize(List<double> data) { - return (float)(Math.Sqrt(data[2]) / 6e2); + return (float) (Math.Sqrt(data[2]) / 6e2); } float SymbolSelectedSize(List<double> data) { - return (float)(Math.Sqrt(data[2]) / 5e2); + return (float) (Math.Sqrt(data[2]) / 5e2); } } } \ No newline at end of file diff --git a/Examples/Runtime/Example50_Scatter.cs.meta b/Examples/Example50_Scatter.cs.meta similarity index 100% rename from Examples/Runtime/Example50_Scatter.cs.meta rename to Examples/Example50_Scatter.cs.meta diff --git a/Examples/Runtime/Example60_Heatmap.cs b/Examples/Example60_Heatmap.cs similarity index 79% rename from Examples/Runtime/Example60_Heatmap.cs rename to Examples/Example60_Heatmap.cs index fe000dff..96273243 100644 --- a/Examples/Runtime/Example60_Heatmap.cs +++ b/Examples/Example60_Heatmap.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using XCharts.Runtime; @@ -48,11 +47,10 @@ namespace XCharts.Example serie.itemStyle.borderColor = Color.clear; //设置高亮样式 - serie.AddExtraComponent<Emphasis>(); - serie.emphasis.show = true; - serie.emphasis.itemStyle.show = true; - serie.emphasis.itemStyle.borderWidth = 1; - serie.emphasis.itemStyle.borderColor = Color.black; + serie.AddExtraComponent<EmphasisItemStyle>(); + serie.emphasisItemStyle.show = true; + serie.emphasisItemStyle.borderWidth = 1; + serie.emphasisItemStyle.borderColor = Color.black; //设置视觉映射组件 var visualMap = chart.GetChartComponent<VisualMap>(); @@ -66,17 +64,25 @@ namespace XCharts.Example visualMap.location.left = 30; //清空颜色重新添加 - visualMap.inRange.Clear(); var heatmapGridWid = 10f; - int xSplitNumber = (int)(grid.context.width / heatmapGridWid); - int ySplitNumber = (int)(grid.context.height / heatmapGridWid); - var colors = new List<string>{"#313695", "#4575b4", "#74add1", "#abd9e9", "#e0f3f8", "#ffffbf", - "#fee090", "#fdae61", "#f46d43", "#d73027", "#a50026"}; - foreach (var str in colors) + int xSplitNumber = (int) (grid.context.width / heatmapGridWid); + int ySplitNumber = (int) (grid.context.height / heatmapGridWid); + var colors = new List<string> { - visualMap.inRange.Add(ThemeStyle.GetColor(str)); - } + "#313695", + "#4575b4", + "#74add1", + "#abd9e9", + "#e0f3f8", + "#ffffbf", + "#fee090", + "#fdae61", + "#f46d43", + "#d73027", + "#a50026" + }; + visualMap.AddColors(colors); //添加xAxis的数据 for (int i = 0; i < xSplitNumber; i++) { diff --git a/Examples/Runtime/Example60_Heatmap.cs.meta b/Examples/Example60_Heatmap.cs.meta similarity index 100% rename from Examples/Runtime/Example60_Heatmap.cs.meta rename to Examples/Example60_Heatmap.cs.meta diff --git a/Examples/Runtime/Example80_Polar.cs b/Examples/Example80_Polar.cs similarity index 99% rename from Examples/Runtime/Example80_Polar.cs rename to Examples/Example80_Polar.cs index cb76cfb8..fdfb0b04 100644 --- a/Examples/Runtime/Example80_Polar.cs +++ b/Examples/Example80_Polar.cs @@ -1,5 +1,3 @@ - - using UnityEngine; using XCharts.Runtime; diff --git a/Examples/Runtime/Example80_Polar.cs.meta b/Examples/Example80_Polar.cs.meta similarity index 100% rename from Examples/Runtime/Example80_Polar.cs.meta rename to Examples/Example80_Polar.cs.meta diff --git a/Examples/Runtime/Example90_Candlestick.cs b/Examples/Example90_Candlestick.cs similarity index 75% rename from Examples/Runtime/Example90_Candlestick.cs rename to Examples/Example90_Candlestick.cs index 64fef408..895e305d 100644 --- a/Examples/Runtime/Example90_Candlestick.cs +++ b/Examples/Example90_Candlestick.cs @@ -1,5 +1,3 @@ - - using UnityEngine; using XCharts.Runtime; @@ -31,9 +29,7 @@ namespace XCharts.Example } } - void AddData() - { - } + void AddData() { } void GenerateOHLC(int count) { @@ -46,15 +42,17 @@ namespace XCharts.Example for (int i = 0; i < count; i++) { - baseValue = baseValue + Random.Range(0f,1f) * 30 - 10; - for(int j=0;j< 4;j++){ - boxVals[j] = (Random.Range(0f,1f) - 0.5f) * dayRange + baseValue; + baseValue = baseValue + Random.Range(0f, 1f) * 30 - 10; + for (int j = 0; j < 4; j++) + { + boxVals[j] = (Random.Range(0f, 1f) - 0.5f) * dayRange + baseValue; } System.Array.Sort(boxVals); - var openIdx = Mathf.RoundToInt(Random.Range(0f,1f) * 3); - var closeIdx = Mathf.RoundToInt(Random.Range(0f,1f) * 2); - if(openIdx == closeIdx){ - closeIdx ++; + var openIdx = Mathf.RoundToInt(Random.Range(0f, 1f) * 3); + var closeIdx = Mathf.RoundToInt(Random.Range(0f, 1f) * 2); + if (openIdx == closeIdx) + { + closeIdx++; } //var volumn = boxVals[3]*(1000+Random.Range(0f,1f) * 500); var open = boxVals[openIdx]; @@ -63,7 +61,7 @@ namespace XCharts.Example var heighest = boxVals[3]; chart.AddXAxisData(i.ToString()); - chart.AddData(0,open,close,lowest,heighest); + chart.AddData(0, open, close, lowest, heighest); } } } diff --git a/Examples/Runtime/Example90_Candlestick.cs.meta b/Examples/Example90_Candlestick.cs.meta similarity index 100% rename from Examples/Runtime/Example90_Candlestick.cs.meta rename to Examples/Example90_Candlestick.cs.meta diff --git a/Examples/Runtime/Example_AddChart.cs b/Examples/Example_AddChart.cs similarity index 99% rename from Examples/Runtime/Example_AddChart.cs rename to Examples/Example_AddChart.cs index 5d4ff601..80359764 100644 --- a/Examples/Runtime/Example_AddChart.cs +++ b/Examples/Example_AddChart.cs @@ -1,4 +1,3 @@ - using UnityEngine; using XCharts.Runtime; diff --git a/Examples/Runtime/Example_AddChart.cs.meta b/Examples/Example_AddChart.cs.meta similarity index 100% rename from Examples/Runtime/Example_AddChart.cs.meta rename to Examples/Example_AddChart.cs.meta diff --git a/Examples/Runtime/Example_Component.cs b/Examples/Example_Component.cs similarity index 84% rename from Examples/Runtime/Example_Component.cs rename to Examples/Example_Component.cs index 195d63f3..9847c970 100644 --- a/Examples/Runtime/Example_Component.cs +++ b/Examples/Example_Component.cs @@ -1,4 +1,3 @@ - using UnityEngine; using XCharts.Runtime; @@ -28,9 +27,7 @@ namespace XCharts.Example label.offset = new Vector3(0, 20, 0); var serieData = chart.AddData(0, 20); - //var serieData = serie1.GetSerieData(0); - var baseInfo = serieData.GetOrAddComponent<SerieDataBaseInfo>(); - baseInfo.radius = 10; + serieData.radius = 10; var itemStyle = serieData.GetOrAddComponent<ItemStyle>(); itemStyle.color = Color.blue; } diff --git a/Examples/Runtime/Example_Component.cs.meta b/Examples/Example_Component.cs.meta similarity index 100% rename from Examples/Runtime/Example_Component.cs.meta rename to Examples/Example_Component.cs.meta diff --git a/Examples/Runtime/Example_Dynamic.cs b/Examples/Example_Dynamic.cs similarity index 93% rename from Examples/Runtime/Example_Dynamic.cs rename to Examples/Example_Dynamic.cs index 43d36a3a..e2a2f94d 100644 --- a/Examples/Runtime/Example_Dynamic.cs +++ b/Examples/Example_Dynamic.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; using XCharts.Runtime; @@ -12,7 +11,7 @@ namespace XCharts.Example { public int maxCacheDataNumber = 100; public float initDataTime = 2; - public bool insertDataToHead = false; + public bool insertDataToHead = true; private BaseChart chart; private float updateTime; @@ -42,7 +41,7 @@ namespace XCharts.Example { if (initCount < maxCacheDataNumber) { - int count = (int)(maxCacheDataNumber / initDataTime * Time.deltaTime); + int count = (int) (maxCacheDataNumber / initDataTime * Time.deltaTime); for (int i = 0; i < count; i++) { timeNow = timeNow.AddSeconds(1); diff --git a/Examples/Runtime/Example_Dynamic.cs.meta b/Examples/Example_Dynamic.cs.meta similarity index 100% rename from Examples/Runtime/Example_Dynamic.cs.meta rename to Examples/Example_Dynamic.cs.meta diff --git a/Examples/Runtime/Example_LargeData.cs b/Examples/Example_LargeData.cs similarity index 99% rename from Examples/Runtime/Example_LargeData.cs rename to Examples/Example_LargeData.cs index 6ae52e64..6165c141 100644 --- a/Examples/Runtime/Example_LargeData.cs +++ b/Examples/Example_LargeData.cs @@ -1,4 +1,3 @@ - using UnityEngine; using XCharts.Runtime; diff --git a/Examples/Runtime/Example_LargeData.cs.meta b/Examples/Example_LargeData.cs.meta similarity index 100% rename from Examples/Runtime/Example_LargeData.cs.meta rename to Examples/Example_LargeData.cs.meta diff --git a/Examples/Runtime/Example_PieChart.cs b/Examples/Example_PieChart.cs similarity index 99% rename from Examples/Runtime/Example_PieChart.cs rename to Examples/Example_PieChart.cs index f55f1b9f..173b55cc 100644 --- a/Examples/Runtime/Example_PieChart.cs +++ b/Examples/Example_PieChart.cs @@ -1,4 +1,3 @@ - using UnityEngine; using XCharts.Runtime; diff --git a/Examples/Runtime/Example_PieChart.cs.meta b/Examples/Example_PieChart.cs.meta similarity index 100% rename from Examples/Runtime/Example_PieChart.cs.meta rename to Examples/Example_PieChart.cs.meta diff --git a/Examples/Runtime/Example_Test.cs b/Examples/Example_Test.cs similarity index 67% rename from Examples/Runtime/Example_Test.cs rename to Examples/Example_Test.cs index 66049cf3..f105bc79 100644 --- a/Examples/Runtime/Example_Test.cs +++ b/Examples/Example_Test.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; using XCharts.Runtime; @@ -31,21 +30,22 @@ namespace XCharts.Example void OnTestBtn() { - object[][] m_TestData = new object[][]{ - new object[]{"01/06/20", 2.2d, 5.6d}, - new object[]{"22/06/20", 2.4d, 5.3d}, - new object[]{"04/08/21", 4.5d, 5.4d}, - new object[]{"05/08/21", 6.3d, 6.4d}, - new object[]{"06/08/21", 3.1d, 6.4d}, - new object[]{"09/08/21", 3.9d, 6.3d}, - new object[]{"10/08/21", 1.9d, 4.6d}, + object[][] m_TestData = new object[][] + { + new object[] { "01/06/20", 2.2d, 5.6d }, + new object[] { "22/06/20", 2.4d, 5.3d }, + new object[] { "04/08/21", 4.5d, 5.4d }, + new object[] { "05/08/21", 6.3d, 6.4d }, + new object[] { "06/08/21", 3.1d, 6.4d }, + new object[] { "09/08/21", 3.9d, 6.3d }, + new object[] { "10/08/21", 1.9d, 4.6d }, }; chart.ClearData(); foreach (var list in m_TestData) { - chart.AddXAxisData((string)list[0]); - chart.AddData(0, (double)list[1]); - chart.AddData(1, (double)list[2]); + chart.AddXAxisData((string) list[0]); + chart.AddData(0, (double) list[1]); + chart.AddData(1, (double) list[2]); } } diff --git a/Examples/Runtime/Example_Test.cs.meta b/Examples/Example_Test.cs.meta similarity index 100% rename from Examples/Runtime/Example_Test.cs.meta rename to Examples/Example_Test.cs.meta diff --git a/Examples/Runtime/Example_TestTime.cs b/Examples/Example_TestTime.cs similarity index 99% rename from Examples/Runtime/Example_TestTime.cs rename to Examples/Example_TestTime.cs index bb1879b9..59f813d2 100644 --- a/Examples/Runtime/Example_TestTime.cs +++ b/Examples/Example_TestTime.cs @@ -1,4 +1,3 @@ - using UnityEngine; using XCharts.Runtime; diff --git a/Examples/Runtime/Example_TestTime.cs.meta b/Examples/Example_TestTime.cs.meta similarity index 100% rename from Examples/Runtime/Example_TestTime.cs.meta rename to Examples/Example_TestTime.cs.meta diff --git a/Examples/Runtime/XCharts.Examples.Runtime.asmdef b/Examples/XCharts.Examples.Runtime.asmdef similarity index 100% rename from Examples/Runtime/XCharts.Examples.Runtime.asmdef rename to Examples/XCharts.Examples.Runtime.asmdef diff --git a/Examples/Runtime/XCharts.Examples.Runtime.asmdef.meta b/Examples/XCharts.Examples.Runtime.asmdef.meta similarity index 100% rename from Examples/Runtime/XCharts.Examples.Runtime.asmdef.meta rename to Examples/XCharts.Examples.Runtime.asmdef.meta diff --git a/Documentation/README-EN.md b/README-EN.md similarity index 100% rename from Documentation/README-EN.md rename to README-EN.md diff --git a/Documentation/README-EN.md.meta b/README-EN.md.meta similarity index 75% rename from Documentation/README-EN.md.meta rename to README-EN.md.meta index 9f886566..eca53158 100644 --- a/Documentation/README-EN.md.meta +++ b/README-EN.md.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 29f30ecf23bb44bc5b0820dc5ee7a23e +guid: 16271fd54c185499f9e4a915583d43e5 TextScriptImporter: externalObjects: {} userData: diff --git a/README.md b/README.md index b16d3487..1521ee01 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ <br> 一款基于UGUI的数据可视化图表插件。 <br> - <a href="Documentation/README-EN.md">English Doc</a> + <a href="README-EN.md">English Doc</a> </p> <p align="center"> <a href="https://github.com/XCharts-Team/XCharts/blob/master/LICENSE"> @@ -43,7 +43,7 @@ </a> </p> -一款基于`UGUI`的功能强大、易用、参数可配置的数据可视化图表插件。支持折线图、柱状图、饼图、雷达图、散点图、热力图、环形图、K线图、极坐标、平行坐标等十种常见免费内置图表,以及3D柱图、漏斗图、金字塔、仪表盘、水位图、象形柱图、甘特图、矩形树图等多种付费扩展图表。 +一款基于`UGUI`的功能强大、易用、参数可配置的数据可视化图表插件。支持折线图、柱状图、饼图、雷达图、散点图、热力图、环形图、K线图、极坐标、平行坐标等十种常见免费内置图表,以及3D饼图、3D柱图、漏斗图、金字塔、仪表盘、水位图、象形柱图、甘特图、矩形树图等多种扩展图表。 [XCharts3.0 教程](Documentation/XChartsTutorial01-ZH.md) [XCharts3.0 API](Documentation/XChartsAPI-ZH.md) @@ -85,9 +85,10 @@ - 更小的序列化文件。 - 更好的交互体验。 - 更多的组件支持。 +- 更强大的文本自述能力。 - 更合理的组件调整。 - 更灵活的组件插拔。 -- 更方便的二次开发。 +- 更高效的二次开发。 - 更丰富的Demo示例。 ## XCharts3.0 和 2.0 数据对比 @@ -105,7 +106,7 @@ - XCharts3.0 不兼容 XCharts2.0 版本,建议旧项目还是继续使用XCharts2.0,新项目使用XCharts3.0。 - XCharts2.0 进入维护阶段,后续只修复严重bug理论上不再加新功能。 - XCharts 理论上支持Unity 5.6及以上版本,但由于版本测试有限难免疏漏,发现版本兼容问题可提Issue。 -- XCharts 内置图表都为常见的图表,可以免费使用;扩展图表大部分为不常使用的图表,有需要的可付费获取,感谢对XCharts的支持。 +- XCharts 内置图表都为常见的图表,可以免费使用;扩展图表大部分为不常使用的图表,有需要的可付费获取,详情[☞ 看这里](Documentation/SUPPORT.md) - 本仓库只包含XCharts源码,不包含Demo示例部分。需要查看Demo示例请到[XCharts-Demo](https://github.com/XCharts-Team/XCharts-Demo) ## 截图 @@ -118,7 +119,23 @@ ## 使用 -[XCharts教程:5分钟上手教程](Documentation/XChartsTutorial01-ZH.md) +1. 导入`XCharts`的`unitypackage`或者源码到项目 +2. 在`Hierarchy`视图下右键选择`XCharts->LineChart`,即可创建一个默认的折线图 +3. 在`Inspector`试图可以调整各个组件的参数,并在`Game`视图看到实时效果 + +更多教程请看:[XCharts教程:5分钟上手教程](Documentation/XChartsTutorial01-ZH.md) + +## FAQ + +1. XCharts 可以免费使用吗? + 答:可以免费使用。一些高级功能和扩展图表可根据自己的需求,再单独付费订阅和购买。 + +2. XCharts 支持代码动态修改配置和数据吗? + 答:支持。 + +3. 这个插件除了用在Unity,还能用在其他平台(如Winform或WPF)吗? + 答:目前只支持在Unity中使用。 + ## 日志 diff --git a/Runtime/Chart/BarChart.cs b/Runtime/Chart/BarChart.cs index f01f53ac..65cb0d73 100644 --- a/Runtime/Chart/BarChart.cs +++ b/Runtime/Chart/BarChart.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -27,4 +26,4 @@ namespace XCharts.Runtime } } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/CandlestickChart.cs b/Runtime/Chart/CandlestickChart.cs index 9e6a162f..be7e0263 100644 --- a/Runtime/Chart/CandlestickChart.cs +++ b/Runtime/Chart/CandlestickChart.cs @@ -1,5 +1,3 @@ - - using UnityEngine; namespace XCharts.Runtime @@ -28,4 +26,4 @@ namespace XCharts.Runtime } } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/HeatmapChart.cs b/Runtime/Chart/HeatmapChart.cs index 7e013bfe..421ae09e 100644 --- a/Runtime/Chart/HeatmapChart.cs +++ b/Runtime/Chart/HeatmapChart.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -31,8 +30,8 @@ namespace XCharts.Runtime RemoveData(); var heatmapGridWid = 10f; - int xSplitNumber = (int)(grid.context.width / heatmapGridWid); - int ySplitNumber = (int)(grid.context.height / heatmapGridWid); + int xSplitNumber = (int) (grid.context.width / heatmapGridWid); + int ySplitNumber = (int) (grid.context.height / heatmapGridWid); Heatmap.AddDefaultSerie(this, GenerateDefaultSerieName()); @@ -45,13 +44,21 @@ namespace XCharts.Runtime visualMap.location.align = Location.Align.BottomLeft; visualMap.location.bottom = 100; visualMap.location.left = 30; - var colors = new List<string>{"#313695", "#4575b4", "#74add1", "#abd9e9", "#e0f3f8", "#ffffbf", - "#fee090", "#fdae61", "#f46d43", "#d73027", "#a50026"}; - visualMap.inRange.Clear(); - foreach (var str in colors) + var colors = new List<string> { - visualMap.inRange.Add(ThemeStyle.GetColor(str)); - } + "#313695", + "#4575b4", + "#74add1", + "#abd9e9", + "#e0f3f8", + "#ffffbf", + "#fee090", + "#fdae61", + "#f46d43", + "#d73027", + "#a50026" + }; + visualMap.AddColors(colors); for (int i = 0; i < xSplitNumber; i++) { xAxis.data.Add((i + 1).ToString()); @@ -74,4 +81,4 @@ namespace XCharts.Runtime } } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/LineChart.cs b/Runtime/Chart/LineChart.cs index 331d35c6..c5317f5c 100644 --- a/Runtime/Chart/LineChart.cs +++ b/Runtime/Chart/LineChart.cs @@ -1,5 +1,3 @@ - - using UnityEngine; namespace XCharts.Runtime @@ -28,4 +26,4 @@ namespace XCharts.Runtime } } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/ParallelChart.cs b/Runtime/Chart/ParallelChart.cs index b955dbfa..63abdf69 100644 --- a/Runtime/Chart/ParallelChart.cs +++ b/Runtime/Chart/ParallelChart.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -28,4 +27,4 @@ namespace XCharts.Runtime Parallel.AddDefaultSerie(this, GenerateDefaultSerieName()); } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/PieChart.cs b/Runtime/Chart/PieChart.cs index 41fb5e89..f6ef9d32 100644 --- a/Runtime/Chart/PieChart.cs +++ b/Runtime/Chart/PieChart.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -18,4 +17,4 @@ namespace XCharts.Runtime Pie.AddDefaultSerie(this, GenerateDefaultSerieName()); } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/PolarChart.cs b/Runtime/Chart/PolarChart.cs index 77e24b2d..580efb92 100644 --- a/Runtime/Chart/PolarChart.cs +++ b/Runtime/Chart/PolarChart.cs @@ -1,5 +1,3 @@ - - using UnityEngine; namespace XCharts.Runtime @@ -32,4 +30,4 @@ namespace XCharts.Runtime } } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/RadarChart.cs b/Runtime/Chart/RadarChart.cs index 01942892..ca01353b 100644 --- a/Runtime/Chart/RadarChart.cs +++ b/Runtime/Chart/RadarChart.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -17,4 +16,4 @@ namespace XCharts.Runtime Radar.AddDefaultSerie(this, GenerateDefaultSerieName()); } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/RingChart.cs b/Runtime/Chart/RingChart.cs index a591f264..ae04dd2a 100644 --- a/Runtime/Chart/RingChart.cs +++ b/Runtime/Chart/RingChart.cs @@ -1,5 +1,3 @@ - - using UnityEngine; namespace XCharts.Runtime @@ -17,4 +15,4 @@ namespace XCharts.Runtime Ring.AddDefaultSerie(this, GenerateDefaultSerieName()); } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/ScatterChart.cs b/Runtime/Chart/ScatterChart.cs index 194b84b7..a6ce4d97 100644 --- a/Runtime/Chart/ScatterChart.cs +++ b/Runtime/Chart/ScatterChart.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -29,4 +28,4 @@ namespace XCharts.Runtime Scatter.AddDefaultSerie(this, GenerateDefaultSerieName()); } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/SimplifiedBarChart.cs b/Runtime/Chart/SimplifiedBarChart.cs index df919e1c..f2079b3a 100644 --- a/Runtime/Chart/SimplifiedBarChart.cs +++ b/Runtime/Chart/SimplifiedBarChart.cs @@ -1,5 +1,3 @@ - - using UnityEngine; namespace XCharts.Runtime @@ -28,4 +26,4 @@ namespace XCharts.Runtime } } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/SimplifiedCandlestickChart.cs b/Runtime/Chart/SimplifiedCandlestickChart.cs index 5abcb1f6..0d2d8ef5 100644 --- a/Runtime/Chart/SimplifiedCandlestickChart.cs +++ b/Runtime/Chart/SimplifiedCandlestickChart.cs @@ -1,5 +1,3 @@ - - using UnityEngine; namespace XCharts.Runtime @@ -28,4 +26,4 @@ namespace XCharts.Runtime } } } -} +} \ No newline at end of file diff --git a/Runtime/Chart/SimplifiedLineChart.cs b/Runtime/Chart/SimplifiedLineChart.cs index 5064c3ea..4553cbbe 100644 --- a/Runtime/Chart/SimplifiedLineChart.cs +++ b/Runtime/Chart/SimplifiedLineChart.cs @@ -1,5 +1,3 @@ - - using UnityEngine; namespace XCharts.Runtime @@ -28,4 +26,4 @@ namespace XCharts.Runtime } } } -} +} \ No newline at end of file diff --git a/Runtime/Component/Animation/AnimationStyle.cs b/Runtime/Component/Animation/AnimationStyle.cs index 15b80509..9966e134 100644 --- a/Runtime/Component/Animation/AnimationStyle.cs +++ b/Runtime/Component/Animation/AnimationStyle.cs @@ -1,7 +1,6 @@ - +using System; using System.Collections.Generic; using UnityEngine; -using System; namespace XCharts.Runtime { @@ -233,7 +232,7 @@ namespace XCharts.Runtime if (m_IsEnd) return; - m_ActualDuration = (int)((Time.time - startTime) * 1000) - (m_FadeOut ? fadeOutDelay : fadeInDelay); + m_ActualDuration = (int) ((Time.time - startTime) * 1000) - (m_FadeOut ? fadeOutDelay : fadeInDelay); m_IsEnd = true; m_IsInit = false; @@ -380,9 +379,9 @@ namespace XCharts.Runtime public bool IsIndexAnimation() { - return context.type == AnimationType.LeftToRight - || context.type == AnimationType.Clockwise - || context.type == AnimationType.AlongPath; + return context.type == AnimationType.LeftToRight || + context.type == AnimationType.Clockwise || + context.type == AnimationType.AlongPath; } public float GetIndexDelay(int dataIndex) @@ -462,9 +461,9 @@ namespace XCharts.Runtime if (IsInDelay()) return; - m_ActualDuration = (int)((Time.time - startTime) * 1000) - fadeInDelay; + m_ActualDuration = (int) ((Time.time - startTime) * 1000) - fadeInDelay; var duration = GetCurrAnimationDuration(); - var delta = (float)(total / duration * Time.deltaTime); + var delta = (float) (total / duration * Time.deltaTime); if (m_FadeOut) { m_CurrDetailProgress -= delta; @@ -534,8 +533,8 @@ namespace XCharts.Runtime } else { - if ((destProgress - startProgress > 0 && currHig > destProgress) - || (destProgress - startProgress < 0 && currHig < destProgress)) + if ((destProgress - startProgress > 0 && currHig > destProgress) || + (destProgress - startProgress < 0 && currHig < destProgress)) { currHig = destProgress; isEnd = true; @@ -613,7 +612,7 @@ namespace XCharts.Runtime #endif if (!enable || m_IsEnd) return -1; - return (int)m_CurrDetailProgress; + return (int) m_CurrDetailProgress; } public float GetUpdateAnimationDuration() diff --git a/Runtime/Component/Animation/AnimationStyleContext.cs b/Runtime/Component/Animation/AnimationStyleContext.cs index b4f423f3..9184e0a7 100644 --- a/Runtime/Component/Animation/AnimationStyleContext.cs +++ b/Runtime/Component/Animation/AnimationStyleContext.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEngine; diff --git a/Runtime/Component/Animation/AnimationStyleHelper.cs b/Runtime/Component/Animation/AnimationStyleHelper.cs index 6f6e9bfd..332236da 100644 --- a/Runtime/Component/Animation/AnimationStyleHelper.cs +++ b/Runtime/Component/Animation/AnimationStyleHelper.cs @@ -39,9 +39,9 @@ namespace XCharts.Runtime public static void UpdateAnimationType(AnimationStyle animation, AnimationType defaultType) { - animation.context.type = animation.type == AnimationType.Default - ? defaultType - : animation.type; + animation.context.type = animation.type == AnimationType.Default ? + defaultType : + animation.type; } public static bool GetAnimationPosition(AnimationStyle animation, bool isY, Vector3 lp, Vector3 cp, float progress, ref Vector3 ip) diff --git a/Runtime/Component/Axis/AngleAxis/AngleAxis.cs b/Runtime/Component/Axis/AngleAxis/AngleAxis.cs index c0984d15..46909d73 100644 --- a/Runtime/Component/Axis/AngleAxis/AngleAxis.cs +++ b/Runtime/Component/Axis/AngleAxis/AngleAxis.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; diff --git a/Runtime/Component/Axis/AngleAxis/AngleAxisHandler.cs b/Runtime/Component/Axis/AngleAxis/AngleAxisHandler.cs index 5a06cbad..b57b5a4d 100644 --- a/Runtime/Component/Axis/AngleAxis/AngleAxisHandler.cs +++ b/Runtime/Component/Axis/AngleAxis/AngleAxisHandler.cs @@ -86,7 +86,7 @@ namespace XCharts.Runtime bool inside = axis.axisLabel.inside; var labelName = AxisHelper.GetLabelName(axis, total, i, axis.context.minValue, axis.context.maxValue, null, isPercentStack); - var label = ChartHelper.AddAxisLabelObject(splitNumber, i, objName + i, axisObj.transform, + var label = ChartHelper.AddAxisLabelObject(splitNumber, i, objName + i, axisObj.transform, new Vector2(scaleAngle, txtHig), axis, chart.theme.axis, labelName, Color.clear); label.text.SetAlignment(axis.axisLabel.textStyle.GetAlignment(TextAnchor.MiddleCenter)); @@ -124,9 +124,9 @@ namespace XCharts.Runtime } if (angleAxis.show && angleAxis.axisTick.show) { - if ((i == 1 && angleAxis.axisTick.showStartTick) - || (i == size - 1 && angleAxis.axisTick.showEndTick) - || (i > 1 && i < size - 1)) + if ((i == 1 && angleAxis.axisTick.showStartTick) || + (i == size - 1 && angleAxis.axisTick.showEndTick) || + (i > 1 && i < size - 1)) { var tickY = radius + tickLength; var tickPos = ChartHelper.GetPos(cenPos, tickY, currAngle, true); diff --git a/Runtime/Component/Axis/Axis.cs b/Runtime/Component/Axis/Axis.cs index 92ad2866..4c69114d 100644 --- a/Runtime/Component/Axis/Axis.cs +++ b/Runtime/Component/Axis/Axis.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEngine; @@ -366,11 +365,11 @@ namespace XCharts.Runtime { get { - return m_VertsDirty - || axisLine.anyDirty - || axisTick.anyDirty - || splitLine.anyDirty - || splitArea.anyDirty; + return m_VertsDirty || + axisLine.anyDirty || + axisTick.anyDirty || + splitLine.anyDirty || + splitArea.anyDirty; } } @@ -378,9 +377,9 @@ namespace XCharts.Runtime { get { - return m_ComponentDirty - || axisName.anyDirty - || axisLabel.anyDirty; + return m_ComponentDirty || + axisName.anyDirty || + axisLabel.anyDirty; } } @@ -656,11 +655,11 @@ namespace XCharts.Runtime if (IsCategory() && boundaryGap) { var each = axisLength / data.Count; - return (float)(each * (value + 0.5f)); + return (float) (each * (value + 0.5f)); } else { - return axisLength * (float)((value - context.minValue) / context.minMaxRange); + return axisLength * (float) ((value - context.minValue) / context.minMaxRange); } } @@ -754,21 +753,21 @@ namespace XCharts.Runtime if (value <= 0 || value == 1) return 0; else - return logBaseE ? (float)Math.Log(value) : (float)Math.Log(value, logBase); + return logBaseE ? (float) Math.Log(value) : (float) Math.Log(value, logBase); } public int GetLogMinIndex() { - return logBaseE - ? (int)Math.Log(context.minValue) - : (int)Math.Log(context.minValue, logBase); + return logBaseE ? + (int) Math.Log(context.minValue) : + (int) Math.Log(context.minValue, logBase); } public int GetLogMaxIndex() { - return logBaseE - ? (int)Math.Log(context.maxValue) - : (int)Math.Log(context.maxValue, logBase); + return logBaseE ? + (int) Math.Log(context.maxValue) : + (int) Math.Log(context.maxValue, logBase); } public double GetLabelValue(int index) diff --git a/Runtime/Component/Axis/AxisContext.cs b/Runtime/Component/Axis/AxisContext.cs index c42fe217..c47d5a6c 100644 --- a/Runtime/Component/Axis/AxisContext.cs +++ b/Runtime/Component/Axis/AxisContext.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEngine; @@ -56,7 +55,6 @@ namespace XCharts.Runtime private List<double> m_LabelValueList = new List<double>(); private List<string> m_RuntimeData = new List<string>(); - internal void Clear() { m_RuntimeData.Clear(); @@ -87,10 +85,10 @@ namespace XCharts.Runtime if (end > data.Count) end = data.Count; } - if (start != filterStart - || end != filterEnd - || dataZoom.minShowNum != filterMinShow - || isNeedUpdateFilterData) + if (start != filterStart || + end != filterEnd || + dataZoom.minShowNum != filterMinShow || + isNeedUpdateFilterData) { filterStart = start; filterEnd = end; diff --git a/Runtime/Component/Axis/AxisHandler.cs b/Runtime/Component/Axis/AxisHandler.cs index 4bf963d2..1256289b 100644 --- a/Runtime/Component/Axis/AxisHandler.cs +++ b/Runtime/Component/Axis/AxisHandler.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; using UnityEngine.UI; @@ -8,7 +7,7 @@ using XUGL; namespace XCharts { public abstract class AxisHandler<T> : MainComponentHandler - where T : Axis + where T : Axis { private static readonly string s_DefaultAxisName = "name"; private double m_LastInterval = double.MinValue; @@ -17,7 +16,7 @@ namespace XCharts internal override void SetComponent(MainComponent component) { - this.component = (T)component; + this.component = (T) component; } protected virtual Vector3 GetLabelPosition(float scaleWid, int i) @@ -25,6 +24,11 @@ namespace XCharts return Vector3.zero; } + protected virtual float GetAxisLineXOrY() + { + return 0; + } + protected virtual Orient orient { get; set; } protected virtual void UpdatePointerValue(Axis axis) @@ -50,8 +54,8 @@ namespace XCharts for (int j = 0; j < axis.GetDataCount(dataZoom); j++) { float pY = grid.context.y + j * splitWid; - if ((axis.boundaryGap && (local.y > pY && local.y <= pY + splitWid)) - || (!axis.boundaryGap && (local.y > pY - splitWid / 2 && local.y <= pY + splitWid / 2))) + if ((axis.boundaryGap && (local.y > pY && local.y <= pY + splitWid)) || + (!axis.boundaryGap && (local.y > pY - splitWid / 2 && local.y <= pY + splitWid / 2))) { axis.context.pointerValue = j; axis.context.pointerLabelPosition = axis.GetLabelObjectPosition(j); @@ -70,8 +74,8 @@ namespace XCharts for (int j = 0; j < axis.GetDataCount(dataZoom); j++) { float pX = grid.context.x + j * splitWid; - if ((axis.boundaryGap && (local.x > pX && local.x <= pX + splitWid)) - || (!axis.boundaryGap && (local.x > pX - splitWid / 2 && local.x <= pX + splitWid / 2))) + if ((axis.boundaryGap && (local.x > pX && local.x <= pX + splitWid)) || + (!axis.boundaryGap && (local.x > pX - splitWid / 2 && local.x <= pX + splitWid / 2))) { axis.context.pointerValue = j; axis.context.pointerLabelPosition = axis.GetLabelObjectPosition(j); @@ -140,10 +144,10 @@ namespace XCharts double tempMaxValue = 0; chart.GetSeriesMinMaxValue(axis, axisIndex, out tempMinValue, out tempMaxValue); - if (tempMinValue != axis.context.minValue - || tempMaxValue != axis.context.maxValue - || m_LastInterval != axis.interval - || m_LastSplitNumber != axis.splitNumber) + if (tempMinValue != axis.context.minValue || + tempMaxValue != axis.context.maxValue || + m_LastInterval != axis.interval || + m_LastSplitNumber != axis.splitNumber) { m_LastSplitNumber = axis.splitNumber; m_LastInterval = axis.interval; @@ -151,7 +155,6 @@ namespace XCharts axis.UpdateMinMaxValue(tempMinValue, tempMaxValue); axis.context.offset = 0; axis.context.lastCheckInverse = axis.inverse; - UpdateAxisTickValueList(axis); if (tempMinValue != 0 || tempMaxValue != 0) @@ -159,31 +162,31 @@ namespace XCharts var grid = chart.GetChartComponent<GridCoord>(axis.gridIndex); if (grid != null && axis is XAxis && axis.IsValue()) { - axis.context.offset = axis.context.minValue > 0 - ? 0 - : (axis.context.maxValue < 0 - ? grid.context.width - : (float)(Math.Abs(axis.context.minValue) * (grid.context.width - / (Math.Abs(axis.context.minValue) + Math.Abs(axis.context.maxValue)))) + axis.context.offset = axis.context.minValue > 0 ? + 0 : + (axis.context.maxValue < 0 ? + grid.context.width : + (float) (Math.Abs(axis.context.minValue) * (grid.context.width / + (Math.Abs(axis.context.minValue) + Math.Abs(axis.context.maxValue)))) ); axis.context.x = grid.context.x; - axis.context.y = grid.context.y; + axis.context.y = GetAxisLineXOrY(); axis.context.zeroY = grid.context.y; - axis.context.zeroX = grid.context.x - (float)(axis.context.minValue * grid.context.width / axis.context.minMaxRange); + axis.context.zeroX = grid.context.x - (float) (axis.context.minValue * grid.context.width / axis.context.minMaxRange); } if (grid != null && axis is YAxis && axis.IsValue()) { - axis.context.offset = axis.context.minValue > 0 - ? 0 - : (axis.context.maxValue < 0 - ? grid.context.height - : (float)(Math.Abs(axis.context.minValue) * (grid.context.height - / (Math.Abs(axis.context.minValue) + Math.Abs(axis.context.maxValue)))) + axis.context.offset = axis.context.minValue > 0 ? + 0 : + (axis.context.maxValue < 0 ? + grid.context.height : + (float) (Math.Abs(axis.context.minValue) * (grid.context.height / + (Math.Abs(axis.context.minValue) + Math.Abs(axis.context.maxValue)))) ); - axis.context.x = grid.context.x; + axis.context.x = GetAxisLineXOrY(); axis.context.y = grid.context.y; axis.context.zeroX = grid.context.x; - axis.context.zeroY = grid.context.y - (float)(axis.context.minValue * grid.context.height / axis.context.minMaxRange); + axis.context.zeroY = grid.context.y - (float) (axis.context.minValue * grid.context.height / axis.context.minMaxRange); } } var dataZoom = chart.GetDataZoomOfAxis(axis); @@ -220,8 +223,8 @@ namespace XCharts if (axis.IsTime()) { var lastCount = axis.context.labelValueList.Count; - DateTimeUtil.UpdateTimeAxisDateTimeList(axis.context.labelValueList, (int)axis.context.minValue, - (int)axis.context.maxValue, axis.splitNumber); + DateTimeUtil.UpdateTimeAxisDateTimeList(axis.context.labelValueList, (int) axis.context.minValue, + (int) axis.context.maxValue, axis.splitNumber); if (axis.context.labelValueList.Count != lastCount) axis.SetAllDirty(); @@ -255,7 +258,7 @@ namespace XCharts } } var value = 0d; - if (Mathf.Approximately((float)(axis.context.minValue % tick), 0)) + if (Mathf.Approximately((float) (axis.context.minValue % tick), 0)) { value = axis.context.minValue; } @@ -328,9 +331,10 @@ namespace XCharts } } - internal static void InitAxis(Axis axis, Axis relativedAxis, BaseChart chart, AxisHandler<T> handler, - Orient orient, float axisStartX, float axisStartY, float axisLength, float relativedLength) + protected void InitAxis(Axis relativedAxis, Orient orient, + float axisStartX, float axisStartY, float axisLength, float relativedLength) { + Axis axis = component; chart.InitAxisRuntimeData(axis); var objName = ChartCached.GetComponentObjectName(axis); @@ -358,23 +362,23 @@ namespace XCharts var eachWidth = AxisHelper.GetEachWidth(axis, axisLength, dataZoom); var gapWidth = axis.boundaryGap ? eachWidth / 2 : 0; - var textWidth = axis.axisLabel.width > 0 - ? axis.axisLabel.width - : (orient == Orient.Horizonal - ? AxisHelper.GetScaleWidth(axis, axisLength, 0, dataZoom) - : (axisStartX - chart.chartX) + var textWidth = axis.axisLabel.width > 0 ? + axis.axisLabel.width : + (orient == Orient.Horizonal ? + AxisHelper.GetScaleWidth(axis, axisLength, 0, dataZoom) : + (axisStartX - chart.chartX) ); - var textHeight = axis.axisLabel.height > 0 - ? axis.axisLabel.height - : 20f; + var textHeight = axis.axisLabel.height > 0 ? + axis.axisLabel.height : + 20f; var isPercentStack = SeriesHelper.IsPercentStack<Bar>(chart.series); var inside = axis.axisLabel.inside; var defaultAlignment = orient == Orient.Horizonal ? TextAnchor.MiddleCenter : - ((inside && axis.IsLeft()) || (!inside && axis.IsRight()) - ? TextAnchor.MiddleLeft - : TextAnchor.MiddleRight); + ((inside && axis.IsLeft()) || (!inside && axis.IsRight()) ? + TextAnchor.MiddleLeft : + TextAnchor.MiddleRight); if (axis.IsCategory() && axis.boundaryGap) splitNumber -= 1; @@ -398,9 +402,9 @@ namespace XCharts if (i == 0) axis.axisLabel.SetRelatedText(label.text, labelWidth); - var pos = handler.GetLabelPosition(totalWidth + gapWidth, i); + var pos = GetLabelPosition(totalWidth + gapWidth, i); label.SetPosition(pos); - handler.CheckValueLabelActive(axis, i, label, pos); + CheckValueLabelActive(axis, i, label, pos); axis.context.labelObjectList.Add(label); @@ -415,6 +419,7 @@ namespace XCharts var autoColor = axis.axisLine.GetColor(chart.theme.axis.lineColor); if (orient == Orient.Horizonal) { + var posY = GetAxisLineXOrY() + offset.y; switch (axis.axisName.labelStyle.position) { case LabelStyle.Position.Start: @@ -422,9 +427,9 @@ namespace XCharts label = ChartHelper.AddChartLabel(s_DefaultAxisName, axisObj.transform, axis.axisName.labelStyle, chart.theme.axis, axis.axisName.name, autoColor, TextAnchor.MiddleRight); label.SetActive(axis.axisName.labelStyle.show); - label.SetPosition(axis.position == Axis.AxisPosition.Top - ? new Vector2(zeroPos.x - offset.x, axisStartY + relativedLength + offset.y + axis.offset) - : new Vector2(zeroPos.x - offset.x, zeroPos.y + offset.y + axis.offset)); + label.SetPosition(axis.position == Axis.AxisPosition.Top ? + new Vector2(zeroPos.x - offset.x, axisStartY + relativedLength + offset.y + axis.offset) : + new Vector2(zeroPos.x - offset.x, posY)); break; case LabelStyle.Position.Middle: @@ -432,9 +437,9 @@ namespace XCharts label = ChartHelper.AddChartLabel(s_DefaultAxisName, axisObj.transform, axis.axisName.labelStyle, chart.theme.axis, axis.axisName.name, autoColor, TextAnchor.MiddleCenter); label.SetActive(axis.axisName.labelStyle.show); - label.SetPosition(axis.position == Axis.AxisPosition.Top - ? new Vector2(axisStartX + axisLength / 2 + offset.x, axisStartY + relativedLength - offset.y + axis.offset) - : new Vector2(axisStartX + axisLength / 2 + offset.x, axisStartY - offset.y + axis.offset)); + label.SetPosition(axis.position == Axis.AxisPosition.Top ? + new Vector2(axisStartX + axisLength / 2 + offset.x, axisStartY + relativedLength - offset.y + axis.offset) : + new Vector2(axisStartX + axisLength / 2 + offset.x, posY)); break; default: @@ -442,44 +447,45 @@ namespace XCharts label = ChartHelper.AddChartLabel(s_DefaultAxisName, axisObj.transform, axis.axisName.labelStyle, chart.theme.axis, axis.axisName.name, autoColor, TextAnchor.MiddleLeft); label.SetActive(axis.axisName.labelStyle.show); - label.SetPosition(axis.position == Axis.AxisPosition.Top - ? new Vector2(axisStartX + axisLength + offset.x, axisStartY + relativedLength + offset.y + axis.offset) - : new Vector2(axisStartX + axisLength + offset.x, zeroPos.y + offset.y + axis.offset)); + label.SetPosition(axis.position == Axis.AxisPosition.Top ? + new Vector2(axisStartX + axisLength + offset.x, axisStartY + relativedLength + offset.y + axis.offset) : + new Vector2(axisStartX + axisLength + offset.x, posY)); break; } } else { + var posX = GetAxisLineXOrY() + offset.x; switch (axis.axisName.labelStyle.position) { case LabelStyle.Position.Start: label = ChartHelper.AddChartLabel(s_DefaultAxisName, axisObj.transform, axis.axisName.labelStyle, - chart.theme.axis, axis.axisName.name, autoColor, TextAnchor.MiddleCenter); + chart.theme.axis, axis.axisName.name, autoColor, TextAnchor.MiddleCenter); label.SetActive(axis.axisName.labelStyle.show); label.SetPosition(axis.position == Axis.AxisPosition.Right ? new Vector2(axisStartX + relativedLength + offset.x + axis.offset, axisStartY - offset.y) : - new Vector2(zeroPos.x + offset.x + axis.offset, axisStartY - offset.y)); + new Vector2(posX, axisStartY - offset.y)); break; case LabelStyle.Position.Middle: label = ChartHelper.AddChartLabel(s_DefaultAxisName, axisObj.transform, axis.axisName.labelStyle, - chart.theme.axis, axis.axisName.name, autoColor, TextAnchor.MiddleCenter); + chart.theme.axis, axis.axisName.name, autoColor, TextAnchor.MiddleCenter); label.SetActive(axis.axisName.labelStyle.show); label.SetPosition(axis.position == Axis.AxisPosition.Right ? new Vector2(axisStartX + relativedLength - offset.x + axis.offset, axisStartY + axisLength / 2 + offset.y) : - new Vector2(axisStartX - offset.x + axis.offset, axisStartY + axisLength / 2 + offset.y)); + new Vector2(posX, axisStartY + axisLength / 2 + offset.y)); break; default: //LabelStyle.Position label = ChartHelper.AddChartLabel(s_DefaultAxisName, axisObj.transform, axis.axisName.labelStyle, - chart.theme.axis, axis.axisName.name, autoColor, TextAnchor.MiddleCenter); + chart.theme.axis, axis.axisName.name, autoColor, TextAnchor.MiddleCenter); label.SetActive(axis.axisName.labelStyle.show); label.SetPosition(axis.position == Axis.AxisPosition.Right ? new Vector2(axisStartX + relativedLength + offset.x + axis.offset, axisStartY + axisLength + offset.y) : - new Vector2(zeroPos.x + offset.x + axis.offset, axisStartY + axisLength + offset.y)); + new Vector2(posX, axisStartY + axisLength + offset.y)); break; } } @@ -495,9 +501,9 @@ namespace XCharts if (axis.IsTime() || axis.IsValue()) { - scaleWid = axis.context.minMaxRange != 0 - ? axis.GetDistance(axis.GetLabelValue(i), axisLength) - : 0; + scaleWid = axis.context.minMaxRange != 0 ? + axis.GetDistance(axis.GetLabelValue(i), axisLength) : + 0; } if (orient == Orient.Horizonal) @@ -513,7 +519,7 @@ namespace XCharts else current += axisStartY - axis.axisLabel.distance - fontSize / 2; - return new Vector3(axisStartX + scaleWid, current); + return new Vector3(axisStartX + scaleWid, current) + axis.axisLabel.offset; } else { @@ -528,7 +534,7 @@ namespace XCharts else current += axisStartX - axis.axisLabel.distance; - return new Vector3(current, axisStartY + scaleWid); + return new Vector3(current, axisStartY + scaleWid) + axis.axisLabel.offset; } } @@ -566,9 +572,9 @@ namespace XCharts { var size = AxisHelper.GetScaleNumber(axis, axisLength, dataZoom); - var current = orient == Orient.Horizonal - ? startX - : startY; + var current = orient == Orient.Horizonal ? + startX : + startY; for (int i = 0; i < size; i++) { @@ -587,17 +593,17 @@ namespace XCharts { if (orient == Orient.Horizonal) { - float pX = axis.IsTime() - ? (startX + axis.GetDistance(axis.GetLabelValue(i), axisLength)) - : current; + float pX = axis.IsTime() ? + (startX + axis.GetDistance(axis.GetLabelValue(i), axisLength)) : + current; if (axis.boundaryGap && axis.axisTick.alignWithLabel) pX -= scaleWidth / 2; var sY = 0f; var eY = 0f; - if ((axis.axisTick.inside && axis.IsBottom()) - || (!axis.axisTick.inside && axis.IsTop())) + if ((axis.axisTick.inside && axis.IsBottom()) || + (!axis.axisTick.inside && axis.IsTop())) { sY = startY + axis.offset + lineWidth; eY = sY + tickLength; @@ -614,17 +620,17 @@ namespace XCharts } else { - float pY = axis.IsTime() - ? (startY + axis.GetDistance(axis.GetLabelValue(i), axisLength)) - : current; + float pY = axis.IsTime() ? + (startY + axis.GetDistance(axis.GetLabelValue(i), axisLength)) : + current; if (axis.boundaryGap && axis.axisTick.alignWithLabel) pY -= scaleWidth / 2; var sX = 0f; var eX = 0f; - if ((axis.axisTick.inside && axis.IsLeft()) - || (!axis.axisTick.inside && axis.IsRight())) + if ((axis.axisTick.inside && axis.IsLeft()) || + (!axis.axisTick.inside && axis.IsRight())) { sX = startX + axis.offset + lineWidth; eX = sX + tickLength; @@ -690,9 +696,10 @@ namespace XCharts } } - internal static void DrawAxisSplit(VertexHelper vh, Axis axis, AxisTheme theme, DataZoom dataZoom, + protected void DrawAxisSplit(VertexHelper vh, AxisTheme theme, DataZoom dataZoom, Orient orient, float startX, float startY, float axisLength, float splitLength, Axis relativedAxis = null) { + Axis axis = component; var lineColor = axis.splitLine.GetColor(theme.splitLineColor); var lineWidth = axis.splitLine.GetWidth(theme.lineWidth); var lineType = axis.splitLine.GetType(theme.splitLineType); @@ -705,9 +712,9 @@ namespace XCharts size += 1; } - var current = orient == Orient.Horizonal - ? startX - : startY; + var current = orient == Orient.Horizonal ? + startX : + startY; for (int i = 0; i < size; i++) { var scaleWidth = AxisHelper.GetScaleWidth(axis, axisLength, axis.IsTime() ? i : i + 1, dataZoom); @@ -743,7 +750,7 @@ namespace XCharts { if (orient == Orient.Horizonal) { - if (relativedAxis == null || !MathUtil.Approximately(current, relativedAxis.context.x)) + if (relativedAxis == null || !MathUtil.Approximately(current, GetAxisLineXOrY())) ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, @@ -753,7 +760,7 @@ namespace XCharts } else { - if (relativedAxis == null || !MathUtil.Approximately(current, relativedAxis.context.y)) + if (relativedAxis == null || !MathUtil.Approximately(current, GetAxisLineXOrY())) ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, @@ -761,7 +768,6 @@ namespace XCharts new Vector3(startX + splitLength, current), lineColor); } - } } current += scaleWidth; diff --git a/Runtime/Component/Axis/AxisHelper.cs b/Runtime/Component/Axis/AxisHelper.cs index 560679a4..8a1d31e4 100644 --- a/Runtime/Component/Axis/AxisHelper.cs +++ b/Runtime/Component/Axis/AxisHelper.cs @@ -120,15 +120,15 @@ namespace XCharts.Runtime maxValue = -maxValue; } if (forcePercent) - return string.Format("{0}%", (int)value); + return string.Format("{0}%", (int) value); else return axis.axisLabel.GetFormatterContent(index, value, minValue, maxValue); } else if (axis.type == Axis.AxisType.Log) { - float value = axis.logBaseE - ? Mathf.Exp(axis.GetLogMinIndex() + index) - : Mathf.Pow(axis.logBase, axis.GetLogMinIndex() + index); + double value = axis.logBaseE ? + System.Math.Exp(axis.GetLogMinIndex() + index) : + System.Math.Pow(axis.logBase, axis.GetLogMinIndex() + index); if (axis.inverse) { value = -value; @@ -206,16 +206,16 @@ namespace XCharts.Runtime if (axis.boundaryGap) { - scaleNum = dataCount > 2 && dataCount % splitNum == 0 - ? splitNum + 1 - : splitNum + 2; + scaleNum = dataCount > 2 && dataCount % splitNum == 0 ? + splitNum + 1 : + splitNum + 2; } else { if (dataCount < splitNum) scaleNum = splitNum; - else scaleNum = dataCount > 2 && dataCount % splitNum == 0 - ? splitNum - : splitNum + 1; + else scaleNum = dataCount > 2 && dataCount % splitNum == 0 ? + splitNum : + splitNum + 1; } return scaleNum; } @@ -245,9 +245,9 @@ namespace XCharts.Runtime { var value = axis.GetLabelValue(index); var lastValue = axis.GetLabelValue(index - 1); - return axis.context.minMaxRange == 0 - ? 0 - : (float)(coordinateWidth * (value - lastValue) / axis.context.minMaxRange); + return axis.context.minMaxRange == 0 ? + 0 : + (float) (coordinateWidth * (value - lastValue) / axis.context.minMaxRange); } else { @@ -339,8 +339,7 @@ namespace XCharts.Runtime return; } if (axis.type == Axis.AxisType.Time) - { - } + { } else if (axis.minMaxType == Axis.AxisMinMaxType.Custom) { if (axis.min != 0 || axis.max != 0) @@ -365,8 +364,7 @@ namespace XCharts.Runtime case Axis.AxisMinMaxType.Default: if (minValue == 0 && maxValue == 0) - { - } + { } else if (minValue > 0 && maxValue > 0) { minValue = 0; @@ -454,7 +452,7 @@ namespace XCharts.Runtime if (axis.IsCategory()) { if (dataCount == 0) dataCount = axis.data.Count; - var categoryIndex = (int)value; + var categoryIndex = (int) value; var scaleWid = AxisHelper.GetDataWidth(axis, gridHeight, dataCount, dataZoom); float startY = gridXY + (axis.boundaryGap ? scaleWid / 2 : 0); return startY + scaleWid * categoryIndex; @@ -462,7 +460,7 @@ namespace XCharts.Runtime else { var yDataHig = (axis.context.minMaxRange == 0) ? 0f : - (float)((value - axis.context.minValue) / axis.context.minMaxRange * gridHeight); + (float) ((value - axis.context.minValue) / axis.context.minMaxRange * gridHeight); return gridXY + yDataHig; } @@ -533,16 +531,16 @@ namespace XCharts.Runtime { int minIndex = axis.GetLogMinIndex(); float nowIndex = axis.GetLogValue(value); - return includeGridXY - ? gridXY + (nowIndex - minIndex) / axis.splitNumber * gridHeight - : (nowIndex - minIndex) / axis.splitNumber * gridHeight; + return includeGridXY ? + gridXY + (nowIndex - minIndex) / axis.splitNumber * gridHeight : + (nowIndex - minIndex) / axis.splitNumber * gridHeight; } else if (axis.IsCategory()) { - var categoryIndex = (int)value; - return includeGridXY - ? gridXY + (axis.boundaryGap ? scaleWidth / 2 : 0) + scaleWidth * categoryIndex - : (axis.boundaryGap ? scaleWidth / 2 : 0) + scaleWidth * categoryIndex; + var categoryIndex = (int) value; + return includeGridXY ? + gridXY + (axis.boundaryGap ? scaleWidth / 2 : 0) + scaleWidth * categoryIndex : + (axis.boundaryGap ? scaleWidth / 2 : 0) + scaleWidth * categoryIndex; } else { @@ -550,13 +548,13 @@ namespace XCharts.Runtime if (axis.context.minMaxRange != 0) { if (realLength) - yDataHig = (float)(value * gridHeight / axis.context.minMaxRange); + yDataHig = (float) (value * gridHeight / axis.context.minMaxRange); else - yDataHig = (float)((value - axis.context.minValue) / axis.context.minMaxRange * gridHeight); + yDataHig = (float) ((value - axis.context.minValue) / axis.context.minMaxRange * gridHeight); } - return includeGridXY - ? gridXY + yDataHig - : yDataHig; + return includeGridXY ? + gridXY + yDataHig : + yDataHig; } } } diff --git a/Runtime/Component/Axis/AxisLabel.cs b/Runtime/Component/Axis/AxisLabel.cs index f90773ef..acac6161 100644 --- a/Runtime/Component/Axis/AxisLabel.cs +++ b/Runtime/Component/Axis/AxisLabel.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; using UnityEngine.UI; @@ -97,10 +96,10 @@ namespace XCharts.Runtime return new AxisLabel() { m_Show = true, - m_Interval = 0, - m_Inside = false, - m_Distance = 8, - m_TextStyle = new TextStyle(), + m_Interval = 0, + m_Inside = false, + m_Distance = 8, + m_TextStyle = new TextStyle(), }; } } @@ -150,9 +149,9 @@ namespace XCharts.Runtime { return m_FormatterFunction(labelIndex, 0, category); } - if (string.IsNullOrEmpty(category)) + if (string.IsNullOrEmpty(category)) return category; - + if (string.IsNullOrEmpty(m_Formatter)) { return m_TextLimit.GetLimitContent(category); @@ -205,7 +204,7 @@ namespace XCharts.Runtime { return m_FormatterFunction(labelIndex, value, null); } - var timestamp = (int)value; + var timestamp = (int) value; var dateTime = DateTimeUtil.GetDateTime(timestamp); var dateString = string.Empty; if (string.IsNullOrEmpty(numericFormatter)) diff --git a/Runtime/Component/Axis/AxisLine.cs b/Runtime/Component/Axis/AxisLine.cs index d242f93b..289a7ade 100644 --- a/Runtime/Component/Axis/AxisLine.cs +++ b/Runtime/Component/Axis/AxisLine.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime diff --git a/Runtime/Component/Axis/AxisName.cs b/Runtime/Component/Axis/AxisName.cs index 2e148644..412df3f9 100644 --- a/Runtime/Component/Axis/AxisName.cs +++ b/Runtime/Component/Axis/AxisName.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; diff --git a/Runtime/Component/Axis/AxisSplitArea.cs b/Runtime/Component/Axis/AxisSplitArea.cs index a477930c..833c0528 100644 --- a/Runtime/Component/Axis/AxisSplitArea.cs +++ b/Runtime/Component/Axis/AxisSplitArea.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEngine; @@ -43,7 +42,7 @@ namespace XCharts.Runtime return new AxisSplitArea() { m_Show = false, - m_Color = new List<Color32>() { } + m_Color = new List<Color32>() { } }; } } diff --git a/Runtime/Component/Axis/AxisSplitLine.cs b/Runtime/Component/Axis/AxisSplitLine.cs index aa461e20..8e47a14b 100644 --- a/Runtime/Component/Axis/AxisSplitLine.cs +++ b/Runtime/Component/Axis/AxisSplitLine.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; diff --git a/Runtime/Component/Axis/AxisTick.cs b/Runtime/Component/Axis/AxisTick.cs index 01d0772e..ff3e7191 100644 --- a/Runtime/Component/Axis/AxisTick.cs +++ b/Runtime/Component/Axis/AxisTick.cs @@ -1,5 +1,3 @@ - - using UnityEngine; namespace XCharts.Runtime diff --git a/Runtime/Component/Axis/ParallelAxis/ParallelAxis.cs b/Runtime/Component/Axis/ParallelAxis/ParallelAxis.cs index 6ffe00ed..18f86050 100644 --- a/Runtime/Component/Axis/ParallelAxis/ParallelAxis.cs +++ b/Runtime/Component/Axis/ParallelAxis/ParallelAxis.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -26,6 +25,5 @@ namespace XCharts.Runtime axisLabel.textLimit.enable = true; } - } } \ No newline at end of file diff --git a/Runtime/Component/Axis/ParallelAxis/ParallelAxisHander.cs b/Runtime/Component/Axis/ParallelAxis/ParallelAxisHander.cs index 71ebd410..76152220 100644 --- a/Runtime/Component/Axis/ParallelAxis/ParallelAxisHander.cs +++ b/Runtime/Component/Axis/ParallelAxis/ParallelAxisHander.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; @@ -64,10 +63,10 @@ namespace XCharts.Runtime var theme = chart.theme; var xAxisIndex = axis.index; axis.painter = chart.painter; - axis.refreshComponent = delegate () + axis.refreshComponent = delegate() { UpdateContext(axis); - InitAxis(axis, null, chart, this, + InitAxis(null, m_Orient, axis.context.x, axis.context.y, @@ -118,7 +117,7 @@ namespace XCharts.Runtime var dataZoom = chart.GetDataZoomOfAxis(axis); - DrawAxisSplit(vh, axis, chart.theme.axis, dataZoom, + DrawAxisSplit(vh, chart.theme.axis, dataZoom, m_Orient, axis.context.x, axis.context.y, @@ -159,5 +158,10 @@ namespace XCharts.Runtime axis.context.width); } } + + protected override float GetAxisLineXOrY() + { + return component.context.y; + } } } \ No newline at end of file diff --git a/Runtime/Component/Axis/RadiusAxis/RadiusAxis.cs b/Runtime/Component/Axis/RadiusAxis/RadiusAxis.cs index 69ce3c11..ab124143 100644 --- a/Runtime/Component/Axis/RadiusAxis/RadiusAxis.cs +++ b/Runtime/Component/Axis/RadiusAxis/RadiusAxis.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; namespace XCharts.Runtime diff --git a/Runtime/Component/Axis/RadiusAxis/RadiusAxisHandler.cs b/Runtime/Component/Axis/RadiusAxis/RadiusAxisHandler.cs index d33b5fae..630a0612 100644 --- a/Runtime/Component/Axis/RadiusAxis/RadiusAxisHandler.cs +++ b/Runtime/Component/Axis/RadiusAxis/RadiusAxisHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -52,7 +51,7 @@ namespace XCharts.Runtime double tempMinValue = 0; double tempMaxValue = 0; SeriesHelper.GetXMinMaxValue(chart.series, null, axis.polarIndex, true, axis.inverse, out tempMinValue, - out tempMaxValue, true); + out tempMaxValue, true); AxisHelper.AdjustMinMaxValue(axis, ref tempMinValue, ref tempMaxValue, true); if (tempMinValue != axis.context.minValue || tempMaxValue != axis.context.maxValue) { @@ -132,8 +131,8 @@ namespace XCharts.Runtime 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); + var tickVector = ChartHelper.GetVertialDire(dire) * + (tickLength + axis.axisLabel.distance); return ChartHelper.GetPos(cenPos, totalWidth, startAngle, true) + tickVector; } @@ -168,9 +167,9 @@ namespace XCharts.Runtime } if (radiusAxis.show && radiusAxis.axisTick.show) { - if ((i == 0 && radiusAxis.axisTick.showStartTick) - || (i == size && radiusAxis.axisTick.showEndTick) - || (i > 0 && i < size)) + if ((i == 0 && radiusAxis.axisTick.showStartTick) || + (i == size && radiusAxis.axisTick.showEndTick) || + (i > 0 && i < size)) { UGL.DrawLine(vh, pos, pos + tickVetor, tickWidth, chart.theme.axis.lineColor); } diff --git a/Runtime/Component/Axis/SingleAxis/SingleAxis.cs b/Runtime/Component/Axis/SingleAxis/SingleAxis.cs index d167bed1..87c974e5 100644 --- a/Runtime/Component/Axis/SingleAxis/SingleAxis.cs +++ b/Runtime/Component/Axis/SingleAxis/SingleAxis.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -87,15 +86,15 @@ namespace XCharts.Runtime if (m_Orient == Orient.Horizonal) { - context.width = width == 0 - ? chartWidth - context.left - context.right - : (width <= 1 ? chartWidth * width : width); + context.width = width == 0 ? + chartWidth - context.left - context.right : + (width <= 1 ? chartWidth * width : width); } else { - context.width = width == 0 - ? chartHeight - context.top - context.bottom - : (width <= 1 ? chartHeight * width : width); + context.width = width == 0 ? + chartHeight - context.top - context.bottom : + (width <= 1 ? chartHeight * width : width); } if (context.left != 0 && context.right == 0) diff --git a/Runtime/Component/Axis/SingleAxis/SingleAxisHandler.cs b/Runtime/Component/Axis/SingleAxis/SingleAxisHandler.cs index 75588884..cea04762 100644 --- a/Runtime/Component/Axis/SingleAxis/SingleAxisHandler.cs +++ b/Runtime/Component/Axis/SingleAxis/SingleAxisHandler.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; @@ -32,14 +31,14 @@ namespace XCharts.Runtime var theme = chart.theme; var xAxisIndex = axis.index; axis.painter = chart.painter; - axis.refreshComponent = delegate () + axis.refreshComponent = delegate() { axis.UpdateRuntimeData(chart.chartX, chart.chartY, chart.chartWidth, chart.chartHeight); - InitAxis(axis, null, chart, this, + InitAxis(null, axis.orient, axis.context.x, axis.context.y, @@ -83,7 +82,7 @@ namespace XCharts.Runtime if (AxisHelper.NeedShowSplit(axis)) { var dataZoom = chart.GetDataZoomOfAxis(axis); - DrawAxisSplit(vh, axis, chart.theme.axis, dataZoom, + DrawAxisSplit(vh, chart.theme.axis, dataZoom, axis.orient, axis.context.x, axis.context.y, @@ -109,14 +108,18 @@ namespace XCharts.Runtime { if (axis.show && axis.axisLine.show) { - var axisStartY = axis.context.y + axis.offset; DrawAxisLine(vh, axis, chart.theme.axis, axis.orient, axis.context.x, - axisStartY, + GetAxisLineXOrY(), axis.context.width); } } + + protected override float GetAxisLineXOrY() + { + return component.context.y + component.offset; + } } } \ No newline at end of file diff --git a/Runtime/Component/Axis/XAxis/XAxis.cs b/Runtime/Component/Axis/XAxis/XAxis.cs index ed94ff14..86059069 100644 --- a/Runtime/Component/Axis/XAxis/XAxis.cs +++ b/Runtime/Component/Axis/XAxis/XAxis.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; diff --git a/Runtime/Component/Axis/XAxis/XAxisHander.cs b/Runtime/Component/Axis/XAxis/XAxisHander.cs index 057ee7ff..e4020e08 100644 --- a/Runtime/Component/Axis/XAxis/XAxisHander.cs +++ b/Runtime/Component/Axis/XAxis/XAxisHander.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; @@ -32,13 +31,13 @@ namespace XCharts.Runtime var theme = chart.theme; var xAxisIndex = xAxis.index; xAxis.painter = chart.painter; - xAxis.refreshComponent = delegate () + xAxis.refreshComponent = delegate() { var grid = chart.GetChartComponent<GridCoord>(xAxis.gridIndex); if (grid != null) { var yAxis = chart.GetChartComponent<YAxis>(xAxis.index); - InitAxis(xAxis, yAxis, chart, this, + InitAxis(yAxis, orient, grid.context.x, grid.context.y, @@ -94,7 +93,7 @@ namespace XCharts.Runtime var relativedAxis = chart.GetChartComponent<YAxis>(xAxis.gridIndex); var dataZoom = chart.GetDataZoomOfAxis(xAxis); - DrawAxisSplit(vh, xAxis, chart.theme.axis, dataZoom, + DrawAxisSplit(vh, chart.theme.axis, dataZoom, Orient.Horizonal, grid.context.x, grid.context.y, @@ -114,16 +113,10 @@ namespace XCharts.Runtime var dataZoom = chart.GetDataZoomOfAxis(xAxis); - var startY = grid.context.y + xAxis.offset; - if (xAxis.IsTop()) - startY += grid.context.height; - else - startY += ComponentHelper.GetXAxisOnZeroOffset(chart.components, xAxis); - DrawAxisTick(vh, xAxis, chart.theme.axis, dataZoom, Orient.Horizonal, grid.context.x, - startY, + GetAxisLineXOrY(), grid.context.width); } } @@ -136,18 +129,24 @@ namespace XCharts.Runtime if (grid == null) return; - var startY = grid.context.y + xAxis.offset; - if (xAxis.IsTop()) - startY += grid.context.height; - else - startY += ComponentHelper.GetXAxisOnZeroOffset(chart.components, xAxis); - DrawAxisLine(vh, xAxis, chart.theme.axis, Orient.Horizonal, grid.context.x, - startY, + GetAxisLineXOrY(), grid.context.width); } } + + protected override float GetAxisLineXOrY() + { + var xAxis = component; + var grid = chart.GetChartComponent<GridCoord>(xAxis.gridIndex); + var startY = grid.context.y + xAxis.offset; + if (xAxis.IsTop()) + startY += grid.context.height; + else + startY += ComponentHelper.GetXAxisOnZeroOffset(chart.components, xAxis); + return startY; + } } } \ No newline at end of file diff --git a/Runtime/Component/Axis/YAxis/YAxis.cs b/Runtime/Component/Axis/YAxis/YAxis.cs index 003672e2..aee2bd17 100644 --- a/Runtime/Component/Axis/YAxis/YAxis.cs +++ b/Runtime/Component/Axis/YAxis/YAxis.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; namespace XCharts.Runtime diff --git a/Runtime/Component/Axis/YAxis/YAxisHander.cs b/Runtime/Component/Axis/YAxis/YAxisHander.cs index 8ef389df..5d91b08a 100644 --- a/Runtime/Component/Axis/YAxis/YAxisHander.cs +++ b/Runtime/Component/Axis/YAxis/YAxisHander.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; @@ -32,13 +31,13 @@ namespace XCharts.Runtime var theme = chart.theme; var yAxisIndex = yAxis.index; yAxis.painter = chart.painter; - yAxis.refreshComponent = delegate () + yAxis.refreshComponent = delegate() { var grid = chart.GetChartComponent<GridCoord>(yAxis.gridIndex); if (grid != null) { var xAxis = chart.GetChartComponent<YAxis>(yAxis.index); - InitAxis(yAxis, xAxis, chart, this, + InitAxis(xAxis, orient, grid.context.x, grid.context.y, @@ -91,7 +90,7 @@ namespace XCharts.Runtime return; var relativedAxis = chart.GetChartComponent<XAxis>(yAxis.gridIndex); var dataZoom = chart.GetDataZoomOfAxis(yAxis); - DrawAxisSplit(vh, yAxis, chart.theme.axis, dataZoom, + DrawAxisSplit(vh, chart.theme.axis, dataZoom, Orient.Vertical, grid.context.x, grid.context.y, @@ -111,15 +110,9 @@ namespace XCharts.Runtime var dataZoom = chart.GetDataZoomOfAxis(yAxis); - var startX = grid.context.x + yAxis.offset; - if (yAxis.IsRight()) - startX += grid.context.width; - else - startX += ComponentHelper.GetYAxisOnZeroOffset(chart.components, yAxis); - DrawAxisTick(vh, yAxis, chart.theme.axis, dataZoom, Orient.Vertical, - startX, + GetAxisLineXOrY(), grid.context.y, grid.context.height); } @@ -133,18 +126,24 @@ namespace XCharts.Runtime if (grid == null) return; - var startX = grid.context.x + yAxis.offset; - if (yAxis.IsRight()) - startX += grid.context.width; - else - startX += ComponentHelper.GetYAxisOnZeroOffset(chart.components, yAxis); - DrawAxisLine(vh, yAxis, chart.theme.axis, Orient.Vertical, - startX, + GetAxisLineXOrY(), grid.context.y, grid.context.height); } } + + protected override float GetAxisLineXOrY() + { + var yAxis = component; + var grid = chart.GetChartComponent<GridCoord>(yAxis.gridIndex); + var startX = grid.context.x + yAxis.offset; + if (yAxis.IsRight()) + startX += grid.context.width; + else + startX += ComponentHelper.GetYAxisOnZeroOffset(chart.components, yAxis); + return startX; + } } } \ No newline at end of file diff --git a/Runtime/Component/Background/Background.cs b/Runtime/Component/Background/Background.cs index 0e3a8425..5d963389 100644 --- a/Runtime/Component/Background/Background.cs +++ b/Runtime/Component/Background/Background.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; using UnityEngine.UI; diff --git a/Runtime/Component/Background/BackgroundHandler.cs b/Runtime/Component/Background/BackgroundHandler.cs index cd6402f9..54e7ead1 100644 --- a/Runtime/Component/Background/BackgroundHandler.cs +++ b/Runtime/Component/Background/BackgroundHandler.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; using UnityEngine.UI; @@ -13,7 +12,7 @@ namespace XCharts.Runtime public override void InitComponent() { component.painter = chart.painter; - component.refreshComponent = delegate () + component.refreshComponent = delegate() { var backgroundObj = ChartHelper.AddObject(s_BackgroundObjectName, chart.transform, chart.chartMinAnchor, chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); @@ -43,7 +42,7 @@ namespace XCharts.Runtime var p3 = new Vector3(chart.chartX + chart.chartWidth, chart.chartY); var p4 = new Vector3(chart.chartX, chart.chartY); var backgroundColor = chart.theme.GetBackgroundColor(component); - + UGL.DrawQuadrilateral(vh, p1, p2, p3, p4, backgroundColor); } } diff --git a/Runtime/Component/Child/AreaStyle.cs b/Runtime/Component/Child/AreaStyle.cs index e08eb5c7..0b4a45bc 100644 --- a/Runtime/Component/Child/AreaStyle.cs +++ b/Runtime/Component/Child/AreaStyle.cs @@ -1,5 +1,3 @@ - - using UnityEngine; namespace XCharts.Runtime @@ -33,11 +31,12 @@ namespace XCharts.Runtime /// </summary> End } + [SerializeField] private bool m_Show = true; [SerializeField] private AreaOrigin m_Origin; [SerializeField] private Color32 m_Color; [SerializeField] private Color32 m_ToColor; - [SerializeField] [Range(0, 1)] private float m_Opacity = 0.6f; + [SerializeField][Range(0, 1)] private float m_Opacity = 0.6f; [SerializeField] private Color32 m_HighlightColor; [SerializeField] private Color32 m_HighlightToColor; @@ -111,7 +110,7 @@ namespace XCharts.Runtime return m_Color; var color = m_Color; - color.a = (byte)(color.a * m_Opacity); + color.a = (byte) (color.a * m_Opacity); return color; } @@ -124,7 +123,7 @@ namespace XCharts.Runtime else { var color = themeColor; - color.a = (byte)(color.a * opacity); + color.a = (byte) (color.a * opacity); return color; } } diff --git a/Runtime/Component/Child/ArrowStyle.cs b/Runtime/Component/Child/ArrowStyle.cs index 794232d0..1b782339 100644 --- a/Runtime/Component/Child/ArrowStyle.cs +++ b/Runtime/Component/Child/ArrowStyle.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; diff --git a/Runtime/Component/Child/BaseLine.cs b/Runtime/Component/Child/BaseLine.cs index 4a0aa959..5472b77a 100644 --- a/Runtime/Component/Child/BaseLine.cs +++ b/Runtime/Component/Child/BaseLine.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime diff --git a/Runtime/Component/Child/IconStyle.cs b/Runtime/Component/Child/IconStyle.cs index 1a8206b8..17d847c0 100644 --- a/Runtime/Component/Child/IconStyle.cs +++ b/Runtime/Component/Child/IconStyle.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; @@ -20,6 +19,7 @@ namespace XCharts.Runtime /// </summary> AboveText } + [SerializeField] private bool m_Show = false; [SerializeField] private Layer m_Layer; [SerializeField] private Align m_Align = Align.Left; @@ -115,4 +115,4 @@ namespace XCharts.Runtime autoHideWhenLabelEmpty = iconStyle.autoHideWhenLabelEmpty; } } -} +} \ No newline at end of file diff --git a/Runtime/Component/Child/ImageStyle.cs b/Runtime/Component/Child/ImageStyle.cs index 6771b7fe..d37b3921 100644 --- a/Runtime/Component/Child/ImageStyle.cs +++ b/Runtime/Component/Child/ImageStyle.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; @@ -79,4 +78,4 @@ namespace XCharts.Runtime height = imageStyle.height; } } -} +} \ No newline at end of file diff --git a/Runtime/Component/Child/ItemStyle.cs b/Runtime/Component/Child/ItemStyle.cs index 1ca767da..79e9403a 100644 --- a/Runtime/Component/Child/ItemStyle.cs +++ b/Runtime/Component/Child/ItemStyle.cs @@ -22,7 +22,7 @@ namespace XCharts.Runtime [SerializeField] private Color32 m_BorderColor; [SerializeField] private Color32 m_BorderColor0; [SerializeField] private Color32 m_BorderToColor; - [SerializeField] [Range(0, 1)] private float m_Opacity = 1; + [SerializeField][Range(0, 1)] private float m_Opacity = 1; [SerializeField] private string m_ItemMarker; [SerializeField] private string m_ItemFormatter; [SerializeField] private string m_NumericFormatter = ""; @@ -237,7 +237,7 @@ namespace XCharts.Runtime return m_Color; var color = m_Color; - color.a = (byte)(color.a * m_Opacity); + color.a = (byte) (color.a * m_Opacity); return color; } @@ -247,7 +247,7 @@ namespace XCharts.Runtime return m_ToColor; var color = m_ToColor; - color.a = (byte)(color.a * m_Opacity); + color.a = (byte) (color.a * m_Opacity); return color; } @@ -257,7 +257,7 @@ namespace XCharts.Runtime return m_Color0; var color = m_Color0; - color.a = (byte)(color.a * m_Opacity); + color.a = (byte) (color.a * m_Opacity); return color; } @@ -268,7 +268,7 @@ namespace XCharts.Runtime if (m_Opacity == 1 || color.a == 0) return color; - color.a = (byte)(color.a * m_Opacity); + color.a = (byte) (color.a * m_Opacity); return color; } @@ -279,7 +279,7 @@ namespace XCharts.Runtime if (m_Opacity == 1 || color.a == 0) return color; - color.a = (byte)(color.a * m_Opacity); + color.a = (byte) (color.a * m_Opacity); return color; } @@ -290,7 +290,7 @@ namespace XCharts.Runtime if (m_Opacity == 1 || color.a == 0) return color; - color.a = (byte)(color.a * m_Opacity); + color.a = (byte) (color.a * m_Opacity); return color; } @@ -301,7 +301,7 @@ namespace XCharts.Runtime if (m_Opacity == 1 || color.a == 0) return color; - color.a = (byte)(color.a * m_Opacity); + color.a = (byte) (color.a * m_Opacity); return color; } @@ -332,7 +332,7 @@ namespace XCharts.Runtime } if (m_Opacity != 1) { - color.a = (byte)(color.a * m_Opacity); + color.a = (byte) (color.a * m_Opacity); } return color; } @@ -347,4 +347,4 @@ namespace XCharts.Runtime return false; } } -} +} \ No newline at end of file diff --git a/Runtime/Component/Child/LineArrow.cs b/Runtime/Component/Child/LineArrow.cs index b4284379..8b45aa84 100644 --- a/Runtime/Component/Child/LineArrow.cs +++ b/Runtime/Component/Child/LineArrow.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -20,6 +19,7 @@ namespace XCharts.Runtime /// </summary> Start } + [SerializeField] private bool m_Show; [SerializeField] private Position m_Position; [SerializeField] diff --git a/Runtime/Component/Child/LineStyle.cs b/Runtime/Component/Child/LineStyle.cs index f71de9a6..8b1940d4 100644 --- a/Runtime/Component/Child/LineStyle.cs +++ b/Runtime/Component/Child/LineStyle.cs @@ -1,5 +1,3 @@ - - using UnityEngine; namespace XCharts.Runtime @@ -40,6 +38,7 @@ namespace XCharts.Runtime DashDotDot, None, } + [SerializeField] private bool m_Show = true; [SerializeField] private Type m_Type = Type.Solid; [SerializeField] private Color32 m_Color; @@ -47,7 +46,7 @@ namespace XCharts.Runtime [SerializeField] private Color32 m_ToColor2; [SerializeField] private float m_Width = 0; [SerializeField] private float m_Length = 0; - [SerializeField] [Range(0, 1)] private float m_Opacity = 1; + [SerializeField][Range(0, 1)] private float m_Opacity = 1; /// <summary> /// Whether show line. @@ -123,8 +122,7 @@ namespace XCharts.Runtime } public LineStyle() - { - } + { } public LineStyle(float width) { @@ -172,7 +170,7 @@ namespace XCharts.Runtime return m_Color; var color = m_Color; - color.a = (byte)(color.a * m_Opacity); + color.a = (byte) (color.a * m_Opacity); return color; } @@ -203,7 +201,7 @@ namespace XCharts.Runtime } if (m_Opacity != 1) { - color.a = (byte)(color.a * m_Opacity); + color.a = (byte) (color.a * m_Opacity); } return color; } @@ -232,7 +230,7 @@ namespace XCharts.Runtime else { var color = themeColor; - color.a = (byte)(color.a * opacity); + color.a = (byte) (color.a * opacity); return color; } } diff --git a/Runtime/Component/Child/Location.cs b/Runtime/Component/Child/Location.cs index f572c249..819e3560 100644 --- a/Runtime/Component/Child/Location.cs +++ b/Runtime/Component/Child/Location.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; #if dUI_TextMeshPro @@ -126,10 +125,10 @@ namespace XCharts.Runtime return new Location() { align = Align.CenterLeft, - left = 0.03f, - right = 0, - top = 0, - bottom = 0 + left = 0.03f, + right = 0, + top = 0, + bottom = 0 }; } } @@ -141,10 +140,10 @@ namespace XCharts.Runtime return new Location() { align = Align.CenterRight, - left = 0, - right = 0.03f, - top = 0, - bottom = 0 + left = 0, + right = 0.03f, + top = 0, + bottom = 0 }; } } @@ -156,10 +155,10 @@ namespace XCharts.Runtime return new Location() { align = Align.TopCenter, - left = 0, - right = 0, - top = 0.03f, - bottom = 0 + left = 0, + right = 0, + top = 0.03f, + bottom = 0 }; } } @@ -171,10 +170,10 @@ namespace XCharts.Runtime return new Location() { align = Align.BottomCenter, - left = 0, - right = 0, - top = 0, - bottom = 0.03f + left = 0, + right = 0, + top = 0, + bottom = 0.03f }; } } @@ -319,4 +318,4 @@ namespace XCharts.Runtime UpdateAlign(); } } -} +} \ No newline at end of file diff --git a/Runtime/Component/Child/SerieDataBaseInfo.cs b/Runtime/Component/Child/SerieDataBaseInfo.cs deleted file mode 100644 index 9bf780a9..00000000 --- a/Runtime/Component/Child/SerieDataBaseInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using UnityEngine; - -namespace XCharts.Runtime -{ - /// <summary> - /// 数据项的其他基础数据。 - /// </summary> - [System.Serializable] - public class SerieDataBaseInfo : ChildComponent, ISerieDataComponent - { - [SerializeField] private bool m_Ignore = false; - [SerializeField] private bool m_Selected; - [SerializeField] private float m_Radius; - - /// <summary> - /// 是否忽略数据。当为 true 时,数据不进行绘制。 - /// </summary> - public bool ignore - { - get { return m_Ignore; } - set { if (PropertyUtil.SetStruct(ref m_Ignore, value)) SetVerticesDirty(); } - } - /// <summary> - /// 自定义半径。可用在饼图中自定义某个数据项的半径。 - /// </summary> - public float radius { get { return m_Radius; } set { m_Radius = value; } } - /// <summary> - /// Whether the data item is selected. - /// |该数据项是否被选中。 - /// </summary> - public bool selected { get { return m_Selected; } set { m_Selected = value; } } - } -} \ No newline at end of file diff --git a/Runtime/Component/Child/SerieSymbl.cs b/Runtime/Component/Child/SerieSymbl.cs index 4062d684..34865a8d 100644 --- a/Runtime/Component/Child/SerieSymbl.cs +++ b/Runtime/Component/Child/SerieSymbl.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -174,7 +173,7 @@ namespace XCharts.Runtime case SymbolSizeType.FromData: if (data != null && dataIndex >= 0 && dataIndex < data.Count) { - return (float)data[dataIndex] * m_DataScale; + return (float) data[dataIndex] * m_DataScale; } else { @@ -183,7 +182,8 @@ namespace XCharts.Runtime case SymbolSizeType.Function: if (data != null && sizeFunction != null) return sizeFunction(data); else return size == 0 ? themeSize : size; - default: return size == 0 ? themeSize : size; + default: + return size == 0 ? themeSize : size; } } @@ -204,7 +204,7 @@ namespace XCharts.Runtime if (data != null && dataIndex >= 0 && dataIndex < data.Count) { - return (float)data[dataIndex] * m_SelectedDataScale; + return (float) data[dataIndex] * m_SelectedDataScale; } else { @@ -218,7 +218,8 @@ namespace XCharts.Runtime else return selectedSize == 0 ? themeSelectedSize : selectedSize; - default: return selectedSize == 0 ? themeSelectedSize : selectedSize; + default: + return selectedSize == 0 ? themeSelectedSize : selectedSize; } } @@ -239,4 +240,4 @@ namespace XCharts.Runtime return (dataIndex - startIndex) % (m_Interval + 1) == 0; } } -} +} \ No newline at end of file diff --git a/Runtime/Component/Child/StageColor.cs b/Runtime/Component/Child/StageColor.cs index a4bb4617..592d9711 100644 --- a/Runtime/Component/Child/StageColor.cs +++ b/Runtime/Component/Child/StageColor.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; diff --git a/Runtime/Component/Child/SymbolStyle.cs b/Runtime/Component/Child/SymbolStyle.cs index c37d8815..496059e8 100644 --- a/Runtime/Component/Child/SymbolStyle.cs +++ b/Runtime/Component/Child/SymbolStyle.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -179,11 +178,10 @@ namespace XCharts.Runtime /// |带有涟漪特效动画的散点图的动画参数。 /// </summary> public List<float> animationSize { get { return m_AnimationSize; } } - public Color32 GetColor(Color32 defaultColor) { return ChartHelper.IsClearColor(m_Color) ? defaultColor : m_Color; } } -} +} \ No newline at end of file diff --git a/Runtime/Component/Child/TextLimit.cs b/Runtime/Component/Child/TextLimit.cs index 066f1f51..0d276237 100644 --- a/Runtime/Component/Child/TextLimit.cs +++ b/Runtime/Component/Child/TextLimit.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; using UnityEngine.UI; @@ -87,7 +86,6 @@ namespace XCharts.Runtime m_RelatedTextWidth = labelWidth; } - public string GetLimitContent(string content) { float checkWidth = m_MaxWidth > 0 ? m_MaxWidth : m_RelatedTextWidth; @@ -123,9 +121,9 @@ namespace XCharts.Runtime int middle = content.Length / 2; int end = content.Length; float checkWidth = m_MaxWidth > 0 ? m_MaxWidth : m_RelatedTextWidth; - + float limit = checkWidth - m_Gap * 2 - suffixLen; - if (limit < 0) + if (limit < 0) return 0; float len = 0; diff --git a/Runtime/Component/Child/TextPadding.cs b/Runtime/Component/Child/TextPadding.cs index 94dc7e52..27353586 100644 --- a/Runtime/Component/Child/TextPadding.cs +++ b/Runtime/Component/Child/TextPadding.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -26,7 +25,7 @@ namespace XCharts.Runtime public void SetPadding(float top, float right, float bottom, float left) { - m_Top = top; ; + m_Top = top;; m_Right = right; m_Bottom = bottom; m_Left = left; diff --git a/Runtime/Component/Child/TextStyle.cs b/Runtime/Component/Child/TextStyle.cs index 5b83798b..9ea38a0b 100644 --- a/Runtime/Component/Child/TextStyle.cs +++ b/Runtime/Component/Child/TextStyle.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; #if dUI_TextMeshPro @@ -141,9 +140,7 @@ namespace XCharts.Runtime } #endif - public TextStyle() - { - } + public TextStyle() { } public TextStyle(int fontSize) { diff --git a/Examples/Runtime.meta b/Runtime/Component/Comment.meta similarity index 77% rename from Examples/Runtime.meta rename to Runtime/Component/Comment.meta index 0e44740f..27242bfd 100644 --- a/Examples/Runtime.meta +++ b/Runtime/Component/Comment.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f67670c9ee0e64262950aaf07562454e +guid: 81fe767917cd3492a9f587f5d5e3a037 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/Component/Comment/Comment.cs b/Runtime/Component/Comment/Comment.cs new file mode 100644 index 00000000..b2cb70a3 --- /dev/null +++ b/Runtime/Component/Comment/Comment.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace XCharts.Runtime +{ + /// <summary> + /// comment of chart. + /// |图表注解组件。 + /// </summary> + [Serializable] + [ComponentHandler(typeof(CommentHander), true)] + public class Comment : MainComponent + { + [SerializeField] private bool m_Show = true; + [SerializeField] private LabelStyle m_LabelStyle = new LabelStyle(); + [SerializeField] private CommentMarkStyle m_MarkStyle; + [SerializeField] private List<CommentItem> m_Items = new List<CommentItem>() { new CommentItem() }; + + /// <summary> + /// Set this to false to prevent the comment from showing. + /// |是否显示注解组件。 + /// </summary> + public bool show { get { return m_Show; } set { if (PropertyUtil.SetStruct(ref m_Show, value)) SetComponentDirty(); } } + public List<CommentItem> items { get { return m_Items; } set { m_Items = value; SetComponentDirty(); } } + /// <summary> + /// The text style of all comments. + /// |所有组件的文本样式。 + /// </summary> + public LabelStyle labelStyle + { + get { return m_LabelStyle; } + set { if (PropertyUtil.SetClass(ref m_LabelStyle, value)) SetComponentDirty(); } + } + /// <summary> + /// The text style of all comments. + /// |所有组件的文本样式。 + /// </summary> + public CommentMarkStyle markStyle + { + get { return m_MarkStyle; } + set { if (PropertyUtil.SetClass(ref m_MarkStyle, value)) SetVerticesDirty(); } + } + + public LabelStyle GetLabelStyle(int index) + { + if (index >= 0 && index < items.Count) + { + var labelStyle = items[index].labelStyle; + if (labelStyle.show) return labelStyle; + } + return m_LabelStyle; + } + + public CommentMarkStyle GetMarkStyle(int index) + { + if (index >= 0 && index < items.Count) + { + var markStyle = items[index].markStyle; + if (markStyle.show) return markStyle; + } + return m_MarkStyle; + } + } +} \ No newline at end of file diff --git a/Runtime/Component/Comment/Comment.cs.meta b/Runtime/Component/Comment/Comment.cs.meta new file mode 100644 index 00000000..3a9af591 --- /dev/null +++ b/Runtime/Component/Comment/Comment.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec99dd6b13a3b4e9789d007f23ffa499 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Component/Comment/CommentHander.cs b/Runtime/Component/Comment/CommentHander.cs new file mode 100644 index 00000000..f1c93ab3 --- /dev/null +++ b/Runtime/Component/Comment/CommentHander.cs @@ -0,0 +1,71 @@ +using UnityEngine; +using UnityEngine.UI; +using XUGL; + +namespace XCharts.Runtime +{ + [UnityEngine.Scripting.Preserve] + internal sealed class CommentHander : MainComponentHandler<Comment> + { + private static readonly string s_CommentObjectName = "comment"; + + public override void InitComponent() + { + var comment = component; + comment.painter = null; + comment.refreshComponent = delegate() + { + var objName = ChartCached.GetComponentObjectName(comment); + var commentObj = ChartHelper.AddObject(objName, + chart.transform, + chart.chartMinAnchor, + chart.chartMaxAnchor, + chart.chartPivot, + chart.chartSizeDelta); + + commentObj.SetActive(comment.show); + commentObj.hideFlags = chart.chartHideFlags; + ChartHelper.HideAllObject(commentObj); + for (int i = 0; i < comment.items.Count; i++) + { + var item = comment.items[i]; + var labelStyle = comment.GetLabelStyle(i); + var label = ChartHelper.AddChartLabel(s_CommentObjectName + i, commentObj.transform, labelStyle, chart.theme.common, + GetContent(item), Color.clear, TextAnchor.MiddleCenter); + label.SetActive(comment.show && item.show); + label.SetPosition(item.position + labelStyle.offset); + } + }; + comment.refreshComponent(); + } + + private string GetContent(CommentItem item) + { + if (item.content.IndexOf("{") >= 0) + { + var content = item.content; + FormatterHelper.ReplaceContent(ref content, 0, item.labelStyle.numericFormatter, null, chart); + return content; + } + else + { + return item.content; + } + } + + public override void DrawTop(VertexHelper vh) + { + for (int i = 0; i < component.items.Count; i++) + { + var item = component.items[i]; + var markStyle = component.GetMarkStyle(i); + if (!markStyle.show) continue; + var color = ChartHelper.IsClearColor(markStyle.lineStyle.color) ? + chart.theme.axis.splitLineColor : + markStyle.lineStyle.color; + var width = markStyle.lineStyle.width == 0 ? 1 : markStyle.lineStyle.width; + UGL.DrawBorder(vh, item.markRect, width, color); + } + } + } +} \ No newline at end of file diff --git a/Runtime/Component/Comment/CommentHander.cs.meta b/Runtime/Component/Comment/CommentHander.cs.meta new file mode 100644 index 00000000..a1e30c8a --- /dev/null +++ b/Runtime/Component/Comment/CommentHander.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45362c4eed0e54d2880f2ed359ce9385 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Component/Comment/CommentItem.cs b/Runtime/Component/Comment/CommentItem.cs new file mode 100644 index 00000000..766e780c --- /dev/null +++ b/Runtime/Component/Comment/CommentItem.cs @@ -0,0 +1,47 @@ +using System; +using UnityEngine; + +namespace XCharts.Runtime +{ + /// <summary> + /// comment of chart. + /// |注解项。 + /// </summary> + [Serializable] + public class CommentItem : ChildComponent + { + [SerializeField] private bool m_Show = true; + [SerializeField] private string m_Content = "comment"; + [SerializeField] private Vector3 m_Position; + [SerializeField] private Rect m_MarkRect; + [SerializeField] private CommentMarkStyle m_MarkStyle = new CommentMarkStyle() { show = false }; + [SerializeField] private LabelStyle m_LabelStyle = new LabelStyle() { show = false }; + + /// <summary> + /// Set this to false to prevent this comment item from showing. + /// |是否显示当前注解项。 + /// </summary> + public bool show { get { return m_Show; } set { if (PropertyUtil.SetStruct(ref m_Show, value)) SetComponentDirty(); } } + /// <summary> + /// position of comment. + /// |注解项的位置坐标。 + /// </summary> + public Vector3 position { get { return m_Position; } set { if (PropertyUtil.SetStruct(ref m_Position, value)) SetComponentDirty(); } } + /// <summary> + /// content of comment. + /// |注解的文本内容。 + /// </summary> + public string content { get { return m_Content; } set { if (PropertyUtil.SetClass(ref m_Content, value)) SetComponentDirty(); } } + public Rect markRect { get { return m_MarkRect; } set { if (PropertyUtil.SetStruct(ref m_MarkRect, value)) SetVerticesDirty(); } } + public CommentMarkStyle markStyle { get { return m_MarkStyle; } set { if (PropertyUtil.SetClass(ref m_MarkStyle, value)) SetVerticesDirty(); } } + /// <summary> + /// The text style of all comments. + /// |注解项的文本样式。 + /// </summary> + public LabelStyle labelStyle + { + get { return m_LabelStyle; } + set { if (PropertyUtil.SetClass(ref m_LabelStyle, value)) SetComponentDirty(); } + } + } +} \ No newline at end of file diff --git a/Runtime/Component/Comment/CommentItem.cs.meta b/Runtime/Component/Comment/CommentItem.cs.meta new file mode 100644 index 00000000..29b3cd2f --- /dev/null +++ b/Runtime/Component/Comment/CommentItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f082815b255e546019b6b43ac20bf4cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Component/Comment/CommentMarkStyle.cs b/Runtime/Component/Comment/CommentMarkStyle.cs new file mode 100644 index 00000000..cc776aa2 --- /dev/null +++ b/Runtime/Component/Comment/CommentMarkStyle.cs @@ -0,0 +1,23 @@ +using System; +using UnityEngine; + +namespace XCharts.Runtime +{ + /// <summary> + /// comment of chart. + /// |注解项。 + /// </summary> + [Serializable] + public class CommentMarkStyle : ChildComponent + { + [SerializeField] private bool m_Show = true; + [SerializeField] private LineStyle m_LineStyle; + + /// <summary> + /// Set this to false to prevent this comment item from showing. + /// |是否显示当前注解项。 + /// </summary> + public bool show { get { return m_Show; } set { if (PropertyUtil.SetStruct(ref m_Show, value)) SetVerticesDirty(); } } + public LineStyle lineStyle { get { return m_LineStyle; } set { if (PropertyUtil.SetClass(ref m_LineStyle, value)) SetVerticesDirty(); } } + } +} \ No newline at end of file diff --git a/Runtime/Component/Comment/CommentMarkStyle.cs.meta b/Runtime/Component/Comment/CommentMarkStyle.cs.meta new file mode 100644 index 00000000..9e4c5ddb --- /dev/null +++ b/Runtime/Component/Comment/CommentMarkStyle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 764734b787d72455782bf75bb38e465e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Component/DataZoom/DataZoom.cs b/Runtime/Component/DataZoom/DataZoom.cs index da2399ec..d361cd5b 100644 --- a/Runtime/Component/DataZoom/DataZoom.cs +++ b/Runtime/Component/DataZoom/DataZoom.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -57,6 +56,7 @@ namespace XCharts.Runtime /// </summary> Percent } + [SerializeField] private bool m_Enable = true; [SerializeField] private FilterMode m_FilterMode; [SerializeField] private List<int> m_XAxisIndexs = new List<int>() { 0 }; @@ -448,11 +448,11 @@ namespace XCharts.Runtime start = context.y + context.height * m_Start / 100; end = context.y + context.height * m_End / 100; return ChartHelper.IsInRect(pos, context.x, context.x + context.width, start, end); - default: return false; + default: + return false; } } - public bool IsInSelectedZoom(int totalIndex, int index, bool invert) { if (totalIndex <= 0) @@ -486,7 +486,8 @@ namespace XCharts.Runtime case Orient.Vertical: start = context.y + context.height * m_Start / 100; return ChartHelper.IsInRect(pos, context.x, context.x + context.width, start - 10, start + 10); - default: return false; + default: + return false; } } @@ -507,11 +508,11 @@ namespace XCharts.Runtime case Orient.Vertical: end = context.y + context.height * m_End / 100; return ChartHelper.IsInRect(pos, context.x, context.x + context.width, end - 10, end + 10); - default: return false; + default: + return false; } } - public bool IsContainsAxis(Axis axis) { if (axis == null) diff --git a/Runtime/Component/DataZoom/DataZoomContext.cs b/Runtime/Component/DataZoom/DataZoomContext.cs index 64a22627..49cf852c 100644 --- a/Runtime/Component/DataZoom/DataZoomContext.cs +++ b/Runtime/Component/DataZoom/DataZoomContext.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; diff --git a/Runtime/Component/DataZoom/DataZoomHandler.cs b/Runtime/Component/DataZoom/DataZoomHandler.cs index 0391233f..6fce8896 100644 --- a/Runtime/Component/DataZoom/DataZoomHandler.cs +++ b/Runtime/Component/DataZoom/DataZoomHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; @@ -21,7 +20,7 @@ namespace XCharts.Runtime { var dataZoom = component; dataZoom.painter = chart.m_PainterTop; - dataZoom.refreshComponent = delegate () + dataZoom.refreshComponent = delegate() { var dataZoomObject = ChartHelper.AddObject(s_DefaultDataZoom + dataZoom.index, chart.transform, chart.chartMinAnchor, chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); @@ -34,7 +33,7 @@ namespace XCharts.Runtime startLabel.gameObject.SetActive(true); var endLabel = ChartHelper.AddChartLabel(s_DefaultDataZoom + "end", dataZoomObject.transform, - dataZoom.labelStyle, chart.theme.dataZoom, "", Color.clear, TextAnchor.MiddleLeft); + dataZoom.labelStyle, chart.theme.dataZoom, "", Color.clear, TextAnchor.MiddleLeft); endLabel.gameObject.SetActive(true); dataZoom.SetStartLabel(startLabel); @@ -158,8 +157,8 @@ namespace XCharts.Runtime return; var dataZoom = component; - if (dataZoom.context.isDrag || dataZoom.context.isStartDrag || dataZoom.context.isEndDrag - || dataZoom.context.isCoordinateDrag) + if (dataZoom.context.isDrag || dataZoom.context.isStartDrag || dataZoom.context.isEndDrag || + dataZoom.context.isCoordinateDrag) { chart.RefreshChart(); } @@ -187,8 +186,8 @@ namespace XCharts.Runtime return; } - if (dataZoom.IsInZoom(localPos) - && !dataZoom.IsInSelectedZoom(localPos)) + if (dataZoom.IsInZoom(localPos) && + !dataZoom.IsInSelectedZoom(localPos)) { var pointerX = localPos.x; var selectWidth = grid.context.width * (dataZoom.end - dataZoom.start) / 100; @@ -313,8 +312,8 @@ namespace XCharts.Runtime { var grid = chart.GetGridOfDataZoom(dataZoom); var deltaPercent = dataZoom.orient == Orient.Horizonal ? - Mathf.Abs(delta / grid.context.width * 100) : - Mathf.Abs(delta / grid.context.height * 100); + Mathf.Abs(delta / grid.context.width * 100) : + Mathf.Abs(delta / grid.context.height * 100); if (delta > 0) { if (dataZoom.end <= dataZoom.start) @@ -390,9 +389,9 @@ namespace XCharts.Runtime dataZoom.SetLabelActive(false); return; } - if (dataZoom.IsInSelectedZoom(local) - || dataZoom.IsInStartZoom(local) - || dataZoom.IsInEndZoom(local)) + if (dataZoom.IsInSelectedZoom(local) || + dataZoom.IsInStartZoom(local) || + dataZoom.IsInEndZoom(local)) { dataZoom.SetLabelActive(true); RefreshDataZoomLabel(); @@ -406,8 +405,8 @@ namespace XCharts.Runtime { m_CheckDataZoomLabel = false; var xAxis = chart.GetChartComponent<XAxis>(dataZoom.xAxisIndexs[0]); - var startIndex = (int)((xAxis.data.Count - 1) * dataZoom.start / 100); - var endIndex = (int)((xAxis.data.Count - 1) * dataZoom.end / 100); + var startIndex = (int) ((xAxis.data.Count - 1) * dataZoom.start / 100); + var endIndex = (int) ((xAxis.data.Count - 1) * dataZoom.end / 100); if (m_DataZoomLastStartIndex != startIndex || m_DataZoomLastEndIndex != endIndex) { @@ -472,7 +471,7 @@ namespace XCharts.Runtime var sampleDist = serie.sampleDist < 2 ? 2 : serie.sampleDist; var maxCount = showData.Count; if (sampleDist > 0) - rate = (int)((maxCount - serie.minShow) / (dataZoom.context.width / sampleDist)); + rate = (int) ((maxCount - serie.minShow) / (dataZoom.context.width / sampleDist)); if (rate < 1) rate = 1; @@ -485,7 +484,7 @@ namespace XCharts.Runtime double value = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow, maxCount, totalAverage, i, serie.animation.GetUpdateAnimationDuration(), ref dataChanging, axis); float pX = dataZoom.context.x + i * scaleWid; - float dataHig = (float)((maxValue - minValue) == 0 ? 0 : + float dataHig = (float) ((maxValue - minValue) == 0 ? 0 : (value - minValue) / (maxValue - minValue) * dataZoom.context.height); np = new Vector3(pX, chart.chartY + dataZoom.bottom + dataHig); if (i > 0) @@ -561,7 +560,7 @@ namespace XCharts.Runtime var sampleDist = serie.sampleDist < 2 ? 2 : serie.sampleDist; var maxCount = showData.Count; if (sampleDist > 0) - rate = (int)((maxCount - serie.minShow) / (dataZoom.context.height / sampleDist)); + rate = (int) ((maxCount - serie.minShow) / (dataZoom.context.height / sampleDist)); if (rate < 1) rate = 1; @@ -575,7 +574,7 @@ namespace XCharts.Runtime serie.animation.GetUpdateAnimationDuration(), ref dataChanging, axis); float pY = dataZoom.context.y + i * scaleWid; float dataHig = (maxValue - minValue) == 0 ? 0 : - (float)((value - minValue) / (maxValue - minValue) * dataZoom.context.width); + (float) ((value - minValue) / (maxValue - minValue) * dataZoom.context.width); np = new Vector3(chart.chartX + chart.chartWidth - dataZoom.right - dataHig, pY); if (i > 0) { diff --git a/Runtime/Component/DataZoom/DataZoomHelper.cs b/Runtime/Component/DataZoom/DataZoomHelper.cs index ae749865..c7f8b813 100644 --- a/Runtime/Component/DataZoom/DataZoomHelper.cs +++ b/Runtime/Component/DataZoom/DataZoomHelper.cs @@ -1,4 +1,3 @@ - namespace XCharts.Runtime { public static class DataZoomHelper diff --git a/Runtime/Component/Debug/DebugInfo.cs b/Runtime/Component/Debug/DebugInfo.cs index 8b4c1fea..5daca29c 100644 --- a/Runtime/Component/Debug/DebugInfo.cs +++ b/Runtime/Component/Debug/DebugInfo.cs @@ -1,8 +1,7 @@ - -using UnityEngine; using System; using System.Collections.Generic; using System.Text; +using UnityEngine; namespace XCharts.Runtime { @@ -20,12 +19,12 @@ namespace XCharts.Runtime { background = new ImageStyle() { - color = new Color32(32, 32, 32, 170) + color = new Color32(32, 32, 32, 170) }, textStyle = new TextStyle() { - fontSize = 18, - color = Color.white + fontSize = 18, + color = Color.white } }; @@ -56,7 +55,7 @@ namespace XCharts.Runtime public void Update() { - if (clickChartCount >= 2) + if (clickChartCount > 2) { m_ShowDebugInfo = !m_ShowDebugInfo; ChartHelper.SetActive(m_Label.transform, m_ShowDebugInfo); @@ -108,6 +107,13 @@ namespace XCharts.Runtime SetValueWithKInfo(s_Sb, "s-vert", vertCount); SetValueWithKInfo(s_Sb, "t-vert", m_Chart.m_TopPainterVertCount, false); + var serie0 = m_Chart.GetSerie(0); + for (int i = 0; i < serie0.dataCount; i++) + { + var serieData = serie0.data[i]; + s_Sb.AppendFormat("{0}:{1}\n", i, serieData.interact.targetVaue); + } + m_Label.SetText(s_Sb.ToString()); } } @@ -144,7 +150,7 @@ namespace XCharts.Runtime ChartHelper.SetActive(labelGameObject, m_ShowDebugInfo); var label = ChartHelper.AddChartLabel("info", labelGameObject.transform, labelStyle, theme.common, - "", Color.clear, TextAnchor.UpperLeft); + "", Color.clear, TextAnchor.UpperLeft); label.SetActive(labelStyle.show); return label; } diff --git a/Runtime/Component/Emphasis.meta b/Runtime/Component/Emphasis.meta new file mode 100644 index 00000000..68dbdad5 --- /dev/null +++ b/Runtime/Component/Emphasis.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4cd4074bb11fc40059363dd78b9ee98d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Component/Child/Emphasis.cs b/Runtime/Component/Emphasis/Emphasis.cs similarity index 99% rename from Runtime/Component/Child/Emphasis.cs rename to Runtime/Component/Emphasis/Emphasis.cs index 310ec316..00197fa7 100644 --- a/Runtime/Component/Child/Emphasis.cs +++ b/Runtime/Component/Emphasis/Emphasis.cs @@ -1,5 +1,3 @@ - - using UnityEngine; namespace XCharts.Runtime diff --git a/Runtime/Component/Child/Emphasis.cs.meta b/Runtime/Component/Emphasis/Emphasis.cs.meta similarity index 100% rename from Runtime/Component/Child/Emphasis.cs.meta rename to Runtime/Component/Emphasis/Emphasis.cs.meta diff --git a/Runtime/Component/Emphasis/EmphasisItemStyle.cs b/Runtime/Component/Emphasis/EmphasisItemStyle.cs new file mode 100644 index 00000000..ca5ad8e4 --- /dev/null +++ b/Runtime/Component/Emphasis/EmphasisItemStyle.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +namespace XCharts.Runtime +{ + /// <summary> + /// 高亮的图形样式 + /// </summary> + [System.Serializable] + public class EmphasisItemStyle : ItemStyle, ISerieExtraComponent, ISerieDataComponent + { } +} \ No newline at end of file diff --git a/Runtime/Component/Emphasis/EmphasisItemStyle.cs.meta b/Runtime/Component/Emphasis/EmphasisItemStyle.cs.meta new file mode 100644 index 00000000..73b33639 --- /dev/null +++ b/Runtime/Component/Emphasis/EmphasisItemStyle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d1095175540449f99bb9da27a5aaf04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Component/Emphasis/EmphasisLabelLine.cs b/Runtime/Component/Emphasis/EmphasisLabelLine.cs new file mode 100644 index 00000000..9a132ad9 --- /dev/null +++ b/Runtime/Component/Emphasis/EmphasisLabelLine.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +namespace XCharts.Runtime +{ + /// <summary> + /// 高亮的标签引导线样式 + /// </summary> + [System.Serializable] + public class EmphasisLabelLine : LabelLine, ISerieExtraComponent, ISerieDataComponent + { } +} \ No newline at end of file diff --git a/Runtime/Component/Emphasis/EmphasisLabelLine.cs.meta b/Runtime/Component/Emphasis/EmphasisLabelLine.cs.meta new file mode 100644 index 00000000..b6bd83fa --- /dev/null +++ b/Runtime/Component/Emphasis/EmphasisLabelLine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0d9ff3b8e09d464e9b5ea996b941314 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Component/Emphasis/EmphasisLabelStyle.cs b/Runtime/Component/Emphasis/EmphasisLabelStyle.cs new file mode 100644 index 00000000..0279fc6c --- /dev/null +++ b/Runtime/Component/Emphasis/EmphasisLabelStyle.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +namespace XCharts.Runtime +{ + /// <summary> + /// 高亮的标签样式 + /// </summary> + [System.Serializable] + public class EmphasisLabelStyle : LabelStyle, ISerieExtraComponent, ISerieDataComponent + { } +} \ No newline at end of file diff --git a/Runtime/Component/Emphasis/EmphasisLabelStyle.cs.meta b/Runtime/Component/Emphasis/EmphasisLabelStyle.cs.meta new file mode 100644 index 00000000..77199ddc --- /dev/null +++ b/Runtime/Component/Emphasis/EmphasisLabelStyle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e025b0f4be6d4141aa08bdad0102aa7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Component/Interaction.meta b/Runtime/Component/Interaction.meta new file mode 100644 index 00000000..9dd74cb6 --- /dev/null +++ b/Runtime/Component/Interaction.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8445ec442e5314aa891cbbd6d4d966c4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Serie/InteractData.cs b/Runtime/Component/Interaction/InteractData.cs similarity index 95% rename from Runtime/Serie/InteractData.cs rename to Runtime/Component/Interaction/InteractData.cs index c61bd060..fd9122cb 100644 --- a/Runtime/Serie/InteractData.cs +++ b/Runtime/Component/Interaction/InteractData.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -15,6 +14,8 @@ namespace XCharts.Runtime private bool m_UpdateFlag = false; private bool m_ValueEnable = false; + internal float targetVaue { get { return m_TargetValue; } } + public void SetValue(ref bool needInteract, float size, bool highlight, float rate = 1.3f) { size = highlight ? size * rate : size; @@ -25,14 +26,11 @@ namespace XCharts.Runtime { if (m_TargetValue != size) { - if (float.IsNaN(m_TargetValue)) - { - needInteract = true; - m_UpdateFlag = true; - m_ValueEnable = true; - m_UpdateTime = Time.time; - m_PreviousValue = m_TargetValue; - } + needInteract = true; + m_UpdateFlag = true; + m_ValueEnable = true; + m_UpdateTime = Time.time; + m_PreviousValue = m_TargetValue; m_TargetValue = size; } } diff --git a/Runtime/Serie/InteractData.cs.meta b/Runtime/Component/Interaction/InteractData.cs.meta similarity index 83% rename from Runtime/Serie/InteractData.cs.meta rename to Runtime/Component/Interaction/InteractData.cs.meta index 86930fc1..4e095073 100644 --- a/Runtime/Serie/InteractData.cs.meta +++ b/Runtime/Component/Interaction/InteractData.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8ab01b44ab2454ef7ac2d71313c3d707 +guid: 42f150814cce84d66b931eed0a07d4ce MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Component/Label.meta b/Runtime/Component/Label.meta new file mode 100644 index 00000000..401c6280 --- /dev/null +++ b/Runtime/Component/Label.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad378dd158b5d438a87405d35a3a6546 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Component/Child/EndLabelStyle.cs b/Runtime/Component/Label/EndLabelStyle.cs similarity index 99% rename from Runtime/Component/Child/EndLabelStyle.cs rename to Runtime/Component/Label/EndLabelStyle.cs index 2f22c1b5..ecdd7e9a 100644 --- a/Runtime/Component/Child/EndLabelStyle.cs +++ b/Runtime/Component/Label/EndLabelStyle.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; diff --git a/Runtime/Component/Child/EndLabelStyle.cs.meta b/Runtime/Component/Label/EndLabelStyle.cs.meta similarity index 100% rename from Runtime/Component/Child/EndLabelStyle.cs.meta rename to Runtime/Component/Label/EndLabelStyle.cs.meta diff --git a/Runtime/Component/Child/LabelLine.cs b/Runtime/Component/Label/LabelLine.cs similarity index 99% rename from Runtime/Component/Child/LabelLine.cs rename to Runtime/Component/Label/LabelLine.cs index 13ebe802..a0b1c2c6 100644 --- a/Runtime/Component/Child/LabelLine.cs +++ b/Runtime/Component/Label/LabelLine.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -143,4 +142,4 @@ namespace XCharts.Runtime set { if (PropertyUtil.SetClass(ref m_EndSymbol, value)) SetVerticesDirty(); } } } -} +} \ No newline at end of file diff --git a/Runtime/Component/Child/LabelLine.cs.meta b/Runtime/Component/Label/LabelLine.cs.meta similarity index 100% rename from Runtime/Component/Child/LabelLine.cs.meta rename to Runtime/Component/Label/LabelLine.cs.meta diff --git a/Runtime/Component/Child/LabelStyle.cs b/Runtime/Component/Label/LabelStyle.cs similarity index 95% rename from Runtime/Component/Child/LabelStyle.cs rename to Runtime/Component/Label/LabelStyle.cs index f204c198..4d96a029 100644 --- a/Runtime/Component/Child/LabelStyle.cs +++ b/Runtime/Component/Label/LabelStyle.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; namespace XCharts.Runtime { @@ -117,18 +117,19 @@ namespace XCharts.Runtime set { if (PropertyUtil.SetStruct(ref m_Position, value)) SetVerticesDirty(); } } /// <summary> - /// 标签内容字符串模版格式器。支持用 \n 换行。 + /// formatter of label. + /// |标签内容字符串模版格式器。支持用 \n 换行。 /// 模板变量有: - /// <list type="bullet"> - /// <item><description>{a}:系列名。</description></item> - /// <item><description>{b}:数据名。</description></item> - /// <item><description>{c}:数据值。</description></item> - /// <item><description>{d}:百分比。</description></item> - /// </list> - /// </summary> - /// <example> + /// {.}:圆点标记。 + /// {a}:系列名。 + /// {a}:系列名。 + /// {b}:类目值或数据名。 + /// {c}:数据值。 + /// {d}:百分比。 + /// {e}:数据名。 + /// {f}:数据和。 /// 示例:“{b}:{c}” - /// </example> + /// </summary> public string formatter { get { return m_Formatter; } @@ -315,4 +316,4 @@ namespace XCharts.Runtime m_TextStyle.Copy(label.m_TextStyle); } } -} +} \ No newline at end of file diff --git a/Runtime/Component/Child/LabelStyle.cs.meta b/Runtime/Component/Label/LabelStyle.cs.meta similarity index 100% rename from Runtime/Component/Child/LabelStyle.cs.meta rename to Runtime/Component/Label/LabelStyle.cs.meta diff --git a/Runtime/Component/Legend/Legend.cs b/Runtime/Component/Legend/Legend.cs index f9842e1b..c2ff2c67 100644 --- a/Runtime/Component/Legend/Legend.cs +++ b/Runtime/Component/Legend/Legend.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -63,7 +62,8 @@ namespace XCharts.Runtime /// 无法选择。 /// </summary> None - }; + } + [SerializeField] private bool m_Show = true; [SerializeField] private Type m_IconType = Type.Auto; [SerializeField] private SelectedMode m_SelectedMode = SelectedMode.Multiple; @@ -73,11 +73,13 @@ namespace XCharts.Runtime [SerializeField] private float m_ItemHeight = 12.0f; [SerializeField] private float m_ItemGap = 10f; [SerializeField] private bool m_ItemAutoColor = true; - [SerializeField] private bool m_TextAutoColor = false; + [SerializeField] private float m_ItemOpacity = 1; [SerializeField] private string m_Formatter; + [SerializeField] protected string m_NumericFormatter = ""; [SerializeField] private LabelStyle m_LabelStyle = new LabelStyle(); [SerializeField] private List<string> m_Data = new List<string>(); [SerializeField] private List<Sprite> m_Icons = new List<Sprite>(); + [SerializeField] private List<Color> m_Colors = new List<Color>(); public LegendContext context = new LegendContext(); @@ -171,19 +173,30 @@ namespace XCharts.Runtime set { if (PropertyUtil.SetStruct(ref m_ItemAutoColor, value)) SetComponentDirty(); } } /// <summary> - /// Whether the legend text matches the color automatically. - /// |图例标记的文本是否自动匹配颜色。 - /// [default:false] + /// the opacity of item color. + /// |图例标记的图形的颜色透明度。 /// </summary> - public bool textAutoColor + public float itemOpacity { - get { return m_TextAutoColor; } - set { if (PropertyUtil.SetStruct(ref m_TextAutoColor, value)) SetComponentDirty(); } + get { return m_ItemOpacity; } + set { if (PropertyUtil.SetStruct(ref m_ItemOpacity, value)) SetComponentDirty(); } } /// <summary> - /// Legend content string template formatter. Support for wrapping lines with \n. Template:{name}. + /// Standard numeric format strings. + /// |标准数字格式字符串。用于将数值格式化显示为字符串。 + /// 使用Axx的形式:A是格式说明符的单字符,支持C货币、D十进制、E指数、F定点数、G常规、N数字、P百分比、R往返、X十六进制的。xx是精度说明,从0-99。 + /// 参考:https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/standard-numeric-format-strings + /// </summary> + /// <value></value> + public string numericFormatter + { + get { return m_NumericFormatter; } + set { if (PropertyUtil.SetClass(ref m_NumericFormatter, value)) SetComponentDirty(); } + } + /// <summary> + /// Legend content string template formatter. Support for wrapping lines with \n. Template:{value}. /// |图例内容字符串模版格式器。支持用 \n 换行。 - /// 模板变量为图例名称 {name}。 + /// 模板变量为图例名称 {value}。 /// [default:null] /// </summary> public string formatter @@ -220,6 +233,11 @@ namespace XCharts.Runtime get { return m_Icons; } set { if (value != null) { m_Icons = value; SetComponentDirty(); } } } + public List<Color> colors + { + get { return m_Colors; } + set { if (value != null) { m_Colors = value; SetAllDirty(); } } + } /// <summary> /// 图表是否需要刷新(图例组件不需要刷新图表) /// </summary> @@ -384,6 +402,14 @@ namespace XCharts.Runtime } } + public Color GetColor(int index) + { + if (index >= 0 && index < m_Colors.Count) + return m_Colors[index]; + else + return Color.white; + } + /// <summary> /// Callback handling when parameters change. /// |参数变更时的回调处理。 @@ -392,23 +418,5 @@ namespace XCharts.Runtime { m_Location.OnChanged(); } - - /// <summary> - /// 获得图例格式化后的显示内容。 - /// </summary> - /// <param name="category"></param> - /// <returns></returns> - public string GetFormatterContent(string category) - { - if (string.IsNullOrEmpty(m_Formatter)) - return category; - else - { - var content = m_Formatter.Replace("{name}", category); - content = content.Replace("\\n", "\n"); - content = content.Replace("<br/>", "\n"); - return content; - } - } } -} +} \ No newline at end of file diff --git a/Runtime/Component/Legend/LegendContext.cs b/Runtime/Component/Legend/LegendContext.cs index 463403f7..9bead405 100644 --- a/Runtime/Component/Legend/LegendContext.cs +++ b/Runtime/Component/Legend/LegendContext.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; diff --git a/Runtime/Component/Legend/LegendHandler.cs b/Runtime/Component/Legend/LegendHandler.cs index b2852b51..58d2be40 100644 --- a/Runtime/Component/Legend/LegendHandler.cs +++ b/Runtime/Component/Legend/LegendHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using System.Linq; using UnityEngine; @@ -40,14 +39,20 @@ namespace XCharts.Runtime DrawLegend(vh); } + public override void OnSerieDataUpdate(int serieIndex) + { + if (FormatterHelper.NeedFormat(component.formatter)) + component.refreshComponent(); + } + private void InitLegend(Legend legend) { legend.painter = null; - legend.refreshComponent = delegate () + legend.refreshComponent = delegate() { legend.OnChanged(); var legendObject = ChartHelper.AddObject(s_LegendObjectName + legend.index, chart.transform, chart.chartMinAnchor, - chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); legend.gameObject = legendObject; legendObject.hideFlags = chart.chartHideFlags; SeriesHelper.UpdateSerieNameList(chart, ref chart.m_LegendRealShowName); @@ -77,10 +82,11 @@ namespace XCharts.Runtime for (int i = 0; i < datas.Count; i++) { if (!SeriesHelper.IsLegalLegendName(datas[i])) continue; - string legendName = legend.GetFormatterContent(datas[i]); + string legendName = GetFormatterContent(legend, i, datas[i]); var readIndex = chart.m_LegendRealShowName.IndexOf(datas[i]); var active = chart.IsActiveByLegend(datas[i]); var bgColor = LegendHelper.GetIconColor(chart, legend, readIndex, datas[i], active); + bgColor.a = legend.itemOpacity; var item = LegendHelper.AddLegendItem(legend, i, datas[i], legendObject.transform, chart.theme, legendName, bgColor, active, readIndex); legend.SetButton(legendName, item, totalLegend); @@ -136,6 +142,20 @@ namespace XCharts.Runtime legend.refreshComponent(); } + private string GetFormatterContent(Legend legend, int dataIndex, string category) + { + if (string.IsNullOrEmpty(legend.formatter)) + return category; + else + { + var content = legend.formatter.Replace("{name}", category); + content = content.Replace("{value}", category); + var serie = chart.GetSerie(0); + FormatterHelper.ReplaceContent(ref content, dataIndex, legend.numericFormatter, serie, chart); + return content; + } + } + private void OnLegendButtonClick(Legend legend, int index, string legendName, bool show) { chart.OnLegendButtonClick(index, legendName, show); diff --git a/Runtime/Component/Legend/LegendHelper.cs b/Runtime/Component/Legend/LegendHelper.cs index 297f56a1..ed580317 100644 --- a/Runtime/Component/Legend/LegendHelper.cs +++ b/Runtime/Component/Legend/LegendHelper.cs @@ -11,7 +11,7 @@ namespace XCharts.Runtime var textStyle = legend.labelStyle.textStyle; if (active) { - if (legend.textAutoColor) return theme.GetColor(legendIndex); + if (legend.labelStyle.textStyle.autoColor) return theme.GetColor(legendIndex); else return !ChartHelper.IsClearColor(textStyle.color) ? textStyle.color : theme.legend.textColor; } else return theme.legend.unableColor; @@ -21,12 +21,12 @@ namespace XCharts.Runtime { if (active) { - if (legend.itemAutoColor || legend.GetIcon(readIndex) == null) + if (legend.itemAutoColor) { return SeriesHelper.GetNameColor(chart, readIndex, legendName); } else - return Color.white; + return legend.GetColor(readIndex); } else return chart.theme.legend.unableColor; } @@ -54,7 +54,7 @@ namespace XCharts.Runtime ChartHelper.GetOrAddComponent<Image>(iconObj); var label = ChartHelper.AddChartLabel("content", btnObj.transform, legend.labelStyle, theme.legend, - content, contentColor, TextAnchor.MiddleLeft); + content, contentColor, TextAnchor.MiddleLeft); label.SetActive(true); var item = new LegendItem(); diff --git a/Runtime/Component/Mark/MarkArea.cs b/Runtime/Component/Mark/MarkArea.cs index b10c3d4b..47ea3447 100644 --- a/Runtime/Component/Mark/MarkArea.cs +++ b/Runtime/Component/Mark/MarkArea.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime diff --git a/Runtime/Component/Mark/MarkAreaHandler.cs b/Runtime/Component/Mark/MarkAreaHandler.cs index c0f90ffb..9e1345b5 100644 --- a/Runtime/Component/Mark/MarkAreaHandler.cs +++ b/Runtime/Component/Mark/MarkAreaHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -41,7 +40,7 @@ namespace XCharts.Runtime private void InitMarkArea(MarkArea markArea) { markArea.painter = chart.m_PainterTop; - markArea.refreshComponent = delegate () + markArea.refreshComponent = delegate() { var label = ChartHelper.AddChartLabel("label", m_MarkLineLabelRoot.transform, markArea.label, chart.theme.axis, component.text, Color.clear, TextAnchor.MiddleCenter); diff --git a/Runtime/Component/Mark/MarkLine.cs b/Runtime/Component/Mark/MarkLine.cs index bb610270..9b709ef2 100644 --- a/Runtime/Component/Mark/MarkLine.cs +++ b/Runtime/Component/Mark/MarkLine.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -28,7 +27,6 @@ namespace XCharts.Runtime Median } - /// <summary> /// Use a line in the chart to illustrate. /// |图表标线。 @@ -86,11 +84,13 @@ namespace XCharts.Runtime item.name = "average"; item.type = MarkLineType.Average; item.lineStyle.type = LineStyle.Type.Dashed; - item.lineStyle.color = Color.blue; + item.lineStyle.color = Color.clear; item.startSymbol.show = true; item.startSymbol.type = SymbolType.Circle; + item.startSymbol.size = 4; item.endSymbol.show = true; item.endSymbol.type = SymbolType.Arrow; + item.endSymbol.size = 5; item.label.show = true; item.label.numericFormatter = "f1"; item.label.formatter = "{c}"; diff --git a/Runtime/Component/Mark/MarkLineHandler.cs b/Runtime/Component/Mark/MarkLineHandler.cs index b646d985..e0471fb4 100644 --- a/Runtime/Component/Mark/MarkLineHandler.cs +++ b/Runtime/Component/Mark/MarkLineHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -36,6 +35,7 @@ namespace XCharts.Runtime { if (data.runtimeLabel != null) { + data.runtimeLabel.SetActive(data.label.show); data.runtimeLabel.SetPosition(MarkLineHelper.GetLabelPosition(data)); data.runtimeLabel.SetText(MarkLineHelper.GetFormatterContent(serie, data)); } @@ -70,13 +70,12 @@ namespace XCharts.Runtime private void InitMarkLineLabel(Serie serie, MarkLineData data, Color serieColor) { data.painter = chart.m_PainterTop; - data.refreshComponent = delegate () + data.refreshComponent = delegate() { var textName = string.Format("markLine_{0}_{1}", serie.index, data.index); var content = MarkLineHelper.GetFormatterContent(serie, data); var label = ChartHelper.AddChartLabel(textName, m_MarkLineLabelRoot.transform, data.label, chart.theme.axis, content, Color.clear, TextAnchor.MiddleCenter); - label.SetActive(data.label.show); label.SetIconActive(false); label.SetActive(data.label.show); @@ -203,7 +202,8 @@ namespace XCharts.Runtime for (int i = 0; i < markLine.data.Count; i++) { var data = markLine.data[i]; - data.index = i; + // data.index = i; + data.index = markLine.index; if (data.group == 0) continue; if (!m_TempGroupData.ContainsKey(data.group)) { diff --git a/Runtime/Component/Mark/MarkLineHelper.cs b/Runtime/Component/Mark/MarkLineHelper.cs index dd6127ad..98511fa1 100644 --- a/Runtime/Component/Mark/MarkLineHelper.cs +++ b/Runtime/Component/Mark/MarkLineHelper.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -18,7 +17,7 @@ namespace XCharts.Runtime else { var content = serieLabel.formatter; - FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, data.runtimeValue, + FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, serie.dataCount, data.runtimeValue, 0, serie.serieName, data.name, data.name, Color.clear); return content; } diff --git a/Runtime/Component/Radar/RadarCoord.cs b/Runtime/Component/Radar/RadarCoord.cs index 622992cd..8a2c6bb9 100644 --- a/Runtime/Component/Radar/RadarCoord.cs +++ b/Runtime/Component/Radar/RadarCoord.cs @@ -1,6 +1,5 @@ - -using UnityEngine; using System.Collections.Generic; +using UnityEngine; using UnityEngine.UI; namespace XCharts.Runtime @@ -91,6 +90,7 @@ namespace XCharts.Runtime return true; } } + [SerializeField] private bool m_Show; [SerializeField] private Shape m_Shape; [SerializeField] private float m_Radius = 100; @@ -281,12 +281,13 @@ namespace XCharts.Runtime m_Radius = 0.35f; m_SplitNumber = 5; m_Indicator = true; - m_IndicatorList = new List<Indicator>(5){ - new Indicator(){name="indicator1",max = 0}, - new Indicator(){name="indicator2",max = 0}, - new Indicator(){name="indicator3",max = 0}, - new Indicator(){name="indicator4",max = 0}, - new Indicator(){name="indicator5",max = 0}, + m_IndicatorList = new List<Indicator>(5) + { + new Indicator() { name = "indicator1", max = 0 }, + new Indicator() { name = "indicator2", max = 0 }, + new Indicator() { name = "indicator3", max = 0 }, + new Indicator() { name = "indicator4", max = 0 }, + new Indicator() { name = "indicator5", max = 0 }, }; center[0] = 0.5f; center[1] = 0.4f; diff --git a/Runtime/Component/Radar/RadarCoordContext.cs b/Runtime/Component/Radar/RadarCoordContext.cs index 79093e4b..dc45f606 100644 --- a/Runtime/Component/Radar/RadarCoordContext.cs +++ b/Runtime/Component/Radar/RadarCoordContext.cs @@ -1,6 +1,5 @@ - -using UnityEngine; using System.Collections.Generic; +using UnityEngine; using UnityEngine.UI; namespace XCharts.Runtime diff --git a/Runtime/Component/Radar/RadarCoordHandler.cs b/Runtime/Component/Radar/RadarCoordHandler.cs index bb761676..4c72ccb8 100644 --- a/Runtime/Component/Radar/RadarCoordHandler.cs +++ b/Runtime/Component/Radar/RadarCoordHandler.cs @@ -1,6 +1,5 @@ - -using UnityEngine; using System.Collections.Generic; +using UnityEngine; using UnityEngine.UI; using XUGL; @@ -24,8 +23,8 @@ namespace XCharts.Runtime return; } var radar = component; - radar.context.isPointerEnter = radar.show - && Vector3.Distance(radar.context.center, chart.pointerPos) <= radar.context.radius; + radar.context.isPointerEnter = radar.show && + Vector3.Distance(radar.context.center, chart.pointerPos) <= radar.context.radius; } public override void DrawBase(VertexHelper vh) @@ -37,11 +36,11 @@ namespace XCharts.Runtime { float txtHig = 20; radar.painter = chart.GetPainter(radar.index); - radar.refreshComponent = delegate () + radar.refreshComponent = delegate() { radar.UpdateRadarCenter(chart.chartPosition, chart.chartWidth, chart.chartHeight); var radarObject = ChartHelper.AddObject("Radar" + radar.index, chart.transform, chart.chartMinAnchor, - chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); radar.gameObject = radarObject; radar.gameObject.hideFlags = chart.chartHideFlags; ChartHelper.HideAllObject(radarObject.transform, INDICATOR_TEXT); @@ -52,7 +51,7 @@ namespace XCharts.Runtime var objName = INDICATOR_TEXT + "_" + i; var label = ChartHelper.AddChartLabel(objName, radarObject.transform, radar.axisName.labelStyle, - chart.theme.common, radar.GetFormatterIndicatorContent(i), Color.clear, TextAnchor.MiddleCenter); + chart.theme.common, radar.GetFormatterIndicatorContent(i), Color.clear, TextAnchor.MiddleCenter); label.SetActive(radar.indicator && radar.axisName.labelStyle.show); AxisHelper.AdjustCircleLabelPos(label, pos, radar.context.center, txtHig, radar.axisName.labelStyle.offset); } @@ -95,7 +94,7 @@ namespace XCharts.Runtime if (radar.splitArea.show) { UGL.DrawDoughnut(vh, p, insideRadius, outsideRadius, color, Color.clear, - 0, 360, chart.settings.cicleSmoothness); + 0, 360, chart.settings.cicleSmoothness); } if (radar.splitLine.show) { diff --git a/Runtime/Component/Settings/Settings.cs b/Runtime/Component/Settings/Settings.cs index 9cdb9dba..4d8bc804 100644 --- a/Runtime/Component/Settings/Settings.cs +++ b/Runtime/Component/Settings/Settings.cs @@ -1,6 +1,5 @@ - -using UnityEngine; using System; +using UnityEngine; namespace XCharts.Runtime { @@ -12,15 +11,15 @@ namespace XCharts.Runtime public class Settings : MainComponent { [SerializeField] private bool m_Show = true; - [SerializeField] [Range(1, 20)] protected int m_MaxPainter = 10; + [SerializeField][Range(1, 20)] protected int m_MaxPainter = 10; [SerializeField] protected bool m_ReversePainter = false; [SerializeField] protected Material m_BasePainterMaterial; [SerializeField] protected Material m_SeriePainterMaterial; [SerializeField] protected Material m_TopPainterMaterial; - [SerializeField] [Range(1, 10)] protected float m_LineSmoothStyle = 3f; - [SerializeField] [Range(1f, 20)] protected float m_LineSmoothness = 2f; - [SerializeField] [Range(0.5f, 20)] protected float m_LineSegmentDistance = 3f; - [SerializeField] [Range(1, 10)] protected float m_CicleSmoothness = 2f; + [SerializeField][Range(1, 10)] protected float m_LineSmoothStyle = 3f; + [SerializeField][Range(1f, 20)] protected float m_LineSmoothness = 2f; + [SerializeField][Range(0.5f, 20)] protected float m_LineSegmentDistance = 3f; + [SerializeField][Range(1, 10)] protected float m_CicleSmoothness = 2f; [SerializeField] protected float m_LegendIconLineWidth = 2; [SerializeField] private float[] m_LegendIconCornerRadius = new float[] { 0.25f, 0.25f, 0.25f, 0.25f }; @@ -156,13 +155,13 @@ namespace XCharts.Runtime return new Settings() { m_ReversePainter = false, - m_MaxPainter = XCSettings.maxPainter, - m_LineSmoothStyle = XCSettings.lineSmoothStyle, - m_LineSmoothness = XCSettings.lineSmoothness, - m_LineSegmentDistance = XCSettings.lineSegmentDistance, - m_CicleSmoothness = XCSettings.cicleSmoothness, - m_LegendIconLineWidth = 2, - m_LegendIconCornerRadius = new float[] { 0.25f, 0.25f, 0.25f, 0.25f } + m_MaxPainter = XCSettings.maxPainter, + m_LineSmoothStyle = XCSettings.lineSmoothStyle, + m_LineSmoothness = XCSettings.lineSmoothness, + m_LineSegmentDistance = XCSettings.lineSegmentDistance, + m_CicleSmoothness = XCSettings.cicleSmoothness, + m_LegendIconLineWidth = 2, + m_LegendIconCornerRadius = new float[] { 0.25f, 0.25f, 0.25f, 0.25f } }; } } diff --git a/Runtime/Component/Title/Title.cs b/Runtime/Component/Title/Title.cs index 2fa8161a..ac4ca74d 100644 --- a/Runtime/Component/Title/Title.cs +++ b/Runtime/Component/Title/Title.cs @@ -1,6 +1,5 @@ - -using UnityEngine; using System; +using UnityEngine; namespace XCharts.Runtime { @@ -83,10 +82,10 @@ namespace XCharts.Runtime { get { - return m_ComponentDirty - || location.componentDirty - || m_LabelStyle.componentDirty - || m_SubLabelStyle.componentDirty; + return m_ComponentDirty || + location.componentDirty || + m_LabelStyle.componentDirty || + m_SubLabelStyle.componentDirty; } } diff --git a/Runtime/Component/Title/TitleHandler.cs b/Runtime/Component/Title/TitleHandler.cs index 98f252b8..63e32940 100644 --- a/Runtime/Component/Title/TitleHandler.cs +++ b/Runtime/Component/Title/TitleHandler.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -8,12 +7,14 @@ namespace XCharts.Runtime { private static readonly string s_TitleObjectName = "title"; private static readonly string s_SubTitleObjectName = "title_sub"; + private ChartLabel m_LabelObject; + private ChartLabel m_SubLabelObject; public override void InitComponent() { var title = component; title.painter = null; - title.refreshComponent = delegate () + title.refreshComponent = delegate() { title.OnChanged(); var anchorMin = title.location.runtimeAnchorMin; @@ -36,16 +37,52 @@ namespace XCharts.Runtime titleObject.hideFlags = chart.chartHideFlags; ChartHelper.HideAllObject(titleObject); - var label = ChartHelper.AddChartLabel(s_TitleObjectName, titleObject.transform, title.labelStyle, chart.theme.title, - title.text, Color.clear, title.location.runtimeTextAlignment); - label.SetActive(title.show && title.labelStyle.show); + m_LabelObject = ChartHelper.AddChartLabel(s_TitleObjectName, titleObject.transform, title.labelStyle, chart.theme.title, + GetTitleText(title), Color.clear, title.location.runtimeTextAlignment); + m_LabelObject.SetActive(title.show && title.labelStyle.show); - var subLabel = ChartHelper.AddChartLabel(s_SubTitleObjectName, titleObject.transform, title.subLabelStyle, chart.theme.subTitle, - title.subText, Color.clear, title.location.runtimeTextAlignment); - subLabel.SetActive(title.show && title.subLabelStyle.show); - subLabel.transform.localPosition = subTitlePosition + title.subLabelStyle.offset; + m_SubLabelObject = ChartHelper.AddChartLabel(s_SubTitleObjectName, titleObject.transform, title.subLabelStyle, chart.theme.subTitle, + GetSubTitleText(title), Color.clear, title.location.runtimeTextAlignment); + m_SubLabelObject.SetActive(title.show && title.subLabelStyle.show); + m_SubLabelObject.transform.localPosition = subTitlePosition + title.subLabelStyle.offset; }; title.refreshComponent(); } + + public override void OnSerieDataUpdate(int serieIndex) + { + if (m_LabelObject != null && FormatterHelper.NeedFormat(component.text)) + m_LabelObject.SetText(GetTitleText(component)); + if (m_SubLabelObject != null && FormatterHelper.NeedFormat(component.subText)) + m_SubLabelObject.SetText(GetSubTitleText(component)); + } + + private string GetTitleText(Title title) + { + if (FormatterHelper.NeedFormat(title.text)) + { + var content = title.text; + FormatterHelper.ReplaceContent(ref content, 0, title.labelStyle.numericFormatter, null, chart); + return content; + } + else + { + return title.text; + } + } + + private string GetSubTitleText(Title title) + { + if (FormatterHelper.NeedFormat(title.subText)) + { + var content = title.subText; + FormatterHelper.ReplaceContent(ref content, 0, title.subLabelStyle.numericFormatter, null, chart); + return content; + } + else + { + return title.subText; + } + } } } \ No newline at end of file diff --git a/Runtime/Component/Title/TitleStyle.cs b/Runtime/Component/Title/TitleStyle.cs index 711e7498..2befc2da 100644 --- a/Runtime/Component/Title/TitleStyle.cs +++ b/Runtime/Component/Title/TitleStyle.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -11,6 +10,6 @@ namespace XCharts.Runtime [Serializable] public class TitleStyle : LabelStyle, ISerieDataComponent, ISerieExtraComponent { - + } } \ No newline at end of file diff --git a/Runtime/Component/Tooltip/Tooltip.cs b/Runtime/Component/Tooltip/Tooltip.cs index ca074913..c656f7dc 100644 --- a/Runtime/Component/Tooltip/Tooltip.cs +++ b/Runtime/Component/Tooltip/Tooltip.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using System.Text; using UnityEngine; @@ -101,9 +100,9 @@ namespace XCharts.Runtime [SerializeField] private List<LabelStyle> m_ContentLabelStyles = new List<LabelStyle>() { - new LabelStyle(){ textPadding = new TextPadding(0,5,0,0), textStyle = new TextStyle() { alignment = TextAnchor.MiddleLeft }}, - new LabelStyle(){ textPadding = new TextPadding(0,20,0,0), textStyle = new TextStyle() { alignment = TextAnchor.MiddleLeft }}, - new LabelStyle(){ textPadding = new TextPadding(0,0,0,0), textStyle = new TextStyle() { alignment = TextAnchor.MiddleRight }} + new LabelStyle() { textPadding = new TextPadding(0, 5, 0, 0), textStyle = new TextStyle() { alignment = TextAnchor.MiddleLeft } }, + new LabelStyle() { textPadding = new TextPadding(0, 20, 0, 0), textStyle = new TextStyle() { alignment = TextAnchor.MiddleLeft } }, + new LabelStyle() { textPadding = new TextPadding(0, 0, 0, 0), textStyle = new TextStyle() { alignment = TextAnchor.MiddleRight } } }; public TooltipContext context = new TooltipContext(); @@ -146,6 +145,7 @@ namespace XCharts.Runtime /// {c} is the value of a Y-dimension (dimesion is 1) from a Serie that is currently indicated or whose index is 0.</br> /// {d} is the percentage value of Y-dimensions (dimesion is 1) from serie that is currently indicated or whose index is 0, with no % sign.</br> /// {e} is the name of the data item serieData that is currently indicated or whose index is 0.</br> + /// {f} is sum of data.</br> /// {.1} represents a dot from serie corresponding color that specifies index as 1.</br> /// 1 in {a1}, {b1}, {c1} represents a serie that specifies an index of 1.</br> /// {c1:2} represents the third data from serie's current indication data item indexed to 1 (a data item has multiple data, index 2 represents the third data).</br> @@ -161,6 +161,7 @@ namespace XCharts.Runtime /// {c}为当前所指示或index为0的serie的y维(dimesion为1)的数值。</br> /// {d}为当前所指示或index为0的serie的y维(dimesion为1)百分比值,注意不带%号。</br> /// {e}为当前所指示或index为0的serie的数据项serieData的name。</br> + /// {f}为数据总和。</br> /// {.1}表示指定index为1的serie对应颜色的圆点。</br> /// {a1}、{b1}、{c1}中的1表示指定index为1的serie。</br> /// {c1:2}表示索引为1的serie的当前指示数据项的第3个数据(一个数据项有多个数据,index为2表示第3个数据)。</br> @@ -372,7 +373,7 @@ namespace XCharts.Runtime /// |当前提示框所指示的数据项索引。 /// </summary> public List<int> runtimeDataIndex { get { return m_RuntimeDateIndex; } internal set { m_RuntimeDateIndex = value; } } - private List<int> m_RuntimeDateIndex = new List<int>() { -1, -1 }; + private List<int> m_RuntimeDateIndex = new List<int>() {-1, -1 }; /// <summary> /// Keep Tooltiop displayed at the top. diff --git a/Runtime/Component/Tooltip/TooltipContext.cs b/Runtime/Component/Tooltip/TooltipContext.cs index c9b322ef..f00c7d0b 100644 --- a/Runtime/Component/Tooltip/TooltipContext.cs +++ b/Runtime/Component/Tooltip/TooltipContext.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using System.Text; diff --git a/Runtime/Component/Tooltip/TooltipHandler.cs b/Runtime/Component/Tooltip/TooltipHandler.cs index acee6078..e55d3670 100644 --- a/Runtime/Component/Tooltip/TooltipHandler.cs +++ b/Runtime/Component/Tooltip/TooltipHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using System.Text; using UnityEngine; @@ -35,7 +34,7 @@ namespace XCharts.Runtime private void InitTooltip(Tooltip tooltip) { tooltip.painter = chart.m_PainterTop; - tooltip.refreshComponent = delegate () + tooltip.refreshComponent = delegate() { var objName = ChartCached.GetComponentObjectName(tooltip); tooltip.gameObject = ChartHelper.AddObject(objName, chart.transform, chart.chartMinAnchor, @@ -186,7 +185,7 @@ namespace XCharts.Runtime label.SetTextActive(true); label.SetPosition(axis.context.pointerLabelPosition); if (axis.IsCategory()) - label.SetText(axis.GetData((int)axis.context.pointerValue)); + label.SetText(axis.GetData((int) axis.context.pointerValue)); else label.SetText(axis.context.pointerValue.ToString("f2")); var textColor = axis.axisLabel.textStyle.GetColor(chart.theme.axis.textColor); @@ -210,8 +209,8 @@ namespace XCharts.Runtime { foreach (var serie in chart.series) { - if (serie is INeedSerieContainer - && (serie as INeedSerieContainer).containterInstanceId == component.instanceId) + if (serie is INeedSerieContainer && + (serie as INeedSerieContainer).containterInstanceId == component.instanceId) { var isTriggerAxis = tooltip.IsTriggerAxis(); if (container is GridCoord) @@ -224,7 +223,7 @@ namespace XCharts.Runtime else if (container is PolarCoord) { var m_AngleAxis = ComponentHelper.GetAngleAxis(chart.components, container.index); - tooltip.context.angle = (float)m_AngleAxis.context.pointerValue; + tooltip.context.angle = (float) m_AngleAxis.context.pointerValue; } list.Add(serie); if (!isTriggerAxis) @@ -243,7 +242,7 @@ namespace XCharts.Runtime serie.context.pointerAxisDataIndexs.Clear(); if (yAxis.IsCategory()) { - serie.context.pointerAxisDataIndexs.Add((int)yAxis.context.pointerValue); + serie.context.pointerAxisDataIndexs.Add((int) yAxis.context.pointerValue); yAxis.context.axisTooltipValue = yAxis.context.pointerValue; } else if (yAxis.IsTime()) @@ -255,7 +254,7 @@ namespace XCharts.Runtime } else if (xAxis.IsCategory()) { - serie.context.pointerAxisDataIndexs.Add((int)xAxis.context.pointerValue); + serie.context.pointerAxisDataIndexs.Add((int) xAxis.context.pointerValue); xAxis.context.axisTooltipValue = xAxis.context.pointerValue; } else @@ -286,7 +285,7 @@ namespace XCharts.Runtime serieData.index = i; serie.context.sortedData.Add(serieData); } - serie.context.sortedData.Sort(delegate (SerieData a, SerieData b) + serie.context.sortedData.Sort(delegate(SerieData a, SerieData b) { return a.GetData(dimension).CompareTo(b.GetData(dimension)); }); @@ -437,7 +436,7 @@ namespace XCharts.Runtime var axis = component as Axis; if (axis.gridIndex == gridIndex && axis.IsCategory()) { - dataIndex = (int)axis.context.pointerValue; + dataIndex = (int) axis.context.pointerValue; category = axis.GetData(dataIndex); return true; } @@ -494,25 +493,25 @@ namespace XCharts.Runtime case Tooltip.Type.Corss: case Tooltip.Type.Line: float pX = grid.context.x; - pX += xAxis.IsCategory() - ? (float)(xAxis.context.pointerValue * splitWidth + (xAxis.boundaryGap ? splitWidth / 2 : 0)) - : xAxis.GetDistance(xAxis.context.axisTooltipValue, grid.context.width); + pX += xAxis.IsCategory() ? + (float) (xAxis.context.pointerValue * splitWidth + (xAxis.boundaryGap ? splitWidth / 2 : 0)) : + xAxis.GetDistance(xAxis.context.axisTooltipValue, grid.context.width); Vector2 sp = new Vector2(pX, grid.context.y); Vector2 ep = new Vector2(pX, grid.context.y + grid.context.height); var lineColor = TooltipHelper.GetLineColor(tooltip, chart.theme); - if (xAxis.IsCategory() && tooltip.type == Tooltip.Type.Corss) - { - float tooltipSplitWid = splitWidth < 1 ? 1 : splitWidth; - pX = (float)(grid.context.x + splitWidth * xAxis.context.pointerValue - - (xAxis.boundaryGap ? 0 : splitWidth / 2)); - float pY = grid.context.y + grid.context.height; - Vector3 p1 = new Vector3(pX, grid.context.y); - Vector3 p2 = new Vector3(pX, pY); - Vector3 p3 = new Vector3(pX + tooltipSplitWid, pY); - Vector3 p4 = new Vector3(pX + tooltipSplitWid, grid.context.y); - UGL.DrawQuadrilateral(vh, p1, p2, p3, p4, chart.theme.tooltip.areaColor); - } - else + // if (xAxis.IsCategory() && tooltip.type == Tooltip.Type.Corss) + // { + // float tooltipSplitWid = splitWidth < 1 ? 1 : splitWidth; + // pX = (float)(grid.context.x + splitWidth * xAxis.context.pointerValue - + // (xAxis.boundaryGap ? 0 : splitWidth / 2)); + // float pY = grid.context.y + grid.context.height; + // Vector3 p1 = new Vector3(pX, grid.context.y); + // Vector3 p2 = new Vector3(pX, pY); + // Vector3 p3 = new Vector3(pX + tooltipSplitWid, pY); + // Vector3 p4 = new Vector3(pX + tooltipSplitWid, grid.context.y); + // UGL.DrawQuadrilateral(vh, p1, p2, p3, p4, chart.theme.tooltip.areaColor); + // } + // else { ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, sp, ep, lineColor); } @@ -527,7 +526,7 @@ namespace XCharts.Runtime if (xAxis.IsCategory()) { float tooltipSplitWid = splitWidth < 1 ? 1 : splitWidth; - pX = (float)(grid.context.x + splitWidth * xAxis.context.pointerValue - + pX = (float) (grid.context.x + splitWidth * xAxis.context.pointerValue - (xAxis.boundaryGap ? 0 : splitWidth / 2)); float pY = grid.context.y + grid.context.height; Vector3 p1 = new Vector3(pX, grid.context.y); @@ -559,24 +558,24 @@ namespace XCharts.Runtime { case Tooltip.Type.Corss: case Tooltip.Type.Line: - float pY = (float)(grid.context.y + yAxis.context.pointerValue * splitWidth - + (yAxis.boundaryGap ? splitWidth / 2 : 0)); + float pY = (float) (grid.context.y + yAxis.context.pointerValue * splitWidth + + (yAxis.boundaryGap ? splitWidth / 2 : 0)); Vector2 sp = new Vector2(grid.context.x, pY); Vector2 ep = new Vector2(grid.context.x + grid.context.width, pY); var lineColor = TooltipHelper.GetLineColor(tooltip, chart.theme); - if (yAxis.IsCategory() && tooltip.type == Tooltip.Type.Corss) - { - float tooltipSplitWid = splitWidth < 1 ? 1 : splitWidth; - float pX = grid.context.x + grid.context.width; - pY = (float)(grid.context.y + splitWidth * yAxis.context.pointerValue - - (yAxis.boundaryGap ? 0 : splitWidth / 2)); - Vector3 p1 = new Vector3(grid.context.x, pY); - Vector3 p2 = new Vector3(grid.context.x, pY + tooltipSplitWid); - Vector3 p3 = new Vector3(pX, pY + tooltipSplitWid); - Vector3 p4 = new Vector3(pX, pY); - UGL.DrawQuadrilateral(vh, p1, p2, p3, p4, chart.theme.tooltip.areaColor); - } - else + // if (yAxis.IsCategory() && tooltip.type == Tooltip.Type.Corss) + // { + // float tooltipSplitWid = splitWidth < 1 ? 1 : splitWidth; + // float pX = grid.context.x + grid.context.width; + // pY = (float)(grid.context.y + splitWidth * yAxis.context.pointerValue - + // (yAxis.boundaryGap ? 0 : splitWidth / 2)); + // Vector3 p1 = new Vector3(grid.context.x, pY); + // Vector3 p2 = new Vector3(grid.context.x, pY + tooltipSplitWid); + // Vector3 p3 = new Vector3(pX, pY + tooltipSplitWid); + // Vector3 p4 = new Vector3(pX, pY); + // UGL.DrawQuadrilateral(vh, p1, p2, p3, p4, chart.theme.tooltip.areaColor); + // } + // else { ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, sp, ep, lineColor); } @@ -592,7 +591,7 @@ namespace XCharts.Runtime { float tooltipSplitWid = splitWidth < 1 ? 1 : splitWidth; float pX = grid.context.x + grid.context.width; - pY = (float)(grid.context.y + splitWidth * yAxis.context.pointerValue - + pY = (float) (grid.context.y + splitWidth * yAxis.context.pointerValue - (yAxis.boundaryGap ? 0 : splitWidth / 2)); Vector3 p1 = new Vector3(grid.context.x, pY); Vector3 p2 = new Vector3(grid.context.x, pY + tooltipSplitWid); diff --git a/Runtime/Component/Tooltip/TooltipHelper.cs b/Runtime/Component/Tooltip/TooltipHelper.cs index b28da61b..9e099bd9 100644 --- a/Runtime/Component/Tooltip/TooltipHelper.cs +++ b/Runtime/Component/Tooltip/TooltipHelper.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -37,6 +36,7 @@ namespace XCharts.Runtime var content = param.itemFormatter; FormatterHelper.ReplaceSerieLabelContent(ref content, param.numericFormatter, + param.dataCount, param.value, param.total, param.serieName, diff --git a/Runtime/Component/Tooltip/TooltipView.cs b/Runtime/Component/Tooltip/TooltipView.cs index de09db1d..2fe075f1 100644 --- a/Runtime/Component/Tooltip/TooltipView.cs +++ b/Runtime/Component/Tooltip/TooltipView.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using System.Text; using UnityEngine; @@ -115,8 +114,6 @@ namespace XCharts.Runtime tooltip.gameObject.transform.SetAsLastSibling(); } - - private void ResetSize() { var maxHig = 0f; @@ -220,8 +217,8 @@ namespace XCharts.Runtime view.background = ChartHelper.GetOrAddComponent<Image>(view.gameObject); view.background.sprite = tooltip.backgroundImage; view.background.type = tooltip.backgroundType; - view.background.color = ChartHelper.IsClearColor(tooltip.backgroundColor) - ? Color.white : tooltip.backgroundColor; + view.background.color = ChartHelper.IsClearColor(tooltip.backgroundColor) ? + Color.white : tooltip.backgroundColor; view.border = ChartHelper.GetOrAddComponent<Outline>(view.gameObject); view.border.enabled = tooltip.borderWidth > 0; @@ -240,7 +237,7 @@ namespace XCharts.Runtime tooltip.paddingTopBottom); view.title = ChartHelper.AddChartLabel("title", view.gameObject.transform, tooltip.titleLabelStyle, theme.tooltip, - "", Color.clear, TextAnchor.MiddleLeft); + "", Color.clear, TextAnchor.MiddleLeft); var item = CreateViewItem(0, view.gameObject.transform, tooltip, theme.tooltip); view.m_Items.Add(item); @@ -266,7 +263,7 @@ namespace XCharts.Runtime { var labelStyle = tooltip.GetContentLabelStyle(i); var label = ChartHelper.AddChartLabel("column" + i, parent, labelStyle, theme, - "", Color.clear, TextAnchor.MiddleLeft); + "", Color.clear, TextAnchor.MiddleLeft); return label; } } diff --git a/Runtime/Component/VisualMap/VisualMap.cs b/Runtime/Component/VisualMap/VisualMap.cs index 6b374386..165aa809 100644 --- a/Runtime/Component/VisualMap/VisualMap.cs +++ b/Runtime/Component/VisualMap/VisualMap.cs @@ -1,11 +1,10 @@ - using System.Collections.Generic; using UnityEngine; namespace XCharts.Runtime { [System.Serializable] - public class VisualMapPieces : ChildComponent + public class VisualMapRange : ChildComponent { [SerializeField] private double m_Min; [SerializeField] private double m_Max; @@ -31,6 +30,7 @@ namespace XCharts.Runtime public bool Contains(double value, double minMaxRange) { + if (m_Min == 0 && m_Max == 0) return false; var cmin = System.Math.Abs(m_Min) < 1 ? minMaxRange * m_Min : m_Min; var cmax = System.Math.Abs(m_Max) < 1 ? minMaxRange * m_Max : m_Max; return value >= cmin && value < cmax; @@ -101,9 +101,8 @@ namespace XCharts.Runtime [SerializeField] private bool m_WorkOnLine = true; [SerializeField] private bool m_WorkOnArea = false; - [SerializeField] private List<Color32> m_InRange = new List<Color32>(); - [SerializeField] private List<Color32> m_OutOfRange = new List<Color32>() { Color.gray }; - [SerializeField] private List<VisualMapPieces> m_Pieces = new List<VisualMapPieces>(); + [SerializeField] private List<VisualMapRange> m_OutOfRange = new List<VisualMapRange>() { new VisualMapRange() { color = Color.gray } }; + [SerializeField] private List<VisualMapRange> m_InRange = new List<VisualMapRange>(); public VisualMapContext context = new VisualMapContext(); @@ -331,19 +330,10 @@ namespace XCharts.Runtime set { if (PropertyUtil.SetStruct(ref m_WorkOnArea, value)) SetVerticesDirty(); } } /// <summary> - /// Defines the visual color in the selected range. - /// |定义 在选中范围中 的视觉颜色。 - /// </summary> - public List<Color32> inRange - { - get { return m_InRange; } - set { if (value != null) { m_InRange = value; SetVerticesDirty(); } } - } - /// <summary> /// Defines a visual color outside of the selected range. /// |定义 在选中范围外 的视觉颜色。 /// </summary> - public List<Color32> outOfRange + public List<VisualMapRange> outOfRange { get { return m_OutOfRange; } set { if (value != null) { m_OutOfRange = value; SetVerticesDirty(); } } @@ -351,10 +341,10 @@ namespace XCharts.Runtime /// <summary> /// 分段式每一段的相关配置。 /// </summary> - public List<VisualMapPieces> pieces + public List<VisualMapRange> inRange { - get { return m_Pieces; } - set { if (value != null) { m_Pieces = value; SetVerticesDirty(); } } + get { return m_InRange; } + set { if (value != null) { m_InRange = value; SetVerticesDirty(); } } } public override bool vertsDirty { get { return m_VertsDirty || location.anyDirty; } } @@ -396,73 +386,84 @@ namespace XCharts.Runtime } } - public float runtimeRangeMinHeight { get { return (float)((rangeMin - min) / (max - min) * itemHeight); } } - public float runtimeRangeMaxHeight { get { return (float)((rangeMax - min) / (max - min) * itemHeight); } } + public float runtimeRangeMinHeight { get { return (float) ((rangeMin - min) / (max - min) * itemHeight); } } + public float runtimeRangeMaxHeight { get { return (float) ((rangeMax - min) / (max - min) * itemHeight); } } - public List<Color32> runtimeInRange + public void AddColors(List<Color32> colors) { - get + m_InRange.Clear(); + foreach (var color in colors) { - if (splitNumber == 0 || m_InRange.Count >= splitNumber || m_InRange.Count < 1 || IsPiecewise()) + m_InRange.Add(new VisualMapRange() { - return m_InRange; - } - else + color = color + }); + } + } + + public void AddColors(List<string> colors) + { + m_InRange.Clear(); + foreach (var str in colors) + { + m_InRange.Add(new VisualMapRange() { - var count = splitNumber > 0 && splitNumber <= m_InRange.Count - ? splitNumber - : m_InRange.Count; - if (context.inRangeColors.Count != count) - { - context.inRangeColors.Clear(); - var total = max - min; - var diff1 = total / (m_InRange.Count - 1); - var diff2 = total / splitNumber; - - var inCount = 0; - var inValue = min; - var rtValue = min; - - for (int i = 0; i < splitNumber; i++) - { - rtValue += diff2; - if (rtValue > inValue + diff1) - { - inValue += diff1; - inCount++; - } - if (i == splitNumber - 1) - { - context.inRangeColors.Add(m_InRange[m_InRange.Count - 1]); - } - else - { - var rate = (float)((rtValue - inValue) / diff1); - context.inRangeColors.Add(Color32.Lerp(m_InRange[inCount], m_InRange[inCount + 1], rate)); - } - } - } - return context.inRangeColors; - } + color = ThemeStyle.GetColor(str) + }); } } public Color32 GetColor(double value) { - switch (type) + int index = GetIndex(value); + if (index == -1) { - case Type.Continuous: - return GetContinuousColor(value); - case Type.Piecewise: - return GetPiecesColor(value); - default: - return ColorUtil.clearColor32; + if (m_OutOfRange.Count > 0) + return m_OutOfRange[0].color; + else + return ChartConst.clearColor32; } + + if (m_Type == VisualMap.Type.Piecewise) + { + return m_InRange[index].color; + } + else + { + int splitNumber = m_InRange.Count; + var diff = (m_Max - m_Min) / (splitNumber - 1); + var nowMin = m_Min + index * diff; + var rate = (value - nowMin) / diff; + if (index == splitNumber - 1) + return m_InRange[index].color; + else + return Color32.Lerp(m_InRange[index].color, m_InRange[index + 1].color, (float) rate); + } + } + + private bool IsNeedPieceColor(double value, out int index) + { + bool flag = false; + index = -1; + for (int i = 0; i < m_InRange.Count; i++) + { + var range = m_InRange[i]; + if (range.min != 0 || range.max != 0) + { + flag = true; + if (range.Contains(value, max - min)) + { + index = i; + return true; + } + } + } + return flag; } private Color32 GetPiecesColor(double value) { - foreach (var piece in m_Pieces) + foreach (var piece in m_InRange) { if (piece.Contains(value, max - min)) { @@ -470,54 +471,25 @@ namespace XCharts.Runtime } } if (m_OutOfRange.Count > 0) - return m_OutOfRange[0]; + return m_OutOfRange[0].color; else return ChartConst.clearColor32; } - private Color32 GetContinuousColor(double value) - { - if (value < m_Min || value > m_Max) - { - if (m_OutOfRange.Count > 0) - return m_OutOfRange[0]; - else - return ChartConst.clearColor32; - } - int splitNumber = runtimeInRange.Count; - if (splitNumber <= 0) - return ChartConst.clearColor32; - - var index = GetIndex(value); - if (m_Type == VisualMap.Type.Piecewise) - { - if (index >= 0 && index < runtimeInRange.Count) - return runtimeInRange[index]; - else - return ChartConst.clearColor32; - } - else - { - var diff = (m_Max - m_Min) / (splitNumber - 1); - var nowMin = m_Min + index * diff; - var rate = (value - nowMin) / diff; - if (index == splitNumber - 1) - return runtimeInRange[index]; - else - return Color32.Lerp(runtimeInRange[index], runtimeInRange[index + 1], (float)rate); - } - } - public int GetIndex(double value) { - int splitNumber = runtimeInRange.Count; + int splitNumber = m_InRange.Count; if (splitNumber <= 0) return -1; - + var index = -1; + if (IsNeedPieceColor(value, out index)) + { + return index; + } value = MathUtil.Clamp(value, m_Min, m_Max); var diff = (m_Max - m_Min) / (splitNumber - 1); - var index = -1; + for (int i = 0; i < splitNumber; i++) { if (value <= m_Min + (i + 1) * diff) @@ -574,10 +546,10 @@ namespace XCharts.Runtime var centerPos = new Vector3(chartRect.x, chartRect.y) + location.GetPosition(chartRect.width, chartRect.height); var diff = calculable ? triangleLen : 0; - if (local.x >= centerPos.x - itemWidth / 2 - diff - && local.x <= centerPos.x + itemWidth / 2 + diff - && local.y >= centerPos.y - itemHeight / 2 - diff - && local.y <= centerPos.y + itemHeight / 2 + diff) + if (local.x >= centerPos.x - itemWidth / 2 - diff && + local.x <= centerPos.x + itemWidth / 2 + diff && + local.y >= centerPos.y - itemHeight / 2 - diff && + local.y <= centerPos.y + itemHeight / 2 + diff) { return true; } @@ -595,18 +567,18 @@ namespace XCharts.Runtime { var pos1 = centerPos + Vector3.down * itemHeight / 2; - return local.x >= centerPos.x - itemWidth / 2 - && local.x <= centerPos.x + itemWidth / 2 - && local.y >= pos1.y + runtimeRangeMinHeight - && local.y <= pos1.y + runtimeRangeMaxHeight; + return local.x >= centerPos.x - itemWidth / 2 && + local.x <= centerPos.x + itemWidth / 2 && + local.y >= pos1.y + runtimeRangeMinHeight && + local.y <= pos1.y + runtimeRangeMaxHeight; } else { var pos1 = centerPos + Vector3.left * itemHeight / 2; - return local.x >= pos1.x + runtimeRangeMinHeight - && local.x <= pos1.x + runtimeRangeMaxHeight - && local.y >= centerPos.y - itemWidth / 2 - && local.y <= centerPos.y + itemWidth / 2; + return local.x >= pos1.x + runtimeRangeMinHeight && + local.x <= pos1.x + runtimeRangeMaxHeight && + local.y >= centerPos.y - itemWidth / 2 && + local.y <= centerPos.y + itemWidth / 2; } } @@ -620,10 +592,10 @@ namespace XCharts.Runtime var pos1 = centerPos + Vector3.down * itemHeight / 2; var cpos = new Vector3(pos1.x + itemWidth / 2 + radius, pos1.y + runtimeRangeMinHeight - radius); - return local.x >= cpos.x - radius - && local.x <= cpos.x + radius - && local.y >= cpos.y - radius - && local.y <= cpos.y + radius; + return local.x >= cpos.x - radius && + local.x <= cpos.x + radius && + local.y >= cpos.y - radius && + local.y <= cpos.y + radius; } else { @@ -631,10 +603,10 @@ namespace XCharts.Runtime var pos1 = centerPos + Vector3.left * itemHeight / 2; var cpos = new Vector3(pos1.x + runtimeRangeMinHeight, pos1.y + itemWidth / 2 + radius); - return local.x >= cpos.x - radius - && local.x <= cpos.x + radius - && local.y >= cpos.y - radius - && local.y <= cpos.y + radius; + return local.x >= cpos.x - radius && + local.x <= cpos.x + radius && + local.y >= cpos.y - radius && + local.y <= cpos.y + radius; } } @@ -648,10 +620,10 @@ namespace XCharts.Runtime var pos1 = centerPos + Vector3.down * itemHeight / 2; var cpos = new Vector3(pos1.x + itemWidth / 2 + radius, pos1.y + runtimeRangeMaxHeight + radius); - return local.x >= cpos.x - radius - && local.x <= cpos.x + radius - && local.y >= cpos.y - radius - && local.y <= cpos.y + radius; + return local.x >= cpos.x - radius && + local.x <= cpos.x + radius && + local.y >= cpos.y - radius && + local.y <= cpos.y + radius; } else { @@ -659,10 +631,10 @@ namespace XCharts.Runtime var pos1 = centerPos + Vector3.left * itemHeight / 2; var cpos = new Vector3(pos1.x + runtimeRangeMaxHeight + radius, pos1.y + itemWidth / 2 + radius); - return local.x >= cpos.x - radius - && local.x <= cpos.x + radius - && local.y >= cpos.y - radius - && local.y <= cpos.y + radius; + return local.x >= cpos.x - radius && + local.x <= cpos.x + radius && + local.y >= cpos.y - radius && + local.y <= cpos.y + radius; } } } diff --git a/Runtime/Component/VisualMap/VisualMapContext.cs b/Runtime/Component/VisualMap/VisualMapContext.cs index d752b138..730b537d 100644 --- a/Runtime/Component/VisualMap/VisualMapContext.cs +++ b/Runtime/Component/VisualMap/VisualMapContext.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -15,6 +14,6 @@ namespace XCharts.Runtime public bool maxDrag { get; internal set; } internal List<Color32> inRangeColors = new List<Color32>(); - + } } \ No newline at end of file diff --git a/Runtime/Component/VisualMap/VisualMapHandler.cs b/Runtime/Component/VisualMap/VisualMapHandler.cs index 79c3b931..a6f672da 100644 --- a/Runtime/Component/VisualMap/VisualMapHandler.cs +++ b/Runtime/Component/VisualMap/VisualMapHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; @@ -63,11 +62,11 @@ namespace XCharts.Runtime return; } - if (local.x < chart.chartX - || local.x > chart.chartX + chart.chartWidth - || local.y < chart.chartY - || local.y > chart.chartY + chart.chartHeight - || !visualMap.IsInRangeRect(local, chart.chartRect)) + if (local.x < chart.chartX || + local.x > chart.chartX + chart.chartWidth || + local.y < chart.chartY || + local.y > chart.chartY + chart.chartHeight || + !visualMap.IsInRangeRect(local, chart.chartRect)) { if (visualMap.context.pointerIndex >= 0) { @@ -116,10 +115,10 @@ namespace XCharts.Runtime var halfHig = visualMap.itemHeight / 2; var xRadius = 0f; var yRadius = 0f; - var splitNum = visualMap.runtimeInRange.Count; + var splitNum = visualMap.inRange.Count; var splitWid = visualMap.itemHeight / (splitNum - 1); var isVertical = false; - var colors = visualMap.runtimeInRange; + var colors = visualMap.inRange; var triangeLen = chart.theme.visualMap.triangeLen; switch (visualMap.orient) @@ -172,8 +171,8 @@ namespace XCharts.Runtime } break; } - if (visualMap.calculable - && (visualMap.rangeMin > visualMap.min || visualMap.rangeMax < visualMap.max)) + if (visualMap.calculable && + (visualMap.rangeMin > visualMap.min || visualMap.rangeMax < visualMap.max)) { var rangeMin = visualMap.rangeMin; var rangeMax = visualMap.rangeMax; @@ -189,8 +188,8 @@ namespace XCharts.Runtime else if (rangeMin <= splitMin && rangeMax >= splitMax) { var splitPos = pos1 + dir * (i - 1 + 0.5f) * splitWid; - var startColor = colors[i - 1]; - var toColor = visualMap.IsPiecewise() ? startColor : colors[i]; + var startColor = colors[i - 1].color; + var toColor = visualMap.IsPiecewise() ? startColor : colors[i].color; UGL.DrawRectangle(vh, splitPos, xRadius, yRadius, startColor, toColor, isVertical); } else if (rangeMin > splitMin && rangeMax >= splitMax) @@ -199,7 +198,7 @@ namespace XCharts.Runtime var splitMaxPos = pos1 + dir * i * splitWid; var splitPos = p0 + (splitMaxPos - p0) / 2; var startColor = visualMap.GetColor(visualMap.rangeMin); - var toColor = visualMap.IsPiecewise() ? startColor : colors[i]; + var toColor = visualMap.IsPiecewise() ? startColor : colors[i].color; var yRadius1 = Vector3.Distance(p0, splitMaxPos) / 2; if (visualMap.orient == Orient.Vertical) @@ -212,7 +211,7 @@ namespace XCharts.Runtime var p0 = pos1 + dir * visualMap.runtimeRangeMaxHeight; var splitMinPos = pos1 + dir * (i - 1) * splitWid; var splitPos = splitMinPos + (p0 - splitMinPos) / 2; - var startColor = colors[i - 1]; + var startColor = colors[i - 1].color; var toColor = visualMap.IsPiecewise() ? startColor : visualMap.GetColor(visualMap.rangeMax); var yRadius1 = Vector3.Distance(p0, splitMinPos) / 2; @@ -242,8 +241,8 @@ namespace XCharts.Runtime for (int i = 1; i < splitNum; i++) { var splitPos = pos1 + dir * (i - 1 + 0.5f) * splitWid; - var startColor = colors[i - 1]; - var toColor = visualMap.IsPiecewise() ? startColor : colors[i]; + var startColor = colors[i - 1].color; + var toColor = visualMap.IsPiecewise() ? startColor : colors[i].color; UGL.DrawRectangle(vh, splitPos, xRadius, yRadius, startColor, toColor, isVertical); } } @@ -272,14 +271,14 @@ namespace XCharts.Runtime var p2 = new Vector3(centerPos.x + halfWid, Mathf.Clamp(pointerPos.y + (triangeLen / 2), p0.y, p1.y)); var p3 = new Vector3(centerPos.x + halfWid, Mathf.Clamp(pointerPos.y - (triangeLen / 2), p0.y, p1.y)); var p4 = new Vector3(centerPos.x + halfWid + triangeLen / 2, pointerPos.y); - UGL.DrawTriangle(vh, p2, p3, p4, colors[visualMap.context.pointerIndex]); + UGL.DrawTriangle(vh, p2, p3, p4, colors[visualMap.context.pointerIndex].color); } else { var p2 = new Vector3(Mathf.Clamp(pointerPos.x + (triangeLen / 2), p0.x, p1.x), centerPos.y + halfWid); var p3 = new Vector3(Mathf.Clamp(pointerPos.x - (triangeLen / 2), p0.x, p1.x), centerPos.y + halfWid); var p4 = new Vector3(pointerPos.x, centerPos.y + halfWid + triangeLen / 2); - UGL.DrawTriangle(vh, p2, p3, p4, colors[visualMap.context.pointerIndex]); + UGL.DrawTriangle(vh, p2, p3, p4, colors[visualMap.context.pointerIndex].color); } } } @@ -293,23 +292,21 @@ namespace XCharts.Runtime var dir = Vector3.zero; var halfWid = visualMap.itemWidth / 2; var halfHig = visualMap.itemHeight / 2; - var splitNum = visualMap.runtimeInRange.Count; - var colors = visualMap.runtimeInRange; switch (visualMap.orient) { case Orient.Horizonal: - for (int i = 0; i < visualMap.pieces.Count; i++) + for (int i = 0; i < visualMap.inRange.Count; i++) { - var piece = visualMap.pieces[i]; + var piece = visualMap.inRange[i]; } break; case Orient.Vertical: var each = visualMap.itemHeight + visualMap.itemGap; - for (int i = 0; i < visualMap.pieces.Count; i++) + for (int i = 0; i < visualMap.inRange.Count; i++) { - var piece = visualMap.pieces[i]; + var piece = visualMap.inRange[i]; var pos = new Vector3(centerPos.x, centerPos.y - each * i); UGL.DrawRectangle(vh, pos, halfWid, halfHig, piece.color); } diff --git a/Runtime/Component/VisualMap/VisualMapHelper.cs b/Runtime/Component/VisualMap/VisualMapHelper.cs index 42d05c2c..6351dea4 100644 --- a/Runtime/Component/VisualMap/VisualMapHelper.cs +++ b/Runtime/Component/VisualMap/VisualMapHelper.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -78,7 +77,7 @@ namespace XCharts.Runtime float startX = grid.context.x + axis.context.scaleWidth / 2; value = (min + (pos.x - startX) / (grid.context.width - axis.context.scaleWidth) * (max - min)); if (visualMap.IsPiecewise()) - value = (int)value; + value = (int) value; } else { @@ -94,7 +93,7 @@ namespace XCharts.Runtime float startY = grid.context.y + relativedAxis.context.scaleWidth / 2; value = (min + (pos.y - startY) / (grid.context.height - relativedAxis.context.scaleWidth) * (max - min)); if (visualMap.IsPiecewise()) - value = (int)value; + value = (int) value; } else { @@ -124,7 +123,7 @@ namespace XCharts.Runtime var grid = chart.GetChartComponent<GridCoord>(axis.gridIndex); var value = min + (pos.x - grid.context.x) / grid.context.width * (max - min); var rate = (value - min) / (max - min); - var color = itemStyle.GetGradientColor((float)rate, defaultColor); + var color = itemStyle.GetGradientColor((float) rate, defaultColor); if (ChartHelper.IsClearColor(color)) return defaultColor; @@ -139,7 +138,7 @@ namespace XCharts.Runtime var max = axis.context.maxValue; var value = min + (pos.x - grid.context.x) / grid.context.width * (max - min); var rate = (value - min) / (max - min); - var color = lineStyle.GetGradientColor((float)rate, defaultColor); + var color = lineStyle.GetGradientColor((float) rate, defaultColor); if (ChartHelper.IsClearColor(color)) return defaultColor; @@ -153,7 +152,7 @@ namespace XCharts.Runtime return false; if (!visualMap.show || (!visualMap.workOnLine && !visualMap.workOnArea)) return false; - if (visualMap.inRange.Count <= 0 && visualMap.pieces.Count <= 0) + if (visualMap.inRange.Count <= 0) return false; return true; } @@ -163,7 +162,7 @@ namespace XCharts.Runtime return false; if (!visualMap.show || !visualMap.workOnLine) return false; - if (visualMap.inRange.Count <= 0 && visualMap.pieces.Count <= 0) + if (visualMap.inRange.Count <= 0) return false; return true; } @@ -173,15 +172,15 @@ namespace XCharts.Runtime return false; if (!visualMap.show || !visualMap.workOnArea) return false; - if (visualMap.inRange.Count <= 0 && visualMap.pieces.Count <= 0) + if (visualMap.inRange.Count <= 0) return false; return true; } public static int GetDimension(VisualMap visualMap, int serieDataCount) { - var dimension = visualMap != null && visualMap.dimension >= 0 - ? visualMap.dimension : serieDataCount - 1; + var dimension = visualMap != null && visualMap.dimension >= 0 ? + visualMap.dimension : serieDataCount - 1; if (dimension > serieDataCount - 1) dimension = serieDataCount - 1; diff --git a/Runtime/Coord/Calendar/CalendarCoord.cs b/Runtime/Coord/Calendar/CalendarCoord.cs index 1678f5ed..8d162105 100644 --- a/Runtime/Coord/Calendar/CalendarCoord.cs +++ b/Runtime/Coord/Calendar/CalendarCoord.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -14,7 +13,6 @@ namespace XCharts.Runtime } public void UpdateRuntimeData(float chartX, float chartY, float chartWidth, float chartHeight) - { - } + { } } } \ No newline at end of file diff --git a/Runtime/Coord/Calendar/CalendarCoordHandler.cs b/Runtime/Coord/Calendar/CalendarCoordHandler.cs index 7414b1f2..69eb3338 100644 --- a/Runtime/Coord/Calendar/CalendarCoordHandler.cs +++ b/Runtime/Coord/Calendar/CalendarCoordHandler.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -6,6 +5,5 @@ namespace XCharts.Runtime { [UnityEngine.Scripting.Preserve] internal sealed class CalendarCoordHandler : MainComponentHandler<CalendarCoord> - { - } + { } } \ No newline at end of file diff --git a/Runtime/Coord/Grid/GridCoord.cs b/Runtime/Coord/Grid/GridCoord.cs index 30d49653..f279faa9 100644 --- a/Runtime/Coord/Grid/GridCoord.cs +++ b/Runtime/Coord/Grid/GridCoord.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; using XUGL; diff --git a/Runtime/Coord/Grid/GridCoordContext.cs b/Runtime/Coord/Grid/GridCoordContext.cs index 961a3585..be4ac7a7 100644 --- a/Runtime/Coord/Grid/GridCoordContext.cs +++ b/Runtime/Coord/Grid/GridCoordContext.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; diff --git a/Runtime/Coord/Grid/GridCoordHandler.cs b/Runtime/Coord/Grid/GridCoordHandler.cs index eace2db8..03dec597 100644 --- a/Runtime/Coord/Grid/GridCoordHandler.cs +++ b/Runtime/Coord/Grid/GridCoordHandler.cs @@ -1,4 +1,3 @@ - using System; using System.Text; using UnityEngine; @@ -14,7 +13,7 @@ namespace XCharts.Runtime { var grid = component; grid.painter = chart.painter; - grid.refreshComponent = delegate () + grid.refreshComponent = delegate() { grid.UpdateRuntimeData(chart.chartX, chart.chartY, chart.chartWidth, chart.chartHeight); chart.OnCoordinateChanged(); @@ -80,9 +79,9 @@ namespace XCharts.Runtime if (grid.showBorder) { var borderWidth = grid.borderWidth == 0 ? chart.theme.axis.lineWidth * 2 : grid.borderWidth; - var borderColor = ChartHelper.IsClearColor(grid.borderColor) - ? chart.theme.axis.lineColor - : grid.borderColor; + var borderColor = ChartHelper.IsClearColor(grid.borderColor) ? + chart.theme.axis.lineColor : + grid.borderColor; UGL.DrawBorder(vh, grid.context.center, grid.context.width - borderWidth, grid.context.height - borderWidth, borderWidth, borderColor); } diff --git a/Runtime/Coord/Parallel/ParallelCoord.cs b/Runtime/Coord/Parallel/ParallelCoord.cs index 7219edc9..73147bc5 100644 --- a/Runtime/Coord/Parallel/ParallelCoord.cs +++ b/Runtime/Coord/Parallel/ParallelCoord.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; diff --git a/Runtime/Coord/Parallel/ParallelCoordContext.cs b/Runtime/Coord/Parallel/ParallelCoordContext.cs index 2901f84f..1d545f90 100644 --- a/Runtime/Coord/Parallel/ParallelCoordContext.cs +++ b/Runtime/Coord/Parallel/ParallelCoordContext.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; diff --git a/Runtime/Coord/Parallel/ParallelCoordHandler.cs b/Runtime/Coord/Parallel/ParallelCoordHandler.cs index 83633611..315e4779 100644 --- a/Runtime/Coord/Parallel/ParallelCoordHandler.cs +++ b/Runtime/Coord/Parallel/ParallelCoordHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using System.Text; using UnityEngine; @@ -19,7 +18,7 @@ namespace XCharts.Runtime { var grid = component; grid.painter = chart.painter; - grid.refreshComponent = delegate () + grid.refreshComponent = delegate() { grid.UpdateRuntimeData(chart.chartX, chart.chartY, chart.chartWidth, chart.chartHeight); chart.OnCoordinateChanged(); @@ -154,10 +153,10 @@ namespace XCharts.Runtime var tempMinValue = m_SerieDimMin[i]; var tempMaxValue = m_SerieDimMax[i]; - if (tempMinValue != axis.context.minValue - || tempMaxValue != axis.context.maxValue - || m_LastInterval != axis.interval - || m_LastSplitNumber != axis.splitNumber) + if (tempMinValue != axis.context.minValue || + tempMaxValue != axis.context.maxValue || + m_LastInterval != axis.interval || + m_LastSplitNumber != axis.splitNumber) { m_LastSplitNumber = axis.splitNumber; m_LastInterval = axis.interval; diff --git a/Runtime/Coord/Polar/PolarCoord.cs b/Runtime/Coord/Polar/PolarCoord.cs index f8dc0843..b251c932 100644 --- a/Runtime/Coord/Polar/PolarCoord.cs +++ b/Runtime/Coord/Polar/PolarCoord.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -20,7 +19,6 @@ namespace XCharts.Runtime public PolarCoordContext context = new PolarCoordContext(); - /// <summary> /// Whether to show the polor component. /// |是否显示极坐标。 diff --git a/Runtime/Coord/Polar/PolarCoordContext.cs b/Runtime/Coord/Polar/PolarCoordContext.cs index 20b67c4e..035c2ca9 100644 --- a/Runtime/Coord/Polar/PolarCoordContext.cs +++ b/Runtime/Coord/Polar/PolarCoordContext.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; diff --git a/Runtime/Coord/Polar/PolarCoordHandler.cs b/Runtime/Coord/Polar/PolarCoordHandler.cs index a635dd8e..7c176a87 100644 --- a/Runtime/Coord/Polar/PolarCoordHandler.cs +++ b/Runtime/Coord/Polar/PolarCoordHandler.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; using UnityEngine.UI; @@ -24,7 +23,6 @@ namespace XCharts.Runtime DrawPolar(vh, component); } - private void DrawPolar(VertexHelper vh, PolarCoord polar) { PolarHelper.UpdatePolarCenter(polar, chart.chartPosition, chart.chartWidth, chart.chartHeight); diff --git a/Runtime/Coord/Polar/PolarHelper.cs b/Runtime/Coord/Polar/PolarHelper.cs index f0aec3a3..fa51a52a 100644 --- a/Runtime/Coord/Polar/PolarHelper.cs +++ b/Runtime/Coord/Polar/PolarHelper.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime diff --git a/Runtime/Coord/SingleAxis/SingleAxisCoord.cs b/Runtime/Coord/SingleAxis/SingleAxisCoord.cs index 051f0d8e..990ebe36 100644 --- a/Runtime/Coord/SingleAxis/SingleAxisCoord.cs +++ b/Runtime/Coord/SingleAxis/SingleAxisCoord.cs @@ -1,4 +1,3 @@ - using System; namespace XCharts.Runtime @@ -6,6 +5,5 @@ namespace XCharts.Runtime [Serializable] [ComponentHandler(null)] public class SingleAxisCoord : CoordSystem - { - } + { } } \ No newline at end of file diff --git a/Runtime/Helper/CheckHelper.cs b/Runtime/Helper/CheckHelper.cs index 65359132..8ccd886a 100644 --- a/Runtime/Helper/CheckHelper.cs +++ b/Runtime/Helper/CheckHelper.cs @@ -12,7 +12,7 @@ namespace XCharts.Runtime public static string CheckChart(BaseGraph chart) { - if (chart is BaseChart) return CheckChart((BaseChart)chart); + if (chart is BaseChart) return CheckChart((BaseChart) chart); else return string.Empty; } @@ -68,12 +68,10 @@ namespace XCharts.Runtime } private static void CheckLegend(BaseChart chart, StringBuilder sb) - { - } + { } private static void CheckGrid(BaseChart chart, StringBuilder sb) - { - } + { } private static void CheckSerie(BaseChart chart, StringBuilder sb) { @@ -121,11 +119,6 @@ namespace XCharts.Runtime if (IsColorAlphaZero(serie.lineStyle.color)) sb.AppendFormat("warning:serie {0} lineStyle->color alpha is 0\n", serie.index); } - else if (serie is Bar) - { - if (serie.barWidth == 0) - sb.AppendFormat("warning:serie {0} barWidth is 0\n", serie.index); - } else if (serie is Pie) { if (serie.radius.Length >= 2 && serie.radius[1] == 0) diff --git a/Runtime/Helper/FormatterHelper.cs b/Runtime/Helper/FormatterHelper.cs index b0d63a31..06490eb5 100644 --- a/Runtime/Helper/FormatterHelper.cs +++ b/Runtime/Helper/FormatterHelper.cs @@ -1,15 +1,14 @@ - +using System.Linq; using System.Text; using System.Text.RegularExpressions; using UnityEngine; -using System.Linq; namespace XCharts.Runtime { public static class FormatterHelper { public const string PH_NN = "\n"; - private static Regex s_Regex = new Regex(@"{([a-e|.]\d*)(:\d+(-\d+)?)?(:[c-g|x|p|r]\d*|:0\.#*)?}", RegexOptions.IgnoreCase); + private static Regex s_Regex = new Regex(@"{([a-g|.]\d*)(:\d+(-\d+)?)?(:[c-g|x|p|r]\d*|:0\.#*)?}", RegexOptions.IgnoreCase); private static Regex s_RegexSub = new Regex(@"(0\.#*)|(\d+-\d+)|(\w+)|(\.)", RegexOptions.IgnoreCase); private static Regex s_RegexN = new Regex(@"^\d+", RegexOptions.IgnoreCase); private static Regex s_RegexN_N = new Regex(@"\d+-\d+", RegexOptions.IgnoreCase); @@ -17,11 +16,16 @@ namespace XCharts.Runtime private static Regex s_RegexNewLine = new Regex(@"[\\|/]+n|</br>|<br>|<br/>", RegexOptions.IgnoreCase); private static Regex s_RegexForAxisLabel = new Regex(@"{value(:[c-g|x|p|r]\d*)?}", RegexOptions.IgnoreCase); private static Regex s_RegexSubForAxisLabel = new Regex(@"(value)|([c-g|x|p|r]\d*)", RegexOptions.IgnoreCase); - private static Regex s_RegexForSerieLabel = new Regex(@"{[a-e|\.](:[c-g|x|p|r]\d*)?}", RegexOptions.IgnoreCase); - private static Regex s_RegexSubForSerieLabel = new Regex(@"(\.)|([a-e])|([c-g|x|p|r]\d*)", RegexOptions.IgnoreCase); + private static Regex s_RegexForSerieLabel = new Regex(@"{[a-g|\.](:[c-g|x|p|r]\d*)?}", RegexOptions.IgnoreCase); + private static Regex s_RegexSubForSerieLabel = new Regex(@"(\.)|([a-g])|([c-g|x|p|r]\d*)", RegexOptions.IgnoreCase); + + public static bool NeedFormat(string content) + { + return content.IndexOf('{') >= 0; + } /// <summary> - /// 替换字符串中的通配符,支持的通配符有{.}、{a}、{b}、{c}、{d}、{e}。 + /// 替换字符串中的通配符,支持的通配符有{.}、{a}、{b}、{c}、{d}、{e}、{f}、{g}。 /// </summary> /// <param name="content">要替换的字符串</param> /// <param name="dataIndex">选中的数据项serieData索引</param> @@ -98,9 +102,14 @@ namespace XCharts.Runtime content = content.Replace(old, serieData.name); } } - else if (p == 'c' || p == 'C' || p == 'd' || p == 'D') + else if (p == 'g' || p == 'G') + { + content = content.Replace(old, ChartCached.NumberToStr(serie.dataCount, "")); + } + else if (p == 'c' || p == 'C' || p == 'd' || p == 'D' || p == 'f' || p == 'f') { var isPercent = p == 'd' || p == 'D'; + var isTotal = p == 'f' || p == 'f'; var bIndex = dataIndex; var dimensionIndex = -1; if (argsCount >= 2) @@ -133,7 +142,7 @@ namespace XCharts.Runtime if (dimensionIndex == -1) dimensionIndex = 1; if (numericFormatter == string.Empty) { - numericFormatter = SerieHelper.GetNumericFormatter(serie, serie.GetSerieData(bIndex)); + numericFormatter = SerieHelper.GetNumericFormatter(serie, serie.GetSerieData(bIndex), ""); } var value = serie.GetData(bIndex, dimensionIndex, dataZoom); if (isPercent) @@ -142,6 +151,11 @@ namespace XCharts.Runtime var percent = total == 0 ? 0 : value / serie.yTotal * 100; content = content.Replace(old, ChartCached.FloatToStr(percent, numericFormatter)); } + else if (isTotal) + { + var total = serie.GetDataTotal(dimensionIndex, serie.GetSerieData(bIndex)); + content = content.Replace(old, ChartCached.FloatToStr(total, numericFormatter)); + } else { content = content.Replace(old, ChartCached.FloatToStr(value, numericFormatter)); @@ -152,6 +166,58 @@ namespace XCharts.Runtime return foundDot; } + public static void ReplaceSerieLabelContent(ref string content, string numericFormatter, int dataCount, double value, double total, + string serieName, string category, string dataName, Color color) + { + var mc = s_RegexForSerieLabel.Matches(content); + foreach (var m in mc) + { + var old = m.ToString(); + var args = s_RegexSubForSerieLabel.Matches(old); + var argsCount = args.Count; + if (argsCount <= 0) continue; + var p = args[0].ToString().ElementAt(0); + if (argsCount >= 2) + { + numericFormatter = args[1].ToString(); + } + if (p == '.') + { + content = content.Replace(old, ChartCached.ColorToDotStr(color)); + } + else if (p == 'a' || p == 'A') + { + content = content.Replace(old, serieName); + } + else if (p == 'b' || p == 'B') + { + content = content.Replace(old, category); + } + else if (p == 'e' || p == 'E') + { + content = content.Replace(old, dataName); + } + else if (p == 'd' || p == 'D') + { + var rate = total == 0 ? 0 : value / total * 100; + content = content.Replace(old, ChartCached.NumberToStr(rate, numericFormatter)); + } + else if (p == 'c' || p == 'C') + { + content = content.Replace(old, ChartCached.NumberToStr(value, numericFormatter)); + } + else if (p == 'f' || p == 'f') + { + content = content.Replace(old, ChartCached.NumberToStr(total, numericFormatter)); + } + else if (p == 'g' || p == 'G') + { + content = content.Replace(old, ChartCached.NumberToStr(dataCount, numericFormatter)); + } + } + content = TrimAndReplaceLine(content); + } + private static char GetSerieIndex(string strType, ref int index) { index = -1; @@ -207,48 +273,5 @@ namespace XCharts.Runtime content = TrimAndReplaceLine(content); } - public static void ReplaceSerieLabelContent(ref string content, string numericFormatter, double value, double total, - string serieName, string category, string dataName, Color color) - { - var mc = s_RegexForSerieLabel.Matches(content); - foreach (var m in mc) - { - var old = m.ToString(); - var args = s_RegexSubForSerieLabel.Matches(old); - var argsCount = args.Count; - if (argsCount <= 0) continue; - var p = args[0].ToString().ElementAt(0); - if (argsCount >= 2) - { - numericFormatter = args[1].ToString(); - } - if (p == '.') - { - content = content.Replace(old, ChartCached.ColorToDotStr(color)); - } - else if (p == 'a' || p == 'A') - { - content = content.Replace(old, serieName); - } - else if (p == 'b' || p == 'B') - { - content = content.Replace(old, category); - } - else if (p == 'e' || p == 'E') - { - content = content.Replace(old, dataName); - } - else if (p == 'd' || p == 'D') - { - var rate = total == 0 ? 0 : value / total * 100; - content = content.Replace(old, ChartCached.FloatToStr(rate, numericFormatter)); - } - else if (p == 'c' || p == 'C') - { - content = content.Replace(old, ChartCached.FloatToStr(value, numericFormatter)); - } - } - content = TrimAndReplaceLine(content); - } } } \ No newline at end of file diff --git a/Runtime/Helper/SerieHelper.cs b/Runtime/Helper/SerieHelper.cs index 3f875f9b..2000726e 100644 --- a/Runtime/Helper/SerieHelper.cs +++ b/Runtime/Helper/SerieHelper.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using System.Reflection; @@ -167,9 +166,9 @@ namespace XCharts.Runtime { var count = 0; if (dimension > 0) count = dimension; - else count = serie.showDataDimension > serieData.data.Count - ? serieData.data.Count - : serie.showDataDimension; + else count = serie.showDataDimension > serieData.data.Count ? + serieData.data.Count : + serie.showDataDimension; for (int j = 0; j < count; j++) { var value = serieData.data[j]; @@ -275,7 +274,7 @@ namespace XCharts.Runtime return color; } - public static Color32 GetItemColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight) + public static Color32 GetItemColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight, bool opacity = true) { if (serie == null) return ChartConst.clearColor32; @@ -286,14 +285,14 @@ namespace XCharts.Runtime if (itemStyle == null) itemStyle = GetItemStyle(serie, serieData); - var color = ChartHelper.IsClearColor(itemStyle.color) - ? theme.GetColor(index) - : itemStyle.color; + var color = ChartHelper.IsClearColor(itemStyle.color) ? + theme.GetColor(index) : + itemStyle.color; if (highlight) color = ChartHelper.GetHighlightColor(color); - - ChartHelper.SetColorOpacity(ref color, itemStyle.opacity); + if (opacity) + ChartHelper.SetColorOpacity(ref color, itemStyle.opacity); return color; } public static Color32 GetItemColor0(Serie serie, SerieData serieData, ThemeStyle theme, bool highlight, Color32 defaultColor) @@ -307,9 +306,9 @@ namespace XCharts.Runtime if (itemStyle == null) itemStyle = GetItemStyle(serie, serieData); - var color = ChartHelper.IsClearColor(itemStyle.color0) - ? defaultColor - : itemStyle.color0; + var color = ChartHelper.IsClearColor(itemStyle.color0) ? + defaultColor : + itemStyle.color0; if (highlight) color = ChartHelper.GetHighlightColor(color); @@ -318,7 +317,7 @@ namespace XCharts.Runtime return color; } - public static Color32 GetItemToColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight) + public static Color32 GetItemToColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight, bool opacity = true) { if (serie == null) return ChartConst.clearColor32; @@ -332,15 +331,16 @@ namespace XCharts.Runtime var color = itemStyle.toColor; if (ChartHelper.IsClearColor(color)) { - color = ChartHelper.IsClearColor(itemStyle.color) - ? theme.GetColor(index) - : itemStyle.color; + color = ChartHelper.IsClearColor(itemStyle.color) ? + theme.GetColor(index) : + itemStyle.color; } if (highlight) color = ChartHelper.GetHighlightColor(color); - ChartHelper.SetColorOpacity(ref color, itemStyle.opacity); + if (opacity) + ChartHelper.SetColorOpacity(ref color, itemStyle.opacity); return color; } @@ -385,9 +385,9 @@ namespace XCharts.Runtime public static ItemStyle GetItemStyleEmphasis(Serie serie, SerieData serieData) { - if (!serie.IsPerformanceMode() && serieData != null && serieData.emphasis != null && serieData.emphasis.show) - return serieData.emphasis.itemStyle; - else if (serie.emphasis != null && serie.emphasis.show) return serie.emphasis.itemStyle; + if (!serie.IsPerformanceMode() && serieData != null && serieData.emphasisItemStyle != null && serieData.emphasisItemStyle.show) + return serieData.emphasisItemStyle; + else if (serie.emphasisItemStyle != null && serie.emphasisItemStyle.show) return serie.emphasisItemStyle; else return null; } @@ -396,9 +396,9 @@ namespace XCharts.Runtime if (serieData == null) return serie.label; if (highlight) { - if (!serie.IsPerformanceMode() && serieData.emphasis != null && serieData.emphasis.show) - return serieData.emphasis.label; - else if (serie.emphasis != null && serie.emphasis.show) return serie.emphasis.label; + if (!serie.IsPerformanceMode() && serieData.emphasisLabel != null && serieData.emphasisLabel.show) + return serieData.emphasisLabel; + else if (serie.emphasisLabel != null && serie.emphasisLabel.show) return serie.emphasisLabel; else return serie.label; } else @@ -410,9 +410,9 @@ namespace XCharts.Runtime public static LabelStyle GetSerieEmphasisLabel(Serie serie, SerieData serieData) { - if (!serie.IsPerformanceMode() && serieData.emphasis != null && serieData.emphasis.show) - return serieData.emphasis.label; - else if (serie.emphasis != null && serie.emphasis.show) return serie.emphasis.label; + if (!serie.IsPerformanceMode() && serieData.emphasisLabel != null && serieData.emphasisLabel.show) + return serieData.emphasisLabel; + else if (serie.emphasisLabel != null && serie.emphasisLabel.show) return serie.emphasisLabel; else return null; } @@ -420,9 +420,9 @@ namespace XCharts.Runtime { if (highlight) { - if (!serie.IsPerformanceMode() && serieData.emphasis != null && serieData.emphasis.show) - return serieData.emphasis.labelLine; - else if (serie.emphasis != null && serie.emphasis.show) return serie.emphasis.labelLine; + if (!serie.IsPerformanceMode() && serieData.emphasisLabelLine != null && serieData.emphasisLabelLine.show) + return serieData.emphasisLabelLine; + else if (serie.emphasisLabelLine != null && serie.emphasisLabelLine.show) return serie.emphasisLabelLine; else return serie.labelLine; } else @@ -648,8 +648,8 @@ namespace XCharts.Runtime var endValue = min + (max - min) * dataZoom.end / 100; if (endValue < startValue) endValue = startValue; - if (startValue != serie.m_FilterStartValue || endValue != serie.m_FilterEndValue - || dataZoom.minShowNum != serie.m_FilterMinShow || serie.m_NeedUpdateFilterData) + if (startValue != serie.m_FilterStartValue || endValue != serie.m_FilterEndValue || + dataZoom.minShowNum != serie.m_FilterMinShow || serie.m_NeedUpdateFilterData) { serie.m_FilterStartValue = startValue; serie.m_FilterEndValue = endValue; @@ -690,8 +690,8 @@ namespace XCharts.Runtime end = start + range; if (end > data.Count) end = data.Count; } - if (start != serie.m_FilterStart || end != serie.m_FilterEnd - || dataZoom.minShowNum != serie.m_FilterMinShow || serie.m_NeedUpdateFilterData) + if (start != serie.m_FilterStart || end != serie.m_FilterEnd || + dataZoom.minShowNum != serie.m_FilterMinShow || serie.m_NeedUpdateFilterData) { serie.m_FilterStart = start; serie.m_FilterEnd = end; @@ -733,7 +733,7 @@ namespace XCharts.Runtime switch (serie.dataSortType) { case SerieDataSortType.Ascending: - serie.context.sortedData.Sort(delegate (SerieData data1, SerieData data2) + serie.context.sortedData.Sort(delegate(SerieData data1, SerieData data2) { var value1 = data1.GetData(1); var value2 = data2.GetData(1); @@ -743,7 +743,7 @@ namespace XCharts.Runtime }); break; case SerieDataSortType.Descending: - serie.context.sortedData.Sort(delegate (SerieData data1, SerieData data2) + serie.context.sortedData.Sort(delegate(SerieData data1, SerieData data2) { var value1 = data1.GetData(1); var value2 = data2.GetData(1); diff --git a/Runtime/Helper/SerieLabelHelper.cs b/Runtime/Helper/SerieLabelHelper.cs index bcf32f48..fc189a1f 100644 --- a/Runtime/Helper/SerieLabelHelper.cs +++ b/Runtime/Helper/SerieLabelHelper.cs @@ -52,7 +52,7 @@ namespace XCharts.Runtime else { var content = serieLabel.formatter; - FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, dataValue, + FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, serie.dataCount, dataValue, dataTotal, serieName, dataName, dataName, color); return content; } @@ -166,8 +166,8 @@ namespace XCharts.Runtime var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData); var fontSize = serieLabel.textStyle.GetFontSize(theme); - var isOutside = serieLabel.position == LabelStyle.Position.Outside - || serieLabel.position == LabelStyle.Position.Default; + var isOutside = serieLabel.position == LabelStyle.Position.Outside || + serieLabel.position == LabelStyle.Position.Default; if (!serieLabel.show) return; if (!isOutside) return; if (lastCheckPos == Vector3.zero) @@ -196,8 +196,8 @@ namespace XCharts.Runtime { if (label == null || labelLine == null) return serieData.context.labelPosition; - var isOutside = label.position == LabelStyle.Position.Outside - || label.position == LabelStyle.Position.Default; + var isOutside = label.position == LabelStyle.Position.Outside || + label.position == LabelStyle.Position.Default; if (isOutside && labelLine.lineType != LabelLine.LineType.HorizontalLine) { var currAngle = serieData.context.halfAngle; diff --git a/Runtime/Helper/SeriesHelper.cs b/Runtime/Helper/SeriesHelper.cs index 8296ed8b..09be09c1 100644 --- a/Runtime/Helper/SeriesHelper.cs +++ b/Runtime/Helper/SeriesHelper.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEngine; @@ -340,9 +339,10 @@ namespace XCharts.Runtime for (int i = 0; i < series.Count; i++) { var serie = series[i]; - if ((isPolar && serie.polarIndex != axisIndex) - || (!isPolar && serie.yAxisIndex != axisIndex) - || !serie.show) continue; + if ((isPolar && serie.polarIndex != axisIndex) || + (!isPolar && serie.yAxisIndex != axisIndex) || + !serie.show) continue; + var updateDuration = serie.animation.enable?serie.animation.dataChangeDuration : 0; if (isPercentStack && SeriesHelper.IsPercentStack<Bar>(series, serie.serieName)) { if (100 > max) max = 100; @@ -363,7 +363,8 @@ namespace XCharts.Runtime } else { - var currData = data.GetData(yValue ? 1 : 0, inverse); + //var currData = data.GetData(yValue ? 1 : 0, inverse); + var currData = data.GetCurrData(yValue ? 1 : 0, updateDuration, inverse); if (!serie.IsIgnoreValue(currData)) { if (currData > max) max = currData; @@ -383,9 +384,9 @@ namespace XCharts.Runtime for (int i = 0; i < ss.Value.Count; i++) { var serie = ss.Value[i]; - if ((isPolar && serie.polarIndex != axisIndex) - || (!isPolar && serie.yAxisIndex != axisIndex) - || !serie.show) continue; + if ((isPolar && serie.polarIndex != axisIndex) || + (!isPolar && serie.yAxisIndex != axisIndex) || + !serie.show) continue; var showData = serie.GetDataList(dataZoom); if (SeriesHelper.IsPercentStack<Bar>(series, serie.stack)) { diff --git a/Runtime/I18n/Lang.cs b/Runtime/I18n/Lang.cs index 4da92071..eb62484b 100644 --- a/Runtime/I18n/Lang.cs +++ b/Runtime/I18n/Lang.cs @@ -1,7 +1,6 @@ - +using System; using System.Collections.Generic; using UnityEngine; -using System; namespace XCharts.Runtime { @@ -44,16 +43,90 @@ namespace XCharts.Runtime [Serializable] public class LangTime { - public List<string> months = new List<string>() { - "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; - public List<string> monthAbbr = new List<string>(){ - "Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; - public List<string> dayOfMonth = new List<string>() { - "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25","26","27","28","29","30","31"}; - public List<string> dayOfWeek = new List<string>() { - "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; - public List<string> dayOfWeekAbbr = new List<string>() { - "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; + public List<string> months = new List<string>() + { + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + }; + public List<string> monthAbbr = new List<string>() + { + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + }; + public List<string> dayOfMonth = new List<string>() + { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31" + }; + public List<string> dayOfWeek = new List<string>() + { + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + }; + public List<string> dayOfWeekAbbr = new List<string>() + { + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + }; } [Serializable] diff --git a/Runtime/Internal/Attributes/ListForComponentAttribute.cs b/Runtime/Internal/Attributes/ListForComponentAttribute.cs index 4267b483..52a98811 100644 --- a/Runtime/Internal/Attributes/ListForComponentAttribute.cs +++ b/Runtime/Internal/Attributes/ListForComponentAttribute.cs @@ -6,7 +6,6 @@ namespace XCharts.Runtime public sealed class ListForComponent : ListFor { public ListForComponent(Type type) : base(type) - { - } + { } } } \ No newline at end of file diff --git a/Runtime/Internal/Attributes/ListForSerieAttribute.cs b/Runtime/Internal/Attributes/ListForSerieAttribute.cs index f7a62bf8..07bcf23d 100644 --- a/Runtime/Internal/Attributes/ListForSerieAttribute.cs +++ b/Runtime/Internal/Attributes/ListForSerieAttribute.cs @@ -6,7 +6,6 @@ namespace XCharts.Runtime public sealed class ListForSerie : ListFor { public ListForSerie(Type type) : base(type) - { - } + { } } } \ No newline at end of file diff --git a/Runtime/Internal/Attributes/SerieDataExtraComponentAttribute.cs b/Runtime/Internal/Attributes/SerieDataExtraComponentAttribute.cs new file mode 100644 index 00000000..cd163795 --- /dev/null +++ b/Runtime/Internal/Attributes/SerieDataExtraComponentAttribute.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; + +namespace XCharts.Runtime +{ + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] + public sealed class SerieDataExtraComponentAttribute : Attribute + { + public readonly List<Type> types = new List<Type>(); + + public SerieDataExtraComponentAttribute() + { } + public SerieDataExtraComponentAttribute(Type type1) + { + AddType(type1); + } + public SerieDataExtraComponentAttribute(Type type1, Type type2) + { + AddType(type1); + AddType(type2); + } + public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3) + { + AddType(type1); + AddType(type2); + AddType(type3); + } + public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4) + { + AddType(type1); + AddType(type2); + AddType(type3); + AddType(type4); + } + public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5) + { + AddType(type1); + AddType(type2); + AddType(type3); + AddType(type4); + AddType(type5); + } + public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5, Type type6) + { + AddType(type1); + AddType(type2); + AddType(type3); + AddType(type4); + AddType(type5); + AddType(type6); + } + public SerieDataExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5, Type type6, Type type7) + { + AddType(type1); + AddType(type2); + AddType(type3); + AddType(type4); + AddType(type5); + AddType(type6); + AddType(type7); + } + + private void AddType(Type type) + { + if (!SerieData.extraComponentMap.ContainsKey(type)) + throw new ArgumentException("SerieData not support extra component:" + type); + types.Add(type); + } + + public bool Contains<T>() where T : ISerieExtraComponent + { + return Contains(typeof(T)); + } + + public bool Contains(Type type) + { + return types.Contains(type); + } + } +} \ No newline at end of file diff --git a/Runtime/Internal/Attributes/SerieDataExtraComponentAttribute.cs.meta b/Runtime/Internal/Attributes/SerieDataExtraComponentAttribute.cs.meta new file mode 100644 index 00000000..43120ee7 --- /dev/null +++ b/Runtime/Internal/Attributes/SerieDataExtraComponentAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a77e2e342c09c4c6b95a0094ad0fcffc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Internal/Attributes/SerieDataExtraFieldAttribute.cs b/Runtime/Internal/Attributes/SerieDataExtraFieldAttribute.cs new file mode 100644 index 00000000..12e2c3f6 --- /dev/null +++ b/Runtime/Internal/Attributes/SerieDataExtraFieldAttribute.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; + +namespace XCharts.Runtime +{ + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] + public sealed class SerieDataExtraFieldAttribute : Attribute + { + public readonly List<string> fields = new List<string>(); + + public SerieDataExtraFieldAttribute() + { } + public SerieDataExtraFieldAttribute(string field1) + { + AddFiled(field1); + } + public SerieDataExtraFieldAttribute(string field1, string field2) + { + AddFiled(field1); + AddFiled(field2); + } + public SerieDataExtraFieldAttribute(string field1, string field2, string field3) + { + AddFiled(field1); + AddFiled(field2); + AddFiled(field3); + } + public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4) + { + AddFiled(field1); + AddFiled(field2); + AddFiled(field3); + AddFiled(field4); + } + public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5) + { + AddFiled(field1); + AddFiled(field2); + AddFiled(field3); + AddFiled(field4); + AddFiled(field5); + } + public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6) + { + AddFiled(field1); + AddFiled(field2); + AddFiled(field3); + AddFiled(field4); + AddFiled(field5); + AddFiled(field6); + } + public SerieDataExtraFieldAttribute(string field1, string field2, string field3, string field4, string field5, string field6, string field7) + { + AddFiled(field1); + AddFiled(field2); + AddFiled(field3); + AddFiled(field4); + AddFiled(field5); + AddFiled(field6); + AddFiled(field7); + } + + private void AddFiled(string field) + { + if (!SerieData.extraFieldList.Contains(field)) + throw new ArgumentException("SerieData not support field:" + field); + fields.Add(field); + } + + public bool Contains(string field) + { + return fields.Contains(field); + } + } +} \ No newline at end of file diff --git a/Runtime/Internal/Attributes/SerieDataExtraFieldAttribute.cs.meta b/Runtime/Internal/Attributes/SerieDataExtraFieldAttribute.cs.meta new file mode 100644 index 00000000..216bf908 --- /dev/null +++ b/Runtime/Internal/Attributes/SerieDataExtraFieldAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8b0cc5a1c11e497abb7e32c7d14b25f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Internal/Attributes/SerieExtraComponentAttribute.cs b/Runtime/Internal/Attributes/SerieExtraComponentAttribute.cs index 77ded703..f4cb9cea 100644 --- a/Runtime/Internal/Attributes/SerieExtraComponentAttribute.cs +++ b/Runtime/Internal/Attributes/SerieExtraComponentAttribute.cs @@ -9,56 +9,62 @@ namespace XCharts.Runtime public readonly List<Type> types = new List<Type>(); public SerieExtraComponentAttribute() - { - } + { } public SerieExtraComponentAttribute(Type type1) { - types.Add(type1); + AddType(type1); } public SerieExtraComponentAttribute(Type type1, Type type2) { - types.Add(type1); - types.Add(type2); + AddType(type1); + AddType(type2); } public SerieExtraComponentAttribute(Type type1, Type type2, Type type3) { - types.Add(type1); - types.Add(type2); - types.Add(type3); + AddType(type1); + AddType(type2); + AddType(type3); } public SerieExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4) { - types.Add(type1); - types.Add(type2); - types.Add(type3); - types.Add(type4); + AddType(type1); + AddType(type2); + AddType(type3); + AddType(type4); } public SerieExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5) { - types.Add(type1); - types.Add(type2); - types.Add(type3); - types.Add(type4); - types.Add(type5); + AddType(type1); + AddType(type2); + AddType(type3); + AddType(type4); + AddType(type5); } public SerieExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5, Type type6) { - types.Add(type1); - types.Add(type2); - types.Add(type3); - types.Add(type4); - types.Add(type5); - types.Add(type6); + AddType(type1); + AddType(type2); + AddType(type3); + AddType(type4); + AddType(type5); + AddType(type6); } public SerieExtraComponentAttribute(Type type1, Type type2, Type type3, Type type4, Type type5, Type type6, Type type7) { - types.Add(type1); - types.Add(type2); - types.Add(type3); - types.Add(type4); - types.Add(type5); - types.Add(type6); - types.Add(type7); + AddType(type1); + AddType(type2); + AddType(type3); + AddType(type4); + AddType(type5); + AddType(type6); + AddType(type7); + } + + private void AddType(Type type) + { + if (!Serie.extraComponentMap.ContainsKey(type)) + throw new ArgumentException("Serie not support extra component:" + type); + types.Add(type); } public bool Contains<T>() where T : ISerieExtraComponent diff --git a/Runtime/Internal/Attributes/SerieHandlerAttribute.cs b/Runtime/Internal/Attributes/SerieHandlerAttribute.cs index f4b421b1..1bd21e73 100644 --- a/Runtime/Internal/Attributes/SerieHandlerAttribute.cs +++ b/Runtime/Internal/Attributes/SerieHandlerAttribute.cs @@ -8,7 +8,6 @@ namespace XCharts.Runtime public readonly Type handler; public readonly bool allowMultiple = true; - public SerieHandlerAttribute(Type handler) { this.handler = handler; diff --git a/Runtime/Internal/BaseChart.API.cs b/Runtime/Internal/BaseChart.API.cs index 1cba5dee..70771c55 100644 --- a/Runtime/Internal/BaseChart.API.cs +++ b/Runtime/Internal/BaseChart.API.cs @@ -1,8 +1,8 @@ -using UnityEngine; -using System.Collections.Generic; using System; -using UnityEngine.UI; +using System.Collections.Generic; +using UnityEngine; using UnityEngine.EventSystems; +using UnityEngine.UI; namespace XCharts.Runtime { @@ -100,7 +100,7 @@ namespace XCharts.Runtime /// the callback function of click bar. /// |点击柱形图柱条回调。参数:eventData, dataIndex /// </summary> - public Action<PointerEventData, int> onPointerClickBar { set { m_OnPointerClickBar = value; m_ForceOpenRaycastTarget = true; } } + public Action<PointerEventData, int> onPointerClickBar { set { m_OnPointerClickBar = value; m_ForceOpenRaycastTarget = true; } get { return m_OnPointerClickBar; } } /// <summary> /// 坐标轴变更数据索引时回调。参数:axis, dataIndex/dataValue /// </summary> @@ -142,6 +142,8 @@ namespace XCharts.Runtime serie.ResetInteract(); m_RefreshChart = true; if (m_Painter) m_Painter.Refresh(); + foreach (var painter in m_PainterList) painter.Refresh(); + if (m_PainterTop) m_PainterTop.Refresh(); } /// <summary> @@ -164,7 +166,6 @@ namespace XCharts.Runtime RefreshPainter(serie); } - /// <summary> /// Remove all series and legend data. /// |It just emptying all of serie's data without emptying the list of series. @@ -374,7 +375,7 @@ namespace XCharts.Runtime public bool IsInChart(float x, float y) { if (x < m_ChartX || x > m_ChartX + m_ChartWidth || - y < m_ChartY || y > m_ChartY + m_ChartHeight) + y < m_ChartY || y > m_ChartY + m_ChartHeight) { return false; } @@ -527,9 +528,9 @@ namespace XCharts.Runtime public Color32 GetItemColor(Serie serie, SerieData serieData, bool highlight = false) { - var colorIndex = serieData == null || !serie.useDataNameForColor - ? GetLegendRealShowNameIndex(serie.legendName) - : GetLegendRealShowNameIndex(serieData.legendName); + var colorIndex = serieData == null || !serie.useDataNameForColor ? + GetLegendRealShowNameIndex(serie.legendName) : + GetLegendRealShowNameIndex(serieData.legendName); return SerieHelper.GetItemColor(serie, serieData, m_Theme, colorIndex, highlight); } @@ -538,4 +539,4 @@ namespace XCharts.Runtime return SerieHelper.GetItemColor(serie, null, m_Theme, serie.context.colorIndex, highlight); } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/BaseChart.Component.cs b/Runtime/Internal/BaseChart.Component.cs index c5bcb874..e7ef7b3c 100644 --- a/Runtime/Internal/BaseChart.Component.cs +++ b/Runtime/Internal/BaseChart.Component.cs @@ -1,7 +1,6 @@ - -using UnityEngine; -using System.Collections.Generic; using System; +using System.Collections.Generic; +using UnityEngine; namespace XCharts.Runtime { @@ -42,7 +41,7 @@ namespace XCharts.Runtime public T AddChartComponent<T>() where T : MainComponent { - return (T)AddChartComponent(typeof(T)); + return (T) AddChartComponent(typeof(T)); } public T AddChartComponentWhenNoExist<T>() where T : MainComponent @@ -119,7 +118,7 @@ namespace XCharts.Runtime if (attrubte.handler == null) return; - var handler = (MainComponentHandler)Activator.CreateInstance(attrubte.handler); + var handler = (MainComponentHandler) Activator.CreateInstance(attrubte.handler); handler.attribute = attrubte; handler.chart = this; handler.SetComponent(component); @@ -128,13 +127,13 @@ namespace XCharts.Runtime } public bool RemoveChartComponent<T>(int index = 0) - where T : MainComponent + where T : MainComponent { return RemoveChartComponent(typeof(T), index); } public int RemoveChartComponents<T>() - where T : MainComponent + where T : MainComponent { return RemoveChartComponents(typeof(T)); } @@ -196,7 +195,7 @@ namespace XCharts.Runtime } public bool HasChartComponent<T>() - where T : MainComponent + where T : MainComponent { return HasChartComponent(typeof(T)); } @@ -256,14 +255,14 @@ namespace XCharts.Runtime } public bool TryGetChartComponent<T>(out T component, int index = 0) - where T : MainComponent + where T : MainComponent { component = null; foreach (var com in m_Components) { if (com is T && com.index == index) { - component = (T)com; + component = (T) com; return true; } } @@ -402,11 +401,11 @@ namespace XCharts.Runtime var yAxis = GetChartComponent<YAxis>(); if (yAxis.IsCategory()) { - return yAxis.GetData((int)yAxis.context.pointerValue, dataZoom); + return yAxis.GetData((int) yAxis.context.pointerValue, dataZoom); } else if (xAxis.IsCategory()) { - return xAxis.GetData((int)xAxis.context.pointerValue, dataZoom); + return xAxis.GetData((int) xAxis.context.pointerValue, dataZoom); } return null; } @@ -416,13 +415,13 @@ namespace XCharts.Runtime var yAxis = GetChartComponent<YAxis>(serie.yAxisIndex); if (yAxis.IsCategory()) { - return yAxis.GetData((int)yAxis.context.pointerValue, dataZoom); + return yAxis.GetData((int) yAxis.context.pointerValue, dataZoom); } else if (xAxis.IsCategory()) { - return xAxis.GetData((int)xAxis.context.pointerValue, dataZoom); + return xAxis.GetData((int) xAxis.context.pointerValue, dataZoom); } return null; } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/BaseChart.Custom.cs b/Runtime/Internal/BaseChart.Custom.cs index addfee3f..cbd04dad 100644 --- a/Runtime/Internal/BaseChart.Custom.cs +++ b/Runtime/Internal/BaseChart.Custom.cs @@ -1,15 +1,13 @@ - -using UnityEngine; -using System.Collections.Generic; using System; +using System.Collections.Generic; +using UnityEngine; namespace XCharts.Runtime { public partial class BaseChart { public virtual void InitAxisRuntimeData(Axis axis) - { - } + { } public virtual void GetSeriesMinMaxValue(Axis axis, int axisIndex, out double tempMinValue, out double tempMaxValue) { @@ -31,4 +29,4 @@ namespace XCharts.Runtime AxisHelper.AdjustMinMaxValue(axis, ref tempMinValue, ref tempMaxValue, true); } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/BaseChart.Draw.cs b/Runtime/Internal/BaseChart.Draw.cs index 39fc132b..f23303be 100644 --- a/Runtime/Internal/BaseChart.Draw.cs +++ b/Runtime/Internal/BaseChart.Draw.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; using XUGL; @@ -35,13 +34,13 @@ namespace XCharts.Runtime p3 = ClampInGrid(grid, p3); p4 = ClampInGrid(grid, p4); } - if (!clip || (clip && (grid.Contains(p1) && grid.Contains(p2) && grid.Contains(p3) - && grid.Contains(p4)))) + if (!clip || (clip && (grid.Contains(p1) && grid.Contains(p2) && grid.Contains(p3) && + grid.Contains(p4)))) UGL.DrawQuadrilateral(vh, p1, p2, p3, p4, startColor, toColor); } public void DrawClipPolygon(VertexHelper vh, ref Vector3 p1, ref Vector3 p2, ref Vector3 p3, ref Vector3 p4, - Color32 startColor, Color32 toColor, bool clip, GridCoord grid) + Color32 startColor, Color32 toColor, bool clip, GridCoord grid) { ClampInChart(ref p1); ClampInChart(ref p2); @@ -54,9 +53,9 @@ namespace XCharts.Runtime p3 = ClampInGrid(grid, p3); p4 = ClampInGrid(grid, p4); } - if (!clip - || (clip && (grid.Contains(p1) && grid.Contains(p2) && grid.Contains(p3) - && grid.Contains(p4)))) + if (!clip || + (clip && (grid.Contains(p1) && grid.Contains(p2) && grid.Contains(p3) && + grid.Contains(p4)))) UGL.DrawQuadrilateral(vh, p1, p2, p3, p4, startColor, toColor); } @@ -132,4 +131,4 @@ namespace XCharts.Runtime return Color32.Lerp(areaToColor, areaColor, (pos.x - grid.context.x) / grid.context.width); } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/BaseChart.Serie.cs b/Runtime/Internal/BaseChart.Serie.cs index 169d6a37..4fa95acf 100644 --- a/Runtime/Internal/BaseChart.Serie.cs +++ b/Runtime/Internal/BaseChart.Serie.cs @@ -1,8 +1,7 @@ - -using UnityEngine; -using System.Collections.Generic; using System; +using System.Collections.Generic; using System.Reflection; +using UnityEngine; namespace XCharts.Runtime { @@ -320,6 +319,38 @@ namespace XCharts.Runtime } return null; } + /// <summary> + /// Add a (time,y) data to serie. + /// |添加(time,y)数据到指定的系列中。 + /// </summary> + /// <param name="serieName"></param> + /// <param name="time"></param> + /// <param name="yValue"></param> + /// <param name="dataName"></param> + /// <param name="dataId"></param> + /// <returns></returns> + public SerieData AddData(string serieName, DateTime time, double yValue, string dataName = null, string dataId = null) + { + var xValue = DateTimeUtil.GetTimestamp(time); + return AddData(serieName, xValue, yValue, dataName, dataId); + } + + /// <summary> + /// Add a (time,y) data to serie. + /// |添加(time,y)数据到指定的系列中。 + /// </summary> + /// <param name="serieIndex"></param> + /// <param name="time"></param> + /// <param name="yValue"></param> + /// <param name="dataName"></param> + /// <param name="dataId"></param> + /// <returns></returns> + public SerieData AddData(int serieIndex, DateTime time, double yValue, string dataName = null, string dataId = null) + { + var xValue = DateTimeUtil.GetTimestamp(time); + return AddData(serieIndex, xValue, yValue, dataName, dataId); + } + public SerieData AddData(int serieIndex, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null) { var serie = GetSerie(serieIndex); @@ -710,9 +741,30 @@ namespace XCharts.Runtime return total; } + public int GetSerieBarRealCount<T>() where T : Serie + { + var count = 0; + barStackSet.Clear(); + for (int i = 0; i < m_Series.Count; i++) + { + var serie = m_Series[i]; + if (!serie.show) continue; + if (serie is T) + { + if (!string.IsNullOrEmpty(serie.stack)) + { + if (barStackSet.Contains(serie.stack)) continue; + barStackSet.Add(serie.stack); + } + count++; + + } + } + return count; + } private HashSet<string> barStackSet = new HashSet<string>(); - public float GetSerieTotalWidth<T>(float categoryWidth, float gap) where T : Serie + public float GetSerieTotalWidth<T>(float categoryWidth, float gap, int realBarCount) where T : Serie { float total = 0; float lastGap = 0; @@ -728,14 +780,14 @@ namespace XCharts.Runtime if (barStackSet.Contains(serie.stack)) continue; barStackSet.Add(serie.stack); } - var width = GetStackBarWidth<T>(categoryWidth, serie); + var width = GetStackBarWidth<T>(categoryWidth, serie, realBarCount); if (gap == -1) { if (width > total) total = width; } else { - lastGap = width * gap; + lastGap = ChartHelper.GetActualValue(gap, width); total += width; total += lastGap; } @@ -745,21 +797,65 @@ namespace XCharts.Runtime return total; } - private float GetStackBarWidth<T>(float categoryWidth, Serie now) where T : Serie + public float GetSerieTotalGap<T>(float categoryWidth, float gap, int index) where T : Serie { - if (string.IsNullOrEmpty(now.stack)) return now.GetBarWidth(categoryWidth); + if (index <= 0) return 0; + float total = 0; + barStackSet.Clear(); + var count = 0; + var totalRealBarCount = GetSerieBarRealCount<T>(); + for (int i = 0; i < m_Series.Count; i++) + { + var serie = m_Series[i]; + if (!serie.show) continue; + if (serie is T) + { + if (!string.IsNullOrEmpty(serie.stack)) + { + if (barStackSet.Contains(serie.stack)) continue; + barStackSet.Add(serie.stack); + } + var width = GetStackBarWidth<T>(categoryWidth, serie, totalRealBarCount); + if (gap == -1) + { + if (width > total) total = width; + } + else + { + total += width + ChartHelper.GetActualValue(gap, width); + } + if (count + 1 >= index) + break; + else + count++; + } + } + return total; + } + + private float GetStackBarWidth<T>(float categoryWidth, Serie now, int realBarCount) where T : Serie + { + if (string.IsNullOrEmpty(now.stack)) return now.GetBarWidth(categoryWidth, realBarCount); float barWidth = 0; for (int i = 0; i < m_Series.Count; i++) { var serie = m_Series[i]; - if ((serie is T) - && serie.show && now.stack.Equals(serie.stack)) + if ((serie is T) && + serie.show && now.stack.Equals(serie.stack)) { if (serie.barWidth > barWidth) barWidth = serie.barWidth; } } - if (barWidth > 1) return barWidth; - else return barWidth * categoryWidth; + if (barWidth == 0) + { + var width = ChartHelper.GetActualValue(0.6f, categoryWidth); + if (realBarCount == 0) + return width < 1 ? categoryWidth : width; + else + return width / realBarCount; + } + else + return ChartHelper.GetActualValue(barWidth, categoryWidth); } private List<string> tempList = new List<string>(); @@ -816,7 +912,7 @@ namespace XCharts.Runtime return; } var attribute = serie.GetType().GetAttribute<SerieHandlerAttribute>(); - var handler = (SerieHandler)Activator.CreateInstance(attribute.handler); + var handler = (SerieHandler) Activator.CreateInstance(attribute.handler); handler.attribute = attribute; handler.chart = this; handler.defaultDimension = 1; @@ -886,4 +982,4 @@ namespace XCharts.Runtime return false; } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/BaseChart.cs b/Runtime/Internal/BaseChart.cs index d0b29106..50b44db5 100644 --- a/Runtime/Internal/BaseChart.cs +++ b/Runtime/Internal/BaseChart.cs @@ -1,11 +1,10 @@ - -using UnityEngine; -using UnityEngine.UI; -using System.Collections.Generic; using System; -using UnityEngine.EventSystems; -using XUGL; +using System.Collections.Generic; using System.Reflection; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; +using XUGL; namespace XCharts.Runtime { @@ -20,38 +19,39 @@ namespace XCharts.Runtime [SerializeField] protected Settings m_Settings; #pragma warning disable 0414 - [SerializeField] [ListForComponent(typeof(AngleAxis))] private List<AngleAxis> m_AngleAxes = new List<AngleAxis>(); - [SerializeField] [ListForComponent(typeof(Background))] private List<Background> m_Backgrounds = new List<Background>(); - [SerializeField] [ListForComponent(typeof(DataZoom))] private List<DataZoom> m_DataZooms = new List<DataZoom>(); - [SerializeField] [ListForComponent(typeof(GridCoord))] private List<GridCoord> m_Grids = new List<GridCoord>(); - [SerializeField] [ListForComponent(typeof(Legend))] private List<Legend> m_Legends = new List<Legend>(); - [SerializeField] [ListForComponent(typeof(MarkLine))] private List<MarkLine> m_MarkLines = new List<MarkLine>(); - [SerializeField] [ListForComponent(typeof(MarkArea))] private List<MarkArea> m_MarkAreas = new List<MarkArea>(); - [SerializeField] [ListForComponent(typeof(PolarCoord))] private List<PolarCoord> m_Polars = new List<PolarCoord>(); - [SerializeField] [ListForComponent(typeof(RadarCoord))] private List<RadarCoord> m_Radars = new List<RadarCoord>(); - [SerializeField] [ListForComponent(typeof(RadiusAxis))] private List<RadiusAxis> m_RadiusAxes = new List<RadiusAxis>(); - [SerializeField] [ListForComponent(typeof(Title))] private List<Title> m_Titles = new List<Title>(); - [SerializeField] [ListForComponent(typeof(Tooltip))] private List<Tooltip> m_Tooltips = new List<Tooltip>(); - [SerializeField] [ListForComponent(typeof(VisualMap))] private List<VisualMap> m_VisualMaps = new List<VisualMap>(); - [SerializeField] [ListForComponent(typeof(XAxis))] private List<XAxis> m_XAxes = new List<XAxis>(); - [SerializeField] [ListForComponent(typeof(YAxis))] private List<YAxis> m_YAxes = new List<YAxis>(); - [SerializeField] [ListForComponent(typeof(SingleAxis))] private List<SingleAxis> m_SingleAxes = new List<SingleAxis>(); - [SerializeField] [ListForComponent(typeof(ParallelCoord))] private List<ParallelCoord> m_Parallels = new List<ParallelCoord>(); - [SerializeField] [ListForComponent(typeof(ParallelAxis))] private List<ParallelAxis> m_ParallelAxes = new List<ParallelAxis>(); + [SerializeField][ListForComponent(typeof(AngleAxis))] private List<AngleAxis> m_AngleAxes = new List<AngleAxis>(); + [SerializeField][ListForComponent(typeof(Background))] private List<Background> m_Backgrounds = new List<Background>(); + [SerializeField][ListForComponent(typeof(DataZoom))] private List<DataZoom> m_DataZooms = new List<DataZoom>(); + [SerializeField][ListForComponent(typeof(GridCoord))] private List<GridCoord> m_Grids = new List<GridCoord>(); + [SerializeField][ListForComponent(typeof(Legend))] private List<Legend> m_Legends = new List<Legend>(); + [SerializeField][ListForComponent(typeof(MarkLine))] private List<MarkLine> m_MarkLines = new List<MarkLine>(); + [SerializeField][ListForComponent(typeof(MarkArea))] private List<MarkArea> m_MarkAreas = new List<MarkArea>(); + [SerializeField][ListForComponent(typeof(PolarCoord))] private List<PolarCoord> m_Polars = new List<PolarCoord>(); + [SerializeField][ListForComponent(typeof(RadarCoord))] private List<RadarCoord> m_Radars = new List<RadarCoord>(); + [SerializeField][ListForComponent(typeof(RadiusAxis))] private List<RadiusAxis> m_RadiusAxes = new List<RadiusAxis>(); + [SerializeField][ListForComponent(typeof(Title))] private List<Title> m_Titles = new List<Title>(); + [SerializeField][ListForComponent(typeof(Tooltip))] private List<Tooltip> m_Tooltips = new List<Tooltip>(); + [SerializeField][ListForComponent(typeof(VisualMap))] private List<VisualMap> m_VisualMaps = new List<VisualMap>(); + [SerializeField][ListForComponent(typeof(XAxis))] private List<XAxis> m_XAxes = new List<XAxis>(); + [SerializeField][ListForComponent(typeof(YAxis))] private List<YAxis> m_YAxes = new List<YAxis>(); + [SerializeField][ListForComponent(typeof(SingleAxis))] private List<SingleAxis> m_SingleAxes = new List<SingleAxis>(); + [SerializeField][ListForComponent(typeof(ParallelCoord))] private List<ParallelCoord> m_Parallels = new List<ParallelCoord>(); + [SerializeField][ListForComponent(typeof(ParallelAxis))] private List<ParallelAxis> m_ParallelAxes = new List<ParallelAxis>(); + [SerializeField][ListForComponent(typeof(Comment))] private List<Comment> m_Comments = new List<Comment>(); - [SerializeField] [ListForSerie(typeof(Bar))] private List<Bar> m_SerieBars = new List<Bar>(); - [SerializeField] [ListForSerie(typeof(Candlestick))] private List<Candlestick> m_SerieCandlesticks = new List<Candlestick>(); - [SerializeField] [ListForSerie(typeof(EffectScatter))] private List<EffectScatter> m_SerieEffectScatters = new List<EffectScatter>(); - [SerializeField] [ListForSerie(typeof(Heatmap))] private List<Heatmap> m_SerieHeatmaps = new List<Heatmap>(); - [SerializeField] [ListForSerie(typeof(Line))] private List<Line> m_SerieLines = new List<Line>(); - [SerializeField] [ListForSerie(typeof(Pie))] private List<Pie> m_SeriePies = new List<Pie>(); - [SerializeField] [ListForSerie(typeof(Radar))] private List<Radar> m_SerieRadars = new List<Radar>(); - [SerializeField] [ListForSerie(typeof(Ring))] private List<Ring> m_SerieRings = new List<Ring>(); - [SerializeField] [ListForSerie(typeof(Scatter))] private List<Scatter> m_SerieScatters = new List<Scatter>(); - [SerializeField] [ListForSerie(typeof(Parallel))] private List<Parallel> m_SerieParallels = new List<Parallel>(); - [SerializeField] [ListForSerie(typeof(SimplifiedLine))] private List<SimplifiedLine> m_SerieSimplifiedLines = new List<SimplifiedLine>(); - [SerializeField] [ListForSerie(typeof(SimplifiedBar))] private List<SimplifiedBar> m_SerieSimplifiedBars = new List<SimplifiedBar>(); - [SerializeField] [ListForSerie(typeof(SimplifiedCandlestick))] private List<SimplifiedCandlestick> m_SerieSimplifiedCandlesticks = new List<SimplifiedCandlestick>(); + [SerializeField][ListForSerie(typeof(Bar))] private List<Bar> m_SerieBars = new List<Bar>(); + [SerializeField][ListForSerie(typeof(Candlestick))] private List<Candlestick> m_SerieCandlesticks = new List<Candlestick>(); + [SerializeField][ListForSerie(typeof(EffectScatter))] private List<EffectScatter> m_SerieEffectScatters = new List<EffectScatter>(); + [SerializeField][ListForSerie(typeof(Heatmap))] private List<Heatmap> m_SerieHeatmaps = new List<Heatmap>(); + [SerializeField][ListForSerie(typeof(Line))] private List<Line> m_SerieLines = new List<Line>(); + [SerializeField][ListForSerie(typeof(Pie))] private List<Pie> m_SeriePies = new List<Pie>(); + [SerializeField][ListForSerie(typeof(Radar))] private List<Radar> m_SerieRadars = new List<Radar>(); + [SerializeField][ListForSerie(typeof(Ring))] private List<Ring> m_SerieRings = new List<Ring>(); + [SerializeField][ListForSerie(typeof(Scatter))] private List<Scatter> m_SerieScatters = new List<Scatter>(); + [SerializeField][ListForSerie(typeof(Parallel))] private List<Parallel> m_SerieParallels = new List<Parallel>(); + [SerializeField][ListForSerie(typeof(SimplifiedLine))] private List<SimplifiedLine> m_SerieSimplifiedLines = new List<SimplifiedLine>(); + [SerializeField][ListForSerie(typeof(SimplifiedBar))] private List<SimplifiedBar> m_SerieSimplifiedBars = new List<SimplifiedBar>(); + [SerializeField][ListForSerie(typeof(SimplifiedCandlestick))] private List<SimplifiedCandlestick> m_SerieSimplifiedCandlesticks = new List<SimplifiedCandlestick>(); #pragma warning restore 0414 protected List<Serie> m_Series = new List<Serie>(); protected List<MainComponent> m_Components = new List<MainComponent>(); @@ -67,7 +67,6 @@ namespace XCharts.Runtime public List<Serie> series { get { return m_Series; } } - protected float m_ChartWidth; protected float m_ChartHeight; protected float m_ChartX; @@ -101,14 +100,11 @@ namespace XCharts.Runtime internal int m_BasePainterVertCount; internal int m_TopPainterVertCount; - private ThemeType m_CheckTheme = 0; protected List<MainComponentHandler> m_ComponentHandlers = new List<MainComponentHandler>(); protected List<SerieHandler> m_SerieHandlers = new List<SerieHandler>(); - protected virtual void DefaultChart() - { - } + protected virtual void DefaultChart() { } protected override void InitComponent() { @@ -333,7 +329,7 @@ namespace XCharts.Runtime m_PainterList.Add(painter); } m_PainterTop = ChartHelper.AddPainterObject("painter_t", transform, m_GraphMinAnchor, - m_GraphMaxAnchor, m_GraphPivot, sizeDelta, chartHideFlags, 2 + settings.maxPainter); + m_GraphMaxAnchor, m_GraphPivot, sizeDelta, chartHideFlags, 2 + settings.maxPainter); m_PainterTop.type = Painter.Type.Top; m_PainterTop.onPopulateMesh = OnDrawPainterTop; m_PainterTop.SetActive(true, m_DebugInfo.showAllChartObject); @@ -406,6 +402,11 @@ namespace XCharts.Runtime RefreshChart(); } + internal virtual void OnSerieDataUpdate(int serieIndex) + { + foreach (var handler in m_ComponentHandlers) handler.OnSerieDataUpdate(serieIndex); + } + internal virtual void OnCoordinateChanged() { foreach (var component in m_Components) @@ -424,9 +425,7 @@ namespace XCharts.Runtime background.SetAllDirty(); } - protected virtual void OnThemeChanged() - { - } + protected virtual void OnThemeChanged() { } public virtual void OnDataZoomRangeChanged(DataZoom dataZoom) { @@ -587,9 +586,7 @@ namespace XCharts.Runtime m_TopPainterVertCount = vh.currentVertCount; } - protected virtual void DrawPainterSerie(VertexHelper vh, Serie serie) - { - } + protected virtual void DrawPainterSerie(VertexHelper vh, Serie serie) { } protected virtual void DrawPainterTop(VertexHelper vh) { @@ -698,4 +695,4 @@ namespace XCharts.Runtime InitSerieHandlers(); } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/BaseGraph.API.cs b/Runtime/Internal/BaseGraph.API.cs index cf4601d3..a9290229 100644 --- a/Runtime/Internal/BaseGraph.API.cs +++ b/Runtime/Internal/BaseGraph.API.cs @@ -1,6 +1,5 @@ - -using UnityEngine; using System; +using UnityEngine; using UnityEngine.EventSystems; namespace XCharts.Runtime @@ -155,16 +154,16 @@ namespace XCharts.Runtime { #if UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX var relative = Display.RelativeMouseAt(screenPoint); - if(relative != Vector3.zero) + if (relative != Vector3.zero) screenPoint = relative; #endif var cam = canvas.renderMode == RenderMode.ScreenSpaceOverlay ? null : canvas.worldCamera; if (!RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, - screenPoint, cam, out chartPoint)) + screenPoint, cam, out chartPoint)) { return false; } return true; } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/BaseGraph.cs b/Runtime/Internal/BaseGraph.cs index e93b7e18..28b212dc 100644 --- a/Runtime/Internal/BaseGraph.cs +++ b/Runtime/Internal/BaseGraph.cs @@ -1,8 +1,7 @@ - -using UnityEngine; -using UnityEngine.UI; using System; +using UnityEngine; using UnityEngine.EventSystems; +using UnityEngine.UI; namespace XCharts.Runtime { @@ -10,315 +9,310 @@ namespace XCharts.Runtime public partial class BaseGraph : MaskableGraphic, IPointerDownHandler, IPointerUpHandler, IPointerEnterHandler, IPointerExitHandler, IBeginDragHandler, IPointerClickHandler, IDragHandler, IEndDragHandler, IScrollHandler - { - - [SerializeField] protected bool m_EnableTextMeshPro = false; - [SerializeField] protected DebugInfo m_DebugInfo = new DebugInfo(); - - protected Painter m_Painter; - protected int m_SiblingIndex; - - protected float m_GraphWidth; - protected float m_GraphHeight; - protected float m_GraphX; - protected float m_GraphY; - protected Vector3 m_GraphPosition = Vector3.zero; - protected Vector2 m_GraphMinAnchor; - protected Vector2 m_GraphMaxAnchor; - protected Vector2 m_GraphPivot; - protected Vector2 m_GraphSizeDelta; - protected Vector2 m_GraphAnchoredPosition; - protected Rect m_GraphRect = new Rect(0, 0, 0, 0); - protected bool m_RefreshChart = false; - protected bool m_ForceOpenRaycastTarget; - protected bool m_IsControlledByLayout = false; - protected bool m_PainerDirty = false; - protected bool m_IsOnValidate = false; - protected Vector3 m_LastLocalPosition; - - protected Action<PointerEventData, BaseGraph> m_OnPointerClick; - protected Action<PointerEventData, BaseGraph> m_OnPointerDown; - protected Action<PointerEventData, BaseGraph> m_OnPointerUp; - protected Action<PointerEventData, BaseGraph> m_OnPointerEnter; - protected Action<PointerEventData, BaseGraph> m_OnPointerExit; - protected Action<PointerEventData, BaseGraph> m_OnBeginDrag; - protected Action<PointerEventData, BaseGraph> m_OnDrag; - protected Action<PointerEventData, BaseGraph> m_OnEndDrag; - protected Action<PointerEventData, BaseGraph> m_OnScroll; - - protected Vector2 graphAnchorMax { get { return m_GraphMinAnchor; } } - protected Vector2 graphAnchorMin { get { return m_GraphMaxAnchor; } } - protected Vector2 graphPivot { get { return m_GraphPivot; } } - public HideFlags chartHideFlags { get { return m_DebugInfo.showAllChartObject ? HideFlags.None : HideFlags.HideInHierarchy; } } - public DebugInfo debug { get { return m_DebugInfo; } } - private ScrollRect m_ScrollRect; - - public Painter painter { get { return m_Painter; } } - - protected virtual void InitComponent() { - InitPainter(); - } - protected override void Awake() - { - CheckTextMeshPro(); - m_SiblingIndex = 0; - m_LastLocalPosition = transform.localPosition; - UpdateSize(); - InitComponent(); - CheckIsInScrollRect(); - } + [SerializeField] protected bool m_EnableTextMeshPro = false; + [SerializeField] protected DebugInfo m_DebugInfo = new DebugInfo(); - protected override void Start() - { - m_RefreshChart = true; - } + protected Painter m_Painter; + protected int m_SiblingIndex; - protected virtual void Update() - { - CheckSize(); - if (m_IsOnValidate) + protected float m_GraphWidth; + protected float m_GraphHeight; + protected float m_GraphX; + protected float m_GraphY; + protected Vector3 m_GraphPosition = Vector3.zero; + protected Vector2 m_GraphMinAnchor; + protected Vector2 m_GraphMaxAnchor; + protected Vector2 m_GraphPivot; + protected Vector2 m_GraphSizeDelta; + protected Vector2 m_GraphAnchoredPosition; + protected Rect m_GraphRect = new Rect(0, 0, 0, 0); + protected bool m_RefreshChart = false; + protected bool m_ForceOpenRaycastTarget; + protected bool m_IsControlledByLayout = false; + protected bool m_PainerDirty = false; + protected bool m_IsOnValidate = false; + protected Vector3 m_LastLocalPosition; + + protected Action<PointerEventData, BaseGraph> m_OnPointerClick; + protected Action<PointerEventData, BaseGraph> m_OnPointerDown; + protected Action<PointerEventData, BaseGraph> m_OnPointerUp; + protected Action<PointerEventData, BaseGraph> m_OnPointerEnter; + protected Action<PointerEventData, BaseGraph> m_OnPointerExit; + protected Action<PointerEventData, BaseGraph> m_OnBeginDrag; + protected Action<PointerEventData, BaseGraph> m_OnDrag; + protected Action<PointerEventData, BaseGraph> m_OnEndDrag; + protected Action<PointerEventData, BaseGraph> m_OnScroll; + + protected Vector2 graphAnchorMax { get { return m_GraphMinAnchor; } } + protected Vector2 graphAnchorMin { get { return m_GraphMaxAnchor; } } + protected Vector2 graphPivot { get { return m_GraphPivot; } } + public HideFlags chartHideFlags { get { return m_DebugInfo.showAllChartObject ? HideFlags.None : HideFlags.HideInHierarchy; } } + public DebugInfo debug { get { return m_DebugInfo; } } + private ScrollRect m_ScrollRect; + + public Painter painter { get { return m_Painter; } } + + protected virtual void InitComponent() + { + InitPainter(); + } + + protected override void Awake() { - m_IsOnValidate = false; - m_RefreshChart = true; CheckTextMeshPro(); + m_SiblingIndex = 0; + m_LastLocalPosition = transform.localPosition; + UpdateSize(); InitComponent(); + CheckIsInScrollRect(); } - else - { - CheckComponent(); - } - CheckPointerPos(); - CheckRefreshChart(); - CheckRefreshPainter(); - } - protected virtual void SetAllComponentDirty() - { + protected override void Start() + { + m_RefreshChart = true; + } + + protected virtual void Update() + { + CheckSize(); + if (m_IsOnValidate) + { + m_IsOnValidate = false; + m_RefreshChart = true; + CheckTextMeshPro(); + InitComponent(); + } + else + { + CheckComponent(); + } + CheckPointerPos(); + CheckRefreshChart(); + CheckRefreshPainter(); + } + + protected virtual void SetAllComponentDirty() + { #if UNITY_EDITOR - if (!Application.isPlaying) + if (!Application.isPlaying) + { + m_IsOnValidate = true; + } +#endif + m_PainerDirty = true; + } + + protected virtual void CheckComponent() + { + if (m_PainerDirty) + { + InitPainter(); + m_PainerDirty = false; + } + } + + private void CheckTextMeshPro() + { +#if dUI_TextMeshPro + var enableTextMeshPro = true; +#else + var enableTextMeshPro = false; +#endif + if (m_EnableTextMeshPro != enableTextMeshPro) + { + m_EnableTextMeshPro = enableTextMeshPro; + RebuildChartObject(); + } + } + +#if UNITY_EDITOR + protected override void Reset() + { } + + protected override void OnValidate() { m_IsOnValidate = true; } #endif - m_PainerDirty = true; - } - protected virtual void CheckComponent() - { - if (m_PainerDirty) + protected override void OnDestroy() { - InitPainter(); - m_PainerDirty = false; + for (int i = transform.childCount - 1; i >= 0; i--) + { + DestroyImmediate(transform.GetChild(i).gameObject); + } } - } - private void CheckTextMeshPro() - { -#if dUI_TextMeshPro - var enableTextMeshPro = true; -#else - var enableTextMeshPro = false; -#endif - if (m_EnableTextMeshPro != enableTextMeshPro) + protected override void OnPopulateMesh(VertexHelper vh) { - m_EnableTextMeshPro = enableTextMeshPro; - RebuildChartObject(); + vh.Clear(); } - } - - -#if UNITY_EDITOR - protected override void Reset() - { - } - - protected override void OnValidate() - { - m_IsOnValidate = true; - } -#endif - - protected override void OnDestroy() - { - for (int i = transform.childCount - 1; i >= 0; i--) + protected virtual void InitPainter() { - DestroyImmediate(transform.GetChild(i).gameObject); - } - } - - protected override void OnPopulateMesh(VertexHelper vh) - { - vh.Clear(); - } - - protected virtual void InitPainter() - { - m_Painter = ChartHelper.AddPainterObject("painter_b", transform, m_GraphMinAnchor, + m_Painter = ChartHelper.AddPainterObject("painter_b", transform, m_GraphMinAnchor, m_GraphMaxAnchor, m_GraphPivot, new Vector2(m_GraphWidth, m_GraphHeight), chartHideFlags, 1); - m_Painter.type = Painter.Type.Base; - m_Painter.onPopulateMesh = OnDrawPainterBase; - m_Painter.transform.SetSiblingIndex(0); - } - - private void CheckSize() - { - var currWidth = rectTransform.rect.width; - var currHeight = rectTransform.rect.height; - - if (m_GraphWidth == 0 && m_GraphHeight == 0 && (currWidth != 0 || currHeight != 0)) - { - Awake(); + m_Painter.type = Painter.Type.Base; + m_Painter.onPopulateMesh = OnDrawPainterBase; + m_Painter.transform.SetSiblingIndex(0); } - if (m_GraphWidth != currWidth - || m_GraphHeight != currHeight - || m_GraphMinAnchor != rectTransform.anchorMin - || m_GraphMaxAnchor != rectTransform.anchorMax - || m_GraphAnchoredPosition != rectTransform.anchoredPosition) + private void CheckSize() { - UpdateSize(); + var currWidth = rectTransform.rect.width; + var currHeight = rectTransform.rect.height; + + if (m_GraphWidth == 0 && m_GraphHeight == 0 && (currWidth != 0 || currHeight != 0)) + { + Awake(); + } + + if (m_GraphWidth != currWidth || + m_GraphHeight != currHeight || + m_GraphMinAnchor != rectTransform.anchorMin || + m_GraphMaxAnchor != rectTransform.anchorMax || + m_GraphAnchoredPosition != rectTransform.anchoredPosition) + { + UpdateSize(); + } + if (!ChartHelper.IsValueEqualsVector3(m_LastLocalPosition, transform.localPosition)) + { + m_LastLocalPosition = transform.localPosition; + OnLocalPositionChanged(); + } } - if (!ChartHelper.IsValueEqualsVector3(m_LastLocalPosition, transform.localPosition)) + + protected void UpdateSize() { - m_LastLocalPosition = transform.localPosition; - OnLocalPositionChanged(); + m_GraphWidth = rectTransform.rect.width; + m_GraphHeight = rectTransform.rect.height; + + m_GraphMaxAnchor = rectTransform.anchorMax; + m_GraphMinAnchor = rectTransform.anchorMin; + m_GraphSizeDelta = rectTransform.sizeDelta; + m_GraphAnchoredPosition = rectTransform.anchoredPosition; + + rectTransform.pivot = LayerHelper.ResetChartPositionAndPivot(m_GraphMinAnchor, m_GraphMaxAnchor, + m_GraphWidth, m_GraphHeight, ref m_GraphX, ref m_GraphY); + m_GraphPivot = rectTransform.pivot; + + m_GraphRect.x = m_GraphX; + m_GraphRect.y = m_GraphY; + m_GraphRect.width = m_GraphWidth; + m_GraphRect.height = m_GraphHeight; + m_GraphPosition.x = m_GraphX; + m_GraphPosition.y = m_GraphY; + + OnSizeChanged(); + } + + private void CheckPointerPos() + { + if (!isPointerInChart) return; + if (canvas == null) return; + Vector2 local; + if (!ScreenPointToChartPoint(Input.mousePosition, out local)) + { + pointerPos = Vector2.zero; + } + else + { + pointerPos = local; + } + } + + protected virtual void CheckIsInScrollRect() + { + m_ScrollRect = GetComponentInParent<ScrollRect>(); + } + + protected virtual void CheckRefreshChart() + { + if (m_RefreshChart) + { + m_Painter.Refresh(); + m_RefreshChart = false; + } + } + + protected virtual void CheckRefreshPainter() + { + m_Painter.CheckRefresh(); + } + + internal virtual void RefreshPainter(Painter painter) + { + if (painter == null) return; + painter.Refresh(); + } + + protected virtual void OnSizeChanged() + { + m_RefreshChart = true; + } + + protected virtual void OnLocalPositionChanged() + { } + + protected virtual void OnDrawPainterBase(VertexHelper vh, Painter painter) + { + DrawPainterBase(vh); + } + + protected virtual void DrawPainterBase(VertexHelper vh) + { } + + public virtual void OnPointerClick(PointerEventData eventData) + { + if (m_OnPointerClick != null) m_OnPointerClick(eventData, this); + } + + public virtual void OnPointerDown(PointerEventData eventData) + { + if (m_OnPointerDown != null) m_OnPointerDown(eventData, this); + } + + public virtual void OnPointerUp(PointerEventData eventData) + { + if (m_OnPointerUp != null) m_OnPointerUp(eventData, this); + } + + public virtual void OnPointerEnter(PointerEventData eventData) + { + isPointerInChart = true; + if (m_OnPointerEnter != null) m_OnPointerEnter(eventData, this); + } + + public virtual void OnPointerExit(PointerEventData eventData) + { + isPointerInChart = false; + if (m_OnPointerExit != null) m_OnPointerExit(eventData, this); + } + + public virtual void OnBeginDrag(PointerEventData eventData) + { + if (m_ScrollRect != null) m_ScrollRect.OnBeginDrag(eventData); + if (m_OnBeginDrag != null) m_OnBeginDrag(eventData, this); + } + + public virtual void OnEndDrag(PointerEventData eventData) + { + if (m_ScrollRect != null) m_ScrollRect.OnEndDrag(eventData); + if (m_OnEndDrag != null) m_OnEndDrag(eventData, this); + } + + public virtual void OnDrag(PointerEventData eventData) + { + if (m_ScrollRect != null) m_ScrollRect.OnDrag(eventData); + if (m_OnDrag != null) m_OnDrag(eventData, this); + } + + public virtual void OnScroll(PointerEventData eventData) + { + if (m_ScrollRect != null) m_ScrollRect.OnScroll(eventData); + if (m_OnScroll != null) m_OnScroll(eventData, this); } } - - protected void UpdateSize() - { - m_GraphWidth = rectTransform.rect.width; - m_GraphHeight = rectTransform.rect.height; - - m_GraphMaxAnchor = rectTransform.anchorMax; - m_GraphMinAnchor = rectTransform.anchorMin; - m_GraphSizeDelta = rectTransform.sizeDelta; - m_GraphAnchoredPosition = rectTransform.anchoredPosition; - - rectTransform.pivot = LayerHelper.ResetChartPositionAndPivot(m_GraphMinAnchor, m_GraphMaxAnchor, - m_GraphWidth, m_GraphHeight, ref m_GraphX, ref m_GraphY); - m_GraphPivot = rectTransform.pivot; - - m_GraphRect.x = m_GraphX; - m_GraphRect.y = m_GraphY; - m_GraphRect.width = m_GraphWidth; - m_GraphRect.height = m_GraphHeight; - m_GraphPosition.x = m_GraphX; - m_GraphPosition.y = m_GraphY; - - OnSizeChanged(); - } - - private void CheckPointerPos() - { - if (!isPointerInChart) return; - if (canvas == null) return; - Vector2 local; - if (!ScreenPointToChartPoint(Input.mousePosition, out local)) - { - pointerPos = Vector2.zero; - } - else - { - pointerPos = local; - } - } - - protected virtual void CheckIsInScrollRect() - { - m_ScrollRect = GetComponentInParent<ScrollRect>(); - } - - protected virtual void CheckRefreshChart() - { - if (m_RefreshChart) - { - m_Painter.Refresh(); - m_RefreshChart = false; - } - } - - protected virtual void CheckRefreshPainter() - { - m_Painter.CheckRefresh(); - } - - internal virtual void RefreshPainter(Painter painter) - { - if (painter == null) return; - painter.Refresh(); - } - - protected virtual void OnSizeChanged() - { - m_RefreshChart = true; - } - - protected virtual void OnLocalPositionChanged() - { - } - - protected virtual void OnDrawPainterBase(VertexHelper vh, Painter painter) - { - DrawPainterBase(vh); - } - - protected virtual void DrawPainterBase(VertexHelper vh) - { - } - - public virtual void OnPointerClick(PointerEventData eventData) - { - if (m_OnPointerClick != null) m_OnPointerClick(eventData, this); - } - - public virtual void OnPointerDown(PointerEventData eventData) - { - if (m_OnPointerDown != null) m_OnPointerDown(eventData, this); - } - - public virtual void OnPointerUp(PointerEventData eventData) - { - if (m_OnPointerUp != null) m_OnPointerUp(eventData, this); - } - - public virtual void OnPointerEnter(PointerEventData eventData) - { - isPointerInChart = true; - if (m_OnPointerEnter != null) m_OnPointerEnter(eventData, this); - } - - public virtual void OnPointerExit(PointerEventData eventData) - { - isPointerInChart = false; - if (m_OnPointerExit != null) m_OnPointerExit(eventData, this); - } - - public virtual void OnBeginDrag(PointerEventData eventData) - { - if (m_ScrollRect != null) m_ScrollRect.OnBeginDrag(eventData); - if (m_OnBeginDrag != null) m_OnBeginDrag(eventData, this); - } - - public virtual void OnEndDrag(PointerEventData eventData) - { - if (m_ScrollRect != null) m_ScrollRect.OnEndDrag(eventData); - if (m_OnEndDrag != null) m_OnEndDrag(eventData, this); - } - - public virtual void OnDrag(PointerEventData eventData) - { - if (m_ScrollRect != null) m_ScrollRect.OnDrag(eventData); - if (m_OnDrag != null) m_OnDrag(eventData, this); - } - - public virtual void OnScroll(PointerEventData eventData) - { - if (m_ScrollRect != null) m_ScrollRect.OnScroll(eventData); - if (m_OnScroll != null) m_OnScroll(eventData, this); - } - } -} +} \ No newline at end of file diff --git a/Runtime/Internal/Basic/BaseSerie.cs b/Runtime/Internal/Basic/BaseSerie.cs index 441d480c..19a5ae9d 100644 --- a/Runtime/Internal/Basic/BaseSerie.cs +++ b/Runtime/Internal/Basic/BaseSerie.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using System.Text; @@ -12,6 +11,7 @@ namespace XCharts.Runtime public virtual bool vertsDirty { get { return m_VertsDirty; } } public virtual bool componentDirty { get { return m_ComponentDirty; } } public virtual bool useDataNameForColor { get { return false; } } + public virtual bool titleJustForSerie { get { return false; } } public virtual bool useSortData { get { return false; } } public bool anyDirty { get { return vertsDirty || componentDirty; } } public Painter painter { get { return m_Painter; } set { m_Painter = value; } } @@ -26,7 +26,6 @@ namespace XCharts.Runtime public SerieHandler handler { get; set; } - public virtual void SetVerticesDirty() { m_VertsDirty = true; @@ -48,8 +47,7 @@ namespace XCharts.Runtime } public virtual void ClearData() - { - } + { } public virtual void ClearDirty() { @@ -70,12 +68,10 @@ namespace XCharts.Runtime } public virtual void OnDataUpdate() - { - } + { } public virtual void OnBeforeSerialize() - { - } + { } public virtual void OnAfterDeserialize() { diff --git a/Runtime/Internal/Basic/ChildComponent.cs b/Runtime/Internal/Basic/ChildComponent.cs index 7bffde83..90bca35c 100644 --- a/Runtime/Internal/Basic/ChildComponent.cs +++ b/Runtime/Internal/Basic/ChildComponent.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -8,10 +7,11 @@ namespace XCharts.Runtime public class ChildComponent { public virtual int index { get; set; } + [NonSerialized] protected bool m_VertsDirty; [NonSerialized] protected bool m_ComponentDirty; [NonSerialized] protected Painter m_Painter; - + /// <summary> /// 图表重绘标记。 /// </summary> diff --git a/Runtime/Internal/Basic/CoordSystem.cs b/Runtime/Internal/Basic/CoordSystem.cs index 8aa46086..6b66f707 100644 --- a/Runtime/Internal/Basic/CoordSystem.cs +++ b/Runtime/Internal/Basic/CoordSystem.cs @@ -1,5 +1,3 @@ - - using System; namespace XCharts.Runtime @@ -11,6 +9,5 @@ namespace XCharts.Runtime /// </summary> [Serializable] public abstract class CoordSystem : MainComponent - { - } + { } } \ No newline at end of file diff --git a/Runtime/Internal/Basic/MainComponent.cs b/Runtime/Internal/Basic/MainComponent.cs index 06813aa3..a0834de1 100644 --- a/Runtime/Internal/Basic/MainComponent.cs +++ b/Runtime/Internal/Basic/MainComponent.cs @@ -1,4 +1,3 @@ - using System; using System.Text; using UnityEngine; @@ -53,13 +52,9 @@ namespace XCharts.Runtime m_ComponentDirty = false; } - public virtual void Reset() - { - } + public virtual void Reset() { } - public virtual void ClearData() - { - } + public virtual void ClearData() { } public virtual void ClearDirty() { @@ -73,9 +68,7 @@ namespace XCharts.Runtime SetComponentDirty(); } - public virtual void SetDefaultValue() - { - } + public virtual void SetDefaultValue() { } public virtual void OnRemove() { @@ -104,6 +97,7 @@ namespace XCharts.Runtime public virtual void Update() { } public virtual void DrawBase(VertexHelper vh) { } public virtual void DrawTop(VertexHelper vh) { } + public virtual void OnSerieDataUpdate(int serieIndex) { } public virtual void OnPointerClick(PointerEventData eventData) { } public virtual void OnPointerDown(PointerEventData eventData) { } public virtual void OnPointerUp(PointerEventData eventData) { } @@ -117,13 +111,13 @@ namespace XCharts.Runtime } public abstract class MainComponentHandler<T> : MainComponentHandler - where T : MainComponent + where T : MainComponent { public T component { get; internal set; } internal override void SetComponent(MainComponent component) { - this.component = (T)component; + this.component = (T) component; } } } \ No newline at end of file diff --git a/Runtime/Internal/Basic/MainComponentContext.cs b/Runtime/Internal/Basic/MainComponentContext.cs index 32db105a..02e10f7e 100644 --- a/Runtime/Internal/Basic/MainComponentContext.cs +++ b/Runtime/Internal/Basic/MainComponentContext.cs @@ -1,4 +1,3 @@ - namespace XCharts.Runtime { public class MainComponentContext diff --git a/Runtime/Internal/Misc/DelegateFunction.cs b/Runtime/Internal/Misc/DelegateFunction.cs index af6b57c3..3843ca28 100644 --- a/Runtime/Internal/Misc/DelegateFunction.cs +++ b/Runtime/Internal/Misc/DelegateFunction.cs @@ -1,5 +1,3 @@ - - using System.Collections.Generic; using UnityEngine.UI; diff --git a/Runtime/Internal/Misc/Enums.cs b/Runtime/Internal/Misc/Enums.cs index adc794f0..f19d2d62 100644 --- a/Runtime/Internal/Misc/Enums.cs +++ b/Runtime/Internal/Misc/Enums.cs @@ -1,5 +1,3 @@ - - namespace XCharts.Runtime { /// <summary> diff --git a/Runtime/Internal/Misc/INeedSerieContainer.cs b/Runtime/Internal/Misc/INeedSerieContainer.cs index ce29c61e..c979d5d9 100644 --- a/Runtime/Internal/Misc/INeedSerieContainer.cs +++ b/Runtime/Internal/Misc/INeedSerieContainer.cs @@ -1,4 +1,3 @@ - using System.Text; using UnityEngine; using UnityEngine.EventSystems; diff --git a/Runtime/Internal/Misc/IPropertyChanged.cs b/Runtime/Internal/Misc/IPropertyChanged.cs index af782c07..34f2e355 100644 --- a/Runtime/Internal/Misc/IPropertyChanged.cs +++ b/Runtime/Internal/Misc/IPropertyChanged.cs @@ -1,4 +1,3 @@ - namespace XCharts.Runtime { /// <summary> @@ -8,5 +7,4 @@ namespace XCharts.Runtime { void OnChanged(); } -} - +} \ No newline at end of file diff --git a/Runtime/Internal/Misc/ISerieContainer.cs b/Runtime/Internal/Misc/ISerieContainer.cs index d798d710..5e09dc4c 100644 --- a/Runtime/Internal/Misc/ISerieContainer.cs +++ b/Runtime/Internal/Misc/ISerieContainer.cs @@ -1,4 +1,3 @@ - namespace XCharts.Runtime { public interface ISerieContainer diff --git a/Runtime/Internal/Misc/ISerieDataComponent.cs b/Runtime/Internal/Misc/ISerieDataComponent.cs index c75f596a..0187300c 100644 --- a/Runtime/Internal/Misc/ISerieDataComponent.cs +++ b/Runtime/Internal/Misc/ISerieDataComponent.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; @@ -6,6 +5,5 @@ using UnityEngine.UI; namespace XCharts.Runtime { public interface ISerieDataComponent - { - } + { } } \ No newline at end of file diff --git a/Runtime/Internal/Misc/ISerieExtraComponent.cs b/Runtime/Internal/Misc/ISerieExtraComponent.cs index 13ae3f46..dda88d4c 100644 --- a/Runtime/Internal/Misc/ISerieExtraComponent.cs +++ b/Runtime/Internal/Misc/ISerieExtraComponent.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; diff --git a/Runtime/Internal/Misc/ISimplifiedSerie.cs b/Runtime/Internal/Misc/ISimplifiedSerie.cs index d3325010..20afab90 100644 --- a/Runtime/Internal/Misc/ISimplifiedSerie.cs +++ b/Runtime/Internal/Misc/ISimplifiedSerie.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; @@ -6,6 +5,5 @@ using UnityEngine.UI; namespace XCharts.Runtime { public interface ISimplifiedSerie - { - } + { } } \ No newline at end of file diff --git a/Runtime/Internal/Misc/IUpdateRuntimeData.cs b/Runtime/Internal/Misc/IUpdateRuntimeData.cs index 53f91957..c1d7f0fc 100644 --- a/Runtime/Internal/Misc/IUpdateRuntimeData.cs +++ b/Runtime/Internal/Misc/IUpdateRuntimeData.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; diff --git a/Runtime/Internal/Object/ChartLabel.cs b/Runtime/Internal/Object/ChartLabel.cs index ed114b5f..7da2fb5b 100644 --- a/Runtime/Internal/Object/ChartLabel.cs +++ b/Runtime/Internal/Object/ChartLabel.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; @@ -337,4 +336,4 @@ namespace XCharts.Runtime } } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/Object/ChartObject.cs b/Runtime/Internal/Object/ChartObject.cs index e17b5292..143e1202 100644 --- a/Runtime/Internal/Object/ChartObject.cs +++ b/Runtime/Internal/Object/ChartObject.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime diff --git a/Runtime/Internal/Object/ChartText.cs b/Runtime/Internal/Object/ChartText.cs index 2ae19f8b..c01b68a8 100644 --- a/Runtime/Internal/Object/ChartText.cs +++ b/Runtime/Internal/Object/ChartText.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; #if dUI_TextMeshPro @@ -47,8 +46,7 @@ namespace XCharts.Runtime } public ChartText() - { - } + { } public ChartText(GameObject textParent) { @@ -72,7 +70,7 @@ namespace XCharts.Runtime #if dUI_TextMeshPro if (m_TMPText != null) m_TMPText.fontSize = fontSize; #else - if (m_Text != null) m_Text.fontSize = (int)fontSize; + if (m_Text != null) m_Text.fontSize = (int) fontSize; #endif } @@ -81,7 +79,7 @@ namespace XCharts.Runtime if (text == null) text = string.Empty; else text = text.Replace("\\n", "\n"); #if dUI_TextMeshPro - if(m_TMPText != null) m_TMPText.text = text; + if (m_TMPText != null) m_TMPText.text = text; #else if (m_Text != null) m_Text.text = text; #endif @@ -169,15 +167,33 @@ namespace XCharts.Runtime if (m_TMPText == null) return; switch (alignment) { - case TextAnchor.LowerCenter: m_TMPText.alignment = TextAlignmentOptions.Bottom; break; - case TextAnchor.LowerLeft: m_TMPText.alignment = TextAlignmentOptions.BottomLeft; break; - case TextAnchor.LowerRight: m_TMPText.alignment = TextAlignmentOptions.BottomRight; break; - case TextAnchor.MiddleCenter: m_TMPText.alignment = TextAlignmentOptions.Center; break; - case TextAnchor.MiddleLeft: m_TMPText.alignment = TextAlignmentOptions.Left; break; - case TextAnchor.MiddleRight: m_TMPText.alignment = TextAlignmentOptions.Right; break; - case TextAnchor.UpperCenter: m_TMPText.alignment = TextAlignmentOptions.Top; break; - case TextAnchor.UpperLeft: m_TMPText.alignment = TextAlignmentOptions.TopLeft; break; - case TextAnchor.UpperRight: m_TMPText.alignment = TextAlignmentOptions.TopRight; break; + case TextAnchor.LowerCenter: + m_TMPText.alignment = TextAlignmentOptions.Bottom; + break; + case TextAnchor.LowerLeft: + m_TMPText.alignment = TextAlignmentOptions.BottomLeft; + break; + case TextAnchor.LowerRight: + m_TMPText.alignment = TextAlignmentOptions.BottomRight; + break; + case TextAnchor.MiddleCenter: + m_TMPText.alignment = TextAlignmentOptions.Center; + break; + case TextAnchor.MiddleLeft: + m_TMPText.alignment = TextAlignmentOptions.Left; + break; + case TextAnchor.MiddleRight: + m_TMPText.alignment = TextAlignmentOptions.Right; + break; + case TextAnchor.UpperCenter: + m_TMPText.alignment = TextAlignmentOptions.Top; + break; + case TextAnchor.UpperLeft: + m_TMPText.alignment = TextAlignmentOptions.TopLeft; + break; + case TextAnchor.UpperRight: + m_TMPText.alignment = TextAlignmentOptions.TopRight; + break; default: m_TMPText.alignment = TextAlignmentOptions.Center; m_TextAlignment = TextAnchor.MiddleCenter; @@ -199,10 +215,18 @@ namespace XCharts.Runtime if (m_TMPText == null) return; switch (fontStyle) { - case FontStyle.Normal: m_TMPText.fontStyle = FontStyles.Normal; break; - case FontStyle.Bold: m_TMPText.fontStyle = FontStyles.Bold; break; - case FontStyle.BoldAndItalic: m_TMPText.fontStyle = FontStyles.Bold | FontStyles.Italic; break; - case FontStyle.Italic: m_TMPText.fontStyle = FontStyles.Italic; break; + case FontStyle.Normal: + m_TMPText.fontStyle = FontStyles.Normal; + break; + case FontStyle.Bold: + m_TMPText.fontStyle = FontStyles.Bold; + break; + case FontStyle.BoldAndItalic: + m_TMPText.fontStyle = FontStyles.Bold | FontStyles.Italic; + break; + case FontStyle.Italic: + m_TMPText.fontStyle = FontStyles.Italic; + break; } #else if (m_Text != null) m_Text.fontStyle = fontStyle; diff --git a/Runtime/Internal/Object/LegendItem.cs b/Runtime/Internal/Object/LegendItem.cs index 8c812d5e..9a6f7540 100644 --- a/Runtime/Internal/Object/LegendItem.cs +++ b/Runtime/Internal/Object/LegendItem.cs @@ -120,7 +120,6 @@ namespace XCharts.Runtime else return Color.clear; } - public void SetIconColor(Color color) { if (m_Icon) diff --git a/Runtime/Internal/Painter.cs b/Runtime/Internal/Painter.cs index 0e5091f1..c60041a9 100644 --- a/Runtime/Internal/Painter.cs +++ b/Runtime/Internal/Painter.cs @@ -1,7 +1,6 @@ - +using System; using UnityEngine; using UnityEngine.UI; -using System; namespace XCharts.Runtime { diff --git a/Runtime/Internal/Pools/ListPool.cs b/Runtime/Internal/Pools/ListPool.cs index da90cc1a..8210fde1 100644 --- a/Runtime/Internal/Pools/ListPool.cs +++ b/Runtime/Internal/Pools/ListPool.cs @@ -1,6 +1,4 @@ - using System.Collections.Generic; -using UnityEngine; namespace XCharts.Runtime { @@ -34,4 +32,4 @@ namespace XCharts.Runtime s_ListPool.ClearAll(); } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/Pools/ObjectPool.cs b/Runtime/Internal/Pools/ObjectPool.cs index 7c59b82b..9dfb045d 100644 --- a/Runtime/Internal/Pools/ObjectPool.cs +++ b/Runtime/Internal/Pools/ObjectPool.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; @@ -55,4 +54,4 @@ namespace XCharts.Runtime m_Stack.Clear(); } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/Pools/SerieDataPool.cs b/Runtime/Internal/Pools/SerieDataPool.cs index 7aeb7c75..9380580e 100644 --- a/Runtime/Internal/Pools/SerieDataPool.cs +++ b/Runtime/Internal/Pools/SerieDataPool.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -7,9 +6,7 @@ namespace XCharts.Runtime { private static readonly ObjectPool<SerieData> s_ListPool = new ObjectPool<SerieData>(null, OnClear); - static void OnGet(SerieData serieData) - { - } + static void OnGet(SerieData serieData) { } static void OnClear(SerieData serieData) { @@ -26,4 +23,4 @@ namespace XCharts.Runtime s_ListPool.Release(toRelease); } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/Pools/SerieLabelPool.cs b/Runtime/Internal/Pools/SerieLabelPool.cs index 0bb7d1de..321d8942 100644 --- a/Runtime/Internal/Pools/SerieLabelPool.cs +++ b/Runtime/Internal/Pools/SerieLabelPool.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -67,9 +66,9 @@ namespace XCharts.Runtime float iconWidth, float iconHeight, ThemeStyle theme) { var label = ChartHelper.AddChartLabel(name, parent, labelStyle, theme.common, - "", color, TextAnchor.MiddleCenter); + "", color, TextAnchor.MiddleCenter); label.SetActive(labelStyle.show); return label.gameObject; } } -} +} \ No newline at end of file diff --git a/Runtime/Internal/Utilities/ChartCached.cs b/Runtime/Internal/Utilities/ChartCached.cs index 2579d9ab..59a505bd 100644 --- a/Runtime/Internal/Utilities/ChartCached.cs +++ b/Runtime/Internal/Utilities/ChartCached.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using System.Globalization; @@ -13,7 +12,7 @@ namespace XCharts.Runtime private const string NUMERIC_FORMATTER_X = "X"; private const string NUMERIC_FORMATTER_x = "x"; private static readonly string s_DefaultAxis = "axis_"; - private static CultureInfo ci = new CultureInfo("en-us");// "en-us", "zh-cn", "ar-iq", "de-de" + private static CultureInfo ci = new CultureInfo("en-us"); // "en-us", "zh-cn", "ar-iq", "de-de" private static Dictionary<Color, string> s_ColorToStr = new Dictionary<Color, string>(100); private static Dictionary<int, string> s_SerieLabelName = new Dictionary<int, string>(1000); private static Dictionary<Color, string> s_ColorDotStr = new Dictionary<Color, string>(100); @@ -21,7 +20,6 @@ namespace XCharts.Runtime private static Dictionary<int, string> s_AxisLabelName = new Dictionary<int, string>(); private static Dictionary<Type, string> s_TypeName = new Dictionary<Type, string>(); - private static Dictionary<double, Dictionary<string, string>> s_NumberToStr = new Dictionary<double, Dictionary<string, string>>(); private static Dictionary<int, Dictionary<string, string>> s_PrecisionToStr = new Dictionary<int, Dictionary<string, string>>(); @@ -55,18 +53,18 @@ namespace XCharts.Runtime { if (string.IsNullOrEmpty(formatter)) { - if (value - (int)value == 0) - s_NumberToStr[value][formatter] = ((int)value).ToString(); + if (value - (int) value == 0) + s_NumberToStr[value][formatter] = ((int) value).ToString(); else s_NumberToStr[value][formatter] = value.ToString(); } - else if (formatter.StartsWith(NUMERIC_FORMATTER_D) - || formatter.StartsWith(NUMERIC_FORMATTER_d) - || formatter.StartsWith(NUMERIC_FORMATTER_X) - || formatter.StartsWith(NUMERIC_FORMATTER_x) - ) + else if (formatter.StartsWith(NUMERIC_FORMATTER_D) || + formatter.StartsWith(NUMERIC_FORMATTER_d) || + formatter.StartsWith(NUMERIC_FORMATTER_X) || + formatter.StartsWith(NUMERIC_FORMATTER_x) + ) { - s_NumberToStr[value][formatter] = ((int)value).ToString(formatter, ci); + s_NumberToStr[value][formatter] = ((int) value).ToString(formatter, ci); } else { diff --git a/Runtime/Internal/Utilities/ChartConst.cs b/Runtime/Internal/Utilities/ChartConst.cs index f4e3bfef..2b0eeb6b 100644 --- a/Runtime/Internal/Utilities/ChartConst.cs +++ b/Runtime/Internal/Utilities/ChartConst.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime diff --git a/Runtime/Internal/Utilities/ChartDrawer.cs b/Runtime/Internal/Utilities/ChartDrawer.cs index ecb75b92..69b7e2c5 100644 --- a/Runtime/Internal/Utilities/ChartDrawer.cs +++ b/Runtime/Internal/Utilities/ChartDrawer.cs @@ -1,5 +1,3 @@ - - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -97,13 +95,13 @@ namespace XCharts.Runtime var arrowOffset = 0; var arrowDent = arrowWidth / 3.3f; UGL.DrawArrow(vh, startPos, pos, arrowWidth, arrowHeight, - arrowOffset, arrowDent, color); + arrowOffset, arrowDent, color); break; } } public static void DrawLineStyle(VertexHelper vh, LineStyle lineStyle, Vector3 startPos, Vector3 endPos, - Color32 defaultColor, float themeWidth, LineStyle.Type themeType) + Color32 defaultColor, float themeWidth, LineStyle.Type themeType) { var type = lineStyle.GetType(themeType); var width = lineStyle.GetWidth(themeWidth); diff --git a/Runtime/Internal/Utilities/ChartHelper.cs b/Runtime/Internal/Utilities/ChartHelper.cs index 2a9f9e5d..c254007c 100644 --- a/Runtime/Internal/Utilities/ChartHelper.cs +++ b/Runtime/Internal/Utilities/ChartHelper.cs @@ -1,7 +1,6 @@ - -using System.Text; using System; using System.Collections.Generic; +using System.Text; using System.Text.RegularExpressions; using UnityEngine; using UnityEngine.EventSystems; @@ -365,8 +364,8 @@ namespace XCharts.Runtime label.UpdateIcon(labelStyle.icon); if (labelStyle.background.show) { - label.color = (!labelStyle.background.autoColor || autoColor == Color.clear) - ? labelStyle.background.color : autoColor; + label.color = (!labelStyle.background.autoColor || autoColor == Color.clear) ? + labelStyle.background.color : autoColor; label.sprite = labelStyle.background.sprite; label.type = labelStyle.background.type; } @@ -442,7 +441,7 @@ namespace XCharts.Runtime ThemeStyle theme, TextAnchor alignment) { var label = ChartHelper.AddChartLabel(name, parent, tooltip.indicatorLabelStyle, theme.tooltip, - "", Color.clear, alignment); + "", Color.clear, alignment); label.SetActive(tooltip.show && tooltip.indicatorLabelStyle.show); return label; } @@ -451,7 +450,7 @@ namespace XCharts.Runtime { Vector3 dir = (ep - sp).normalized; float dist = Vector3.Distance(sp, ep); - int segment = (int)(dist / k); + int segment = (int) (dist / k); posList.Clear(); posList.Add(sp); for (int i = 1; i < segment; i++) @@ -606,7 +605,7 @@ namespace XCharts.Runtime { Color color; ColorUtility.TryParseHtmlString(hexColorStr, out color); - return (Color32)color; + return (Color32) color; } public static double GetMaxDivisibleValue(double max, int ceilRate) @@ -615,15 +614,15 @@ namespace XCharts.Runtime if (max > -1 && max < 1) { int count = 1; - int intvalue = (int)(max * Mathf.Pow(10, count)); + int intvalue = (int) (max * Mathf.Pow(10, count)); while (intvalue == 0 && count < 12) { count++; - intvalue = (int)(max * Mathf.Pow(10, count)); + intvalue = (int) (max * Mathf.Pow(10, count)); } var pow = Mathf.Pow(10, count); - if (max > 0) return (int)((max * pow + 1)) / pow; - else return (int)((max * pow - 1)) / pow; + if (max > 0) return (int) ((max * pow + 1)) / pow; + else return (int) ((max * pow - 1)) / pow; } if (ceilRate == 0) { @@ -646,7 +645,7 @@ namespace XCharts.Runtime else { var mod = max % ceilRate; - int rate = (int)(max / ceilRate); + int rate = (int) (max / ceilRate); return mod == 0 ? max : (max < 0 ? rate : rate + 1) * ceilRate; } } @@ -657,15 +656,15 @@ namespace XCharts.Runtime if (min > -1 && min < 1) { int count = 1; - int intvalue = (int)(min * Mathf.Pow(10, count)); + int intvalue = (int) (min * Mathf.Pow(10, count)); while (intvalue == 0 && count < 12) { count++; - intvalue = (int)(min * Mathf.Pow(10, count)); + intvalue = (int) (min * Mathf.Pow(10, count)); } var pow = Mathf.Pow(10, count); - if (min > 0) return (int)((min * pow + 1)) / pow; - else return (int)((min * pow - 1)) / pow; + if (min > 0) return (int) ((min * pow + 1)) / pow; + else return (int) ((min * pow - 1)) / pow; } if (ceilRate == 0) { @@ -687,7 +686,7 @@ namespace XCharts.Runtime else { var mod = min % ceilRate; - int rate = (int)(min / ceilRate); + int rate = (int) (min / ceilRate); return mod == 0 ? min : (min < 0 ? rate - 1 : rate) * ceilRate; } } @@ -701,31 +700,31 @@ namespace XCharts.Runtime { if (isLogBaseE) { - max = Mathf.Exp(splitNumber); + max = Math.Exp(splitNumber); } else { - max = Mathf.Pow(logBase, splitNumber); + max = Math.Pow(logBase, splitNumber); } splitNumber++; } return max; } - public static float GetMinLogValue(double value, float logBase, bool isLogBaseE, out int splitNumber) + public static double GetMinLogValue(double value, float logBase, bool isLogBaseE, out int splitNumber) { splitNumber = 0; if (value > 1) return 1; - float min = 1; + double min = 1; while (min > value) { if (isLogBaseE) { - min = Mathf.Exp(-splitNumber); + min = Math.Exp(-splitNumber); } else { - min = Mathf.Pow(logBase, -splitNumber); + min = Math.Pow(logBase, -splitNumber); } splitNumber++; } @@ -736,11 +735,11 @@ namespace XCharts.Runtime { if (value > 1 || value < -1) return 0; int count = 1; - int intvalue = (int)(value * Mathf.Pow(10, count)); + int intvalue = (int) (value * Mathf.Pow(10, count)); while (intvalue == 0 && count < 38) { count++; - intvalue = (int)(value * Mathf.Pow(10, count)); + intvalue = (int) (value * Mathf.Pow(10, count)); } if (count == 38 && (value == 0 || value == 1)) return 1; else return count; @@ -836,16 +835,16 @@ namespace XCharts.Runtime { if (color.a != 0 && opacity != 1) { - color.a = (byte)(color.a * opacity); + color.a = (byte) (color.a * opacity); } } public static Color32 GetHighlightColor(Color32 color, float rate = 0.8f) { var newColor = color; - newColor.r = (byte)(color.r * rate); - newColor.g = (byte)(color.g * rate); - newColor.b = (byte)(color.b * rate); + newColor.r = (byte) (color.r * rate); + newColor.g = (byte) (color.g * rate); + newColor.b = (byte) (color.b * rate); return newColor; } diff --git a/Runtime/Internal/Utilities/ComponentHelper.cs b/Runtime/Internal/Utilities/ComponentHelper.cs index f273734b..f59a7035 100644 --- a/Runtime/Internal/Utilities/ComponentHelper.cs +++ b/Runtime/Internal/Utilities/ComponentHelper.cs @@ -1,5 +1,3 @@ - - using System.Collections.Generic; namespace XCharts.Runtime @@ -18,7 +16,7 @@ namespace XCharts.Runtime } return null; } - + public static RadiusAxis GetRadiusAxis(List<MainComponent> components, int polarIndex) { foreach (var component in components) diff --git a/Runtime/Internal/Utilities/DataHelper.cs b/Runtime/Internal/Utilities/DataHelper.cs index 9d168151..ee555adc 100644 --- a/Runtime/Internal/Utilities/DataHelper.cs +++ b/Runtime/Internal/Utilities/DataHelper.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; diff --git a/Runtime/Internal/Utilities/LayoutHelper.cs b/Runtime/Internal/Utilities/LayoutHelper.cs index f3a0e22b..6b128f84 100644 --- a/Runtime/Internal/Utilities/LayoutHelper.cs +++ b/Runtime/Internal/Utilities/LayoutHelper.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -213,14 +212,14 @@ namespace XCharts.Runtime public static bool IsFixedWidthHeight(RectTransform rt) { return IsLeftTop(rt.anchorMin, rt.anchorMax) || - IsLeftCenter(rt.anchorMin, rt.anchorMax) || - IsLeftBottom(rt.anchorMin, rt.anchorMax) || - IsCenterTop(rt.anchorMin, rt.anchorMax) || - IsCenterCenter(rt.anchorMin, rt.anchorMax) || - IsCenterBottom(rt.anchorMin, rt.anchorMax) || - IsRightTop(rt.anchorMin, rt.anchorMax) || - IsRightCenter(rt.anchorMin, rt.anchorMax) || - IsRightBottom(rt.anchorMin, rt.anchorMax); + IsLeftCenter(rt.anchorMin, rt.anchorMax) || + IsLeftBottom(rt.anchorMin, rt.anchorMax) || + IsCenterTop(rt.anchorMin, rt.anchorMax) || + IsCenterCenter(rt.anchorMin, rt.anchorMax) || + IsCenterBottom(rt.anchorMin, rt.anchorMax) || + IsRightTop(rt.anchorMin, rt.anchorMax) || + IsRightCenter(rt.anchorMin, rt.anchorMax) || + IsRightBottom(rt.anchorMin, rt.anchorMax); } } diff --git a/Runtime/Internal/Utilities/MathUtil.cs b/Runtime/Internal/Utilities/MathUtil.cs index 3a475707..2103a5fa 100644 --- a/Runtime/Internal/Utilities/MathUtil.cs +++ b/Runtime/Internal/Utilities/MathUtil.cs @@ -1,7 +1,6 @@ - -using System.Text; using System; using System.Collections.Generic; +using System.Text; using System.Text.RegularExpressions; using UnityEngine; using UnityEngine.EventSystems; diff --git a/Runtime/Internal/XCResourcesImporter.cs b/Runtime/Internal/XCResourcesImporter.cs index 7ce0b980..09eea015 100644 --- a/Runtime/Internal/XCResourcesImporter.cs +++ b/Runtime/Internal/XCResourcesImporter.cs @@ -2,9 +2,8 @@ using System; using System.IO; -using UnityEngine; using UnityEditor; - +using UnityEngine; namespace XCharts.Runtime { @@ -16,8 +15,7 @@ namespace XCharts.Runtime public XCResourcesImporter() { } public void OnDestroy() - { - } + { } public void OnGUI() { @@ -137,4 +135,4 @@ namespace XCharts.Runtime } } -#endif +#endif \ No newline at end of file diff --git a/Runtime/Internal/XCSettings.cs b/Runtime/Internal/XCSettings.cs index 3ca47865..17a2b734 100644 --- a/Runtime/Internal/XCSettings.cs +++ b/Runtime/Internal/XCSettings.cs @@ -1,8 +1,7 @@ - -using UnityEngine; using System; using System.Collections.Generic; using System.IO; +using UnityEngine; #if dUI_TextMeshPro using TMPro; #endif @@ -27,42 +26,42 @@ namespace XCharts.Runtime #if dUI_TextMeshPro [SerializeField] private TMP_FontAsset m_TMPFont = null; #endif - [SerializeField] [Range(1, 200)] private int m_FontSizeLv1 = 28; - [SerializeField] [Range(1, 200)] private int m_FontSizeLv2 = 24; - [SerializeField] [Range(1, 200)] private int m_FontSizeLv3 = 20; - [SerializeField] [Range(1, 200)] private int m_FontSizeLv4 = 18; + [SerializeField][Range(1, 200)] private int m_FontSizeLv1 = 28; + [SerializeField][Range(1, 200)] private int m_FontSizeLv2 = 24; + [SerializeField][Range(1, 200)] private int m_FontSizeLv3 = 20; + [SerializeField][Range(1, 200)] private int m_FontSizeLv4 = 18; [SerializeField] private LineStyle.Type m_AxisLineType = LineStyle.Type.Solid; - [SerializeField] [Range(0, 20)] private float m_AxisLineWidth = 0.8f; + [SerializeField][Range(0, 20)] private float m_AxisLineWidth = 0.8f; [SerializeField] private LineStyle.Type m_AxisSplitLineType = LineStyle.Type.Solid; - [SerializeField] [Range(0, 20)] private float m_AxisSplitLineWidth = 0.8f; - [SerializeField] [Range(0, 20)] private float m_AxisTickWidth = 0.8f; - [SerializeField] [Range(0, 20)] private float m_AxisTickLength = 5f; - [SerializeField] [Range(0, 200)] private float m_GaugeAxisLineWidth = 15f; - [SerializeField] [Range(0, 20)] private float m_GaugeAxisSplitLineWidth = 0.8f; - [SerializeField] [Range(0, 20)] private float m_GaugeAxisSplitLineLength = 15f; - [SerializeField] [Range(0, 20)] private float m_GaugeAxisTickWidth = 0.8f; - [SerializeField] [Range(0, 20)] private float m_GaugeAxisTickLength = 5f; - [SerializeField] [Range(0, 20)] private float m_TootipLineWidth = 0.8f; - [SerializeField] [Range(0, 20)] private float m_DataZoomBorderWidth = 0.5f; - [SerializeField] [Range(0, 20)] private float m_DataZoomDataLineWidth = 0.5f; - [SerializeField] [Range(0, 20)] private float m_VisualMapBorderWidth = 0f; + [SerializeField][Range(0, 20)] private float m_AxisSplitLineWidth = 0.8f; + [SerializeField][Range(0, 20)] private float m_AxisTickWidth = 0.8f; + [SerializeField][Range(0, 20)] private float m_AxisTickLength = 5f; + [SerializeField][Range(0, 200)] private float m_GaugeAxisLineWidth = 15f; + [SerializeField][Range(0, 20)] private float m_GaugeAxisSplitLineWidth = 0.8f; + [SerializeField][Range(0, 20)] private float m_GaugeAxisSplitLineLength = 15f; + [SerializeField][Range(0, 20)] private float m_GaugeAxisTickWidth = 0.8f; + [SerializeField][Range(0, 20)] private float m_GaugeAxisTickLength = 5f; + [SerializeField][Range(0, 20)] private float m_TootipLineWidth = 0.8f; + [SerializeField][Range(0, 20)] private float m_DataZoomBorderWidth = 0.5f; + [SerializeField][Range(0, 20)] private float m_DataZoomDataLineWidth = 0.5f; + [SerializeField][Range(0, 20)] private float m_VisualMapBorderWidth = 0f; - [SerializeField] [Range(0, 20)] private float m_SerieLineWidth = 1.8f; - [SerializeField] [Range(0, 200)] private float m_SerieLineSymbolSize = 5f; - [SerializeField] [Range(0, 200)] private float m_SerieScatterSymbolSize = 20f; - [SerializeField] [Range(0, 200)] private float m_SerieSelectedRate = 1.3f; - [SerializeField] [Range(0, 10)] private float m_SerieCandlestickBorderWidth = 1f; + [SerializeField][Range(0, 20)] private float m_SerieLineWidth = 1.8f; + [SerializeField][Range(0, 200)] private float m_SerieLineSymbolSize = 5f; + [SerializeField][Range(0, 200)] private float m_SerieScatterSymbolSize = 20f; + [SerializeField][Range(0, 200)] private float m_SerieSelectedRate = 1.3f; + [SerializeField][Range(0, 10)] private float m_SerieCandlestickBorderWidth = 1f; [SerializeField] private bool m_EditorShowAllListData = false; - [SerializeField] [Range(1, 20)] protected int m_MaxPainter = 10; - [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; - [SerializeField] [Range(10, 50)] protected float m_VisualMapTriangeLen = 20f; - [SerializeField] [Range(1, 20)] protected float m_PieTooltipExtraRadius = 8f; - [SerializeField] [Range(1, 20)] protected float m_PieSelectedOffset = 8f; + [SerializeField][Range(1, 20)] protected int m_MaxPainter = 10; + [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; + [SerializeField][Range(10, 50)] protected float m_VisualMapTriangeLen = 20f; + [SerializeField][Range(1, 20)] protected float m_PieTooltipExtraRadius = 8f; + [SerializeField][Range(1, 20)] protected float m_PieSelectedOffset = 8f; [SerializeField] protected List<Theme> m_CustomThemes = new List<Theme>(); public static Lang lang { get { return Instance.m_Lang; } } diff --git a/Runtime/Internal/XCThemeMgr.cs b/Runtime/Internal/XCThemeMgr.cs index 9e6380e8..86c239cc 100644 --- a/Runtime/Internal/XCThemeMgr.cs +++ b/Runtime/Internal/XCThemeMgr.cs @@ -1,5 +1,3 @@ - - using System.Collections.Generic; using System.IO; using UnityEngine; diff --git a/Runtime/Internal/XChartsMgr.cs b/Runtime/Internal/XChartsMgr.cs index dc0680c4..e97eee78 100644 --- a/Runtime/Internal/XChartsMgr.cs +++ b/Runtime/Internal/XChartsMgr.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; +using System.IO; using UnityEngine; using UnityEngine.SceneManagement; -using System.IO; #if UNITY_EDITOR using UnityEditor; #endif @@ -20,8 +20,8 @@ namespace XCharts.Runtime [ExecuteInEditMode] public static class XChartsMgr { - public static readonly string version = "3.0.0-preview9"; - public static readonly int versionDate = 20220506; + public static readonly string version = "3.0.0"; + public static readonly int versionDate = 20220522; public static string fullVersion { get { return version + "-" + versionDate; } } internal static List<BaseChart> chartList = new List<BaseChart>(); diff --git a/Runtime/Serie/Bar/Bar.cs b/Runtime/Serie/Bar/Bar.cs index fd9d6402..89ed7024 100644 --- a/Runtime/Serie/Bar/Bar.cs +++ b/Runtime/Serie/Bar/Bar.cs @@ -1,8 +1,3 @@ - -using System; -using System.Reflection; -using UnityEngine; - namespace XCharts.Runtime { [System.Serializable] @@ -10,7 +5,9 @@ namespace XCharts.Runtime [SerieConvert(typeof(Line), typeof(Pie))] [RequireChartComponent(typeof(GridCoord))] [DefaultAnimation(AnimationType.BottomToTop)] - [SerieExtraComponent(typeof(LabelStyle), typeof(Emphasis))] + [SerieExtraComponent(typeof(LabelStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraComponent(typeof(ItemStyle), typeof(LabelStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraField("m_Ignore")] public class Bar : Serie, INeedSerieContainer { public int containerIndex { get; internal set; } diff --git a/Runtime/Serie/Bar/BarHandler.cs b/Runtime/Serie/Bar/BarHandler.cs index 88f7ccdf..d5818098 100644 --- a/Runtime/Serie/Bar/BarHandler.cs +++ b/Runtime/Serie/Bar/BarHandler.cs @@ -1,6 +1,6 @@ - using System.Collections.Generic; using UnityEngine; +using UnityEngine.EventSystems; using UnityEngine.UI; using XUGL; @@ -47,6 +47,16 @@ namespace XCharts.Runtime } } + public override void OnPointerDown(PointerEventData eventData) + { + if (!serie.context.pointerEnter) return; + if (serie.context.pointerItemDataIndex < 0) return; + if (chart.onPointerClickBar != null) + { + chart.onPointerClickBar(eventData, serie.context.pointerItemDataIndex); + } + } + private void UpdateSerieContext() { if (m_SerieGrid == null) @@ -87,8 +97,8 @@ namespace XCharts.Runtime serie.context.pointerEnter = false; foreach (var serieData in serie.data) { - if (serie.context.pointerAxisDataIndexs.Contains(serieData.index) - || serieData.context.rect.Contains(chart.pointerPos)) + if (serie.context.pointerAxisDataIndexs.Contains(serieData.index) || + serieData.context.rect.Contains(chart.pointerPos)) { serie.context.pointerItemDataIndex = serieData.index; serie.context.pointerEnter = true; @@ -155,17 +165,17 @@ namespace XCharts.Runtime if (isStack) SeriesHelper.UpdateStackDataList(chart.series, serie, dataZoom, m_StackSerieData); + var barCount = chart.GetSerieBarRealCount<Bar>(); float categoryWidth = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); float barGap = chart.GetSerieBarGap<Bar>(); - float totalBarWidth = chart.GetSerieTotalWidth<Bar>(categoryWidth, barGap); - float barWidth = serie.GetBarWidth(categoryWidth); + float totalBarWidth = chart.GetSerieTotalWidth<Bar>(categoryWidth, barGap, barCount); + float barWidth = serie.GetBarWidth(categoryWidth, barCount); float offset = (categoryWidth - totalBarWidth) * 0.5f; - float barGapWidth = barWidth + barWidth * barGap; - float gap = serie.barGap == -1 ? offset : offset + chart.GetSerieIndexIfStack<Bar>(serie) * barGapWidth; - int maxCount = serie.maxShow > 0 - ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) - : showData.Count; - + var serieReadIndex = chart.GetSerieIndexIfStack<Bar>(serie); + float gap = serie.barGap == -1 ? offset : offset + chart.GetSerieTotalGap<Bar>(categoryWidth, barGap, serieReadIndex); + int maxCount = serie.maxShow > 0 ? + (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : + showData.Count; var isPercentStack = SeriesHelper.IsPercentStack<Bar>(chart.series, serie.stack); bool dataChanging = false; float dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); @@ -214,7 +224,7 @@ namespace XCharts.Runtime if (isPercentStack) { var valueTotal = chart.GetSerieSameStackTotalValue<Bar>(serie.stack, i); - barHig = valueTotal != 0 ? (float)(relativedValue / valueTotal * relativedAxisLength) : 0; + barHig = valueTotal != 0 ? (float) (relativedValue / valueTotal * relativedAxisLength) : 0; } else { @@ -229,9 +239,9 @@ namespace XCharts.Runtime serieData.context.position = top; serieData.context.rect = Rect.MinMaxRect(plb.x + borderGapAndWidth, plb.y + borderGapAndWidth, prt.x - borderGapAndWidth, prt.y - borderGapAndWidth); - serieData.context.backgroundRect = isY - ? Rect.MinMaxRect(m_SerieGrid.context.x, plb.y, m_SerieGrid.context.x + relativedAxisLength, prt.y) - : Rect.MinMaxRect(plb.x, m_SerieGrid.context.y, prb.x, m_SerieGrid.context.y + relativedAxisLength); + serieData.context.backgroundRect = isY ? + Rect.MinMaxRect(m_SerieGrid.context.x, plb.y, m_SerieGrid.context.x + relativedAxisLength, prt.y) : + Rect.MinMaxRect(plb.x, m_SerieGrid.context.y, prb.x, m_SerieGrid.context.y + relativedAxisLength); if (!serie.clip || (serie.clip && m_SerieGrid.Contains(top))) serie.context.dataPoints.Add(top); @@ -283,7 +293,7 @@ namespace XCharts.Runtime if (axis.context.minMaxRange <= 0) pY = grid.context.y; else { - var valueLen = (float)((value - axis.context.minValue) / axis.context.minMaxRange) * grid.context.height; + var valueLen = (float) ((value - axis.context.minValue) / axis.context.minMaxRange) * grid.context.height; pY = grid.context.y + valueLen - categoryWidth * 0.5f; } } @@ -305,7 +315,7 @@ namespace XCharts.Runtime if (axis.context.minMaxRange <= 0) pX = grid.context.x; else { - var valueLen = (float)((value - axis.context.minValue) / axis.context.minMaxRange) * grid.context.width; + var valueLen = (float) ((value - axis.context.minValue) / axis.context.minMaxRange) * grid.context.width; pX = grid.context.x + valueLen - categoryWidth * 0.5f; } } @@ -374,9 +384,9 @@ namespace XCharts.Runtime { var borderWidth = itemStyle.runtimeBorderWidth; var backgroundColor = SerieHelper.GetItemBackgroundColor(serie, serieData, chart.theme, colorIndex, highlight, false); - var cornerRadius = serie.barType == BarType.Capsule && !itemStyle.IsNeedCorner() - ? m_CapusleDefaultCornerRadius - : itemStyle.cornerRadius; + var cornerRadius = serie.barType == BarType.Capsule && !itemStyle.IsNeedCorner() ? + m_CapusleDefaultCornerRadius : + itemStyle.cornerRadius; var invert = value < 0; if (!ChartHelper.IsClearColor(backgroundColor)) { @@ -384,7 +394,7 @@ namespace XCharts.Runtime cornerRadius, isYAxis, chart.settings.cicleSmoothness, invert); } UGL.DrawRoundRectangle(vh, serieData.context.rect, areaColor, areaToColor, 0, - cornerRadius, isYAxis, chart.settings.cicleSmoothness, invert); + cornerRadius, isYAxis, chart.settings.cicleSmoothness, invert); if (serie.barType == BarType.Capsule) { UGL.DrawBorder(vh, serieData.context.backgroundRect, borderWidth, itemStyle.borderColor, @@ -393,7 +403,7 @@ namespace XCharts.Runtime else { UGL.DrawBorder(vh, serieData.context.rect, borderWidth, itemStyle.borderColor, - 0, cornerRadius, isYAxis, chart.settings.cicleSmoothness, invert, itemStyle.borderGap); + 0, cornerRadius, isYAxis, chart.settings.cicleSmoothness, invert, itemStyle.borderGap); } } diff --git a/Runtime/Serie/Bar/SimplifiedBar.cs b/Runtime/Serie/Bar/SimplifiedBar.cs index e47fec72..3eed9ff7 100644 --- a/Runtime/Serie/Bar/SimplifiedBar.cs +++ b/Runtime/Serie/Bar/SimplifiedBar.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -10,6 +9,8 @@ namespace XCharts.Runtime [CoordOptions(typeof(GridCoord))] [DefaultAnimation(AnimationType.LeftToRight)] [SerieExtraComponent()] + [SerieDataExtraComponent()] + [SerieDataExtraField()] public class SimplifiedBar : Serie, INeedSerieContainer, ISimplifiedSerie { public int containerIndex { get; internal set; } diff --git a/Runtime/Serie/Bar/SimplifiedBarHandler.cs b/Runtime/Serie/Bar/SimplifiedBarHandler.cs index 09b542c6..3e4264de 100644 --- a/Runtime/Serie/Bar/SimplifiedBarHandler.cs +++ b/Runtime/Serie/Bar/SimplifiedBarHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using System.Text; using UnityEngine; @@ -138,16 +137,17 @@ namespace XCharts.Runtime var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; var axisXY = isY ? m_SerieGrid.context.y : m_SerieGrid.context.x; + var barCount = chart.GetSerieBarRealCount<SimplifiedBar>(); float categoryWidth = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); - float barGap = chart.GetSerieBarGap<Bar>(); - float totalBarWidth = chart.GetSerieTotalWidth<Bar>(categoryWidth, barGap); - float barWidth = serie.GetBarWidth(categoryWidth); + float barGap = chart.GetSerieBarGap<SimplifiedBar>(); + float totalBarWidth = chart.GetSerieTotalWidth<SimplifiedBar>(categoryWidth, barGap, barCount); + float barWidth = serie.GetBarWidth(categoryWidth, barCount); float offset = (categoryWidth - totalBarWidth) * 0.5f; float barGapWidth = barWidth + barWidth * barGap; float gap = serie.barGap == -1 ? offset : offset + serie.index * barGapWidth; - int maxCount = serie.maxShow > 0 - ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) - : showData.Count; + int maxCount = serie.maxShow > 0 ? + (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : + showData.Count; bool dataChanging = false; float dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); @@ -231,7 +231,7 @@ namespace XCharts.Runtime else { if (axis.context.minMaxRange <= 0) pY = grid.context.y; - else pY = grid.context.y + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth); + else pY = grid.context.y + (float) ((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth); } pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); } @@ -244,7 +244,7 @@ namespace XCharts.Runtime else { if (axis.context.minMaxRange <= 0) pX = grid.context.x; - else pX = grid.context.x + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth); + else pX = grid.context.x + (float) ((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth); } pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); } diff --git a/Runtime/Serie/Candlestick/Candlestick.cs b/Runtime/Serie/Candlestick/Candlestick.cs index 79bac851..6ac985ec 100644 --- a/Runtime/Serie/Candlestick/Candlestick.cs +++ b/Runtime/Serie/Candlestick/Candlestick.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -7,6 +6,8 @@ namespace XCharts.Runtime [SerieHandler(typeof(CandlestickHandler), true)] [DefaultAnimation(AnimationType.LeftToRight)] [SerieExtraComponent()] + [SerieDataExtraComponent(typeof(ItemStyle), typeof(EmphasisItemStyle))] + [SerieDataExtraField()] public class Candlestick : Serie, INeedSerieContainer { public int containerIndex { get; internal set; } diff --git a/Runtime/Serie/Candlestick/CandlestickHandler.cs b/Runtime/Serie/Candlestick/CandlestickHandler.cs index 0029bb81..7955f60f 100644 --- a/Runtime/Serie/Candlestick/CandlestickHandler.cs +++ b/Runtime/Serie/Candlestick/CandlestickHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -41,6 +40,7 @@ namespace XCharts.Runtime param.category = category; param.dimension = 1; param.serieData = serieData; + param.dataCount = serie.dataCount; param.value = 0; param.total = 0; param.color = color; @@ -61,6 +61,7 @@ namespace XCharts.Runtime param.serieIndex = serie.index; param.dimension = i; param.serieData = serieData; + param.dataCount = serie.dataCount; param.value = serieData.GetData(i); param.total = SerieHelper.GetMaxData(serie, i); param.color = color; @@ -93,9 +94,9 @@ namespace XCharts.Runtime float categoryWidth = AxisHelper.GetDataWidth(xAxis, grid.context.width, showData.Count, dataZoom); float barWidth = serie.GetBarWidth(categoryWidth); float gap = (categoryWidth - barWidth) / 2; - int maxCount = serie.maxShow > 0 - ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) - : showData.Count; + int maxCount = serie.maxShow > 0 ? + (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : + showData.Count; bool dataChanging = false; float dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); @@ -118,10 +119,10 @@ namespace XCharts.Runtime var close = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var lowest = serieData.GetCurrData(2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var heighest = serieData.GetCurrData(3, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); - var isRise = yAxis.inverse ? close < open : close > open; - var borderWidth = open == 0 ? 0f - : (itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth - : itemStyle.runtimeBorderWidth); + var isRise = yAxis.inverse ? close<open : close> open; + var borderWidth = open == 0 ? 0f : + (itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth : + itemStyle.runtimeBorderWidth); if (serieData.IsDataChanged()) dataChanging = true; float pX = grid.context.x + i * categoryWidth; float zeroY = grid.context.y + yAxis.context.offset; @@ -132,8 +133,8 @@ namespace XCharts.Runtime var minCut = (yMinValue > 0 ? yMinValue : 0); if (valueTotal != 0) { - barHig = (float)((close - open) / valueTotal * grid.context.height); - pY += (float)((open - minCut) / valueTotal * grid.context.height); + barHig = (float) ((close - open) / valueTotal * grid.context.height); + pY += (float) ((open - minCut) / valueTotal * grid.context.height); } serieData.context.stackHeight = barHig; float currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig); @@ -153,17 +154,17 @@ namespace XCharts.Runtime top = chart.ClampInGrid(grid, top); } serie.context.dataPoints.Add(top); - var areaColor = isRise - ? itemStyle.GetColor(theme.serie.candlestickColor) - : itemStyle.GetColor0(theme.serie.candlestickColor0); - var borderColor = isRise - ? itemStyle.GetBorderColor(theme.serie.candlestickBorderColor) - : itemStyle.GetBorderColor0(theme.serie.candlestickBorderColor0); + var areaColor = isRise ? + itemStyle.GetColor(theme.serie.candlestickColor) : + itemStyle.GetColor0(theme.serie.candlestickColor0); + var borderColor = isRise ? + itemStyle.GetBorderColor(theme.serie.candlestickBorderColor) : + itemStyle.GetBorderColor0(theme.serie.candlestickBorderColor0); var itemWidth = Mathf.Abs(prt.x - plb.x); var itemHeight = Mathf.Abs(plt.y - prb.y); var center = new Vector3((plb.x + prt.x) / 2, (plt.y + prb.y) / 2); - var lowPos = new Vector3(center.x, zeroY + (float)((lowest - minCut) / valueTotal * grid.context.height)); - var heighPos = new Vector3(center.x, zeroY + (float)((heighest - minCut) / valueTotal * grid.context.height)); + var lowPos = new Vector3(center.x, zeroY + (float) ((lowest - minCut) / valueTotal * grid.context.height)); + var heighPos = new Vector3(center.x, zeroY + (float) ((heighest - minCut) / valueTotal * grid.context.height)); var openCenterPos = new Vector3(center.x, prb.y); var closeCenterPos = new Vector3(center.x, prt.y); if (barWidth > 2f * borderWidth) @@ -181,7 +182,7 @@ namespace XCharts.Runtime serie.clip, grid); } UGL.DrawBorder(vh, center, itemWidth, itemHeight, 2 * borderWidth, borderColor, 0, - itemStyle.cornerRadius, isYAxis, 0.5f); + itemStyle.cornerRadius, isYAxis, 0.5f); } } else diff --git a/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs b/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs index 3f41cdef..820b00a5 100644 --- a/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs +++ b/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -7,6 +6,8 @@ namespace XCharts.Runtime [SerieHandler(typeof(SimplifiedCandlestickHandler), true)] [DefaultAnimation(AnimationType.LeftToRight)] [SerieExtraComponent()] + [SerieDataExtraComponent()] + [SerieDataExtraField()] public class SimplifiedCandlestick : Serie, INeedSerieContainer, ISimplifiedSerie { public int containerIndex { get; internal set; } diff --git a/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs b/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs index c8f31ac5..455f6005 100644 --- a/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs +++ b/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -41,6 +40,7 @@ namespace XCharts.Runtime param.category = category; param.dimension = 1; param.serieData = serieData; + param.dataCount = serie.dataCount; param.value = 0; param.total = 0; param.color = color; @@ -61,6 +61,7 @@ namespace XCharts.Runtime param.serieIndex = serie.index; param.dimension = i; param.serieData = serieData; + param.dataCount = serie.dataCount; param.value = serieData.GetData(i); param.total = SerieHelper.GetMaxData(serie, i); param.color = color; @@ -93,9 +94,9 @@ namespace XCharts.Runtime float categoryWidth = AxisHelper.GetDataWidth(xAxis, grid.context.width, showData.Count, dataZoom); float barWidth = serie.GetBarWidth(categoryWidth); float gap = (categoryWidth - barWidth) / 2; - int maxCount = serie.maxShow > 0 - ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) - : showData.Count; + int maxCount = serie.maxShow > 0 ? + (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : + showData.Count; bool dataChanging = false; float dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); @@ -118,10 +119,10 @@ namespace XCharts.Runtime var close = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var lowest = serieData.GetCurrData(2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var heighest = serieData.GetCurrData(3, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); - var isRise = yAxis.inverse ? close < open : close > open; - var borderWidth = open == 0 ? 0f - : (itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth - : itemStyle.runtimeBorderWidth); + var isRise = yAxis.inverse ? close<open : close> open; + var borderWidth = open == 0 ? 0f : + (itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth : + itemStyle.runtimeBorderWidth); if (serieData.IsDataChanged()) dataChanging = true; float pX = grid.context.x + i * categoryWidth; float zeroY = grid.context.y + yAxis.context.offset; @@ -132,8 +133,8 @@ namespace XCharts.Runtime var minCut = (yMinValue > 0 ? yMinValue : 0); if (valueTotal != 0) { - barHig = (float)((close - open) / valueTotal * grid.context.height); - pY += (float)((open - minCut) / valueTotal * grid.context.height); + barHig = (float) ((close - open) / valueTotal * grid.context.height); + pY += (float) ((open - minCut) / valueTotal * grid.context.height); } serieData.context.stackHeight = barHig; float currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig); @@ -153,17 +154,17 @@ namespace XCharts.Runtime // top = chart.ClampInGrid(grid, top); // } serie.context.dataPoints.Add(top); - var areaColor = isRise - ? itemStyle.GetColor(theme.serie.candlestickColor) - : itemStyle.GetColor0(theme.serie.candlestickColor0); - var borderColor = isRise - ? itemStyle.GetBorderColor(theme.serie.candlestickBorderColor) - : itemStyle.GetBorderColor0(theme.serie.candlestickBorderColor0); + var areaColor = isRise ? + itemStyle.GetColor(theme.serie.candlestickColor) : + itemStyle.GetColor0(theme.serie.candlestickColor0); + var borderColor = isRise ? + itemStyle.GetBorderColor(theme.serie.candlestickBorderColor) : + itemStyle.GetBorderColor0(theme.serie.candlestickBorderColor0); var itemWidth = Mathf.Abs(prt.x - plb.x); var itemHeight = Mathf.Abs(plt.y - prb.y); var center = new Vector3((plb.x + prt.x) / 2, (plt.y + prb.y) / 2); - var lowPos = new Vector3(center.x, zeroY + (float)((lowest - minCut) / valueTotal * grid.context.height)); - var heighPos = new Vector3(center.x, zeroY + (float)((heighest - minCut) / valueTotal * grid.context.height)); + var lowPos = new Vector3(center.x, zeroY + (float) ((lowest - minCut) / valueTotal * grid.context.height)); + var heighPos = new Vector3(center.x, zeroY + (float) ((heighest - minCut) / valueTotal * grid.context.height)); var openCenterPos = new Vector3(center.x, prb.y); var closeCenterPos = new Vector3(center.x, prt.y); if (barWidth > 2f * borderWidth) @@ -181,7 +182,7 @@ namespace XCharts.Runtime serie.clip, grid); } UGL.DrawBorder(vh, center, itemWidth, itemHeight, 2 * borderWidth, borderColor, 0, - itemStyle.cornerRadius, isYAxis, 0.5f); + itemStyle.cornerRadius, isYAxis, 0.5f); } if (isRise) { diff --git a/Runtime/Serie/Heatmap/Heatmap.cs b/Runtime/Serie/Heatmap/Heatmap.cs index 84c51394..9d713569 100644 --- a/Runtime/Serie/Heatmap/Heatmap.cs +++ b/Runtime/Serie/Heatmap/Heatmap.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -7,7 +6,9 @@ namespace XCharts.Runtime [SerieHandler(typeof(HeatmapHandler), true)] [DefaultAnimation(AnimationType.LeftToRight)] [RequireChartComponent(typeof(VisualMap))] - [SerieExtraComponent(typeof(LabelStyle), typeof(Emphasis))] + [SerieExtraComponent(typeof(LabelStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraComponent(typeof(ItemStyle), typeof(LabelStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraField()] public class Heatmap : Serie, INeedSerieContainer { public int containerIndex { get; internal set; } @@ -19,11 +20,10 @@ namespace XCharts.Runtime serie.itemStyle.borderWidth = 1; serie.itemStyle.borderColor = Color.clear; - var emphasis = serie.AddExtraComponent<Emphasis>(); + var emphasis = serie.AddExtraComponent<EmphasisItemStyle>(); emphasis.show = true; - emphasis.itemStyle.show = true; - emphasis.itemStyle.borderWidth = 1; - emphasis.itemStyle.borderColor = Color.black; + emphasis.borderWidth = 1; + emphasis.borderColor = Color.black; return serie; } } diff --git a/Runtime/Serie/Heatmap/HeatmapHandler.cs b/Runtime/Serie/Heatmap/HeatmapHandler.cs index 4788496a..517033fa 100644 --- a/Runtime/Serie/Heatmap/HeatmapHandler.cs +++ b/Runtime/Serie/Heatmap/HeatmapHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -40,7 +39,7 @@ namespace XCharts.Runtime { var xAxis = chart.GetChartComponent<XAxis>(serie.xAxisIndex); if (xAxis != null) - category = xAxis.GetData((int)serieData.GetData(0)); + category = xAxis.GetData((int) serieData.GetData(0)); } title = serie.serieName; @@ -49,6 +48,7 @@ namespace XCharts.Runtime param.serieName = serie.serieName; param.serieIndex = serie.index; param.dimension = defaultDimension; + param.dataCount = serie.dataCount; param.serieData = serieData; param.color = serieData.context.color; param.marker = SerieHelper.GetItemMarker(serie, serieData, marker); @@ -130,7 +130,7 @@ namespace XCharts.Runtime xAxis.boundaryGap = true; yAxis.boundaryGap = true; var visualMap = chart.GetVisualMapOfSerie(serie); - var emphasis = serie.emphasis; + var emphasisItemStyle = serie.emphasisItemStyle; var xCount = xAxis.data.Count; var yCount = yAxis.data.Count; var xWidth = m_SerieGrid.context.width / xCount; @@ -145,15 +145,15 @@ namespace XCharts.Runtime var rectWid = xWidth - 2 * borderWidth; var rectHig = yWidth - 2 * borderWidth; - var borderColor = serie.itemStyle.opacity > 0 - ? serie.itemStyle.borderColor - : ChartConst.clearColor32; - borderColor.a = (byte)(borderColor.a * serie.itemStyle.opacity); + var borderColor = serie.itemStyle.opacity > 0 ? + serie.itemStyle.borderColor : + ChartConst.clearColor32; + borderColor.a = (byte) (borderColor.a * serie.itemStyle.opacity); - var borderToColor = serie.itemStyle.opacity > 0 - ? serie.itemStyle.borderToColor - : ChartConst.clearColor32; - borderToColor.a = (byte)(borderToColor.a * serie.itemStyle.opacity); + var borderToColor = serie.itemStyle.opacity > 0 ? + serie.itemStyle.borderToColor : + ChartConst.clearColor32; + borderToColor.a = (byte) (borderToColor.a * serie.itemStyle.opacity); serie.context.dataPoints.Clear(); serie.animation.InitProgress(0, xCount); @@ -166,8 +166,8 @@ namespace XCharts.Runtime { var serieData = serie.data[n]; serieData.index = n; - var i = (int)serieData.GetData(0); - var j = (int)serieData.GetData(1); + var i = (int) serieData.GetData(0); + var j = (int) serieData.GetData(1); var dimension = VisualMapHelper.GetDimension(visualMap, serieData.data.Count); if (serie.IsIgnoreValue(serieData, dimension)) { @@ -185,8 +185,8 @@ namespace XCharts.Runtime serieData.context.canShowLabel = false; serieData.context.rect = new Rect(pos.x - rectWid / 2, pos.y - rectHig / 2, rectWid, rectHig); if (value == 0) continue; - if ((value < rangeMin && rangeMin != visualMap.min) - || (value > rangeMax && rangeMax != visualMap.max)) + if ((value < rangeMin && rangeMin != visualMap.min) || + (value > rangeMax && rangeMax != visualMap.max)) { continue; } @@ -199,8 +199,8 @@ namespace XCharts.Runtime serieData.context.canShowLabel = true; serieData.context.color = color; - var highlight = (serieData.context.highlight) - || visualMap.context.pointerIndex > 0; + var highlight = (serieData.context.highlight) || + visualMap.context.pointerIndex > 0; //UGL.DrawRectangle(vh, pos, rectWid / 2, rectHig / 2, color); UGL.DrawRectangle(vh, serieData.context.rect, color); @@ -209,14 +209,14 @@ namespace XCharts.Runtime { UGL.DrawBorder(vh, pos, rectWid, rectHig, borderWidth, borderColor, borderToColor); } - if (visualMap.hoverLink && highlight && emphasis != null && emphasis.show - && emphasis.itemStyle.borderWidth > 0) + if (visualMap.hoverLink && highlight && emphasisItemStyle != null && + emphasisItemStyle.borderWidth > 0) { - var emphasisBorderWidth = emphasis.itemStyle.borderWidth; - var emphasisBorderColor = emphasis.itemStyle.opacity > 0 - ? emphasis.itemStyle.borderColor : ChartConst.clearColor32; - var emphasisBorderToColor = emphasis.itemStyle.opacity > 0 - ? emphasis.itemStyle.borderToColor : ChartConst.clearColor32; + var emphasisBorderWidth = emphasisItemStyle.borderWidth; + var emphasisBorderColor = emphasisItemStyle.opacity > 0 ? + emphasisItemStyle.borderColor : ChartConst.clearColor32; + var emphasisBorderToColor = emphasisItemStyle.opacity > 0 ? + emphasisItemStyle.borderToColor : ChartConst.clearColor32; UGL.DrawBorder(vh, pos, rectWid, rectHig, emphasisBorderWidth, emphasisBorderColor, emphasisBorderToColor); } diff --git a/Runtime/Serie/Line/Line.cs b/Runtime/Serie/Line/Line.cs index 3e48a90a..d504f13c 100644 --- a/Runtime/Serie/Line/Line.cs +++ b/Runtime/Serie/Line/Line.cs @@ -1,4 +1,3 @@ - using System; namespace XCharts.Runtime @@ -13,7 +12,15 @@ namespace XCharts.Runtime typeof(EndLabelStyle), typeof(LineArrow), typeof(AreaStyle), - typeof(Emphasis))] + typeof(EmphasisItemStyle), + typeof(EmphasisLabelStyle))] + [SerieDataExtraComponent( + typeof(ItemStyle), + typeof(LabelStyle), + typeof(SerieSymbol), + typeof(EmphasisItemStyle), + typeof(EmphasisLabelStyle))] + [SerieDataExtraField("m_Ignore")] public class Line : Serie, INeedSerieContainer { public int containerIndex { get; internal set; } diff --git a/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Runtime/Serie/Line/LineHandler.GridCoord.cs index 226e69c1..ff008396 100644 --- a/Runtime/Serie/Line/LineHandler.GridCoord.cs +++ b/Runtime/Serie/Line/LineHandler.GridCoord.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using System.Text; using UnityEngine; @@ -14,13 +13,12 @@ namespace XCharts.Runtime { List<List<SerieData>> m_StackSerieData = new List<List<SerieData>>(); private GridCoord m_SerieGrid; - private float m_LastLineWidth = 0f; public override Vector3 GetSerieDataLabelOffset(SerieData serieData, LabelStyle label) { - var invert = label.autoOffset - && SerieHelper.IsDownPoint(serie, serieData.index) - && (serie.areaStyle == null || !serie.areaStyle.show); + var invert = label.autoOffset && + SerieHelper.IsDownPoint(serie, serieData.index) && + (serie.areaStyle == null || !serie.areaStyle.show); if (invert) { var offset = label.GetOffset(serie.context.insideRadius); @@ -37,7 +35,7 @@ namespace XCharts.Runtime if (m_SerieGrid == null) return; var lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth); - var needCheck = (chart.isPointerInChart && m_SerieGrid.IsPointerEnter()) || m_LegendEnter || m_LastLineWidth != lineWidth; + var needCheck = (chart.isPointerInChart && m_SerieGrid.IsPointerEnter()) || m_LegendEnter; if (!needCheck) { if (m_LastCheckContextFlag != needCheck) @@ -45,10 +43,10 @@ namespace XCharts.Runtime m_LastCheckContextFlag = needCheck; serie.context.pointerItemDataIndex = -1; serie.context.pointerEnter = false; + serie.highlight = false; + serie.ResetInteract(); foreach (var serieData in serie.data) - { - serieData.interact.Reset(); - } + serieData.context.highlight = false; if (SeriesHelper.IsStack(chart.series)) chart.RefreshTopPainter(); else @@ -56,7 +54,6 @@ namespace XCharts.Runtime } return; } - m_LastLineWidth = lineWidth; m_LastCheckContextFlag = needCheck; var themeSymbolSize = chart.theme.serie.lineSymbolSize; var themeSymbolSelectedSize = chart.theme.serie.lineSymbolSelectedSize; @@ -146,6 +143,23 @@ namespace XCharts.Runtime var theme = chart.theme; var interacting = false; var lineArrow = serie.lineArrow; + var visualMap = chart.GetVisualMapOfSerie(serie); + var isVisualMapGradient = VisualMapHelper.IsNeedLineGradient(visualMap); + var isY = ComponentHelper.IsAnyCategoryOfYAxis(chart.components); + + Axis axis; + Axis relativedAxis; + + if (isY) + { + axis = chart.GetChartComponent<YAxis>(serie.yAxisIndex); + relativedAxis = chart.GetChartComponent<XAxis>(serie.xAxisIndex); + } + else + { + axis = chart.GetChartComponent<XAxis>(serie.xAxisIndex); + relativedAxis = chart.GetChartComponent<YAxis>(serie.yAxisIndex); + } for (int i = 0; i < count; i++) { var serieData = serie.GetSerieData(i); @@ -172,20 +186,26 @@ namespace XCharts.Runtime continue; var highlight = serie.data[i].context.highlight || serie.highlight; - var symbolSize = highlight - ? theme.serie.lineSymbolSelectedSize - : theme.serie.lineSymbolSize; + var symbolSize = highlight ? + theme.serie.lineSymbolSelectedSize : + theme.serie.lineSymbolSize; if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting)) { - symbolSize = highlight - ? symbol.GetSelectedSize(serieData.data, symbolSize) - : symbol.GetSize(serieData.data, symbolSize); + symbolSize = highlight ? + symbol.GetSelectedSize(serieData.data, symbolSize) : + symbol.GetSize(serieData.data, symbolSize); serieData.interact.SetValue(ref interacting, symbolSize); symbolSize = serie.animation.GetSysmbolSize(symbolSize); } var symbolColor = SerieHelper.GetItemColor(serie, serieData, theme, serie.index, highlight); var symbolToColor = SerieHelper.GetItemToColor(serie, serieData, theme, serie.index, highlight); var symbolEmptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, theme, serie.index, highlight, false); + + if (isVisualMapGradient) + { + symbolColor = VisualMapHelper.GetLineGradientColor(visualMap, pos, m_SerieGrid, axis, relativedAxis, symbolColor); + symbolToColor = symbolColor; + } var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, theme, highlight); var borderColor = SerieHelper.GetSymbolBorderColor(serie, serieData, theme, highlight); var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, highlight); @@ -289,13 +309,13 @@ namespace XCharts.Runtime var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; var scaleWid = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); - int maxCount = serie.maxShow > 0 - ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) - : showData.Count; + int maxCount = serie.maxShow > 0 ? + (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : + showData.Count; int rate = LineHelper.GetDataAverageRate(serie, m_SerieGrid, maxCount, false); - var totalAverage = serie.sampleAverage > 0 - ? serie.sampleAverage - : DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate); + var totalAverage = serie.sampleAverage > 0 ? + serie.sampleAverage : + DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate); var dataChanging = false; var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); diff --git a/Runtime/Serie/Line/LineHandler.PolarCoord.cs b/Runtime/Serie/Line/LineHandler.PolarCoord.cs index 6a23387f..ea5b5698 100644 --- a/Runtime/Serie/Line/LineHandler.PolarCoord.cs +++ b/Runtime/Serie/Line/LineHandler.PolarCoord.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; using XUGL; @@ -76,7 +75,7 @@ namespace XCharts.Runtime var serieData = serie.data[i]; var angle0 = serieData.context.angle; var angle1 = i >= serie.dataCount - 1 ? angle0 : serie.data[i + 1].context.angle; - + if (pointerAngle >= angle0 && pointerAngle < angle1) { serie.context.pointerItemDataIndex = i; @@ -146,7 +145,7 @@ namespace XCharts.Runtime 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); + GetPolarPos(m_SeriePolar, m_AngleAxis, datas[i + 1], min, max, radius); UGLHelper.GetLinePoints(lp, cp, np, lineWidth, ref ltp, ref lbp, @@ -214,13 +213,13 @@ namespace XCharts.Runtime continue; bool highlight = serieData.context.highlight || serie.highlight; - if ((!symbol.show || !symbol.ShowSymbol(i, count) || serie.IsPerformanceMode()) - && !serieData.context.highlight) + if ((!symbol.show || !symbol.ShowSymbol(i, count) || serie.IsPerformanceMode()) && + !serieData.context.highlight) continue; - var symbolSize = highlight - ? symbol.GetSelectedSize(serieData.data, chart.theme.serie.lineSymbolSize) - : symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize); + var symbolSize = highlight ? + symbol.GetSelectedSize(serieData.data, chart.theme.serie.lineSymbolSize) : + symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize); var symbolColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, n, highlight); var symbolToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, n, highlight); @@ -243,15 +242,15 @@ namespace XCharts.Runtime if (!m_AngleAxis.clockwise) { - angle = m_AngleAxis.GetValueAngle((float)serieData.GetData(1)); + angle = m_AngleAxis.GetValueAngle((float) serieData.GetData(1)); } else { - angle = m_AngleAxis.GetValueAngle((float)serieData.GetData(1)); + angle = m_AngleAxis.GetValueAngle((float) serieData.GetData(1)); } var value = serieData.GetData(0); - var radius = (float)((value - min) / (max - min) * polarRadius); + var radius = (float) ((value - min) / (max - min) * polarRadius); angle = (angle + 360) % 360; serieData.context.angle = angle; diff --git a/Runtime/Serie/Line/LineHandler.cs b/Runtime/Serie/Line/LineHandler.cs index 13d814b9..f15ba49e 100644 --- a/Runtime/Serie/Line/LineHandler.cs +++ b/Runtime/Serie/Line/LineHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using System.Text; using UnityEngine; @@ -69,7 +68,7 @@ namespace XCharts.Runtime var endLabelList = m_SerieGrid.context.endLabelList; if (endLabelList.Count <= 1) return; - endLabelList.Sort(delegate (ChartLabel a, ChartLabel b) + endLabelList.Sort(delegate(ChartLabel a, ChartLabel b) { if (a == null || b == null) return 1; return b.transform.position.y.CompareTo(a.transform.position.y); diff --git a/Runtime/Serie/Line/LineHelper.cs b/Runtime/Serie/Line/LineHelper.cs index c7d7f401..27d06aeb 100644 --- a/Runtime/Serie/Line/LineHelper.cs +++ b/Runtime/Serie/Line/LineHelper.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -16,7 +15,7 @@ namespace XCharts.Runtime var rate = 0; var width = isYAxis ? grid.context.height : grid.context.width; if (sampleDist > 0) - rate = (int)((maxCount - serie.minShow) / (width / sampleDist)); + rate = (int) ((maxCount - serie.minShow) / (width / sampleDist)); if (rate < 1) rate = 1; return rate; @@ -69,12 +68,12 @@ namespace XCharts.Runtime var lp = Vector3.zero; var isVisualMapGradient = VisualMapHelper.IsNeedAreaGradient(visualMap); var areaLerp = !ChartHelper.IsValueEqualsColor(areaColor, areaToColor); - var zsp = isY - ? new Vector3(zero, points[0].position.y) - : new Vector3(points[0].position.x, zero); - var zep = isY - ? new Vector3(zero, points[count - 1].position.y) - : new Vector3(points[count - 1].position.x, zero); + var zsp = isY ? + new Vector3(zero, points[0].position.y) : + new Vector3(points[0].position.x, zero); + var zep = isY ? + new Vector3(zero, points[count - 1].position.y) : + new Vector3(points[count - 1].position.x, zero); var lastDataIsIgnore = false; for (int i = 0; i < points.Count; i++) @@ -189,8 +188,8 @@ namespace XCharts.Runtime var ip = Vector3.zero; if (UGLHelper.GetIntersection(ltp, tp, - new Vector3(progress, -10000), - new Vector3(progress, 10000), ref ip)) + new Vector3(progress, -10000), + new Vector3(progress, 10000), ref ip)) tp = ip; else tp = new Vector3(progress, tp.y); @@ -203,8 +202,8 @@ namespace XCharts.Runtime var ip = Vector3.zero; if (UGLHelper.GetIntersection(lbp, bp, - new Vector3(progress, -10000), - new Vector3(progress, 10000), ref ip)) + new Vector3(progress, -10000), + new Vector3(progress, 10000), ref ip)) bp = ip; else bp = new Vector3(progress, bp.y); @@ -335,7 +334,7 @@ namespace XCharts.Runtime if (dataCount == 2 || isBreak) { AddLineVertToVertexHelper(vh, clp, crp, lineColor, isVisualMapGradient, isLineStyleGradient, - visualMap, serie.lineStyle, grid, axis, relativedAxis, true, lastDataIsIgnore, isIgnore); + visualMap, serie.lineStyle, grid, axis, relativedAxis, true, lastDataIsIgnore, isIgnore); serie.context.lineEndPostion = cp; serie.context.lineEndValue = AxisHelper.GetAxisPositionValue(grid, relativedAxis, cp); break; @@ -346,7 +345,7 @@ namespace XCharts.Runtime { if (bitp) AddLineVertToVertexHelper(vh, itp, ibp, lineColor, isVisualMapGradient, isLineStyleGradient, - visualMap, serie.lineStyle, grid, axis, relativedAxis, true, lastDataIsIgnore, isIgnore); + visualMap, serie.lineStyle, grid, axis, relativedAxis, true, lastDataIsIgnore, isIgnore); else { AddLineVertToVertexHelper(vh, ltp, clp, lineColor, isVisualMapGradient, isLineStyleGradient, @@ -455,7 +454,7 @@ namespace XCharts.Runtime var ignore = serie.context.dataIgnores[i]; var dir = (ep - sp).normalized; var dist = Vector3.Distance(sp, ep); - var segment = (int)(dist / setting.lineSegmentDistance); + var segment = (int) (dist / setting.lineSegmentDistance); serie.context.drawPoints.Add(new PointInfo(sp, ignore)); for (int j = 1; j < segment; j++) { @@ -516,8 +515,8 @@ namespace XCharts.Runtime { var cp = points[i]; var ignore = serie.context.dataIgnores[i]; - if ((isY && Mathf.Abs(lp.x - cp.x) <= lineWidth) - || (!isY && Mathf.Abs(lp.y - cp.y) <= lineWidth)) + if ((isY && Mathf.Abs(lp.x - cp.x) <= lineWidth) || + (!isY && Mathf.Abs(lp.y - cp.y) <= lineWidth)) { serie.context.drawPoints.Add(new PointInfo(cp, ignore)); lp = cp; @@ -526,22 +525,22 @@ namespace XCharts.Runtime switch (serie.lineType) { case LineType.StepStart: - serie.context.drawPoints.Add(new PointInfo(isY - ? new Vector3(cp.x, lp.y) - : new Vector3(lp.x, cp.y), ignore)); + serie.context.drawPoints.Add(new PointInfo(isY ? + new Vector3(cp.x, lp.y) : + new Vector3(lp.x, cp.y), ignore)); break; case LineType.StepMiddle: - serie.context.drawPoints.Add(new PointInfo(isY - ? new Vector3(lp.x, (lp.y + cp.y) / 2) - : new Vector3((lp.x + cp.x) / 2, lp.y), ignore)); - serie.context.drawPoints.Add(new PointInfo(isY - ? new Vector3(cp.x, (lp.y + cp.y) / 2) - : new Vector3((lp.x + cp.x) / 2, cp.y), ignore)); + serie.context.drawPoints.Add(new PointInfo(isY ? + new Vector3(lp.x, (lp.y + cp.y) / 2) : + new Vector3((lp.x + cp.x) / 2, lp.y), ignore)); + serie.context.drawPoints.Add(new PointInfo(isY ? + new Vector3(cp.x, (lp.y + cp.y) / 2) : + new Vector3((lp.x + cp.x) / 2, cp.y), ignore)); break; case LineType.StepEnd: - serie.context.drawPoints.Add(new PointInfo(isY - ? new Vector3(lp.x, cp.y) - : new Vector3(cp.x, lp.y), ignore)); + serie.context.drawPoints.Add(new PointInfo(isY ? + new Vector3(lp.x, cp.y) : + new Vector3(cp.x, lp.y), ignore)); break; } serie.context.drawPoints.Add(new PointInfo(cp, ignore)); diff --git a/Runtime/Serie/Line/SimplifiedLine.cs b/Runtime/Serie/Line/SimplifiedLine.cs index cf4bbdf2..94470d90 100644 --- a/Runtime/Serie/Line/SimplifiedLine.cs +++ b/Runtime/Serie/Line/SimplifiedLine.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -10,6 +9,8 @@ namespace XCharts.Runtime [CoordOptions(typeof(GridCoord))] [DefaultAnimation(AnimationType.LeftToRight)] [SerieExtraComponent(typeof(AreaStyle))] + [SerieDataExtraComponent()] + [SerieDataExtraField()] public class SimplifiedLine : Serie, INeedSerieContainer, ISimplifiedSerie { public int containerIndex { get; internal set; } diff --git a/Runtime/Serie/Line/SimplifiedLineHandler.cs b/Runtime/Serie/Line/SimplifiedLineHandler.cs index 105f1c95..8b2b0e09 100644 --- a/Runtime/Serie/Line/SimplifiedLineHandler.cs +++ b/Runtime/Serie/Line/SimplifiedLineHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -183,13 +182,13 @@ namespace XCharts.Runtime var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; var scaleWid = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); - int maxCount = serie.maxShow > 0 - ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) - : showData.Count; + int maxCount = serie.maxShow > 0 ? + (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : + showData.Count; int rate = LineHelper.GetDataAverageRate(serie, m_SerieGrid, maxCount, false); - var totalAverage = serie.sampleAverage > 0 - ? serie.sampleAverage - : DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate); + var totalAverage = serie.sampleAverage > 0 ? + serie.sampleAverage : + DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate); var dataChanging = false; var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); diff --git a/Runtime/Serie/Parallel/Parallel.cs b/Runtime/Serie/Parallel/Parallel.cs index 72ace289..9d6b7528 100644 --- a/Runtime/Serie/Parallel/Parallel.cs +++ b/Runtime/Serie/Parallel/Parallel.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -7,6 +6,8 @@ namespace XCharts.Runtime [System.Serializable] [SerieHandler(typeof(ParallelHandler), true)] [RequireChartComponent(typeof(ParallelCoord))] + [SerieDataExtraComponent(typeof(ItemStyle), typeof(LabelStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraField()] public class Parallel : Serie, INeedSerieContainer { public int containerIndex { get; internal set; } @@ -19,12 +20,13 @@ namespace XCharts.Runtime for (int i = 0; i < 100; i++) { - var data = new List<double>(){ - Random.Range(0f,50f), - Random.Range(0f,100f), - Random.Range(0f,1000f), - Random.Range(0,5), - }; + var data = new List<double>() + { + Random.Range(0f, 50f), + Random.Range(0f, 100f), + Random.Range(0f, 1000f), + Random.Range(0, 5), + }; serie.AddData(data, "data" + i); } chart.RefreshChart(); diff --git a/Runtime/Serie/Parallel/ParallelHandler.cs b/Runtime/Serie/Parallel/ParallelHandler.cs index f609f7da..38a64534 100644 --- a/Runtime/Serie/Parallel/ParallelHandler.cs +++ b/Runtime/Serie/Parallel/ParallelHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -23,8 +22,7 @@ namespace XCharts.Runtime } private void UpdateSerieContext() - { - } + { } private void DrawParallelSerie(VertexHelper vh, Parallel serie) { @@ -44,13 +42,13 @@ namespace XCharts.Runtime var lineColor = SerieHelper.GetLineColor(serie, null, chart.theme, serie.context.colorIndex, false); var lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth); - float currDetailProgress = !isHorizonal - ? parallel.context.x - : parallel.context.y; + float currDetailProgress = !isHorizonal ? + parallel.context.x : + parallel.context.y; - float totalDetailProgress = !isHorizonal - ? parallel.context.x + parallel.context.width - : parallel.context.y + parallel.context.height; + float totalDetailProgress = !isHorizonal ? + parallel.context.x + parallel.context.width : + parallel.context.y + parallel.context.height; serie.animation.InitProgress(currDetailProgress, totalDetailProgress); diff --git a/Runtime/Serie/Pie/Pie.cs b/Runtime/Serie/Pie/Pie.cs index 0d4980ee..39278796 100644 --- a/Runtime/Serie/Pie/Pie.cs +++ b/Runtime/Serie/Pie/Pie.cs @@ -1,14 +1,16 @@ - namespace XCharts.Runtime { [System.Serializable] [SerieConvert(typeof(Line), typeof(Bar))] [SerieHandler(typeof(PieHandler), true)] [DefaultAnimation(AnimationType.Clockwise)] - [SerieExtraComponent(typeof(LabelStyle), typeof(LabelLine), typeof(Emphasis))] + [SerieExtraComponent(typeof(LabelStyle), typeof(LabelLine), typeof(TitleStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle), typeof(EmphasisLabelLine))] + [SerieDataExtraComponent(typeof(ItemStyle), typeof(LabelStyle), typeof(LabelLine), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle), typeof(EmphasisLabelLine))] + [SerieDataExtraField("m_Ignore", "m_Selected", "m_Radius")] public class Pie : Serie { public override bool useDataNameForColor { get { return true; } } + public override bool titleJustForSerie { get { return true; } } public static Serie AddDefaultSerie(BaseChart chart, string serieName) { diff --git a/Runtime/Serie/Pie/PieHandler.cs b/Runtime/Serie/Pie/PieHandler.cs index 00a912c1..d8ee94ac 100644 --- a/Runtime/Serie/Pie/PieHandler.cs +++ b/Runtime/Serie/Pie/PieHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; @@ -37,6 +36,11 @@ namespace XCharts.Runtime return SerieLabelHelper.GetRealLabelPosition(serie, serieData, label, labelLine); } + public override Vector3 GetSerieDataTitlePosition(SerieData serieData, TitleStyle titleStyle) + { + return serie.context.center; + } + public override void OnLegendButtonClick(int index, string legendName, bool show) { if (!serie.IsLegendName(legendName)) @@ -192,16 +196,16 @@ namespace XCharts.Runtime { continue; } - float degree = serie.pieRoseType == RoseType.Area - ? (totalDegree / showdataCount) - : (float)(totalDegree * value / dataTotalFilterMinAngle); + float degree = serie.pieRoseType == RoseType.Area ? + (totalDegree / showdataCount) : + (float) (totalDegree * value / dataTotalFilterMinAngle); if (serie.minAngle > 0 && degree < serie.minAngle) degree = serie.minAngle; serieData.context.toAngle = startDegree + degree; if (serieData.radius > 0) - serieData.context.outsideRadius = serieData.radius; + serieData.context.outsideRadius = ChartHelper.GetActualValue(serieData.radius, Mathf.Min(chart.chartWidth, chart.chartHeight)); else serieData.context.outsideRadius = serie.pieRoseType > 0 ? - serie.context.insideRadius + (float)((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) : + serie.context.insideRadius + (float) ((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) : serie.context.outsideRadius; if (serieData.context.highlight) { @@ -404,9 +408,9 @@ namespace XCharts.Runtime { var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData); - if (serieLabel != null && serieLabel.show - && labelLine != null && labelLine.show - && (serieLabel.IsDefaultPosition(LabelStyle.Position.Outside))) + if (serieLabel != null && serieLabel.show && + labelLine != null && labelLine.show && + (serieLabel.IsDefaultPosition(LabelStyle.Position.Outside))) { var insideRadius = serieData.context.insideRadius; var outSideRadius = serieData.context.outsideRadius; @@ -469,8 +473,8 @@ namespace XCharts.Runtime pos6 = pos0 + Vector3.left * lineCircleDiff; pos4 = pos6 + Vector3.left * r4; } - var pos5X = (currAngle - startAngle) % 360 > 180 - ? pos2.x - labelLine.lineLength2 : pos2.x + labelLine.lineLength2; + var pos5X = (currAngle - startAngle) % 360 > 180 ? + pos2.x - labelLine.lineLength2 : pos2.x + labelLine.lineLength2; var pos5 = new Vector3(pos5X, pos2.y); switch (labelLine.lineType) { @@ -506,9 +510,9 @@ namespace XCharts.Runtime var serieData = serie.data[i]; if (angle >= serieData.context.startAngle && angle <= serieData.context.toAngle) { - var ndist = serieData.selected - ? Vector2.Distance(local, serieData.context.offsetCenter) - : dist; + var ndist = serieData.selected ? + Vector2.Distance(local, serieData.context.offsetCenter) : + dist; if (ndist >= serieData.context.insideRadius && ndist <= serieData.context.outsideRadius) { return i; diff --git a/Runtime/Serie/Radar/Radar.cs b/Runtime/Serie/Radar/Radar.cs index 7475fe2b..3691d924 100644 --- a/Runtime/Serie/Radar/Radar.cs +++ b/Runtime/Serie/Radar/Radar.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -7,13 +6,15 @@ namespace XCharts.Runtime [System.Serializable] [SerieHandler(typeof(RadarHandler), true)] [RequireChartComponent(typeof(RadarCoord))] - [SerieExtraComponent(typeof(LabelStyle), typeof(LabelLine), typeof(AreaStyle), typeof(Emphasis))] + [SerieExtraComponent(typeof(LabelStyle), typeof(AreaStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraComponent(typeof(ItemStyle), typeof(LabelStyle), typeof(AreaStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraField()] public class Radar : Serie, INeedSerieContainer { public int containerIndex { get; internal set; } public int containterInstanceId { get; internal set; } - public override bool useDataNameForColor { get { return true; } } + public static Serie AddDefaultSerie(BaseChart chart, string serieName) { chart.AddChartComponentWhenNoExist<RadarCoord>(); diff --git a/Runtime/Serie/Radar/RadarHandler.cs b/Runtime/Serie/Radar/RadarHandler.cs index add6cdc2..374455db 100644 --- a/Runtime/Serie/Radar/RadarHandler.cs +++ b/Runtime/Serie/Radar/RadarHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -67,6 +66,7 @@ namespace XCharts.Runtime param.serieIndex = serie.index; param.dimension = i; param.serieData = serieData; + param.dataCount = serie.dataCount; param.value = serieData.GetData(i); param.total = indicator.max; param.color = color; @@ -85,8 +85,8 @@ namespace XCharts.Runtime private void UpdateSerieContext() { - var needCheck = m_LegendEnter - || (chart.isPointerInChart && (m_RadarCoord != null && m_RadarCoord.IsPointerEnter())); + var needCheck = m_LegendEnter || + (chart.isPointerInChart && (m_RadarCoord != null && m_RadarCoord.IsPointerEnter())); var needInteract = false; var needHideAll = false; if (!needCheck) @@ -249,7 +249,7 @@ namespace XCharts.Runtime max = serie.context.dataMax; } } - var radius = (float)(m_RadarCoord.context.dataRadius * (value - min) / (max - min)); + var radius = (float) (m_RadarCoord.context.dataRadius * (value - min) / (max - min)); var currAngle = (n + (m_RadarCoord.positionType == RadarCoord.PositionType.Between ? 0.5f : 0)) * angle; radius *= rate; if (n == 0) @@ -287,14 +287,14 @@ namespace XCharts.Runtime for (int m = 0; m < serieData.context.dataPoints.Count; m++) { var point = serieData.context.dataPoints[m]; - var symbolSize = isHighlight - ? symbol.GetSelectedSize(null, chart.theme.serie.lineSymbolSelectedSize) - : symbol.GetSize(null, chart.theme.serie.lineSymbolSize); + var symbolSize = isHighlight ? + symbol.GetSelectedSize(null, chart.theme.serie.lineSymbolSelectedSize) : + symbol.GetSize(null, chart.theme.serie.lineSymbolSize); if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting)) { - symbolSize = isHighlight - ? symbol.GetSelectedSize(serieData.data, symbolSize) - : symbol.GetSize(serieData.data, symbolSize); + symbolSize = isHighlight ? + symbol.GetSelectedSize(serieData.data, symbolSize) : + symbol.GetSize(serieData.data, symbolSize); serieData.interact.SetValue(ref interacting, symbolSize); symbolSize = serie.animation.GetSysmbolSize(symbolSize); } @@ -305,7 +305,7 @@ namespace XCharts.Runtime var borderColor = SerieHelper.GetSymbolBorderColor(serie, serieData, chart.theme, isHighlight); var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, isHighlight); chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, point, symbolColor, - symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius); + symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius); } } } @@ -378,8 +378,8 @@ namespace XCharts.Runtime { lineColor = radar.outRangeColor; } - var radius = (float)(max < 0 ? radar.context.dataRadius - radar.context.dataRadius * value / max - : radar.context.dataRadius * value / max); + var radius = (float) (max < 0 ? radar.context.dataRadius - radar.context.dataRadius * value / max : + radar.context.dataRadius * value / max); var currAngle = (index + (radar.positionType == RadarCoord.PositionType.Between ? 0.5f : 0)) * angle; radius *= rate; if (index == startIndex) @@ -420,7 +420,7 @@ namespace XCharts.Runtime { if (radar.connectCenter) ChartDrawer.DrawLineStyle(vh, lineStyle, startPoint, centerPos, - chart.theme.serie.lineWidth, LineStyle.Type.Solid, lastColor, lastColor); + chart.theme.serie.lineWidth, LineStyle.Type.Solid, lastColor, lastColor); ChartDrawer.DrawLineStyle(vh, lineStyle, startPoint, firstPoint, chart.theme.serie.lineWidth, LineStyle.Type.Solid, lineColor, radar.lineGradient ? firstColor : lineColor); } @@ -433,9 +433,9 @@ namespace XCharts.Runtime if (!serieData.show) continue; var isHighlight = serie.highlight || serieData.context.highlight || serie.context.pointerEnter; var serieIndex = serieData.index; - var symbolSize = isHighlight - ? serie.symbol.GetSelectedSize(serieData.data, chart.theme.serie.lineSymbolSelectedSize) - : serie.symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize); + var symbolSize = isHighlight ? + serie.symbol.GetSelectedSize(serieData.data, chart.theme.serie.lineSymbolSelectedSize) : + serie.symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize); var symbolColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, serieIndex, isHighlight); var symbolToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, serieIndex, isHighlight); var symbolEmptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, chart.theme, serieIndex, isHighlight, false); @@ -448,7 +448,7 @@ namespace XCharts.Runtime symbolToColor = radar.outRangeColor; } chart.DrawSymbol(vh, serie.symbol.type, symbolSize, symbolBorder, serieData.context.labelPosition, symbolColor, - symbolToColor, symbolEmptyColor, borderColor, serie.symbol.gap, cornerRadius); + symbolToColor, symbolEmptyColor, borderColor, serie.symbol.gap, cornerRadius); } } if (!serie.animation.IsFinish()) @@ -484,9 +484,9 @@ namespace XCharts.Runtime { if (serie.symbol.show && serie.symbol.type != SymbolType.None) { - var symbolSize = isHighlight - ? serie.symbol.GetSelectedSize(serieData.data, chart.theme.serie.lineSymbolSelectedSize) - : serie.symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize); + var symbolSize = isHighlight ? + serie.symbol.GetSelectedSize(serieData.data, chart.theme.serie.lineSymbolSelectedSize) : + serie.symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize); var symbolColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, serieIndex, isHighlight); var symbolToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, serieIndex, isHighlight); var symbolEmptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, chart.theme, serieIndex, isHighlight, false); @@ -496,7 +496,7 @@ namespace XCharts.Runtime foreach (var point in pointList) { chart.DrawSymbol(vh, serie.symbol.type, symbolSize, symbolBorder, point, symbolColor, - symbolToColor, symbolEmptyColor, borderColor, serie.symbol.gap, cornerRadius); + symbolToColor, symbolEmptyColor, borderColor, serie.symbol.gap, cornerRadius); } } } diff --git a/Runtime/Serie/Ring/Ring.cs b/Runtime/Serie/Ring/Ring.cs index 2e8388a4..d97cdb40 100644 --- a/Runtime/Serie/Ring/Ring.cs +++ b/Runtime/Serie/Ring/Ring.cs @@ -1,11 +1,12 @@ - using UnityEngine; namespace XCharts.Runtime { [System.Serializable] [SerieHandler(typeof(RingHandler), true)] - [SerieExtraComponent(typeof(LabelStyle), typeof(TitleStyle), typeof(Emphasis))] + [SerieExtraComponent(typeof(LabelStyle), typeof(TitleStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraComponent(typeof(ItemStyle), typeof(LabelStyle), typeof(TitleStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraField()] public class Ring : Serie { public override bool useDataNameForColor { get { return true; } } diff --git a/Runtime/Serie/Ring/RingHandler.cs b/Runtime/Serie/Ring/RingHandler.cs index 58ed2583..70c5f400 100644 --- a/Runtime/Serie/Ring/RingHandler.cs +++ b/Runtime/Serie/Ring/RingHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using System.Text; using UnityEngine; @@ -94,12 +93,13 @@ namespace XCharts.Runtime param.category = category; param.dimension = defaultDimension; param.serieData = serieData; + param.dataCount = serie.dataCount; param.value = serieData.GetData(0); param.total = serieData.GetData(1); param.color = SerieHelper.GetItemColor(serie, serieData, chart.theme, dataIndex, false); param.marker = SerieHelper.GetItemMarker(serie, serieData, marker); param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); - param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); ; + param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);; param.columns.Clear(); param.columns.Add(param.marker); @@ -155,7 +155,7 @@ namespace XCharts.Runtime if (serieData.IsDataChanged()) dataChanging = true; var value = serieData.GetFirstData(dataChangeDuration); var max = serieData.GetLastData(); - var degree = (float)(360 * value / max); + var degree = (float) (360 * value / max); var startDegree = GetStartAngle(serie); var toDegree = GetToAngle(serie, degree); var itemStyle = SerieHelper.GetItemStyle(serie, serieData, serieData.context.highlight); @@ -215,8 +215,7 @@ namespace XCharts.Runtime } public override void OnPointerDown(PointerEventData eventData) - { - } + { } private float GetStartAngle(Serie serie) { @@ -281,11 +280,11 @@ namespace XCharts.Runtime if (itemStyle.show && itemStyle.borderWidth > 0 && !ChartHelper.IsClearColor(itemStyle.borderColor)) { UGL.DrawDoughnut(vh, serie.context.center, outsideRadius, - outsideRadius + itemStyle.borderWidth, itemStyle.borderColor, - Color.clear, chart.settings.cicleSmoothness); + outsideRadius + itemStyle.borderWidth, itemStyle.borderColor, + Color.clear, chart.settings.cicleSmoothness); UGL.DrawDoughnut(vh, serie.context.center, insideRadius, - insideRadius + itemStyle.borderWidth, itemStyle.borderColor, - Color.clear, chart.settings.cicleSmoothness); + insideRadius + itemStyle.borderWidth, itemStyle.borderColor, + Color.clear, chart.settings.cicleSmoothness); } } diff --git a/Runtime/Serie/Scatter/BaseScatter.cs b/Runtime/Serie/Scatter/BaseScatter.cs index 3696f2ca..bb0cbb53 100644 --- a/Runtime/Serie/Scatter/BaseScatter.cs +++ b/Runtime/Serie/Scatter/BaseScatter.cs @@ -1,4 +1,3 @@ - namespace XCharts.Runtime { [System.Serializable] diff --git a/Runtime/Serie/Scatter/BaseScatterHandler.cs b/Runtime/Serie/Scatter/BaseScatterHandler.cs index 1a09fab4..f8a3aa78 100644 --- a/Runtime/Serie/Scatter/BaseScatterHandler.cs +++ b/Runtime/Serie/Scatter/BaseScatterHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using System.Text; using UnityEngine; @@ -35,6 +34,7 @@ namespace XCharts.Runtime param.serieIndex = serie.index; param.category = category; param.dimension = 1; + param.dataCount = serie.dataCount; param.serieData = serieData; param.color = SerieHelper.GetItemColor(serie, serieData, chart.theme, serie.context.colorIndex, false); param.marker = SerieHelper.GetItemMarker(serie, serieData, marker); @@ -130,8 +130,8 @@ namespace XCharts.Runtime var theme = chart.theme; int maxCount = serie.maxShow > 0 ? - (serie.maxShow > serie.dataCount ? serie.dataCount : serie.maxShow) - : serie.dataCount; + (serie.maxShow > serie.dataCount ? serie.dataCount : serie.maxShow) : + serie.dataCount; serie.animation.InitProgress(0, 1); var rate = serie.animation.GetCurrRate(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); @@ -175,14 +175,14 @@ namespace XCharts.Runtime serie.context.dataPoints.Add(pos); serieData.context.position = pos; var datas = serieData.data; - var symbolSize = serie.highlight || serieData.context.highlight - ? theme.serie.scatterSymbolSelectedSize - : theme.serie.scatterSymbolSize; + var symbolSize = serie.highlight || serieData.context.highlight ? + theme.serie.scatterSymbolSelectedSize : + theme.serie.scatterSymbolSize; if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting)) { - symbolSize = highlight - ? symbol.GetSelectedSize(serieData.data, symbolSize) - : symbol.GetSize(serieData.data, symbolSize); + symbolSize = highlight ? + symbol.GetSelectedSize(serieData.data, symbolSize) : + symbol.GetSize(serieData.data, symbolSize); serieData.interact.SetValue(ref interacting, symbolSize); } @@ -193,7 +193,7 @@ namespace XCharts.Runtime for (int count = 0; count < symbol.animationSize.Count; count++) { var nowSize = symbol.animationSize[count]; - color.a = (byte)(255 * (symbolSize - nowSize) / symbolSize); + color.a = (byte) (255 * (symbolSize - nowSize) / symbolSize); chart.DrawSymbol(vh, symbol.type, nowSize, symbolBorder, pos, color, toColor, emptyColor, borderColor, symbol.gap, cornerRadius); } @@ -235,8 +235,8 @@ namespace XCharts.Runtime var theme = chart.theme; int maxCount = serie.maxShow > 0 ? - (serie.maxShow > serie.dataCount ? serie.dataCount : serie.maxShow) - : serie.dataCount; + (serie.maxShow > serie.dataCount ? serie.dataCount : serie.maxShow) : + serie.dataCount; serie.animation.InitProgress(0, 1); var rate = serie.animation.GetCurrRate(); @@ -297,7 +297,7 @@ namespace XCharts.Runtime for (int count = 0; count < symbol.animationSize.Count; count++) { var nowSize = symbol.animationSize[count]; - color.a = (byte)(255 * (symbolSize - nowSize) / symbolSize); + color.a = (byte) (255 * (symbolSize - nowSize) / symbolSize); chart.DrawSymbol(vh, symbol.type, nowSize, symbolBorder, pos, color, toColor, emptyColor, borderColor, symbol.gap, cornerRadius); } @@ -333,17 +333,17 @@ namespace XCharts.Runtime { if (axis.boundaryGap) { - float tick = (float)(totalWidth / (axis.context.minMaxRange + 1)); - return tick / 2 + (float)(value - axis.context.minValue) * tick; + float tick = (float) (totalWidth / (axis.context.minMaxRange + 1)); + return tick / 2 + (float) (value - axis.context.minValue) * tick; } else { - return (float)((value - axis.context.minValue) / axis.context.minMaxRange * totalWidth); + return (float) ((value - axis.context.minValue) / axis.context.minMaxRange * totalWidth); } } else { - return (float)((value - axis.context.minValue) / axis.context.minMaxRange * totalWidth); + return (float) ((value - axis.context.minValue) / axis.context.minMaxRange * totalWidth); } } } diff --git a/Runtime/Serie/Scatter/EffectScatter.cs b/Runtime/Serie/Scatter/EffectScatter.cs index 1419adae..f2219173 100644 --- a/Runtime/Serie/Scatter/EffectScatter.cs +++ b/Runtime/Serie/Scatter/EffectScatter.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -6,7 +5,9 @@ namespace XCharts.Runtime [System.Serializable] [SerieHandler(typeof(EffectScatterHandler), true)] [CoordOptions(typeof(GridCoord), typeof(SingleAxisCoord))] - [SerieExtraComponent(typeof(LabelStyle), typeof(Emphasis))] + [SerieExtraComponent(typeof(LabelStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraComponent(typeof(ItemStyle), typeof(LabelStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraField("m_Radius")] public class EffectScatter : BaseScatter { public static Serie AddDefaultSerie(BaseChart chart, string serieName) diff --git a/Runtime/Serie/Scatter/EffectScatterHandler.cs b/Runtime/Serie/Scatter/EffectScatterHandler.cs index 5931c3d5..0ace1597 100644 --- a/Runtime/Serie/Scatter/EffectScatterHandler.cs +++ b/Runtime/Serie/Scatter/EffectScatterHandler.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime diff --git a/Runtime/Serie/Scatter/Scatter.cs b/Runtime/Serie/Scatter/Scatter.cs index becaa163..f633d74a 100644 --- a/Runtime/Serie/Scatter/Scatter.cs +++ b/Runtime/Serie/Scatter/Scatter.cs @@ -1,6 +1,3 @@ - - - using UnityEngine; namespace XCharts.Runtime @@ -8,7 +5,9 @@ namespace XCharts.Runtime [System.Serializable] [SerieHandler(typeof(ScatterHandler), true)] [CoordOptions(typeof(GridCoord), typeof(SingleAxisCoord))] - [SerieExtraComponent(typeof(LabelStyle), typeof(Emphasis))] + [SerieExtraComponent(typeof(LabelStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraComponent(typeof(ItemStyle), typeof(LabelStyle), typeof(EmphasisItemStyle), typeof(EmphasisLabelStyle))] + [SerieDataExtraField("m_Radius")] public class Scatter : BaseScatter { public static Serie AddDefaultSerie(BaseChart chart, string serieName) diff --git a/Runtime/Serie/Scatter/ScatterHandler.cs b/Runtime/Serie/Scatter/ScatterHandler.cs index 932ebb85..9174cd3c 100644 --- a/Runtime/Serie/Scatter/ScatterHandler.cs +++ b/Runtime/Serie/Scatter/ScatterHandler.cs @@ -1,8 +1,6 @@ - namespace XCharts.Runtime { [UnityEngine.Scripting.Preserve] internal sealed class ScatterHandler : BaseScatterHandler<Scatter> - { - } + { } } \ No newline at end of file diff --git a/Runtime/Serie/Serie.ExtraComponent.cs b/Runtime/Serie/Serie.ExtraComponent.cs index d3630010..a46d23e3 100644 --- a/Runtime/Serie/Serie.ExtraComponent.cs +++ b/Runtime/Serie/Serie.ExtraComponent.cs @@ -1,21 +1,22 @@ -using UnityEngine; -using System.Collections.Generic; using System; +using System.Collections.Generic; using System.Reflection; +using UnityEngine; namespace XCharts.Runtime { public partial class Serie { - public static Dictionary<Type, string> extraComponentFieldNameDict = new Dictionary<Type, string> - { - {typeof(LabelStyle), "m_Labels"}, - {typeof(LabelLine), "m_LabelLines"}, - {typeof(EndLabelStyle), "m_EndLabels"}, - {typeof(LineArrow), "m_LineArrows"}, - {typeof(AreaStyle), "m_AreaStyles"}, - {typeof(Emphasis), "m_Emphases"}, - {typeof(TitleStyle), "m_TitleStyles"}, + public static Dictionary<Type, string> extraComponentMap = new Dictionary<Type, string> + { { typeof(LabelStyle), "m_Labels" }, + { typeof(LabelLine), "m_LabelLines" }, + { typeof(EndLabelStyle), "m_EndLabels" }, + { typeof(LineArrow), "m_LineArrows" }, + { typeof(AreaStyle), "m_AreaStyles" }, + { typeof(TitleStyle), "m_TitleStyles" }, + { typeof(EmphasisItemStyle), "m_EmphasisItemStyles" }, + { typeof(EmphasisLabelStyle), "m_EmphasisLabels" }, + { typeof(EmphasisLabelLine), "m_EmphasisLabelLines" }, }; [SerializeField] private List<LabelStyle> m_Labels = new List<LabelStyle>(); @@ -24,7 +25,9 @@ namespace XCharts.Runtime [SerializeField] private List<LineArrow> m_LineArrows = new List<LineArrow>(); [SerializeField] private List<AreaStyle> m_AreaStyles = new List<AreaStyle>(); [SerializeField] private List<TitleStyle> m_TitleStyles = new List<TitleStyle>(); - [SerializeField] private List<Emphasis> m_Emphases = new List<Emphasis>(); + [SerializeField] private List<EmphasisItemStyle> m_EmphasisItemStyles = new List<EmphasisItemStyle>(); + [SerializeField] private List<EmphasisLabelStyle> m_EmphasisLabels = new List<EmphasisLabelStyle>(); + [SerializeField] private List<EmphasisLabelLine> m_EmphasisLabelLines = new List<EmphasisLabelLine>(); /// <summary> /// The style of area. @@ -48,9 +51,17 @@ namespace XCharts.Runtime /// </summary> public LineArrow lineArrow { get { return m_LineArrows.Count > 0 ? m_LineArrows[0] : null; } } /// <summary> - /// 高亮的图形样式和文本标签样式。 + /// 高亮的图形样式 /// </summary> - public Emphasis emphasis { get { return m_Emphases.Count > 0 ? m_Emphases[0] : null; } } + public EmphasisItemStyle emphasisItemStyle { get { return m_EmphasisItemStyles.Count > 0 ? m_EmphasisItemStyles[0] : null; } } + /// <summary> + /// 高亮时的标签样式 + /// </summary> + public EmphasisLabelStyle emphasisLabel { get { return m_EmphasisLabels.Count > 0 ? m_EmphasisLabels[0] : null; } } + /// <summary> + /// 高亮时的标签引导线样式 + /// </summary> + public EmphasisLabelLine emphasisLabelLine { get { return m_EmphasisLabelLines.Count > 0 ? m_EmphasisLabelLines[0] : null; } } /// <summary> /// the icon of data. /// |数据项标题样式。 @@ -60,14 +71,14 @@ namespace XCharts.Runtime public void RemoveAllExtraComponent() { var serieType = GetType(); - foreach (var kv in extraComponentFieldNameDict) + foreach (var kv in extraComponentMap) { ReflectionUtil.InvokeListClear(this, serieType.GetField(kv.Value)); } SetAllDirty(); } - public T AddExtraComponent<T>() where T : ChildComponent + public T AddExtraComponent<T>() where T : ChildComponent, ISerieExtraComponent { return AddExtraComponent(typeof(T)) as T; } @@ -80,7 +91,7 @@ namespace XCharts.Runtime if (attr.Contains(type)) { var fieldName = string.Empty; - if (extraComponentFieldNameDict.TryGetValue(type, out fieldName)) + if (extraComponentMap.TryGetValue(type, out fieldName)) { var field = typeof(Serie).GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic); if (ReflectionUtil.InvokeListCount(this, field) <= 0) @@ -114,7 +125,7 @@ namespace XCharts.Runtime if (attr.Contains(type)) { var fieldName = string.Empty; - if (extraComponentFieldNameDict.TryGetValue(type, out fieldName)) + if (extraComponentMap.TryGetValue(type, out fieldName)) { var field = typeof(Serie).GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic); ReflectionUtil.InvokeListClear(this, field); diff --git a/Runtime/Serie/Serie.cs b/Runtime/Serie/Serie.cs index 0774405b..191de67f 100644 --- a/Runtime/Serie/Serie.cs +++ b/Runtime/Serie/Serie.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEngine; @@ -76,8 +75,6 @@ namespace XCharts.Runtime Capsule } - - /// <summary> /// 雷达图类型 /// </summary> @@ -185,8 +182,8 @@ namespace XCharts.Runtime [SerializeField] private LineType m_LineType = LineType.Normal; [SerializeField] private BarType m_BarType = BarType.Normal; [SerializeField] private bool m_BarPercentStack = false; - [SerializeField] private float m_BarWidth = 0.6f; - [SerializeField] private float m_BarGap = 0.3f; // 30% + [SerializeField] private float m_BarWidth = 0; + [SerializeField] private float m_BarGap = 0.1f; [SerializeField] private float m_BarZebraWidth = 4f; [SerializeField] private float m_BarZebraGap = 2f; @@ -204,9 +201,9 @@ namespace XCharts.Runtime [SerializeField] private RoseType m_RoseType = RoseType.None; [SerializeField] private float m_Gap; [SerializeField] private float[] m_Center = new float[2] { 0.5f, 0.48f }; - [SerializeField] private float[] m_Radius = new float[2] { 0, 80 }; + [SerializeField] private float[] m_Radius = new float[2] { 0, 0.28f }; - [SerializeField] [Range(1, 10)] private int m_ShowDataDimension; + [SerializeField][Range(1, 10)] private int m_ShowDataDimension; [SerializeField] private bool m_ShowDataName; [SerializeField] private bool m_ShowDataIcon; [SerializeField] private bool m_Clip = false; @@ -826,7 +823,7 @@ namespace XCharts.Runtime (areaStyle != null && areaStyle.vertsDirty) || (label != null && label.vertsDirty) || (labelLine != null && labelLine.vertsDirty) || - (emphasis != null && emphasis.vertsDirty) || + (emphasisItemStyle != null && emphasisItemStyle.vertsDirty) || (titleStyle != null && titleStyle.vertsDirty) || AnySerieDataVerticesDirty(); } @@ -836,11 +833,13 @@ namespace XCharts.Runtime { get { - return m_ComponentDirty - || symbol.componentDirty - || (titleStyle != null && titleStyle.componentDirty) - || (label != null && label.componentDirty) - || (labelLine != null && labelLine.componentDirty); + return m_ComponentDirty || + symbol.componentDirty || + (titleStyle != null && titleStyle.componentDirty) || + (label != null && label.componentDirty) || + (labelLine != null && labelLine.componentDirty) || + (emphasisLabel != null && emphasisLabel.componentDirty) || + (emphasisLabelLine != null && emphasisLabelLine.componentDirty); } } public override void ClearVerticesDirty() @@ -855,8 +854,8 @@ namespace XCharts.Runtime areaStyle.ClearVerticesDirty(); if (label != null) label.ClearVerticesDirty(); - if (emphasis != null) - emphasis.ClearVerticesDirty(); + if (emphasisItemStyle != null) + emphasisItemStyle.ClearVerticesDirty(); if (lineArrow != null) lineArrow.ClearVerticesDirty(); if (titleStyle != null) @@ -875,8 +874,10 @@ namespace XCharts.Runtime areaStyle.ClearComponentDirty(); if (label != null) label.ClearComponentDirty(); - if (emphasis != null) - emphasis.ClearComponentDirty(); + if (emphasisLabel != null) + emphasisLabel.ClearComponentDirty(); + if (emphasisLabelLine != null) + emphasisLabelLine.ClearComponentDirty(); if (lineArrow != null) lineArrow.ClearComponentDirty(); if (titleStyle != null) @@ -1061,6 +1062,7 @@ namespace XCharts.Runtime public void ResetInteract() { + interact.Reset(); foreach (var serieData in m_Data) serieData.interact.Reset(); } @@ -1451,8 +1453,8 @@ namespace XCharts.Runtime /// <returns></returns> public List<SerieData> GetDataList(DataZoom dataZoom = null) { - if (dataZoom != null && dataZoom.enable - && (dataZoom.IsContainsXAxis(xAxisIndex) || dataZoom.IsContainsYAxis(yAxisIndex))) + if (dataZoom != null && dataZoom.enable && + (dataZoom.IsContainsXAxis(xAxisIndex) || dataZoom.IsContainsYAxis(yAxisIndex))) { SerieHelper.UpdateFilterData(this, dataZoom); return m_FilterData; @@ -1570,10 +1572,18 @@ namespace XCharts.Runtime serieData.context.highlight = flag; } - public float GetBarWidth(float categoryWidth) + public float GetBarWidth(float categoryWidth, int barCount = 0) { - if (m_BarWidth > 1) return m_BarWidth; - else return m_BarWidth * categoryWidth; + if (m_BarWidth == 0) + { + var width = ChartHelper.GetActualValue(0.6f, categoryWidth); + if (barCount == 0) + return width < 1 ? categoryWidth : width; + else + return width / barCount; + } + else + return ChartHelper.GetActualValue(m_BarWidth, categoryWidth); } public bool IsIgnoreIndex(int index, int dimension = 1) @@ -1586,9 +1596,7 @@ namespace XCharts.Runtime public bool IsIgnoreValue(SerieData serieData, int dimension = 1) { - if (serieData.baseInfo != null && serieData.baseInfo.ignore) - return true; - return IsIgnoreValue(serieData.GetData(dimension)); + return serieData.ignore || IsIgnoreValue(serieData.GetData(dimension)); } public bool IsIgnoreValue(double value) @@ -1747,4 +1755,4 @@ namespace XCharts.Runtime return newSerie; } } -} +} \ No newline at end of file diff --git a/Runtime/Serie/SerieContext.cs b/Runtime/Serie/SerieContext.cs index 1298be7b..931513f1 100644 --- a/Runtime/Serie/SerieContext.cs +++ b/Runtime/Serie/SerieContext.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -105,5 +104,6 @@ namespace XCharts.Runtime /// </summary> public List<PointInfo> drawPoints = new List<PointInfo>(); public SerieParams param = new SerieParams(); + public ChartLabel titleObject { get; set; } } } \ No newline at end of file diff --git a/Runtime/Serie/SerieData.cs b/Runtime/Serie/SerieData.cs index 289cf454..50ce21bc 100644 --- a/Runtime/Serie/SerieData.cs +++ b/Runtime/Serie/SerieData.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEngine; @@ -13,19 +12,44 @@ namespace XCharts.Runtime [System.Serializable] public class SerieData : ChildComponent { + public static List<string> extraFieldList = new List<string>() + { + "m_Id", + "m_ParentId", + "m_Ignore", + "m_Selected", + "m_Radius" + }; + public static Dictionary<Type, string> extraComponentMap = new Dictionary<Type, string> + { { typeof(ItemStyle), "m_ItemStyles" }, + { typeof(LabelStyle), "m_Labels" }, + { typeof(LabelLine), "m_LabelLines" }, + { typeof(SerieSymbol), "m_Symbols" }, + { typeof(LineStyle), "m_LineStyles" }, + { typeof(AreaStyle), "m_AreaStyles" }, + { typeof(TitleStyle), "m_TitleStyles" }, + { typeof(EmphasisItemStyle), "m_EmphasisItemStyles" }, + { typeof(EmphasisLabelStyle), "m_EmphasisLabels" }, + { typeof(EmphasisLabelLine), "m_EmphasisLabelLines" }, + }; + [SerializeField] private int m_Index; [SerializeField] private string m_Name; [SerializeField] private string m_Id; [SerializeField] private string m_ParentId; - [SerializeField] private List<SerieDataBaseInfo> m_BaseInfos = new List<SerieDataBaseInfo>(); + [SerializeField] private bool m_Ignore; + [SerializeField] private bool m_Selected; + [SerializeField] private float m_Radius; [SerializeField] private List<ItemStyle> m_ItemStyles = new List<ItemStyle>(); [SerializeField] private List<LabelStyle> m_Labels = new List<LabelStyle>(); [SerializeField] private List<LabelLine> m_LabelLines = new List<LabelLine>(); - [SerializeField] private List<Emphasis> m_Emphases = new List<Emphasis>(); [SerializeField] private List<SerieSymbol> m_Symbols = new List<SerieSymbol>(); [SerializeField] private List<LineStyle> m_LineStyles = new List<LineStyle>(); [SerializeField] private List<AreaStyle> m_AreaStyles = new List<AreaStyle>(); [SerializeField] private List<TitleStyle> m_TitleStyles = new List<TitleStyle>(); + [SerializeField] private List<EmphasisItemStyle> m_EmphasisItemStyles = new List<EmphasisItemStyle>(); + [SerializeField] private List<EmphasisLabelStyle> m_EmphasisLabels = new List<EmphasisLabelStyle>(); + [SerializeField] private List<EmphasisLabelLine> m_EmphasisLabelLines = new List<EmphasisLabelLine>(); [SerializeField] private List<double> m_Data = new List<double>(); [NonSerialized] public SerieDataContext context = new SerieDataContext(); @@ -48,12 +72,28 @@ namespace XCharts.Runtime public string id { get { return m_Id; } set { m_Id = value; } } public string parentId { get { return m_ParentId; } set { m_ParentId = value; } } /// <summary> + /// 是否忽略数据。当为 true 时,数据不进行绘制。 + /// </summary> + public bool ignore + { + get { return m_Ignore; } + set { if (PropertyUtil.SetStruct(ref m_Ignore, value)) SetVerticesDirty(); } + } + /// <summary> + /// 自定义半径。可用在饼图中自定义某个数据项的半径。 + /// </summary> + public float radius { get { return m_Radius; } set { m_Radius = value; } } + /// <summary> + /// Whether the data item is selected. + /// |该数据项是否被选中。 + /// </summary> + public bool selected { get { return m_Selected; } set { m_Selected = value; } } + /// <summary> /// 数据项图例名称。当数据项名称不为空时,图例名称即为系列名称;反之则为索引index。 /// </summary> /// <value></value> public string legendName { get { return string.IsNullOrEmpty(name) ? ChartCached.IntToStr(index) : name; } } - public SerieDataBaseInfo baseInfo { get { return m_BaseInfos.Count > 0 ? m_BaseInfos[0] : null; } } /// <summary> /// 单个数据项的标签设置。 /// </summary> @@ -64,16 +104,24 @@ namespace XCharts.Runtime /// </summary> public ItemStyle itemStyle { get { return m_ItemStyles.Count > 0 ? m_ItemStyles[0] : null; } } /// <summary> - /// 单个数据项的高亮样式设置。 - /// </summary> - public Emphasis emphasis { get { return m_Emphases.Count > 0 ? m_Emphases[0] : null; } } - /// <summary> /// 单个数据项的标记设置。 /// </summary> public SerieSymbol symbol { get { return m_Symbols.Count > 0 ? m_Symbols[0] : null; } } public LineStyle lineStyle { get { return m_LineStyles.Count > 0 ? m_LineStyles[0] : null; } } public AreaStyle areaStyle { get { return m_AreaStyles.Count > 0 ? m_AreaStyles[0] : null; } } public TitleStyle titleStyle { get { return m_TitleStyles.Count > 0 ? m_TitleStyles[0] : null; } } + /// <summary> + /// 高亮的图形样式 + /// </summary> + public EmphasisItemStyle emphasisItemStyle { get { return m_EmphasisItemStyles.Count > 0 ? m_EmphasisItemStyles[0] : null; } } + /// <summary> + /// 高亮时的标签样式 + /// </summary> + public EmphasisLabelStyle emphasisLabel { get { return m_EmphasisLabels.Count > 0 ? m_EmphasisLabels[0] : null; } } + /// <summary> + /// 高亮时的标签引导线样式 + /// </summary> + public EmphasisLabelLine emphasisLabelLine { get { return m_EmphasisLabelLines.Count > 0 ? m_EmphasisLabelLines[0] : null; } } /// <summary> /// An arbitrary dimension data list of data item. @@ -85,8 +133,6 @@ namespace XCharts.Runtime /// |该数据项是否要显示。 /// </summary> public bool show { get { return m_Show; } set { m_Show = value; } } - public float radius { get { return baseInfo != null ? baseInfo.radius : 0; } } - public bool selected { get { return (baseInfo != null && baseInfo.selected) || context.selected; } } private List<double> m_PreviousData = new List<double>(); private List<float> m_DataUpdateTime = new List<float>(); @@ -97,50 +143,49 @@ namespace XCharts.Runtime { get { - return m_VertsDirty - || (baseInfo != null && baseInfo.vertsDirty) - || (labelLine != null && labelLine.vertsDirty) - || (itemStyle != null && itemStyle.vertsDirty) - || (symbol != null && symbol.vertsDirty) - || (lineStyle != null && lineStyle.vertsDirty) - || (areaStyle != null && areaStyle.vertsDirty); + return m_VertsDirty || + (labelLine != null && labelLine.vertsDirty) || + (itemStyle != null && itemStyle.vertsDirty) || + (symbol != null && symbol.vertsDirty) || + (lineStyle != null && lineStyle.vertsDirty) || + (areaStyle != null && areaStyle.vertsDirty) || + (emphasisItemStyle != null && emphasisItemStyle.vertsDirty); } } public override bool componentDirty { get { - return m_ComponentDirty - || (baseInfo != null && baseInfo.componentDirty) - || (labelStyle != null && labelStyle.componentDirty) - || (labelLine != null && labelLine.componentDirty) - || (titleStyle != null && titleStyle.componentDirty) - || (emphasis != null && emphasis.componentDirty); + return m_ComponentDirty || + (labelStyle != null && labelStyle.componentDirty) || + (labelLine != null && labelLine.componentDirty) || + (titleStyle != null && titleStyle.componentDirty) || + (emphasisLabel != null && emphasisLabel.componentDirty) || + (emphasisLabelLine != null && emphasisLabelLine.componentDirty); } } public override void ClearVerticesDirty() { base.ClearVerticesDirty(); - if (baseInfo != null) baseInfo.ClearVerticesDirty(); if (labelLine != null) labelLine.ClearVerticesDirty(); if (itemStyle != null) itemStyle.ClearVerticesDirty(); if (lineStyle != null) lineStyle.ClearVerticesDirty(); if (areaStyle != null) areaStyle.ClearVerticesDirty(); if (symbol != null) symbol.ClearVerticesDirty(); - if (emphasis != null) emphasis.ClearVerticesDirty(); + if (emphasisItemStyle != null) emphasisItemStyle.ClearVerticesDirty(); } public override void ClearComponentDirty() { base.ClearComponentDirty(); - if (baseInfo != null) baseInfo.ClearComponentDirty(); if (labelLine != null) labelLine.ClearComponentDirty(); if (itemStyle != null) itemStyle.ClearComponentDirty(); if (lineStyle != null) lineStyle.ClearComponentDirty(); if (areaStyle != null) areaStyle.ClearComponentDirty(); if (symbol != null) symbol.ClearComponentDirty(); - if (emphasis != null) emphasis.ClearComponentDirty(); + if (emphasisLabel != null) emphasisLabel.ClearComponentDirty(); + if (emphasisLabelLine != null) emphasisLabelLine.ClearComponentDirty(); } public void Reset() @@ -157,73 +202,84 @@ namespace XCharts.Runtime m_PreviousData.Clear(); m_DataUpdateTime.Clear(); m_DataUpdateFlag.Clear(); - m_BaseInfos.Clear(); m_Labels.Clear(); m_LabelLines.Clear(); m_ItemStyles.Clear(); - m_Emphases.Clear(); m_Symbols.Clear(); m_LineStyles.Clear(); m_AreaStyles.Clear(); m_TitleStyles.Clear(); + m_EmphasisItemStyles.Clear(); + m_EmphasisLabels.Clear(); + m_EmphasisLabelLines.Clear(); } - public T GetOrAddComponent<T>() where T : ChildComponent + public T GetOrAddComponent<T>() where T : ChildComponent, ISerieDataComponent + { + return GetOrAddComponent(typeof(T)) as T; + } + + public ISerieDataComponent GetOrAddComponent(Type type) { - var type = typeof(T); if (type == typeof(ItemStyle)) { if (m_ItemStyles.Count == 0) m_ItemStyles.Add(new ItemStyle() { show = true }); - return m_ItemStyles[0] as T; - } - else if (type == typeof(SerieDataBaseInfo)) - { - if (m_BaseInfos.Count == 0) - m_BaseInfos.Add(new SerieDataBaseInfo() { }); - return m_BaseInfos[0] as T; + return m_ItemStyles[0]; } else if (type == typeof(LabelStyle)) { if (m_Labels.Count == 0) m_Labels.Add(new LabelStyle() { show = true }); - return m_Labels[0] as T; + return m_Labels[0]; } else if (type == typeof(LabelLine)) { if (m_LabelLines.Count == 0) m_LabelLines.Add(new LabelLine() { show = true }); - return m_LabelLines[0] as T; + return m_LabelLines[0]; } - else if (type == typeof(Emphasis)) + else if (type == typeof(EmphasisItemStyle)) { - if (m_Emphases.Count == 0) - m_Emphases.Add(new Emphasis() { show = true }); - return m_Emphases[0] as T; + if (m_EmphasisItemStyles.Count == 0) + m_EmphasisItemStyles.Add(new EmphasisItemStyle() { show = true }); + return m_EmphasisItemStyles[0]; + } + else if (type == typeof(EmphasisLabelStyle)) + { + if (m_EmphasisLabels.Count == 0) + m_EmphasisLabels.Add(new EmphasisLabelStyle() { show = true }); + return m_EmphasisLabels[0]; + } + else if (type == typeof(EmphasisLabelLine)) + { + if (m_EmphasisLabelLines.Count == 0) + m_EmphasisLabelLines.Add(new EmphasisLabelLine() { show = true }); + return m_EmphasisLabelLines[0]; } else if (type == typeof(SerieSymbol)) { if (m_Symbols.Count == 0) m_Symbols.Add(new SerieSymbol() { show = true }); - return m_Symbols[0] as T; + return m_Symbols[0]; } else if (type == typeof(LineStyle)) { if (m_LineStyles.Count == 0) m_LineStyles.Add(new LineStyle() { show = true }); - return m_LineStyles[0] as T; + return m_LineStyles[0]; } else if (type == typeof(AreaStyle)) { if (m_AreaStyles.Count == 0) m_AreaStyles.Add(new AreaStyle() { show = true }); - return m_AreaStyles[0] as T; + return m_AreaStyles[0]; } else if (type == typeof(TitleStyle)) { if (m_TitleStyles.Count == 0) m_TitleStyles.Add(new TitleStyle() { show = true }); - return m_TitleStyles[0] as T; + return m_TitleStyles[0]; } else { @@ -233,12 +289,13 @@ namespace XCharts.Runtime public void RemoveAllComponent() { - m_BaseInfos.Clear(); m_ItemStyles.Clear(); m_Labels.Clear(); m_LabelLines.Clear(); m_Symbols.Clear(); - m_Emphases.Clear(); + m_EmphasisItemStyles.Clear(); + m_EmphasisLabels.Clear(); + m_EmphasisLabelLines.Clear(); m_LineStyles.Clear(); m_AreaStyles.Clear(); m_TitleStyles.Clear(); @@ -246,17 +303,23 @@ namespace XCharts.Runtime public void RemoveComponent<T>() where T : ISerieDataComponent { - var type = typeof(T); + RemoveComponent(typeof(T)); + } + + public void RemoveComponent(Type type) + { if (type == typeof(ItemStyle)) m_ItemStyles.Clear(); - else if (type == typeof(SerieDataBaseInfo)) - m_BaseInfos.Clear(); else if (type == typeof(LabelStyle)) m_Labels.Clear(); else if (type == typeof(LabelLine)) m_LabelLines.Clear(); - else if (type == typeof(Emphasis)) - m_Emphases.Clear(); + else if (type == typeof(EmphasisItemStyle)) + m_EmphasisItemStyles.Clear(); + else if (type == typeof(EmphasisLabelStyle)) + m_EmphasisLabels.Clear(); + else if (type == typeof(EmphasisLabelLine)) + m_EmphasisLabelLines.Clear(); else if (type == typeof(SerieSymbol)) m_Symbols.Clear(); else if (type == typeof(LineStyle)) @@ -483,4 +546,4 @@ namespace XCharts.Runtime return UGLHelper.IsPointInPolygon(p, m_PolygonPoints); } } -} +} \ No newline at end of file diff --git a/Runtime/Serie/SerieDataContext.cs b/Runtime/Serie/SerieDataContext.cs index 17ca5aba..7f251297 100644 --- a/Runtime/Serie/SerieDataContext.cs +++ b/Runtime/Serie/SerieDataContext.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -57,7 +56,15 @@ namespace XCharts.Runtime /// Whether the data item is highlighted. /// |该数据项是否被高亮,一般由鼠标悬停或图例悬停触发高亮。 /// </summary> - public bool highlight; + public bool highlight + { + get { return m_Highligth; } + set + { + m_Highligth = value; + } + } + private bool m_Highligth; public bool selected; public void Reset() diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index 37541167..084432df 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using System.Text; using UnityEngine; @@ -34,8 +33,7 @@ namespace XCharts.Runtime public virtual void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category, string marker, string itemFormatter, string numericFormatter, - ref List<SerieParams> paramList, ref string title) - { } + ref List<SerieParams> paramList, ref string title) { } public virtual void OnLegendButtonClick(int index, string legendName, bool show) { } public virtual void OnLegendButtonEnter(int index, string legendName) { } public virtual void OnLegendButtonExit(int index, string legendName) { } @@ -63,7 +61,7 @@ namespace XCharts.Runtime internal override void SetSerie(Serie serie) { - this.serie = (T)serie; + this.serie = (T) serie; this.serie.context.param.serieType = typeof(T); m_NeedInitComponent = true; AnimationStyleHelper.UpdateSerieAnimation(serie); @@ -119,6 +117,7 @@ namespace XCharts.Runtime if (serie.vertsDirty) { chart.RefreshPainter(serie); + serie.ResetInteract(); serie.ClearVerticesDirty(); } } @@ -220,7 +219,7 @@ namespace XCharts.Runtime var serieData = serie.data[j]; serieData.index = count; serieData.labelObject = null; - if (AddSerieLabel(m_SerieLabelRoot, serie, serieData, ref count)) + if (AddSerieLabel(m_SerieLabelRoot, serieData, ref count)) { m_InitedLabel = true; count++; @@ -229,7 +228,7 @@ namespace XCharts.Runtime RefreshLabelInternal(); } - protected bool AddSerieLabel(GameObject serieLabelRoot, Serie serie, SerieData serieData, ref int count) + protected bool AddSerieLabel(GameObject serieLabelRoot, SerieData serieData, ref int count) { if (serieData == null) return false; @@ -245,15 +244,14 @@ namespace XCharts.Runtime var serieEmphasisLabel = SerieHelper.GetSerieEmphasisLabel(serie, serieData); - if (!serieLabel.show - && (serieEmphasisLabel == null || !serieEmphasisLabel.show)) + if (!serieLabel.show && + (serieEmphasisLabel == null || !serieEmphasisLabel.show)) return false; - var colorIndex = serie.useDataNameForColor ? serieData.index : serie.index; - var dataAutoColor = (Color)SerieHelper.GetItemColor(serie, serieData, chart.theme, colorIndex, false); + var dataAutoColor = GetSerieDataAutoColor(serieData); var textName = ChartCached.GetSerieLabelName(s_SerieLabelObjectName, serie.index, serieData.index); var label = ChartHelper.AddChartLabel(textName, serieLabelRoot.transform, serieLabel, chart.theme.common, - "", dataAutoColor, TextAnchor.MiddleCenter); + "", dataAutoColor, TextAnchor.MiddleCenter); label.SetActive(serieLabel.show); serieData.labelObject = label; @@ -261,7 +259,7 @@ namespace XCharts.Runtime { foreach (var childSerieData in serieData.context.children) { - AddSerieLabel(serieLabelRoot, serie, childSerieData, ref count); + AddSerieLabel(serieLabelRoot, childSerieData, ref count); count++; } } @@ -280,7 +278,7 @@ namespace XCharts.Runtime return; } InitRoot(); - var dataAutoColor = (Color)chart.GetLegendRealShowNameColor(serie.legendName); + var dataAutoColor = (Color) chart.GetLegendRealShowNameColor(serie.legendName); m_EndLabel = ChartHelper.AddChartLabel(s_SerieEndLabelObjectName, m_SerieRoot.transform, serie.endLabel, chart.theme.common, "", dataAutoColor, TextAnchor.MiddleLeft); m_EndLabel.SetActive(serie.endLabel.show); @@ -297,19 +295,59 @@ namespace XCharts.Runtime ChartHelper.RemoveComponent<Text>(serieTitleRoot); SerieHelper.UpdateCenter(serie, chart.chartPosition, chart.chartWidth, chart.chartHeight); - for (int i = 0; i < serie.dataCount; i++) + + if (serie.titleJustForSerie) { - var serieData = serie.data[i]; - var titleStyle = SerieHelper.GetTitleStyle(serie, serieData); - if (titleStyle == null) continue; - var color = chart.GetItemColor(serie, serieData); - var label = ChartHelper.AddChartLabel("title_" + i, serieTitleRoot.transform, titleStyle, chart.theme.common, - serieData.name, color, TextAnchor.MiddleCenter); - serieData.titleObject = label; - label.SetActive(titleStyle.show); - var labelPosition = GetSerieDataTitlePosition(serieData, titleStyle); - var offset = titleStyle.GetOffset(serie.context.insideRadius); - label.SetPosition(labelPosition + offset); + var titleStyle = SerieHelper.GetTitleStyle(serie, null); + if (titleStyle != null) + { + var color = chart.GetItemColor(serie, null); + var content = string.Empty; + if (string.IsNullOrEmpty(titleStyle.formatter)) + { + content = serie.serieName; + } + else + { + content = titleStyle.formatter; + FormatterHelper.ReplaceContent(ref content, 0, titleStyle.numericFormatter, serie, chart); + } + var label = ChartHelper.AddChartLabel("title_" + 0, serieTitleRoot.transform, titleStyle, chart.theme.common, + content, color, TextAnchor.MiddleCenter); + serie.context.titleObject = label; + label.SetActive(titleStyle.show); + var labelPosition = GetSerieDataTitlePosition(null, titleStyle); + var offset = titleStyle.GetOffset(serie.context.insideRadius); + label.SetPosition(labelPosition + offset); + } + } + else + { + for (int i = 0; i < serie.dataCount; i++) + { + var serieData = serie.data[i]; + var titleStyle = SerieHelper.GetTitleStyle(serie, serieData); + if (titleStyle == null) continue; + var color = chart.GetItemColor(serie, serieData); + var content = string.Empty; + if (string.IsNullOrEmpty(titleStyle.formatter)) + { + content = serieData.name; + } + else + { + content = titleStyle.formatter; + FormatterHelper.ReplaceContent(ref content, 0, titleStyle.numericFormatter, serie, chart); + } + FormatterHelper.ReplaceContent(ref content, i, titleStyle.numericFormatter, serie, chart); + var label = ChartHelper.AddChartLabel("title_" + i, serieTitleRoot.transform, titleStyle, chart.theme.common, + content, color, TextAnchor.MiddleCenter); + serieData.titleObject = label; + label.SetActive(titleStyle.show); + var labelPosition = GetSerieDataTitlePosition(serieData, titleStyle); + var offset = titleStyle.GetOffset(serie.context.insideRadius); + label.SetPosition(labelPosition + offset); + } } } @@ -319,7 +357,6 @@ namespace XCharts.Runtime return; var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); - foreach (var serieData in serie.data) { if (serieData.labelObject == null) @@ -329,23 +366,29 @@ namespace XCharts.Runtime var isHighlight = (serieData.context.highlight && emphasisLabel != null && emphasisLabel.show); var isIgnore = serie.IsIgnoreIndex(serieData.index, defaultDimension); var currLabel = isHighlight && emphasisLabel != null ? emphasisLabel : serieLabel; - if (serie.show - && currLabel != null - && (currLabel.show || isHighlight) - && serieData.context.canShowLabel - && !isIgnore) + if (serie.show && + currLabel != null && + (currLabel.show || isHighlight) && + serieData.context.canShowLabel && + !isIgnore) { var value = serieData.GetCurrData(defaultDimension, dataChangeDuration); var total = serie.GetDataTotal(defaultDimension, serieData); var color = chart.GetItemColor(serie, serieData); - var content = string.IsNullOrEmpty(currLabel.formatter) - ? ChartCached.NumberToStr(value, serieLabel.numericFormatter) - : SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, + var content = string.IsNullOrEmpty(currLabel.formatter) ? + ChartCached.NumberToStr(value, serieLabel.numericFormatter) : + SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, currLabel, color); serieData.SetLabelActive(!isIgnore); serieData.labelObject.SetText(content); UpdateLabelPosition(serieData, currLabel); + if (currLabel.textStyle.autoColor) + { + var dataAutoColor = GetSerieDataAutoColor(serieData); + if (!ChartHelper.IsClearColor(dataAutoColor)) + serieData.labelObject.SetTextColor(dataAutoColor); + } } else { @@ -368,7 +411,7 @@ namespace XCharts.Runtime { var value = serie.context.lineEndValue; var content = SerieLabelHelper.GetFormatterContent(serie, null, value, 0, - endLabelStyle, Color.clear); + endLabelStyle, Color.clear); m_EndLabel.SetText(content); m_EndLabel.SetPosition(serie.context.lineEndPostion + endLabelStyle.offset); } @@ -384,9 +427,9 @@ namespace XCharts.Runtime public virtual Vector3 GetSerieDataLabelPosition(SerieData serieData, LabelStyle label) { - return ChartHelper.IsZeroVector(serieData.context.labelPosition) - ? serieData.context.position - : serieData.context.labelPosition; + return ChartHelper.IsZeroVector(serieData.context.labelPosition) ? + serieData.context.position : + serieData.context.labelPosition; } public virtual Vector3 GetSerieDataLabelOffset(SerieData serieData, LabelStyle label) @@ -399,6 +442,12 @@ namespace XCharts.Runtime return serieData.context.position; } + public virtual Color GetSerieDataAutoColor(SerieData serieData) + { + var colorIndex = serie.useDataNameForColor ? serieData.index : serie.index; + return (Color) SerieHelper.GetItemColor(serie, serieData, chart.theme, colorIndex, false, false); + } + protected void UpdateCoordSerieParams(ref List<SerieParams> paramList, ref string title, int dataIndex, bool showCategory, string category, string marker, string itemFormatter, string numericFormatter) @@ -423,6 +472,7 @@ namespace XCharts.Runtime param.category = category; param.dimension = 1; param.serieData = serieData; + param.dataCount = serie.dataCount; param.value = serieData.GetData(1); param.total = serie.yTotal; param.color = SerieHelper.GetItemColor(serie, serieData, chart.theme, serie.context.colorIndex, false); @@ -464,6 +514,7 @@ namespace XCharts.Runtime param.category = category; param.dimension = dimension; param.serieData = serieData; + param.dataCount = serie.dataCount; param.value = serieData.GetData(param.dimension); param.total = SerieHelper.GetMaxData(serie, dimension); param.color = SerieHelper.GetItemColor(serie, serieData, chart.theme, colorIndex, false); diff --git a/Runtime/Serie/SerieParams.cs b/Runtime/Serie/SerieParams.cs index 59392dc5..d2948a8c 100644 --- a/Runtime/Serie/SerieParams.cs +++ b/Runtime/Serie/SerieParams.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEngine; @@ -14,6 +13,7 @@ namespace XCharts.Runtime public string category; public int dimension; public SerieData serieData; + public int dataCount; public double value; public double total; public Color32 color; diff --git a/Runtime/Theme/AxisTheme.cs b/Runtime/Theme/AxisTheme.cs index 3f73869c..be4496be 100644 --- a/Runtime/Theme/AxisTheme.cs +++ b/Runtime/Theme/AxisTheme.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; using UnityEngine; @@ -147,27 +146,30 @@ namespace XCharts.Runtime m_LineColor = ColorUtil.GetColor("#514D4D"); m_TickColor = ColorUtil.GetColor("#514D4D"); m_SplitLineColor = ColorUtil.GetColor("#51515120"); - m_SplitAreaColors = new List<Color32>{ - new Color32(250,250,250,77), - new Color32(200,200,200,77) + m_SplitAreaColors = new List<Color32> + { + new Color32(250, 250, 250, 77), + new Color32(200, 200, 200, 77) }; break; case ThemeType.Light: m_LineColor = ColorUtil.GetColor("#514D4D"); m_TickColor = ColorUtil.GetColor("#514D4D"); m_SplitLineColor = ColorUtil.GetColor("#51515120"); - m_SplitAreaColors = new List<Color32>{ - new Color32(250,250,250,77), - new Color32(200,200,200,77) + m_SplitAreaColors = new List<Color32> + { + new Color32(250, 250, 250, 77), + new Color32(200, 200, 200, 77) }; break; case ThemeType.Dark: m_LineColor = ColorUtil.GetColor("#B9B8CE"); m_TickColor = ColorUtil.GetColor("#B9B8CE"); m_SplitLineColor = ColorUtil.GetColor("#484753"); - m_SplitAreaColors = new List<Color32>{ - new Color32(255,255,255,(byte)(0.02f * 255)), - new Color32(255,255,255,(byte)(0.05f * 255)) + m_SplitAreaColors = new List<Color32> + { + new Color32(255, 255, 255, (byte) (0.02f * 255)), + new Color32(255, 255, 255, (byte) (0.05f * 255)) }; break; } @@ -195,32 +197,28 @@ namespace XCharts.Runtime public class AxisTheme : BaseAxisTheme { public AxisTheme(ThemeType theme) : base(theme) - { - } + { } } [Serializable] public class RadiusAxisTheme : BaseAxisTheme { public RadiusAxisTheme(ThemeType theme) : base(theme) - { - } + { } } [Serializable] public class AngleAxisTheme : BaseAxisTheme { public AngleAxisTheme(ThemeType theme) : base(theme) - { - } + { } } [Serializable] public class PolarAxisTheme : BaseAxisTheme { public PolarAxisTheme(ThemeType theme) : base(theme) - { - } + { } } [Serializable] diff --git a/Runtime/Theme/ComponentTheme.cs b/Runtime/Theme/ComponentTheme.cs index f9f8144e..e68fdfb8 100644 --- a/Runtime/Theme/ComponentTheme.cs +++ b/Runtime/Theme/ComponentTheme.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; #if dUI_TextMeshPro diff --git a/Runtime/Theme/DataZoomTheme.cs b/Runtime/Theme/DataZoomTheme.cs index cd5c8582..0c4a8862 100644 --- a/Runtime/Theme/DataZoomTheme.cs +++ b/Runtime/Theme/DataZoomTheme.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -103,7 +102,7 @@ namespace XCharts.Runtime break; case ThemeType.Dark: m_TextColor = ColorUtil.GetColor("#B9B8CE"); - m_FillerColor = new Color32(135, 163, 206, (byte)(0.2f * 255)); + m_FillerColor = new Color32(135, 163, 206, (byte) (0.2f * 255)); m_BorderColor = ColorUtil.GetColor("#71708A"); m_DataLineColor = ColorUtil.GetColor("#71708A"); m_DataAreaColor = ColorUtil.GetColor("#71708A"); diff --git a/Runtime/Theme/LegendTheme.cs b/Runtime/Theme/LegendTheme.cs index aab9e9ec..259abd4c 100644 --- a/Runtime/Theme/LegendTheme.cs +++ b/Runtime/Theme/LegendTheme.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; #if dUI_TextMeshPro @@ -31,7 +30,7 @@ namespace XCharts.Runtime public LegendTheme(ThemeType theme) : base(theme) { m_UnableColor = ColorUtil.GetColor("#cccccc"); - + } } } \ No newline at end of file diff --git a/Runtime/Theme/SerieTheme.cs b/Runtime/Theme/SerieTheme.cs index f9ec2605..f22e0c68 100644 --- a/Runtime/Theme/SerieTheme.cs +++ b/Runtime/Theme/SerieTheme.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; diff --git a/Runtime/Theme/SubTitleTheme.cs b/Runtime/Theme/SubTitleTheme.cs index cce69a4d..7e0ae934 100644 --- a/Runtime/Theme/SubTitleTheme.cs +++ b/Runtime/Theme/SubTitleTheme.cs @@ -1,4 +1,3 @@ - using System; namespace XCharts.Runtime diff --git a/Runtime/Theme/Theme.cs b/Runtime/Theme/Theme.cs index 7eb5b066..da0b32cc 100644 --- a/Runtime/Theme/Theme.cs +++ b/Runtime/Theme/Theme.cs @@ -1,8 +1,7 @@ - -using System.Collections.Generic; -using UnityEngine; using System; +using System.Collections.Generic; using System.Text; +using UnityEngine; #if dUI_TextMeshPro using TMPro; #endif @@ -56,7 +55,6 @@ namespace XCharts.Runtime set { PropertyUtil.SetClass(ref m_ThemeName, value); } } - /// <summary> /// the contrast color of chart. /// |对比色。 @@ -247,8 +245,12 @@ namespace XCharts.Runtime { switch (m_ThemeType) { - case ThemeType.Default: ResetToDefaultTheme(this); return true; - case ThemeType.Dark: ResetToDarkTheme(this); return true; + case ThemeType.Default: + ResetToDefaultTheme(this); + return true; + case ThemeType.Dark: + ResetToDarkTheme(this); + return true; case ThemeType.Custom: return false; } @@ -267,7 +269,6 @@ namespace XCharts.Runtime return theme; } - /// <summary> /// default theme. /// |默认主题。 @@ -383,7 +384,7 @@ namespace XCharts.Runtime { Color color; ColorUtility.TryParseHtmlString(hexColorStr, out color); - return (Color32)color; + return (Color32) color; } public void SetColorPalette(List<string> hexColorStringList) diff --git a/Runtime/Theme/ThemeStyle.cs b/Runtime/Theme/ThemeStyle.cs index 394e3af9..8c3f2ab7 100644 --- a/Runtime/Theme/ThemeStyle.cs +++ b/Runtime/Theme/ThemeStyle.cs @@ -1,8 +1,7 @@ - -using System.Collections.Generic; -using UnityEngine; using System; +using System.Collections.Generic; using System.Text; +using UnityEngine; #if dUI_TextMeshPro using TMPro; #endif @@ -230,9 +229,8 @@ namespace XCharts.Runtime { Color color; ColorUtility.TryParseHtmlString(hexColorStr, out color); - return (Color32)color; + return (Color32) color; } - } } \ No newline at end of file diff --git a/Runtime/Theme/TitleTheme.cs b/Runtime/Theme/TitleTheme.cs index c914ce03..e675cf56 100644 --- a/Runtime/Theme/TitleTheme.cs +++ b/Runtime/Theme/TitleTheme.cs @@ -1,4 +1,3 @@ - using System; namespace XCharts.Runtime diff --git a/Runtime/Theme/TooltipTheme.cs b/Runtime/Theme/TooltipTheme.cs index 882cb655..a0d0dab1 100644 --- a/Runtime/Theme/TooltipTheme.cs +++ b/Runtime/Theme/TooltipTheme.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; diff --git a/Runtime/Theme/VisualMapTheme.cs b/Runtime/Theme/VisualMapTheme.cs index aa5cfc83..3810838d 100644 --- a/Runtime/Theme/VisualMapTheme.cs +++ b/Runtime/Theme/VisualMapTheme.cs @@ -1,4 +1,3 @@ - using System; using UnityEngine; @@ -10,7 +9,7 @@ namespace XCharts.Runtime [SerializeField] protected float m_BorderWidth; [SerializeField] protected Color32 m_BorderColor; [SerializeField] protected Color32 m_BackgroundColor; - [SerializeField] [Range(10, 50)] protected float m_TriangeLen = 20f; + [SerializeField][Range(10, 50)] protected float m_TriangeLen = 20f; /// <summary> /// the width of border. diff --git a/Runtime/Utilities/ColorUtil.cs b/Runtime/Utilities/ColorUtil.cs index 000f3999..ab650e4f 100644 --- a/Runtime/Utilities/ColorUtil.cs +++ b/Runtime/Utilities/ColorUtil.cs @@ -1,4 +1,3 @@ - using UnityEngine; namespace XCharts.Runtime @@ -17,7 +16,7 @@ namespace XCharts.Runtime { Color color; ColorUtility.TryParseHtmlString(hexColorStr, out color); - return (Color32)color; + return (Color32) color; } } } \ No newline at end of file diff --git a/Runtime/Utilities/DateTimeUtil.cs b/Runtime/Utilities/DateTimeUtil.cs index c9d00bc9..361218f2 100644 --- a/Runtime/Utilities/DateTimeUtil.cs +++ b/Runtime/Utilities/DateTimeUtil.cs @@ -1,4 +1,3 @@ - using System; using System.Collections.Generic; @@ -24,20 +23,19 @@ namespace XCharts.Runtime private static string s_SecondDateFormatter = "HH:mm:ss"; //private static string s_DateFormatter = "yyyy-MM-dd HH:mm:ss"; - public static int GetTimestamp() { - return (int)(DateTime.Now - k_DateTime1970).TotalSeconds; + return (int) (DateTime.Now - k_DateTime1970).TotalSeconds; } public static int GetTimestamp(DateTime time) { - return (int)(time - k_DateTime1970).TotalSeconds; + return (int) (time - k_DateTime1970).TotalSeconds; } public static DateTime GetDateTime(int timestamp) { - long span = ((long)timestamp) * 10000000; + long span = ((long) timestamp) * 10000000; return k_DateTime1970.Add(new TimeSpan(span)); } @@ -50,15 +48,15 @@ namespace XCharts.Runtime } else if (range >= DateTimeUtil.ONE_MONTH * DateTimeUtil.MIN_TIME_SPLIT_NUMBER) { - dateString = dateTime.Month == 1 - ? dateTime.ToString(s_YearDateFormatter) - : XCSettings.lang.GetMonthAbbr(dateTime.Month); + dateString = dateTime.Month == 1 ? + dateTime.ToString(s_YearDateFormatter) : + XCSettings.lang.GetMonthAbbr(dateTime.Month); } else if (range >= DateTimeUtil.ONE_DAY * DateTimeUtil.MIN_TIME_SPLIT_NUMBER) { - dateString = dateTime.Day == 1 - ? XCSettings.lang.GetMonthAbbr(dateTime.Month) - : XCSettings.lang.GetDay(dateTime.Day); + dateString = dateTime.Day == 1 ? + XCSettings.lang.GetMonthAbbr(dateTime.Month) : + XCSettings.lang.GetDay(dateTime.Day); } else if (range >= DateTimeUtil.ONE_HOUR * DateTimeUtil.MIN_TIME_SPLIT_NUMBER) { @@ -87,6 +85,7 @@ namespace XCharts.Runtime list.Clear(); var range = maxTimestamp - minTimestamp; if (range <= 0) return; + if (splitNumber <= 0) splitNumber = 1; var dtMin = DateTimeUtil.GetDateTime(minTimestamp); var dtMax = DateTimeUtil.GetDateTime(maxTimestamp); if (range >= ONE_YEAR * MIN_TIME_SPLIT_NUMBER) diff --git a/Runtime/Utilities/DefineSymbolsUtil.cs b/Runtime/Utilities/DefineSymbolsUtil.cs index 811e636d..12a24c82 100644 --- a/Runtime/Utilities/DefineSymbolsUtil.cs +++ b/Runtime/Utilities/DefineSymbolsUtil.cs @@ -16,7 +16,7 @@ namespace XCharts.Runtime { var flag = false; var num = 0; - foreach (var buildTargetGroup in (BuildTargetGroup[])Enum.GetValues(typeof(BuildTargetGroup))) + foreach (var buildTargetGroup in (BuildTargetGroup[]) Enum.GetValues(typeof(BuildTargetGroup))) { if (IsValidBuildTargetGroup(buildTargetGroup)) { @@ -39,7 +39,7 @@ namespace XCharts.Runtime { var flag = false; var num = 0; - foreach (var buildTargetGroup in (BuildTargetGroup[])Enum.GetValues(typeof(BuildTargetGroup))) + foreach (var buildTargetGroup in (BuildTargetGroup[]) Enum.GetValues(typeof(BuildTargetGroup))) { if (IsValidBuildTargetGroup(buildTargetGroup)) { @@ -73,8 +73,8 @@ namespace XCharts.Runtime var method1 = type.GetMethod("GetTargetStringFromBuildTargetGroup", BindingFlags.Static | BindingFlags.NonPublic); var method2 = typeof(PlayerSettings).GetMethod("GetPlatformName", BindingFlags.Static | BindingFlags.NonPublic); if (method1 == null || method2 == null) return true; - var str1 = (string)method1.Invoke(null, new object[] { group }); - var str2 = (string)method2.Invoke(null, new object[] { group }); + var str1 = (string) method1.Invoke(null, new object[] { group }); + var str2 = (string) method2.Invoke(null, new object[] { group }); if (string.IsNullOrEmpty(str1)) { return !string.IsNullOrEmpty(str2); diff --git a/Runtime/Utilities/PropertyUtil.cs b/Runtime/Utilities/PropertyUtil.cs index 717dd8e5..313ac3d4 100644 --- a/Runtime/Utilities/PropertyUtil.cs +++ b/Runtime/Utilities/PropertyUtil.cs @@ -1,4 +1,3 @@ - using System.Collections.Generic; using UnityEngine; @@ -50,4 +49,4 @@ namespace XCharts.Runtime return true; } } -} +} \ No newline at end of file diff --git a/Runtime/Utilities/ReflectionUtil.cs b/Runtime/Utilities/ReflectionUtil.cs index d1105bf7..5af73afa 100644 --- a/Runtime/Utilities/ReflectionUtil.cs +++ b/Runtime/Utilities/ReflectionUtil.cs @@ -1,4 +1,3 @@ - using System; using System.Collections; using System.Collections.Generic; @@ -26,7 +25,7 @@ namespace XCharts.Runtime public static int InvokeListCount(object obj, FieldInfo field) { var list = field.GetValue(obj); - return (int)list.GetType().GetProperty("Count").GetValue(list, null); + return (int) list.GetType().GetProperty("Count").GetValue(list, null); } public static void InvokeListAdd(object obj, FieldInfo field, object item) @@ -45,10 +44,9 @@ namespace XCharts.Runtime { var list = field.GetValue(obj); var item = list.GetType().GetProperty("Item").GetValue(list, new object[] { i }); - return (T)item; + return (T) item; } - public static void InvokeListAddTo<T>(object obj, FieldInfo field, Action<T> callback) { var list = field.GetValue(obj); @@ -57,7 +55,7 @@ namespace XCharts.Runtime for (int i = 0; i < count; i++) { var item = listType.GetProperty("Item").GetValue(list, new object[] { i }); - callback((T)item); + callback((T) item); } } @@ -88,9 +86,9 @@ namespace XCharts.Runtime { var properties = type.GetProperties(); var customList = typeof(List<>).MakeGenericType((properties[properties.Length - 1]).PropertyType); - returnObj = (IList)Activator.CreateInstance(customList); - var list = (IList)returnObj; - foreach (var item in ((IList)obj)) + returnObj = (IList) Activator.CreateInstance(customList); + var list = (IList) returnObj; + foreach (var item in ((IList) obj)) { if (item == null) continue; diff --git a/Runtime/Utilities/RuntimeUtil.cs b/Runtime/Utilities/RuntimeUtil.cs index 4e3d7a44..72cfa5fa 100644 --- a/Runtime/Utilities/RuntimeUtil.cs +++ b/Runtime/Utilities/RuntimeUtil.cs @@ -1,7 +1,6 @@ - using System; -using System.IO; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Reflection; using UnityEngine; @@ -62,7 +61,7 @@ namespace XCharts.Runtime public static T GetAttribute<T>(this Type type, bool check = true) where T : Attribute { if (type.IsDefined(typeof(T), false)) - return (T)type.GetCustomAttributes(typeof(T), false)[0]; + return (T) type.GetCustomAttributes(typeof(T), false) [0]; else { if (check) @@ -73,7 +72,7 @@ namespace XCharts.Runtime public static T GetAttribute<T>(this MemberInfo type, bool check = true) where T : Attribute { if (type.IsDefined(typeof(T), false)) - return (T)type.GetCustomAttributes(typeof(T), false)[0]; + return (T) type.GetCustomAttributes(typeof(T), false) [0]; else { if (check) diff --git a/Runtime/Widgets/ProgressBar.cs b/Runtime/Widgets/ProgressBar.cs index 734debbf..8efac8a0 100644 --- a/Runtime/Widgets/ProgressBar.cs +++ b/Runtime/Widgets/ProgressBar.cs @@ -1,4 +1,3 @@ - using UnityEngine; using UnityEngine.UI; using XUGL; @@ -10,7 +9,7 @@ namespace XCharts.Runtime [DisallowMultipleComponent] public class ProgressBar : BaseChart { - [SerializeField] [Range(0f, 1f)] private float m_Value = 0.5f; + [SerializeField][Range(0f, 1f)] private float m_Value = 0.5f; [SerializeField] private Color m_BackgroundColor = new Color32(255, 233, 233, 255); [SerializeField] private Color m_StartColor = Color.blue; [SerializeField] private Color m_EndColor = Color.red; @@ -34,7 +33,6 @@ namespace XCharts.Runtime } #endif - protected override void OnDrawPainterBase(VertexHelper vh, Painter painter) { vh.Clear(); @@ -50,4 +48,4 @@ namespace XCharts.Runtime } } -} +} \ No newline at end of file diff --git a/Runtime/XUGL/SVG/SVGPath.cs b/Runtime/XUGL/SVG/SVGPath.cs index 3ced766e..9239ee1c 100644 --- a/Runtime/XUGL/SVG/SVGPath.cs +++ b/Runtime/XUGL/SVG/SVGPath.cs @@ -42,7 +42,7 @@ namespace XUGL } else { - var type = s_PathValueRegex.Match(key).Groups[1].ToString().ToCharArray()[0]; + var type = s_PathValueRegex.Match(key).Groups[1].ToString().ToCharArray() [0]; var mc3 = s_PathValueRegex2.Matches(key); SVGPathSeg seg = null; switch (type) @@ -151,7 +151,7 @@ namespace XUGL var cp1 = seg.relative ? np + seg.p1 : seg.p1; cp2 = seg.relative ? np + seg.p2 : seg.p2; var ep = seg.relative ? np + seg.p3 : seg.p3; - var dist = (int)Vector2.Distance(np, ep) * 2; + var dist = (int) Vector2.Distance(np, ep) * 2; if (dist < 2) dist = 2; UGLHelper.GetBezierList2(ref bezierList, np, ep, dist, cp1, cp2); for (int n = 1; n < bezierList.Count; n++) @@ -162,7 +162,7 @@ namespace XUGL cp1 = np + (np - cp2).normalized * Vector2.Distance(np, cp2); var scp2 = seg.relative ? np + seg.p1 : seg.p1; ep = seg.relative ? np + seg.p2 : seg.p2; - dist = (int)Vector2.Distance(np, ep) * 2; + dist = (int) Vector2.Distance(np, ep) * 2; if (dist < 2) dist = 2; UGLHelper.GetBezierList2(ref bezierList, np, ep, dist, cp1, scp2); for (int n = 1; n < bezierList.Count; n++) diff --git a/Runtime/XUGL/UGL.cs b/Runtime/XUGL/UGL.cs index e53590be..b260a52e 100644 --- a/Runtime/XUGL/UGL.cs +++ b/Runtime/XUGL/UGL.cs @@ -27,7 +27,7 @@ namespace XUGL /// <param name="dent">箭头凹度</param> /// <param name="color">颜色</param> public static void DrawArrow(VertexHelper vh, Vector3 startPoint, Vector3 arrowPoint, float width, - float height, float offset, float dent, Color32 color) + float height, float offset, float dent, Color32 color) { var dir = (arrowPoint - startPoint).normalized; var sharpPos = arrowPoint + (offset + height / 4) * dir; @@ -187,13 +187,13 @@ namespace XUGL } public static void AddVertToVertexHelper(VertexHelper vh, Vector3 top, - Vector3 bottom, Color32 color, bool needTriangle = true) + Vector3 bottom, Color32 color, bool needTriangle = true) { AddVertToVertexHelper(vh, top, bottom, color, color, needTriangle); } public static void AddVertToVertexHelper(VertexHelper vh, Vector3 top, - Vector3 bottom, Color32 topColor, Color32 bottomColor, bool needTriangle = true) + Vector3 bottom, Color32 topColor, Color32 bottomColor, bool needTriangle = true) { var lastVertCount = vh.currentVertCount; vh.AddVert(top, topColor, Vector2.zero); @@ -518,7 +518,7 @@ namespace XUGL /// <param name="color">颜色</param> /// <param name="vertical">是否垂直方向</param> public static void DrawRectangle(VertexHelper vh, Vector3 p, float xRadius, float yRadius, - Color32 color, bool vertical = true) + Color32 color, bool vertical = true) { DrawRectangle(vh, p, xRadius, yRadius, color, color, vertical); } @@ -1049,14 +1049,14 @@ namespace XUGL if (borderWidth == 0 || UGLHelper.IsClearColor(color)) return; var halfWid = rectWidth / 2; var halfHig = rectHeight / 2; - var lbIn = new Vector3(center.x - halfWid, center.y - halfHig); - var lbOt = new Vector3(center.x - halfWid - borderWidth, center.y - halfHig - borderWidth); - var ltIn = new Vector3(center.x - halfWid, center.y + halfHig); - var ltOt = new Vector3(center.x - halfWid - borderWidth, center.y + halfHig + borderWidth); - var rtIn = new Vector3(center.x + halfWid, center.y + halfHig); - var rtOt = new Vector3(center.x + halfWid + borderWidth, center.y + halfHig + borderWidth); - var rbIn = new Vector3(center.x + halfWid, center.y - halfHig); - var rbOt = new Vector3(center.x + halfWid + borderWidth, center.y - halfHig - borderWidth); + var lbIn = new Vector3(center.x - halfWid - extWidth, center.y - halfHig - extWidth); + var lbOt = new Vector3(center.x - halfWid - borderWidth - extWidth, center.y - halfHig - borderWidth - extWidth); + var ltIn = new Vector3(center.x - halfWid - extWidth, center.y + halfHig + extWidth); + var ltOt = new Vector3(center.x - halfWid - borderWidth - extWidth, center.y + halfHig + borderWidth + extWidth); + var rtIn = new Vector3(center.x + halfWid + extWidth, center.y + halfHig + extWidth); + var rtOt = new Vector3(center.x + halfWid + borderWidth + extWidth, center.y + halfHig + borderWidth + extWidth); + var rbIn = new Vector3(center.x + halfWid + extWidth, center.y - halfHig - extWidth); + var rbOt = new Vector3(center.x + halfWid + borderWidth + extWidth, center.y - halfHig - borderWidth - extWidth); float brLt = 0, brRt = 0, brRb = 0, brLb = 0; bool needRound = false; InitCornerRadius(cornerRadius, rectWidth, rectHeight, horizontal, invertCorner, ref brLt, ref brRt, ref brRb, @@ -1185,7 +1185,7 @@ namespace XUGL } public static void DrawTriangle(VertexHelper vh, Vector3 p1, - Vector3 p2, Vector3 p3, Color32 color, Color32 color2, Color32 color3) + Vector3 p2, Vector3 p3, Color32 color, Color32 color2, Color32 color3) { UIVertex v1 = new UIVertex(); v1.position = p1; @@ -1213,7 +1213,7 @@ namespace XUGL } public static void DrawCricle(VertexHelper vh, Vector3 center, float radius, Color32 color, - Color32 toColor, float smoothness = 2f) + Color32 toColor, float smoothness = 2f) { DrawSector(vh, center, radius, color, toColor, 0, 360, 0, s_ClearColor32, smoothness); } @@ -1260,13 +1260,13 @@ namespace XUGL } public static void DrawSector(VertexHelper vh, Vector3 center, float radius, Color32 color, - float startDegree, float toDegree, float smoothness = 2f) + float startDegree, float toDegree, float smoothness = 2f) { DrawSector(vh, center, radius, color, color, startDegree, toDegree, 0, s_ClearColor32, smoothness); } public static void DrawSector(VertexHelper vh, Vector3 center, float radius, Color32 color, Color32 toColor, - float startDegree, float toDegree, int gradientType = 0, bool isYAxis = false, float smoothness = 2f) + float startDegree, float toDegree, int gradientType = 0, bool isYAxis = false, float smoothness = 2f) { DrawSector(vh, center, radius, color, toColor, startDegree, toDegree, 0, s_ClearColor32, 0, smoothness, gradientType, isYAxis); @@ -1308,7 +1308,7 @@ namespace XUGL if (gap > 0 && Mathf.Abs(toDegree - startDegree) >= 360) gap = 0; radius -= borderWidth; smoothness = (smoothness < 0 ? 2f : smoothness); - int segments = (int)((2 * Mathf.PI * radius) * (Mathf.Abs(toDegree - startDegree) / 360) / smoothness); + int segments = (int) ((2 * Mathf.PI * radius) * (Mathf.Abs(toDegree - startDegree) / 360) / smoothness); if (segments < 1) segments = 1; float startAngle = startDegree * Mathf.Deg2Rad; float toAngle = toDegree * Mathf.Deg2Rad; @@ -1381,9 +1381,9 @@ namespace XUGL { p4 = new Vector3(p3.x, realCenter.y); var dist = p4.x - realCenter.x; - var tcolor = Color32.Lerp(color, toColor, dist >= 0 - ? dist / radius - : Mathf.Min(radius + dist, radius) / radius); + var tcolor = Color32.Lerp(color, toColor, dist >= 0 ? + dist / radius : + Mathf.Min(radius + dist, radius) / radius); if (isLeft && (i == segments || i == 0)) tcolor = toColor; DrawQuadrilateral(vh, lastP4, p2, p3, p4, lastColor, tcolor); lastP4 = p4; @@ -1500,7 +1500,7 @@ namespace XUGL var needSpace = gap != 0; var diffAngle = Mathf.Abs(toDegree - startDegree) * Mathf.Deg2Rad; - int segments = (int)((2 * Mathf.PI * outsideRadius) * (diffAngle * Mathf.Rad2Deg / 360) / smoothness); + int segments = (int) ((2 * Mathf.PI * outsideRadius) * (diffAngle * Mathf.Rad2Deg / 360) / smoothness); if (segments < 1) segments = 1; float startAngle = startDegree * Mathf.Deg2Rad; float toAngle = toDegree * Mathf.Deg2Rad; @@ -1755,7 +1755,7 @@ namespace XUGL float lineWidth, Color32 lineColor, float smoothness) { var dist = Vector3.Distance(sp, ep); - var segment = (int)(dist / (smoothness <= 0 ? 2f : smoothness)); + var segment = (int) (dist / (smoothness <= 0 ? 2f : smoothness)); UGLHelper.GetBezierList2(ref s_CurvesPosList, sp, ep, segment, cp1, cp2); DrawCurvesInternal(vh, s_CurvesPosList, lineWidth, lineColor); } @@ -1898,4 +1898,4 @@ namespace XUGL } } } -} +} \ No newline at end of file diff --git a/Runtime/XUGL/UGLHelper.cs b/Runtime/XUGL/UGLHelper.cs index da775b82..9d17934f 100644 --- a/Runtime/XUGL/UGLHelper.cs +++ b/Runtime/XUGL/UGLHelper.cs @@ -7,18 +7,18 @@ namespace XUGL { public static bool IsValueEqualsColor(Color32 color1, Color32 color2) { - return color1.a == color2.a - && color1.b == color2.b - && color1.g == color2.g - && color1.r == color2.r; + return color1.a == color2.a && + color1.b == color2.b && + color1.g == color2.g && + color1.r == color2.r; } public static bool IsValueEqualsColor(Color color1, Color color2) { - return color1.a == color2.a - && color1.b == color2.b - && color1.g == color2.g - && color1.r == color2.r; + return color1.a == color2.a && + color1.b == color2.b && + color1.g == color2.g && + color1.r == color2.r; } public static bool IsValueEqualsString(string str1, string str2) @@ -32,21 +32,21 @@ namespace XUGL public static bool IsValueEqualsVector2(Vector2 v1, Vector2 v2) { - return v1.x == v2.x - && v1.y == v2.y; + return v1.x == v2.x && + v1.y == v2.y; } public static bool IsValueEqualsVector3(Vector3 v1, Vector3 v2) { - return v1.x == v2.x - && v1.y == v2.y - && v1.z == v2.z; + return v1.x == v2.x && + v1.y == v2.y && + v1.z == v2.z; } public static bool IsValueEqualsVector3(Vector3 v1, Vector2 v2) { - return v1.x == v2.x - && v1.y == v2.y; + return v1.x == v2.x && + v1.y == v2.y; } public static bool IsValueEqualsList<T>(List<T> list1, List<T> list2) @@ -60,8 +60,7 @@ namespace XUGL for (int i = 0; i < list1.Count; i++) { if (list1[i] == null && list2[i] == null) - { - } + { } else { if (list1[i] != null) @@ -81,25 +80,25 @@ namespace XUGL public static bool IsClearColor(Color32 color) { - return color.a == 0 - && color.b == 0 - && color.g == 0 - && color.r == 0; + return color.a == 0 && + color.b == 0 && + color.g == 0 && + color.r == 0; } public static bool IsClearColor(Color color) { - return color.a == 0 - && color.b == 0 - && color.g == 0 - && color.r == 0; + return color.a == 0 && + color.b == 0 && + color.g == 0 && + color.r == 0; } public static bool IsZeroVector(Vector3 pos) { - return pos.x == 0 - && pos.y == 0 - && pos.z == 0; + return pos.x == 0 && + pos.y == 0 && + pos.z == 0; } public static Vector3 RotateRound(Vector3 position, Vector3 center, Vector3 axis, float angle) @@ -110,7 +109,7 @@ namespace XUGL } public static void GetBezierList(ref List<Vector3> posList, Vector3 sp, Vector3 ep, - Vector3 lsp, Vector3 nep, float smoothness = 2f, 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; @@ -129,8 +128,8 @@ namespace XUGL if (nep == ep) cp2 = ep; else cp2 = ep - (nep - sp).normalized * diff; dist = Vector3.Distance(sp, ep); - int segment = (int)(dist / (smoothness <= 0 ? 2f : smoothness)); - if (segment < 1) segment = (int)(dist / 0.5f); + 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); if (posList.Count < 2) @@ -150,7 +149,7 @@ namespace XUGL Vector3 cp2 = sp + dist / k * dir * (k - 1); cp1.x = sp.x; cp2.x = ep.x; - int segment = (int)(dist / (smoothness <= 0 ? 2f : smoothness)); + int segment = (int) (dist / (smoothness <= 0 ? 2f : smoothness)); GetBezierList2(ref posList, sp, ep, segment, cp1, cp2); if (posList.Count < 2) { @@ -165,7 +164,7 @@ namespace XUGL List<Vector3> list = new List<Vector3>(); for (int i = 0; i < segment; i++) { - list.Add(GetBezier(i / (float)segment, sp, cp, ep)); + list.Add(GetBezier(i / (float) segment, sp, cp, ep)); } list.Add(ep); return list; @@ -181,7 +180,7 @@ namespace XUGL } for (int i = 0; i < segment; i++) { - posList.Add((GetBezier2(i / (float)segment, sp, cp, cp2, ep))); + posList.Add((GetBezier2(i / (float) segment, sp, cp, cp2, ep))); } posList.Add(ep); } diff --git a/package.json b/package.json index c9b6a187..36a942cc 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "com.monitor1394.xcharts", "displayName": "XCharts", - "version": "3.0.0-preview9", - "date": "20220506", - "checkdate": "20220506", + "version": "3.0.0", + "date": "20220522", + "checkdate": "20220522", "desc": "如果 XCharts 对您有帮助,希望您能在 Github 上点 Star 支持,非常感谢!", "unity": "2018.3", "description": "A charting and data visualization library for Unity.",