4.3 KiB
4.3 KiB
EasyChart 重构计划
基于对现有架构的分析以及对 XCharts 源码的研究,为了支持混合图表(Mixed Chart)及更多图表类型(Bar, Pie 等)的扩展,制定以下重构计划。
1. 核心数据结构重构 (Data Architecture)
目标:建立一个既能承载多种图表配置,又能完美兼容 Unity 序列化机制的数据底层。
1.1 保持单一 Serie 类 (Monolithic Approach)
参考 XCharts 的设计,不采用多态继承(LineSerie : BaseSerie),而是保持一个包含所有可能的配置字段的单一 Serie 类。
- 优势:避免 Unity 序列化丢失子类数据的问题,支持运行时无损切换图表类型。
- 修改:
- 新增
public SerieType type;枚举 (Line, Bar, Pie, Scatter)。 - 引入组合式配置结构体(Struct/Class),保持主类整洁:
public LineSettings lineSettings;(包含 smooth, width, color)public BarSettings barSettings;(包含 barWidth, stack, gap)public PieSettings pieSettings;(包含 radius, center, roseType)
- 新增
1.2 全局配置升级
ChartData中增加全局ChartType枚举 (Line, Bar, Pie, Mixed)。- Line/Bar 模式:强制所有 Series 为同一类型,简化 UI。
- Mixed 模式:允许每个 Series 独立设置类型。
2. 编辑器与交互重构 (Editor & UX)
目标:通过编辑器脚本屏蔽底层数据的复杂性,提供“上下文感知”的配置体验。
2.1 动态 Series 属性面板
- 重构
EasyChartLibraryWindow的RefreshSeriesList方法。 - 实现动态 GUI 绘制逻辑:
- 读取当前 Series 的
type。 - 只绘制与该类型相关的属性字段(例如:选了 Bar 就隐藏 Line 的平滑设置)。
- 使用
EditorGUI.BeginChangeCheck监听类型变化,实时刷新 UI。
- 读取当前 Series 的
2.2 类型切换交互
- 在 Series 卡片(Title 区域或属性顶部)增加 Type 下拉框。
- 在全局
General Properties顶部增加 Chart Type 下拉框。- 切换全局类型时,自动将所有 Series 重置为对应类型(需弹出确认提示)。
2.3 上下文感知配置
- 如果是
Pie Chart,自动隐藏AxisSettings(XY 轴配置)。 - 如果是
Mixed Chart,显示所有通用配置。
3. 渲染管线重构 (Rendering Pipeline)
目标:解耦 ChartElement 与具体渲染逻辑,支持多渲染器叠加。
3.1 渲染器抽象
- 强化
BaseSeriesRenderer,确保其不依赖于具体的ChartData.Type。 - 定义标准接口:
Draw(Painter2D painter, Serie serie)。
3.2 多渲染器管理 (Multi-Renderer System)
- 现状:
ChartElement只有一个_activeSeriesRenderer。 - 重构为:
List<BaseSeriesRenderer> _renderers。 - 渲染流程:
- 遍历
Data.Series。 - 根据 Serie 类型(或分组),通过工厂方法实例化对应的 Renderer(
LineSeriesRenderer,BarSeriesRenderer)。 - 按层级顺序添加到
_chartArea:Grid -> Bar -> Line -> Point -> Tooltip。
- 遍历
4. 坐标与交互系统 (Coordinate & Interaction)
目标:支持非笛卡尔坐标系(如极坐标)的渲染与交互。
4.1 坐标转换抽象
- 提取
GetPixelPos方法,定义ICoordinateSystem接口。GridCoord(实现 XY 轴映射)。PolarCoord(实现 角度/半径 映射)。
4.2 交互检测重构 (Hit Testing)
- 现状:
OnPointerMove直接通过 X 轴索引查找数据。 - 重构为:委托模式。
ChartElement将鼠标位置传递给所有活跃的 Renderers。- Renderer 返回
HitResult(包含命中的数据点、距离等)。 ChartElement汇总结果显示 Tooltip。这样可以自然支持 Pie Chart 的扇区点击检测。
5. 执行路线图 (Roadmap)
- Step 1 (Data): 修改
Serie类,添加SerieType枚举及BarSettings等结构体。(不影响现有逻辑,仅增加字段)。 - Step 2 (Editor): 升级
EasyChartLibraryWindow,实现基于类型的动态属性显示。 - Step 3 (Render): 创建
BarSeriesRenderer原型,并在ChartElement中实现简单的多 Renderer 支持(先支持 Line + Bar 混合)。 - Step 4 (Interaction): 重构交互逻辑,适配混合图表的 Tooltip 显示。