register-edge.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. export default G6 => {
  2. G6.registerEdge('right-tree', {
  3. draw (cfg, group) {
  4. const xOffset = 22;
  5. const yOffset = 10;
  6. const { startPoint, endPoint } = cfg;
  7. const Ydiff = endPoint.y - startPoint.y;
  8. // 开口方向
  9. const left = startPoint.x - endPoint.x > 0;
  10. const QPoint = {
  11. x: left ? startPoint.x - xOffset : startPoint.x + xOffset,
  12. y: endPoint.y,
  13. };
  14. const path = Ydiff === 0 ? [
  15. ['M', startPoint.x + xOffset, startPoint.y],
  16. ['L', endPoint.x, endPoint.y],
  17. ] : [
  18. ['M', startPoint.x, startPoint.y],
  19. ['L', QPoint.x, startPoint.y],
  20. ['L', QPoint.x, endPoint.y + (Ydiff > 0 ? -yOffset : yOffset)],
  21. ['Q', QPoint.x, QPoint.y, left ? QPoint.x - yOffset : QPoint.x + yOffset, endPoint.y],
  22. ['L', endPoint.x, endPoint.y],
  23. ];
  24. const shape = group.addShape('path', {
  25. attrs: {
  26. path,
  27. stroke: '#161616',
  28. ...cfg,
  29. },
  30. name: 'right-tree-edge',
  31. });
  32. const { note } = cfg.targetNode.getModel();
  33. if (note) {
  34. const label = group.addShape('text', {
  35. attrs: {
  36. x: QPoint.x + 6,
  37. y: endPoint.y - 3,
  38. text: note || '',
  39. fill: '#161616',
  40. fontSize: 12,
  41. },
  42. name: 'right-tree-note',
  43. zIndex: 10,
  44. });
  45. group.sort();
  46. label.toFront();
  47. }
  48. return shape;
  49. },
  50. });
  51. };