Files

4.3 KiB
Raw Permalink Blame History

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 属性面板

  • 重构 EasyChartLibraryWindowRefreshSeriesList 方法。
  • 实现动态 GUI 绘制逻辑:
    • 读取当前 Series 的 type
    • 只绘制与该类型相关的属性字段(例如:选了 Bar 就隐藏 Line 的平滑设置)。
    • 使用 EditorGUI.BeginChangeCheck 监听类型变化,实时刷新 UI。

2.2 类型切换交互

  • 在 Series 卡片(Title 区域或属性顶部)增加 Type 下拉框
  • 在全局 General Properties 顶部增加 Chart Type 下拉框
    • 切换全局类型时,自动将所有 Series 重置为对应类型(需弹出确认提示)。

2.3 上下文感知配置

  • 如果是 Pie Chart,自动隐藏 AxisSettingsXY 轴配置)。
  • 如果是 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
  • 渲染流程
    1. 遍历 Data.Series
    2. 根据 Serie 类型(或分组),通过工厂方法实例化对应的 Renderer(LineSeriesRenderer, BarSeriesRenderer)。
    3. 按层级顺序添加到 _chartAreaGrid -> 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)

  1. Step 1 (Data): 修改 Serie 类,添加 SerieType 枚举及 BarSettings 等结构体。(不影响现有逻辑,仅增加字段)。
  2. Step 2 (Editor): 升级 EasyChartLibraryWindow,实现基于类型的动态属性显示。
  3. Step 3 (Render): 创建 BarSeriesRenderer 原型,并在 ChartElement 中实现简单的多 Renderer 支持(先支持 Line + Bar 混合)。
  4. Step 4 (Interaction): 重构交互逻辑,适配混合图表的 Tooltip 显示。