coordinate-system.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import _ from 'lodash'
  2. function adjust (g) {
  3. const rankDir = g.graph().rankdir.toLowerCase()
  4. if (rankDir === 'lr' || rankDir === 'rl') {
  5. swapWidthHeight(g)
  6. }
  7. }
  8. function undo (g) {
  9. const rankDir = g.graph().rankdir.toLowerCase()
  10. if (rankDir === 'bt' || rankDir === 'rl') {
  11. reverseY(g)
  12. }
  13. if (rankDir === 'lr' || rankDir === 'rl') {
  14. swapXY(g)
  15. swapWidthHeight(g)
  16. }
  17. }
  18. function swapWidthHeight (g) {
  19. _.forEach(g.nodes(), function (v) { swapWidthHeightOne(g.node(v)) })
  20. _.forEach(g.edges(), function (e) { swapWidthHeightOne(g.edge(e)) })
  21. }
  22. function swapWidthHeightOne (attrs) {
  23. const w = attrs.width
  24. attrs.width = attrs.height
  25. attrs.height = w
  26. }
  27. function reverseY (g) {
  28. _.forEach(g.nodes(), function (v) { reverseYOne(g.node(v)) })
  29. _.forEach(g.edges(), function (e) {
  30. const edge = g.edge(e)
  31. _.forEach(edge.points, reverseYOne)
  32. if (_.has(edge, 'y')) {
  33. reverseYOne(edge)
  34. }
  35. })
  36. }
  37. function reverseYOne (attrs) {
  38. attrs.y = -attrs.y
  39. }
  40. function swapXY (g) {
  41. _.forEach(g.nodes(), function (v) { swapXYOne(g.node(v)) })
  42. _.forEach(g.edges(), function (e) {
  43. const edge = g.edge(e)
  44. _.forEach(edge.points, swapXYOne)
  45. if (_.has(edge, 'x')) {
  46. swapXYOne(edge)
  47. }
  48. })
  49. }
  50. function swapXYOne (attrs) {
  51. const x = attrs.x
  52. attrs.x = attrs.y
  53. attrs.y = x
  54. }
  55. export default {
  56. adjust,
  57. undo
  58. }