概览
vchart-svg-plugin 这是将vchart 渲染内容转换成svg字符串的插件,主要用于打印、服务端渲染等场景;
基础原理
在读具体代码之前,首先我们要知道vchart的一些实现原理,vchart是基于canvas渲染的,底层依赖了canvas渲染引擎库 @visactor/vrender,vrender会根据vchart 的图表配置生成一颗图形 场景树stage:

vrender 中图形相关类关系如下:

也就是说,通过vchart实例我们可以获取到场景树的根节点stage,通过递归stage的子节点,我们就能拿到所有的渲染的图形;在vrender 的实现中,所有的图形都有一个属性attribute来维护图形的显示配置,那么任务就拆解成两个:
-
根据
stage的子节点 构建svg的子节点 -
将vrender 图形元素的
attribute转换成svg节点对应的属性
核心文件结构
src/svg/ ├── convert.ts - 转换入口,处理图表到SVG的转换 ├── graphic.ts - 图形元素转换的核心实现 ├── util.ts - 通用工具函数集合 ├── pattern.ts - 纹理属性转换 ├── shadow.ts - shadow属性转换 ├── arc.ts - 圆弧图形相关转换 ├── area.ts - 区域图形相关转换 ├── line.ts - 线图形相关转换 ├── polygon.ts - 多边形图形相关转换 ├── rect.ts - 矩形图形相关转换 └── symbol.ts - symbol图形相关转换
在接下来的章 节里面,我们将详细的讲述一些核心代码实现