CommonBitsRemover.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import CommonBits from './CommonBits'
  2. import CoordinateFilter from '../geom/CoordinateFilter'
  3. import Coordinate from '../geom/Coordinate'
  4. import CoordinateSequenceFilter from '../geom/CoordinateSequenceFilter'
  5. export default class CommonBitsRemover {
  6. constructor() {
  7. CommonBitsRemover.constructor_.apply(this, arguments)
  8. }
  9. static constructor_() {
  10. this._commonCoord = null
  11. this._ccFilter = new CommonCoordinateFilter()
  12. }
  13. addCommonBits(geom) {
  14. const trans = new Translater(this._commonCoord)
  15. geom.apply(trans)
  16. geom.geometryChanged()
  17. }
  18. removeCommonBits(geom) {
  19. if (this._commonCoord.x === 0.0 && this._commonCoord.y === 0.0) return geom
  20. const invCoord = new Coordinate(this._commonCoord)
  21. invCoord.x = -invCoord.x
  22. invCoord.y = -invCoord.y
  23. const trans = new Translater(invCoord)
  24. geom.apply(trans)
  25. geom.geometryChanged()
  26. return geom
  27. }
  28. getCommonCoordinate() {
  29. return this._commonCoord
  30. }
  31. add(geom) {
  32. geom.apply(this._ccFilter)
  33. this._commonCoord = this._ccFilter.getCommonCoordinate()
  34. }
  35. }
  36. class CommonCoordinateFilter {
  37. constructor() {
  38. CommonCoordinateFilter.constructor_.apply(this, arguments)
  39. }
  40. static constructor_() {
  41. this._commonBitsX = new CommonBits()
  42. this._commonBitsY = new CommonBits()
  43. }
  44. filter(coord) {
  45. this._commonBitsX.add(coord.x)
  46. this._commonBitsY.add(coord.y)
  47. }
  48. getCommonCoordinate() {
  49. return new Coordinate(this._commonBitsX.getCommon(), this._commonBitsY.getCommon())
  50. }
  51. get interfaces_() {
  52. return [CoordinateFilter]
  53. }
  54. }
  55. class Translater {
  56. constructor() {
  57. Translater.constructor_.apply(this, arguments)
  58. }
  59. static constructor_() {
  60. this.trans = null
  61. const trans = arguments[0]
  62. this.trans = trans
  63. }
  64. filter(seq, i) {
  65. const xp = seq.getOrdinate(i, 0) + this.trans.x
  66. const yp = seq.getOrdinate(i, 1) + this.trans.y
  67. seq.setOrdinate(i, 0, xp)
  68. seq.setOrdinate(i, 1, yp)
  69. }
  70. isDone() {
  71. return false
  72. }
  73. isGeometryChanged() {
  74. return true
  75. }
  76. get interfaces_() {
  77. return [CoordinateSequenceFilter]
  78. }
  79. }
  80. CommonBitsRemover.CommonCoordinateFilter = CommonCoordinateFilter
  81. CommonBitsRemover.Translater = Translater