Added rotation snapping.
This commit is contained in:
parent
9d5cb0ab95
commit
ecf28deffc
69
package-lock.json
generated
69
package-lock.json
generated
@ -25,6 +25,7 @@
|
||||
"loglevel": "^1.8.1",
|
||||
"query-string": "^8.1.0",
|
||||
"ring-client-api": "^11.8.0",
|
||||
"round": "^2.0.1",
|
||||
"uuid": "^9.0.0",
|
||||
"vite-express": "^0.9.1"
|
||||
},
|
||||
@ -2701,6 +2702,17 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/is-finite": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
|
||||
"integrity": "sha512-e+gU0KGrlbqjEcV80SAqg4g7PQYOm3/IrdwAJ+kPwHqGhLKhtuTJGGxGtrsc8RXlHt2A8Vlnv+79Vq2B1GQasg==",
|
||||
"dependencies": {
|
||||
"number-is-nan": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/is-fullwidth-code-point": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||
@ -2734,6 +2746,14 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/is-integer": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz",
|
||||
"integrity": "sha512-RPQc/s9yBHSvpi+hs9dYiJ2cuFeU6x3TyyIp8O2H6SKEltIvJOzRj9ToyvcStDvPR/pS4rxgr1oBFajQjZ2Szg==",
|
||||
"dependencies": {
|
||||
"is-finite": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/is-interactive": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
|
||||
@ -3239,6 +3259,14 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/number-is-nan": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
|
||||
"integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/object-inspect": {
|
||||
"version": "1.12.3",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
|
||||
@ -3323,6 +3351,14 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/parse-exponential": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/parse-exponential/-/parse-exponential-1.0.1.tgz",
|
||||
"integrity": "sha512-QUa7PaOc7O6ei3hb0NmADJGrDYLbPBdcSKFUBGfwlMdHsrg8LOsliPEkpP0qHSKQOyzyyxCB00fxJKcP75Gl7w==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/parseqs": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
|
||||
@ -3450,6 +3486,18 @@
|
||||
"node": "^10 || ^12 || >=14"
|
||||
}
|
||||
},
|
||||
"node_modules/precision": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/precision/-/precision-1.0.1.tgz",
|
||||
"integrity": "sha512-cBMxnM2nzEF1xx75NhhOaKjsDNt92WUZv17t/p3wrvCfA+2RL0twbgfvXvgDbxxsfUUb5C5he5tla8Xa2ny1Ew==",
|
||||
"dependencies": {
|
||||
"is-finite": "~1.0.1",
|
||||
"parse-exponential": "~1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/process": {
|
||||
"version": "0.11.10",
|
||||
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
|
||||
@ -3781,6 +3829,27 @@
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/round": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/round/-/round-2.0.1.tgz",
|
||||
"integrity": "sha512-wzT6PF3wNEd2PCLTBQxteheeSwViBrD89E1XZjl4sj505C4LwTpqOQSNXLEROHDQw35NoylYbMxoUhgf2hb4qw==",
|
||||
"dependencies": {
|
||||
"precision": "~1.0.0",
|
||||
"round-precision": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/round-precision": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/round-precision/-/round-precision-1.0.0.tgz",
|
||||
"integrity": "sha512-L2a0XDSNeaaBTEGmzuENMK4T8c0HqKYeS3pCDurW4MRPo8O6LeCLqVPWUt5+xW9rrEcG9QaYrAFcApEFXKziyw==",
|
||||
"dependencies": {
|
||||
"is-finite": "~1.0.1",
|
||||
"is-integer": "~1.0.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/run-async": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
|
||||
|
||||
@ -27,6 +27,7 @@
|
||||
"query-string": "^8.1.0",
|
||||
"vite-express": "^0.9.1",
|
||||
"loglevel": "^1.8.1",
|
||||
"round": "^2.0.1",
|
||||
"express-http-proxy": "^1.6.3",
|
||||
"earcut": "^2.2.4",
|
||||
"uuid": "^9.0.0"
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import {
|
||||
AbstractMesh,
|
||||
Angle,
|
||||
InstancedMesh,
|
||||
Mesh,
|
||||
Scene,
|
||||
@ -12,6 +13,8 @@ import {MeshConverter} from "../diagram/meshConverter";
|
||||
import {DiagramManager} from "../diagram/diagramManager";
|
||||
import {DiagramEvent, DiagramEventType} from "../diagram/diagramEntity";
|
||||
import log from "loglevel";
|
||||
import {AppConfig} from "../util/appConfig";
|
||||
import round from "round";
|
||||
|
||||
|
||||
export class Base {
|
||||
@ -63,6 +66,24 @@ export class Base {
|
||||
|
||||
}
|
||||
|
||||
static snapRotation(rotation): Vector3 {
|
||||
const config = AppConfig.config;
|
||||
if (config.rotateSnap == 0) {
|
||||
return rotation;
|
||||
}
|
||||
rotation.x = this.calcDegreesToSnap(rotation.x, config.rotateSnap);
|
||||
rotation.y = this.calcDegreesToSnap(rotation.y, config.rotateSnap);
|
||||
rotation.z = this.calcDegreesToSnap(rotation.z, config.rotateSnap);
|
||||
return rotation;
|
||||
}
|
||||
|
||||
static calcDegreesToSnap(val, snap) {
|
||||
const deg = Angle.FromRadians(val).degrees();
|
||||
const snappedDegrees = round(deg, snap);
|
||||
log.getLogger('Base').debug("deg", val, deg, snappedDegrees, snap);
|
||||
return Angle.FromDegrees(snappedDegrees).radians();
|
||||
}
|
||||
|
||||
private initGrip(grip: WebXRControllerComponent) {
|
||||
grip.onButtonStateChangedObservable.add(() => {
|
||||
if (grip.changes.pressed) {
|
||||
@ -124,16 +145,18 @@ export class Base {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const snapped = Base.snapRotation(mesh.absoluteRotationQuaternion.toEulerAngles().clone());
|
||||
if (this.previousParent) {
|
||||
const p = this.scene.getMeshById(this.previousParent);
|
||||
if (p) {
|
||||
mesh && mesh.setParent(this.scene.getMeshById(this.previousParent));
|
||||
} else {
|
||||
mesh && mesh.setParent(null);
|
||||
|
||||
}
|
||||
} else {
|
||||
mesh && mesh.setParent(null)
|
||||
mesh && mesh.setParent(null);
|
||||
mesh.rotation = snapped;
|
||||
}
|
||||
const entity = MeshConverter.toDiagramEntity(mesh);
|
||||
const event: DiagramEvent = {
|
||||
@ -149,4 +172,5 @@ export class Base {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user