| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import CommonBitsRemover from './CommonBitsRemover'
- export default class CommonBitsOp {
- constructor() {
- CommonBitsOp.constructor_.apply(this, arguments)
- }
- static constructor_() {
- this._returnToOriginalPrecision = true
- this._cbr = null
- if (arguments.length === 0) {
- CommonBitsOp.constructor_.call(this, true)
- } else if (arguments.length === 1) {
- const returnToOriginalPrecision = arguments[0]
- this._returnToOriginalPrecision = returnToOriginalPrecision
- }
- }
- computeResultPrecision(result) {
- if (this._returnToOriginalPrecision) this._cbr.addCommonBits(result)
- return result
- }
- union(geom0, geom1) {
- const geom = this.removeCommonBits(geom0, geom1)
- return this.computeResultPrecision(geom[0].union(geom[1]))
- }
- intersection(geom0, geom1) {
- const geom = this.removeCommonBits(geom0, geom1)
- return this.computeResultPrecision(geom[0].intersection(geom[1]))
- }
- removeCommonBits() {
- if (arguments.length === 1) {
- const geom0 = arguments[0]
- this._cbr = new CommonBitsRemover()
- this._cbr.add(geom0)
- const geom = this._cbr.removeCommonBits(geom0.copy())
- return geom
- } else if (arguments.length === 2) {
- const geom0 = arguments[0], geom1 = arguments[1]
- this._cbr = new CommonBitsRemover()
- this._cbr.add(geom0)
- this._cbr.add(geom1)
- const geom = new Array(2).fill(null)
- geom[0] = this._cbr.removeCommonBits(geom0.copy())
- geom[1] = this._cbr.removeCommonBits(geom1.copy())
- return geom
- }
- }
- buffer(geom0, distance) {
- const geom = this.removeCommonBits(geom0)
- return this.computeResultPrecision(geom.buffer(distance))
- }
- symDifference(geom0, geom1) {
- const geom = this.removeCommonBits(geom0, geom1)
- return this.computeResultPrecision(geom[0].symDifference(geom[1]))
- }
- difference(geom0, geom1) {
- const geom = this.removeCommonBits(geom0, geom1)
- return this.computeResultPrecision(geom[0].difference(geom[1]))
- }
- }
|