!!!###!!!title=VChart SVG 插件介绍——VisActor/VChart 社区贡献者文档!!!###!!!!!!###!!!description=---title: 14.8.1 vchart-svg-plugin 简介 key words: VisActor,VChart,VTable,VStrory,VMind,VGrammar,VRender,Visualization,Chart,Data,Table,Graph,Gis,LLM--- !!!###!!!

概览

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图形相关转换
    

在接下来的章节里面,我们将详细的讲述一些核心代码实现

本文档由以下人员修正整理

玄魂