x_ite 4.7.6 → 4.7.10

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 (148) hide show
  1. package/.vscode/settings.json +1 -2
  2. package/Makefile +1 -0
  3. package/build/components/annotation.build.js +2 -2
  4. package/build/components/cad-geometry.build.js +2 -2
  5. package/build/components/cube-map-texturing.build.js +2 -2
  6. package/build/components/dis.build.js +2 -2
  7. package/build/components/event-utilities.build.js +2 -2
  8. package/build/components/geometry2d.build.js +2 -2
  9. package/build/components/geospatial.build.js +2 -2
  10. package/build/components/h-anim.build.js +2 -2
  11. package/build/components/key-device-sensor.build.js +2 -2
  12. package/build/components/layout.build.js +2 -2
  13. package/build/components/nurbs.build.js +2 -2
  14. package/build/components/particle-systems.build.js +2 -2
  15. package/build/components/picking.build.js +2 -2
  16. package/build/components/projective-texture-mapping.build.js +2 -2
  17. package/build/components/rigid-body-physics.build.js +2 -2
  18. package/build/components/scripting.build.js +2 -2
  19. package/build/components/texturing-3d.build.js +2 -2
  20. package/build/components/volume-rendering.build.js +2 -2
  21. package/build/components/x_ite.build.js +2 -2
  22. package/build/parts/default.end.frag.js +2 -0
  23. package/build/parts/default.start.frag.js +8 -0
  24. package/build/parts/{x_ite.end.frag → x_ite.end.frag.js} +2 -8
  25. package/build/parts/x_ite.start.frag.js +11 -0
  26. package/build/x_ite.build.js +2 -2
  27. package/dist/assets/components/annotation.js +9 -7
  28. package/dist/assets/components/annotation.min.js +1 -1
  29. package/dist/assets/components/cad-geometry.js +9 -7
  30. package/dist/assets/components/cad-geometry.min.js +1 -1
  31. package/dist/assets/components/cube-map-texturing.js +9 -7
  32. package/dist/assets/components/cube-map-texturing.min.js +1 -1
  33. package/dist/assets/components/dis.js +9 -7
  34. package/dist/assets/components/dis.min.js +1 -1
  35. package/dist/assets/components/event-utilities.js +9 -7
  36. package/dist/assets/components/event-utilities.min.js +1 -1
  37. package/dist/assets/components/geometry2d.js +9 -7
  38. package/dist/assets/components/geometry2d.min.js +1 -1
  39. package/dist/assets/components/geospatial.js +9 -7
  40. package/dist/assets/components/geospatial.min.js +2 -2
  41. package/dist/assets/components/h-anim.js +9 -7
  42. package/dist/assets/components/h-anim.min.js +1 -1
  43. package/dist/assets/components/key-device-sensor.js +9 -7
  44. package/dist/assets/components/key-device-sensor.min.js +1 -1
  45. package/dist/assets/components/layout.js +9 -7
  46. package/dist/assets/components/layout.min.js +1 -1
  47. package/dist/assets/components/nurbs.js +9 -7
  48. package/dist/assets/components/nurbs.min.js +2 -2
  49. package/dist/assets/components/particle-systems.js +9 -7
  50. package/dist/assets/components/particle-systems.min.js +2 -2
  51. package/dist/assets/components/picking.js +13 -11
  52. package/dist/assets/components/picking.min.js +1 -1
  53. package/dist/assets/components/projective-texture-mapping.js +9 -7
  54. package/dist/assets/components/projective-texture-mapping.min.js +1 -1
  55. package/dist/assets/components/rigid-body-physics.js +9 -7
  56. package/dist/assets/components/rigid-body-physics.min.js +17 -17
  57. package/dist/assets/components/scripting.js +16 -9
  58. package/dist/assets/components/scripting.min.js +1 -1
  59. package/dist/assets/components/texturing-3d.js +9 -7
  60. package/dist/assets/components/texturing-3d.min.js +3 -3
  61. package/dist/assets/components/volume-rendering.js +11 -9
  62. package/dist/assets/components/volume-rendering.min.js +3 -3
  63. package/dist/assets/components/x_ite.js +9 -7
  64. package/dist/assets/components/x_ite.min.js +1 -1
  65. package/dist/assets/shaders/webgl1/FallbackUnlit.fs +3 -4
  66. package/dist/assets/shaders/webgl1/Gouraud.vs +0 -1
  67. package/dist/assets/shaders/webgl1/Phong.fs +0 -1
  68. package/dist/assets/shaders/webgl1/Unlit.fs +0 -3
  69. package/dist/assets/shaders/webgl2/Gouraud.vs +0 -1
  70. package/dist/assets/shaders/webgl2/Phong.fs +0 -1
  71. package/dist/assets/shaders/webgl2/Unlit.fs +0 -3
  72. package/dist/example.html +2 -2
  73. package/dist/x_ite.css +14 -9
  74. package/dist/x_ite.js +29499 -28932
  75. package/dist/x_ite.min.js +41 -41
  76. package/dist/x_ite.zip +0 -0
  77. package/docs/Accessing-the-External-Browser.md +19 -4
  78. package/docs/What's-New.md +23 -0
  79. package/docs/_config.yml +1 -1
  80. package/docs/index.md +42 -14
  81. package/docs/reference/Browser-Services.md +38 -10
  82. package/docs/reference/Script-Node-Authoring-Interface.md +12 -4
  83. package/package.json +6 -5
  84. package/src/assets/components/picking.js +2 -2
  85. package/src/assets/components/volume-rendering.js +2 -2
  86. package/src/assets/shaders/webgl1/FallbackUnlit.fs +3 -4
  87. package/src/assets/shaders/webgl1/Gouraud.vs +0 -1
  88. package/src/assets/shaders/webgl1/Phong.fs +0 -1
  89. package/src/assets/shaders/webgl1/Unlit.fs +0 -3
  90. package/src/assets/shaders/webgl2/Gouraud.vs +0 -1
  91. package/src/assets/shaders/webgl2/Phong.fs +0 -1
  92. package/src/assets/shaders/webgl2/Unlit.fs +0 -3
  93. package/src/bookmarks.js +8 -11
  94. package/src/examples.js +1 -1
  95. package/src/locale/de.po +19 -75
  96. package/src/locale/fr.po +18 -75
  97. package/src/standard/Time/MicroTime.js +3 -1
  98. package/src/standard/Utility/DataStorage.js +23 -12
  99. package/src/tests.js +1 -1
  100. package/src/x_ite/Browser/Core/BrowserOptions.js +40 -28
  101. package/src/x_ite/Browser/Core/BrowserTimings.js +13 -24
  102. package/src/x_ite/Browser/Core/ContextMenu.js +94 -16
  103. package/src/x_ite/Browser/Core/X3DCoreContext.js +95 -42
  104. package/src/x_ite/Browser/Navigation/ExamineViewer.js +3 -0
  105. package/src/x_ite/Browser/Navigation/LookAtViewer.js +3 -0
  106. package/src/x_ite/Browser/Navigation/PlaneViewer.js +3 -0
  107. package/src/x_ite/Browser/Navigation/X3DFlyViewer.js +3 -0
  108. package/src/x_ite/Browser/Networking/X3DNetworkingContext.js +1 -3
  109. package/src/x_ite/Browser/Picking/VolumePicker.js +1 -1
  110. package/src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js +4 -1
  111. package/src/x_ite/Browser/Shaders/ShaderTest.js +3 -3
  112. package/src/x_ite/Browser/VERSION.js +1 -1
  113. package/src/x_ite/Browser/X3DBrowser.js +70 -50
  114. package/src/x_ite/Components/Picking/PointPickSensor.js +1 -1
  115. package/src/x_ite/Components/Scripting/Script.js +7 -2
  116. package/src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js +10 -12
  117. package/src/x_ite/Components/Shaders.js +9 -9
  118. package/src/x_ite/Execution/X3DExecutionContext.js +9 -11
  119. package/src/x_ite/Fields/SFColor.js +20 -7
  120. package/src/x_ite/Fields/SFColorRGBA.js +6 -6
  121. package/src/x_ite/Fields/SFDouble.js +2 -2
  122. package/src/x_ite/Fields/SFFloat.js +2 -2
  123. package/src/x_ite/Fields/SFImage.js +13 -13
  124. package/src/x_ite/Fields/SFMatrix3.js +5 -5
  125. package/src/x_ite/Fields/SFMatrix4.js +6 -6
  126. package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +14 -3
  127. package/src/x_ite/Fields/SFNode.js +23 -19
  128. package/src/x_ite/Fields/SFNodeCache.js +14 -10
  129. package/src/x_ite/Fields/SFRotation.js +10 -10
  130. package/src/x_ite/Fields/SFString.js +1 -1
  131. package/src/x_ite/Fields/SFTime.js +1 -1
  132. package/src/x_ite/Fields/SFVec2.js +6 -6
  133. package/src/x_ite/Fields/SFVec3.js +7 -7
  134. package/src/x_ite/Fields/SFVec4.js +8 -8
  135. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +7 -6
  136. package/src/x_ite/InputOutput/Generator.js +85 -65
  137. package/src/x_ite/Parser/X3DParser.js +6 -0
  138. package/src/x_ite/Parser/XMLParser.js +1 -1
  139. package/src/x_ite/Prototype/X3DExternProtoDeclaration.js +1 -1
  140. package/src/x_ite/X3D.js +8 -2
  141. package/src/x_ite.config.js +0 -5
  142. package/src/x_ite.css +14 -8
  143. package/src/x_ite.html +3 -3
  144. package/src/x_ite.js +21 -12
  145. package/x_ite.min.html +3 -3
  146. package/build/parts/default.end.frag +0 -2
  147. package/build/parts/default.start.frag +0 -6
  148. package/build/parts/x_ite.start.frag +0 -8
@@ -139,6 +139,9 @@ function ($,
139
139
  },
140
140
  mousedown: function (event)
141
141
  {
142
+ if (this .getBrowser () .getContextMenu () .getActive ())
143
+ return;
144
+
142
145
  if (this .button >= 0)
143
146
  return;
144
147
 
@@ -108,6 +108,9 @@ function ($,
108
108
  },
109
109
  mousedown: function (event)
110
110
  {
111
+ if (this .getBrowser () .getContextMenu () .getActive ())
112
+ return;
113
+
111
114
  if (this .button >= 0)
112
115
  return;
113
116
 
@@ -156,6 +156,9 @@ function ($,
156
156
  },
157
157
  mousedown: function (event)
158
158
  {
159
+ if (this .getBrowser () .getContextMenu () .getActive ())
160
+ return;
161
+
159
162
  if (this .button >= 0)
160
163
  return;
161
164
 
@@ -50,12 +50,10 @@
50
50
  define ([
51
51
  "x_ite/Fields",
52
52
  "x_ite/Browser/Networking/urls",
53
- "sprintf",
54
53
  "locale/gettext",
55
54
  ],
56
55
  function (Fields,
57
56
  urls,
58
- sprintf,
59
57
  _)
60
58
  {
61
59
  "use strict";
@@ -176,7 +174,7 @@ function (Fields,
176
174
 
177
175
  if (value)
178
176
  {
179
- var string = sprintf .sprintf (value == 1 ? _ ("Loading %d file") : _ ("Loading %d files"), value);
177
+ var string = (value == 1 ? _ ("Loading %1 file") : _ ("Loading %1 files")) .replace ("%1", value);
180
178
  }
181
179
  else
182
180
  {
@@ -51,7 +51,7 @@ define ([
51
51
  "standard/Math/Numbers/Vector3",
52
52
  "standard/Math/Numbers/Rotation4",
53
53
  "standard/Math/Numbers/Matrix4",
54
- X3D .getComponentUrl ("rigid-body-physics"),
54
+ require .getComponentUrl ("rigid-body-physics"),
55
55
  ],
56
56
  function (Vector3,
57
57
  Rotation4,
@@ -92,10 +92,13 @@ function ($,
92
92
  },
93
93
  mousedown: function (event)
94
94
  {
95
- var browser = this .getBrowser ();
95
+ const browser = this .getBrowser ();
96
96
 
97
97
  browser .getElement () .focus ();
98
98
 
99
+ if (browser .getContextMenu () .getActive ())
100
+ return;
101
+
99
102
  if (browser .getShiftKey () && browser .getControlKey ())
100
103
  return;
101
104
 
@@ -105,8 +105,8 @@ function (TextureBuffer,
105
105
  // Matrices
106
106
 
107
107
  gl .uniformMatrix4fv (shaderNode .x3d_ProjectionMatrix, false, new Float32Array (Camera .ortho (-1, 1, -1, 1, -1, 1, new Matrix4 ())));
108
- gl .uniformMatrix4fv (shaderNode .x3d_ModelViewMatrix, false, new Float32Array (new Matrix4 ()));
109
- gl .uniformMatrix3fv (shaderNode .x3d_NormalMatrix, false, new Float32Array (new Matrix3 ()));
108
+ gl .uniformMatrix4fv (shaderNode .x3d_ModelViewMatrix, false, new Float32Array (Matrix4 .Identity));
109
+ gl .uniformMatrix3fv (shaderNode .x3d_NormalMatrix, false, new Float32Array (Matrix3 .Identity));
110
110
 
111
111
  // Set clip planes and lights to none.
112
112
 
@@ -149,7 +149,7 @@ function (TextureBuffer,
149
149
 
150
150
  frameBuffer .unbind ();
151
151
 
152
- return data [0] == 255 && data [1] == 0 && data [2] == 0 && data [3] == 255;
152
+ return true || (data [0] == 255 && data [1] == 0 && data [2] == 0 && data [3] == 255);
153
153
  };
154
154
  })(),
155
155
  };
@@ -49,5 +49,5 @@
49
49
 
50
50
  define (function ()
51
51
  {
52
- return "4.7.6";
52
+ return "4.7.10";
53
53
  });
@@ -50,7 +50,6 @@
50
50
  define ([
51
51
  "jquery",
52
52
  "x_ite/Browser/VERSION",
53
- "x_ite/Base/Events",
54
53
  "x_ite/Fields",
55
54
  "x_ite/Components",
56
55
  "x_ite/Components/Layering/X3DLayerNode",
@@ -70,7 +69,6 @@ define ([
70
69
  ],
71
70
  function ($,
72
71
  VERSION,
73
- Events,
74
72
  Fields,
75
73
  Components,
76
74
  X3DLayerNode,
@@ -143,6 +141,8 @@ function ($,
143
141
 
144
142
  // Print welcome message.
145
143
 
144
+ if (this .getNumber () > 1) return;
145
+
146
146
  this .print ("Welcome to " + this .name + " X3D Browser " + this .version + ":\n" +
147
147
  " Current Graphics Renderer\n" +
148
148
  " Name: " + this .getVendor () + " " + this .getRenderer () + "\n" +
@@ -247,9 +247,6 @@ function ($,
247
247
  this .callBrowserEventHandler ("onshutdown");
248
248
  }
249
249
 
250
- // Clear event cache.
251
- Events .clear ();
252
-
253
250
  // Replace world.
254
251
 
255
252
  if (scene instanceof Fields .MFNode)
@@ -402,68 +399,91 @@ function ($,
402
399
  },
403
400
  loadURL: function (url, parameter)
404
401
  {
405
- // Cancel any loading.
402
+ const promise = new Promise (function (resolve, reject)
403
+ {
404
+ // Cancel any loading.
406
405
 
407
- this .loadCount_ .removeInterest ("set_loadCount__", this);
408
- this .prepareEvents () .removeInterest ("bind", this);
406
+ this .loadCount_ .removeInterest ("set_loadCount__", this);
407
+ this .prepareEvents () .removeInterest ("bind", this);
409
408
 
410
- if (this .loader)
411
- this .loader .abort ();
409
+ if (this .loader)
410
+ this .loader .abort ();
412
411
 
413
- // Start loading.
412
+ // Start loading.
414
413
 
415
- this .setBrowserLoading (true);
416
- this .addLoadCount (this);
414
+ this .setBrowserLoading (true);
415
+ this .addLoadCount (this);
417
416
 
418
- const loader = this .loader = new FileLoader (this .getWorld ());
417
+ const loader = this .loader = new FileLoader (this .getWorld ());
419
418
 
420
- loader .createX3DFromURL (url, parameter,
421
- function (scene)
422
- {
423
- if (loader !== this .loader)
424
- return;
419
+ loader .createX3DFromURL (url, parameter,
420
+ function (scene)
421
+ {
422
+ if (loader !== this .loader)
423
+ {
424
+ reject ();
425
+ return;
426
+ }
425
427
 
426
- if (! this .getBrowserOptions () .getSplashScreen ())
427
- this .getCanvas () .fadeIn (0);
428
+ if (! this .getBrowserOptions () .getSplashScreen ())
429
+ this .getCanvas () .fadeIn (0);
428
430
 
429
- if (scene)
430
- {
431
- this .replaceWorld (scene);
432
- this .removeLoadCount (this);
431
+ if (scene)
432
+ {
433
+ this .replaceWorld (scene);
434
+ this .removeLoadCount (this);
435
+
436
+ resolve ();
437
+ }
438
+ else
439
+ {
440
+ this .callBrowserCallbacks (X3DConstants .CONNECTION_ERROR);
441
+ this .callBrowserEventHandler ("onerror");
442
+
443
+ setTimeout (function () { this .getSplashScreen () .find (".x_ite-private-spinner-text") .text (_ ("Failed loading world.")); } .bind (this), 31);
444
+
445
+ reject ();
446
+ }
433
447
  }
434
- else
448
+ .bind (this),
449
+ function (fragment)
435
450
  {
436
- this .callBrowserCallbacks (X3DConstants .CONNECTION_ERROR);
437
- this .callBrowserEventHandler ("onerror");
451
+ if (loader !== this .loader)
452
+ {
453
+ reject ();
454
+ return;
455
+ }
438
456
 
439
- setTimeout (function () { this .getSplashScreen () .find (".x_ite-private-spinner-text") .text (_ ("Failed loading world.")); } .bind (this), 31);
457
+ this .changeViewpoint (fragment);
458
+ this .removeLoadCount (this);
459
+ this .setBrowserLoading (false);
460
+
461
+ resolve ();
440
462
  }
441
- }
442
- .bind (this),
443
- function (fragment)
444
- {
445
- if (loader !== this .loader)
446
- return;
463
+ .bind (this),
464
+ function (url, target)
465
+ {
466
+ if (loader !== this .loader)
467
+ {
468
+ reject ();
469
+ return;
470
+ }
447
471
 
448
- this .changeViewpoint (fragment);
449
- this .removeLoadCount (this);
450
- this .setBrowserLoading (false);
451
- }
452
- .bind (this),
453
- function (url, target)
454
- {
455
- if (loader !== this .loader)
456
- return;
472
+ if (target)
473
+ window .open (url, target);
474
+ else
475
+ location = url;
457
476
 
458
- if (target)
459
- window .open (url, target);
460
- else
461
- location = url;
477
+ this .removeLoadCount (this);
478
+ this .setBrowserLoading (false);
462
479
 
463
- this .removeLoadCount (this);
464
- this .setBrowserLoading (false);
480
+ resolve ();
481
+ }
482
+ .bind (this));
465
483
  }
466
484
  .bind (this));
485
+
486
+ return promise;
467
487
  },
468
488
  addBrowserListener: function (callback, object)
469
489
  {
@@ -59,7 +59,7 @@ define ([
59
59
  "standard/Math/Numbers/Vector3",
60
60
  "standard/Math/Numbers/Rotation4",
61
61
  "standard/Math/Geometry/Box3",
62
- X3D .getComponentUrl ("rigid-body-physics"),
62
+ require .getComponentUrl ("rigid-body-physics"),
63
63
  ],
64
64
  function (Fields,
65
65
  X3DFieldDefinition,
@@ -221,9 +221,10 @@ function ($,
221
221
  text += "\n;var " + callbacks .join (",") + ";";
222
222
  text += "\n[" + callbacks .join (",") + "];";
223
223
 
224
+ this .global = this .getGlobal ();
225
+
224
226
  const
225
- global = this .getGlobal (),
226
- result = evaluate (global, text),
227
+ result = this .evaluate (text),
227
228
  context = { };
228
229
 
229
230
  for (let i = 0; i < callbacks .length; ++ i)
@@ -238,6 +239,10 @@ function ($,
238
239
  return { };
239
240
  }
240
241
  },
242
+ evaluate: function (text)
243
+ {
244
+ return evaluate (this .global, text);
245
+ },
241
246
  getGlobal: function ()
242
247
  {
243
248
  const
@@ -383,10 +383,6 @@ function (X3DCast,
383
383
 
384
384
  if (location)
385
385
  {
386
- field ._uniformLocation = location;
387
-
388
- field .addInterest ("set_field__", this);
389
-
390
386
  switch (field .getType ())
391
387
  {
392
388
  case X3DConstants .SFImage:
@@ -480,6 +476,13 @@ function (X3DCast,
480
476
  }
481
477
  }
482
478
 
479
+ if (location .array)
480
+ field ._uniformLocation = location .array .length ? location : null;
481
+ else
482
+ field ._uniformLocation = location;
483
+
484
+ field .addInterest ("set_field__", this);
485
+
483
486
  this .set_field__ (field);
484
487
  }
485
488
  },
@@ -686,12 +689,7 @@ function (X3DCast,
686
689
  }
687
690
  case X3DConstants .MFImage:
688
691
  {
689
- let array = location .array;
690
-
691
- const numImages = this .getImagesLength (field);
692
-
693
- if (numImages !== array .length)
694
- array = location .array = new Int32Array (numImages);
692
+ const array = location .array;
695
693
 
696
694
  for (let i = 0, a = 0, length = field .length; i < length; ++ i)
697
695
  {
@@ -864,8 +862,8 @@ function (X3DCast,
864
862
 
865
863
  let length = 3 * images .length;
866
864
 
867
- for (let i = 0, l = images .length; i < l; ++ i)
868
- length += images [i] .array .length;
865
+ for (const image of images)
866
+ length += image .array .length;
869
867
 
870
868
  return length;
871
869
  },
@@ -52,10 +52,10 @@ define ([
52
52
  "x_ite/Components/Shaders/FloatVertexAttribute",
53
53
  "x_ite/Components/Shaders/Matrix3VertexAttribute",
54
54
  "x_ite/Components/Shaders/Matrix4VertexAttribute",
55
- // "x_ite/Components/Shaders/PackagedShader",
56
- // "x_ite/Components/Shaders/ProgramShader",
55
+ "x_ite/Components/Shaders/PackagedShader",
56
+ "x_ite/Components/Shaders/ProgramShader",
57
57
  "x_ite/Components/Shaders/ShaderPart",
58
- // "x_ite/Components/Shaders/ShaderProgram",
58
+ "x_ite/Components/Shaders/ShaderProgram",
59
59
  "x_ite/Components/Shaders/X3DProgrammableShaderObject",
60
60
  "x_ite/Components/Shaders/X3DShaderNode",
61
61
  "x_ite/Components/Shaders/X3DVertexAttributeNode",
@@ -65,10 +65,10 @@ function (SupportedNodes,
65
65
  FloatVertexAttribute,
66
66
  Matrix3VertexAttribute,
67
67
  Matrix4VertexAttribute,
68
- // PackagedShader,
69
- // ProgramShader,
68
+ PackagedShader,
69
+ ProgramShader,
70
70
  ShaderPart,
71
- // ShaderProgram,
71
+ ShaderProgram,
72
72
  X3DProgrammableShaderObject,
73
73
  X3DShaderNode,
74
74
  X3DVertexAttributeNode)
@@ -81,10 +81,10 @@ function (SupportedNodes,
81
81
  FloatVertexAttribute: FloatVertexAttribute,
82
82
  Matrix3VertexAttribute: Matrix3VertexAttribute,
83
83
  Matrix4VertexAttribute: Matrix4VertexAttribute,
84
- // PackagedShader: PackagedShader,
85
- // ProgramShader: ProgramShader,
84
+ PackagedShader: PackagedShader,
85
+ ProgramShader: ProgramShader,
86
86
  ShaderPart: ShaderPart,
87
- // ShaderProgram: ShaderProgram,
87
+ ShaderProgram: ShaderProgram,
88
88
  };
89
89
 
90
90
  const AbstractTypes =
@@ -80,7 +80,8 @@ function (Fields,
80
80
  {
81
81
  X3DBaseNode .call (this, executionContext);
82
82
 
83
- this .addChildObjects ("rootNodes", new Fields .MFNode ());
83
+ this .addChildObjects ("rootNodes", new Fields .MFNode (),
84
+ "worldInfos", new Fields .MFNode ());
84
85
 
85
86
  this .rootNodes_ .setAccessType (X3DConstants .initializeOnly);
86
87
  this .rootNodes_ .addCloneCount (1);
@@ -91,7 +92,6 @@ function (Fields,
91
92
  this ._externprotos = new ExternProtoDeclarationArray ();
92
93
  this ._routes = new RouteArray ();
93
94
  this ._routeIndex = new Map ();
94
- this ._worldInfoNodes = [ ];
95
95
  }
96
96
 
97
97
  X3DExecutionContext .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
@@ -639,22 +639,20 @@ function (Fields,
639
639
  {
640
640
  return this ._routes;
641
641
  },
642
- getWorldInfo: function ()
642
+ getWorldInfos: function ()
643
643
  {
644
- const length = this ._worldInfoNodes .length;
645
-
646
- if (length)
647
- return this ._worldInfoNodes [length - 1];
648
-
649
- return null;
644
+ return this .worldInfos_;
650
645
  },
651
646
  addWorldInfo: function (worldInfoNode)
652
647
  {
653
- this ._worldInfoNodes .push (worldInfoNode);
648
+ this .worldInfos_ .push (worldInfoNode);
654
649
  },
655
650
  removeWorldInfo: function (worldInfoNode)
656
651
  {
657
- this ._worldInfoNodes = this ._worldInfoNodes .filter (function (node) { return node !== worldInfoNode; });
652
+ const index = this .worldInfos_ .getValue () .indexOf (worldInfoNode);
653
+
654
+ if (index !== -1)
655
+ this .worldInfos_ .splice (index, 1);
658
656
  },
659
657
  toVRMLStream: function (stream)
660
658
  {
@@ -51,10 +51,12 @@ define ([
51
51
  "standard/Math/Numbers/Color3",
52
52
  "x_ite/Basic/X3DField",
53
53
  "x_ite/Bits/X3DConstants",
54
+ "x_ite/InputOutput/Generator",
54
55
  ],
55
56
  function (Color3,
56
57
  X3DField,
57
- X3DConstants)
58
+ X3DConstants,
59
+ Generator)
58
60
  {
59
61
  "use strict";
60
62
 
@@ -116,14 +118,14 @@ function (Color3,
116
118
  },
117
119
  lerp: (function ()
118
120
  {
119
- var
121
+ const
120
122
  s = [ ],
121
123
  d = [ ],
122
124
  r = [ ];
123
125
 
124
126
  return function (destination, t)
125
127
  {
126
- var result = new SFColor ();
128
+ const result = new SFColor ();
127
129
 
128
130
  this .getValue () .getHSV (s),
129
131
  destination .getValue () .getHSV (d),
@@ -136,7 +138,18 @@ function (Color3,
136
138
  })(),
137
139
  toStream: function (stream)
138
140
  {
139
- stream .string += this .getValue () .toString ();
141
+ const
142
+ generator = Generator .Get (stream),
143
+ value = this .getValue (),
144
+ last = value .length - 1;
145
+
146
+ for (let i = 0; i < last; ++ i)
147
+ {
148
+ stream .string += generator .Precision (value [i]);
149
+ stream .string += " ";
150
+ }
151
+
152
+ stream .string += generator .Precision (value [last]);
140
153
  },
141
154
  toVRMLStream: function (stream)
142
155
  {
@@ -148,7 +161,7 @@ function (Color3,
148
161
  },
149
162
  });
150
163
 
151
- var r = {
164
+ const r = {
152
165
  get: function ()
153
166
  {
154
167
  return this .getValue () .r;
@@ -162,7 +175,7 @@ function (Color3,
162
175
  configurable: false
163
176
  };
164
177
 
165
- var g = {
178
+ const g = {
166
179
  get: function ()
167
180
  {
168
181
  return this .getValue () .g;
@@ -176,7 +189,7 @@ function (Color3,
176
189
  configurable: false
177
190
  };
178
191
 
179
- var b = {
192
+ const b = {
180
193
  get: function ()
181
194
  {
182
195
  return this .getValue () .b;
@@ -113,14 +113,14 @@ function (X3DField,
113
113
  },
114
114
  lerp: (function ()
115
115
  {
116
- var
116
+ const
117
117
  s = [ ],
118
118
  d = [ ],
119
119
  r = [ ];
120
120
 
121
121
  return function (destination, t)
122
122
  {
123
- var result = new SFColorRGBA ();
123
+ const result = new SFColorRGBA ();
124
124
 
125
125
  this .getValue () .getHSVA (s),
126
126
  destination .getValue () .getHSVA (d),
@@ -136,7 +136,7 @@ function (X3DField,
136
136
  toXMLStream: SFColor .prototype .toXMLStream,
137
137
  });
138
138
 
139
- var r = {
139
+ const r = {
140
140
  get: function ()
141
141
  {
142
142
  return this .getValue () .r;
@@ -150,7 +150,7 @@ function (X3DField,
150
150
  configurable: false
151
151
  };
152
152
 
153
- var g = {
153
+ const g = {
154
154
  get: function ()
155
155
  {
156
156
  return this .getValue () .g;
@@ -164,7 +164,7 @@ function (X3DField,
164
164
  configurable: false
165
165
  };
166
166
 
167
- var b = {
167
+ const b = {
168
168
  get: function ()
169
169
  {
170
170
  return this .getValue () .b;
@@ -178,7 +178,7 @@ function (X3DField,
178
178
  configurable: false
179
179
  };
180
180
 
181
- var a = {
181
+ const a = {
182
182
  get: function ()
183
183
  {
184
184
  return this .getValue () .a;
@@ -89,11 +89,11 @@ function (X3DField,
89
89
  valueOf: X3DField .prototype .getValue,
90
90
  toStream: function (stream)
91
91
  {
92
- var
92
+ const
93
93
  generator = Generator .Get (stream),
94
94
  category = generator .Unit (this .getUnit ());
95
95
 
96
- stream .string += String (generator .ToUnit (category, this .getValue ()));
96
+ stream .string += generator .DoublePrecision (generator .ToUnit (category, this .getValue ()));
97
97
  },
98
98
  toVRMLStream: function (stream)
99
99
  {
@@ -89,11 +89,11 @@ function (X3DField,
89
89
  valueOf: X3DField .prototype .getValue,
90
90
  toStream: function (stream)
91
91
  {
92
- var
92
+ const
93
93
  generator = Generator .Get (stream),
94
94
  category = generator .Unit (this .getUnit ());
95
95
 
96
- stream .string += String (generator .ToUnit (category, this .getValue ()));
96
+ stream .string += generator .Precision (generator .ToUnit (category, this .getValue ()));
97
97
  },
98
98
  toVRMLStream: function (stream)
99
99
  {