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
@@ -0,0 +1,1076 @@
1
+ /*******************************************************************************
2
+ *
3
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
+ *
5
+ * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011 - 2022.
6
+ *
7
+ * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
8
+ *
9
+ * The copyright notice above does not evidence any actual of intended
10
+ * publication of such source code, and is an unpublished work by create3000.
11
+ * This material contains CONFIDENTIAL INFORMATION that is the property of
12
+ * create3000.
13
+ *
14
+ * No permission is granted to copy, distribute, or create derivative works from
15
+ * the contents of this software, in whole or in part, without the prior written
16
+ * permission of create3000.
17
+ *
18
+ * NON-MILITARY USE ONLY
19
+ *
20
+ * All create3000 software are effectively free software with a non-military use
21
+ * restriction. It is free. Well commented source is provided. You may reuse the
22
+ * source in any way you please with the exception anything that uses it must be
23
+ * marked to indicate is contains 'non-military use only' components.
24
+ *
25
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
26
+ *
27
+ * Copyright 2011 - 2022, Holger Seelig <holger.seelig@yahoo.de>.
28
+ *
29
+ * This file is part of the X_ITE Project.
30
+ *
31
+ * X_ITE is free software: you can redistribute it and/or modify it under the
32
+ * terms of the GNU General Public License version 3 only, as published by the
33
+ * Free Software Foundation.
34
+ *
35
+ * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
36
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
37
+ * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
38
+ * details (a copy is included in the LICENSE file that accompanied this code).
39
+ *
40
+ * You should have received a copy of the GNU General Public License version 3
41
+ * along with X_ITE. If not, see <https://www.gnu.org/licenses/gpl.html> for a
42
+ * copy of the GPLv3 License.
43
+ *
44
+ * For Silvio, Joy and Adi.
45
+ *
46
+ ******************************************************************************/
47
+
48
+ import X3DParser from "./X3DParser.js";
49
+ import X3DOptimizer from "./X3DOptimizer.js";
50
+ import Expressions from "./Expressions.js";
51
+ import Vector2 from "../../standard/Math/Numbers/Vector2.js";
52
+ import Vector3 from "../../standard/Math/Numbers/Vector3.js";
53
+ import Color3 from "../../standard/Math/Numbers/Color3.js";
54
+ import DEBUG from "../DEBUG.js";
55
+
56
+ // http://paulbourke.net/dataformats/obj/
57
+ // https://people.sc.fsu.edu/~jburkardt/data/obj/obj.html
58
+
59
+ /*
60
+ * Grammar
61
+ */
62
+
63
+ // Lexical elements
64
+ const Grammar = Expressions ({
65
+ // General
66
+ whitespaces: /[\x20\n\t\r]+/gy,
67
+ whitespacesNoLineTerminator: /[\x20\t]+/gy,
68
+ comment: /#.*?(?=[\n\r])/gy,
69
+ untilEndOfLine: /([^\r\n]+)/gy,
70
+
71
+ // Keywords
72
+ mtllib: /\bmtllib\b/gy,
73
+ usemtl: /\busemtl\b/gy,
74
+ newmtl: /\bnewmtl\b/gy,
75
+ Ka: /\bKa\b/gy,
76
+ Kd: /\bKd\b/gy,
77
+ Ks: /\bKs\b/gy,
78
+ Ns: /\bNs\b/gy,
79
+ d: /\bd\b/gy,
80
+ Tr: /\bTr\b/gy,
81
+ illum: /\billum\b/gy,
82
+ map_Kd: /\bmap_Kd\b/gy,
83
+ o: /\bo\b/gy,
84
+ v: /\bv\b/gy,
85
+ vt: /\bvt\b/gy,
86
+ vn: /\bvn\b/gy,
87
+ g: /\bg\b/gy,
88
+ s: /\bs\b/gy,
89
+ off: /\boff\b/gy,
90
+ f: /\bf\b/gy,
91
+ slash: /\//gy,
92
+
93
+ // Values
94
+ int32: /((?:0[xX][\da-fA-F]+)|(?:[+-]?\d+))/gy,
95
+ double: /([+-]?(?:(?:(?:\d*\.\d+)|(?:\d+(?:\.)?))(?:[eE][+-]?\d+)?))/gy,
96
+ constants: /([+-])((?:NAN|INF|INFINITY))/igy,
97
+ });
98
+
99
+ /*
100
+ * Parser
101
+ */
102
+
103
+ function OBJParser (scene)
104
+ {
105
+ X3DParser .call (this, scene);
106
+ X3DOptimizer .call (this);
107
+
108
+ // Optimizer
109
+
110
+ this .removeGroups = true;
111
+ this .removeEmptyGroups = true;
112
+ this .combineGroupingNodes = false;
113
+
114
+ // Globals
115
+
116
+ this .smoothingGroup = 0;
117
+ this .smoothingGroups = new Map ();
118
+ this .groups = new Map ();
119
+ this .materials = new Map ();
120
+ this .textures = new Map ();
121
+ this .point2 = new Vector2 ();
122
+ this .point3 = new Vector3 ();
123
+ this .lastIndex = 0;
124
+ }
125
+
126
+ OBJParser .prototype = Object .assign (Object .create (X3DParser .prototype),
127
+ X3DOptimizer .prototype,
128
+ {
129
+ constructor: OBJParser,
130
+ CONSTANTS: new Map ([
131
+ ["NAN", NaN],
132
+ ["INF", Infinity],
133
+ ["INFINITY", Infinity],
134
+ ]),
135
+ getEncoding: function ()
136
+ {
137
+ return "STRING";
138
+ },
139
+ isValid: function ()
140
+ {
141
+ if (!(typeof this .input === "string"))
142
+ return false;
143
+
144
+ return !! this .input .match (/^(?:[\x20\n\t\r]+|#.*?[\r\n])*\b(?:mtllib|usemtl|o|g|s|vt|vn|v|f)\b/);
145
+ },
146
+ setInput: function (string)
147
+ {
148
+ this .input = string;
149
+ },
150
+ parseIntoScene: function (success, error)
151
+ {
152
+ this .obj ()
153
+ .then (success)
154
+ .catch (error);
155
+ },
156
+ obj: async function ()
157
+ {
158
+ // Set profile and components.
159
+
160
+ const
161
+ browser = this .getBrowser (),
162
+ scene = this .getScene ();
163
+
164
+ scene .setEncoding ("OBJ");
165
+ scene .setProfile (browser .getProfile ("Interchange"));
166
+
167
+ await this .loadComponents ();
168
+
169
+ // Init nodes.
170
+
171
+ this .object = scene .createNode ("Transform");
172
+ this .group = scene .createNode ("Group");
173
+ this .defaultMaterial = scene .createNode ("Material");
174
+ this .texCoord = scene .createNode ("TextureCoordinate");
175
+ this .normal = scene .createNode ("Normal");
176
+ this .coord = scene .createNode ("Coordinate");
177
+
178
+ this .object .children .push (this .group);
179
+
180
+ scene .getRootNodes () .push (this .object);
181
+
182
+ // Parse scene.
183
+
184
+ await this .statements ();
185
+
186
+ this .optimizeSceneGraph (scene .getRootNodes ());
187
+
188
+ return this .getScene ();
189
+ },
190
+ comments: function ()
191
+ {
192
+ while (this .comment ())
193
+ ;
194
+ },
195
+ comment: function ()
196
+ {
197
+ this .whitespaces ();
198
+
199
+ if (Grammar .comment .parse (this))
200
+ return true;
201
+
202
+ return false;
203
+ },
204
+ whitespaces: function ()
205
+ {
206
+ Grammar .whitespaces .parse (this);
207
+ },
208
+ whitespacesNoLineTerminator: function ()
209
+ {
210
+ Grammar .whitespacesNoLineTerminator .parse (this);
211
+ },
212
+ statements: async function ()
213
+ {
214
+ while (await this .statement ())
215
+ ;
216
+ },
217
+ statement: async function ()
218
+ {
219
+ if (await this .mtllibs ())
220
+ return true;
221
+
222
+ if (this .usemtl ())
223
+ return true;
224
+
225
+ if (this .o ())
226
+ return true;
227
+
228
+ if (this .g ())
229
+ return true;
230
+
231
+ if (this .s ())
232
+ return true;
233
+
234
+ if (this .vts ())
235
+ return true;
236
+
237
+ if (this .vns ())
238
+ return true;
239
+
240
+ if (this .vs ())
241
+ return true;
242
+
243
+ if (this .fs ())
244
+ return true;
245
+
246
+ // Skip empty and unknown lines.
247
+
248
+ if (Grammar .untilEndOfLine .parse (this))
249
+ return true;
250
+
251
+ return false;
252
+ },
253
+ mtllibs: async function ()
254
+ {
255
+ this .comments ();
256
+
257
+ if (Grammar .mtllib .parse (this))
258
+ {
259
+ this .whitespacesNoLineTerminator ();
260
+
261
+ if (Grammar .untilEndOfLine .parse (this))
262
+ {
263
+ const mtllibs = this .result [1] .trim () .split (/\s+/);
264
+
265
+ await Promise .all (mtllibs .map (path => this .mtllib (path)));
266
+ }
267
+
268
+ return true;
269
+ }
270
+
271
+ return false;
272
+ },
273
+ mtllib: async function (path)
274
+ {
275
+ const
276
+ scene = this .getExecutionContext (),
277
+ url = new URL (path, scene .getWorldURL ());
278
+
279
+ const input = await fetch (url)
280
+ .then (response => response .arrayBuffer ())
281
+ .then (arrayBuffer => $.decodeText ($.ungzip (arrayBuffer)))
282
+ .catch (Function .prototype);
283
+
284
+ const parser = new MaterialParser (scene, input);
285
+
286
+ parser .parse ();
287
+
288
+ for (const [name, material] of parser .materials)
289
+ {
290
+ const nodeName = this .sanitizeName (name);
291
+
292
+ if (nodeName)
293
+ scene .addNamedNode (scene .getUniqueName (nodeName), material);
294
+
295
+ this .materials .set (name, material);
296
+ }
297
+
298
+ for (const [name, texture] of parser .textures)
299
+ {
300
+ const nodeName = this .sanitizeName (name);
301
+
302
+ if (nodeName)
303
+ scene .addNamedNode (scene .getUniqueName (nodeName), texture);
304
+
305
+ this .textures .set (name, texture);
306
+ }
307
+ },
308
+ usemtl: function ()
309
+ {
310
+ this .comments ();
311
+
312
+ if (Grammar .usemtl .parse (this))
313
+ {
314
+ this .whitespacesNoLineTerminator ();
315
+
316
+ if (Grammar .untilEndOfLine .parse (this))
317
+ {
318
+ const name = this .result [1];
319
+
320
+ this .material = this .materials .get (name) || this .defaultMaterial;
321
+ this .texture = this .textures .get (name);
322
+
323
+ const smoothingGroup = this .smoothingGroups .get (this .group .getNodeName ());
324
+
325
+ if (smoothingGroup)
326
+ smoothingGroup .delete (this .smoothingGroup);
327
+ }
328
+
329
+ return true;
330
+ }
331
+
332
+ return false;
333
+ },
334
+ o: function ()
335
+ {
336
+ this .comments ();
337
+
338
+ if (Grammar .o .parse (this))
339
+ {
340
+ this .whitespacesNoLineTerminator ();
341
+
342
+ if (Grammar .untilEndOfLine .parse (this))
343
+ {
344
+ const
345
+ scene = this .getExecutionContext (),
346
+ nodeName = this .sanitizeName (this .result [1]);
347
+
348
+ if (this .group .children .length)
349
+ {
350
+ this .object = scene .createNode("Transform");
351
+ this .group = scene .createNode ("Group");
352
+
353
+ this .object .children .push (this .group);
354
+ scene .getRootNodes () .push (this .object);
355
+ }
356
+
357
+ if (nodeName)
358
+ scene .addNamedNode (scene .getUniqueName (nodeName), this .object);
359
+ }
360
+
361
+ return true;
362
+ }
363
+
364
+ return false;
365
+ },
366
+ g: function ()
367
+ {
368
+ this .comments ();
369
+
370
+ if (Grammar .g .parse (this))
371
+ {
372
+ this .whitespacesNoLineTerminator ();
373
+
374
+ if (Grammar .untilEndOfLine .parse (this))
375
+ {
376
+ const
377
+ scene = this .getExecutionContext (),
378
+ name = this .result [1],
379
+ nodeName = this .sanitizeName (name),
380
+ group = this .groups .get (name);
381
+
382
+ if (group)
383
+ {
384
+ this .group = group;
385
+ }
386
+ else
387
+ {
388
+ if (this .group .children .length)
389
+ {
390
+ this .group = scene .createNode ("Group");
391
+
392
+ this .object .children .push (this .group);
393
+ }
394
+ }
395
+
396
+ this .groups .set (name, this .group);
397
+
398
+ if (nodeName)
399
+ scene .addNamedNode (scene .getUniqueName (nodeName), this .group);
400
+
401
+ this .smoothingGroup = 0;
402
+ }
403
+
404
+ return true;
405
+ }
406
+
407
+ return false;
408
+ },
409
+ s: function ()
410
+ {
411
+ this .comments ();
412
+
413
+ if (Grammar .s .parse (this))
414
+ {
415
+ this .whitespacesNoLineTerminator ();
416
+
417
+ if (Grammar .off .parse (this))
418
+ {
419
+ this .smoothingGroup = 0;
420
+ return true;
421
+ }
422
+
423
+ if (this .int32 ())
424
+ {
425
+ this .smoothingGroup = this .value;
426
+ return true;
427
+ }
428
+
429
+ return true;
430
+ }
431
+
432
+ return false;
433
+ },
434
+ vts: function ()
435
+ {
436
+ const point = this .texCoord .point;
437
+
438
+ let result = false;
439
+
440
+ while (this .vt (point))
441
+ result = true;
442
+
443
+ return result;
444
+ },
445
+ vt: function (point)
446
+ {
447
+ this .comments ();
448
+
449
+ if (Grammar .vt .parse (this))
450
+ {
451
+ if (this .vec2 ())
452
+ {
453
+ point .push (this .point2);
454
+
455
+ return true;
456
+ }
457
+
458
+ throw new Error ("Expected a texture coordinate.");
459
+ }
460
+
461
+ return false;
462
+ },
463
+ vns: function ()
464
+ {
465
+ const vector = this .normal .vector;
466
+
467
+ let result = false;
468
+
469
+ while (this .vn (vector))
470
+ result = true;
471
+
472
+ return result;
473
+ },
474
+ vn: function (vector)
475
+ {
476
+ this .comments ();
477
+
478
+ if (Grammar .vn .parse (this))
479
+ {
480
+ if (this .vec3 ())
481
+ {
482
+ vector .push (this .point3);
483
+
484
+ return true;
485
+ }
486
+
487
+ throw new Error ("Expected a normal vector.");
488
+ }
489
+
490
+ return false;
491
+ },
492
+ vs: function ()
493
+ {
494
+ const point = this .coord .point;
495
+
496
+ let result = false;
497
+
498
+ while (this .v (point))
499
+ result = true;
500
+
501
+ return result;
502
+ },
503
+ v: function (point)
504
+ {
505
+ this .comments ();
506
+
507
+ if (Grammar .v .parse (this))
508
+ {
509
+ if (this .vec3 ())
510
+ {
511
+ point .push (this .point3);
512
+
513
+ return true;
514
+ }
515
+
516
+ throw new Error ("Expected a vertex coordinate.");
517
+ }
518
+
519
+ return false;
520
+ },
521
+ fs: function ()
522
+ {
523
+ this .comments ();
524
+
525
+ if (Grammar .f .lookahead (this))
526
+ {
527
+ try
528
+ {
529
+ this .shape = this .smoothingGroups .get (this .group .getNodeName ()) .get (this .smoothingGroup);
530
+ this .geometry = this .shape .geometry;
531
+ }
532
+ catch (error)
533
+ {
534
+ const
535
+ scene = this .getExecutionContext (),
536
+ appearance = scene .createNode ("Appearance");
537
+
538
+ this .geometry = scene .createNode ("IndexedFaceSet");
539
+ this .shape = scene .createNode ("Shape");
540
+
541
+ appearance .material = this .material;
542
+ appearance .texture = this .texture;
543
+ this .geometry .creaseAngle = this .smoothingGroup ? Math .PI : 0;
544
+ this .shape .appearance = appearance;
545
+ this .shape .geometry = this .geometry;
546
+
547
+ this .group .children .push (this .shape);
548
+
549
+ if (!this .smoothingGroups .has (this .group .getNodeName ()))
550
+ this .smoothingGroups .set (this .group .getNodeName (), new Map ());
551
+
552
+ this .smoothingGroups .get (this .group .getNodeName ()) .set (this .smoothingGroup, this .shape);
553
+ }
554
+
555
+ while (this .f ())
556
+ ;
557
+
558
+ if (this .geometry .texCoordIndex .length)
559
+ this .geometry .texCoord = this .texCoord;
560
+
561
+ if (this .geometry .normalIndex .length)
562
+ this .geometry .normal = this .normal;
563
+
564
+ this .geometry .coord = this .coord;
565
+
566
+ return true;
567
+ }
568
+
569
+ return false;
570
+ },
571
+ f: function ()
572
+ {
573
+ this .comments ();
574
+
575
+ if (Grammar .f .parse (this))
576
+ {
577
+ const
578
+ geometry = this .geometry,
579
+ texCoordIndex = geometry .texCoordIndex,
580
+ normalIndex = geometry .normalIndex,
581
+ coordIndex = geometry .coordIndex,
582
+ numTexCoordIndices = texCoordIndex .length,
583
+ numNormalIndices = normalIndex .length,
584
+ numTexCoords = this .texCoord .point .length,
585
+ numNormals = this .normal .vector .length,
586
+ numCoords = this .coord .point .length;
587
+
588
+ while (this .indices (texCoordIndex, normalIndex, coordIndex, numTexCoords, numNormals, numCoords))
589
+ ;
590
+
591
+ if (texCoordIndex .length !== numTexCoordIndices)
592
+ texCoordIndex .push (-1);
593
+
594
+ if (normalIndex .length !== numNormalIndices)
595
+ normalIndex .push (-1);
596
+
597
+ coordIndex .push (-1);
598
+
599
+ return true;
600
+ }
601
+
602
+ return false;
603
+ },
604
+ indices: function (texCoordIndex, normalIndex, coordIndex, numTexCoords, numNormals, numCoords)
605
+ {
606
+ if (this .int32 ())
607
+ {
608
+ coordIndex .push (this .index (this .value, numCoords));
609
+
610
+ if (Grammar .slash .parse (this))
611
+ {
612
+ if (this .int32 ())
613
+ {
614
+ texCoordIndex .push (this .index (this .value, numTexCoords));
615
+ }
616
+
617
+ if (Grammar .slash .parse (this))
618
+ {
619
+ if (this .int32 ())
620
+ {
621
+ normalIndex .push (this .index (this .value, numNormals));
622
+ }
623
+ }
624
+ }
625
+
626
+ return true;
627
+ }
628
+
629
+ return false;
630
+ },
631
+ index: function (index, length)
632
+ {
633
+ if (index === 0)
634
+ throw new Error ("Invalid index.");
635
+
636
+ if (index < 0)
637
+ return length + index;
638
+
639
+ return index - 1;
640
+ },
641
+ int32: function ()
642
+ {
643
+ this .whitespaces ();
644
+
645
+ if (Grammar .int32 .parse (this))
646
+ {
647
+ this .value = parseInt (this .result [1]);
648
+
649
+ return true;
650
+ }
651
+
652
+ return false;
653
+ },
654
+ double: function ()
655
+ {
656
+ this .whitespaces ();
657
+
658
+ if (Grammar .double .parse (this))
659
+ {
660
+ this .value = parseFloat (this .result [1]);
661
+
662
+ return true;
663
+ }
664
+
665
+ if (Grammar .constants .parse (this))
666
+ {
667
+ this .value = this .CONSTANTS .get (this .result [2] .toUpperCase ());
668
+
669
+ if (this .result [1] === "-")
670
+ this .value = - this .value;
671
+
672
+ return true;
673
+ }
674
+
675
+ return false;
676
+ },
677
+ vec2: function ()
678
+ {
679
+ if (this .double ())
680
+ {
681
+ this .point2 .x = this .value;
682
+
683
+ if (this .double ())
684
+ {
685
+ this .point2 .y = this .value;
686
+
687
+ return true;
688
+ }
689
+ }
690
+
691
+ return false;
692
+ },
693
+ vec3: function ()
694
+ {
695
+ if (this .double ())
696
+ {
697
+ this .point3 .x = this .value;
698
+
699
+ if (this .double ())
700
+ {
701
+ this .point3 .y = this .value;
702
+
703
+ if (this .double ())
704
+ {
705
+ this .point3 .z = this .value;
706
+
707
+ return true;
708
+ }
709
+ }
710
+ }
711
+
712
+ return false;
713
+ },
714
+ });
715
+
716
+ function MaterialParser (scene, input)
717
+ {
718
+ this .executionContext = scene;
719
+ this .input = input;
720
+ this .material = scene .createNode ("Material");
721
+ this .materials = new Map ();
722
+ this .textures = new Map ();
723
+ this .color3 = new Color3 ();
724
+ this .name = "";
725
+ }
726
+
727
+ MaterialParser .prototype =
728
+ {
729
+ CONSTANTS: new Map ([
730
+ ["NAN", NaN],
731
+ ["INF", Infinity],
732
+ ["INFINITY", Infinity],
733
+ ]),
734
+ parse: function ()
735
+ {
736
+ try
737
+ {
738
+ this .statements ();
739
+ }
740
+ catch (error)
741
+ {
742
+ if (DEBUG)
743
+ console .log (error);
744
+ }
745
+ },
746
+ comments: function ()
747
+ {
748
+ while (this .comment ())
749
+ ;
750
+ },
751
+ comment: function ()
752
+ {
753
+ this .whitespaces ();
754
+
755
+ if (Grammar .comment .parse (this))
756
+ return true;
757
+
758
+ return false;
759
+ },
760
+ whitespaces: function ()
761
+ {
762
+ Grammar .whitespaces .parse (this);
763
+ },
764
+ whitespacesNoLineTerminator: function ()
765
+ {
766
+ Grammar .whitespacesNoLineTerminator .parse (this);
767
+ },
768
+ statements: function ()
769
+ {
770
+ while (this .statement ())
771
+ ;
772
+ },
773
+ statement: function ()
774
+ {
775
+ if (this .newmtl ())
776
+ return true;
777
+
778
+ if (this .Ka ())
779
+ return true;
780
+
781
+ if (this .Kd ())
782
+ return true;
783
+
784
+ if (this .Ks ())
785
+ return true;
786
+
787
+ if (this .Ns ())
788
+ return true;
789
+
790
+ if (this .d ())
791
+ return true;
792
+
793
+ if (this .Tr ())
794
+ return true;
795
+
796
+ if (this .illum ())
797
+ return true;
798
+
799
+ if (this .map_Kd ())
800
+ return true;
801
+
802
+ // Skip empty and unknown lines.
803
+
804
+ if (Grammar .untilEndOfLine .parse (this))
805
+ return true;
806
+
807
+ return false;
808
+ },
809
+ newmtl: function ()
810
+ {
811
+ this .comments ();
812
+
813
+ if (Grammar .newmtl .parse (this))
814
+ {
815
+ this .whitespacesNoLineTerminator ();
816
+
817
+ this .name = "";
818
+
819
+ if (Grammar .untilEndOfLine .parse (this))
820
+ {
821
+ this .name = this .result [1];
822
+
823
+ this .material = this .executionContext .createNode ("Material");
824
+
825
+ this .materials .set (this .name, this .material);
826
+
827
+ return true;
828
+ }
829
+
830
+ Grammar .untilEndOfLine .parse (this);
831
+
832
+ return true;
833
+ }
834
+
835
+ return false;
836
+ },
837
+ Ka: function ()
838
+ {
839
+ this .comments ();
840
+
841
+ if (Grammar .Ka .parse (this))
842
+ {
843
+ if (this .col3 ())
844
+ {
845
+ const hsv = this .color3 .getHSV ([ ]);
846
+
847
+ this .material .ambientIntensity = hsv [2];
848
+
849
+ return true;
850
+ }
851
+
852
+ Grammar .untilEndOfLine .parse (this);
853
+
854
+ return true;
855
+ }
856
+
857
+ return false;
858
+ },
859
+ Kd: function ()
860
+ {
861
+ this .comments ();
862
+
863
+ if (Grammar .Kd .parse (this))
864
+ {
865
+ if (this .col3 ())
866
+ {
867
+ this .material .diffuseColor = this .color3;
868
+
869
+ return true;
870
+ }
871
+
872
+ Grammar .untilEndOfLine .parse (this);
873
+
874
+ return true;
875
+ }
876
+
877
+ return false;
878
+ },
879
+ Ks: function ()
880
+ {
881
+ this .comments ();
882
+
883
+ if (Grammar .Ks .parse (this))
884
+ {
885
+ if (this .col3 ())
886
+ {
887
+ this .material .specularColor = this .color3;
888
+
889
+ return true;
890
+ }
891
+
892
+ Grammar .untilEndOfLine .parse (this);
893
+
894
+ return true;
895
+ }
896
+
897
+ return false;
898
+ },
899
+ Ns: function ()
900
+ {
901
+ this .comments ();
902
+
903
+ if (Grammar .Ns .parse (this))
904
+ {
905
+ if (this .double ())
906
+ {
907
+ this .material .shininess = this .value / 1000;
908
+
909
+ return true;
910
+ }
911
+
912
+ Grammar .untilEndOfLine .parse (this);
913
+
914
+ return true;
915
+ }
916
+
917
+ return false;
918
+ },
919
+ d: function ()
920
+ {
921
+ this .comments ();
922
+
923
+ if (Grammar .d .parse (this))
924
+ {
925
+ if (this .double ())
926
+ {
927
+ this .material .transparency = 1 - this .value;
928
+
929
+ return true;
930
+ }
931
+
932
+ Grammar .untilEndOfLine .parse (this);
933
+
934
+ return true;
935
+ }
936
+
937
+ return false;
938
+ },
939
+ Tr: function ()
940
+ {
941
+ this .comments ();
942
+
943
+ if (Grammar .Tr .parse (this))
944
+ {
945
+ if (this .double ())
946
+ {
947
+ this .material .transparency = this .value;
948
+
949
+ return true;
950
+ }
951
+
952
+ Grammar .untilEndOfLine .parse (this);
953
+
954
+ return true;
955
+ }
956
+
957
+ return false;
958
+ },
959
+ illum: function ()
960
+ {
961
+ this .comments ();
962
+
963
+ if (Grammar .illum .parse (this))
964
+ {
965
+ if (this .int32 ())
966
+ {
967
+ // Don't know what to do with illum value in X3D.
968
+ return true;
969
+ }
970
+
971
+ Grammar .untilEndOfLine .parse (this);
972
+
973
+ return true;
974
+ }
975
+
976
+ return false;
977
+ },
978
+ map_Kd: function ()
979
+ {
980
+ this .comments ();
981
+
982
+ if (Grammar .map_Kd .parse (this))
983
+ {
984
+ this .whitespacesNoLineTerminator ();
985
+
986
+ if (Grammar .untilEndOfLine .parse (this))
987
+ {
988
+ const string = this .result [1];
989
+
990
+ if (string .length && this .name .length)
991
+ {
992
+ const paths = string .trim () .split (/\s+/);
993
+
994
+ if (paths .length)
995
+ {
996
+ const
997
+ scene = this .executionContext,
998
+ texture = scene .createNode ("ImageTexture"),
999
+ path = paths .at (-1) .replace (/\\/g, "/");
1000
+
1001
+ texture .url = [path];
1002
+
1003
+ this .textures .set (this .name, texture);
1004
+ }
1005
+ }
1006
+
1007
+ return true;
1008
+ }
1009
+
1010
+ Grammar .untilEndOfLine .parse (this);
1011
+
1012
+ return true;
1013
+ }
1014
+
1015
+ return false;
1016
+ },
1017
+ int32: function ()
1018
+ {
1019
+ this .whitespaces ();
1020
+
1021
+ if (Grammar .int32 .parse (this))
1022
+ {
1023
+ this .value = parseInt (this .result [1]);
1024
+
1025
+ return true;
1026
+ }
1027
+
1028
+ return false;
1029
+ },
1030
+ double: function ()
1031
+ {
1032
+ this .whitespaces ();
1033
+
1034
+ if (Grammar .double .parse (this))
1035
+ {
1036
+ this .value = parseFloat (this .result [1]);
1037
+
1038
+ return true;
1039
+ }
1040
+
1041
+ if (Grammar .constants .parse (this))
1042
+ {
1043
+ this .value = this .CONSTANTS .get (this .result [2] .toUpperCase ());
1044
+
1045
+ if (this .result [1] === "-")
1046
+ this .value = - this .value;
1047
+
1048
+ return true;
1049
+ }
1050
+
1051
+ return false;
1052
+ },
1053
+ col3: function ()
1054
+ {
1055
+ if (this .double ())
1056
+ {
1057
+ this .color3 .r = this .value;
1058
+
1059
+ if (this .double ())
1060
+ {
1061
+ this .color3 .g = this .value;
1062
+
1063
+ if (this .double ())
1064
+ {
1065
+ this .color3 .b = this .value;
1066
+
1067
+ return true;
1068
+ }
1069
+ }
1070
+ }
1071
+
1072
+ return false;
1073
+ },
1074
+ };
1075
+
1076
+ export default OBJParser;