x_ite 8.3.2 → 8.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) 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 +64 -75
  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 +3986 -1366
  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/field-services-and-objects.md +24 -4
  52. package/docs/_posts/reference/prototype-services.md +24 -4
  53. package/docs/_posts/reference/scene-services.md +18 -2
  54. package/docs/_posts/what's-new.md +32 -4
  55. package/docs/_tabs/playground.html +36 -40
  56. package/docs/assets/css/style.scss +18 -0
  57. package/package.json +1 -1
  58. package/src/assets/components/{ProjectiveTextureMapping.js → TextureProjector.js} +5 -5
  59. package/src/examples.js +1 -1
  60. package/src/tests.js +5 -5
  61. package/src/x_ite/Base/X3DInfoArray.js +45 -19
  62. package/src/x_ite/Base/X3DObject.js +29 -20
  63. package/src/x_ite/Base/X3DObjectArrayField.js +71 -26
  64. package/src/x_ite/Base/X3DTypedArrayField.js +108 -32
  65. package/src/x_ite/Browser/DOMIntegration.js +4 -3
  66. package/src/x_ite/Browser/VERSION.js +1 -1
  67. package/src/x_ite/Browser/X3DBrowser.js +43 -28
  68. package/src/x_ite/Components/Core/X3DNode.js +682 -210
  69. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +484 -100
  70. package/src/x_ite/Components/Grouping/X3DTransformMatrix3DNode.js +18 -43
  71. package/src/x_ite/Components/HAnim/HAnimHumanoid.js +27 -26
  72. package/src/x_ite/Components/HAnim/HAnimJoint.js +19 -31
  73. package/src/x_ite/Components/Rendering/X3DGeometryNode.js +6 -3
  74. package/src/x_ite/Components/Sound/X3DSoundProcessingNode.js +14 -1
  75. package/src/x_ite/Components/Sound/X3DSoundSourceNode.js +0 -1
  76. package/src/x_ite/Components/{ProjectiveTextureMapping → TextureProjector}/TextureProjector.js +1 -1
  77. package/src/x_ite/Components/{ProjectiveTextureMapping → TextureProjector}/TextureProjectorParallel.js +1 -1
  78. package/src/x_ite/Components/{ProjectiveTextureMapping → TextureProjector}/X3DTextureProjectorNode.js +0 -0
  79. package/src/x_ite/Components/Time/TimeSensor.js +5 -0
  80. package/src/x_ite/Components/Time/X3DTimeDependentNode.js +1 -0
  81. package/src/x_ite/Configuration/ComponentInfo.js +51 -22
  82. package/src/x_ite/Configuration/ProfileInfo.js +10 -6
  83. package/src/x_ite/Configuration/SupportedComponents.js +22 -20
  84. package/src/x_ite/Configuration/SupportedProfiles.js +1 -1
  85. package/src/x_ite/Configuration/UnitInfo.js +69 -26
  86. package/src/x_ite/Execution/X3DExecutionContext.js +78 -55
  87. package/src/x_ite/Execution/X3DExportedNode.js +75 -28
  88. package/src/x_ite/Execution/X3DImportedNode.js +227 -67
  89. package/src/x_ite/Execution/X3DScene.js +437 -117
  90. package/src/x_ite/Fields/ArrayFields.js +105 -55
  91. package/src/x_ite/Fields/SFBool.js +14 -6
  92. package/src/x_ite/Fields/SFColor.js +35 -12
  93. package/src/x_ite/Fields/SFColorRGBA.js +2 -0
  94. package/src/x_ite/Fields/SFDouble.js +17 -10
  95. package/src/x_ite/Fields/SFFloat.js +17 -10
  96. package/src/x_ite/Fields/SFImage.js +93 -8
  97. package/src/x_ite/Fields/SFInt32.js +14 -6
  98. package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +38 -13
  99. package/src/x_ite/Fields/SFNode.js +59 -21
  100. package/src/x_ite/Fields/SFRotation.js +38 -13
  101. package/src/x_ite/Fields/SFString.js +14 -7
  102. package/src/x_ite/Fields/SFTime.js +14 -6
  103. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +39 -13
  104. package/src/x_ite/InputOutput/FileLoader.js +1 -1
  105. package/src/x_ite/InputOutput/Generator.js +178 -17
  106. package/src/x_ite/Parser/JSONParser.js +1 -1
  107. package/src/x_ite/Parser/VRMLParser.js +24 -27
  108. package/src/x_ite/Parser/X3DParser.js +0 -4
  109. package/src/x_ite/Parser/XMLParser.js +2 -2
  110. package/src/x_ite/Prototype/X3DExternProtoDeclaration.js +182 -64
  111. package/src/x_ite/Prototype/X3DProtoDeclaration.js +314 -93
  112. package/src/x_ite/Rendering/X3DRenderObject.js +6 -1
  113. package/src/x_ite/Routing/X3DRoute.js +104 -40
  114. package/src/x_ite.html +1 -1
  115. package/x_ite.min.html +1 -1
  116. package/dist/assets/components/ProjectiveTextureMapping.min.js +0 -1
  117. package/docs/Gemfile.lock +0 -116
@@ -55,7 +55,6 @@ import X3DExportedNode from "./X3DExportedNode.js";
55
55
  import ExportedNodesArray from "./ExportedNodesArray.js";
56
56
  import X3DCast from "../Base/X3DCast.js";
57
57
  import X3DConstants from "../Base/X3DConstants.js";
58
- import Generator from "../InputOutput/Generator.js";
59
58
  import SFNodeCache from "../Fields/SFNodeCache.js";
60
59
 
61
60
  SupportedNodes .addAbstractType ("X3DScene", X3DScene);
@@ -78,6 +77,12 @@ function X3DScene (executionContext)
78
77
 
79
78
  this .addType (X3DConstants .X3DScene)
80
79
 
80
+ this .addChildObjects ("profile_changed", new Fields .SFTime (),
81
+ "components_changed", new Fields .SFTime (),
82
+ "units_changed", new Fields .SFTime (),
83
+ "metadata_changed", new Fields .SFTime (),
84
+ "exportedNodes_changed", new Fields .SFTime ())
85
+
81
86
  this [_specificationVersion] = LATEST_VERSION;
82
87
  this [_encoding] = "SCRIPTED";
83
88
  this [_profile] = null;
@@ -93,12 +98,6 @@ function X3DScene (executionContext)
93
98
  this [_metadata] = new Map ();
94
99
  this [_exportedNodes] = new ExportedNodesArray ();
95
100
 
96
- this .addChildObjects ("profile_changed", new Fields .SFTime (),
97
- "components_changed", new Fields .SFTime (),
98
- "units_changed", new Fields .SFTime (),
99
- "metadata_changed", new Fields .SFTime (),
100
- "exportedNodes_changed", new Fields .SFTime ())
101
-
102
101
  this .getRootNodes () .setAccessType (X3DConstants .inputOutput);
103
102
 
104
103
  this .setLive (false);
@@ -363,39 +362,37 @@ X3DScene .prototype = Object .assign (Object .create (X3DExecutionContext .proto
363
362
 
364
363
  this .getRootNodes () .assign (value);
365
364
  },
366
- toVRMLStream: function (stream)
365
+ toVRMLStream: function (generator)
367
366
  {
368
- const generator = Generator .Get (stream);
369
-
370
- stream .string += "#X3D V";
371
- stream .string += LATEST_VERSION;
372
- stream .string += " ";
373
- stream .string += "utf8";
374
- stream .string += " ";
375
- stream .string += this .getBrowser () .name;
376
- stream .string += " ";
377
- stream .string += "V";
378
- stream .string += this .getBrowser () .version;
379
- stream .string += "\n";
380
- stream .string += "\n";
367
+ generator .string += "#X3D V";
368
+ generator .string += LATEST_VERSION;
369
+ generator .string += generator .Space ();
370
+ generator .string += "utf8";
371
+ generator .string += generator .Space ();
372
+ generator .string += this .getBrowser () .name;
373
+ generator .string += generator .Space ();
374
+ generator .string += "V";
375
+ generator .string += this .getBrowser () .version;
376
+ generator .string += generator .ForceBreak ();
377
+ generator .string += generator .ForceBreak ();
381
378
 
382
379
  const profile = this .getProfile ();
383
380
 
384
381
  if (profile)
385
382
  {
386
- profile .toVRMLStream (stream);
383
+ profile .toVRMLStream (generator);
387
384
 
388
- stream .string += "\n";
389
- stream .string += "\n";
385
+ generator .string += generator .Break ();
386
+ generator .string += generator .TidyBreak ();
390
387
  }
391
388
 
392
389
  const components = this .getComponents ();
393
390
 
394
391
  if (components .length)
395
392
  {
396
- components .toVRMLStream (stream);
393
+ components .toVRMLStream (generator);
397
394
 
398
- stream .string += "\n";
395
+ generator .string += generator .TidyBreak ();
399
396
  }
400
397
 
401
398
  // Units
@@ -408,14 +405,14 @@ X3DScene .prototype = Object .assign (Object .create (X3DExecutionContext .proto
408
405
  {
409
406
  empty = false;
410
407
 
411
- unit .toVRMLStream (stream);
408
+ unit .toVRMLStream (generator);
412
409
 
413
- stream .string += "\n";
410
+ generator .string += generator .Break ();
414
411
  }
415
412
  }
416
413
 
417
414
  if (!empty)
418
- stream .string += "\n";
415
+ generator .string += generator .TidyBreak ();
419
416
  }
420
417
 
421
418
  const metadata = this .getMetaDatas ();
@@ -424,15 +421,15 @@ X3DScene .prototype = Object .assign (Object .create (X3DExecutionContext .proto
424
421
  {
425
422
  metadata .forEach (function (value, key)
426
423
  {
427
- stream .string += "META";
428
- stream .string += " ";
429
- stream .string += new Fields .SFString (key) .toString ();
430
- stream .string += " ";
431
- stream .string += new Fields .SFString (value) .toString ();
432
- stream .string += "\n";
424
+ generator .string += "META";
425
+ generator .string += generator .Space ();
426
+ generator .string += new Fields .SFString (key) .toString ();
427
+ generator .string += generator .Space ();
428
+ generator .string += new Fields .SFString (value) .toString ();
429
+ generator .string += generator .Break ();
433
430
  });
434
431
 
435
- stream .string += "\n";
432
+ generator .string += generator .TidyBreak ();
436
433
  }
437
434
 
438
435
  const exportedNodes = this .getExportedNodes ();
@@ -441,56 +438,45 @@ X3DScene .prototype = Object .assign (Object .create (X3DExecutionContext .proto
441
438
  generator .EnterScope ();
442
439
  generator .ExportedNodes (exportedNodes);
443
440
 
444
- X3DExecutionContext .prototype .toVRMLStream .call (this, stream);
441
+ X3DExecutionContext .prototype .toVRMLStream .call (this, generator);
445
442
 
446
- if (exportedNodes .size)
443
+ if (exportedNodes .length)
447
444
  {
448
- stream .string += "\n";
445
+ generator .string += generator .TidyBreak ();
449
446
 
450
- exportedNodes .forEach (function (exportedNode)
451
- {
452
- try
453
- {
454
- exportedNode .toVRMLStream (stream);
455
-
456
- stream .string += "\n";
457
- }
458
- catch (error)
459
- {
460
- console .error (error);
461
- }
462
- });
447
+ exportedNodes .toVRMLStream (generator);
463
448
  }
464
449
 
465
450
  generator .LeaveScope ();
466
451
  generator .PopExecutionContext ();
467
452
  },
468
- toXMLStream: function (stream)
469
- {
470
- const generator = Generator .Get (stream);
471
-
472
- stream .string += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
473
- stream .string += "<!DOCTYPE X3D PUBLIC \"ISO//Web3D//DTD X3D ";
474
- stream .string += LATEST_VERSION;
475
- stream .string += "//EN\" \"http://www.web3d.org/specifications/x3d-";
476
- stream .string += LATEST_VERSION;
477
- stream .string += ".dtd\">\n";
478
-
479
- stream .string += "<X3D";
480
- stream .string += " ";
481
- stream .string += "profile='";
482
- stream .string += this .getProfile () ? this .getProfile () .name : "Full";
483
- stream .string += "'";
484
- stream .string += " ";
485
- stream .string += "version='";
486
- stream .string += LATEST_VERSION;
487
- stream .string += "'";
488
- stream .string += " ";
489
- stream .string += "xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance'";
490
- stream .string += " ";
491
- stream .string += "xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-";
492
- stream .string += LATEST_VERSION;
493
- stream .string += ".xsd'>\n";
453
+ toXMLStream: function (generator)
454
+ {
455
+ generator .string += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
456
+ generator .string += generator .TidyBreak ();
457
+ generator .string += "<!DOCTYPE X3D PUBLIC \"ISO//Web3D//DTD X3D ";
458
+ generator .string += LATEST_VERSION;
459
+ generator .string += "//EN\" \"http://www.web3d.org/specifications/x3d-";
460
+ generator .string += LATEST_VERSION;
461
+ generator .string += ".dtd\">";
462
+ generator .string += generator .TidyBreak ();
463
+
464
+ generator .string += "<X3D";
465
+ generator .string += generator .Space ();
466
+ generator .string += "profile='";
467
+ generator .string += this .getProfile () ? this .getProfile () .name : "Full";
468
+ generator .string += "'";
469
+ generator .string += generator .Space ();
470
+ generator .string += "version='";
471
+ generator .string += LATEST_VERSION;
472
+ generator .string += "'";
473
+ generator .string += generator .Space ();
474
+ generator .string += "xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance'";
475
+ generator .string += generator .Space ();
476
+ generator .string += "xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-";
477
+ generator .string += LATEST_VERSION;
478
+ generator .string += ".xsd'>";
479
+ generator .string += generator .TidyBreak ();
494
480
 
495
481
  generator .IncIndent ();
496
482
 
@@ -498,54 +484,58 @@ X3DScene .prototype = Object .assign (Object .create (X3DExecutionContext .proto
498
484
  this .getUnits () .some (unit => unit .conversionFactor !== 1) ||
499
485
  this .getMetaDatas () .size)
500
486
  {
501
- stream .string += generator .Indent ();
502
- stream .string += "<head>\n";
487
+ generator .string += generator .Indent ();
488
+ generator .string += "<head>";
489
+ generator .string += generator .TidyBreak ();
503
490
 
504
491
  generator .IncIndent ();
505
492
 
506
493
  // <head>
507
494
 
508
- this .getComponents () .toXMLStream (stream);
495
+ this .getComponents () .toXMLStream (generator);
509
496
 
510
497
  for (const unit of this .getUnits ())
511
498
  {
512
499
  if (unit .conversionFactor !== 1)
513
500
  {
514
- unit .toXMLStream (stream);
501
+ unit .toXMLStream (generator);
515
502
 
516
- stream .string += "\n";
503
+ generator .string += generator .TidyBreak ();
517
504
  }
518
505
  }
519
506
 
520
507
  this .getMetaDatas () .forEach (function (value, key)
521
508
  {
522
- stream .string += generator .Indent ();
523
- stream .string += "<meta";
524
- stream .string += " ";
525
- stream .string += "name='";
526
- stream .string += generator .XMLEncode (key);
527
- stream .string += "'";
528
- stream .string += " ";
529
- stream .string += "content='";
530
- stream .string += generator .XMLEncode (value);
531
- stream .string += "'";
532
- stream .string += "/>\n";
509
+ generator .string += generator .Indent ();
510
+ generator .string += "<meta";
511
+ generator .string += generator .Space ();
512
+ generator .string += "name='";
513
+ generator .string += generator .XMLEncode (key);
514
+ generator .string += "'";
515
+ generator .string += generator .Space ();
516
+ generator .string += "content='";
517
+ generator .string += generator .XMLEncode (value);
518
+ generator .string += "'";
519
+ generator .string += "/>";
520
+ generator .string += generator .TidyBreak ();
533
521
  });
534
522
 
535
523
  // </head>
536
524
 
537
525
  generator .DecIndent ();
538
526
 
539
- stream .string += generator .Indent ();
540
- stream .string += "</head>\n";
527
+ generator .string += generator .Indent ();
528
+ generator .string += "</head>";
529
+ generator .string += generator .TidyBreak ();
541
530
  }
542
531
 
543
532
  if (this .getExternProtoDeclarations () .length ||
544
533
  this .getProtoDeclarations () .length ||
545
534
  this .getRootNodes () .length)
546
535
  {
547
- stream .string += generator .Indent ();
548
- stream .string += "<Scene>\n";
536
+ generator .string += generator .Indent ();
537
+ generator .string += "<Scene>";
538
+ generator .string += generator .TidyBreak ();
549
539
 
550
540
  generator .IncIndent ();
551
541
 
@@ -557,21 +547,9 @@ X3DScene .prototype = Object .assign (Object .create (X3DExecutionContext .proto
557
547
  generator .EnterScope ();
558
548
  generator .ExportedNodes (exportedNodes);
559
549
 
560
- X3DExecutionContext .prototype .toXMLStream .call (this, stream);
550
+ X3DExecutionContext .prototype .toXMLStream .call (this, generator);
561
551
 
562
- for (const exportedNode of exportedNodes)
563
- {
564
- try
565
- {
566
- exportedNode .toXMLStream (stream);
567
-
568
- stream .string += "\n";
569
- }
570
- catch (error)
571
- {
572
- console .error (error);
573
- }
574
- }
552
+ exportedNodes .toXMLStream (generator);
575
553
 
576
554
  generator .LeaveScope ();
577
555
  generator .PopExecutionContext ();
@@ -580,18 +558,360 @@ X3DScene .prototype = Object .assign (Object .create (X3DExecutionContext .proto
580
558
 
581
559
  generator .DecIndent ();
582
560
 
583
- stream .string += generator .Indent ();
584
- stream .string += "</Scene>\n";
561
+ generator .string += generator .Indent ();
562
+ generator .string += "</Scene>";
563
+ generator .string += generator .TidyBreak ();
585
564
  }
586
565
  else
587
566
  {
588
- stream .string += generator .Indent ();
589
- stream .string += "<Scene/>\n";
567
+ generator .string += generator .Indent ();
568
+ generator .string += "<Scene/>";
569
+ generator .string += generator .TidyBreak ();
590
570
  }
591
571
 
592
572
  generator .DecIndent ();
593
573
 
594
- stream .string += "</X3D>\n";
574
+ generator .string += "</X3D>";
575
+ generator .string += generator .TidyBreak ();
576
+ },
577
+ toJSONStream: function (generator)
578
+ {
579
+ // X3D
580
+
581
+ generator .string += '{';
582
+ generator .string += generator .TidySpace ();
583
+ generator .string += '"';
584
+ generator .string += "X3D";
585
+ generator .string += '"';
586
+ generator .string += ':';
587
+ generator .string += generator .TidySpace ();
588
+ generator .string += '{';
589
+ generator .string += generator .TidyBreak ();
590
+ generator .string += generator .IncIndent ();
591
+ generator .string += generator .IncIndent ();
592
+
593
+
594
+ // Encoding
595
+
596
+ generator .string += generator .Indent ();
597
+ generator .string += '"';
598
+ generator .string += "encoding";
599
+ generator .string += '"';
600
+ generator .string += ':';
601
+ generator .string += generator .TidySpace ();
602
+ generator .string += '"';
603
+ generator .string += "UTF-8";
604
+ generator .string += '"';
605
+ generator .string += ',';
606
+ generator .string += generator .TidyBreak ();
607
+
608
+
609
+ // Profile
610
+
611
+ generator .string += generator .Indent ();
612
+ generator .string += '"';
613
+ generator .string += "@profile";
614
+ generator .string += '"';
615
+ generator .string += ':';
616
+ generator .string += generator .TidySpace ();
617
+ generator .string += '"';
618
+ generator .string += this .getProfile () ? this .getProfile () .name : "Full";
619
+ generator .string += '"';
620
+ generator .string += ',';
621
+ generator .string += generator .TidyBreak ();
622
+
623
+
624
+ // Version
625
+
626
+ generator .string += generator .Indent ();
627
+ generator .string += '"';
628
+ generator .string += "@version";
629
+ generator .string += '"';
630
+ generator .string += ':';
631
+ generator .string += generator .TidySpace ();
632
+ generator .string += '"';
633
+ generator .string += this .getSpecificationVersion ();
634
+ generator .string += '"';
635
+ generator .string += ',';
636
+ generator .string += generator .TidyBreak ();
637
+
638
+
639
+ // XSD noNamespaceSchemaLocation
640
+
641
+ generator .string += generator .Indent ();
642
+ generator .string += '"';
643
+ generator .string += "@xsd:noNamespaceSchemaLocation";
644
+ generator .string += '"';
645
+ generator .string += ':';
646
+ generator .string += generator .TidySpace ();
647
+ generator .string += '"';
648
+ generator .string += "http://www.web3d.org/specifications/x3d-";
649
+ generator .string += LATEST_VERSION;
650
+ generator .string += ".xsd";
651
+ generator .string += '"';
652
+ generator .string += ',';
653
+ generator .string += generator .TidyBreak ();
654
+
655
+
656
+ // JSON schema
657
+
658
+ generator .string += generator .Indent ();
659
+ generator .string += '"';
660
+ generator .string += "JSON schema";
661
+ generator .string += '"';
662
+ generator .string += ':';
663
+ generator .string += generator .TidySpace ();
664
+ generator .string += '"';
665
+ generator .string += "http://www.web3d.org/specifications/x3d-";
666
+ generator .string += LATEST_VERSION;
667
+ generator .string += "-JSONSchema.json";
668
+ generator .string += '"';
669
+ generator .string += ',';
670
+ generator .string += generator .TidyBreak ();
671
+
672
+
673
+ // Head
674
+
675
+ const outputUnits = this .getUnits () .some (unit => unit .conversionFactor !== 1);
676
+
677
+ if (this .getComponents () .length || outputUnits || this .getMetaDatas () .size)
678
+ {
679
+ let headLastProperty = false;
680
+
681
+ generator .string += generator .Indent ();
682
+ generator .string += '"';
683
+ generator .string += "head";
684
+ generator .string += '"';
685
+ generator .string += ':';
686
+ generator .string += generator .TidySpace ();
687
+ generator .string += '{';
688
+ generator .string += generator .TidyBreak ();
689
+ generator .string += generator .IncIndent ();
690
+
691
+
692
+ // Meta data
693
+
694
+ if (this .getMetaDatas () .size)
695
+ {
696
+ if (headLastProperty)
697
+ {
698
+ generator .string += ',';
699
+ generator .string += generator .TidyBreak ();
700
+ }
701
+
702
+
703
+ // Meta data begin
704
+
705
+ generator .string += generator .Indent ();
706
+ generator .string += '"';
707
+ generator .string += "meta";
708
+ generator .string += '"';
709
+ generator .string += ':';
710
+ generator .string += generator .TidySpace ();
711
+ generator .string += '[';
712
+ generator .string += generator .TidyBreak ();
713
+ generator .string += generator .IncIndent ();
714
+
715
+
716
+ // Meta data
717
+
718
+ let i = 0;
719
+
720
+ for (const [key, value] of this .getMetaDatas ())
721
+ {
722
+ generator .string += generator .Indent ();
723
+ generator .string += '{';
724
+ generator .string += generator .TidyBreak ();
725
+ generator .string += generator .IncIndent ();
726
+
727
+ generator .string += generator .Indent ();
728
+ generator .string += '"';
729
+ generator .string += "@name";
730
+ generator .string += '"';
731
+ generator .string += ':';
732
+ generator .string += generator .TidySpace ();
733
+ generator .string += generator .JSONEncode (key);
734
+ generator .string += ',';
735
+ generator .string += generator .TidyBreak ();
736
+
737
+ generator .string += generator .Indent ();
738
+ generator .string += '"';
739
+ generator .string += "@content";
740
+ generator .string += '"';
741
+ generator .string += ':';
742
+ generator .string += generator .TidySpace ();
743
+ generator .string += generator .JSONEncode (value);
744
+ generator .string += generator .TidyBreak ();
745
+
746
+ generator .string += generator .DecIndent ();
747
+ generator .string += generator .Indent ();
748
+ generator .string += '}';
749
+
750
+ if (++ i !== this .getMetaDatas () .size)
751
+ generator .string += ',';
752
+
753
+ generator .string += generator .TidyBreak ();
754
+ }
755
+
756
+
757
+ // Meta data end
758
+
759
+ generator .string += generator .DecIndent ();
760
+ generator .string += generator .Indent ();
761
+ generator .string += ']';
762
+
763
+ headLastProperty = true;
764
+ }
765
+
766
+
767
+ // Components
768
+
769
+ if (this .getComponents () .length)
770
+ {
771
+ if (headLastProperty)
772
+ {
773
+ generator .string += ',';
774
+ generator .string += generator .TidyBreak ();
775
+ }
776
+
777
+
778
+ // Components begin
779
+
780
+ generator .string += generator .Indent ();
781
+ generator .string += '"';
782
+ generator .string += "component";
783
+ generator .string += '"';
784
+ generator .string += ':';
785
+ generator .string += generator .TidySpace ();
786
+ generator .string += '[';
787
+ generator .string += generator .TidyBreak ();
788
+ generator .string += generator .IncIndent ();
789
+
790
+
791
+ // Components
792
+
793
+ this .getComponents () .toJSONStream (generator);
794
+
795
+
796
+ // Components end
797
+
798
+ generator .string += generator .DecIndent ();
799
+ generator .string += generator .Indent ();
800
+ generator .string += ']';
801
+
802
+ headLastProperty = true;
803
+ }
804
+
805
+
806
+ // Units
807
+
808
+ if (outputUnits)
809
+ {
810
+ if (headLastProperty)
811
+ {
812
+ generator .string += ',';
813
+ generator .string += generator .TidyBreak ();
814
+ }
815
+
816
+
817
+ // Units begin
818
+
819
+ generator .string += generator .Indent ();
820
+ generator .string += '"';
821
+ generator .string += "unit";
822
+ generator .string += '"';
823
+ generator .string += ':';
824
+ generator .string += generator .TidySpace ();
825
+ generator .string += '[';
826
+ generator .string += generator .TidyBreak ();
827
+ generator .string += generator .IncIndent ();
828
+
829
+
830
+ // Units
831
+
832
+ this .getUnits () .toJSONStream (generator);
833
+
834
+
835
+ // Unit end
836
+
837
+ generator .string += generator .DecIndent ();
838
+ generator .string += generator .Indent ();
839
+ generator .string += ']';
840
+
841
+ headLastProperty = true;
842
+ }
843
+
844
+
845
+ // Head end
846
+
847
+ generator .string += generator .TidyBreak ();
848
+ generator .string += generator .DecIndent ();
849
+ generator .string += generator .Indent ();
850
+ generator .string += '}';
851
+ generator .string += ',';
852
+ generator .string += generator .TidyBreak ();
853
+ }
854
+
855
+ // Scene
856
+
857
+ generator .string += generator .Indent ();
858
+ generator .string += '"';
859
+ generator .string += "Scene";
860
+ generator .string += '"';
861
+ generator .string += ':';
862
+ generator .string += generator .TidySpace ();
863
+ generator .string += '{';
864
+ generator .string += generator .TidyBreak ();
865
+ generator .string += generator .IncIndent ();
866
+ generator .string += generator .Indent ();
867
+ generator .string += '"';
868
+ generator .string += "-children";
869
+ generator .string += '"';
870
+ generator .string += ':';
871
+ generator .string += generator .TidySpace ();
872
+ generator .string += '[';
873
+ generator .string += generator .TidyBreak ();
874
+ generator .string += generator .IncIndent ();
875
+
876
+ const exportedNodes = this .getExportedNodes ();
877
+
878
+ generator .PushExecutionContext (this);
879
+ generator .EnterScope ();
880
+ generator .ExportedNodes (exportedNodes);
881
+
882
+ X3DExecutionContext .prototype .toJSONStream .call (this, generator);
883
+
884
+ // Exported nodes
885
+
886
+ this .getExportedNodes () .toJSONStream (generator, true);
887
+
888
+ generator .string = generator .string .replace (/,(\s*)$/s, "$1");
889
+
890
+ generator .LeaveScope ();
891
+ generator .PopExecutionContext ();
892
+
893
+ // Scene end
894
+
895
+ generator .string += generator .DecIndent ();
896
+ generator .string += generator .Indent ();
897
+ generator .string += ']';
898
+ generator .string += generator .TidyBreak ();
899
+ generator .string += generator .DecIndent ();
900
+ generator .string += generator .Indent ();
901
+ generator .string += '}';
902
+
903
+
904
+ // X3D end
905
+
906
+ generator .string += generator .TidyBreak ();
907
+ generator .string += generator .DecIndent ();
908
+ generator .string += generator .Indent ();
909
+ generator .string += '}';
910
+ generator .string += generator .TidyBreak ();
911
+ generator .string += generator .DecIndent ();
912
+ generator .string += generator .Indent ();
913
+ generator .string += '}';
914
+ generator .string += generator .TidyBreak ();
595
915
  },
596
916
  });
597
917