NodeMap.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import Location from '../geom/Location'
  2. import Coordinate from '../geom/Coordinate'
  3. import Node from './Node'
  4. import ArrayList from '../../../../java/util/ArrayList'
  5. import TreeMap from '../../../../java/util/TreeMap'
  6. export default class NodeMap {
  7. constructor() {
  8. NodeMap.constructor_.apply(this, arguments)
  9. }
  10. static constructor_() {
  11. this.nodeMap = new TreeMap()
  12. this.nodeFact = null
  13. const nodeFact = arguments[0]
  14. this.nodeFact = nodeFact
  15. }
  16. find(coord) {
  17. return this.nodeMap.get(coord)
  18. }
  19. addNode() {
  20. if (arguments[0] instanceof Coordinate) {
  21. const coord = arguments[0]
  22. let node = this.nodeMap.get(coord)
  23. if (node === null) {
  24. node = this.nodeFact.createNode(coord)
  25. this.nodeMap.put(coord, node)
  26. }
  27. return node
  28. } else if (arguments[0] instanceof Node) {
  29. const n = arguments[0]
  30. const node = this.nodeMap.get(n.getCoordinate())
  31. if (node === null) {
  32. this.nodeMap.put(n.getCoordinate(), n)
  33. return n
  34. }
  35. node.mergeLabel(n)
  36. return node
  37. }
  38. }
  39. print(out) {
  40. for (let it = this.iterator(); it.hasNext(); ) {
  41. const n = it.next()
  42. n.print(out)
  43. }
  44. }
  45. iterator() {
  46. return this.nodeMap.values().iterator()
  47. }
  48. values() {
  49. return this.nodeMap.values()
  50. }
  51. getBoundaryNodes(geomIndex) {
  52. const bdyNodes = new ArrayList()
  53. for (let i = this.iterator(); i.hasNext(); ) {
  54. const node = i.next()
  55. if (node.getLabel().getLocation(geomIndex) === Location.BOUNDARY) bdyNodes.add(node)
  56. }
  57. return bdyNodes
  58. }
  59. add(e) {
  60. const p = e.getCoordinate()
  61. const n = this.addNode(p)
  62. n.add(e)
  63. }
  64. }