graph.addNode({ x: 180, y: 60, width: 100, height: 40, attrs: { body: { fill: '#f5f5f5', stroke: '#d9d9d9', strokeWidth: 1, }, }, tools: [ { name: 'button', args: { markup: [ { tagName: 'circle', selector: 'button', attrs: { r: 7, stroke: '#fe854f', strokeWidth: 1, fill: 'white', cursor: 'pointer', }, }, { tagName: 'text', textContent: '+', selector: 'icon', attrs: { fill: '#fe854f', fontSize: 10, textAnchor: 'middle', pointerEvents: 'none', y: '0.3em', }, }, ], x: '120%', y: '100%', offset: { x: -20, y: -20 }, onClick({ cell }: { cell: Cell }) { const fill = Color.randomHex() cell.attr({ body: { fill, }, label: { fill: Color.invert(fill, true), }, }) }, }, }, ],})
注册工具
import { Graph } from '@antv/x6'Graph.registerNodeTool('custom-button-remove-node', { inherit: 'button-remove'})Graph.registerEdgeTool('custom-button-remove-edge', { inherit: 'button-remove'})
lineGraph.on('node:mouseenter', ({ cell }) => { cell.addTools(TOOL.nodeToolRemove) // cell.addTools({ // name: 'custom-button-remove-node', // args: { // x: 0, // y: 0, // onClick({ cell }) { // console.log(cell) // let connectedEdges = lineGraph.getConnectedEdges(cell.id) // // 删除与节点相连的边 // if (connectedEdges.length > 0) { // connectedEdges.forEach((item) => { // deleteEdgeInLayoutData( // layoutData.edges, // item.source.cell, // item.target.cell, // item.id // ) // }) // } // deleteNodeInLayoutData(cell.id) // pushUndoStack() // } // } // })})
lineGraph.on('edge:mouseenter', ({ cell }) => { cell.addTools(TOOL.edgeTool) // cell.addTools([ // { // name: 'custom-button-remove-edge', // args: { // distance: '50%', // offset: { x: 30, y: 0 }, // onClick({ cell }) { // console.log('🚀on ~ edge:removed==>', cell) // let sourceId = cell.source.cell // let targetId = cell.target.cell // deleteEdgeInLayoutData( // layoutData.edges, // sourceId, // targetId, // cell.id // ) // pushUndoStack() // } // } // } // ]) })
参考
https://x6.antv.vision/zh/docs/api/registry/node-tool
