Root.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import Coordinate from '../../geom/Coordinate'
  2. import NodeBase from './NodeBase'
  3. import Node from './Node'
  4. import IntervalSize from './IntervalSize'
  5. import Assert from '../../util/Assert'
  6. export default class Root extends NodeBase {
  7. constructor() {
  8. super()
  9. }
  10. insert(itemEnv, item) {
  11. const index = NodeBase.getSubnodeIndex(itemEnv, Root.origin.x, Root.origin.y)
  12. if (index === -1) {
  13. this.add(item)
  14. return null
  15. }
  16. const node = this._subnode[index]
  17. if (node === null || !node.getEnvelope().contains(itemEnv)) {
  18. const largerNode = Node.createExpanded(node, itemEnv)
  19. this._subnode[index] = largerNode
  20. }
  21. this.insertContained(this._subnode[index], itemEnv, item)
  22. }
  23. isSearchMatch(searchEnv) {
  24. return true
  25. }
  26. insertContained(tree, itemEnv, item) {
  27. Assert.isTrue(tree.getEnvelope().contains(itemEnv))
  28. const isZeroX = IntervalSize.isZeroWidth(itemEnv.getMinX(), itemEnv.getMaxX())
  29. const isZeroY = IntervalSize.isZeroWidth(itemEnv.getMinY(), itemEnv.getMaxY())
  30. let node = null
  31. if (isZeroX || isZeroY) node = tree.find(itemEnv); else node = tree.getNode(itemEnv)
  32. node.add(item)
  33. }
  34. }
  35. Root.origin = new Coordinate(0.0, 0.0)