x_ite 8.6.1 → 8.6.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.
Files changed (73) hide show
  1. package/.vscode/settings.json +7 -7
  2. package/dist/assets/components/Annotation.js +13 -13
  3. package/dist/assets/components/Annotation.min.js +1 -1
  4. package/dist/assets/components/CADGeometry.js +13 -13
  5. package/dist/assets/components/CADGeometry.min.js +1 -1
  6. package/dist/assets/components/CubeMapTexturing.js +25 -25
  7. package/dist/assets/components/CubeMapTexturing.min.js +1 -1
  8. package/dist/assets/components/DIS.js +13 -13
  9. package/dist/assets/components/DIS.min.js +1 -1
  10. package/dist/assets/components/EventUtilities.js +9 -9
  11. package/dist/assets/components/EventUtilities.min.js +1 -1
  12. package/dist/assets/components/Geometry2D.js +19 -19
  13. package/dist/assets/components/Geometry2D.min.js +1 -1
  14. package/dist/assets/components/Geospatial.js +33 -33
  15. package/dist/assets/components/Geospatial.min.js +1 -1
  16. package/dist/assets/components/HAnim.js +18 -18
  17. package/dist/assets/components/HAnim.min.js +1 -1
  18. package/dist/assets/components/KeyDeviceSensor.js +8 -8
  19. package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
  20. package/dist/assets/components/Layout.js +27 -27
  21. package/dist/assets/components/Layout.min.js +1 -1
  22. package/dist/assets/components/NURBS.js +24 -24
  23. package/dist/assets/components/NURBS.min.js +1 -1
  24. package/dist/assets/components/ParticleSystems.js +23 -23
  25. package/dist/assets/components/ParticleSystems.min.js +1 -1
  26. package/dist/assets/components/Picking.js +19 -19
  27. package/dist/assets/components/Picking.min.js +1 -1
  28. package/dist/assets/components/RigidBodyPhysics.js +18 -18
  29. package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
  30. package/dist/assets/components/Scripting.js +28 -28
  31. package/dist/assets/components/Scripting.min.js +1 -1
  32. package/dist/assets/components/Text.js +33 -36
  33. package/dist/assets/components/Text.min.js +1 -1
  34. package/dist/assets/components/TextureProjector.js +14 -14
  35. package/dist/assets/components/TextureProjector.min.js +1 -1
  36. package/dist/assets/components/Texturing3D.js +32 -32
  37. package/dist/assets/components/Texturing3D.min.js +1 -1
  38. package/dist/assets/components/VolumeRendering.js +19 -19
  39. package/dist/assets/components/VolumeRendering.min.js +1 -1
  40. package/dist/assets/components/X_ITE.js +9 -9
  41. package/dist/assets/components/X_ITE.min.js +1 -1
  42. package/dist/x_ite.css +1 -1
  43. package/dist/x_ite.js +190 -163
  44. package/dist/x_ite.min.js +1 -1
  45. package/dist/x_ite.zip +0 -0
  46. package/docs/_config.yml +2 -2
  47. package/docs/_posts/laboratory/x3d-file-converter.md +178 -0
  48. package/docs/laboratory/3d-l-system-generator.html +1 -1
  49. package/docs/laboratory/gltf-sample-viewer.html +1 -1
  50. package/docs/laboratory/online-dicom-and-nrrd-file-viewer.html +1 -1
  51. package/docs/laboratory/real-time-earth-quake-information.html +1 -1
  52. package/docs/laboratory/x3d-visual-blend-mode-editor.html +1 -1
  53. package/package.json +1 -1
  54. package/src/standard/Math/Algorithms/Bezier.js +3 -15
  55. package/src/standard/Math/Numbers/Matrix2.js +5 -5
  56. package/src/tests.js +11 -0
  57. package/src/x_ite/Browser/Core/X3DCoreContext.js +4 -6
  58. package/src/x_ite/Browser/Text/PolygonText.js +9 -12
  59. package/src/x_ite/Browser/VERSION.js +1 -1
  60. package/src/x_ite/Components/Core/X3DNode.js +12 -0
  61. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +18 -0
  62. package/src/x_ite/Configuration/UnitInfo.js +2 -0
  63. package/src/x_ite/Execution/X3DExportedNode.js +4 -0
  64. package/src/x_ite/Execution/X3DImportedNode.js +14 -0
  65. package/src/x_ite/Execution/X3DScene.js +4 -0
  66. package/src/x_ite/Fields/SFString.js +4 -6
  67. package/src/x_ite/InputOutput/FileLoader.js +1 -1
  68. package/src/x_ite/InputOutput/Generator.js +35 -55
  69. package/src/x_ite/Parser/SVGParser.js +12 -19
  70. package/src/x_ite/Parser/X3DParser.js +1 -1
  71. package/src/x_ite/Prototype/X3DExternProtoDeclaration.js +4 -0
  72. package/src/x_ite/Prototype/X3DProtoDeclaration.js +4 -0
  73. package/src/x_ite/Routing/X3DRoute.js +8 -0
@@ -350,7 +350,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
350
350
  generator .string += '"';
351
351
  generator .string += ':';
352
352
  generator .string += generator .TidySpace ();
353
+ generator .string += '"';
353
354
  generator .string += generator .JSONEncode (generator .Name (this .getInlineNode ()));
355
+ generator .string += '"';
354
356
  generator .string += ',';
355
357
  generator .string += generator .TidyBreak ();
356
358
 
@@ -360,7 +362,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
360
362
  generator .string += '"';
361
363
  generator .string += ':';
362
364
  generator .string += generator .TidySpace ();
365
+ generator .string += '"';
363
366
  generator .string += generator .JSONEncode (this .getExportedName ());
367
+ generator .string += '"';
364
368
 
365
369
  if (this .getImportedName () !== this .getExportedName ())
366
370
  {
@@ -372,7 +376,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
372
376
  generator .string += '"';
373
377
  generator .string += ':';
374
378
  generator .string += generator .TidySpace ();
379
+ generator .string += '"';
375
380
  generator .string += generator .JSONEncode (this .getImportedName ());
381
+ generator .string += '"';
376
382
  generator .string += generator .TidyBreak ();
377
383
  }
378
384
  else
@@ -437,7 +443,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
437
443
  generator .string += '"';
438
444
  generator .string += ':';
439
445
  generator .string += generator .TidySpace ();
446
+ generator .string += '"';
440
447
  generator .string += generator .JSONEncode (sourceNodeName);
448
+ generator .string += '"';
441
449
  generator .string += ',';
442
450
  generator .string += generator .TidyBreak ();
443
451
 
@@ -447,7 +455,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
447
455
  generator .string += '"';
448
456
  generator .string += ':';
449
457
  generator .string += generator .TidySpace ();
458
+ generator .string += '"';
450
459
  generator .string += generator .JSONEncode (sourceField);
460
+ generator .string += '"';
451
461
  generator .string += ',';
452
462
  generator .string += generator .TidyBreak ();
453
463
 
@@ -457,7 +467,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
457
467
  generator .string += '"';
458
468
  generator .string += ':';
459
469
  generator .string += generator .TidySpace ();
470
+ generator .string += '"';
460
471
  generator .string += generator .JSONEncode (destinationNodeName);
472
+ generator .string += '"';
461
473
  generator .string += ',';
462
474
  generator .string += generator .TidyBreak ();
463
475
 
@@ -467,7 +479,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
467
479
  generator .string += '"';
468
480
  generator .string += ':';
469
481
  generator .string += generator .TidySpace ();
482
+ generator .string += '"';
470
483
  generator .string += generator .JSONEncode (destinationField);
484
+ generator .string += '"';
471
485
  generator .string += generator .TidyBreak ();
472
486
 
473
487
  generator .string += generator .DecIndent ();
@@ -762,7 +762,9 @@ X3DScene .prototype = Object .assign (Object .create (X3DExecutionContext .proto
762
762
  generator .string += '"';
763
763
  generator .string += ':';
764
764
  generator .string += generator .TidySpace ();
765
+ generator .string += '"';
765
766
  generator .string += generator .JSONEncode (key);
767
+ generator .string += '"';
766
768
  generator .string += ',';
767
769
  generator .string += generator .TidyBreak ();
768
770
 
@@ -772,7 +774,9 @@ X3DScene .prototype = Object .assign (Object .create (X3DExecutionContext .proto
772
774
  generator .string += '"';
773
775
  generator .string += ':';
774
776
  generator .string += generator .TidySpace ();
777
+ generator .string += '"';
775
778
  generator .string += generator .JSONEncode (value);
779
+ generator .string += '"';
776
780
  generator .string += generator .TidyBreak ();
777
781
 
778
782
  generator .string += generator .DecIndent ();
@@ -48,10 +48,6 @@
48
48
  import X3DField from "../Base/X3DField.js";
49
49
  import X3DConstants from "../Base/X3DConstants.js";
50
50
 
51
- const
52
- unescape = /\\([\\"])/g,
53
- escape = /([\\"])/g;
54
-
55
51
  function SFString (value)
56
52
  {
57
53
  return X3DField .call (this, arguments .length ? "" + value : "");
@@ -61,11 +57,11 @@ Object .assign (SFString,
61
57
  {
62
58
  unescape: function (string)
63
59
  {
64
- return string .replace (unescape, "$1");
60
+ return string .replace (/\\([\\"])/g, "$1");
65
61
  },
66
62
  escape: function (string)
67
63
  {
68
- return string .replace (escape, "\\$1");
64
+ return string .replace (/([\\"])/g, "\\$1");
69
65
  },
70
66
  });
71
67
 
@@ -115,7 +111,9 @@ SFString .prototype = Object .assign (Object .create (X3DField .prototype),
115
111
  },
116
112
  toJSONStreamValue: function (generator)
117
113
  {
114
+ generator .string += '"';
118
115
  generator .string += generator .JSONEncode (this .getValue ());
116
+ generator .string += '"';
119
117
  },
120
118
  });
121
119
 
@@ -282,7 +282,7 @@ FileLoader .prototype = Object .assign (Object .create (X3DObject .prototype),
282
282
 
283
283
  const
284
284
  options = { cache: this .node .getCache () ? "default" : "reload" },
285
- response = this .handleErrors (await fetch (decodeURI (this .URL .href), options)),
285
+ response = this .handleErrors (await fetch (this .URL .href, options)),
286
286
  contentType = response .headers .get ("content-type") .replace (/;.*$/, "");
287
287
 
288
288
  if (this .foreign)
@@ -499,68 +499,48 @@ Generator .prototype =
499
499
 
500
500
  return value;
501
501
  },
502
- XMLEncode: function (string)
503
- {
504
- return string
505
- .replace (/&/g, "&")
506
- .replace (/\\/g, "\\\\")
507
- .replace (/\t/g, "	")
508
- .replace (/\n/g, "
")
509
- .replace (/\r/g, "
")
510
- .replace (/</g, "&lt;")
511
- .replace (/>/g, "&gt;")
512
- .replace (/'/g, "&apos;")
513
- .replace (/"/g, "\\\"");
514
- },
502
+ XMLEncode: (function ()
503
+ {
504
+ const map = {
505
+ "\\": "\\\\",
506
+ "\r": "&#xD;",
507
+ "\n": "&#xA;",
508
+ "\t": "&#x9;",
509
+ "\"": "\\\"",
510
+ "'": "&apos;",
511
+ "<": "&lt;",
512
+ ">": "&gt;",
513
+ "&": "&amp;",
514
+ };
515
+
516
+ const regex = /([\\\r\n\t"'<>&])/g;
517
+
518
+ return function (string)
519
+ {
520
+ return string .replace (regex, char => map [char]);
521
+ };
522
+ })(),
515
523
  escapeCDATA: function (string)
516
524
  {
517
525
  return string .replace (/\]\]\>/g, "\\]\\]\\>");
518
526
  },
519
- JSONEncode: function (string)
527
+ JSONEncode: (function ()
520
528
  {
521
- let result = '"';
522
-
523
- for (const character of string)
524
- {
525
- switch (character)
526
- {
527
- case '\r':
528
- {
529
- result += "\\r";
530
- break;
531
- }
532
- case '\n':
533
- {
534
- result += "\\n";
535
- break;
536
- }
537
- case '\t':
538
- {
539
- result += "\\t";
540
- break;
541
- }
542
- case '"':
543
- {
544
- result += "\\\"";
545
- break;
546
- }
547
- case '\\':
548
- {
549
- result += "\\\\";
550
- break;
551
- }
552
- default:
553
- {
554
- result += character;
555
- break;
556
- }
557
- }
558
- }
529
+ const map = {
530
+ "\\": "\\\\",
531
+ "\r": "\\r",
532
+ "\n": "\\n",
533
+ "\t": "\\t",
534
+ "\"": "\\\"",
535
+ };
559
536
 
560
- result += '"';
537
+ const regex = /([\\\t\n\r"])/g;
561
538
 
562
- return result;
563
- },
539
+ return function (string)
540
+ {
541
+ return string .replace (regex, char => map [char]);
542
+ };
543
+ })(),
564
544
  JSONNumber: function (value)
565
545
  {
566
546
  switch (value)
@@ -103,9 +103,9 @@ const
103
103
  PICA = INCH / 6, // One pica in meters.
104
104
  PIXEL = INCH / 90, // One pixel in meters.
105
105
  EM = 16, // One em in pixels,
106
- BEZIER_STEPS = 10,
107
- CIRCLE_STEPS = 64,
108
- GRADIENT_SIZE = 256; // In pixels.
106
+ BEZIER_STEPS = 10, // Subdivisions of a span.
107
+ CIRCLE_STEPS = 64, // Subdivisions of a circle, used for arc.
108
+ GRADIENT_SIZE = 256; // In pixels.
109
109
 
110
110
  /*
111
111
  * Parser
@@ -124,7 +124,7 @@ function SVGParser (scene)
124
124
 
125
125
  // Options
126
126
 
127
- this .solid = false;
127
+ this .solid = false; // Are 2D primitives solid.
128
128
 
129
129
  // Globals
130
130
 
@@ -1026,6 +1026,9 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
1026
1026
  },
1027
1027
  hrefAttribute: function (attribute)
1028
1028
  {
1029
+ if (!attribute)
1030
+ return;
1031
+
1029
1032
  const
1030
1033
  scene = this .getExecutionContext (),
1031
1034
  hash = new URL (attribute, scene .getWorldURL ()) .hash .slice (1);
@@ -1169,8 +1172,6 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
1169
1172
  {
1170
1173
  // moveto
1171
1174
 
1172
- points = this .removeConsecutiveIdenticalPoints (points);
1173
-
1174
1175
  if (points .length > 2)
1175
1176
  {
1176
1177
  contours .push (Object .assign (points, { index: index, closed: false }));
@@ -1342,7 +1343,7 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
1342
1343
  y += ay;
1343
1344
  }
1344
1345
 
1345
- points .push (... Bezier .quadric (ax, ay, 0, x1, y1, 0, x, y, 0, BEZIER_STEPS));
1346
+ Bezier .quadric (ax, ay, 0, x1, y1, 0, x, y, 0, BEZIER_STEPS, points);
1346
1347
 
1347
1348
  ax = x;
1348
1349
  ay = y;
@@ -1403,7 +1404,7 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
1403
1404
  }
1404
1405
  }
1405
1406
 
1406
- points .push (... Bezier .quadric (ax, ay, 0, x1, y1, 0, x, y, 0, BEZIER_STEPS));
1407
+ Bezier .quadric (ax, ay, 0, x1, y1, 0, x, y, 0, BEZIER_STEPS, points);
1407
1408
 
1408
1409
  ax = x;
1409
1410
  ay = y;
@@ -1469,7 +1470,7 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
1469
1470
  y += ay;
1470
1471
  }
1471
1472
 
1472
- points .push (... Bezier .cubic (ax, ay, 0, x1, y1, 0, x2, y2, 0, x, y, 0, BEZIER_STEPS));
1473
+ Bezier .cubic (ax, ay, 0, x1, y1, 0, x2, y2, 0, x, y, 0, BEZIER_STEPS, points);
1473
1474
 
1474
1475
  ax = x;
1475
1476
  ay = y;
@@ -1546,7 +1547,7 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
1546
1547
  }
1547
1548
  }
1548
1549
 
1549
- points .push (... Bezier .cubic (ax, ay, 0, x1, y1, 0, x2, y2, 0, x, y, 0, BEZIER_STEPS));
1550
+ Bezier .cubic (ax, ay, 0, x1, y1, 0, x2, y2, 0, x, y, 0, BEZIER_STEPS, points);
1550
1551
 
1551
1552
  ax = x;
1552
1553
  ay = y;
@@ -1618,7 +1619,7 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
1618
1619
  y += ay;
1619
1620
  }
1620
1621
 
1621
- points .push (... Bezier .arc (ax, ay, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y, CIRCLE_STEPS));
1622
+ Bezier .arc (ax, ay, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y, CIRCLE_STEPS, points);
1622
1623
 
1623
1624
  ax = x;
1624
1625
  ay = y;
@@ -1643,8 +1644,6 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
1643
1644
  {
1644
1645
  // closepath
1645
1646
 
1646
- points = this .removeConsecutiveIdenticalPoints (points);
1647
-
1648
1647
  if (points .length > 2)
1649
1648
  {
1650
1649
  ax = points [0] .x;
@@ -1665,17 +1664,11 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
1665
1664
  break;
1666
1665
  }
1667
1666
 
1668
- points = this .removeConsecutiveIdenticalPoints (points);
1669
-
1670
1667
  if (points .length > 2)
1671
1668
  contours .push (Object .assign (points, { index: index, closed: false }));
1672
1669
 
1673
1670
  return !! contours .length;
1674
1671
  },
1675
- removeConsecutiveIdenticalPoints: function (points)
1676
- {
1677
- return points .filter ((p, i, a) => !p .equals (a [(i + 1) % a .length]));
1678
- },
1679
1672
  transformAttribute: function (attribute)
1680
1673
  {
1681
1674
  const matrix = new Matrix3 ();
@@ -142,7 +142,7 @@ X3DParser .prototype = {
142
142
  convertColor: function (value)
143
143
  {
144
144
  const
145
- div = $("<div></div>") .css ("color", value) .appendTo (this .getBrowser () .getShadow ()),
145
+ div = $("<div></div>") .hide () .css ("color", value) .appendTo ($("body")),
146
146
  rgb = window .getComputedStyle (div [0]) .color,
147
147
  values = rgb .replace (/^rgba?\(|\)$/g, "") .split (/[\s,]+/) .map (s => parseFloat (s));
148
148
 
@@ -296,7 +296,9 @@ X3DExternProtoDeclaration .prototype = Object .assign (Object .create (X3DProtoD
296
296
  generator .string += "@name";
297
297
  generator .string += '"';
298
298
  generator .string += ':';
299
+ generator .string += '"';
299
300
  generator .string += generator .JSONEncode (this .getName ());
301
+ generator .string += '"';
300
302
  generator .string += ',';
301
303
  generator .string += generator .TidyBreak ();
302
304
 
@@ -354,7 +356,9 @@ X3DExternProtoDeclaration .prototype = Object .assign (Object .create (X3DProtoD
354
356
  generator .string += '"';
355
357
  generator .string += ':';
356
358
  generator .string += generator .TidySpace ();
359
+ generator .string += '"';
357
360
  generator .string += generator .JSONEncode (field .getName ());
361
+ generator .string += '"';
358
362
  generator .string += generator .TidyBreak ();
359
363
 
360
364
  generator .string += generator .DecIndent ();
@@ -326,7 +326,9 @@ X3DProtoDeclaration .prototype = Object .assign (Object .create (X3DProtoDeclara
326
326
  generator .string += "@name";
327
327
  generator .string += '"';
328
328
  generator .string += ':';
329
+ generator .string += '"';
329
330
  generator .string += generator .JSONEncode (this .getName ());
331
+ generator .string += '"';
330
332
  generator .string += ',';
331
333
  generator .string += generator .TidyBreak ();
332
334
 
@@ -396,7 +398,9 @@ X3DProtoDeclaration .prototype = Object .assign (Object .create (X3DProtoDeclara
396
398
  generator .string += '"';
397
399
  generator .string += ':';
398
400
  generator .string += generator .TidySpace ();
401
+ generator .string += '"';
399
402
  generator .string += generator .JSONEncode (field .getName ());
403
+ generator .string += '"';
400
404
 
401
405
  if (field .isDefaultValue ())
402
406
  {
@@ -198,7 +198,9 @@ X3DRoute .prototype = Object .assign (Object .create (X3DObject .prototype),
198
198
  generator .string += '"';
199
199
  generator .string += ':';
200
200
  generator .string += generator .TidySpace ();
201
+ generator .string += '"';
201
202
  generator .string += generator .JSONEncode (sourceNodeName);
203
+ generator .string += '"';
202
204
  generator .string += ',';
203
205
  generator .string += generator .TidyBreak ();
204
206
 
@@ -208,7 +210,9 @@ X3DRoute .prototype = Object .assign (Object .create (X3DObject .prototype),
208
210
  generator .string += '"';
209
211
  generator .string += ':';
210
212
  generator .string += generator .TidySpace ();
213
+ generator .string += '"';
211
214
  generator .string += generator .JSONEncode (this [_sourceField] .getName ());
215
+ generator .string += '"';
212
216
  generator .string += ',';
213
217
  generator .string += generator .TidyBreak ();
214
218
 
@@ -218,7 +222,9 @@ X3DRoute .prototype = Object .assign (Object .create (X3DObject .prototype),
218
222
  generator .string += '"';
219
223
  generator .string += ':';
220
224
  generator .string += generator .TidySpace ();
225
+ generator .string += '"';
221
226
  generator .string += generator .JSONEncode (destinationNodeName);
227
+ generator .string += '"';
222
228
  generator .string += ',';
223
229
  generator .string += generator .TidyBreak ();
224
230
 
@@ -228,7 +234,9 @@ X3DRoute .prototype = Object .assign (Object .create (X3DObject .prototype),
228
234
  generator .string += '"';
229
235
  generator .string += ':';
230
236
  generator .string += generator .TidySpace ();
237
+ generator .string += '"';
231
238
  generator .string += generator .JSONEncode (this [_destinationField] .getName ());
239
+ generator .string += '"';
232
240
  generator .string += generator .TidyBreak ();
233
241
 
234
242
  generator .string += generator .DecIndent ();