redhotmagma-visualization 1.44.1 → 1.44.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,7 +13,6 @@ var _RGBELoader = require("three/examples/jsm/loaders/RGBELoader");
13
13
  var _get = _interopRequireDefault(require("lodash/get"));
14
14
  var _size = _interopRequireDefault(require("lodash/size"));
15
15
  var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
16
- var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
17
16
  var _glTFExporter = require("./Exporters/glTFExporter");
18
17
  var _findIndex = _interopRequireDefault(require("lodash/findIndex"));
19
18
  var _merge = _interopRequireDefault(require("lodash/merge"));
@@ -1189,6 +1188,17 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
1189
1188
  }
1190
1189
  this.screenshotViews = this.calculateRelativeViews(this.relativeScreenshotViews, center, (this.controls.minDistance + this.controls.maxDistance) * 0.5);
1191
1190
  }
1191
+ }, {
1192
+ key: "getCameraViewRatio",
1193
+ value: function getCameraViewRatio(view1, view2) {
1194
+ return view2.lookat.distanceTo(view2.position) / view1.lookat.distanceTo(view1.position);
1195
+ }
1196
+ }, {
1197
+ key: "shouldViewChangeTriggerJumpToView",
1198
+ value: function shouldViewChangeTriggerJumpToView(view1, view2) {
1199
+ var tolerance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.5;
1200
+ return Math.abs(this.getCameraViewRatio(view1, view2) - 1) > tolerance;
1201
+ }
1192
1202
  }, {
1193
1203
  key: "initCameraViews",
1194
1204
  value: function initCameraViews(cameras) {
@@ -1209,7 +1219,7 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
1209
1219
  this._firstCameraInitDone = true;
1210
1220
  this.currentCameraView = null;
1211
1221
  this.jumpToView("default", false);
1212
- } else if (previousCameraView && this.cameraViews[currentCameraName] && !(0, _isEqual["default"])(previousCameraView, this.cameraViews[currentCameraName])) {
1222
+ } else if (previousCameraView && this.cameraViews[currentCameraName] && this.shouldViewChangeTriggerJumpToView(previousCameraView, this.cameraViews[currentCameraName])) {
1213
1223
  this.currentCameraView = null;
1214
1224
  this.jumpToView(currentCameraName, true);
1215
1225
  }
@@ -1354,9 +1364,13 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
1354
1364
  controls.maxDistance = maxDistance;
1355
1365
  camera.near = minDistance * 0.01;
1356
1366
  camera.far = maxDistance * 100;
1357
- camera.position.copy(camera.position.normalize().multiplyScalar(maxDistance * 0.75));
1367
+ // update current position only if it does not fit into the distance range
1368
+ var currentDistance = sphere.center.distanceTo(camera.position);
1369
+ if (currentDistance < minDistance || currentDistance > maxDistance) {
1370
+ camera.position.copy(camera.position.normalize().multiplyScalar(maxDistance * 0.75));
1371
+ controls.target = sphere.center;
1372
+ }
1358
1373
  camera.updateProjectionMatrix();
1359
- controls.target = sphere.center;
1360
1374
  controls.update();
1361
1375
  }
1362
1376
  }, {
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "redhotmagma-visualization",
3
- "version": "1.44.1",
3
+ "version": "1.44.2",
4
4
  "license": "UNLICENSED",
5
5
  "private": false,
6
6
  "main": "./index.js",
7
7
  "dependencies": {
8
8
  "@babel/polyfill": "^7.12.1",
9
- "@configuratorware/scripts": "1.44.1",
9
+ "@configuratorware/scripts": "1.44.2",
10
10
  "@tweenjs/tween.js": "^17.6.0",
11
11
  "console-polyfill": "^0.3.0",
12
12
  "css-element-queries": "^1.2.3",
@@ -35,7 +35,6 @@ import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader";
35
35
  import get from "lodash/get";
36
36
  import size from "lodash/size";
37
37
  import isPlainObject from "lodash/isPlainObject";
38
- import isEqual from "lodash/isEqual";
39
38
  import { exportGLTF } from "./Exporters/glTFExporter";
40
39
  import findIndex from "lodash/findIndex";
41
40
  import merge from "lodash/merge";
@@ -967,6 +966,14 @@ export class Three3DScene extends Three3D {
967
966
  );
968
967
  }
969
968
 
969
+ getCameraViewRatio(view1, view2) {
970
+ return view2.lookat.distanceTo(view2.position) / view1.lookat.distanceTo(view1.position);
971
+ }
972
+
973
+ shouldViewChangeTriggerJumpToView(view1, view2, tolerance = 0.5) {
974
+ return Math.abs(this.getCameraViewRatio(view1, view2) - 1) > tolerance;
975
+ }
976
+
970
977
  initCameraViews(cameras) {
971
978
  if (!this.sceneContainer?.children?.length) {
972
979
  return;
@@ -991,7 +998,10 @@ export class Three3DScene extends Three3D {
991
998
  } else if (
992
999
  previousCameraView &&
993
1000
  this.cameraViews[currentCameraName] &&
994
- !isEqual(previousCameraView, this.cameraViews[currentCameraName])
1001
+ this.shouldViewChangeTriggerJumpToView(
1002
+ previousCameraView,
1003
+ this.cameraViews[currentCameraName]
1004
+ )
995
1005
  ) {
996
1006
  this.currentCameraView = null;
997
1007
  this.jumpToView(currentCameraName, true);
@@ -1120,9 +1130,13 @@ export class Three3DScene extends Three3D {
1120
1130
  controls.maxDistance = maxDistance;
1121
1131
  camera.near = minDistance * 0.01;
1122
1132
  camera.far = maxDistance * 100;
1123
- camera.position.copy(camera.position.normalize().multiplyScalar(maxDistance * 0.75));
1133
+ // update current position only if it does not fit into the distance range
1134
+ const currentDistance = sphere.center.distanceTo(camera.position);
1135
+ if (currentDistance < minDistance || currentDistance > maxDistance) {
1136
+ camera.position.copy(camera.position.normalize().multiplyScalar(maxDistance * 0.75));
1137
+ controls.target = sphere.center;
1138
+ }
1124
1139
  camera.updateProjectionMatrix();
1125
- controls.target = sphere.center;
1126
1140
 
1127
1141
  controls.update();
1128
1142
  }