logo

X6

  • 文档
  • API
  • 图表示例
  • 常见问题
  • 更新日志
  • XFlow
  • 所有产品antv logo arrow
  • 2.x
  • 简介
  • 快速上手
  • 基础
    • 画布
    • 节点
    • 边
    • 连接桩
    • 交互
    • 事件
    • 数据
  • 进阶
    • 连接点
    • 工具
    • 群组
    • React 节点
    • Vue 节点
    • Angular 节点
    • HTML 节点
  • 插件
    • 图形变换
    • 对齐线
    • 复制粘贴
    • 快捷键
    • 撤销重做
    • 框选
    • 滚动画布
    • 小地图
    • Dnd
    • Stencil
    • 导出
  • 升级到 2.x 版本
  • 开发者工具

图形变换

上一篇
HTML 节点
下一篇
对齐线

Resources

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...

在本章节中主要介绍图形变换插件,通过阅读你可以了解到

  • 如何通过交互插件调整节点大小
  • 如果通过交互插件调整节点旋转角度

使用

使用 UI 组件来调整节点尺寸和角度是常用需求,我们提供了一个独立的插件包 @antv/x6-plugin-transform 来使用这个功能。

# npm
$ npm install @antv/x6-plugin-transform --save
# yarn
$ yarn add @antv/x6-plugin-transform

然后我们在代码中这样使用:

import { Transform } from '@antv/x6-plugin-transform'
const graph = new Graph({
background: {
color: '#F2F7FA',
},
})
graph.use(
new Transform({
resizing: resizingOptions,
rotating: rotatingOptions,
}),
)

演示

首先我们体验使用交互修改节点尺寸(点击节点出现操作组件):

Resizing Settings
minWidth
1
maxWidth
200
minHeight
1
maxHeight
150

接下来体验使用交互修改节点旋转角度(点击节点出现操作组件):

Rotating Settings
grid
15

配置

调整尺寸

属性名类型默认值必选描述
enabledbooleanfalse是否支持调整节点大小
minWidthnumber0最小的调整宽度
minHeightnumber0最小的调整高度
maxWidthnumberInfinity最大的调整宽度
maxHeightnumberInfinity最大的调整高度
orthogonalbooleantrue是否显示中间调整点
restrictbooleanfalse调整大小边界是否可以超出画布边缘
autoScrollbooleantrue拖动位置超过画布时是否自动滚动画布
preserveAspectRatiobooleanfalse调整大小过程中是否保持节点的宽高比例
allowReversebooleantrue到达最小宽度或者高度时是否允许控制点反向拖动

上面的配置除了支持默认类型外,还支持使用函数的方式来动态修改:

new Transform({
resizing: {
enabled: true,
orthogonal(node: Node) {
const { enableOrthogonal } = node.getData()
return enableOrthogonal
},
},
})

调整角度

属性名类型默认值必选描述
enabledbooleanfalse是否支持调整节点角度
gridnumber15每次旋转的角度

上面的配置除了支持默认类型外,还支持使用函数的方式来动态修改:

new Transform({
rotating: {
enabled: true,
grid() {
return 30
},
},
})

API

graph.createTransformWidget(node: Node)

为节点创建 transform 控件。

graph.clearTransformWidgets()

清除所有 transform 控件。

事件

事件名称参数类型描述
node:resize{ e: Dom.MouseDownEvent; x: number; y: number; node: Node; view: NodeView }开始调整节点大小时触发
node:resizing{ e: Dom.MouseMoveEvent; x: number; y: number; node: Node; view: NodeView }调整节点大小时触发
node:resized{ e: Dom.MouseUpEvent; x: number; y: number; node: Node; view: NodeView }调整节点大小后触发
node:rotate{ e: Dom.MouseDownEvent; x: number; y: number; node: Node; view: NodeView }开始旋转节点时触发
node:rotating{ e: Dom.MouseMoveEvent; x: number; y: number; node: Node; view: NodeView }旋转节点时触发
node:rotated{ e: Dom.MouseUpEvent; x: number; y: number; node: Node; view: NodeView }旋转节点后触发
graph.on('node:rotated', ({ node }) => {
console.log(node.angle())
})
// 我们也可以在插件实例上监听事件
transform.on('node:rotated', ({ node }) => {
console.log(node.angle())
})