redhotmagma-visualization 1.28.4 → 1.29.0

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.
Files changed (88) hide show
  1. package/AlignTargetProvider.js +129 -0
  2. package/CommonUtils/Deferred.js +135 -0
  3. package/CommonUtils/Observable.js +126 -0
  4. package/CommonUtils/PropertyObserver.js +61 -0
  5. package/CommonUtils/SyncCurrentFunction.js +59 -0
  6. package/CommonUtils/SyncObservableEvent.js +19 -0
  7. package/CommonUtils/pointerEvent.js +415 -0
  8. package/Constants.js +23 -0
  9. package/DevApp.js +1049 -0
  10. package/ExposedModules.js +26 -0
  11. package/FallbackVisualization.js +26 -0
  12. package/PrintingEffects/ColorEmbossingEffect.js +58 -0
  13. package/PrintingEffects/DomingEffect.js +150 -0
  14. package/PrintingEffects/EmbossingEffect.js +65 -0
  15. package/PrintingEffects/EmbroideryEffect.js +541 -0
  16. package/PrintingEffects/EngravingEffect.js +65 -0
  17. package/PrintingEffects/PrintingEffects.js +117 -0
  18. package/PrintingEffects/PrintingEffectsUtils.js +53 -0
  19. package/PrintingEffects/resources/embroidery_multiply.jpg +0 -0
  20. package/PrintingEffects/resources/embroidery_screen.jpg +0 -0
  21. package/README.md +11 -4
  22. package/React/ReactBase.js +111 -0
  23. package/Three/Controls/OrbitControls.js +745 -0
  24. package/Three/Exporters/glTFExporter.js +48 -0
  25. package/Three/Loaders/ColladaLoader.js +2916 -0
  26. package/Three/Loaders/MTLLoader.js +449 -0
  27. package/Three/Loaders/OBJLoader.js +548 -0
  28. package/Three/Three2D.js +1790 -0
  29. package/Three/Three2DLayers.js +504 -0
  30. package/Three/Three3D.js +1412 -0
  31. package/Three/Three3DScene.js +1432 -0
  32. package/Three/ThreeBase.js +724 -0
  33. package/Utils/DesignArea/getDesignAreaCanvasSize.js +32 -0
  34. package/Utils/TextureBuilder/createTextureBuilder.js +334 -0
  35. package/Utils/TextureBuilder/textureBuilderFunctions.js +87 -0
  36. package/Utils/alignToElement.js +58 -0
  37. package/Utils/createAlphaMapFromAlphaChannel.js +50 -0
  38. package/Utils/createCache.js +46 -0
  39. package/Utils/createCanvas.js +29 -0
  40. package/Utils/createImageRepository.js +124 -0
  41. package/Utils/disposeMaterial.js +41 -0
  42. package/Utils/getImageSize.js +15 -0
  43. package/Utils/imagePreloader.js +76 -0
  44. package/Utils/initTextureCanvas.js +49 -0
  45. package/Utils/isMobileDevice.js +19 -0
  46. package/Utils/optimizeTextureImage.js +73 -0
  47. package/Utils/rememberCameraViewOffset.js +21 -0
  48. package/Utils/removeObject.js +22 -0
  49. package/Utils/restrictCameraMovement.js +45 -0
  50. package/Utils/setOrthographicCameraSize.js +16 -0
  51. package/Utils/updateFitSizeToElement.js +39 -0
  52. package/VisualizationContainer.js +279 -0
  53. package/VisualizationInterface.js +298 -0
  54. package/VisualizationProvider.js +38 -0
  55. package/__mocks__/exportedSample.svg +45 -0
  56. package/index.js +16 -0
  57. package/package.json +10 -70
  58. package/scripts/cpPublic.js +9 -12
  59. package/scripts/cpPublicLocal.js +30 -0
  60. package/src/CommonUtils/Observable.js +1 -0
  61. package/src/CommonUtils/pointerEvent.js +2 -1
  62. package/src/DevApp.js +2 -1
  63. package/src/FallbackVisualization.js +1 -5
  64. package/src/PrintingEffects/DomingEffect.js +1 -0
  65. package/src/PrintingEffects/EmbroideryEffect.js +3 -2
  66. package/src/React/ReactBase.js +1 -1
  67. package/src/Three/Controls/OrbitControls.js +2 -0
  68. package/src/Three/Loaders/ColladaLoader.js +111 -294
  69. package/src/Three/Loaders/MTLLoader.js +2 -0
  70. package/src/Three/Loaders/OBJLoader.js +2 -0
  71. package/src/Three/Three2D.js +18 -11
  72. package/src/Three/Three3D.js +9 -1
  73. package/src/Three/ThreeBase.js +14 -2
  74. package/src/Utils/DesignArea/getDesignAreaCanvasSize.js +1 -0
  75. package/src/Utils/TextureBuilder/createTextureBuilder.js +2 -0
  76. package/src/Utils/imagePreloader.js +1 -0
  77. package/src/Utils/initTextureCanvas.js +3 -0
  78. package/src/Utils/isMobileDevice.js +2 -0
  79. package/src/Utils/optimizeTextureImage.js +1 -0
  80. package/src/VisualizationContainer.js +3 -1
  81. package/src/VisualizationInterface.js +10 -1
  82. package/visualizationAdapterCreator.js +76 -0
  83. package/babel.config.js +0 -41
  84. package/scripts/cpPath.js +0 -151
  85. package/scripts/moveLibToPackageRoot.js +0 -44
  86. package/scripts/utils/fileSystem.js +0 -69
  87. package/scripts/utils/process.js +0 -19
  88. package/tsconfig.json +0 -22
@@ -0,0 +1,415 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createZoomHandler = exports.createPinchZoomListener = exports.createMouseWheelEventListener = exports.createPointerMoveEventListener = exports.createPointerEventListener = exports.createPointerHitListener = exports.createPositionChangeChecker = exports.getPointFromPointerEvent = void 0;
7
+
8
+ /**
9
+ * @param {MouseEvent|TouchEvent} evt
10
+ * @param {HTMLElement} relativeTo
11
+ * @returns {{x: number, y: number}}
12
+ */
13
+ var getPointFromPointerEvent = function getPointFromPointerEvent(evt, relativeTo) {
14
+ var x, y;
15
+ var touches = evt.changedTouches && evt.changedTouches.length > 0 && evt.changedTouches || evt.touches;
16
+
17
+ if (touches && touches.length > 0) {
18
+ x = touches[0].clientX;
19
+ y = touches[0].clientY;
20
+ } else {
21
+ x = evt.clientX;
22
+ y = evt.clientY;
23
+ }
24
+
25
+ if (relativeTo) {
26
+ var _relativeTo$getBoundi = relativeTo.getBoundingClientRect(),
27
+ top = _relativeTo$getBoundi.top,
28
+ left = _relativeTo$getBoundi.left;
29
+
30
+ x -= left;
31
+ y -= top;
32
+ }
33
+
34
+ return {
35
+ x: x,
36
+ y: y
37
+ };
38
+ };
39
+ /**
40
+ * Creates and stores the print of the event position for later comparison.
41
+ * It can be used to create a position change checker function, in order to solve the problem
42
+ * of Chrome's automatically triggered mousemove event when clicking without moving the mouse.
43
+ * @param evt
44
+ * @returns {function(*=): boolean}
45
+ */
46
+
47
+
48
+ exports.getPointFromPointerEvent = getPointFromPointerEvent;
49
+
50
+ var createPositionChangeChecker = function createPositionChangeChecker(evt) {
51
+ var getPositionPrint = function getPositionPrint(evt) {
52
+ return "" + evt.pageX + "-" + evt.pageY;
53
+ };
54
+
55
+ var initialPrint = getPositionPrint(evt);
56
+ return function (evt) {
57
+ return initialPrint !== getPositionPrint(evt);
58
+ };
59
+ };
60
+ /**
61
+ * Creates a "hit" event listener.
62
+ * It detects a single tap (or click) - if the pointer was released without moving.
63
+ * @param element
64
+ * @param {function} fn The event handler function
65
+ * @returns {function()} A function to be called to remove the event listeners
66
+ */
67
+
68
+
69
+ exports.createPositionChangeChecker = createPositionChangeChecker;
70
+
71
+ var createPointerHitListener = function createPointerHitListener(element, fn) {
72
+ var moved = false;
73
+ var checkPositionChange = false; // preventing the emulated mouse events after touchend
74
+ // see https://developer.mozilla.org/en-US/docs/Web/API/Touch_events/Supporting_both_TouchEvent_and_MouseEvent
75
+
76
+ var preventEmulatedEvents = function preventEmulatedEvents(cb) {
77
+ return function (evt) {
78
+ if (!moved && evt.type === "touchend") {
79
+ evt.preventDefault();
80
+ }
81
+
82
+ cb(evt);
83
+ };
84
+ };
85
+
86
+ var startHandler = function startHandler(evt) {
87
+ moved = false;
88
+ var isTouch = (evt.changedTouches || evt.touches || []).length > 0;
89
+
90
+ if (isTouch) {
91
+ // in case of touch events we can skip the check, the events are fired correctly
92
+ checkPositionChange = false;
93
+ element.addEventListener("touchmove", moveHandler, true);
94
+ element.addEventListener("touchend", endHandler);
95
+ } else {
96
+ checkPositionChange = createPositionChangeChecker(evt);
97
+ element.addEventListener("mousemove", moveHandler);
98
+ element.addEventListener("mouseup", endHandler);
99
+ }
100
+ };
101
+
102
+ var moveHandler = function moveHandler(evt) {
103
+ if (checkPositionChange) {
104
+ moved = checkPositionChange(evt);
105
+ } else {
106
+ moved = true;
107
+ }
108
+ };
109
+
110
+ var endHandler = preventEmulatedEvents(function () {
111
+ !moved && fn.apply(void 0, arguments);
112
+ element.removeEventListener("touchmove", moveHandler, true);
113
+ element.removeEventListener("mousemove", moveHandler);
114
+ element.removeEventListener("touchend", endHandler);
115
+ element.removeEventListener("mouseup", endHandler);
116
+ });
117
+ element.addEventListener("mousedown", startHandler);
118
+ element.addEventListener("touchstart", startHandler);
119
+ return function () {
120
+ element.removeEventListener("mousedown", startHandler);
121
+ element.removeEventListener("touchstart", startHandler);
122
+ };
123
+ };
124
+ /**
125
+ * Creates a general pointer event listener (for mouse and touch events)
126
+ * @param element
127
+ * @param {string} name The name of the event phase ('start'|'move'|'end')
128
+ * @param {function} fn The event handler function
129
+ * @returns {function()} A function to be called to remove the event listeners
130
+ */
131
+
132
+
133
+ exports.createPointerHitListener = createPointerHitListener;
134
+
135
+ var createPointerEventListener = function createPointerEventListener(element, name, fn) {
136
+ var touchName, mouseName;
137
+
138
+ switch (name) {
139
+ case "start":
140
+ {
141
+ touchName = "touchstart";
142
+ mouseName = "mousedown";
143
+ break;
144
+ }
145
+
146
+ case "move":
147
+ {
148
+ touchName = "touchmove";
149
+ mouseName = "mousemove";
150
+ break;
151
+ }
152
+
153
+ case "end":
154
+ {
155
+ touchName = "touchend";
156
+ mouseName = "mouseup";
157
+ break;
158
+ }
159
+ }
160
+
161
+ var tolerance = 1; // ms
162
+
163
+ var timeStamp = 0;
164
+
165
+ var touchHandler = function touchHandler(evt) {
166
+ timeStamp = evt.timeStamp;
167
+
168
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
169
+ args[_key - 1] = arguments[_key];
170
+ }
171
+
172
+ fn.apply(void 0, [evt].concat(args));
173
+ };
174
+
175
+ var mouseHandler = function mouseHandler(evt) {
176
+ if (evt.timeStamp - timeStamp < tolerance) {
177
+ // eslint-disable-next-line no-console
178
+ console.log("Skipped double event handling.");
179
+ return;
180
+ } // for 'start' we call the function only if the element is is the target (or contained by the target)
181
+ // for others it has to be called in every case
182
+
183
+
184
+ if (name !== "start" || evt.target === element || evt.target.contains(element)) {
185
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
186
+ args[_key2 - 1] = arguments[_key2];
187
+ }
188
+
189
+ fn.apply(void 0, [evt].concat(args));
190
+ }
191
+ };
192
+
193
+ element.addEventListener(touchName, touchHandler);
194
+ window.addEventListener(mouseName, mouseHandler);
195
+ return function () {
196
+ element.removeEventListener(touchName, touchHandler);
197
+ window.removeEventListener(mouseName, mouseHandler);
198
+ };
199
+ };
200
+ /**
201
+ * Helper function to get the distance of two points
202
+ * @param {number} x1
203
+ * @param {number} x2
204
+ * @param {number} y1
205
+ * @param {number} y2
206
+ * @return {number}
207
+ */
208
+
209
+
210
+ exports.createPointerEventListener = createPointerEventListener;
211
+
212
+ var getTwoPointsDistance = function getTwoPointsDistance(x1, x2, y1, y2) {
213
+ return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
214
+ };
215
+ /**
216
+ * Returns the distance between the first two touch points
217
+ * @param {array} touches The touches list from the touch event
218
+ * @return {null|number} The distance
219
+ */
220
+
221
+
222
+ var getTouchDistance = function getTouchDistance(_ref) {
223
+ var touches = _ref.touches;
224
+
225
+ if (!touches || touches.length < 2) {
226
+ return null;
227
+ }
228
+
229
+ return getTwoPointsDistance(touches[0].clientX, touches[1].clientX, touches[0].clientY, touches[1].clientY);
230
+ };
231
+ /**
232
+ * Creates a pointer move event listener (for mouse and touch events)
233
+ * @param element
234
+ * @param {function} fn The event handler function
235
+ * @returns {function()} A function to be called to remove the event listeners
236
+ */
237
+
238
+
239
+ var createPointerMoveEventListener = function createPointerMoveEventListener(element, fn) {
240
+ var moveListener = null;
241
+
242
+ var removeMoveListener = function removeMoveListener() {
243
+ if (moveListener) {
244
+ moveListener();
245
+ moveListener = null;
246
+ }
247
+ };
248
+
249
+ var getPointFromMultipleTouchEvent = function getPointFromMultipleTouchEvent(evt, prevPosition) {
250
+ if (!prevPosition || !evt.touches || evt.touches.length < 2) {
251
+ return getPointFromPointerEvent(evt);
252
+ }
253
+
254
+ var x = null;
255
+ var y = null;
256
+ var distance = null;
257
+
258
+ for (var i = 0; i < evt.touches.length; i++) {
259
+ var newDistance = getTwoPointsDistance(evt.touches[i].clientX, prevPosition.x, evt.touches[i].clientY, prevPosition.y); // Get the closest touch event to the previous one
260
+
261
+ if (distance === null || newDistance < distance) {
262
+ distance = newDistance;
263
+ x = evt.touches[i].clientX;
264
+ y = evt.touches[i].clientY;
265
+ }
266
+ }
267
+
268
+ return {
269
+ x: x,
270
+ y: y
271
+ };
272
+ };
273
+
274
+ var startListener = createPointerEventListener(element, "start", function (evt) {
275
+ var prevPosition = getPointFromMultipleTouchEvent(evt);
276
+ var prevZoomDistance = getTouchDistance(evt);
277
+ removeMoveListener();
278
+ moveListener = createPointerEventListener(element, "move", function (evt) {
279
+ var currentPosition = getPointFromMultipleTouchEvent(evt, prevPosition);
280
+ var currentZoomDistance = getTouchDistance(evt);
281
+ var change = {
282
+ x: currentPosition.x - prevPosition.x,
283
+ y: currentPosition.y - prevPosition.y,
284
+ zoom: prevZoomDistance !== null && currentZoomDistance !== null ? currentZoomDistance / prevZoomDistance : null
285
+ };
286
+ prevPosition = currentPosition;
287
+ prevZoomDistance = currentZoomDistance;
288
+
289
+ for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
290
+ args[_key3 - 1] = arguments[_key3];
291
+ }
292
+
293
+ fn.apply(void 0, [evt, change].concat(args));
294
+ });
295
+ });
296
+ var endListener = createPointerEventListener(element, "end", function () {
297
+ removeMoveListener();
298
+ });
299
+ return function () {
300
+ startListener();
301
+ endListener();
302
+ removeMoveListener();
303
+ };
304
+ };
305
+ /**
306
+ * Creates a mouse wheel event listener
307
+ * @param {HTMLElement} element
308
+ * @param {function} fn The event handler function
309
+ * @returns {function} A function to be called to remove the event listener
310
+ */
311
+
312
+
313
+ exports.createPointerMoveEventListener = createPointerMoveEventListener;
314
+
315
+ var createMouseWheelEventListener = function createMouseWheelEventListener(element, fn) {
316
+ var handler = function handler(evt) {
317
+ for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
318
+ args[_key4 - 1] = arguments[_key4];
319
+ }
320
+
321
+ fn.apply(void 0, [evt].concat(args));
322
+ };
323
+
324
+ element.addEventListener("wheel", handler);
325
+ return function () {
326
+ element.removeEventListener("wheel", handler);
327
+ };
328
+ };
329
+ /**
330
+ * Creates a "pinch zoom" listener using touch events
331
+ * @param {HTMLElement} element
332
+ * @param {function} fn The event handler function
333
+ * @param {number} sensitivity The min distance to call the wrapped event handler
334
+ * @return {function} A function to be called to remove the event listener
335
+ */
336
+
337
+
338
+ exports.createMouseWheelEventListener = createMouseWheelEventListener;
339
+
340
+ var createPinchZoomListener = function createPinchZoomListener(element, fn) {
341
+ var sensitivity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;
342
+ var prevDistance;
343
+
344
+ var startHandler = function startHandler(evt) {
345
+ if (evt.touches.length < 2) {
346
+ return;
347
+ }
348
+
349
+ element.addEventListener("touchmove", moveHandler);
350
+ element.addEventListener("touchend", endHandler);
351
+ prevDistance = getTouchDistance(evt);
352
+ };
353
+
354
+ var moveHandler = function moveHandler(evt) {
355
+ if (evt.touches.length < 2) {
356
+ cleanUpListeners();
357
+ return;
358
+ }
359
+
360
+ var distance = getTouchDistance(evt);
361
+
362
+ if (Math.abs(distance - prevDistance) > sensitivity) {
363
+ fn(evt, {
364
+ prevDistance: prevDistance,
365
+ distance: distance
366
+ });
367
+ prevDistance = distance;
368
+ }
369
+ };
370
+
371
+ var endHandler = function endHandler() {
372
+ return element.removeEventListener("touchmove", moveHandler);
373
+ };
374
+
375
+ element.addEventListener("touchstart", startHandler);
376
+
377
+ var cleanUpListeners = function cleanUpListeners() {
378
+ element.removeEventListener("touchstart", startHandler);
379
+ };
380
+
381
+ return cleanUpListeners;
382
+ };
383
+ /**
384
+ * Creates a general zoom handler that includes mouse wheel and the two finger pinch as well
385
+ * @param {HTMLElement} element
386
+ * @param {function} fn The event handler function
387
+ * @return {function} A function to be called to remove the event listeners
388
+ */
389
+
390
+
391
+ exports.createPinchZoomListener = createPinchZoomListener;
392
+
393
+ var createZoomHandler = function createZoomHandler(element, fn) {
394
+ var cleanUpMouseWheelListener = createMouseWheelEventListener(element, function (evt) {
395
+ var eventDelta = evt.deltaY || evt.detail;
396
+ var direction = eventDelta > 0 ? "out" : "in";
397
+ fn(evt, {
398
+ direction: direction
399
+ });
400
+ });
401
+ var cleanUpPinchZoomListener = createPinchZoomListener(element, function (evt, data) {
402
+ var distance = data.distance,
403
+ prevDistance = data.prevDistance;
404
+ var direction = distance / prevDistance < 1 ? "out" : "in";
405
+ fn(evt, {
406
+ direction: direction
407
+ });
408
+ });
409
+ return function () {
410
+ cleanUpMouseWheelListener();
411
+ cleanUpPinchZoomListener();
412
+ };
413
+ };
414
+
415
+ exports.createZoomHandler = createZoomHandler;
package/Constants.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Numeric = exports.EventTypes = void 0;
7
+ var EventTypes = {
8
+ Intersection: "Visualization/Intersection",
9
+ ClickAway: "Visualization/ClickAway",
10
+ ModelLoaded: "Visualization/ModelLoaded",
11
+ MaterialUpdated: "Visualization/MaterialUpdated",
12
+ Error: "Visualization/Error",
13
+ Initialized: "Visualization/Initialized",
14
+ LoadStart: "Visualization/LoadStart",
15
+ LoadFinished: "Visualization/LoadFinished",
16
+ LoadError: "Visualization/LoadError",
17
+ Zoomed: "Visualization/Zoomed"
18
+ };
19
+ exports.EventTypes = EventTypes;
20
+ var Numeric = {
21
+ TwoPI: 2 * Math.PI
22
+ };
23
+ exports.Numeric = Numeric;