redhotmagma-visualization 1.31.4 → 1.31.7

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.
package/Three/Three2D.js CHANGED
@@ -57,10 +57,6 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
57
57
 
58
58
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
59
59
 
60
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
61
-
62
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
63
-
64
60
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
65
61
 
66
62
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -73,6 +69,10 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
73
69
 
74
70
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
75
71
 
72
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
73
+
74
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
75
+
76
76
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
77
77
 
78
78
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
@@ -169,18 +169,50 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
169
169
 
170
170
  _defineProperty(_assertThisInitialized(_this), "_overlayMode", false);
171
171
 
172
+ _defineProperty(_assertThisInitialized(_this), "_options", {
173
+ sharperFullView: false,
174
+ // when zoom = 1 use NearestFilter for sharper product image
175
+ optimizeProductImage: false,
176
+ // upscale or downscale the product image to fit 2048 x 2048
177
+ premultiplyAlpha: false
178
+ });
179
+
172
180
  _defineProperty(_assertThisInitialized(_this), "_imageRepository", (0, _createImageRepository.createImageRepository)((0, _createCache.createCache)(20), function (src) {
173
181
  return new Promise(function (resolve, reject) {
174
182
  return new _three.ImageLoader(_this._loadingManager).load(src, resolve, undefined, reject);
175
183
  });
176
184
  }));
177
185
 
186
+ _defineProperty(_assertThisInitialized(_this), "updateModelTextureFilter", function (_ref) {
187
+ var _this$_model, _this$_model$material;
188
+
189
+ var currentZoom = _ref.value;
190
+
191
+ if (!_this._options.sharperFullView) {
192
+ return;
193
+ }
194
+
195
+ var tex = (_this$_model = _this._model) === null || _this$_model === void 0 ? void 0 : (_this$_model$material = _this$_model.material) === null || _this$_model$material === void 0 ? void 0 : _this$_model$material.map;
196
+
197
+ if (!tex) {
198
+ return;
199
+ }
200
+
201
+ if (currentZoom === 1) {
202
+ tex.magFilter = _three.NearestFilter;
203
+ tex.needsUpdate = true;
204
+ } else if (tex.magFilter !== _three.LinearFilter) {
205
+ tex.magFilter = _three.LinearFilter;
206
+ tex.needsUpdate = true;
207
+ }
208
+ });
209
+
178
210
  _defineProperty(_assertThisInitialized(_this), "redraw", function () {
179
211
  return _this._redraw && _this._redraw();
180
212
  });
181
213
 
182
214
  _defineProperty(_assertThisInitialized(_this), "updateView", (0, _SyncCurrentFunction.syncCurrent)( /*#__PURE__*/function () {
183
- var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(designView) {
215
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(designView) {
184
216
  var options,
185
217
  _options$forceUpdate,
186
218
  forceUpdate,
@@ -272,7 +304,7 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
272
304
  }));
273
305
 
274
306
  return function (_x) {
275
- return _ref.apply(this, arguments);
307
+ return _ref2.apply(this, arguments);
276
308
  };
277
309
  }()));
278
310
 
@@ -280,9 +312,9 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
280
312
  _this._modelBasePath = cfg.modelBasePath;
281
313
  }
282
314
 
283
- (0, _PropertyObserver.observeProperty)(_assertThisInitialized(_this), "_size", function (_ref2) {
284
- var value = _ref2.value,
285
- dispose = _ref2.dispose;
315
+ (0, _PropertyObserver.observeProperty)(_assertThisInitialized(_this), "_size", function (_ref3) {
316
+ var value = _ref3.value,
317
+ dispose = _ref3.dispose;
286
318
 
287
319
  if (value.width > 0 && value.height > 0) {
288
320
  dispose();
@@ -324,8 +356,14 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
324
356
  camera.far = cameraZ - getPlaneZ(this._overlayMode) + 1000;
325
357
  camera.position.set(0, 0, cameraZ);
326
358
  redrawOnZoomChange && (0, _PropertyObserver.observeProperty)(camera, "zoom", (0, _debounce["default"])(this.redraw, redrawDebounceWait));
359
+ (0, _PropertyObserver.observeProperty)(camera, "zoom", this.updateModelTextureFilter);
327
360
  return camera;
328
361
  }
362
+ }, {
363
+ key: "setOptions",
364
+ value: function setOptions(options) {
365
+ this._options = _objectSpread(_objectSpread({}, this._options), options);
366
+ }
329
367
  }, {
330
368
  key: "createCamera",
331
369
  value: function createCamera() {
@@ -335,9 +373,9 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
335
373
  }
336
374
  }, {
337
375
  key: "setSize",
338
- value: function setSize(_ref3) {
339
- var width = _ref3.width,
340
- height = _ref3.height;
376
+ value: function setSize(_ref4) {
377
+ var width = _ref4.width,
378
+ height = _ref4.height;
341
379
  var rerender = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
342
380
 
343
381
  _get(_getPrototypeOf(Three2D.prototype), "setSize", this).call(this, {
@@ -367,12 +405,12 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
367
405
  }, {
368
406
  key: "setCameraPositionToCurrentDesignArea",
369
407
  value: function setCameraPositionToCurrentDesignArea() {
370
- var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
408
+ var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
371
409
  animate: false,
372
410
  duration: {}
373
411
  },
374
- animate = _ref4.animate,
375
- duration = _ref4.duration;
412
+ animate = _ref5.animate,
413
+ duration = _ref5.duration;
376
414
 
377
415
  var designArea = this._currentDesignArea || (0, _first["default"])(this._designAreaList);
378
416
  var obj = designArea && this.findAreaObjectByName(designArea.identifier);
@@ -463,16 +501,16 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
463
501
  var size = new _three.Vector2();
464
502
  this.renderer.getSize(size);
465
503
 
466
- var _ref5 = this.camera.view ? this.camera.view : {
504
+ var _ref6 = this.camera.view ? this.camera.view : {
467
505
  width: size.x,
468
506
  height: size.y,
469
507
  offsetX: 0,
470
508
  offsetY: 0
471
509
  },
472
- width = _ref5.width,
473
- height = _ref5.height,
474
- offsetX = _ref5.offsetX,
475
- offsetY = _ref5.offsetY;
510
+ width = _ref6.width,
511
+ height = _ref6.height,
512
+ offsetX = _ref6.offsetX,
513
+ offsetY = _ref6.offsetY;
476
514
 
477
515
  var realWidth = this._size.width * zoom;
478
516
  var realHeight = this._size.height * zoom;
@@ -664,7 +702,7 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
664
702
  availableDesignAreas = (0, _get2["default"])(this._currentDesignView, "designAreas") || [];
665
703
  _context5.next = 6;
666
704
  return Promise.all(availableDesignAreas.map( /*#__PURE__*/function () {
667
- var _ref6 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(designArea) {
705
+ var _ref7 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(designArea) {
668
706
  var material, _this4$getCanvasConte, ctx, canvas, texture, getTextureBuilder, width, height;
669
707
 
670
708
  return regeneratorRuntime.wrap(function _callee4$(_context4) {
@@ -707,7 +745,7 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
707
745
  }));
708
746
 
709
747
  return function (_x3) {
710
- return _ref6.apply(this, arguments);
748
+ return _ref7.apply(this, arguments);
711
749
  };
712
750
  }()));
713
751
 
@@ -878,8 +916,13 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
878
916
  case 7:
879
917
  image = _context8.sent;
880
918
  this.onLoadFinished();
881
- tex = new _three.Texture((0, _optimizeTextureImage.optimizeTextureImage)(image, MAX_TEXTURE_SIZE, MIN_TEXTURE_SIZE));
882
- tex.premultiplyAlpha = true;
919
+ tex = new _three.Texture(this._options.optimizeProductImage ? (0, _optimizeTextureImage.optimizeTextureImage)(image, MAX_TEXTURE_SIZE, MIN_TEXTURE_SIZE) : image);
920
+ tex.premultiplyAlpha = this._options.premultiplyAlpha;
921
+
922
+ if (this._options.sharperFullView) {
923
+ tex.magFilter = _three.NearestFilter;
924
+ }
925
+
883
926
  tex.originalSize = (0, _getImageSize.getImageSize)(image);
884
927
  tex.needsUpdate = true;
885
928
  this.initModelWithTexture(tex);
@@ -888,7 +931,7 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
888
931
  this.render();
889
932
  }
890
933
 
891
- case 15:
934
+ case 16:
892
935
  case "end":
893
936
  return _context8.stop();
894
937
  }
@@ -1026,9 +1069,9 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
1026
1069
  w = _max$sub.x,
1027
1070
  h = _max$sub.y;
1028
1071
 
1029
- var _ref8 = this._fitSize || this.renderer.getSize(new _three.Vector2()),
1030
- cWidth = _ref8.width,
1031
- cHeight = _ref8.height;
1072
+ var _ref9 = this._fitSize || this.renderer.getSize(new _three.Vector2()),
1073
+ cWidth = _ref9.width,
1074
+ cHeight = _ref9.height;
1032
1075
 
1033
1076
  return Math.max(cWidth / w, cHeight / h);
1034
1077
  }
@@ -1083,7 +1126,7 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
1083
1126
  }, {
1084
1127
  key: "getModelPathFromDesignView",
1085
1128
  value: function getModelPathFromDesignView(designView) {
1086
- var images = (0, _get2["default"])(designView, 'images');
1129
+ var images = (0, _get2["default"])(designView, "images");
1087
1130
 
1088
1131
  if (this._materialVariantPath && images.hasOwnProperty(this._materialVariantPath)) {
1089
1132
  return images[this._materialVariantPath];
@@ -1385,7 +1428,7 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
1385
1428
  }, {
1386
1429
  key: "getScreenshots",
1387
1430
  value: function () {
1388
- var _getScreenshots = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee15(callback, _ref9) {
1431
+ var _getScreenshots = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee15(callback, _ref10) {
1389
1432
  var _this9 = this;
1390
1433
 
1391
1434
  var designViewList, areaList, variantList, size, removeTempOverlay, origDesignView, designAreaList, variants, screenshots, origVariantPath, origSize, origPixelRatio, restoreOriginalValues, camera, views, _iterator, _step, _loop, _ret;
@@ -1394,7 +1437,7 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
1394
1437
  while (1) {
1395
1438
  switch (_context17.prev = _context17.next) {
1396
1439
  case 0:
1397
- designViewList = _ref9.designViewList, areaList = _ref9.areaList, variantList = _ref9.variantList, size = _ref9.size;
1440
+ designViewList = _ref10.designViewList, areaList = _ref10.areaList, variantList = _ref10.variantList, size = _ref10.size;
1398
1441
 
1399
1442
  if (this.renderer) {
1400
1443
  _context17.next = 3;
@@ -1429,7 +1472,7 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
1429
1472
  origPixelRatio = this.renderer.getPixelRatio();
1430
1473
 
1431
1474
  restoreOriginalValues = /*#__PURE__*/function () {
1432
- var _ref10 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee13() {
1475
+ var _ref11 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee13() {
1433
1476
  return regeneratorRuntime.wrap(function _callee13$(_context13) {
1434
1477
  while (1) {
1435
1478
  switch (_context13.prev = _context13.next) {
@@ -1459,14 +1502,14 @@ var Three2D = /*#__PURE__*/function (_ThreeBase) {
1459
1502
  }));
1460
1503
 
1461
1504
  return function restoreOriginalValues() {
1462
- return _ref10.apply(this, arguments);
1505
+ return _ref11.apply(this, arguments);
1463
1506
  };
1464
1507
  }();
1465
1508
 
1466
1509
  camera = this.createCameraBase();
1467
1510
  this._screenshotCamera = camera;
1468
- views = designViewList || designAreaList.map(function (_ref11) {
1469
- var designView = _ref11.designView;
1511
+ views = designViewList || designAreaList.map(function (_ref12) {
1512
+ var designView = _ref12.designView;
1470
1513
  return designView;
1471
1514
  });
1472
1515
  _iterator = _createForOfIteratorHelper(variants);
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "redhotmagma-visualization",
3
- "version": "1.31.4",
3
+ "version": "1.31.7",
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.31.4",
9
+ "@configuratorware/scripts": "1.31.7",
10
10
  "@tweenjs/tween.js": "^17.6.0",
11
11
  "console-polyfill": "^0.3.0",
12
12
  "css-element-queries": "^1.2.3",
@@ -6,6 +6,8 @@ import {
6
6
  ImageLoader,
7
7
  Mesh,
8
8
  MeshBasicMaterial,
9
+ NearestFilter,
10
+ LinearFilter,
9
11
  OrthographicCamera,
10
12
  PlaneGeometry,
11
13
  Texture,
@@ -74,6 +76,11 @@ export class Three2D extends ThreeBase {
74
76
  _modelBasePath = "";
75
77
  _modelPath = null;
76
78
  _overlayMode = false;
79
+ _options = {
80
+ sharperFullView: false, // when zoom = 1 use NearestFilter for sharper product image
81
+ optimizeProductImage: false, // upscale or downscale the product image to fit 2048 x 2048
82
+ premultiplyAlpha: false,
83
+ };
77
84
  _imageRepository = createImageRepository(
78
85
  createCache(20),
79
86
  src =>
@@ -119,9 +126,34 @@ export class Three2D extends ThreeBase {
119
126
  camera.position.set(0, 0, cameraZ);
120
127
  redrawOnZoomChange &&
121
128
  observeProperty(camera, "zoom", debounce(this.redraw, redrawDebounceWait));
129
+ observeProperty(camera, "zoom", this.updateModelTextureFilter);
122
130
  return camera;
123
131
  }
124
132
 
133
+ updateModelTextureFilter = ({ value: currentZoom }) => {
134
+ if (!this._options.sharperFullView) {
135
+ return;
136
+ }
137
+ const tex = this._model?.material?.map;
138
+ if (!tex) {
139
+ return;
140
+ }
141
+ if (currentZoom === 1) {
142
+ tex.magFilter = NearestFilter;
143
+ tex.needsUpdate = true;
144
+ } else if (tex.magFilter !== LinearFilter) {
145
+ tex.magFilter = LinearFilter;
146
+ tex.needsUpdate = true;
147
+ }
148
+ };
149
+
150
+ setOptions(options) {
151
+ this._options = {
152
+ ...this._options,
153
+ ...options,
154
+ };
155
+ }
156
+
125
157
  createCamera() {
126
158
  return this.createCameraBase({ redrawOnZoomChange: true });
127
159
  }
@@ -441,8 +473,15 @@ export class Three2D extends ThreeBase {
441
473
  const image = await this._imageRepository.loadImage(url);
442
474
  this.onLoadFinished();
443
475
 
444
- const tex = new Texture(optimizeTextureImage(image, MAX_TEXTURE_SIZE, MIN_TEXTURE_SIZE));
445
- tex.premultiplyAlpha = true;
476
+ const tex = new Texture(
477
+ this._options.optimizeProductImage
478
+ ? optimizeTextureImage(image, MAX_TEXTURE_SIZE, MIN_TEXTURE_SIZE)
479
+ : image
480
+ );
481
+ tex.premultiplyAlpha = this._options.premultiplyAlpha;
482
+ if (this._options.sharperFullView) {
483
+ tex.magFilter = NearestFilter;
484
+ }
446
485
  tex.originalSize = getImageSize(image);
447
486
  tex.needsUpdate = true;
448
487
 
@@ -600,17 +639,15 @@ export class Three2D extends ThreeBase {
600
639
  }
601
640
 
602
641
  getModelPathFromDesignView(designView) {
603
- const images = get(designView, 'images');
642
+ const images = get(designView, "images");
604
643
  if (this._materialVariantPath && images.hasOwnProperty(this._materialVariantPath)) {
605
644
  return images[this._materialVariantPath];
606
- }
607
- else if (images.hasOwnProperty(this._itemPath)) {
645
+ } else if (images.hasOwnProperty(this._itemPath)) {
608
646
  return images[this._itemPath];
609
- }
610
- else {
647
+ } else {
611
648
  return this._materialVariantPath
612
- ? get(designView, `images[${this._materialVariantPath}]`)
613
- : get(designView, `images[${this._itemPath}]`);
649
+ ? get(designView, `images[${this._materialVariantPath}]`)
650
+ : get(designView, `images[${this._itemPath}]`);
614
651
  }
615
652
  }
616
653