x_ite 8.3.2 → 8.3.3

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 (112) hide show
  1. package/.github/workflows/pages-deploy.yml +1 -1
  2. package/.vscode/settings.json +2 -1
  3. package/dist/LICENSE.md +4 -4
  4. package/dist/assets/components/Annotation.js +13 -13
  5. package/dist/assets/components/Annotation.min.js +1 -1
  6. package/dist/assets/components/CADGeometry.js +13 -13
  7. package/dist/assets/components/CADGeometry.min.js +1 -1
  8. package/dist/assets/components/CubeMapTexturing.js +25 -25
  9. package/dist/assets/components/CubeMapTexturing.min.js +1 -1
  10. package/dist/assets/components/DIS.js +13 -13
  11. package/dist/assets/components/DIS.min.js +1 -1
  12. package/dist/assets/components/EventUtilities.js +9 -9
  13. package/dist/assets/components/EventUtilities.min.js +1 -1
  14. package/dist/assets/components/Geometry2D.js +19 -19
  15. package/dist/assets/components/Geometry2D.min.js +1 -1
  16. package/dist/assets/components/Geospatial.js +33 -33
  17. package/dist/assets/components/Geospatial.min.js +1 -1
  18. package/dist/assets/components/HAnim.js +61 -74
  19. package/dist/assets/components/HAnim.min.js +1 -1
  20. package/dist/assets/components/KeyDeviceSensor.js +8 -8
  21. package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
  22. package/dist/assets/components/Layout.js +27 -27
  23. package/dist/assets/components/Layout.min.js +1 -1
  24. package/dist/assets/components/NURBS.js +24 -24
  25. package/dist/assets/components/NURBS.min.js +1 -1
  26. package/dist/assets/components/ParticleSystems.js +23 -23
  27. package/dist/assets/components/ParticleSystems.min.js +1 -1
  28. package/dist/assets/components/Picking.js +19 -19
  29. package/dist/assets/components/Picking.min.js +1 -1
  30. package/dist/assets/components/RigidBodyPhysics.js +17 -17
  31. package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
  32. package/dist/assets/components/Scripting.js +28 -28
  33. package/dist/assets/components/Scripting.min.js +1 -1
  34. package/dist/assets/components/Text.js +24 -24
  35. package/dist/assets/components/Text.min.js +1 -1
  36. package/dist/assets/components/{ProjectiveTextureMapping.js → TextureProjector.js} +39 -39
  37. package/dist/assets/components/TextureProjector.min.js +1 -0
  38. package/dist/assets/components/Texturing3D.js +27 -27
  39. package/dist/assets/components/Texturing3D.min.js +1 -1
  40. package/dist/assets/components/VolumeRendering.js +19 -19
  41. package/dist/assets/components/VolumeRendering.min.js +1 -1
  42. package/dist/assets/components/X_ITE.js +9 -9
  43. package/dist/assets/components/X_ITE.min.js +1 -1
  44. package/dist/x_ite.css +1 -1
  45. package/dist/x_ite.js +1492 -1291
  46. package/dist/x_ite.min.js +1 -1
  47. package/dist/x_ite.zip +0 -0
  48. package/docs/Gemfile +1 -4
  49. package/docs/_config.yml +3 -3
  50. package/docs/_posts/getting-started.md +147 -441
  51. package/docs/_posts/reference/scene-services.md +13 -2
  52. package/docs/_posts/what's-new.md +21 -3
  53. package/docs/_tabs/playground.html +36 -40
  54. package/docs/assets/css/style.scss +18 -0
  55. package/package.json +1 -1
  56. package/src/assets/components/{ProjectiveTextureMapping.js → TextureProjector.js} +5 -5
  57. package/src/examples.js +1 -1
  58. package/src/tests.js +5 -5
  59. package/src/x_ite/Base/X3DInfoArray.js +21 -21
  60. package/src/x_ite/Base/X3DObject.js +29 -20
  61. package/src/x_ite/Base/X3DObjectArrayField.js +27 -26
  62. package/src/x_ite/Base/X3DTypedArrayField.js +34 -32
  63. package/src/x_ite/Browser/DOMIntegration.js +4 -3
  64. package/src/x_ite/Browser/VERSION.js +1 -1
  65. package/src/x_ite/Browser/X3DBrowser.js +43 -28
  66. package/src/x_ite/Components/Core/X3DNode.js +196 -187
  67. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +113 -90
  68. package/src/x_ite/Components/Grouping/X3DTransformMatrix3DNode.js +18 -43
  69. package/src/x_ite/Components/HAnim/HAnimHumanoid.js +24 -25
  70. package/src/x_ite/Components/HAnim/HAnimJoint.js +19 -31
  71. package/src/x_ite/Components/Sound/X3DSoundProcessingNode.js +14 -1
  72. package/src/x_ite/Components/Sound/X3DSoundSourceNode.js +0 -1
  73. package/src/x_ite/Components/{ProjectiveTextureMapping → TextureProjector}/TextureProjector.js +1 -1
  74. package/src/x_ite/Components/{ProjectiveTextureMapping → TextureProjector}/TextureProjectorParallel.js +1 -1
  75. package/src/x_ite/Components/{ProjectiveTextureMapping → TextureProjector}/X3DTextureProjectorNode.js +0 -0
  76. package/src/x_ite/Components/Time/TimeSensor.js +5 -0
  77. package/src/x_ite/Components/Time/X3DTimeDependentNode.js +1 -0
  78. package/src/x_ite/Configuration/ComponentInfo.js +20 -23
  79. package/src/x_ite/Configuration/ProfileInfo.js +6 -6
  80. package/src/x_ite/Configuration/SupportedComponents.js +22 -20
  81. package/src/x_ite/Configuration/SupportedProfiles.js +1 -1
  82. package/src/x_ite/Configuration/UnitInfo.js +24 -27
  83. package/src/x_ite/Execution/X3DExecutionContext.js +28 -59
  84. package/src/x_ite/Execution/X3DExportedNode.js +23 -28
  85. package/src/x_ite/Execution/X3DImportedNode.js +63 -67
  86. package/src/x_ite/Execution/X3DScene.js +98 -117
  87. package/src/x_ite/Fields/ArrayFields.js +57 -55
  88. package/src/x_ite/Fields/SFBool.js +6 -6
  89. package/src/x_ite/Fields/SFColor.js +10 -12
  90. package/src/x_ite/Fields/SFDouble.js +7 -10
  91. package/src/x_ite/Fields/SFFloat.js +7 -10
  92. package/src/x_ite/Fields/SFImage.js +33 -8
  93. package/src/x_ite/Fields/SFInt32.js +6 -6
  94. package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +13 -13
  95. package/src/x_ite/Fields/SFNode.js +42 -19
  96. package/src/x_ite/Fields/SFRotation.js +13 -13
  97. package/src/x_ite/Fields/SFString.js +6 -7
  98. package/src/x_ite/Fields/SFTime.js +6 -6
  99. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +10 -10
  100. package/src/x_ite/InputOutput/FileLoader.js +1 -1
  101. package/src/x_ite/InputOutput/Generator.js +117 -17
  102. package/src/x_ite/Parser/VRMLParser.js +24 -27
  103. package/src/x_ite/Parser/X3DParser.js +0 -4
  104. package/src/x_ite/Parser/XMLParser.js +2 -2
  105. package/src/x_ite/Prototype/X3DExternProtoDeclaration.js +59 -64
  106. package/src/x_ite/Prototype/X3DProtoDeclaration.js +86 -93
  107. package/src/x_ite/Rendering/X3DRenderObject.js +6 -1
  108. package/src/x_ite/Routing/X3DRoute.js +37 -40
  109. package/src/x_ite.html +1 -1
  110. package/x_ite.min.html +1 -1
  111. package/dist/assets/components/ProjectiveTextureMapping.min.js +0 -1
  112. package/docs/Gemfile.lock +0 -116
@@ -64,7 +64,6 @@ import SFVec4 from "./SFVec4.js";
64
64
  import X3DObjectArrayField from "../Base/X3DObjectArrayField.js";
65
65
  import X3DTypedArrayField from "../Base/X3DTypedArrayField.js";
66
66
  import X3DConstants from "../Base/X3DConstants.js";
67
- import Generator from "../InputOutput/Generator.js";
68
67
 
69
68
  const
70
69
  SFMatrix3d = SFMatrix3 .SFMatrix3d,
@@ -161,25 +160,26 @@ MFNode .prototype = Object .assign (Object .create (X3DObjectArrayField .prototy
161
160
 
162
161
  value .removeCloneCount (this [_cloneCount]);
163
162
  },
164
- toStream: function (stream)
163
+ toStream: function (generator)
165
164
  {
166
165
  const
167
- target = this .getTarget (),
168
- array = target .getValue (),
169
- generator = Generator .Get (stream);
166
+ target = this .getTarget (),
167
+ array = target .getValue ();
170
168
 
171
169
  switch (array .length)
172
170
  {
173
171
  case 0:
174
172
  {
175
- stream .string += "[ ]";
173
+ generator .string += "[";
174
+ generator .string += generator .TidySpace ();
175
+ generator .string += "]";
176
176
  break;
177
177
  }
178
178
  case 1:
179
179
  {
180
180
  generator .PushUnitCategory (target .getUnit ());
181
181
 
182
- array [0] .toStream (stream);
182
+ array [0] .toStream (generator);
183
183
 
184
184
  generator .PopUnitCategory ();
185
185
  break;
@@ -188,19 +188,20 @@ MFNode .prototype = Object .assign (Object .create (X3DObjectArrayField .prototy
188
188
  {
189
189
  generator .PushUnitCategory (target .getUnit ());
190
190
 
191
- stream .string += "[\n";
191
+ generator .string += "[";
192
+ generator .string += generator .TidyBreak ();
192
193
  generator .IncIndent ();
193
194
 
194
195
  for (let i = 0, length = array .length; i < length; ++ i)
195
196
  {
196
- stream .string += generator .Indent ();
197
- array [i] .toStream (stream);
198
- stream .string += "\n";
197
+ generator .string += generator .Indent ();
198
+ array [i] .toStream (generator);
199
+ generator .string += generator .TidyBreak ();
199
200
  }
200
201
 
201
202
  generator .DecIndent ();
202
- stream .string += generator .Indent ();
203
- stream .string += "]";
203
+ generator .string += generator .Indent ();
204
+ generator .string += "]";
204
205
 
205
206
  generator .PopUnitCategory ();
206
207
  break;
@@ -217,25 +218,26 @@ MFNode .prototype = Object .assign (Object .create (X3DObjectArrayField .prototy
217
218
 
218
219
  return string;
219
220
  },
220
- toVRMLStream: function (stream)
221
+ toVRMLStream: function (generator)
221
222
  {
222
223
  const
223
- target = this .getTarget (),
224
- array = target .getValue (),
225
- generator = Generator .Get (stream);
224
+ target = this .getTarget (),
225
+ array = target .getValue ();
226
226
 
227
227
  switch (array .length)
228
228
  {
229
229
  case 0:
230
230
  {
231
- stream .string += "[ ]";
231
+ generator .string += "[";
232
+ generator .string += generator .TidySpace ();
233
+ generator .string += "]";
232
234
  break;
233
235
  }
234
236
  case 1:
235
237
  {
236
238
  generator .EnterScope ();
237
239
 
238
- array [0] .toVRMLStream (stream);
240
+ array [0] .toVRMLStream (generator);
239
241
 
240
242
  generator .LeaveScope ();
241
243
  break;
@@ -244,19 +246,20 @@ MFNode .prototype = Object .assign (Object .create (X3DObjectArrayField .prototy
244
246
  {
245
247
  generator .EnterScope ();
246
248
 
247
- stream .string += "[\n";
249
+ generator .string += "[";
250
+ generator .string += generator .TidyBreak ();
248
251
  generator .IncIndent ();
249
252
 
250
253
  for (const element of array)
251
254
  {
252
- stream .string += generator .Indent ();
253
- element .toVRMLStream (stream);
254
- stream .string += "\n";
255
+ generator .string += generator .Indent ();
256
+ element .toVRMLStream (generator);
257
+ generator .string += generator .TidyBreak ();
255
258
  }
256
259
 
257
260
  generator .DecIndent ();
258
- stream .string += generator .Indent ();
259
- stream .string += "]";
261
+ generator .string += generator .Indent ();
262
+ generator .string += "]";
260
263
 
261
264
  generator .LeaveScope ();
262
265
  break;
@@ -273,11 +276,9 @@ MFNode .prototype = Object .assign (Object .create (X3DObjectArrayField .prototy
273
276
 
274
277
  return string;
275
278
  },
276
- toXMLStream: function (stream)
279
+ toXMLStream: function (generator)
277
280
  {
278
- const
279
- generator = Generator .Get (stream),
280
- length = this .length;
281
+ const length = this .length;
281
282
 
282
283
  if (length)
283
284
  {
@@ -291,26 +292,26 @@ MFNode .prototype = Object .assign (Object .create (X3DObjectArrayField .prototy
291
292
 
292
293
  if (node)
293
294
  {
294
- node .toXMLStream (stream);
295
- stream .string += "\n";
295
+ node .toXMLStream (generator);
296
+ generator .string += generator .TidyBreak ();
296
297
  }
297
298
  else
298
299
  {
299
- stream .string += generator .Indent ();
300
- stream .string += "<";
301
- stream .string += "NULL";
300
+ generator .string += generator .Indent ();
301
+ generator .string += "<";
302
+ generator .string += "NULL";
302
303
 
303
304
  const containerField = generator .ContainerField ();
304
305
 
305
306
  if (containerField)
306
307
  {
307
- stream .string += " ";
308
- stream .string += "containerField='";
309
- stream .string += generator .XMLEncode (containerField .getName ());
310
- stream .string += "'";
308
+ generator .string += generator .Space ();
309
+ generator .string += "containerField='";
310
+ generator .string += generator .XMLEncode (containerField .getName ());
311
+ generator .string += "'";
311
312
  }
312
313
 
313
- stream .string += "/>";
314
+ generator .string += "/>";
314
315
  }
315
316
  }
316
317
 
@@ -318,22 +319,22 @@ MFNode .prototype = Object .assign (Object .create (X3DObjectArrayField .prototy
318
319
 
319
320
  if (node)
320
321
  {
321
- node .toXMLStream (stream);
322
+ node .toXMLStream (generator);
322
323
  }
323
324
  else
324
325
  {
325
- stream .string += generator .Indent ();
326
- stream .string += "<";
327
- stream .string += "NULL";
326
+ generator .string += generator .Indent ();
327
+ generator .string += "<";
328
+ generator .string += "NULL";
328
329
 
329
330
  const containerField = generator .ContainerField ();
330
331
 
331
332
  if (containerField)
332
333
  {
333
- stream .string += " ";
334
- stream .string += "containerField='";
335
- stream .string += generator .XMLEncode (containerField .getName ());
336
- stream .string += "'";
334
+ generator .string += generator .Space ();
335
+ generator .string += "containerField='";
336
+ generator .string += generator .XMLEncode (containerField .getName ());
337
+ generator .string += "'";
337
338
  }
338
339
  }
339
340
 
@@ -383,7 +384,7 @@ MFString .prototype = Object .assign (Object .create (X3DObjectArrayField .proto
383
384
  {
384
385
  return X3DConstants .MFString;
385
386
  },
386
- toXMLStream: function (stream)
387
+ toXMLStream: function (generator)
387
388
  {
388
389
  const length = this .length;
389
390
 
@@ -393,15 +394,16 @@ MFString .prototype = Object .assign (Object .create (X3DObjectArrayField .proto
393
394
 
394
395
  for (let i = 0, n = length - 1; i < n; ++ i)
395
396
  {
396
- stream .string += "\"";
397
- value [i] .toXMLStream (stream);
398
- stream .string += "\"";
399
- stream .string += ", ";
397
+ generator .string += "\"";
398
+ value [i] .toXMLStream (generator);
399
+ generator .string += "\"";
400
+ generator .string += generator .Comma ();
401
+ generator .string += generator .TidySpace ();
400
402
  }
401
403
 
402
- stream .string += "\"";
403
- value .at (-1) .toXMLStream (stream);
404
- stream .string += "\"";
404
+ generator .string += "\"";
405
+ value .at (-1) .toXMLStream (generator);
406
+ generator .string += "\"";
405
407
  }
406
408
  },
407
409
  });
@@ -80,17 +80,17 @@ SFBool .prototype = Object .assign (Object .create (X3DField .prototype),
80
80
  {
81
81
  return this .getValue ();
82
82
  },
83
- toStream: function (stream)
83
+ toStream: function (generator)
84
84
  {
85
- stream .string += this .getValue () ? "TRUE" : "FALSE";
85
+ generator .string += this .getValue () ? "TRUE" : "FALSE";
86
86
  },
87
- toVRMLStream: function (stream)
87
+ toVRMLStream: function (generator)
88
88
  {
89
- this .toStream (stream);
89
+ this .toStream (generator);
90
90
  },
91
- toXMLStream: function (stream)
91
+ toXMLStream: function (generator)
92
92
  {
93
- stream .string += this .getValue () ? "true" : "false";
93
+ generator .string += this .getValue () ? "true" : "false";
94
94
  },
95
95
  });
96
96
 
@@ -48,7 +48,6 @@
48
48
  import Color3 from "../../standard/Math/Numbers/Color3.js";
49
49
  import X3DField from "../Base/X3DField.js";
50
50
  import X3DConstants from "../Base/X3DConstants.js";
51
- import Generator from "../InputOutput/Generator.js";
52
51
 
53
52
  function SFColor (r, g, b)
54
53
  {
@@ -127,28 +126,27 @@ SFColor .prototype = Object .assign (Object .create (X3DField .prototype),
127
126
  return result;
128
127
  };
129
128
  })(),
130
- toStream: function (stream)
129
+ toStream: function (generator)
131
130
  {
132
131
  const
133
- generator = Generator .Get (stream),
134
- value = this .getValue (),
135
- last = value .length - 1;
132
+ value = this .getValue (),
133
+ last = value .length - 1;
136
134
 
137
135
  for (let i = 0; i < last; ++ i)
138
136
  {
139
- stream .string += generator .Precision (value [i]);
140
- stream .string += " ";
137
+ generator .string += generator .Precision (value [i]);
138
+ generator .string += generator .Space ();
141
139
  }
142
140
 
143
- stream .string += generator .Precision (value [last]);
141
+ generator .string += generator .Precision (value [last]);
144
142
  },
145
- toVRMLStream: function (stream)
143
+ toVRMLStream: function (generator)
146
144
  {
147
- this .toStream (stream);
145
+ this .toStream (generator);
148
146
  },
149
- toXMLStream: function (stream)
147
+ toXMLStream: function (generator)
150
148
  {
151
- this .toStream (stream);
149
+ this .toStream (generator);
152
150
  },
153
151
  });
154
152
 
@@ -47,7 +47,6 @@
47
47
 
48
48
  import X3DField from "../Base/X3DField.js";
49
49
  import X3DConstants from "../Base/X3DConstants.js";
50
- import Generator from "../InputOutput/Generator.js";
51
50
 
52
51
  function SFDouble (value)
53
52
  {
@@ -78,21 +77,19 @@ SFDouble .prototype = Object .assign (Object .create (X3DField .prototype),
78
77
  X3DField .prototype .set .call (this, +value);
79
78
  },
80
79
  valueOf: X3DField .prototype .getValue,
81
- toStream: function (stream)
80
+ toStream: function (generator)
82
81
  {
83
- const
84
- generator = Generator .Get (stream),
85
- category = generator .Unit (this .getUnit ());
82
+ const category = generator .Unit (this .getUnit ());
86
83
 
87
- stream .string += generator .DoublePrecision (generator .ToUnit (category, this .getValue ()));
84
+ generator .string += generator .DoublePrecision (generator .ToUnit (category, this .getValue ()));
88
85
  },
89
- toVRMLStream: function (stream)
86
+ toVRMLStream: function (generator)
90
87
  {
91
- this .toStream (stream);
88
+ this .toStream (generator);
92
89
  },
93
- toXMLStream: function (stream)
90
+ toXMLStream: function (generator)
94
91
  {
95
- this .toStream (stream);
92
+ this .toStream (generator);
96
93
  },
97
94
  });
98
95
 
@@ -47,7 +47,6 @@
47
47
 
48
48
  import X3DField from "../Base/X3DField.js";
49
49
  import X3DConstants from "../Base/X3DConstants.js";
50
- import Generator from "../InputOutput/Generator.js";
51
50
 
52
51
  function SFFloat (value)
53
52
  {
@@ -78,21 +77,19 @@ SFFloat .prototype = Object .assign (Object .create (X3DField .prototype),
78
77
  X3DField .prototype .set .call (this, +value);
79
78
  },
80
79
  valueOf: X3DField .prototype .getValue,
81
- toStream: function (stream)
80
+ toStream: function (generator)
82
81
  {
83
- const
84
- generator = Generator .Get (stream),
85
- category = generator .Unit (this .getUnit ());
82
+ const category = generator .Unit (this .getUnit ());
86
83
 
87
- stream .string += generator .Precision (generator .ToUnit (category, this .getValue ()));
84
+ generator .string += generator .Precision (generator .ToUnit (category, this .getValue ()));
88
85
  },
89
- toVRMLStream: function (stream)
86
+ toVRMLStream: function (generator)
90
87
  {
91
- this .toStream (stream);
88
+ this .toStream (generator);
92
89
  },
93
- toXMLStream: function (stream)
90
+ toXMLStream: function (generator)
94
91
  {
95
- this .toStream (stream);
92
+ this .toStream (generator);
96
93
  },
97
94
  });
98
95
 
@@ -184,20 +184,45 @@ SFImage .prototype = Object .assign (Object .create (X3DField .prototype),
184
184
  {
185
185
  return X3DConstants .SFImage;
186
186
  },
187
- toStream: function (stream)
187
+ toStream: function (generator)
188
188
  {
189
- stream .string += this .width + " " + this .height + " " + this .comp;
189
+ const array = this .array;
190
190
 
191
- for (const value of this .array)
192
- stream .string += " 0x" + value .toString (16);
191
+ generator .string += this .width;
192
+ generator .string += generator .Space ();
193
+ generator .string += this .height;
194
+ generator .string += generator .Space ();
195
+ generator .string += this .comp;
196
+ generator .string += generator .AttribBreak ();
197
+
198
+ generator .IncIndent ();
199
+
200
+ for (let y = 0, h = this .height; y < h; ++ y)
201
+ {
202
+ generator .string += generator .ListIndent ();
203
+
204
+ for (let x = 0, w = this .width; x < w; ++ x)
205
+ {
206
+ generator .string += "0x";
207
+ generator .string += array [y * w + x] .toString (16);
208
+
209
+ if (x !== w - 1)
210
+ generator .string += generator .Space ();
211
+ }
212
+
213
+ if (y !== h - 1)
214
+ generator .string += generator .AttribBreak ();
215
+ }
216
+
217
+ generator .DecIndent ();
193
218
  },
194
- toVRMLStream: function (stream)
219
+ toVRMLStream: function (generator)
195
220
  {
196
- this .toStream (stream);
221
+ this .toStream (generator);
197
222
  },
198
- toXMLStream: function (stream)
223
+ toXMLStream: function (generator)
199
224
  {
200
- this .toStream (stream);
225
+ this .toStream (generator);
201
226
  },
202
227
  });
203
228
 
@@ -77,17 +77,17 @@ SFInt32 .prototype = Object .assign (Object .create (X3DField .prototype),
77
77
  X3DField .prototype .set .call (this, ~~value);
78
78
  },
79
79
  valueOf: X3DField .prototype .getValue,
80
- toStream: function (stream, base)
80
+ toStream: function (generator, base)
81
81
  {
82
- stream .string += this .getValue () .toString (base);
82
+ generator .string += this .getValue () .toString (base);
83
83
  },
84
- toVRMLStream: function (stream)
84
+ toVRMLStream: function (generator)
85
85
  {
86
- this .toStream (stream);
86
+ this .toStream (generator);
87
87
  },
88
- toXMLStream: function (stream)
88
+ toXMLStream: function (generator)
89
89
  {
90
- stream .string += this .getValue () .toString ();
90
+ generator .string += this .getValue () .toString ();
91
91
  },
92
92
  });
93
93
 
@@ -45,11 +45,12 @@
45
45
  *
46
46
  ******************************************************************************/
47
47
 
48
- import X3DField from "../Base/X3DField.js";
49
- import Generator from "../InputOutput/Generator.js";
48
+ import X3DField from "../Base/X3DField.js";
50
49
 
51
50
  function SFMatrixPrototypeTemplate (TypeName, Type, Matrix, SFVec, double)
52
51
  {
52
+ const _formatter = double ? "DoublePrecision" : "Precision";
53
+
53
54
  return Object .assign (Object .create (X3DField .prototype),
54
55
  {
55
56
  [Symbol .iterator]: function* ()
@@ -136,28 +137,27 @@ function SFMatrixPrototypeTemplate (TypeName, Type, Matrix, SFVec, double)
136
137
  {
137
138
  return new SFVec (this .getValue () .multMatrixDir (vector .getValue () .copy ()));
138
139
  },
139
- toStream: function (stream)
140
+ toStream: function (generator)
140
141
  {
141
142
  const
142
- generator = Generator .Get (stream),
143
- value = this .getValue (),
144
- last = value .length - 1;
143
+ value = this .getValue (),
144
+ last = value .length - 1;
145
145
 
146
146
  for (let i = 0; i < last; ++ i)
147
147
  {
148
- stream .string += double ? generator .DoublePrecision (value [i]) : generator .Precision (value [i]);
149
- stream .string += " ";
148
+ generator .string += generator [_formatter] (value [i]);
149
+ generator .string += generator .Space ();
150
150
  }
151
151
 
152
- stream .string += double ? generator .DoublePrecision (value [last]) : generator .Precision (value [last]);
152
+ generator .string += generator [_formatter] (value [last]);
153
153
  },
154
- toVRMLStream: function (stream)
154
+ toVRMLStream: function (generator)
155
155
  {
156
- this .toStream (stream);
156
+ this .toStream (generator);
157
157
  },
158
- toXMLStream: function (stream)
158
+ toXMLStream: function (generator)
159
159
  {
160
- this .toStream (stream);
160
+ this .toStream (generator);
161
161
  },
162
162
  });
163
163
  }
@@ -372,54 +372,77 @@ SFNode .prototype = Object .assign (Object .create (X3DField .prototype),
372
372
 
373
373
  return null;
374
374
  },
375
- toStream: function (stream)
375
+ toStream: function (generator)
376
376
  {
377
377
  const
378
378
  target = this [_target],
379
379
  value = target .getValue ();
380
380
 
381
381
  if (value)
382
- value .toStream (stream);
382
+ value .toStream (generator);
383
383
  else
384
- stream .string += "NULL";
384
+ generator .string += "NULL";
385
385
  },
386
- toVRMLStream: function (stream)
386
+ toVRMLString: function (options)
387
387
  {
388
388
  const
389
- target = this [_target],
390
- value = target .getValue ();
389
+ generator = new Generator (options),
390
+ target = this [_target],
391
+ value = target .getValue ();
391
392
 
392
- if (value)
393
- value .toVRMLStream (stream);
394
- else
395
- stream .string += "NULL";
393
+ generator .PushExecutionContext (value .getExecutionContext ());
394
+
395
+ target .toVRMLStream (generator);
396
+
397
+ return generator .string;
396
398
  },
397
- toXMLString: function ()
399
+ toXMLString: function (options)
398
400
  {
399
401
  const
402
+ generator = new Generator (options),
400
403
  target = this [_target],
401
- stream = { string: "" },
402
- generator = Generator .Get (stream),
403
404
  value = target .getValue ();
404
405
 
405
406
  generator .PushExecutionContext (value .getExecutionContext ());
406
407
 
407
- target .toXMLStream (stream);
408
+ target .toXMLStream (generator);
408
409
 
409
- generator .PopExecutionContext ();
410
+ return generator .string;
411
+ },
412
+ toJSONString: function (options)
413
+ {
414
+ const
415
+ generator = new Generator (options),
416
+ target = this [_target],
417
+ value = target .getValue ();
418
+
419
+ generator .PushExecutionContext (value .getExecutionContext ());
420
+
421
+ target .toJSONStream (generator);
422
+
423
+ return generator .string;
424
+ },
425
+ toVRMLStream: function (generator)
426
+ {
427
+ const
428
+ target = this [_target],
429
+ value = target .getValue ();
410
430
 
411
- return stream .string;
431
+ if (value)
432
+ value .toVRMLStream (generator);
433
+ else
434
+ generator .string += "NULL";
412
435
  },
413
- toXMLStream: function (stream)
436
+ toXMLStream: function (generator)
414
437
  {
415
438
  const
416
439
  target = this [_target],
417
440
  value = target .getValue ();
418
441
 
419
442
  if (value)
420
- value .toXMLStream (stream);
443
+ value .toXMLStream (generator);
421
444
  else
422
- stream .string += "<!-- NULL -->";
445
+ generator .string += "<!-- NULL -->";
423
446
  },
424
447
  dispose: function ()
425
448
  {
@@ -49,7 +49,6 @@ import X3DField from "../Base/X3DField.js";
49
49
  import SFVec3 from "./SFVec3.js";
50
50
  import SFMatrix3 from "./SFMatrix3.js";
51
51
  import X3DConstants from "../Base/X3DConstants.js";
52
- import Generator from "../InputOutput/Generator.js";
53
52
  import Rotation4 from "../../standard/Math/Numbers/Rotation4.js";
54
53
  import Matrix3 from "../../standard/Math/Numbers/Matrix3.js";
55
54
 
@@ -153,24 +152,25 @@ SFRotation .prototype = Object .assign (Object .create (X3DField .prototype),
153
152
  {
154
153
  return new SFRotation (Rotation4 .slerp (this .getValue (), rotation .getValue (), t));
155
154
  },
156
- toStream: function (stream)
155
+ toStream: function (generator)
157
156
  {
158
- const
159
- generator = Generator .Get (stream),
160
- rotation = this .getValue ();
157
+ const rotation = this .getValue ();
161
158
 
162
- stream .string += generator .DoublePrecision (rotation .x) + " " +
163
- generator .DoublePrecision (rotation .y) + " " +
164
- generator .DoublePrecision (rotation .z) + " " +
165
- generator .DoublePrecision (generator .ToUnit ("angle", rotation .angle));
159
+ generator .string += generator .DoublePrecision (rotation .x);
160
+ generator .string += generator .Space ();
161
+ generator .string += generator .DoublePrecision (rotation .y);
162
+ generator .string += generator .Space ();
163
+ generator .string += generator .DoublePrecision (rotation .z);
164
+ generator .string += generator .Space ();
165
+ generator .string += generator .DoublePrecision (generator .ToUnit ("angle", rotation .angle));
166
166
  },
167
- toVRMLStream: function (stream)
167
+ toVRMLStream: function (generator)
168
168
  {
169
- this .toStream (stream);
169
+ this .toStream (generator);
170
170
  },
171
- toXMLStream: function (stream)
171
+ toXMLStream: function (generator)
172
172
  {
173
- this .toStream (stream);
173
+ this .toStream (generator);
174
174
  },
175
175
  });
176
176