logo

G

  • 教程
  • API
  • 示例
  • 插件
  • 所有产品antv logo arrow
  • 6.1.26
  • 插件系统介绍
  • 插件结构
  • g-plugin-a11y
  • g-plugin-annotation
  • g-plugin-box2d
  • g-plugin-gpgpu
  • g-plugin-matterjs
  • g-plugin-yoga
  • g-plugin-css-select
  • g-plugin-3d
  • g-plugin-device-renderer
  • g-plugin-canvas-renderer
  • g-plugin-canvaskit-renderer
  • g-plugin-rough-canvas-renderer
  • g-plugin-rough-svg-renderer
  • g-plugin-canvas-path-generator
  • g-plugin-canvas-picker
  • g-plugin-svg-renderer
  • g-plugin-svg-picker
  • g-plugin-dom-interaction
  • g-plugin-dragndrop
  • g-plugin-control

g-plugin-canvas-path-generator

上一篇
g-plugin-rough-svg-renderer
下一篇
g-plugin-canvas-picker

资源

Ant Design
Galacea Effects
Umi-React 应用开发框架
Dumi-组件/文档研发工具
ahooks-React Hooks 库

社区

体验科技专栏
seeconfSEE Conf-蚂蚁体验科技大会

帮助

GitHub
StackOverflow

more products更多产品

Ant DesignAnt Design-企业级 UI 设计语言
yuque语雀-知识创作与分享工具
EggEgg-企业级 Node 开发框架
kitchenKitchen-Sketch 工具集
GalaceanGalacean-互动图形解决方案
xtech蚂蚁体验科技
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

使用 CanvasRenderingContext2D 绘制各个图形的路径,例如使用 arcTo() 绘制 Circle。

除了用于最终渲染,在使用 isPointInPath() 前也需要在离屏画布中绘制。

Token

该插件提供两个 Token,使用时通过 Token 注入:

export const PathGeneratorFactory = Syringe.defineToken('PathGeneratorFactory');
export const PathGenerator = Syringe.defineToken('PathGenerator');

PathGeneratorFactory

例如目前在 g-plugin-canvas-renderer 和 g-plugin-canvas-picker 这两个插件中都能看到通过 PathGeneratorFactory 这个 token 将工厂方法注入,传入 nodeName 就能得到对应图形路径的绘制方法:

@inject(PathGeneratorFactory)
private pathGeneratorFactory: (tagName: Shape | string) => PathGenerator<any>;
const circlePathGenerator = this.pathGeneratorFactory(Shape.CIRCLE);

PathGenerator

具体到每一种基础图形的路径绘制方法,它接受 CanvasRenderingContext2D 上下文和解析后的图形样式属性作为参数:

export type PathGenerator<T extends ParsedBaseStyleProps> = (
context: CanvasRenderingContext2D,
attributes: T,
) => void;

以 Circle 为例:

function generatePath(
context: CanvasRenderingContext2D,
parsedStyle: ParsedCircleStyleProps,
) {
const { r } = parsedStyle;
context.arc(r.value, r.value, r.value, 0, Math.PI * 2, false);
}