添加节点

业务数据

  1. // 添加默认节点
  2. addNode() {
  3. this.graph.centerContent()
  4. // TODO 添加节点位置的计算
  5. // 生成随机数
  6. this.graph.addNode({
  7. shape: 'rect', // 指定使用何种图形,默认值为 'rect'
  8. x: 10,
  9. y: 50,
  10. width: 110,
  11. height: 38,
  12. // html | svg DOM 结构
  13. markup: [
  14. // svg 矩形 边框
  15. {
  16. tagName: 'rect',
  17. selector: 'body'
  18. },
  19. // svg text 放置实体名称
  20. {
  21. tagName: 'text',
  22. selector: 'label'
  23. },
  24. // svg text 放置实体属性
  25. {
  26. tagName: 'text',
  27. selector: 'subLabel'
  28. }
  29. ],
  30. // 业务数据
  31. // data: {
  32. // label: 'label',
  33. // attributes: [{ key: '', value: '' }]
  34. // },
  35. // 默认样式属性
  36. attrs: defaultNodeAttrs,
  37. // 链接桩
  38. ports: {
  39. // 链接桩组定义
  40. groups: {
  41. left: {
  42. position: 'left',
  43. attrs: defaultPortAttrs
  44. },
  45. top: {
  46. position: 'top',
  47. attrs: defaultPortAttrs
  48. },
  49. right: {
  50. position: 'right',
  51. attrs: defaultPortAttrs
  52. },
  53. bottom: {
  54. position: 'bottom',
  55. attrs: defaultPortAttrs
  56. }
  57. },
  58. // 链接桩
  59. items: [
  60. {
  61. id: 'port1',
  62. group: 'left', // 指定分组名称
  63. islined: false
  64. },
  65. {
  66. id: 'port2',
  67. group: 'top' // 指定分组名称
  68. },
  69. {
  70. id: 'port3',
  71. group: 'bottom' // 指定分组名称
  72. },
  73. {
  74. id: 'port4',
  75. group: 'right' // 指定分组名称
  76. }
  77. ]
  78. }
  79. })
  80. },
  1. /*
  2. * @Description: X6 node 节点配置
  3. * @Author: huhaonan@sics.ac.cn
  4. * @Date: 2021-04-17 14:48:36
  5. * @LastEditors: huhaonan@sics.ac.cn
  6. * @LastEditTime: 2021-04-19 09:29:54
  7. */
  8. // 节点新增时默认的 attrs 样式
  9. export const defaultNodeAttrs = {
  10. body: {
  11. // refWidth: '200%',
  12. // refHeight: '100%',
  13. fill: 'var(--white8)',
  14. stroke: 'var(--white30)',
  15. strokeWidth: 1,
  16. strokeDasharray: '4,3'
  17. },
  18. label: {
  19. textWrap: {
  20. ellipsis: true,
  21. width: -10
  22. },
  23. textAnchor: 'middle',
  24. textVerticalAnchor: 'middle',
  25. refX: '50%',
  26. refY: '50%',
  27. text: '实体待配置',
  28. fill: 'var(--main)',
  29. fontSize: 14
  30. }
  31. }
  32. // 节点设置业务数据后的 attrs 样式
  33. export const hasDataNodeAttrs = {}
  34. // 节点 tool 工具
  35. export const nodeTool = [
  36. {
  37. // 根据节点的包围盒渲染一个包围节点的矩形
  38. name: 'boundary',
  39. args: {
  40. attrs: {
  41. fill: '#7c68fc',
  42. stroke: 'var(--main)',
  43. 'stroke-width': 1,
  44. 'fill-opacity': 0.1
  45. }
  46. }
  47. },
  48. {
  49. // 在指定的位置处,渲染一个删除按钮
  50. name: 'button-remove',
  51. args: {
  52. x: '100%',
  53. y: 0,
  54. offset: { x: -10, y: 10 }
  55. }
  56. }
  57. ]

markup 节点结构

markup 自定义事件

  1. // 监听自定义事件
  2. this.graph.on('node:add', ({ e, node }) => {
  3. console.log('e=>', e)
  4. if (node.id == 1) {
  5. this.graph.addNode({
  6. id: 2,
  7. shape: 'rect',
  8. width: 110,
  9. height: 38,
  10. x: 400,
  11. y: 100,
  12. // 节点 html | svg DOM 结构
  13. markup: NODE.hasAddBtnNodeMarkup,
  14. attrs: NODE.hasAddBtnNodeAttrs
  15. })
  16. this.graph.addEdge({
  17. source: 1,
  18. target: 2,
  19. labels: EDGE.defaultEdge.labels,
  20. attrs: EDGE.defaultEdge.attrs
  21. })
  22. this.graph.centerContent()
  23. this.addIconSrc = require('@/assets/add2x_disabled.png')
  24. this.lineIconSrc = require('@/assets/lined2x.png')
  25. this.$refs.lineIcon.style.cursor = 'pointer'
  26. this.$refs.addIcon.style.cursor = 'not-allowed'
  27. console.log(this.graph.getNodes())
  28. } else {
  29. this.graph.addNode({
  30. id: 1,
  31. shape: 'rect',
  32. width: 110,
  33. height: 38,
  34. x: 100,
  35. y: 100,
  36. // 节点 html | svg DOM 结构
  37. markup: NODE.hasAddBtnNodeMarkup,
  38. attrs: NODE.hasAddBtnNodeAttrs
  39. })
  40. this.graph.addEdge({
  41. source: 2,
  42. target: 1,
  43. labels: EDGE.defaultEdge.labels,
  44. attrs: EDGE.defaultEdge.attrs
  45. })
  46. this.graph.centerContent()
  47. this.addIconSrc = require('@/assets/add2x_disabled.png')
  48. this.lineIconSrc = require('@/assets/lined2x.png')
  49. this.$refs.lineIcon.style.cursor = 'pointer'
  50. this.$refs.addIcon.style.cursor = 'not-allowed'
  51. console.log(this.graph.getNodes())
  52. }
  53. })