1. graph.addNode({
  2. x: 180,
  3. y: 60,
  4. width: 100,
  5. height: 40,
  6. attrs: {
  7. body: {
  8. fill: '#f5f5f5',
  9. stroke: '#d9d9d9',
  10. strokeWidth: 1,
  11. },
  12. },
  13. tools: [
  14. {
  15. name: 'button',
  16. args: {
  17. markup: [
  18. {
  19. tagName: 'circle',
  20. selector: 'button',
  21. attrs: {
  22. r: 7,
  23. stroke: '#fe854f',
  24. strokeWidth: 1,
  25. fill: 'white',
  26. cursor: 'pointer',
  27. },
  28. },
  29. {
  30. tagName: 'text',
  31. textContent: '+',
  32. selector: 'icon',
  33. attrs: {
  34. fill: '#fe854f',
  35. fontSize: 10,
  36. textAnchor: 'middle',
  37. pointerEvents: 'none',
  38. y: '0.3em',
  39. },
  40. },
  41. ],
  42. x: '120%',
  43. y: '100%',
  44. offset: { x: -20, y: -20 },
  45. onClick({ cell }: { cell: Cell }) {
  46. const fill = Color.randomHex()
  47. cell.attr({
  48. body: {
  49. fill,
  50. },
  51. label: {
  52. fill: Color.invert(fill, true),
  53. },
  54. })
  55. },
  56. },
  57. },
  58. ],
  59. })

注册工具

  1. import { Graph } from '@antv/x6'
  2. Graph.registerNodeTool('custom-button-remove-node', {
  3. inherit: 'button-remove'
  4. })
  5. Graph.registerEdgeTool('custom-button-remove-edge', {
  6. inherit: 'button-remove'
  7. })
  1. lineGraph.on('node:mouseenter', ({ cell }) => {
  2. cell.addTools(TOOL.nodeToolRemove)
  3. // cell.addTools({
  4. // name: 'custom-button-remove-node',
  5. // args: {
  6. // x: 0,
  7. // y: 0,
  8. // onClick({ cell }) {
  9. // console.log(cell)
  10. // let connectedEdges = lineGraph.getConnectedEdges(cell.id)
  11. // // 删除与节点相连的边
  12. // if (connectedEdges.length > 0) {
  13. // connectedEdges.forEach((item) => {
  14. // deleteEdgeInLayoutData(
  15. // layoutData.edges,
  16. // item.source.cell,
  17. // item.target.cell,
  18. // item.id
  19. // )
  20. // })
  21. // }
  22. // deleteNodeInLayoutData(cell.id)
  23. // pushUndoStack()
  24. // }
  25. // }
  26. // })
  27. })
  1. lineGraph.on('edge:mouseenter', ({ cell }) => {
  2. cell.addTools(TOOL.edgeTool)
  3. // cell.addTools([
  4. // {
  5. // name: 'custom-button-remove-edge',
  6. // args: {
  7. // distance: '50%',
  8. // offset: { x: 30, y: 0 },
  9. // onClick({ cell }) {
  10. // console.log('🚀on ~ edge:removed==>', cell)
  11. // let sourceId = cell.source.cell
  12. // let targetId = cell.target.cell
  13. // deleteEdgeInLayoutData(
  14. // layoutData.edges,
  15. // sourceId,
  16. // targetId,
  17. // cell.id
  18. // )
  19. // pushUndoStack()
  20. // }
  21. // }
  22. // }
  23. // ])
  24. })