Loading...
Using UI
components to adjust node size and angle is a common requirement. We provide a standalone plugin package @antv/x6-plugin-transform
to utilize this functionality.
# npm$ npm install @antv/x6-plugin-transform --save# yarn$ yarn add @antv/x6-plugin-transform
Then we can use it in our code like this:
import { Transform } from '@antv/x6-plugin-transform'const graph = new Graph({background: {color: '#F2F7FA',},})graph.use(new Transform({resizing: resizingOptions,rotating: rotatingOptions,}),)
First, let's experience interactive resizing of nodes (clicking on a node brings up the operation component):
Next, let's experience interactive rotation of nodes (clicking on a node brings up the operation component):
Property Name | Type | Default Value | Required | Description |
---|---|---|---|---|
enabled | boolean | false | Whether resizing of nodes is supported | |
minWidth | number | 0 | Minimum resizing width | |
minHeight | number | 0 | Minimum resizing height | |
maxWidth | number | Infinity | Maximum resizing width | |
maxHeight | number | Infinity | Maximum resizing height | |
orthogonal | boolean | true | Whether to show intermediate resizing points | |
restrict | boolean | false | Whether resizing boundaries can exceed canvas edges | |
autoScroll | boolean | true | Whether to automatically scroll the canvas when dragging exceeds its bounds | |
preserveAspectRatio | boolean | false | Whether to maintain the aspect ratio during resizing | |
allowReverse | boolean | true | Whether to allow control points to drag in reverse when reaching minimum width or height |
The above configuration supports dynamic modification using functions as well:
new Transform({resizing: {enabled: true,orthogonal(node: Node) {const { enableOrthogonal } = node.getData()return enableOrthogonal},},})
Property Name | Type | Default Value | Required | Description |
---|---|---|---|---|
enabled | boolean | false | Whether rotating of nodes is supported | |
grid | number | 15 | Angle of rotation per step |
The above configuration also supports dynamic modification using functions:
new Transform({rotating: {enabled: true,grid() {return 30},},})
Creates a transform control for the node.
Clears all transform controls.
Event Name | Parameter Type | Description |
---|---|---|
node:resize | { e: Dom.MouseDownEvent; x: number; y: number; node: Node; view: NodeView } | Triggered when resizing starts |
node:resizing | { e: Dom.MouseMoveEvent; x: number; y: number; node: Node; view: NodeView } | Triggered during resizing |
node:resized | { e: Dom.MouseUpEvent; x: number; y: number; node: Node; view: NodeView } | Triggered after resizing |
node:rotate | { e: Dom.MouseDownEvent; x: number; y: number; node: Node; view: NodeView } | Triggered when rotation starts |
node:rotating | { e: Dom.MouseMoveEvent; x: number; y: number; node: Node; view: NodeView } | Triggered during rotation |
node:rotated | { e: Dom.MouseUpEvent; x: number; y: number; node: Node; view: NodeView } | Triggered after rotation |
graph.on('node:rotated', ({ node }) => {console.log(node.angle())})// We can also listen to events on the plugin instancetransform.on('node:rotated', ({ node }) => {console.log(node.angle())})