x_ite 8.4.3 → 8.5.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 (568) hide show
  1. package/.vscode/settings.json +5 -1
  2. package/Makefile +0 -3
  3. package/build/bin/components.js +173 -0
  4. package/build/bin/tags.pl +28 -0
  5. package/build/bin/tests.pl +80 -2
  6. package/build/bin/version.pl +12 -7
  7. package/dist/assets/components/Annotation.js +13 -13
  8. package/dist/assets/components/Annotation.min.js +1 -1
  9. package/dist/assets/components/CADGeometry.js +13 -13
  10. package/dist/assets/components/CADGeometry.min.js +1 -1
  11. package/dist/assets/components/CubeMapTexturing.js +28 -29
  12. package/dist/assets/components/CubeMapTexturing.min.js +1 -1
  13. package/dist/assets/components/DIS.js +13 -13
  14. package/dist/assets/components/DIS.min.js +1 -1
  15. package/dist/assets/components/EventUtilities.js +9 -9
  16. package/dist/assets/components/EventUtilities.min.js +1 -1
  17. package/dist/assets/components/Geometry2D.js +19 -19
  18. package/dist/assets/components/Geometry2D.min.js +1 -1
  19. package/dist/assets/components/Geospatial.js +33 -33
  20. package/dist/assets/components/Geospatial.min.js +1 -1
  21. package/dist/assets/components/HAnim.js +63 -42
  22. package/dist/assets/components/HAnim.min.js +1 -1
  23. package/dist/assets/components/KeyDeviceSensor.js +8 -8
  24. package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
  25. package/dist/assets/components/Layout.js +37 -29
  26. package/dist/assets/components/Layout.min.js +1 -1
  27. package/dist/assets/components/NURBS.js +29 -31
  28. package/dist/assets/components/NURBS.min.js +1 -1
  29. package/dist/assets/components/ParticleSystems.js +23 -23
  30. package/dist/assets/components/ParticleSystems.min.js +1 -1
  31. package/dist/assets/components/Picking.js +19 -19
  32. package/dist/assets/components/Picking.min.js +1 -1
  33. package/dist/assets/components/RigidBodyPhysics.js +24 -19
  34. package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
  35. package/dist/assets/components/Scripting.js +30 -30
  36. package/dist/assets/components/Scripting.min.js +1 -1
  37. package/dist/assets/components/Text.js +172 -594
  38. package/dist/assets/components/Text.min.js +1 -1
  39. package/dist/assets/components/TextureProjector.js +31 -47
  40. package/dist/assets/components/TextureProjector.min.js +1 -1
  41. package/dist/assets/components/Texturing3D.js +367 -346
  42. package/dist/assets/components/Texturing3D.min.js +1 -1
  43. package/dist/assets/components/VolumeRendering.js +19 -19
  44. package/dist/assets/components/VolumeRendering.min.js +1 -1
  45. package/dist/assets/components/X_ITE.js +9 -9
  46. package/dist/assets/components/X_ITE.min.js +1 -1
  47. package/dist/x_ite.css +1 -1
  48. package/dist/x_ite.js +12174 -3553
  49. package/dist/x_ite.min.js +1 -1
  50. package/dist/x_ite.zip +0 -0
  51. package/docs/_config.yml +5 -136
  52. package/docs/_data/nav/components-CADGeometry.yml +14 -0
  53. package/docs/_data/nav/components-Core.yml +16 -0
  54. package/docs/_data/nav/components-CubeMapTexturing.yml +8 -0
  55. package/docs/_data/nav/components-DIS.yml +14 -0
  56. package/docs/_data/nav/components-EnvironmentalEffects.yml +12 -0
  57. package/docs/_data/nav/components-EnvironmentalSensor.yml +8 -0
  58. package/docs/_data/nav/components-EventUtilities.yml +16 -0
  59. package/docs/_data/nav/components-Followers.yml +30 -0
  60. package/docs/_data/nav/components-Geometry2D.yml +18 -0
  61. package/docs/_data/nav/components-Geometry3D.yml +16 -0
  62. package/docs/_data/nav/components-Geospatial.yml +24 -0
  63. package/docs/_data/nav/components-Grouping.yml +10 -0
  64. package/docs/_data/nav/components-HAnim.yml +14 -0
  65. package/docs/_data/nav/components-Interpolation.yml +28 -0
  66. package/docs/_data/nav/components-KeyDeviceSensor.yml +6 -0
  67. package/docs/_data/nav/components-Layering.yml +8 -0
  68. package/docs/_data/nav/components-Layout.yml +12 -0
  69. package/docs/_data/nav/components-Lighting.yml +10 -0
  70. package/docs/_data/nav/components-NURBS.yml +30 -0
  71. package/docs/_data/nav/components-Navigation.yml +16 -0
  72. package/docs/_data/nav/components-Networking.yml +8 -0
  73. package/docs/_data/nav/components-ParticleSystems.yml +22 -0
  74. package/docs/_data/nav/components-Picking.yml +12 -0
  75. package/docs/_data/nav/components-PointingDeviceSensor.yml +10 -0
  76. package/docs/_data/nav/components-Rendering.yml +30 -0
  77. package/docs/_data/nav/components-RigidBodyPhysics.yml +30 -0
  78. package/docs/_data/nav/components-Scripting.yml +4 -0
  79. package/docs/_data/nav/components-Shaders.yml +18 -0
  80. package/docs/_data/nav/components-Shape.yml +22 -0
  81. package/docs/_data/nav/components-Sound.yml +44 -0
  82. package/docs/_data/nav/components-Text.yml +6 -0
  83. package/docs/_data/nav/components-TextureProjector.yml +6 -0
  84. package/docs/_data/nav/components-Texturing.yml +22 -0
  85. package/docs/_data/nav/components-Texturing3D.yml +18 -0
  86. package/docs/_data/nav/components-Time.yml +4 -0
  87. package/docs/_data/nav/components-VolumeRendering.yml +28 -0
  88. package/docs/_data/nav/components-X_ITE.yml +4 -0
  89. package/docs/_data/nav/main.yml +26 -0
  90. package/docs/_data/nav/reference.yml +18 -0
  91. package/docs/_data/nav/tutorials-animation-sensors-and-geometry.yml +18 -0
  92. package/docs/_data/nav/tutorials-basic.yml +6 -0
  93. package/docs/_data/nav/tutorials-optimize-your-scene.yml +6 -0
  94. package/docs/_data/nav/tutorials-scripts-and-prototypes.yml +12 -0
  95. package/docs/_data/nav/tutorials-shapes-geometry-and-appearance.yml +16 -0
  96. package/docs/_data/nav/tutorials-textures-lights-and-environment.yml +20 -0
  97. package/docs/_includes/nav.html +2 -2
  98. package/docs/_includes/scripts.html +2 -1
  99. package/docs/_posts/accessing-the-external-browser.md +1 -1
  100. package/docs/_posts/browser-support.md +1 -1
  101. package/docs/_posts/components/CADGeometry/CADAssembly.md +83 -0
  102. package/docs/_posts/components/CADGeometry/CADFace.md +70 -0
  103. package/docs/_posts/components/CADGeometry/CADLayer.md +84 -0
  104. package/docs/_posts/components/CADGeometry/CADPart.md +117 -0
  105. package/docs/_posts/components/CADGeometry/IndexedQuadSet.md +125 -0
  106. package/docs/_posts/components/CADGeometry/QuadSet.md +113 -0
  107. package/docs/_posts/components/Core/MetadataBoolean.md +90 -0
  108. package/docs/_posts/components/Core/MetadataDouble.md +67 -0
  109. package/docs/_posts/components/Core/MetadataFloat.md +67 -0
  110. package/docs/_posts/components/Core/MetadataInteger.md +66 -0
  111. package/docs/_posts/components/Core/MetadataSet.md +63 -0
  112. package/docs/_posts/components/Core/MetadataString.md +66 -0
  113. package/docs/_posts/components/Core/WorldInfo.md +54 -0
  114. package/docs/_posts/components/CubeMapTexturing/ComposedCubeMapTexture.md +76 -0
  115. package/docs/_posts/components/CubeMapTexturing/GeneratedCubeMapTexture.md +65 -0
  116. package/docs/_posts/components/CubeMapTexturing/ImageCubeMapTexture.md +66 -0
  117. package/docs/_posts/components/DIS/DISEntityManager.md +73 -0
  118. package/docs/_posts/components/DIS/DISEntityTypeMapping.md +88 -0
  119. package/docs/_posts/components/DIS/EspduTransform.md +416 -0
  120. package/docs/_posts/components/DIS/ReceiverPdu.md +168 -0
  121. package/docs/_posts/components/DIS/SignalPdu.md +168 -0
  122. package/docs/_posts/components/DIS/TransmitterPdu.md +232 -0
  123. package/docs/_posts/components/EnvironmentalEffects/Background.md +189 -0
  124. package/docs/_posts/components/EnvironmentalEffects/Fog.md +97 -0
  125. package/docs/_posts/components/EnvironmentalEffects/FogCoordinate.md +40 -0
  126. package/docs/_posts/components/EnvironmentalEffects/LocalFog.md +84 -0
  127. package/docs/_posts/components/EnvironmentalEffects/TextureBackground.md +142 -0
  128. package/docs/_posts/components/EnvironmentalSensor/ProximitySensor.md +90 -0
  129. package/docs/_posts/components/EnvironmentalSensor/TransformSensor.md +91 -0
  130. package/docs/_posts/components/EnvironmentalSensor/VisibilitySensor.md +73 -0
  131. package/docs/_posts/components/EventUtilities/BooleanFilter.md +62 -0
  132. package/docs/_posts/components/EventUtilities/BooleanSequencer.md +86 -0
  133. package/docs/_posts/components/EventUtilities/BooleanToggle.md +46 -0
  134. package/docs/_posts/components/EventUtilities/BooleanTrigger.md +47 -0
  135. package/docs/_posts/components/EventUtilities/IntegerSequencer.md +90 -0
  136. package/docs/_posts/components/EventUtilities/IntegerTrigger.md +51 -0
  137. package/docs/_posts/components/EventUtilities/TimeTrigger.md +47 -0
  138. package/docs/_posts/components/Followers/ColorChaser.md +77 -0
  139. package/docs/_posts/components/Followers/ColorDamper.md +85 -0
  140. package/docs/_posts/components/Followers/CoordinateChaser.md +76 -0
  141. package/docs/_posts/components/Followers/CoordinateDamper.md +80 -0
  142. package/docs/_posts/components/Followers/OrientationChaser.md +72 -0
  143. package/docs/_posts/components/Followers/OrientationDamper.md +80 -0
  144. package/docs/_posts/components/Followers/PositionChaser.md +72 -0
  145. package/docs/_posts/components/Followers/PositionChaser2D.md +72 -0
  146. package/docs/_posts/components/Followers/PositionDamper.md +80 -0
  147. package/docs/_posts/components/Followers/PositionDamper2D.md +80 -0
  148. package/docs/_posts/components/Followers/ScalarChaser.md +76 -0
  149. package/docs/_posts/components/Followers/ScalarDamper.md +80 -0
  150. package/docs/_posts/components/Followers/TexCoordChaser2D.md +72 -0
  151. package/docs/_posts/components/Followers/TexCoordDamper2D.md +80 -0
  152. package/docs/_posts/components/Geometry2D/Arc2D.md +71 -0
  153. package/docs/_posts/components/Geometry2D/ArcClose2D.md +91 -0
  154. package/docs/_posts/components/Geometry2D/Circle2D.md +55 -0
  155. package/docs/_posts/components/Geometry2D/Disk2D.md +75 -0
  156. package/docs/_posts/components/Geometry2D/Polyline2D.md +54 -0
  157. package/docs/_posts/components/Geometry2D/Polypoint2D.md +54 -0
  158. package/docs/_posts/components/Geometry2D/Rectangle2D.md +66 -0
  159. package/docs/_posts/components/Geometry2D/TriangleSet2D.md +66 -0
  160. package/docs/_posts/components/Geometry3D/Box.md +66 -0
  161. package/docs/_posts/components/Geometry3D/Cone.md +90 -0
  162. package/docs/_posts/components/Geometry3D/Cylinder.md +98 -0
  163. package/docs/_posts/components/Geometry3D/ElevationGrid.md +162 -0
  164. package/docs/_posts/components/Geometry3D/Extrusion.md +170 -0
  165. package/docs/_posts/components/Geometry3D/IndexedFaceSet.md +208 -0
  166. package/docs/_posts/components/Geometry3D/Sphere.md +66 -0
  167. package/docs/_posts/components/Geospatial/GeoCoordinate.md +65 -0
  168. package/docs/_posts/components/Geospatial/GeoElevationGrid.md +180 -0
  169. package/docs/_posts/components/Geospatial/GeoLOD.md +128 -0
  170. package/docs/_posts/components/Geospatial/GeoLocation.md +93 -0
  171. package/docs/_posts/components/Geospatial/GeoMetadata.md +75 -0
  172. package/docs/_posts/components/Geospatial/GeoOrigin.md +69 -0
  173. package/docs/_posts/components/Geospatial/GeoPositionInterpolator.md +95 -0
  174. package/docs/_posts/components/Geospatial/GeoProximitySensor.md +109 -0
  175. package/docs/_posts/components/Geospatial/GeoTouchSensor.md +108 -0
  176. package/docs/_posts/components/Geospatial/GeoTransform.md +121 -0
  177. package/docs/_posts/components/Geospatial/GeoViewpoint.md +126 -0
  178. package/docs/_posts/components/Grouping/Group.md +75 -0
  179. package/docs/_posts/components/Grouping/StaticGroup.md +65 -0
  180. package/docs/_posts/components/Grouping/Switch.md +89 -0
  181. package/docs/_posts/components/Grouping/Transform.md +126 -0
  182. package/docs/_posts/components/HAnim/HAnimDisplacer.md +89 -0
  183. package/docs/_posts/components/HAnim/HAnimHumanoid.md +136 -0
  184. package/docs/_posts/components/HAnim/HAnimJoint.md +165 -0
  185. package/docs/_posts/components/HAnim/HAnimMotion.md +68 -0
  186. package/docs/_posts/components/HAnim/HAnimSegment.md +107 -0
  187. package/docs/_posts/components/HAnim/HAnimSite.md +108 -0
  188. package/docs/_posts/components/Interpolation/ColorInterpolator.md +73 -0
  189. package/docs/_posts/components/Interpolation/CoordinateInterpolator.md +76 -0
  190. package/docs/_posts/components/Interpolation/CoordinateInterpolator2D.md +73 -0
  191. package/docs/_posts/components/Interpolation/EaseInEaseOut.md +67 -0
  192. package/docs/_posts/components/Interpolation/NormalInterpolator.md +68 -0
  193. package/docs/_posts/components/Interpolation/OrientationInterpolator.md +72 -0
  194. package/docs/_posts/components/Interpolation/PositionInterpolator.md +72 -0
  195. package/docs/_posts/components/Interpolation/PositionInterpolator2D.md +77 -0
  196. package/docs/_posts/components/Interpolation/ScalarInterpolator.md +76 -0
  197. package/docs/_posts/components/Interpolation/SplinePositionInterpolator.md +93 -0
  198. package/docs/_posts/components/Interpolation/SplinePositionInterpolator2D.md +93 -0
  199. package/docs/_posts/components/Interpolation/SplineScalarInterpolator.md +106 -0
  200. package/docs/_posts/components/Interpolation/SquadOrientationInterpolator.md +78 -0
  201. package/docs/_posts/components/KeyDeviceSensor/KeySensor.md +78 -0
  202. package/docs/_posts/components/KeyDeviceSensor/StringSensor.md +70 -0
  203. package/docs/_posts/components/Layering/Layer.md +67 -0
  204. package/docs/_posts/components/Layering/LayerSet.md +78 -0
  205. package/docs/_posts/components/Layering/Viewport.md +80 -0
  206. package/docs/_posts/components/Layout/Layout.md +107 -0
  207. package/docs/_posts/components/Layout/LayoutGroup.md +85 -0
  208. package/docs/_posts/components/Layout/LayoutLayer.md +74 -0
  209. package/docs/_posts/components/Layout/ScreenFontStyle.md +137 -0
  210. package/docs/_posts/components/Layout/ScreenGroup.md +71 -0
  211. package/docs/_posts/components/Lighting/DirectionalLight.md +100 -0
  212. package/docs/_posts/components/Lighting/EnvironmentLight.md +91 -0
  213. package/docs/_posts/components/Lighting/PointLight.md +103 -0
  214. package/docs/_posts/components/Lighting/SpotLight.md +132 -0
  215. package/docs/_posts/components/NURBS/Contour2D.md +57 -0
  216. package/docs/_posts/components/NURBS/ContourPolyline2D.md +46 -0
  217. package/docs/_posts/components/NURBS/CoordinateDouble.md +47 -0
  218. package/docs/_posts/components/NURBS/NurbsCurve.md +71 -0
  219. package/docs/_posts/components/NURBS/NurbsCurve2D.md +66 -0
  220. package/docs/_posts/components/NURBS/NurbsOrientationInterpolator.md +70 -0
  221. package/docs/_posts/components/NURBS/NurbsPatchSurface.md +106 -0
  222. package/docs/_posts/components/NURBS/NurbsPositionInterpolator.md +70 -0
  223. package/docs/_posts/components/NURBS/NurbsSet.md +66 -0
  224. package/docs/_posts/components/NURBS/NurbsSurfaceInterpolator.md +90 -0
  225. package/docs/_posts/components/NURBS/NurbsSweptSurface.md +69 -0
  226. package/docs/_posts/components/NURBS/NurbsSwungSurface.md +65 -0
  227. package/docs/_posts/components/NURBS/NurbsTextureCoordinate.md +77 -0
  228. package/docs/_posts/components/NURBS/NurbsTrimmedSurface.md +114 -0
  229. package/docs/_posts/components/Navigation/Billboard.md +88 -0
  230. package/docs/_posts/components/Navigation/Collision.md +102 -0
  231. package/docs/_posts/components/Navigation/LOD.md +99 -0
  232. package/docs/_posts/components/Navigation/NavigationInfo.md +122 -0
  233. package/docs/_posts/components/Navigation/OrthoViewpoint.md +117 -0
  234. package/docs/_posts/components/Navigation/Viewpoint.md +117 -0
  235. package/docs/_posts/components/Navigation/ViewpointGroup.md +80 -0
  236. package/docs/_posts/components/Networking/Anchor.md +111 -0
  237. package/docs/_posts/components/Networking/Inline.md +115 -0
  238. package/docs/_posts/components/Networking/LoadSensor.md +91 -0
  239. package/docs/_posts/components/ParticleSystems/BoundedPhysicsModel.md +54 -0
  240. package/docs/_posts/components/ParticleSystems/ConeEmitter.md +76 -0
  241. package/docs/_posts/components/ParticleSystems/ExplosionEmitter.md +72 -0
  242. package/docs/_posts/components/ParticleSystems/ForcePhysicsModel.md +58 -0
  243. package/docs/_posts/components/ParticleSystems/ParticleSystem.md +177 -0
  244. package/docs/_posts/components/ParticleSystems/PointEmitter.md +76 -0
  245. package/docs/_posts/components/ParticleSystems/PolylineEmitter.md +94 -0
  246. package/docs/_posts/components/ParticleSystems/SurfaceEmitter.md +90 -0
  247. package/docs/_posts/components/ParticleSystems/VolumeEmitter.md +90 -0
  248. package/docs/_posts/components/ParticleSystems/WindPhysicsModel.md +68 -0
  249. package/docs/_posts/components/Picking/LinePickSensor.md +125 -0
  250. package/docs/_posts/components/Picking/PickableGroup.md +93 -0
  251. package/docs/_posts/components/Picking/PointPickSensor.md +112 -0
  252. package/docs/_posts/components/Picking/PrimitivePickSensor.md +114 -0
  253. package/docs/_posts/components/Picking/VolumePickSensor.md +107 -0
  254. package/docs/_posts/components/PointingDeviceSensor/CylinderSensor.md +122 -0
  255. package/docs/_posts/components/PointingDeviceSensor/PlaneSensor.md +114 -0
  256. package/docs/_posts/components/PointingDeviceSensor/SphereSensor.md +89 -0
  257. package/docs/_posts/components/PointingDeviceSensor/TouchSensor.md +87 -0
  258. package/docs/_posts/components/Rendering/ClipPlane.md +67 -0
  259. package/docs/_posts/components/Rendering/Color.md +56 -0
  260. package/docs/_posts/components/Rendering/ColorRGBA.md +61 -0
  261. package/docs/_posts/components/Rendering/Coordinate.md +45 -0
  262. package/docs/_posts/components/Rendering/IndexedLineSet.md +128 -0
  263. package/docs/_posts/components/Rendering/IndexedTriangleFanSet.md +128 -0
  264. package/docs/_posts/components/Rendering/IndexedTriangleSet.md +128 -0
  265. package/docs/_posts/components/Rendering/IndexedTriangleStripSet.md +116 -0
  266. package/docs/_posts/components/Rendering/LineSet.md +85 -0
  267. package/docs/_posts/components/Rendering/Normal.md +41 -0
  268. package/docs/_posts/components/Rendering/PointSet.md +76 -0
  269. package/docs/_posts/components/Rendering/TriangleFanSet.md +112 -0
  270. package/docs/_posts/components/Rendering/TriangleSet.md +108 -0
  271. package/docs/_posts/components/Rendering/TriangleStripSet.md +116 -0
  272. package/docs/_posts/components/RigidBodyPhysics/BallJoint.md +78 -0
  273. package/docs/_posts/components/RigidBodyPhysics/CollidableOffset.md +75 -0
  274. package/docs/_posts/components/RigidBodyPhysics/CollidableShape.md +83 -0
  275. package/docs/_posts/components/RigidBodyPhysics/CollisionCollection.md +90 -0
  276. package/docs/_posts/components/RigidBodyPhysics/CollisionSensor.md +65 -0
  277. package/docs/_posts/components/RigidBodyPhysics/CollisionSpace.md +70 -0
  278. package/docs/_posts/components/RigidBodyPhysics/Contact.md +117 -0
  279. package/docs/_posts/components/RigidBodyPhysics/DoubleAxisHingeJoint.md +162 -0
  280. package/docs/_posts/components/RigidBodyPhysics/MotorJoint.md +183 -0
  281. package/docs/_posts/components/RigidBodyPhysics/RigidBody.md +175 -0
  282. package/docs/_posts/components/RigidBodyPhysics/RigidBodyCollection.md +120 -0
  283. package/docs/_posts/components/RigidBodyPhysics/SingleAxisHingeJoint.md +108 -0
  284. package/docs/_posts/components/RigidBodyPhysics/SliderJoint.md +106 -0
  285. package/docs/_posts/components/RigidBodyPhysics/UniversalJoint.md +119 -0
  286. package/docs/_posts/components/Scripting/Script.md +81 -0
  287. package/docs/_posts/components/Shaders/ComposedShader.md +81 -0
  288. package/docs/_posts/components/Shaders/FloatVertexAttribute.md +65 -0
  289. package/docs/_posts/components/Shaders/Matrix3VertexAttribute.md +53 -0
  290. package/docs/_posts/components/Shaders/Matrix4VertexAttribute.md +53 -0
  291. package/docs/_posts/components/Shaders/PackagedShader.md +77 -0
  292. package/docs/_posts/components/Shaders/ProgramShader.md +71 -0
  293. package/docs/_posts/components/Shaders/ShaderPart.md +76 -0
  294. package/docs/_posts/components/Shaders/ShaderProgram.md +68 -0
  295. package/docs/_posts/components/Shape/AcousticProperties.md +52 -0
  296. package/docs/_posts/components/Shape/Appearance.md +123 -0
  297. package/docs/_posts/components/Shape/FillProperties.md +67 -0
  298. package/docs/_posts/components/Shape/LineProperties.md +63 -0
  299. package/docs/_posts/components/Shape/Material.md +217 -0
  300. package/docs/_posts/components/Shape/PhysicalMaterial.md +173 -0
  301. package/docs/_posts/components/Shape/PointProperties.md +84 -0
  302. package/docs/_posts/components/Shape/Shape.md +63 -0
  303. package/docs/_posts/components/Shape/TwoSidedMaterial.md +149 -0
  304. package/docs/_posts/components/Shape/UnlitMaterial.md +115 -0
  305. package/docs/_posts/components/Sound/Analyser.md +72 -0
  306. package/docs/_posts/components/Sound/AudioClip.md +139 -0
  307. package/docs/_posts/components/Sound/AudioDestination.md +52 -0
  308. package/docs/_posts/components/Sound/BiquadFilter.md +70 -0
  309. package/docs/_posts/components/Sound/BufferAudioSource.md +86 -0
  310. package/docs/_posts/components/Sound/ChannelMerger.md +46 -0
  311. package/docs/_posts/components/Sound/ChannelSelector.md +48 -0
  312. package/docs/_posts/components/Sound/ChannelSplitter.md +48 -0
  313. package/docs/_posts/components/Sound/Convolver.md +66 -0
  314. package/docs/_posts/components/Sound/Delay.md +66 -0
  315. package/docs/_posts/components/Sound/DynamicsCompressor.md +74 -0
  316. package/docs/_posts/components/Sound/Gain.md +62 -0
  317. package/docs/_posts/components/Sound/ListenerPointSource.md +62 -0
  318. package/docs/_posts/components/Sound/MicrophoneSource.md +54 -0
  319. package/docs/_posts/components/Sound/OscillatorSource.md +58 -0
  320. package/docs/_posts/components/Sound/PeriodicWave.md +42 -0
  321. package/docs/_posts/components/Sound/Sound.md +92 -0
  322. package/docs/_posts/components/Sound/SpatialSound.md +68 -0
  323. package/docs/_posts/components/Sound/StreamAudioDestination.md +52 -0
  324. package/docs/_posts/components/Sound/StreamAudioSource.md +54 -0
  325. package/docs/_posts/components/Sound/WaveShaper.md +66 -0
  326. package/docs/_posts/components/Text/FontStyle.md +145 -0
  327. package/docs/_posts/components/Text/Text.md +102 -0
  328. package/docs/_posts/components/TextureProjector/TextureProjector.md +52 -0
  329. package/docs/_posts/components/TextureProjector/TextureProjectorParallel.md +52 -0
  330. package/docs/_posts/components/Texturing/ImageTexture.md +134 -0
  331. package/docs/_posts/components/Texturing/MovieTexture.md +221 -0
  332. package/docs/_posts/components/Texturing/MultiTexture.md +100 -0
  333. package/docs/_posts/components/Texturing/MultiTextureCoordinate.md +47 -0
  334. package/docs/_posts/components/Texturing/MultiTextureTransform.md +47 -0
  335. package/docs/_posts/components/Texturing/PixelTexture.md +80 -0
  336. package/docs/_posts/components/Texturing/TextureCoordinate.md +52 -0
  337. package/docs/_posts/components/Texturing/TextureCoordinateGenerator.md +64 -0
  338. package/docs/_posts/components/Texturing/TextureProperties.md +137 -0
  339. package/docs/_posts/components/Texturing/TextureTransform.md +73 -0
  340. package/docs/_posts/components/Texturing3D/ComposedTexture3D.md +76 -0
  341. package/docs/_posts/components/Texturing3D/ImageTexture3D.md +132 -0
  342. package/docs/_posts/components/Texturing3D/ImageTextureAtlas.md +131 -0
  343. package/docs/_posts/components/Texturing3D/PixelTexture3D.md +75 -0
  344. package/docs/_posts/components/Texturing3D/TextureCoordinate3D.md +53 -0
  345. package/docs/_posts/components/Texturing3D/TextureCoordinate4D.md +52 -0
  346. package/docs/_posts/components/Texturing3D/TextureTransform3D.md +69 -0
  347. package/docs/_posts/components/Texturing3D/TextureTransformMatrix3D.md +57 -0
  348. package/docs/_posts/components/Time/TimeSensor.md +136 -0
  349. package/docs/_posts/components/VolumeRendering/BlendedVolumeStyle.md +92 -0
  350. package/docs/_posts/components/VolumeRendering/BoundaryEnhancementVolumeStyle.md +53 -0
  351. package/docs/_posts/components/VolumeRendering/CartoonVolumeStyle.md +83 -0
  352. package/docs/_posts/components/VolumeRendering/ComposedVolumeStyle.md +51 -0
  353. package/docs/_posts/components/VolumeRendering/EdgeEnhancementVolumeStyle.md +67 -0
  354. package/docs/_posts/components/VolumeRendering/IsoSurfaceVolumeData.md +99 -0
  355. package/docs/_posts/components/VolumeRendering/OpacityMapVolumeStyle.md +51 -0
  356. package/docs/_posts/components/VolumeRendering/ProjectionVolumeStyle.md +48 -0
  357. package/docs/_posts/components/VolumeRendering/SegmentedVolumeData.md +80 -0
  358. package/docs/_posts/components/VolumeRendering/ShadedVolumeStyle.md +75 -0
  359. package/docs/_posts/components/VolumeRendering/SilhouetteEnhancementVolumeStyle.md +63 -0
  360. package/docs/_posts/components/VolumeRendering/ToneMappedVolumeStyle.md +71 -0
  361. package/docs/_posts/components/VolumeRendering/VolumeData.md +71 -0
  362. package/docs/_posts/components/X_ITE/BlendMode.md +94 -0
  363. package/docs/_posts/custom-shaders.md +9 -4
  364. package/docs/_posts/dom-integration.md +1 -6
  365. package/docs/_posts/features.md +2 -2
  366. package/docs/_posts/getting-started.md +100 -57
  367. package/docs/_posts/glossary.md +1 -1
  368. package/docs/_posts/how-to-configure-your-web-server.md +1 -1
  369. package/docs/_posts/reference/browser-services.md +78 -18
  370. package/docs/_posts/reference/constants-services.md +1 -1
  371. package/docs/_posts/reference/ecmascript-object-and-function-definitions.md +1 -1
  372. package/docs/_posts/reference/field-services-and-objects.md +8 -8
  373. package/docs/_posts/reference/prototype-services.md +7 -7
  374. package/docs/_posts/reference/route-services.md +1 -1
  375. package/docs/_posts/reference/scene-services.md +5 -5
  376. package/docs/_posts/reference/script-node-authoring-interface.md +1 -1
  377. package/docs/_posts/report-a-bug.md +1 -1
  378. package/docs/_posts/setup-a-localhost-server.md +5 -1
  379. package/docs/_posts/supported-nodes.md +239 -238
  380. package/docs/_posts/tutorials/adding-backgrounds.md +3 -3
  381. package/docs/_posts/tutorials/adding-fog.md +2 -2
  382. package/docs/_posts/tutorials/adding-sound.md +19 -19
  383. package/docs/_posts/tutorials/animating-transforms.md +17 -17
  384. package/docs/_posts/tutorials/basic-nodes.md +30 -30
  385. package/docs/_posts/tutorials/building-a-x3d-world.md +3 -3
  386. package/docs/_posts/tutorials/building-elevation-grids.md +7 -7
  387. package/docs/_posts/tutorials/building-extruded-shapes.md +7 -7
  388. package/docs/_posts/tutorials/building-primitive-shapes.md +13 -13
  389. package/docs/_posts/tutorials/building-shapes-out-of-points-lines-and-faces.md +21 -21
  390. package/docs/_posts/tutorials/controlling-appearance-with-materials.md +7 -7
  391. package/docs/_posts/tutorials/controlling-color-on-coordinate-based-geometry.md +11 -11
  392. package/docs/_posts/tutorials/controlling-detail.md +4 -4
  393. package/docs/_posts/tutorials/controlling-how-textures-are-mapped.md +7 -7
  394. package/docs/_posts/tutorials/controlling-navigation.md +3 -3
  395. package/docs/_posts/tutorials/controlling-shading-on-coordinate-based-geometry.md +13 -13
  396. package/docs/_posts/tutorials/controlling-the-viewpoint.md +3 -3
  397. package/docs/_posts/tutorials/creating-new-node-types.md +4 -4
  398. package/docs/_posts/tutorials/grouping-nodes.md +13 -13
  399. package/docs/_posts/tutorials/hello-world.md +1 -1
  400. package/docs/_posts/tutorials/improving-performance.md +1 -1
  401. package/docs/_posts/tutorials/increasing-rendering-speed.md +1 -1
  402. package/docs/_posts/tutorials/introducing-animation.md +10 -10
  403. package/docs/_posts/tutorials/introducing-script-use.md +3 -3
  404. package/docs/_posts/tutorials/introducing-x3d.md +1 -1
  405. package/docs/_posts/tutorials/lighting-your-world.md +4 -4
  406. package/docs/_posts/tutorials/mapping-textures.md +7 -7
  407. package/docs/_posts/tutorials/naming-nodes.md +1 -1
  408. package/docs/_posts/tutorials/overview.md +1 -1
  409. package/docs/_posts/tutorials/providing-information-about-your-world.md +2 -2
  410. package/docs/_posts/tutorials/sensing-the-viewer.md +15 -15
  411. package/docs/_posts/tutorials/sensing-viewer-actions.md +10 -10
  412. package/docs/_posts/tutorials/transforming-shapes.md +4 -4
  413. package/docs/_posts/tutorials/writing-program-scripts-with-ecmascript.md +5 -5
  414. package/docs/_posts/what's-new.md +40 -2
  415. package/docs/_tabs/components.md +383 -0
  416. package/docs/_tabs/imprint.md +1 -1
  417. package/docs/_tabs/laboratory.md +38 -6
  418. package/docs/_tabs/playground.html +22 -66
  419. package/docs/_tabs/reference.md +2 -1
  420. package/docs/_tabs/tags.md +1 -1
  421. package/docs/_tabs/tutorials.md +1 -1
  422. package/docs/assets/X3D/Michroma-Regular.ttf +0 -0
  423. package/docs/assets/X3D/peakpx.jpg +0 -0
  424. package/docs/assets/X3D/teaser.x3d +55 -0
  425. package/docs/assets/css/style.scss +120 -11
  426. package/docs/assets/img/laboratory/blend-mode.png +0 -0
  427. package/docs/assets/img/laboratory/dicom-nrrd.png +0 -0
  428. package/docs/assets/img/laboratory/earthquake.png +0 -0
  429. package/docs/assets/img/laboratory/gltf.png +0 -0
  430. package/docs/assets/img/laboratory/l-system.png +0 -0
  431. package/docs/assets/js/autoupdate.js +25 -0
  432. package/docs/laboratory/gltf-sample-viewer.html +318 -0
  433. package/docs/laboratory/x3d-visual-blend-mode-editor.html +1 -0
  434. package/package.json +9 -2
  435. package/src/assets/components/Texturing3D.js +5 -3
  436. package/src/assets/shaders/Types.glsl.js +5 -5
  437. package/src/assets/shaders/webgl1/PBR.fs.js +1 -1
  438. package/src/assets/shaders/webgl1/include/Colors.glsl.js +5 -7
  439. package/src/assets/shaders/webgl1/include/Fragment.glsl.js +4 -0
  440. package/src/assets/shaders/webgl1/include/Hatch.glsl.js +1 -1
  441. package/src/assets/shaders/webgl1/include/Texture.glsl.js +3 -3
  442. package/src/assets/shaders/webgl2/include/Colors.glsl.js +5 -7
  443. package/src/assets/shaders/webgl2/include/Hatch.glsl.js +1 -1
  444. package/src/assets/shaders/webgl2/include/Particle.glsl.js +2 -2
  445. package/src/assets/shaders/webgl2/include/Texture.glsl.js +2 -2
  446. package/src/bookmarks.js +12 -8
  447. package/src/examples.js +3 -0
  448. package/src/lib/jquery.js +20 -0
  449. package/src/lib/libgif/libgif.js +1004 -0
  450. package/src/lib/libtess.js +1 -0
  451. package/src/lib/nurbs/extras/sample.js +5 -7
  452. package/src/standard/Math/Algorithms/Bezier.js +175 -33
  453. package/src/standard/Math/Geometry/Box2.js +15 -55
  454. package/src/standard/Math/Geometry/Box3.js +19 -66
  455. package/src/standard/Math/Geometry/Triangle3.js +14 -79
  456. package/src/standard/Math/Numbers/Color3.js +4 -0
  457. package/src/standard/Math/Numbers/Color4.js +4 -0
  458. package/src/standard/Math/Numbers/Matrix3.js +11 -3
  459. package/src/standard/Math/Numbers/Matrix4.js +9 -6
  460. package/src/standard/Math/Numbers/Rotation4.js +72 -65
  461. package/src/tests.js +3 -0
  462. package/src/x_ite/Base/X3DArrayField.js +0 -2
  463. package/src/x_ite/Base/X3DInfoArray.js +2 -2
  464. package/src/x_ite/Base/X3DObjectArrayField.js +19 -0
  465. package/src/x_ite/Base/X3DTypedArrayField.js +149 -0
  466. package/src/x_ite/Browser/Core/BrowserOptions.js +108 -64
  467. package/src/x_ite/Browser/Core/Context.js +1 -1
  468. package/src/x_ite/Browser/Core/ContextMenu.js +2 -2
  469. package/src/x_ite/Browser/Core/Notification.js +1 -1
  470. package/src/x_ite/Browser/Core/RenderingProperties.js +4 -0
  471. package/src/x_ite/Browser/Core/X3DCoreContext.js +99 -54
  472. package/src/x_ite/Browser/Navigation/ExamineViewer.js +4 -14
  473. package/src/x_ite/Browser/Navigation/LookAtViewer.js +3 -13
  474. package/src/x_ite/Browser/Navigation/PlaneViewer.js +3 -12
  475. package/src/x_ite/Browser/Navigation/X3DFlyViewer.js +25 -22
  476. package/src/x_ite/Browser/Navigation/X3DViewer.js +12 -3
  477. package/src/x_ite/Browser/Networking/X3DNetworkingContext.js +2 -2
  478. package/src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js +19 -15
  479. package/src/x_ite/Browser/Rendering/X3DRenderingContext.js +30 -10
  480. package/src/x_ite/Browser/Shaders/X3DShadersContext.js +1 -1
  481. package/src/x_ite/Browser/Shape/X3DShapeContext.js +30 -3
  482. package/src/x_ite/Browser/Text/PolygonText.js +137 -134
  483. package/src/x_ite/Browser/Texturing/GifMedia.js +113 -0
  484. package/src/x_ite/Browser/Texturing3D/DICOMParser.js +1 -6
  485. package/src/x_ite/Browser/Texturing3D/NRRDParser.js +81 -310
  486. package/src/x_ite/Browser/VERSION.js +1 -1
  487. package/src/x_ite/Browser/X3DBrowser.js +162 -122
  488. package/src/x_ite/Browser/X3DBrowserContext.js +7 -5
  489. package/src/x_ite/Components/Core/WorldInfo.js +3 -3
  490. package/src/x_ite/Components/Core/X3DNode.js +7 -7
  491. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +1 -1
  492. package/src/x_ite/Components/CubeMapTexturing/ImageCubeMapTexture.js +2 -3
  493. package/src/x_ite/Components/Geometry3D/Extrusion.js +27 -23
  494. package/src/x_ite/Components/Geometry3D/IndexedFaceSet.js +10 -19
  495. package/src/x_ite/Components/Grouping/X3DBoundedObject.js +1 -3
  496. package/src/x_ite/Components/HAnim/HAnimHumanoid.js +39 -15
  497. package/src/x_ite/Components/HAnim/HAnimJoint.js +6 -9
  498. package/src/x_ite/Components/Layering/X3DLayerNode.js +21 -2
  499. package/src/x_ite/Components/Layout/Layout.js +4 -2
  500. package/src/x_ite/Components/Layout/ScreenFontStyle.js +6 -0
  501. package/src/x_ite/Components/Lighting/DirectionalLight.js +4 -11
  502. package/src/x_ite/Components/Lighting/EnvironmentLight.js +1 -1
  503. package/src/x_ite/Components/Lighting/PointLight.js +4 -11
  504. package/src/x_ite/Components/Lighting/SpotLight.js +4 -11
  505. package/src/x_ite/Components/Lighting/X3DLightNode.js +7 -9
  506. package/src/x_ite/Components/Navigation/OrthoViewpoint.js +2 -2
  507. package/src/x_ite/Components/Navigation/X3DViewpointNode.js +14 -6
  508. package/src/x_ite/Components/Networking/Inline.js +48 -59
  509. package/src/x_ite/Components/Networking/X3DUrlObject.js +1 -1
  510. package/src/x_ite/Components/PointingDeviceSensor/CylinderSensor.js +2 -2
  511. package/src/x_ite/Components/Rendering/X3DLineGeometryNode.js +7 -13
  512. package/src/x_ite/Components/Rendering/X3DPointGeometryNode.js +4 -2
  513. package/src/x_ite/Components/RigidBodyPhysics/RigidBody.js +4 -2
  514. package/src/x_ite/Components/Scripting/Script.js +2 -2
  515. package/src/x_ite/Components/Shaders/ShaderPart.js +1 -1
  516. package/src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js +1 -3
  517. package/src/x_ite/Components/Shape/Appearance.js +27 -1
  518. package/src/x_ite/Components/Shape/FillProperties.js +1 -0
  519. package/src/x_ite/Components/Shape/LineProperties.js +15 -9
  520. package/src/x_ite/Components/Shape/Material.js +33 -22
  521. package/src/x_ite/Components/Shape/PhysicalMaterial.js +22 -15
  522. package/src/x_ite/Components/Shape/PointProperties.js +23 -7
  523. package/src/x_ite/Components/Shape/UnlitMaterial.js +3 -2
  524. package/src/x_ite/Components/Shape/X3DOneSidedMaterialNode.js +25 -19
  525. package/src/x_ite/Components/Sound/AudioClip.js +5 -5
  526. package/src/x_ite/Components/Sound/X3DSoundSourceNode.js +26 -34
  527. package/src/x_ite/Components/Text/X3DFontStyleNode.js +1 -1
  528. package/src/x_ite/Components/TextureProjector/TextureProjector.js +4 -12
  529. package/src/x_ite/Components/TextureProjector/TextureProjectorParallel.js +6 -14
  530. package/src/x_ite/Components/TextureProjector/X3DTextureProjectorNode.js +7 -7
  531. package/src/x_ite/Components/Texturing/ImageTexture.js +15 -10
  532. package/src/x_ite/Components/Texturing/MovieTexture.js +51 -11
  533. package/src/x_ite/Components/Texturing3D/ImageTexture3D.js +2 -2
  534. package/src/x_ite/Components/Texturing3D/ImageTextureAtlas.js +230 -0
  535. package/src/x_ite/Components/Time/X3DTimeDependentNode.js +12 -10
  536. package/src/x_ite/Execution/BindableList.js +35 -37
  537. package/src/x_ite/Execution/BindableStack.js +25 -7
  538. package/src/x_ite/Execution/X3DScene.js +2 -2
  539. package/src/x_ite/Execution/X3DWorld.js +1 -1
  540. package/src/x_ite/Fields/SFRotation.js +2 -1
  541. package/src/x_ite/Fields/SFString.js +1 -1
  542. package/src/x_ite/InputOutput/FileLoader.js +105 -236
  543. package/src/x_ite/InputOutput/Generator.js +12 -8
  544. package/src/x_ite/Parser/Expressions.js +85 -0
  545. package/src/x_ite/Parser/GLB2Parser.js +147 -0
  546. package/src/x_ite/Parser/GLTF2Parser.js +2221 -0
  547. package/src/x_ite/Parser/GoldenGate.js +64 -13
  548. package/src/x_ite/Parser/JSONParser.js +7 -36
  549. package/src/x_ite/Parser/OBJParser.js +1076 -0
  550. package/src/x_ite/Parser/STLAParser.js +376 -0
  551. package/src/x_ite/Parser/STLBParser.js +156 -0
  552. package/src/x_ite/Parser/SVGParser.js +2476 -0
  553. package/src/x_ite/Parser/VRMLParser.js +127 -183
  554. package/src/x_ite/Parser/X3DOptimizer.js +191 -0
  555. package/src/x_ite/Parser/X3DParser.js +34 -0
  556. package/src/x_ite/Parser/XMLParser.js +11 -109
  557. package/src/x_ite/Prototype/X3DExternProtoDeclaration.js +2 -2
  558. package/src/x_ite/Prototype/X3DProtoDeclaration.js +3 -3
  559. package/src/x_ite/Rendering/DependentRenderer.js +1 -1
  560. package/src/x_ite/Rendering/MultiSampleFrameBuffer.js +150 -0
  561. package/src/x_ite/Rendering/TextureBuffer.js +3 -5
  562. package/src/x_ite/Rendering/X3DRenderObject.js +2 -7
  563. package/src/x_ite/X3D.js +1 -0
  564. package/src/x_ite/X3DCanvas.js +10 -0
  565. package/src/x_ite.html +39 -17
  566. package/webpack.config.js +1 -0
  567. package/x_ite.min.html +38 -17
  568. package/src/standard/Networking/BinaryTransport.js +0 -116
@@ -48,7 +48,6 @@
48
48
  import VERSION from "./VERSION.js";
49
49
  import Fields from "../Fields.js";
50
50
  import Components from "../Components.js";
51
- import X3DLayerNode from "../Components/Layering/X3DLayerNode.js";
52
51
  import X3DBrowserContext from "./X3DBrowserContext.js";
53
52
  import DOMIntegration from "./DOMIntegration.js";
54
53
  import legacy from "./Legacy.js";
@@ -72,7 +71,8 @@ import _ from "../../locale/gettext.js";
72
71
 
73
72
  const
74
73
  _DOMIntegration = Symbol (),
75
- _loader = Symbol (),
74
+ _reject = Symbol (),
75
+ _fileLoader = Symbol (),
76
76
  _browserCallbacks = Symbol (),
77
77
  _console = Symbol ();
78
78
 
@@ -87,6 +87,7 @@ function X3DBrowser (element)
87
87
 
88
88
  X3DBrowserContext .call (this, element);
89
89
 
90
+ this [_reject] = Function .prototype;
90
91
  this [_browserCallbacks] = new Map ();
91
92
  this [_console] = document .getElementsByClassName ("x_ite-console");
92
93
 
@@ -110,14 +111,16 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
110
111
  },
111
112
  initialize: function ()
112
113
  {
113
- X3DBrowserContext .prototype .initialize .call (this);
114
+ const processEvent = X3DBrowserContext .prototype .initialize .call (this);
114
115
 
115
- this .replaceWorld (this .createScene ());
116
+ this .replaceWorld (this .createScene ()) .catch (Function .prototype);
116
117
 
117
118
  this [_DOMIntegration] = new DOMIntegration (this);
118
119
 
119
120
  legacy .call (this);
120
121
 
122
+ processEvent .call (this);
123
+
121
124
  // Print welcome message.
122
125
 
123
126
  if (this .getInstanceId () > 1) return;
@@ -131,6 +134,7 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
131
134
  " Shading language: " + this .getShadingLanguageVersion () + "\n" +
132
135
  " Rendering Properties\n" +
133
136
  " Antialiased: " + this .getAntialiased () + "\n" +
137
+ " Max samples: " + this .getMaxSamples () + "\n" +
134
138
  " Depth size: " + this .getDepthSize () + " bits\n" +
135
139
  " Color depth: " + this .getColorDepth () + " bits\n" +
136
140
  " Max clip planes per shape: " + this .getMaxClipPlanes () + "\n" +
@@ -220,7 +224,7 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
220
224
 
221
225
  await loadComponents (browser, $.data (component, "dependencies"), seen);
222
226
 
223
- if (! $.data (component, "external"))
227
+ if (!$.data (component, "external"))
224
228
  return;
225
229
 
226
230
  if (Features .NODE_ENV)
@@ -257,7 +261,7 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
257
261
 
258
262
  if (arguments .length)
259
263
  {
260
- if (! (profile instanceof ProfileInfo))
264
+ if (!(profile instanceof ProfileInfo))
261
265
  throw new Error ("Couldn't create scene: profile must be of type ProfileInfo.");
262
266
 
263
267
  scene .setProfile (profile);
@@ -266,7 +270,7 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
266
270
  {
267
271
  const component = arguments [i];
268
272
 
269
- if (! (component instanceof ComponentInfo))
273
+ if (!(component instanceof ComponentInfo))
270
274
  throw new Error ("Couldn't create scene: component must be of type ComponentInfo.");
271
275
 
272
276
  scene .addComponent (component);
@@ -279,69 +283,77 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
279
283
  },
280
284
  replaceWorld: function (scene)
281
285
  {
282
- if (this [_loader])
283
- this [_loader] .abort ();
286
+ return new Promise ((resolve, reject) =>
287
+ {
288
+ this [_reject] ("Replacing world aborted.");
284
289
 
285
- // Remove world.
290
+ if (this [_fileLoader])
291
+ this [_fileLoader] .abort ();
286
292
 
287
- if (this .initialized () .getValue ())
288
- {
289
- this .getExecutionContext () .setLive (false);
290
- this .shutdown () .processInterests ();
291
- this .callBrowserCallbacks (X3DConstants .SHUTDOWN_EVENT);
292
- this .callBrowserEventHandler ("shutdown");
293
- }
293
+ this [_reject] = reject;
294
294
 
295
- // Replace world.
295
+ // Remove world.
296
296
 
297
- if (scene instanceof Fields .MFNode)
298
- {
299
- // VRML version of replaceWorld has a MFNode value as argument.
297
+ if (this .initialized () .getValue ())
298
+ {
299
+ this .getExecutionContext () .setLive (false);
300
+ this .shutdown () .processInterests ();
301
+ this .callBrowserCallbacks (X3DConstants .SHUTDOWN_EVENT);
302
+ this .callBrowserEventHandler ("shutdown");
303
+ }
304
+
305
+ // Replace world.
300
306
 
301
- const rootNodes = scene;
307
+ if (scene instanceof Fields .MFNode)
308
+ {
309
+ // VRML version of replaceWorld has a MFNode value as argument.
302
310
 
303
- scene = this .createScene ();
311
+ const rootNodes = scene;
304
312
 
305
- for (const rootNode of rootNodes)
306
- scene .isLive () .addInterest (rootNode .getValue () .getExecutionContext () .isLive ());
313
+ scene = this .createScene ();
307
314
 
308
- scene .setRootNodes (rootNodes);
309
- }
315
+ for (const rootNode of rootNodes)
316
+ scene .isLive () .addInterest (rootNode .getValue () .getExecutionContext () .isLive ());
310
317
 
311
- if (! (scene instanceof X3DScene))
312
- scene = this .createScene ();
318
+ scene .setRootNodes (rootNodes);
319
+ }
313
320
 
314
- // Detach scene from parent.
321
+ if (!(scene instanceof X3DScene))
322
+ scene = this .createScene ();
315
323
 
316
- scene .getExecutionContext () .isLive () .removeInterest ("setLive", scene);
317
- scene .setExecutionContext (scene);
324
+ // Detach scene from parent.
318
325
 
319
- // Replace.
326
+ scene .getExecutionContext () .isLive () .removeInterest ("setLive", scene);
327
+ scene .setExecutionContext (scene);
320
328
 
321
- this .setDescription ("");
322
- this .getBrowserOptions () .configure ();
323
- this .setBrowserLoading (true);
324
- this ._loadCount .addInterest ("checkLoadCount", this);
329
+ // Replace.
330
+
331
+ this .setDescription ("");
332
+ this .getBrowserOptions () .configure ();
333
+ this .setBrowserLoading (true);
334
+ this ._loadCount .addInterest ("checkLoadCount", this, resolve);
325
335
 
326
- for (const object of scene .getLoadingObjects ())
327
- this .addLoadingObject (object);
336
+ for (const object of scene .getLoadingObjects ())
337
+ this .addLoadingObject (object);
328
338
 
329
- this .setExecutionContext (scene);
330
- this .getWorld () .bindBindables ();
339
+ this .setExecutionContext (scene);
340
+ this .getWorld () .bindBindables ();
331
341
 
332
- scene .setLive (this .isLive () .getValue ());
342
+ scene .setLive (this .isLive () .getValue ());
343
+ });
333
344
  },
334
- checkLoadCount: function (loadCount)
345
+ checkLoadCount: function (resolve, loadCount)
335
346
  {
336
347
  if (loadCount .getValue ())
337
348
  return;
338
349
 
339
350
  loadCount .removeInterest ("checkLoadCount", this);
351
+ this .setBrowserLoading (false);
340
352
  this .initialized () .set (this .getCurrentTime ());
341
353
  this .initialized () .processInterests ();
342
354
  this .callBrowserCallbacks (X3DConstants .INITIALIZED_EVENT);
343
355
  this .callBrowserEventHandler ("initialized load");
344
- this .setBrowserLoading (false);
356
+ resolve ();
345
357
  },
346
358
  createVrmlFromString: function (vrmlSyntax)
347
359
  {
@@ -357,7 +369,7 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
357
369
  fileLoader = new FileLoader (this .getWorld ()),
358
370
  scene = fileLoader .createX3DFromString (currentScene .getWorldURL (), x3dSyntax);
359
371
 
360
- if (! external)
372
+ if (!external)
361
373
  {
362
374
  currentScene .isLive () .addInterest ("setLive", scene);
363
375
  scene .setExecutionContext (currentScene);
@@ -371,15 +383,15 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
371
383
  node = X3DCast (X3DConstants .X3DNode, node, false);
372
384
  event = String (event);
373
385
 
374
- if (! (url instanceof Fields .MFString))
386
+ if (!(url instanceof Fields .MFString))
375
387
  throw new Error ("Browser.createVrmlFromURL: url must be of type MFString.");
376
388
 
377
- if (! node)
389
+ if (!node)
378
390
  throw new Error ("Browser.createVrmlFromURL: node must be of type X3DNode.");
379
391
 
380
392
  const field = node .getField (event);
381
393
 
382
- if (! field .isInput ())
394
+ if (!field .isInput ())
383
395
  throw new Error ("Browser.createVrmlFromURL: event named '" + event + "' must be a input field.");
384
396
 
385
397
  if (field .getType () !== X3DConstants .MFNode)
@@ -388,19 +400,19 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
388
400
  const
389
401
  currentScene = this .currentScene,
390
402
  external = this .isExternal (),
391
- loader = new FileLoader (this .getWorld ());
403
+ fileLoader = new FileLoader (this .getWorld ());
392
404
 
393
- this .addLoadingObject (loader);
405
+ this .addLoadingObject (fileLoader);
394
406
 
395
- loader .createX3DFromURL (url, null, (scene) =>
407
+ fileLoader .createX3DFromURL (url, null, (scene) =>
396
408
  {
397
- this .removeLoadingObject (loader);
409
+ this .removeLoadingObject (fileLoader);
398
410
 
399
411
  if (scene)
400
412
  {
401
413
  // Handle isLive for script scenes here:
402
414
 
403
- if (! external)
415
+ if (!external)
404
416
  {
405
417
  currentScene .isLive () .addInterest ("setLive", scene);
406
418
  scene .setExecutionContext (currentScene);
@@ -419,32 +431,48 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
419
431
 
420
432
  // arguments .length === 1
421
433
 
422
- if (! (url instanceof Fields .MFString))
434
+ if (!(url instanceof Fields .MFString))
423
435
  throw new Error ("Browser.createX3DFromURL: url must be of type MFString.");
424
436
 
425
- const
426
- currentScene = this .currentScene,
427
- external = this .isExternal (),
428
- fileLoader = new FileLoader (this .getWorld ()),
429
- scene = fileLoader .createX3DFromURL (url, null);
430
-
431
- if (! external)
437
+ return new Promise ((resolve, reject) =>
432
438
  {
433
- currentScene .isLive () .addInterest ("setLive", scene);
434
- scene .setExecutionContext (currentScene);
435
- scene .setLive (currentScene .getLive ());
436
- }
439
+ const
440
+ currentScene = this .currentScene,
441
+ external = this .isExternal (),
442
+ fileLoader = new FileLoader (this .getWorld ());
437
443
 
438
- return scene;
444
+ this .addLoadingObject (fileLoader);
445
+
446
+ fileLoader .createX3DFromURL (url, null, (scene) =>
447
+ {
448
+ this .removeLoadingObject (fileLoader);
449
+
450
+ if (scene)
451
+ {
452
+ if (!external)
453
+ {
454
+ currentScene .isLive () .addInterest ("setLive", scene);
455
+ scene .setExecutionContext (currentScene);
456
+ scene .setLive (currentScene .getLive ());
457
+ }
458
+
459
+ resolve (scene);
460
+ }
461
+ else
462
+ {
463
+ reject (new Error ("Couldn't load X3D file."));
464
+ }
465
+ })
466
+ });
439
467
  },
440
468
  loadURL: function (url, parameter = new Fields .MFString ())
441
469
  {
442
470
  return new Promise ((resolve, reject) =>
443
471
  {
444
- if (! (url instanceof Fields .MFString))
472
+ if (!(url instanceof Fields .MFString))
445
473
  throw new Error ("Browser.loadURL: url must be of type MFString.");
446
474
 
447
- if (! (parameter instanceof Fields .MFString))
475
+ if (!(parameter instanceof Fields .MFString))
448
476
  throw new Error ("Browser.loadURL: parameter must be of type MFString.");
449
477
 
450
478
  // Cancel any loading.
@@ -452,33 +480,31 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
452
480
  this ._loadCount .removeInterest ("checkLoadCount", this);
453
481
  this .prepareEvents () .removeInterest ("updateInitialized", this);
454
482
 
455
- if (this [_loader])
456
- this [_loader] .abort ();
483
+ if (this [_fileLoader])
484
+ this [_fileLoader] .abort ();
457
485
 
458
486
  // Start loading.
459
487
 
460
488
  this .setBrowserLoading (true);
461
489
  this .addLoadingObject (this);
462
490
 
463
- const loader = this [_loader] = new FileLoader (this .getWorld ());
491
+ const fileLoader = this [_fileLoader] = new FileLoader (this .getWorld ());
464
492
 
465
- loader .createX3DFromURL (url, parameter, (scene) =>
493
+ fileLoader .createX3DFromURL (url, parameter, (scene) =>
466
494
  {
467
- if (loader !== this [_loader])
495
+ if (fileLoader !== this [_fileLoader])
468
496
  {
469
- reject ("Loading of X3D file aborted.");
497
+ reject (new Error ("Loading of X3D file aborted."));
470
498
  return;
471
499
  }
472
500
 
473
- if (! this .getBrowserOptions () .getSplashScreen ())
501
+ if (!this .getBrowserOption ("SplashScreen"))
474
502
  this .getCanvas () .show ();
475
503
 
476
504
  if (scene)
477
505
  {
478
- this .replaceWorld (scene);
506
+ this .replaceWorld (scene) .then (resolve) .catch (reject);
479
507
  this .removeLoadingObject (this);
480
-
481
- resolve ();
482
508
  }
483
509
  else
484
510
  {
@@ -492,14 +518,14 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
492
518
  .text (_ ("Failed loading world."));
493
519
  });
494
520
 
495
- reject ("Couldn't load X3D file.");
521
+ reject (new Error ("Couldn't load X3D file."));
496
522
  }
497
523
  },
498
524
  (fragment) =>
499
525
  {
500
- if (loader !== this [_loader])
526
+ if (fileLoader !== this [_fileLoader])
501
527
  {
502
- reject ("Change viewpoint aborted.");
528
+ reject (new Error ("Change viewpoint aborted."));
503
529
  return;
504
530
  }
505
531
 
@@ -511,9 +537,9 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
511
537
  },
512
538
  (url, target) =>
513
539
  {
514
- if (loader !== this [_loader])
540
+ if (fileLoader !== this [_fileLoader])
515
541
  {
516
- reject ("Loading of file aborted.");
542
+ reject (new Error ("Loading of file aborted."));
517
543
  return;
518
544
  }
519
545
 
@@ -564,14 +590,14 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
564
590
  }
565
591
  };
566
592
  })(),
567
- importDocument: function (dom, async = false)
593
+ importDocument: function (dom)
568
594
  {
569
595
  const
570
596
  currentScene = this .currentScene,
571
597
  scene = this .createScene (),
572
598
  external = this .isExternal ();
573
599
 
574
- if (! external)
600
+ if (!external)
575
601
  {
576
602
  currentScene .isLive () .addInterest ("setLive", scene);
577
603
  scene .setExecutionContext (currentScene);
@@ -582,21 +608,16 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
582
608
 
583
609
  parser .setInput (dom)
584
610
 
585
- if (async)
586
- return new Promise (parser .parseIntoScene .bind (parser));
587
-
588
- parser .parseIntoScene ();
589
-
590
- return scene;
611
+ return new Promise (parser .parseIntoScene .bind (parser));
591
612
  },
592
- importJS: function (json, async = false)
613
+ importJS: function (json)
593
614
  {
594
615
  const
595
616
  currentScene = this .currentScene,
596
617
  scene = this .createScene (),
597
618
  external = this .isExternal ();
598
619
 
599
- if (! external)
620
+ if (!external)
600
621
  {
601
622
  currentScene .isLive () .addInterest ("setLive", scene);
602
623
  scene .setExecutionContext (currentScene);
@@ -607,12 +628,7 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
607
628
 
608
629
  parser .setInput (json);
609
630
 
610
- if (async)
611
- return new Promise (parser .parseIntoScene .bind (parser));
612
-
613
- parser .parseIntoScene ();
614
-
615
- return scene;
631
+ return new Promise (parser .parseIntoScene .bind (parser));
616
632
  },
617
633
  getBrowserProperty: function (name)
618
634
  {
@@ -630,13 +646,28 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
630
646
  {
631
647
  return this .getRenderingProperties () .getField (name) .getValue ();
632
648
  },
649
+ viewAll: function (layerNode)
650
+ {
651
+ layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode);
652
+
653
+ if (!layerNode)
654
+ layerNode = this .getActiveLayer ();
655
+
656
+ if (!layerNode)
657
+ return;
658
+
659
+ layerNode .getViewpoint () ._viewAll = true;
660
+ },
633
661
  firstViewpoint: function (layerNode)
634
662
  {
635
- layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode, false);
663
+ layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode);
636
664
 
637
- if (! layerNode)
665
+ if (!layerNode)
638
666
  layerNode = this .getActiveLayer ();
639
667
 
668
+ if (!layerNode)
669
+ return;
670
+
640
671
  const viewpoints = layerNode .getUserViewpoints ();
641
672
 
642
673
  if (viewpoints .length)
@@ -644,11 +675,14 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
644
675
  },
645
676
  previousViewpoint: function (layerNode)
646
677
  {
647
- layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode, false);
678
+ layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode);
648
679
 
649
- if (! layerNode)
680
+ if (!layerNode)
650
681
  layerNode = this .getActiveLayer ();
651
682
 
683
+ if (!layerNode)
684
+ return;
685
+
652
686
  const viewpoints = layerNode .getUserViewpoints ();
653
687
 
654
688
  if (viewpoints .length === 0)
@@ -673,11 +707,14 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
673
707
  },
674
708
  nextViewpoint: function (layerNode)
675
709
  {
676
- layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode, false);
710
+ layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode);
677
711
 
678
- if (! layerNode)
712
+ if (!layerNode)
679
713
  layerNode = this .getActiveLayer ();
680
714
 
715
+ if (!layerNode)
716
+ return;
717
+
681
718
  const viewpoints = layerNode .getUserViewpoints ();
682
719
 
683
720
  if (viewpoints .length === 0)
@@ -702,11 +739,14 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
702
739
  },
703
740
  lastViewpoint: function (layerNode)
704
741
  {
705
- layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode, false);
742
+ layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode);
706
743
 
707
- if (! layerNode)
744
+ if (!layerNode)
708
745
  layerNode = this .getActiveLayer ();
709
746
 
747
+ if (!layerNode)
748
+ return;
749
+
710
750
  const viewpoints = layerNode .getUserViewpoints ();
711
751
 
712
752
  if (viewpoints .length)
@@ -720,32 +760,32 @@ X3DBrowser .prototype = Object .assign (Object .create (X3DBrowserContext .proto
720
760
  layerNode = this .getActiveLayer ();
721
761
  }
722
762
 
723
- layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode, false);
763
+ layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode);
724
764
 
725
- if (! layerNode)
765
+ if (!layerNode)
726
766
  layerNode = this .getActiveLayer ();
727
767
 
728
- if (layerNode instanceof X3DLayerNode)
768
+ if (!layerNode)
769
+ return;
770
+
771
+ for (const viewpointNode of layerNode .getViewpoints () .get ())
729
772
  {
730
- for (const viewpointNode of layerNode .getViewpoints () .get ())
731
- {
732
- if (viewpointNode .getName () === name)
733
- {
734
- this .bindViewpoint (layerNode, viewpointNode);
735
- break;
736
- }
737
- }
773
+ if (viewpointNode .getName () !== name)
774
+ continue;
775
+
776
+ this .bindViewpoint (layerNode, viewpointNode);
777
+ break;
738
778
  }
739
779
  },
740
780
  bindViewpoint: function (layerNode, viewpointNode)
741
781
  {
742
- layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode, false);
743
- viewpointNode = X3DCast (X3DConstants .X3DViewpointNode, viewpointNode, false);
782
+ layerNode = X3DCast (X3DConstants .X3DLayerNode, layerNode);
783
+ viewpointNode = X3DCast (X3DConstants .X3DViewpointNode, viewpointNode);
744
784
 
745
- if (! layerNode)
785
+ if (!layerNode)
746
786
  throw new Error ("Browser.bindViewpoint: layerNode must be of type X3DLayerNode.")
747
787
 
748
- if (! viewpointNode)
788
+ if (!viewpointNode)
749
789
  throw new Error ("Browser.bindViewpoint: viewpointNode must be of type X3DViewpointNode.")
750
790
 
751
791
  viewpointNode .setVRMLTransition (true);
@@ -179,7 +179,7 @@ X3DBrowserContext .prototype = Object .assign (Object .create (X3DBaseNode .prot
179
179
 
180
180
  // Process events from context creation. This will setup nodes like
181
181
  // geometry option nodes before any node is created.
182
- this [_processEvents] ();
182
+ return this [_processEvents];
183
183
  },
184
184
  initialized: function ()
185
185
  {
@@ -213,15 +213,15 @@ X3DBrowserContext .prototype = Object .assign (Object .create (X3DBaseNode .prot
213
213
  {
214
214
  return this [_world];
215
215
  },
216
+ getExecutionContext: function ()
217
+ {
218
+ return this [_world] .getExecutionContext ();
219
+ },
216
220
  setExecutionContext: function (executionContext)
217
221
  {
218
222
  this [_world] = new X3DWorld (executionContext);
219
223
  this [_world] .setup ();
220
224
  },
221
- getExecutionContext: function ()
222
- {
223
- return this [_world] .getExecutionContext ();
224
- },
225
225
  addBrowserEvent: function ()
226
226
  {
227
227
  if (this [_changedTime] === this .getCurrentTime ())
@@ -280,9 +280,11 @@ X3DBrowserContext .prototype = Object .assign (Object .create (X3DBaseNode .prot
280
280
  this [_processEvents] ();
281
281
 
282
282
  const t3 = Date .now ();
283
+ this .getFrameBuffer () .bind ();
283
284
  gl .clearColor (0, 0, 0, 0);
284
285
  gl .clear (gl .COLOR_BUFFER_BIT);
285
286
  this [_world] .traverse (TraverseType .DISPLAY, null);
287
+ this .getFrameBuffer () .blit ();
286
288
  this [_displayTime] = Date .now () - t3;
287
289
 
288
290
  this [_browserTime] = Date .now () - t0;
@@ -62,9 +62,9 @@ WorldInfo .prototype = Object .assign (Object .create (X3DInfoNode .prototype),
62
62
  {
63
63
  constructor: WorldInfo,
64
64
  [Symbol .for ("X_ITE.X3DBaseNode.fieldDefinitions")]: new FieldDefinitionArray ([
65
- new X3DFieldDefinition (X3DConstants .inputOutput, "metadata", new Fields .SFNode ()),
66
- new X3DFieldDefinition (X3DConstants .inputOutput, "title", new Fields .SFString ()),
67
- new X3DFieldDefinition (X3DConstants .inputOutput, "info", new Fields .MFString ()),
65
+ new X3DFieldDefinition (X3DConstants .inputOutput, "metadata", new Fields .SFNode ()),
66
+ new X3DFieldDefinition (X3DConstants .initializeOnly, "title", new Fields .SFString ()),
67
+ new X3DFieldDefinition (X3DConstants .initializeOnly, "info", new Fields .MFString ()),
68
68
  ]),
69
69
  getTypeName: function ()
70
70
  {
@@ -335,9 +335,9 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
335
335
  if (field .getReferences () .size === 0 || !generator .ExecutionContext () || sharedNode)
336
336
  {
337
337
  generator .string += generator .Indent ();
338
- generator .string += generator .PadRight (generator .AccessType (field .getAccessType ()), accessTypeLength);
338
+ generator .string += generator .AccessType (field .getAccessType ()) .padEnd (accessTypeLength, " ");
339
339
  generator .string += generator .Space ();
340
- generator .string += generator .PadRight (field .getTypeName (), fieldTypeLength);
340
+ generator .string += field .getTypeName () .padEnd (fieldTypeLength, " ");
341
341
  generator .string += generator .Space ();
342
342
  generator .string += field .getName ();
343
343
 
@@ -361,9 +361,9 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
361
361
  // Output user defined reference field
362
362
 
363
363
  generator .string += generator .Indent ();
364
- generator .string += generator .PadRight (generator .AccessType (field .getAccessType ()), accessTypeLength);
364
+ generator .string += generator .AccessType (field .getAccessType ()) .padEnd (accessTypeLength, " ");
365
365
  generator .string += generator .Space ();
366
- generator .string += generator .PadRight (field .getTypeName (), fieldTypeLength);
366
+ generator .string += field .getTypeName () .padEnd (fieldTypeLength, " ");
367
367
  generator .string += generator .Space ();
368
368
  generator .string += field .getName ();
369
369
  generator .string += generator .Space ();
@@ -381,9 +381,9 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
381
381
  {
382
382
  generator .string += generator .Break ();
383
383
  generator .string += generator .Indent ();
384
- generator .string += generator .PadRight (generator .AccessType (field .getAccessType ()), accessTypeLength);
384
+ generator .string += generator .AccessType (field .getAccessType ()) .padEnd (accessTypeLength, " ");
385
385
  generator .string += generator .Space ();
386
- generator .string += generator .PadRight (field .getTypeName (), fieldTypeLength);
386
+ generator .string += field .getTypeName () .padEnd (fieldTypeLength, " ");
387
387
  generator .string += generator .Space ();
388
388
  generator .string += field .getName ();
389
389
 
@@ -1225,7 +1225,7 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
1225
1225
  generator .string += generator .TidyBreak ();
1226
1226
  }
1227
1227
 
1228
- generator .string = generator .string .replace (/,(\s*)$/s, "$1");
1228
+ generator .JSONRemoveComma ();
1229
1229
 
1230
1230
  // End
1231
1231
 
@@ -985,7 +985,7 @@ X3DPrototypeInstance .prototype = Object .assign (Object .create (X3DNode .proto
985
985
  }
986
986
  }
987
987
 
988
- generator .string = generator .string .replace (/,(\s*)$/s, "$1");
988
+ generator .JSONRemoveComma ();
989
989
 
990
990
 
991
991
  // End