poly.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * @fileOverview
  3. *
  4. * 提供折线相连的方法
  5. *
  6. * @author: techird
  7. * @copyright: Baidu FEX, 2014
  8. */
  9. define(function(require, exports, module) {
  10. var kity = require('../core/kity');
  11. var connect = require('../core/connect');
  12. connect.register('poly', function(node, parent, connection, width) {
  13. // 连线起点和终点
  14. var po = parent.getLayoutVertexOut(),
  15. pi = node.getLayoutVertexIn();
  16. // 连线矢量和方向
  17. var v = parent.getLayoutVectorOut().normalize();
  18. var r = Math.round;
  19. var abs = Math.abs;
  20. var pathData = [];
  21. pathData.push('M', r(po.x), r(po.y));
  22. switch (true) {
  23. case abs(v.x) > abs(v.y) && v.x < 0:
  24. // left
  25. pathData.push('h', -parent.getStyle('margin-left'));
  26. pathData.push('v', pi.y - po.y);
  27. pathData.push('H', pi.x);
  28. break;
  29. case abs(v.x) > abs(v.y) && v.x >= 0:
  30. // right
  31. pathData.push('h', parent.getStyle('margin-right'));
  32. pathData.push('v', pi.y - po.y);
  33. pathData.push('H', pi.x);
  34. break;
  35. case abs(v.x) <= abs(v.y) && v.y < 0:
  36. // top
  37. pathData.push('v', -parent.getStyle('margin-top'));
  38. pathData.push('h', pi.x - po.x);
  39. pathData.push('V', pi.y);
  40. break;
  41. case abs(v.x) <= abs(v.y) && v.y >= 0:
  42. // bottom
  43. pathData.push('v', parent.getStyle('margin-bottom'));
  44. pathData.push('h', pi.x - po.x);
  45. pathData.push('V', pi.y);
  46. break;
  47. }
  48. connection.setMarker(null);
  49. connection.setPathData(pathData);
  50. });
  51. });