PlanarGraph.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import HashSet from '../../../../java/util/HashSet'
  2. import Node from './Node'
  3. import NodeMap from './NodeMap'
  4. import DirectedEdge from './DirectedEdge'
  5. import ArrayList from '../../../../java/util/ArrayList'
  6. import Edge from './Edge'
  7. export default class PlanarGraph {
  8. constructor() {
  9. PlanarGraph.constructor_.apply(this, arguments)
  10. }
  11. static constructor_() {
  12. this._edges = new HashSet()
  13. this._dirEdges = new HashSet()
  14. this._nodeMap = new NodeMap()
  15. }
  16. findNodesOfDegree(degree) {
  17. const nodesFound = new ArrayList()
  18. for (let i = this.nodeIterator(); i.hasNext(); ) {
  19. const node = i.next()
  20. if (node.getDegree() === degree) nodesFound.add(node)
  21. }
  22. return nodesFound
  23. }
  24. dirEdgeIterator() {
  25. return this._dirEdges.iterator()
  26. }
  27. edgeIterator() {
  28. return this._edges.iterator()
  29. }
  30. remove() {
  31. if (arguments[0] instanceof Edge) {
  32. const edge = arguments[0]
  33. this.remove(edge.getDirEdge(0))
  34. this.remove(edge.getDirEdge(1))
  35. this._edges.remove(edge)
  36. edge.remove()
  37. } else if (arguments[0] instanceof DirectedEdge) {
  38. const de = arguments[0]
  39. const sym = de.getSym()
  40. if (sym !== null) sym.setSym(null)
  41. de.getFromNode().remove(de)
  42. de.remove()
  43. this._dirEdges.remove(de)
  44. } else if (arguments[0] instanceof Node) {
  45. const node = arguments[0]
  46. const outEdges = node.getOutEdges().getEdges()
  47. for (let i = outEdges.iterator(); i.hasNext(); ) {
  48. const de = i.next()
  49. const sym = de.getSym()
  50. if (sym !== null) this.remove(sym)
  51. this._dirEdges.remove(de)
  52. const edge = de.getEdge()
  53. if (edge !== null)
  54. this._edges.remove(edge)
  55. }
  56. this._nodeMap.remove(node.getCoordinate())
  57. node.remove()
  58. }
  59. }
  60. findNode(pt) {
  61. return this._nodeMap.find(pt)
  62. }
  63. getEdges() {
  64. return this._edges
  65. }
  66. nodeIterator() {
  67. return this._nodeMap.iterator()
  68. }
  69. contains() {
  70. if (arguments[0] instanceof Edge) {
  71. const e = arguments[0]
  72. return this._edges.contains(e)
  73. } else if (arguments[0] instanceof DirectedEdge) {
  74. const de = arguments[0]
  75. return this._dirEdges.contains(de)
  76. }
  77. }
  78. add() {
  79. if (arguments[0] instanceof Node) {
  80. const node = arguments[0]
  81. this._nodeMap.add(node)
  82. } else if (arguments[0] instanceof Edge) {
  83. const edge = arguments[0]
  84. this._edges.add(edge)
  85. this.add(edge.getDirEdge(0))
  86. this.add(edge.getDirEdge(1))
  87. } else if (arguments[0] instanceof DirectedEdge) {
  88. const dirEdge = arguments[0]
  89. this._dirEdges.add(dirEdge)
  90. }
  91. }
  92. getNodes() {
  93. return this._nodeMap.values()
  94. }
  95. }