x_ite 8.3.3 → 8.4.1

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 (85) hide show
  1. package/dist/assets/components/Annotation.js +13 -13
  2. package/dist/assets/components/Annotation.min.js +1 -1
  3. package/dist/assets/components/CADGeometry.js +13 -13
  4. package/dist/assets/components/CADGeometry.min.js +1 -1
  5. package/dist/assets/components/CubeMapTexturing.js +25 -25
  6. package/dist/assets/components/CubeMapTexturing.min.js +1 -1
  7. package/dist/assets/components/DIS.js +13 -13
  8. package/dist/assets/components/DIS.min.js +1 -1
  9. package/dist/assets/components/EventUtilities.js +9 -9
  10. package/dist/assets/components/EventUtilities.min.js +1 -1
  11. package/dist/assets/components/Geometry2D.js +19 -19
  12. package/dist/assets/components/Geometry2D.min.js +1 -1
  13. package/dist/assets/components/Geospatial.js +33 -33
  14. package/dist/assets/components/Geospatial.min.js +1 -1
  15. package/dist/assets/components/HAnim.js +21 -19
  16. package/dist/assets/components/HAnim.min.js +1 -1
  17. package/dist/assets/components/KeyDeviceSensor.js +8 -8
  18. package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
  19. package/dist/assets/components/Layout.js +27 -27
  20. package/dist/assets/components/Layout.min.js +1 -1
  21. package/dist/assets/components/NURBS.js +24 -24
  22. package/dist/assets/components/NURBS.min.js +1 -1
  23. package/dist/assets/components/ParticleSystems.js +23 -23
  24. package/dist/assets/components/ParticleSystems.min.js +1 -1
  25. package/dist/assets/components/Picking.js +19 -19
  26. package/dist/assets/components/Picking.min.js +1 -1
  27. package/dist/assets/components/RigidBodyPhysics.js +17 -17
  28. package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
  29. package/dist/assets/components/Scripting.js +28 -28
  30. package/dist/assets/components/Scripting.min.js +1 -1
  31. package/dist/assets/components/Text.js +24 -24
  32. package/dist/assets/components/Text.min.js +1 -1
  33. package/dist/assets/components/TextureProjector.js +14 -14
  34. package/dist/assets/components/TextureProjector.min.js +1 -1
  35. package/dist/assets/components/Texturing3D.js +27 -27
  36. package/dist/assets/components/Texturing3D.min.js +1 -1
  37. package/dist/assets/components/VolumeRendering.js +19 -19
  38. package/dist/assets/components/VolumeRendering.min.js +1 -1
  39. package/dist/assets/components/X_ITE.js +9 -9
  40. package/dist/assets/components/X_ITE.min.js +1 -1
  41. package/dist/x_ite.css +1 -1
  42. package/dist/x_ite.js +2711 -292
  43. package/dist/x_ite.min.js +1 -1
  44. package/dist/x_ite.zip +0 -0
  45. package/docs/_config.yml +2 -2
  46. package/docs/_posts/reference/field-services-and-objects.md +24 -4
  47. package/docs/_posts/reference/prototype-services.md +24 -4
  48. package/docs/_posts/reference/scene-services.md +9 -4
  49. package/docs/_posts/what's-new.md +11 -1
  50. package/package.json +1 -1
  51. package/src/x_ite/Base/X3DInfoArray.js +26 -0
  52. package/src/x_ite/Base/X3DObject.js +1 -1
  53. package/src/x_ite/Base/X3DObjectArrayField.js +44 -0
  54. package/src/x_ite/Base/X3DTypedArrayField.js +74 -0
  55. package/src/x_ite/Browser/VERSION.js +1 -1
  56. package/src/x_ite/Components/Core/X3DNode.js +486 -23
  57. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +371 -10
  58. package/src/x_ite/Components/HAnim/HAnimHumanoid.js +3 -1
  59. package/src/x_ite/Components/Rendering/X3DGeometryNode.js +6 -3
  60. package/src/x_ite/Configuration/ComponentInfo.js +32 -0
  61. package/src/x_ite/Configuration/ProfileInfo.js +4 -0
  62. package/src/x_ite/Configuration/UnitInfo.js +46 -0
  63. package/src/x_ite/Execution/X3DExecutionContext.js +54 -0
  64. package/src/x_ite/Execution/X3DExportedNode.js +52 -0
  65. package/src/x_ite/Execution/X3DImportedNode.js +164 -0
  66. package/src/x_ite/Execution/X3DScene.js +339 -0
  67. package/src/x_ite/Fields/ArrayFields.js +48 -0
  68. package/src/x_ite/Fields/SFBool.js +8 -0
  69. package/src/x_ite/Fields/SFColor.js +26 -1
  70. package/src/x_ite/Fields/SFColorRGBA.js +2 -0
  71. package/src/x_ite/Fields/SFDouble.js +10 -0
  72. package/src/x_ite/Fields/SFFloat.js +10 -0
  73. package/src/x_ite/Fields/SFImage.js +61 -1
  74. package/src/x_ite/Fields/SFInt32.js +11 -3
  75. package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +26 -1
  76. package/src/x_ite/Fields/SFNode.js +40 -25
  77. package/src/x_ite/Fields/SFRotation.js +28 -3
  78. package/src/x_ite/Fields/SFString.js +8 -0
  79. package/src/x_ite/Fields/SFTime.js +8 -0
  80. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +30 -4
  81. package/src/x_ite/InputOutput/Generator.js +63 -2
  82. package/src/x_ite/Parser/JSONParser.js +1 -1
  83. package/src/x_ite/Prototype/X3DExternProtoDeclaration.js +123 -0
  84. package/src/x_ite/Prototype/X3DProtoDeclaration.js +228 -0
  85. package/src/x_ite/Routing/X3DRoute.js +67 -0
@@ -201,10 +201,12 @@ SFImage .prototype = Object .assign (Object .create (X3DField .prototype),
201
201
  {
202
202
  generator .string += generator .ListIndent ();
203
203
 
204
+ const s = y * this .width;
205
+
204
206
  for (let x = 0, w = this .width; x < w; ++ x)
205
207
  {
206
208
  generator .string += "0x";
207
- generator .string += array [y * w + x] .toString (16);
209
+ generator .string += array [x + s] .toString (16);
208
210
 
209
211
  if (x !== w - 1)
210
212
  generator .string += generator .Space ();
@@ -224,6 +226,64 @@ SFImage .prototype = Object .assign (Object .create (X3DField .prototype),
224
226
  {
225
227
  this .toStream (generator);
226
228
  },
229
+ toJSONStream: function (generator)
230
+ {
231
+ generator .string += '[';
232
+ generator .string += generator .ListBreak ();
233
+ generator .string += generator .IncIndent ();
234
+ generator .string += generator .ListIndent ();
235
+
236
+ this .toJSONStreamValue (generator);
237
+
238
+ generator .string += generator .DecIndent ();
239
+ generator .string += generator .ListBreak ();
240
+ generator .string += generator .ListIndent ();
241
+ generator .string += ']';
242
+ },
243
+ toJSONStreamValue: function (generator)
244
+ {
245
+ const
246
+ array = this .array,
247
+ length = array .length;
248
+
249
+ generator .string += this .width;
250
+ generator .string += ',';
251
+ generator .string += generator .TidySpace ();
252
+ generator .string += this .height;
253
+ generator .string += ',';
254
+ generator .string += generator .TidySpace ();
255
+ generator .string += this .comp;
256
+ generator .string += ',';
257
+
258
+ if (this .width && this .height)
259
+ {
260
+ generator .string += generator .ListBreak ();
261
+ generator .string += generator .IncIndent ();
262
+
263
+ for (let y = 0, h = this .height; y < h; ++ y)
264
+ {
265
+ generator .string += generator .ListIndent ();
266
+
267
+ const s = y * this .width;
268
+
269
+ for (let x = 0, w = this .width; x < w; ++ x)
270
+ {
271
+ generator .string += array [x + s];
272
+
273
+ if (x + s !== length - 1)
274
+ generator .string += ',';
275
+
276
+ if (x !== w - 1)
277
+ generator .string += generator .TidySpace ();
278
+ }
279
+
280
+ if (y !== h - 1)
281
+ generator .string += generator .ListBreak ();
282
+ }
283
+
284
+ generator .string += generator .DecIndent ();
285
+ }
286
+ },
227
287
  });
228
288
 
229
289
  for (const key of Reflect .ownKeys (SFImage .prototype))
@@ -77,9 +77,9 @@ 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 (generator, base)
80
+ toStream: function (generator)
81
81
  {
82
- generator .string += this .getValue () .toString (base);
82
+ generator .string += this .getValue () .toString ();
83
83
  },
84
84
  toVRMLStream: function (generator)
85
85
  {
@@ -87,7 +87,15 @@ SFInt32 .prototype = Object .assign (Object .create (X3DField .prototype),
87
87
  },
88
88
  toXMLStream: function (generator)
89
89
  {
90
- generator .string += this .getValue () .toString ();
90
+ this .toStream (generator);
91
+ },
92
+ toJSONStream: function (generator)
93
+ {
94
+ this .toStream (generator);
95
+ },
96
+ toJSONStreamValue: function (generator)
97
+ {
98
+ this .toStream (generator);
91
99
  },
92
100
  });
93
101
 
@@ -146,7 +146,7 @@ function SFMatrixPrototypeTemplate (TypeName, Type, Matrix, SFVec, double)
146
146
  for (let i = 0; i < last; ++ i)
147
147
  {
148
148
  generator .string += generator [_formatter] (value [i]);
149
- generator .string += generator .Space ();
149
+ generator .string += generator .TidySpace ();
150
150
  }
151
151
 
152
152
  generator .string += generator [_formatter] (value [last]);
@@ -159,6 +159,31 @@ function SFMatrixPrototypeTemplate (TypeName, Type, Matrix, SFVec, double)
159
159
  {
160
160
  this .toStream (generator);
161
161
  },
162
+ toJSONStream: function (generator)
163
+ {
164
+ generator .string += '[';
165
+ generator .string += generator .TidySpace ();
166
+
167
+ this .toJSONStreamValue (generator);
168
+
169
+ generator .string += generator .TidySpace ();
170
+ generator .string += ']';
171
+ },
172
+ toJSONStreamValue: function (generator)
173
+ {
174
+ const
175
+ value = this .getValue (),
176
+ last = value .length - 1;
177
+
178
+ for (let i = 0; i < last; ++ i)
179
+ {
180
+ generator .string += generator .JSONNumber (generator [_formatter] (value [i]));
181
+ generator .string += ',';
182
+ generator .string += generator .TidySpace ();
183
+ }
184
+
185
+ generator .string += generator .JSONNumber (generator [_formatter] (value [last]));
186
+ },
162
187
  });
163
188
  }
164
189
 
@@ -372,55 +372,55 @@ SFNode .prototype = Object .assign (Object .create (X3DField .prototype),
372
372
 
373
373
  return null;
374
374
  },
375
- toStream: function (generator)
375
+ toVRMLString: function (options = Object .prototype)
376
376
  {
377
377
  const
378
- target = this [_target],
379
- value = target .getValue ();
378
+ generator = new Generator (options),
379
+ value = this .getValue ();
380
380
 
381
381
  if (value)
382
- value .toStream (generator);
383
- else
384
- generator .string += "NULL";
382
+ generator .PushExecutionContext (value .getExecutionContext ());
383
+
384
+ this .toVRMLStream (generator);
385
+
386
+ return generator .string;
385
387
  },
386
- toVRMLString: function (options)
388
+ toXMLString: function (options = Object .prototype)
387
389
  {
388
390
  const
389
391
  generator = new Generator (options),
390
- target = this [_target],
391
- value = target .getValue ();
392
+ value = this .getValue ();
392
393
 
393
- generator .PushExecutionContext (value .getExecutionContext ());
394
+ if (value)
395
+ generator .PushExecutionContext (value .getExecutionContext ());
394
396
 
395
- target .toVRMLStream (generator);
397
+ this .toXMLStream (generator);
396
398
 
397
399
  return generator .string;
398
400
  },
399
- toXMLString: function (options)
401
+ toJSONString: function (options = Object .prototype)
400
402
  {
401
403
  const
402
404
  generator = new Generator (options),
403
- target = this [_target],
404
- value = target .getValue ();
405
+ value = this .getValue ();
405
406
 
406
- generator .PushExecutionContext (value .getExecutionContext ());
407
+ if (value)
408
+ generator .PushExecutionContext (value .getExecutionContext ());
407
409
 
408
- target .toXMLStream (generator);
410
+ this .toJSONStream (generator);
409
411
 
410
412
  return generator .string;
411
413
  },
412
- toJSONString: function (options)
414
+ toStream: function (generator)
413
415
  {
414
416
  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);
417
+ target = this [_target],
418
+ value = target .getValue ();
422
419
 
423
- return generator .string;
420
+ if (value)
421
+ value .toStream (generator);
422
+ else
423
+ generator .string += "NULL";
424
424
  },
425
425
  toVRMLStream: function (generator)
426
426
  {
@@ -444,6 +444,21 @@ SFNode .prototype = Object .assign (Object .create (X3DField .prototype),
444
444
  else
445
445
  generator .string += "<!-- NULL -->";
446
446
  },
447
+ toJSONStream: function (generator)
448
+ {
449
+ this .toJSONStreamValue (generator);
450
+ },
451
+ toJSONStreamValue: function (generator)
452
+ {
453
+ const
454
+ target = this [_target],
455
+ value = target .getValue ();
456
+
457
+ if (value)
458
+ value .toJSONStream (generator);
459
+ else
460
+ generator .string += "null";
461
+ },
447
462
  dispose: function ()
448
463
  {
449
464
  const
@@ -157,11 +157,11 @@ SFRotation .prototype = Object .assign (Object .create (X3DField .prototype),
157
157
  const rotation = this .getValue ();
158
158
 
159
159
  generator .string += generator .DoublePrecision (rotation .x);
160
- generator .string += generator .Space ();
160
+ generator .string += generator .TidySpace ();
161
161
  generator .string += generator .DoublePrecision (rotation .y);
162
- generator .string += generator .Space ();
162
+ generator .string += generator .TidySpace ();
163
163
  generator .string += generator .DoublePrecision (rotation .z);
164
- generator .string += generator .Space ();
164
+ generator .string += generator .TidySpace ();
165
165
  generator .string += generator .DoublePrecision (generator .ToUnit ("angle", rotation .angle));
166
166
  },
167
167
  toVRMLStream: function (generator)
@@ -172,6 +172,31 @@ SFRotation .prototype = Object .assign (Object .create (X3DField .prototype),
172
172
  {
173
173
  this .toStream (generator);
174
174
  },
175
+ toJSONStream: function (generator)
176
+ {
177
+ generator .string += '[';
178
+ generator .string += generator .TidySpace ();
179
+
180
+ this .toJSONStreamValue (generator);
181
+
182
+ generator .string += generator .TidySpace ();
183
+ generator .string += ']';
184
+ },
185
+ toJSONStreamValue: function (generator)
186
+ {
187
+ const rotation = this .getValue ();
188
+
189
+ generator .string += generator .JSONNumber (generator .DoublePrecision (rotation .x));
190
+ generator .string += ',';
191
+ generator .string += generator .TidySpace ();
192
+ generator .string += generator .JSONNumber (generator .DoublePrecision (rotation .y));
193
+ generator .string += ',';
194
+ generator .string += generator .TidySpace ();
195
+ generator .string += generator .JSONNumber (generator .DoublePrecision (rotation .z));
196
+ generator .string += ',';
197
+ generator .string += generator .TidySpace ();
198
+ generator .string += generator .JSONNumber (generator .DoublePrecision (generator .ToUnit ("angle", rotation .angle)));
199
+ },
175
200
  });
176
201
 
177
202
  for (const key of Reflect .ownKeys (SFRotation .prototype))
@@ -109,6 +109,14 @@ SFString .prototype = Object .assign (Object .create (X3DField .prototype),
109
109
  {
110
110
  generator .string += generator .XMLEncode (this .getValue ());
111
111
  },
112
+ toJSONStream: function (generator)
113
+ {
114
+ this .toJSONStreamValue (generator)
115
+ },
116
+ toJSONStreamValue: function (generator)
117
+ {
118
+ generator .string += generator .JSONEncode (this .getValue ());
119
+ },
112
120
  });
113
121
 
114
122
  for (const key of Reflect .ownKeys (SFString .prototype))
@@ -89,6 +89,14 @@ SFTime .prototype = Object .assign (Object .create (X3DField .prototype),
89
89
  {
90
90
  this .toStream (generator);
91
91
  },
92
+ toJSONStream: function (generator)
93
+ {
94
+ this .toJSONStreamValue (generator);
95
+ },
96
+ toJSONStreamValue: function (generator)
97
+ {
98
+ generator .string += generator .JSONNumber (generator .DoublePrecision (this .getValue ()));
99
+ },
92
100
  });
93
101
 
94
102
  for (const key of Reflect .ownKeys (SFTime .prototype))
@@ -148,14 +148,14 @@ function SFVecPrototypeTemplate (TypeName, Type, ValueType, double)
148
148
  toStream: function (generator)
149
149
  {
150
150
  const
151
- value = this .getValue (),
152
- category = generator .Unit (this .getUnit ()),
153
- last = value .length - 1;
151
+ value = this .getValue (),
152
+ last = value .length - 1,
153
+ category = generator .Unit (this .getUnit ());
154
154
 
155
155
  for (let i = 0; i < last; ++ i)
156
156
  {
157
157
  generator .string += generator [_formatter] (generator .ToUnit (category, value [i]));
158
- generator .string += generator .Space ();
158
+ generator .string += generator .TidySpace ();
159
159
  }
160
160
 
161
161
  generator .string += generator [_formatter] (generator .ToUnit (category, value [last]));
@@ -168,6 +168,32 @@ function SFVecPrototypeTemplate (TypeName, Type, ValueType, double)
168
168
  {
169
169
  this .toStream (generator);
170
170
  },
171
+ toJSONStream: function (generator)
172
+ {
173
+ generator .string += '[';
174
+ generator .string += generator .TidySpace ();
175
+
176
+ this .toJSONStreamValue (generator);
177
+
178
+ generator .string += generator .TidySpace ();
179
+ generator .string += ']';
180
+ },
181
+ toJSONStreamValue: function (generator)
182
+ {
183
+ const
184
+ value = this .getValue (),
185
+ last = value .length - 1,
186
+ category = generator .Unit (this .getUnit ());
187
+
188
+ for (let i = 0; i < last; ++ i)
189
+ {
190
+ generator .string += generator .JSONNumber (generator [_formatter] (generator .ToUnit (category, value [i])));
191
+ generator .string += ',';
192
+ generator .string += generator .TidySpace ();
193
+ }
194
+
195
+ generator .string += generator .JSONNumber (generator [_formatter] (generator .ToUnit (category, value [last])));
196
+ },
171
197
  });
172
198
  }
173
199
 
@@ -47,7 +47,7 @@
47
47
 
48
48
  import X3DConstants from "../Base/X3DConstants.js";
49
49
 
50
- function Generator ({ style = "TIDY", precision = 6, doublePrecision = 14 })
50
+ function Generator ({ style = "TIDY", precision = 7, doublePrecision = 15 })
51
51
  {
52
52
  this .Style (style);
53
53
 
@@ -115,7 +115,7 @@ Generator .prototype =
115
115
  this .tidyBreak = "\n";
116
116
  this .tidySpace = " ";
117
117
  this .indentChar = " ";
118
- this .listEnclosure = "";
118
+ this .listEnclosure = " ";
119
119
  this .listBreak = " ";
120
120
  this .listIndentChar = "";
121
121
  this .attribBreak = " ";
@@ -189,11 +189,15 @@ Generator .prototype =
189
189
  {
190
190
  this .indent += this .indentChar;
191
191
  this .listIndent += this .listIndentChar;
192
+
193
+ return "";
192
194
  },
193
195
  DecIndent: function ()
194
196
  {
195
197
  this .indent = this .indent .slice (0, this .indent .length - this .indentChar .length);
196
198
  this .listIndent = this .listIndent .slice (0, this .listIndent .length - this .listIndentChar .length);
199
+
200
+ return "";
197
201
  },
198
202
  PadRight: function (string, pad)
199
203
  {
@@ -519,6 +523,63 @@ Generator .prototype =
519
523
  {
520
524
  return string .replace (/\]\]\>/g, "\\]\\]\\>");
521
525
  },
526
+ JSONEncode: function (string)
527
+ {
528
+ let result = '"';
529
+
530
+ for (const character of string)
531
+ {
532
+ switch (character)
533
+ {
534
+ case '\r':
535
+ {
536
+ result += "\\r";
537
+ break;
538
+ }
539
+ case '\n':
540
+ {
541
+ result += "\\n";
542
+ break;
543
+ }
544
+ case '\t':
545
+ {
546
+ result += "\\t";
547
+ break;
548
+ }
549
+ case '"':
550
+ {
551
+ result += "\\\"";
552
+ break;
553
+ }
554
+ case '\\':
555
+ {
556
+ result += "\\\\";
557
+ break;
558
+ }
559
+ default:
560
+ {
561
+ result += character;
562
+ break;
563
+ }
564
+ }
565
+ }
566
+
567
+ result += '"';
568
+
569
+ return result;
570
+ },
571
+ JSONNumber: function (value)
572
+ {
573
+ switch (value)
574
+ {
575
+ case "NaN":
576
+ case "Infinity":
577
+ case "-Infinity":
578
+ return '"' + value + '"';
579
+ default:
580
+ return value;
581
+ }
582
+ },
522
583
  };
523
584
 
524
585
  for (const key of Reflect .ownKeys (Generator .prototype))
@@ -73,7 +73,7 @@ JSONParser .prototype = Object .assign (Object .create (X3DParser .prototype),
73
73
  try
74
74
  {
75
75
  if (typeof json === "string")
76
- json = JSON .parse (json)
76
+ json = JSON .parse (json);
77
77
 
78
78
  this .input = json;
79
79
  }
@@ -276,6 +276,129 @@ X3DExternProtoDeclaration .prototype = Object .assign (Object .create (X3DProtoD
276
276
  generator .string += generator .Indent ();
277
277
  generator .string += "</ExternProtoDeclare>";
278
278
  },
279
+ toJSONStream: function (generator)
280
+ {
281
+ generator .string += generator .Indent ();
282
+ generator .string += '{';
283
+ generator .string += generator .TidySpace ();
284
+ generator .string += '"';
285
+ generator .string += "ExternProtoDeclare";
286
+ generator .string += '"';
287
+ generator .string += ':';
288
+ generator .string += generator .TidyBreak ();
289
+ generator .string += generator .IncIndent ();
290
+ generator .string += generator .Indent ();
291
+ generator .string += '{';
292
+ generator .string += generator .TidyBreak ();
293
+ generator .string += generator .IncIndent ();
294
+ generator .string += generator .Indent ();
295
+ generator .string += '"';
296
+ generator .string += "@name";
297
+ generator .string += '"';
298
+ generator .string += ':';
299
+ generator .string += generator .JSONEncode (this .getName ());
300
+ generator .string += ',';
301
+ generator .string += generator .TidyBreak ();
302
+
303
+
304
+ // Fields
305
+
306
+ const userDefinedFields = this .getUserDefinedFields ();
307
+
308
+ if (userDefinedFields .length)
309
+ {
310
+ generator .string += generator .Indent ();
311
+ generator .string += '"';
312
+ generator .string += "field";
313
+ generator .string += '"';
314
+ generator .string += ':';
315
+ generator .string += generator .TidySpace ();
316
+ generator .string += '[';
317
+ generator .string += generator .TidyBreak ();
318
+ generator .string += generator .IncIndent ();
319
+
320
+ for (const field of userDefinedFields)
321
+ {
322
+ generator .string += generator .Indent ();
323
+ generator .string += '{';
324
+ generator .string += generator .TidyBreak ();
325
+ generator .string += generator .IncIndent ();
326
+
327
+ generator .string += generator .Indent ();
328
+ generator .string += '"';
329
+ generator .string += "@accessType";
330
+ generator .string += '"';
331
+ generator .string += ':';
332
+ generator .string += generator .TidySpace ();
333
+ generator .string += '"';
334
+ generator .string += generator .AccessType (field .getAccessType ());
335
+ generator .string += '"';
336
+ generator .string += ',';
337
+ generator .string += generator .TidyBreak ();
338
+
339
+ generator .string += generator .Indent ();
340
+ generator .string += '"';
341
+ generator .string += "@type";
342
+ generator .string += '"';
343
+ generator .string += ':';
344
+ generator .string += generator .TidySpace ();
345
+ generator .string += '"';
346
+ generator .string += field .getTypeName ();
347
+ generator .string += '"';
348
+ generator .string += ',';
349
+ generator .string += generator .TidyBreak ();
350
+
351
+ generator .string += generator .Indent ();
352
+ generator .string += '"';
353
+ generator .string += "@name";
354
+ generator .string += '"';
355
+ generator .string += ':';
356
+ generator .string += generator .TidySpace ();
357
+ generator .string += generator .JSONEncode (field .getName ());
358
+ generator .string += generator .TidyBreak ();
359
+
360
+ generator .string += generator .DecIndent ();
361
+ generator .string += generator .Indent ();
362
+ generator .string += '}';
363
+
364
+ if (field !== userDefinedFields .at (-1))
365
+ generator .string += ',';
366
+
367
+ generator .string += generator .TidyBreak ();
368
+ }
369
+
370
+ generator .string += generator .DecIndent ();
371
+ generator .string += generator .Indent ();
372
+ generator .string += ']';
373
+ generator .string += ',';
374
+ generator .string += generator .TidyBreak ();
375
+ }
376
+
377
+
378
+ // URL
379
+
380
+ generator .string += generator .Indent ();
381
+ generator .string += '"';
382
+ generator .string += "@url";
383
+ generator .string += '"';
384
+ generator .string += ':';
385
+ generator .string += generator .TidySpace ();
386
+
387
+ this ._url .toJSONStream (generator);
388
+
389
+ generator .string += generator .TidyBreak ();
390
+
391
+
392
+ // End
393
+
394
+ generator .string += generator .DecIndent ();
395
+ generator .string += generator .Indent ();
396
+ generator .string += '}';
397
+ generator .string += generator .TidyBreak ();
398
+ generator .string += generator .DecIndent ();
399
+ generator .string += generator .Indent ();
400
+ generator .string += '}';
401
+ },
279
402
  });
280
403
 
281
404
  for (const key of Reflect .ownKeys (X3DExternProtoDeclaration .prototype))