Added check for rotation by narrow distance between touch points.

This commit is contained in:
Uwe Oestermeier 2019-07-19 15:05:46 +02:00
parent ff2c15a505
commit 68c98d1293
2 changed files with 10 additions and 3 deletions

View File

@ -131,15 +131,17 @@ export class InteractionDelta {
* @param {*} rotate
* @param {*} about
* @param {*} number - number of involved pointer
* @param {*} distance - distance of farthests touch points
* @memberof InteractionDelta
*/
constructor(x, y, zoom, rotate, about, number) {
constructor(x, y, zoom, rotate, about, number, distance) {
this.x = x
this.y = y
this.zoom = zoom
this.rotate = rotate
this.about = about
this.number = number
this.distance = distance
}
toString() {
@ -235,7 +237,8 @@ export class InteractionPoints {
zoom,
alpha,
cm,
csize
csize,
distance2
)
} else if (
csize == 1 &&

View File

@ -286,6 +286,7 @@ export class AbstractScatter extends Throwable {
scaleCloseThreshold = 0.1,
scaleCloseBuffer = 0.05,
maxRotation = Angle.degree2radian(5),
minRotationDistance = 200,
useLowPassFilter = true
} = {}) {
if (rotationDegrees != null && rotation != null) {
@ -331,6 +332,7 @@ export class AbstractScatter extends Throwable {
this.mouseZoomFactor = mouseZoomFactor
this.autoBringToFront = autoBringToFront
this.useLowPassFilter = useLowPassFilter
this.minRotationDistance = minRotationDistance
if (useLowPassFilter) {
this.rotateLPF = new LowPassFilter()
this.zoomLPF = new LowPassFilter()
@ -387,7 +389,9 @@ export class AbstractScatter extends Throwable {
if (this.useLowPassFilter) {
rotate = this.rotateLPF.next(rotate)
zoom = this.zoomLPF.next(zoom)
// console.log({rotate, zoom})
if (delta.distance < this.minRotationDistance) {
rotate = 0
}
}
this.transform(delta, zoom, rotate, delta.about)
if (zoom != 1) this.interactionAnchor = delta.about