From bb0dcf2d9d23e65b4f4b30d305769511a825430f Mon Sep 17 00:00:00 2001 From: Uwe Oestermeier Date: Fri, 19 Jul 2019 15:19:03 +0200 Subject: [PATCH] Improved handling of min rotation distance. --- dist/iwmlib.js | 20 ++++++++++++-------- dist/iwmlib.pixi.js | 20 ++++++++++++-------- lib/scatter.js | 20 ++++++++++++-------- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/dist/iwmlib.js b/dist/iwmlib.js index 969df93..2d3df9c 100644 --- a/dist/iwmlib.js +++ b/dist/iwmlib.js @@ -3374,8 +3374,8 @@ scaleCloseThreshold = 0.1, scaleCloseBuffer = 0.05, maxRotation = Angle.degree2radian(5), - minRotationDistance = 200, - useLowPassFilter = true + minRotationDistance = 0, + useLowPassFilter = false } = {}) { if (rotationDegrees != null && rotation != null) { throw new Error('Use rotationDegrees or rotation but not both') @@ -3477,10 +3477,12 @@ if (this.useLowPassFilter) { rotate = this.rotateLPF.next(rotate); zoom = this.zoomLPF.next(zoom); - if (delta.distance < this.minRotationDistance) { - rotate = 0; - } } + if (delta.distance < this.minRotationDistance) { + let ratio = delta.distance / this.minRotationDistance; + rotate *= ratio; + } + this.transform(delta, zoom, rotate, delta.about); if (zoom != 1) this.interactionAnchor = delta.about; } @@ -4198,8 +4200,9 @@ onClose = null, scaleCloseThreshold = 0.1, scaleCloseBuffer = 0.05, - useLowPassFilter = true, - maxRotation = Angle.degree2radian(15) + useLowPassFilter = false, + maxRotation = Angle.degree2radian(15), + minRotationDistance = 200 } = {} ) { super({ @@ -4225,7 +4228,8 @@ scaleCloseBuffer, onClose, useLowPassFilter, - maxRotation + maxRotation, + minRotationDistance }); if (container == null || width == null || height == null) { throw new Error('Invalid value: null') diff --git a/dist/iwmlib.pixi.js b/dist/iwmlib.pixi.js index 4e445bf..91e58a3 100644 --- a/dist/iwmlib.pixi.js +++ b/dist/iwmlib.pixi.js @@ -6786,8 +6786,8 @@ scaleCloseThreshold = 0.1, scaleCloseBuffer = 0.05, maxRotation = Angle.degree2radian(5), - minRotationDistance = 200, - useLowPassFilter = true + minRotationDistance = 0, + useLowPassFilter = false } = {}) { if (rotationDegrees != null && rotation != null) { throw new Error('Use rotationDegrees or rotation but not both') @@ -6889,10 +6889,12 @@ if (this.useLowPassFilter) { rotate = this.rotateLPF.next(rotate); zoom = this.zoomLPF.next(zoom); - if (delta.distance < this.minRotationDistance) { - rotate = 0; - } } + if (delta.distance < this.minRotationDistance) { + let ratio = delta.distance / this.minRotationDistance; + rotate *= ratio; + } + this.transform(delta, zoom, rotate, delta.about); if (zoom != 1) this.interactionAnchor = delta.about; } @@ -7434,8 +7436,9 @@ onClose = null, scaleCloseThreshold = 0.1, scaleCloseBuffer = 0.05, - useLowPassFilter = true, - maxRotation = Angle.degree2radian(15) + useLowPassFilter = false, + maxRotation = Angle.degree2radian(15), + minRotationDistance = 200 } = {} ) { super({ @@ -7461,7 +7464,8 @@ scaleCloseBuffer, onClose, useLowPassFilter, - maxRotation + maxRotation, + minRotationDistance }); if (container == null || width == null || height == null) { throw new Error('Invalid value: null') diff --git a/lib/scatter.js b/lib/scatter.js index 3ab314e..f44b292 100644 --- a/lib/scatter.js +++ b/lib/scatter.js @@ -286,8 +286,8 @@ export class AbstractScatter extends Throwable { scaleCloseThreshold = 0.1, scaleCloseBuffer = 0.05, maxRotation = Angle.degree2radian(5), - minRotationDistance = 200, - useLowPassFilter = true + minRotationDistance = 0, + useLowPassFilter = false } = {}) { if (rotationDegrees != null && rotation != null) { throw new Error('Use rotationDegrees or rotation but not both') @@ -389,10 +389,12 @@ export class AbstractScatter extends Throwable { if (this.useLowPassFilter) { rotate = this.rotateLPF.next(rotate) zoom = this.zoomLPF.next(zoom) - if (delta.distance < this.minRotationDistance) { - rotate = 0 - } } + if (delta.distance < this.minRotationDistance) { + let ratio = delta.distance / this.minRotationDistance + rotate *= ratio + } + this.transform(delta, zoom, rotate, delta.about) if (zoom != 1) this.interactionAnchor = delta.about } @@ -1110,8 +1112,9 @@ export class DOMScatter extends AbstractScatter { onClose = null, scaleCloseThreshold = 0.1, scaleCloseBuffer = 0.05, - useLowPassFilter = true, - maxRotation = Angle.degree2radian(15) + useLowPassFilter = false, + maxRotation = Angle.degree2radian(15), + minRotationDistance = 200 } = {} ) { super({ @@ -1137,7 +1140,8 @@ export class DOMScatter extends AbstractScatter { scaleCloseBuffer, onClose, useLowPassFilter, - maxRotation + maxRotation, + minRotationDistance }) if (container == null || width == null || height == null) { throw new Error('Invalid value: null')