Edge.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import Node from './Node'
  2. import GraphComponent from './GraphComponent'
  3. export default class Edge extends GraphComponent {
  4. constructor() {
  5. super()
  6. Edge.constructor_.apply(this, arguments)
  7. }
  8. static constructor_() {
  9. this._dirEdge = null
  10. if (arguments.length === 0) {} else if (arguments.length === 2) {
  11. const de0 = arguments[0], de1 = arguments[1]
  12. this.setDirectedEdges(de0, de1)
  13. }
  14. }
  15. isRemoved() {
  16. return this._dirEdge === null
  17. }
  18. setDirectedEdges(de0, de1) {
  19. this._dirEdge = [de0, de1]
  20. de0.setEdge(this)
  21. de1.setEdge(this)
  22. de0.setSym(de1)
  23. de1.setSym(de0)
  24. de0.getFromNode().addOutEdge(de0)
  25. de1.getFromNode().addOutEdge(de1)
  26. }
  27. getDirEdge() {
  28. if (Number.isInteger(arguments[0])) {
  29. const i = arguments[0]
  30. return this._dirEdge[i]
  31. } else if (arguments[0] instanceof Node) {
  32. const fromNode = arguments[0]
  33. if (this._dirEdge[0].getFromNode() === fromNode) return this._dirEdge[0]
  34. if (this._dirEdge[1].getFromNode() === fromNode) return this._dirEdge[1]
  35. return null
  36. }
  37. }
  38. remove() {
  39. this._dirEdge = null
  40. }
  41. getOppositeNode(node) {
  42. if (this._dirEdge[0].getFromNode() === node) return this._dirEdge[0].getToNode()
  43. if (this._dirEdge[1].getFromNode() === node) return this._dirEdge[1].getToNode()
  44. return null
  45. }
  46. }