x6
当前部分基于:
v2.11.1
x6 包是 X6 项目的核心。我们忽略其他部分,关注 src 的目录结构:
./packages/x6/src
├── __tests__
│ └── util
├── config
│ └── index.ts
├── graph # 核心
│ ├── background.ts # 背景
│ ├── base.ts
│ ├── coord.ts # 坐标系
│ ├── css.ts # css
│ ├── defs.ts # svg 的 defs
│ ├── events.ts # 事件类型定义
│ ├── graph.ts # Graph
│ ├── grid.ts # 网格
│ ├── highlight.ts # 高亮
│ ├── index.ts
│ ├── mousewheel.ts # 鼠标滚轮
│ ├── options.ts # 选项类型定义
│ ├── panning.ts # 画布平移
│ ├── size.ts # 画布尺寸
│ ├── transform.ts # 画布变换,包括缩放、旋转、过渡、定位
│ ├── view.ts # GraphView 是 Graph 的视图
│ └── virtual-render.ts # 虚拟渲染器,收集 200ms 内的变更,统一提交到渲染器
├── index.less
├── index.ts
├── model # 渲染模型
│ ├── animation.ts
│ ├── cell.ts
│ ├── collection.ts
│ ├── edge.ts
│ ├── index.ts
│ ├── model.ts
│ ├── node.ts
│ ├── port.ts
│ ├── registry.ts
│ └── store.ts
├── registry # 注册表
│ ├── attr
│ ├── background
│ ├── connection-point
│ ├── connection-strategy
│ ├── connector
│ ├── edge-anchor
│ ├── filter
│ ├── grid
│ ├── highlighter
│ ├── index.ts
│ ├── marker
│ ├── node-anchor
│ ├── port-label-layout
│ ├── port-layout
│ ├── registry.ts
│ ├── router
│ └── tool
├── renderer # 渲染器
│ ├── index.ts
│ ├── queueJob.ts
│ ├── renderer.ts
│ └── scheduler.ts
├── shape # 预定义的基础图形
│ ├── base.ts
│ ├── circle.ts
│ ├── edge.ts
│ ├── ellipse.ts
│ ├── html.ts
│ ├── image.ts
│ ├── index.ts
│ ├── path.ts
│ ├── poly.ts
│ ├── polygon.ts
│ ├── polyline.ts
│ ├── rect.ts
│ ├── text-block.ts
│ └── util.ts
├── style # 样式和主题
│ ├── index.less
│ ├── raw.ts
│ └── themes
├── util
│ └── index.ts
└── view # 渲染视图
├── attr.ts
├── cache.ts
├── cell.ts
├── edge.ts
├── flag.ts
├── index.ts
├── markup.ts
├── node.ts
├── tool.ts
└── view.ts
架构设计
x6 包主要分为以下部分:
Graph画布,位于x6/src/graph/graph.ts,承载所有的画布的功能,不实现具体功能,仅仅是把所有功能组合起来,提供操作画布的 APImodel模型,位于x6/src/model/,由画布内的元素构成的抽象模型,模型仅仅是对画布内元素的描述,不负责渲染view视图,位于x6/src/view/,负责对模型的实际渲染renderer渲染器,位于x6/src/renderer/renderer.ts,用于调度渲染的时机,并将模型和视图关联起来,它会在适合的时候将模型使用对应的视图进行渲染registry注册表,位于x6/src/registry/,将对应的功能使用特定的名称进行注册,以便在使用时直接使用名称,在内部从注册表中查询对应的实现- 事件驱动,画布的各个功能和插件间通过事件进行交流