x_ite 5.0.2 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. package/.vscode/settings.json +12 -5
  2. package/.vscode/tasks.json +21 -0
  3. package/Makefile +10 -15
  4. package/README.md +6 -11
  5. package/build/bin/dist.pl +0 -6
  6. package/build/bin/version.pl +1 -4
  7. package/dist/assets/components/annotation.js +2 -2
  8. package/dist/assets/components/annotation.min.js +1 -1
  9. package/dist/assets/components/cad-geometry.js +2 -2
  10. package/dist/assets/components/cad-geometry.min.js +1 -1
  11. package/dist/assets/components/cube-map-texturing.js +6 -19
  12. package/dist/assets/components/cube-map-texturing.min.js +1 -1
  13. package/dist/assets/components/dis.js +2 -2
  14. package/dist/assets/components/dis.min.js +1 -1
  15. package/dist/assets/components/event-utilities.js +3 -3
  16. package/dist/assets/components/event-utilities.min.js +1 -1
  17. package/dist/assets/components/geometry2d.js +4 -4
  18. package/dist/assets/components/geometry2d.min.js +1 -1
  19. package/dist/assets/components/geospatial.js +32 -1685
  20. package/dist/assets/components/geospatial.min.js +1 -1
  21. package/dist/assets/components/h-anim.js +70 -77
  22. package/dist/assets/components/h-anim.min.js +1 -1
  23. package/dist/assets/components/key-device-sensor.js +3 -3
  24. package/dist/assets/components/key-device-sensor.min.js +1 -1
  25. package/dist/assets/components/layout.js +38 -52
  26. package/dist/assets/components/layout.min.js +1 -1
  27. package/dist/assets/components/nurbs.js +277 -194
  28. package/dist/assets/components/nurbs.min.js +1 -1
  29. package/dist/assets/components/particle-systems.js +1918 -1658
  30. package/dist/assets/components/particle-systems.min.js +1 -1
  31. package/dist/assets/components/picking.js +33 -41
  32. package/dist/assets/components/picking.min.js +1 -1
  33. package/dist/assets/components/projective-texture-mapping.js +72 -86
  34. package/dist/assets/components/projective-texture-mapping.min.js +1 -1
  35. package/dist/assets/components/rigid-body-physics.js +36 -57
  36. package/dist/assets/components/rigid-body-physics.min.js +1 -1
  37. package/dist/assets/components/scripting.js +2 -2
  38. package/dist/assets/components/scripting.min.js +1 -1
  39. package/dist/assets/components/texturing-3d.js +26 -75
  40. package/dist/assets/components/texturing-3d.min.js +3 -3
  41. package/dist/assets/components/volume-rendering.js +10 -10
  42. package/dist/assets/components/volume-rendering.min.js +1 -1
  43. package/dist/assets/components/x_ite.js +2 -2
  44. package/dist/assets/components/x_ite.min.js +1 -1
  45. package/dist/assets/linetype/1.png +0 -0
  46. package/dist/assets/linetype/10.png +0 -0
  47. package/dist/assets/linetype/11.png +0 -0
  48. package/dist/assets/linetype/12.png +0 -0
  49. package/dist/assets/linetype/13.png +0 -0
  50. package/dist/assets/linetype/14.png +0 -0
  51. package/dist/assets/linetype/15.png +0 -0
  52. package/dist/assets/linetype/16.png +0 -0
  53. package/dist/assets/linetype/2.png +0 -0
  54. package/dist/assets/linetype/3.png +0 -0
  55. package/dist/assets/linetype/4.png +0 -0
  56. package/dist/assets/linetype/5.png +0 -0
  57. package/dist/assets/linetype/6.png +0 -0
  58. package/dist/assets/linetype/7.png +0 -0
  59. package/dist/assets/linetype/8.png +0 -0
  60. package/dist/assets/linetype/9.png +0 -0
  61. package/dist/assets/shaders/webgl1/Line.fs +0 -21
  62. package/dist/assets/shaders/webgl1/Line.vs +0 -10
  63. package/dist/assets/shaders/webgl1/PBR.vs +1 -1
  64. package/dist/assets/shaders/webgl2/Depth.vs +29 -1
  65. package/dist/assets/shaders/webgl2/Gouraud.vs +31 -3
  66. package/dist/assets/shaders/webgl2/Line.fs +24 -12
  67. package/dist/assets/shaders/webgl2/Line.vs +36 -11
  68. package/dist/assets/shaders/webgl2/LineTransform.fs +4 -0
  69. package/dist/assets/shaders/webgl2/LineTransform.vs +57 -0
  70. package/dist/assets/shaders/webgl2/PBR.vs +35 -7
  71. package/dist/assets/shaders/webgl2/Phong.vs +31 -3
  72. package/dist/assets/shaders/webgl2/Point.vs +29 -1
  73. package/dist/assets/shaders/webgl2/Unlit.vs +31 -3
  74. package/dist/example.html +6 -6
  75. package/dist/x_ite.css +180 -208
  76. package/dist/x_ite.js +16477 -16629
  77. package/dist/x_ite.min.js +17 -17
  78. package/dist/x_ite.zip +0 -0
  79. package/docs/404.md +6 -0
  80. package/docs/Accessing-the-External-Browser.md +20 -14
  81. package/docs/Browser-Support.md +6 -0
  82. package/docs/Custom-Shaders.md +17 -24
  83. package/docs/Features.md +7 -1
  84. package/docs/Gemfile +44 -0
  85. package/docs/Gemfile.lock +122 -0
  86. package/docs/Glossary.md +6 -0
  87. package/docs/How-To-Configure-Your-Web-Server.md +6 -0
  88. package/docs/Supported-Nodes.md +9 -1
  89. package/docs/What's-New.md +31 -0
  90. package/docs/XHTML-DOM-Integration.md +6 -0
  91. package/docs/_config.yml +1 -1
  92. package/docs/assets/css/main.scss +26 -0
  93. package/docs/index.md +38 -46
  94. package/docs/reference/Browser-Services.md +9 -3
  95. package/docs/reference/Constants-Services.md +6 -0
  96. package/docs/reference/ECMAScript-Object-and-Function-Definitions.md +6 -0
  97. package/docs/reference/Field-Services-and-Objects.md +6 -0
  98. package/docs/reference/Prototype-Services.md +6 -0
  99. package/docs/reference/Route-Services.md +6 -0
  100. package/docs/reference/Scene-Services.md +8 -2
  101. package/docs/reference/Script-Node-Authoring-Interface.md +7 -1
  102. package/docs/tutorials/Adding-backgrounds.md +6 -0
  103. package/docs/tutorials/Adding-fog.md +6 -0
  104. package/docs/tutorials/Adding-sound.md +6 -0
  105. package/docs/tutorials/Animating-transforms.md +6 -0
  106. package/docs/tutorials/Basic-Nodes.md +6 -0
  107. package/docs/tutorials/Building-a-X3D-world.md +6 -0
  108. package/docs/tutorials/Building-elevation-grids.md +6 -0
  109. package/docs/tutorials/Building-extruded-shapes.md +6 -0
  110. package/docs/tutorials/Building-primitive-shapes.md +6 -0
  111. package/docs/tutorials/Building-shapes-out-of-points,-lines,-and-faces.md +6 -0
  112. package/docs/tutorials/Controlling-appearance-with-materials.md +6 -0
  113. package/docs/tutorials/Controlling-color-on-coordinate-based-geometry.md +6 -0
  114. package/docs/tutorials/Controlling-detail.md +6 -0
  115. package/docs/tutorials/Controlling-how-textures-are-mapped.md +6 -0
  116. package/docs/tutorials/Controlling-navigation.md +6 -0
  117. package/docs/tutorials/Controlling-shading-on-coordinate-based-geometry.md +6 -0
  118. package/docs/tutorials/Controlling-the-viewpoint.md +6 -0
  119. package/docs/tutorials/Creating-new-node-types.md +6 -0
  120. package/docs/tutorials/Grouping-nodes.md +6 -0
  121. package/docs/tutorials/Hello,-World!.md +6 -0
  122. package/docs/tutorials/Improving-Performance.md +6 -0
  123. package/docs/tutorials/Increasing-Rendering-Speed.md +6 -0
  124. package/docs/tutorials/Introducing-X3D.md +6 -0
  125. package/docs/tutorials/Introducing-animation.md +6 -0
  126. package/docs/tutorials/Introducing-script-use.md +6 -0
  127. package/docs/tutorials/Lighting-your-world.md +6 -0
  128. package/docs/tutorials/Mapping-textures.md +6 -0
  129. package/docs/tutorials/Naming-nodes.md +6 -0
  130. package/docs/tutorials/Providing-information-about-your-world.md +6 -0
  131. package/docs/tutorials/Sensing-the-viewer.md +6 -0
  132. package/docs/tutorials/Sensing-viewer-actions.md +6 -0
  133. package/docs/tutorials/Transforming-Shapes.md +6 -0
  134. package/docs/tutorials/Writing-program-scripts-with-ECMAScript.md +6 -0
  135. package/docs/tutorials/index.md +6 -0
  136. package/package.json +6 -7
  137. package/src/assets/components/geometry2d.js +1 -1
  138. package/src/assets/components/key-device-sensor.js +1 -1
  139. package/src/assets/components/layout.js +1 -1
  140. package/src/assets/components/particle-systems.js +1 -1
  141. package/src/assets/components/volume-rendering.js +1 -1
  142. package/src/assets/linetype/1.png +0 -0
  143. package/src/assets/linetype/10.png +0 -0
  144. package/src/assets/linetype/11.png +0 -0
  145. package/src/assets/linetype/12.png +0 -0
  146. package/src/assets/linetype/13.png +0 -0
  147. package/src/assets/linetype/14.png +0 -0
  148. package/src/assets/linetype/15.png +0 -0
  149. package/src/assets/linetype/16.png +0 -0
  150. package/src/assets/linetype/2.png +0 -0
  151. package/src/assets/linetype/3.png +0 -0
  152. package/src/assets/linetype/4.png +0 -0
  153. package/src/assets/linetype/5.png +0 -0
  154. package/src/assets/linetype/6.png +0 -0
  155. package/src/assets/linetype/7.png +0 -0
  156. package/src/assets/linetype/8.png +0 -0
  157. package/src/assets/linetype/9.png +0 -0
  158. package/src/assets/shaders/Types.glsl +1 -9
  159. package/src/assets/shaders/webgl1/Line.fs +3 -28
  160. package/src/assets/shaders/webgl1/Line.vs +5 -19
  161. package/src/assets/shaders/webgl1/PBR.vs +1 -1
  162. package/src/assets/shaders/webgl1/Point.vs +2 -3
  163. package/src/assets/shaders/webgl2/Depth.vs +4 -1
  164. package/src/assets/shaders/webgl2/Gouraud.vs +5 -3
  165. package/src/assets/shaders/webgl2/Line.fs +11 -17
  166. package/src/assets/shaders/webgl2/Line.vs +16 -20
  167. package/src/assets/shaders/webgl2/LineTransform.fs +6 -0
  168. package/src/assets/shaders/webgl2/LineTransform.vs +77 -0
  169. package/src/assets/shaders/webgl2/PBR.vs +10 -7
  170. package/src/assets/shaders/webgl2/Phong.vs +6 -3
  171. package/src/assets/shaders/webgl2/Point.vs +6 -6
  172. package/src/assets/shaders/webgl2/Unlit.vs +6 -3
  173. package/src/assets/shaders/webgl2/include/Line2.glsl +20 -0
  174. package/src/assets/shaders/webgl2/include/Particle.glsl +36 -0
  175. package/src/example.html +6 -6
  176. package/src/standard/Math/Algorithm.js +12 -28
  177. package/src/standard/Math/Geometry/Plane3.js +0 -2
  178. package/src/standard/Math/Geometry/ViewVolume.js +88 -83
  179. package/src/standard/Math/Numbers/Color3.js +6 -0
  180. package/src/standard/Math/Numbers/Color4.js +7 -0
  181. package/src/standard/Math/Numbers/Complex.js +5 -0
  182. package/src/standard/Math/Numbers/Matrix2.js +20 -2
  183. package/src/standard/Math/Numbers/Matrix3.js +129 -110
  184. package/src/standard/Math/Numbers/Matrix4.js +138 -119
  185. package/src/standard/Math/Numbers/Quaternion.js +7 -0
  186. package/src/standard/Math/Numbers/Rotation4.js +7 -0
  187. package/src/standard/Math/Numbers/Vector2.js +8 -5
  188. package/src/standard/Math/Numbers/Vector3.js +16 -10
  189. package/src/standard/Math/Numbers/Vector4.js +12 -7
  190. package/src/standard/Math/Utility/BVH.js +45 -17
  191. package/src/tests.js +6 -1
  192. package/src/x_ite/Base/X3DBaseNode.js +22 -11
  193. package/src/x_ite/Base/X3DField.js +1 -1
  194. package/src/x_ite/Browser/Core/BrowserOptions.js +2 -2
  195. package/src/x_ite/Browser/Core/BrowserTimings.js +4 -2
  196. package/src/x_ite/Browser/Core/Context.js +185 -0
  197. package/src/x_ite/Browser/Core/ContextMenu.js +299 -193
  198. package/src/x_ite/Browser/Core/Notification.js +1 -0
  199. package/src/x_ite/Browser/Core/X3DCoreContext.js +35 -146
  200. package/src/x_ite/Browser/Layout/ScreenText.js +11 -4
  201. package/src/x_ite/Browser/Layout/X3DLayoutContext.js +4 -15
  202. package/src/x_ite/Browser/Navigation/ExamineViewer.js +12 -19
  203. package/src/x_ite/Browser/Navigation/LookAtViewer.js +0 -3
  204. package/src/x_ite/Browser/Navigation/PlaneViewer.js +0 -3
  205. package/src/x_ite/Browser/Navigation/X3DFlyViewer.js +14 -7
  206. package/src/x_ite/Browser/Navigation/X3DViewer.js +12 -20
  207. package/src/x_ite/Browser/Networking/X3DNetworkingContext.js +11 -7
  208. package/src/x_ite/Browser/ParticleSystems/BVH.glsl +183 -0
  209. package/src/x_ite/Browser/ParticleSystems/Box3.glsl +47 -0
  210. package/src/x_ite/Browser/ParticleSystems/GeometryTypes.js +66 -0
  211. package/src/x_ite/Browser/ParticleSystems/Line3.glsl +55 -0
  212. package/src/x_ite/Browser/ParticleSystems/Plane3.glsl +160 -0
  213. package/src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js +27 -3
  214. package/src/x_ite/Browser/PointingDeviceSensor/X3DPointingDeviceSensorContext.js +37 -37
  215. package/src/x_ite/Browser/Rendering/X3DRenderingContext.js +19 -13
  216. package/src/x_ite/Browser/Shaders/Shader.js +33 -12
  217. package/src/x_ite/Browser/Shaders/ShaderSource.js +6 -0
  218. package/src/x_ite/Browser/Shaders/ShaderTest.js +16 -10
  219. package/src/x_ite/Browser/Shape/X3DShapeContext.js +50 -9
  220. package/src/x_ite/Browser/Text/X3DTextContext.js +4 -13
  221. package/src/x_ite/Browser/Texturing/X3DTexturingContext.js +23 -33
  222. package/src/x_ite/Browser/Texturing3D/DICOMParser.js +2 -2
  223. package/src/x_ite/Browser/Time/X3DTimeContext.js +3 -1
  224. package/src/x_ite/Browser/VERSION.js +1 -1
  225. package/src/x_ite/Browser/X3DBrowser.js +7 -6
  226. package/src/x_ite/Browser/X3DBrowserContext.js +35 -10
  227. package/src/x_ite/Components/Core/X3DNode.js +4 -0
  228. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +0 -2
  229. package/src/x_ite/Components/CubeMapTexturing/ComposedCubeMapTexture.js +3 -4
  230. package/src/x_ite/Components/CubeMapTexturing/GeneratedCubeMapTexture.js +1 -12
  231. package/src/x_ite/Components/CubeMapTexturing/ImageCubeMapTexture.js +0 -1
  232. package/src/x_ite/Components/EnvironmentalEffects/TextureBackground.js +1 -1
  233. package/src/x_ite/Components/EnvironmentalEffects/X3DBackgroundNode.js +76 -77
  234. package/src/x_ite/Components/EnvironmentalEffects/X3DFogObject.js +2 -9
  235. package/src/x_ite/Components/EnvironmentalSensor/ProximitySensor.js +51 -65
  236. package/src/x_ite/Components/EventUtilities/X3DSequencerNode.js +1 -1
  237. package/src/x_ite/Components/Followers/X3DChaserNode.js +18 -32
  238. package/src/x_ite/Components/Followers/X3DDamperNode.js +1 -6
  239. package/src/x_ite/Components/Geometry2D/TriangleSet2D.js +1 -1
  240. package/src/x_ite/Components/Geometry3D/ElevationGrid.js +12 -4
  241. package/src/x_ite/Components/Geometry3D/IndexedFaceSet.js +4 -4
  242. package/src/x_ite/Components/Geospatial/GeoCoordinate.js +10 -27
  243. package/src/x_ite/Components/Geospatial/GeoPositionInterpolator.js +5 -10
  244. package/src/x_ite/Components/Geospatial/GeoTouchSensor.js +9 -16
  245. package/src/x_ite/Components/Geospatial/GeoTransform.js +6 -18
  246. package/src/x_ite/Components/Geospatial/X3DGeospatialObject.js +20 -27
  247. package/src/x_ite/Components/Grouping/X3DGroupingNode.js +8 -8
  248. package/src/x_ite/Components/Grouping/X3DTransformNode.js +0 -4
  249. package/src/x_ite/Components/HAnim/HAnimHumanoid.js +68 -75
  250. package/src/x_ite/Components/Interpolation/OrientationInterpolator.js +4 -11
  251. package/src/x_ite/Components/Interpolation/X3DInterpolatorNode.js +1 -1
  252. package/src/x_ite/Components/Layout/LayoutGroup.js +4 -9
  253. package/src/x_ite/Components/Layout/ScreenFontStyle.js +1 -1
  254. package/src/x_ite/Components/Layout/ScreenGroup.js +18 -23
  255. package/src/x_ite/Components/Lighting/DirectionalLight.js +28 -36
  256. package/src/x_ite/Components/Lighting/PointLight.js +32 -47
  257. package/src/x_ite/Components/Lighting/SpotLight.js +33 -48
  258. package/src/x_ite/Components/Navigation/Billboard.js +49 -56
  259. package/src/x_ite/Components/Navigation/LOD.js +1 -1
  260. package/src/x_ite/Components/Navigation/X3DViewpointNode.js +82 -111
  261. package/src/x_ite/Components/Networking/Anchor.js +10 -4
  262. package/src/x_ite/Components/ParticleSystems/BoundedPhysicsModel.js +6 -6
  263. package/src/x_ite/Components/ParticleSystems/ConeEmitter.js +44 -36
  264. package/src/x_ite/Components/ParticleSystems/ExplosionEmitter.js +26 -17
  265. package/src/x_ite/Components/ParticleSystems/ForcePhysicsModel.js +20 -7
  266. package/src/x_ite/Components/ParticleSystems/ParticleSystem.js +461 -876
  267. package/src/x_ite/Components/ParticleSystems/PointEmitter.js +39 -35
  268. package/src/x_ite/Components/ParticleSystems/PolylineEmitter.js +112 -128
  269. package/src/x_ite/Components/ParticleSystems/SurfaceEmitter.js +105 -112
  270. package/src/x_ite/Components/ParticleSystems/VolumeEmitter.js +138 -176
  271. package/src/x_ite/Components/ParticleSystems/WindPhysicsModel.js +16 -11
  272. package/src/x_ite/Components/ParticleSystems/X3DParticleEmitterNode.js +807 -217
  273. package/src/x_ite/Components/Picking/LinePickSensor.js +31 -39
  274. package/src/x_ite/Components/PointingDeviceSensor/CylinderSensor.js +90 -107
  275. package/src/x_ite/Components/PointingDeviceSensor/PlaneSensor.js +48 -55
  276. package/src/x_ite/Components/PointingDeviceSensor/SphereSensor.js +53 -70
  277. package/src/x_ite/Components/PointingDeviceSensor/TouchSensor.js +8 -15
  278. package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorParallel.js +43 -50
  279. package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorPerspective.js +32 -39
  280. package/src/x_ite/Components/Rendering/ClipPlane.js +3 -11
  281. package/src/x_ite/Components/Rendering/Color.js +12 -37
  282. package/src/x_ite/Components/Rendering/ColorRGBA.js +13 -38
  283. package/src/x_ite/Components/Rendering/IndexedLineSet.js +12 -4
  284. package/src/x_ite/Components/Rendering/LineSet.js +21 -13
  285. package/src/x_ite/Components/Rendering/PointSet.js +21 -13
  286. package/src/x_ite/Components/Rendering/X3DColorNode.js +13 -0
  287. package/src/x_ite/Components/Rendering/X3DComposedGeometryNode.js +13 -5
  288. package/src/x_ite/Components/Rendering/X3DGeometryNode.js +248 -325
  289. package/src/x_ite/Components/Rendering/X3DLineGeometryNode.js +305 -134
  290. package/src/x_ite/Components/Rendering/X3DPointGeometryNode.js +99 -122
  291. package/src/x_ite/Components/RigidBodyPhysics/DoubleAxisHingeJoint.js +24 -38
  292. package/src/x_ite/Components/RigidBodyPhysics/SingleAxisHingeJoint.js +10 -17
  293. package/src/x_ite/Components/Shaders/ComposedShader.js +35 -75
  294. package/src/x_ite/Components/Shaders/FloatVertexAttribute.js +5 -15
  295. package/src/x_ite/Components/Shaders/Matrix3VertexAttribute.js +7 -24
  296. package/src/x_ite/Components/Shaders/Matrix4VertexAttribute.js +7 -24
  297. package/src/x_ite/Components/Shaders/ShaderPart.js +1 -10
  298. package/src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js +219 -209
  299. package/src/x_ite/Components/Shaders/X3DShaderNode.js +1 -1
  300. package/src/x_ite/Components/Shaders/X3DVertexAttributeNode.js +23 -1
  301. package/src/x_ite/Components/Shape/Appearance.js +12 -0
  302. package/src/x_ite/Components/Shape/FillProperties.js +12 -1
  303. package/src/x_ite/Components/Shape/LineProperties.js +33 -1
  304. package/src/x_ite/Components/Shape/PointProperties.js +23 -1
  305. package/src/x_ite/Components/Shape/Shape.js +27 -34
  306. package/src/x_ite/Components/Sound/Sound.js +30 -40
  307. package/src/x_ite/Components/Text/Text.js +6 -20
  308. package/src/x_ite/Components/Texturing/TextureCoordinate.js +5 -26
  309. package/src/x_ite/Components/Texturing/TextureProperties.js +4 -4
  310. package/src/x_ite/Components/Texturing/X3DSingleTextureCoordinateNode.js +21 -0
  311. package/src/x_ite/Components/Texturing/X3DSingleTextureNode.js +5 -4
  312. package/src/x_ite/Components/Texturing/X3DTexture2DNode.js +24 -33
  313. package/src/x_ite/Components/Texturing3D/TextureCoordinate3D.js +5 -26
  314. package/src/x_ite/Components/Texturing3D/TextureCoordinate4D.js +5 -26
  315. package/src/x_ite/Components/Texturing3D/X3DTexture3DNode.js +12 -19
  316. package/src/x_ite/Components/VolumeRendering/X3DVolumeDataNode.js +7 -7
  317. package/src/x_ite/Components.js +2 -2
  318. package/src/x_ite/Fallback.js +9 -3
  319. package/src/x_ite/Fields/SFColor.js +4 -0
  320. package/src/x_ite/Fields/SFColorRGBA.js +4 -0
  321. package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +4 -0
  322. package/src/x_ite/Fields/SFRotation.js +4 -0
  323. package/src/x_ite/Fields/SFString.js +4 -0
  324. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +4 -0
  325. package/src/x_ite/Parser/XMLParser.js +1 -1
  326. package/src/x_ite/Rendering/TextureBuffer.js +43 -36
  327. package/src/x_ite/Rendering/VertexArray.js +101 -0
  328. package/src/x_ite/Rendering/X3DRenderObject.js +123 -144
  329. package/src/x_ite/X3D.js +32 -26
  330. package/src/x_ite.config.js +0 -5
  331. package/src/x_ite.css +200 -162
  332. package/src/x_ite.html +26 -10
  333. package/src/x_ite.js +42 -0
  334. package/x_ite.min.html +26 -10
  335. package/dist/assets/hatching/0.png +0 -0
  336. package/dist/assets/linetype/0.png +0 -0
  337. package/src/assets/hatching/0.png +0 -0
  338. package/src/assets/linetype/0.png +0 -0
  339. package/src/spinner.css +0 -67
  340. package/src/x_ite/Browser/Shape/LineStipples.xcf +0 -0
@@ -0,0 +1,183 @@
1
+ #define BVH_NODE 0
2
+ #define BVH_TRIANGLE 1
3
+ #define BVH_STACK_SIZE 32
4
+
5
+ int bvhNodeIndex = 0;
6
+
7
+ void
8
+ setBVHIndex (const in int index)
9
+ {
10
+ bvhNodeIndex = index;
11
+ }
12
+
13
+ int
14
+ getBVHRoot (const in sampler2D volume, const in int hierarchyIndex, const in int rootIndex)
15
+ {
16
+ return int (texelFetch (volume, rootIndex, 0) .x) + hierarchyIndex;
17
+ }
18
+
19
+ int
20
+ getBVHType (const in sampler2D volume)
21
+ {
22
+ return int (texelFetch (volume, bvhNodeIndex, 0) .x);
23
+ }
24
+
25
+ vec3
26
+ getBVHMin (const in sampler2D volume)
27
+ {
28
+ return texelFetch (volume, bvhNodeIndex + 1, 0) .xyz;
29
+ }
30
+
31
+ vec3
32
+ getBVHMax (const in sampler2D volume)
33
+ {
34
+ return texelFetch (volume, bvhNodeIndex + 2, 0) .xyz;
35
+ }
36
+
37
+ int
38
+ getBVHLeft (const in sampler2D volume, const in int hierarchyIndex)
39
+ {
40
+ return int (texelFetch (volume, bvhNodeIndex, 0) .y) + hierarchyIndex;
41
+ }
42
+
43
+ int
44
+ getBVHRight (const in sampler2D volume, const in int hierarchyIndex)
45
+ {
46
+ return int (texelFetch (volume, bvhNodeIndex, 0) .z) + hierarchyIndex;
47
+ }
48
+
49
+ int
50
+ getBVHTriangle (const in sampler2D volume)
51
+ {
52
+ return int (texelFetch (volume, bvhNodeIndex, 0) .y);
53
+ }
54
+
55
+ /* Ray triangle intersection test */
56
+
57
+ int
58
+ getIntersections (const in sampler2D volume, const in int verticesIndex, const in int hierarchyIndex, const in int rootIndex, const in Line3 line, out vec4 points [ARRAY_SIZE])
59
+ {
60
+ int current = getBVHRoot (volume, hierarchyIndex, rootIndex);
61
+ int count = 0;
62
+ int stackIndex = -1;
63
+ int stack [BVH_STACK_SIZE];
64
+
65
+ while (stackIndex >= 0 || current >= 0)
66
+ {
67
+ if (current >= 0)
68
+ {
69
+ setBVHIndex (current);
70
+
71
+ if (getBVHType (volume) == BVH_NODE)
72
+ {
73
+ // Node
74
+
75
+ if (intersects (getBVHMin (volume), getBVHMax (volume), line))
76
+ {
77
+ stack [++ stackIndex] = current;
78
+
79
+ current = getBVHLeft (volume, hierarchyIndex);
80
+ }
81
+ else
82
+ {
83
+ current = -1;
84
+ }
85
+ }
86
+ else
87
+ {
88
+ // Triangle
89
+
90
+ int t = getBVHTriangle (volume);
91
+ int v = verticesIndex + t;
92
+ vec3 r = vec3 (0.0);
93
+
94
+ vec3 a = texelFetch (volume, v, 0) .xyz;
95
+ vec3 b = texelFetch (volume, v + 1, 0) .xyz;
96
+ vec3 c = texelFetch (volume, v + 2, 0) .xyz;
97
+
98
+ if (intersects (line, a, b, c, r))
99
+ points [count ++] = vec4 (r .z * a + r .x * b + r .y * c, 1.0);
100
+
101
+ current = -1;
102
+ }
103
+ }
104
+ else
105
+ {
106
+ setBVHIndex (stack [stackIndex --]);
107
+
108
+ current = getBVHRight (volume, hierarchyIndex);
109
+ }
110
+ }
111
+
112
+ return count;
113
+ }
114
+
115
+ int
116
+ getIntersections (const in sampler2D volume, const in int verticesIndex, const in int normalsIndex, const in int hierarchyIndex, const in int rootIndex, const in Line3 line, out vec4 points [ARRAY_SIZE], out vec3 normals [ARRAY_SIZE])
117
+ {
118
+ int current = getBVHRoot (volume, hierarchyIndex, rootIndex);
119
+ int count = 0;
120
+ int stackIndex = -1;
121
+ int stack [BVH_STACK_SIZE];
122
+
123
+ while (stackIndex >= 0 || current >= 0)
124
+ {
125
+ if (current >= 0)
126
+ {
127
+ setBVHIndex (current);
128
+
129
+ if (getBVHType (volume) == BVH_NODE)
130
+ {
131
+ // Node
132
+
133
+ if (intersects (getBVHMin (volume), getBVHMax (volume), line))
134
+ {
135
+ stack [++ stackIndex] = current;
136
+
137
+ current = getBVHLeft (volume, hierarchyIndex);
138
+ }
139
+ else
140
+ {
141
+ current = -1;
142
+ }
143
+ }
144
+ else
145
+ {
146
+ // Triangle
147
+
148
+ int t = getBVHTriangle (volume);
149
+ int v = verticesIndex + t;
150
+ vec3 r = vec3 (0.0);
151
+
152
+ vec3 a = texelFetch (volume, v, 0) .xyz;
153
+ vec3 b = texelFetch (volume, v + 1, 0) .xyz;
154
+ vec3 c = texelFetch (volume, v + 2, 0) .xyz;
155
+
156
+ if (intersects (line, a, b, c, r))
157
+ {
158
+ points [count] = vec4 (r .z * a + r .x * b + r .y * c, 1.0);
159
+
160
+ int n = normalsIndex + t;
161
+
162
+ vec3 n0 = texelFetch (volume, n, 0) .xyz;
163
+ vec3 n1 = texelFetch (volume, n + 1, 0) .xyz;
164
+ vec3 n2 = texelFetch (volume, n + 2, 0) .xyz;
165
+
166
+ normals [count] = save_normalize (r .z * n0 + r .x * n1 + r .y * n2);
167
+
168
+ ++ count;
169
+ }
170
+
171
+ current = -1;
172
+ }
173
+ }
174
+ else
175
+ {
176
+ setBVHIndex (stack [stackIndex --]);
177
+
178
+ current = getBVHRight (volume, hierarchyIndex);
179
+ }
180
+ }
181
+
182
+ return count;
183
+ }
@@ -0,0 +1,47 @@
1
+ bool
2
+ intersects (const in vec3 min, const in vec3 max, const in Line3 line)
3
+ {
4
+ vec3 intersection;
5
+
6
+ // front
7
+
8
+ if (intersects (plane3 (max, vec3 (0.0, 0.0, 1.0)), line, intersection))
9
+ {
10
+ if (all (greaterThanEqual (vec4 (intersection .xy, max .xy), vec4 (min .xy, intersection .xy))))
11
+ return true;
12
+ }
13
+
14
+ // back
15
+
16
+ if (intersects (plane3 (min, vec3 (0.0, 0.0, -1.0)), line, intersection))
17
+ {
18
+ if (all (greaterThanEqual (vec4 (intersection .xy, max .xy), vec4 (min .xy, intersection .xy))))
19
+ return true;
20
+ }
21
+
22
+ // top
23
+
24
+ if (intersects (plane3 (max, vec3 (0.0, 1.0, 0.0)), line, intersection))
25
+ {
26
+ if (all (greaterThanEqual (vec4 (intersection .xz, max .xz), vec4 (min .xz, intersection .xz))))
27
+ return true;
28
+ }
29
+
30
+ // bottom
31
+
32
+ if (intersects (plane3 (min, vec3 (0.0, -1.0, 0.0)), line, intersection))
33
+ {
34
+ if (all (greaterThanEqual (vec4 (intersection .xz, max .xz), vec4 (min .xz, intersection .xz))))
35
+ return true;
36
+ }
37
+
38
+ // right
39
+
40
+ if (intersects (plane3 (max, vec3 (1.0, 0.0, 0.0)), line, intersection))
41
+ {
42
+ if (all (greaterThanEqual (vec4 (intersection .yz, max .yz), vec4 (min .yz, intersection .yz))))
43
+ return true;
44
+ }
45
+
46
+ return false;
47
+ }
@@ -0,0 +1,66 @@
1
+ /* -*- Mode: JavaScript; coding: utf-8; tab-width: 3; indent-tabs-mode: tab; c-basic-offset: 3 -*-
2
+ *******************************************************************************
3
+ *
4
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5
+ *
6
+ * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011.
7
+ *
8
+ * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
9
+ *
10
+ * The copyright notice above does not evidence any actual of intended
11
+ * publication of such source code, and is an unpublished work by create3000.
12
+ * This material contains CONFIDENTIAL INFORMATION that is the property of
13
+ * create3000.
14
+ *
15
+ * No permission is granted to copy, distribute, or create derivative works from
16
+ * the contents of this software, in whole or in part, without the prior written
17
+ * permission of create3000.
18
+ *
19
+ * NON-MILITARY USE ONLY
20
+ *
21
+ * All create3000 software are effectively free software with a non-military use
22
+ * restriction. It is free. Well commented source is provided. You may reuse the
23
+ * source in any way you please with the exception anything that uses it must be
24
+ * marked to indicate is contains 'non-military use only' components.
25
+ *
26
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
27
+ *
28
+ * Copyright 2015, 2016 Holger Seelig <holger.seelig@yahoo.de>.
29
+ *
30
+ * This file is part of the X_ITE Project.
31
+ *
32
+ * X_ITE is free software: you can redistribute it and/or modify it under the
33
+ * terms of the GNU General Public License version 3 only, as published by the
34
+ * Free Software Foundation.
35
+ *
36
+ * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
37
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
38
+ * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
39
+ * details (a copy is included in the LICENSE file that accompanied this code).
40
+ *
41
+ * You should have received a copy of the GNU General Public License version 3
42
+ * along with X_ITE. If not, see <http://www.gnu.org/licenses/gpl.html> for a
43
+ * copy of the GPLv3 License.
44
+ *
45
+ * For Silvio, Joy and Adi.
46
+ *
47
+ ******************************************************************************/
48
+
49
+
50
+ define (function ()
51
+ {
52
+ "use strict";
53
+
54
+ let i = 0;
55
+
56
+ const GeometryTypes = {
57
+ POINT: i ++,
58
+ LINE: i ++,
59
+ TRIANGLE: i ++,
60
+ QUAD: i ++,
61
+ SPRITE: i ++,
62
+ GEOMETRY: i ++,
63
+ };
64
+
65
+ return GeometryTypes;
66
+ });
@@ -0,0 +1,55 @@
1
+ struct Line3 {
2
+ vec3 point;
3
+ vec3 direction;
4
+ };
5
+
6
+ // Line3
7
+ // line3 (const in vec3 point1, const in vec3 point2)
8
+ // {
9
+ // return Line3 (point1, normalize (point2 - point1));
10
+ // }
11
+
12
+ /* Line intersect triangle */
13
+
14
+ bool
15
+ intersects (const in Line3 line, const in vec3 a, const in vec3 b, const in vec3 c, out vec3 r)
16
+ {
17
+ // find vectors for two edges sharing vert0
18
+ vec3 edge1 = b - a;
19
+ vec3 edge2 = c - a;
20
+
21
+ // begin calculating determinant - also used to calculate U parameter
22
+ vec3 pvec = cross (line .direction, edge2);
23
+
24
+ // if determinant is near zero, ray lies in plane of triangle
25
+ float det = dot (edge1, pvec);
26
+
27
+ // Non culling intersection
28
+
29
+ if (det == 0.0)
30
+ return false;
31
+
32
+ float inv_det = 1.0 / det;
33
+
34
+ // calculate distance from vert0 to ray point
35
+ vec3 tvec = line .point - a;
36
+
37
+ // calculate U parameter and test bounds
38
+ float u = dot (tvec, pvec) * inv_det;
39
+
40
+ if (u < 0.0 || u > 1.0)
41
+ return false;
42
+
43
+ // prepare to test V parameter
44
+ vec3 qvec = cross (tvec, edge1);
45
+
46
+ // calculate V parameter and test bounds
47
+ float v = dot (line .direction, qvec) * inv_det;
48
+
49
+ if (v < 0.0 || u + v > 1.0)
50
+ return false;
51
+
52
+ r = vec3 (u, v, 1.0 - u - v);
53
+
54
+ return true;
55
+ }
@@ -0,0 +1,160 @@
1
+ struct Plane3
2
+ {
3
+ vec3 normal;
4
+ float distanceFromOrigin;
5
+ };
6
+
7
+ Plane3
8
+ plane3 (const in vec3 point, const in vec3 normal)
9
+ {
10
+ return Plane3 (normal, dot (normal, point));
11
+ }
12
+
13
+ float
14
+ plane_distance (const in Plane3 plane, const in vec3 point)
15
+ {
16
+ return dot (point, plane .normal) - plane .distanceFromOrigin;
17
+ }
18
+
19
+ /* Plane intersect line */
20
+ bool
21
+ intersects (const in Plane3 plane, const in Line3 line, out vec3 point)
22
+ {
23
+ // Check if the line is parallel to the plane.
24
+ float theta = dot (line .direction, plane .normal);
25
+
26
+ // Plane and line are parallel.
27
+ if (theta == 0.0)
28
+ return false;
29
+
30
+ // Plane and line are not parallel. The intersection point can be calculated now.
31
+ float t = (plane .distanceFromOrigin - dot (plane .normal, line .point)) / theta;
32
+
33
+ point = line .point + line .direction * t;
34
+
35
+ return true;
36
+ }
37
+
38
+ /* Find find the first point that is farther to the plane than value. */
39
+ // int
40
+ // upper_bound (const in vec4 points [ARRAY_SIZE], in int count, const in float value, const in Plane3 plane)
41
+ // {
42
+ // int first = 0;
43
+ // int step = 0;
44
+
45
+ // while (count > 0)
46
+ // {
47
+ // int index = first;
48
+
49
+ // step = count >> 1;
50
+
51
+ // index += step;
52
+
53
+ // if (value < plane_distance (plane, points [index] .xyz))
54
+ // {
55
+ // count = step;
56
+ // }
57
+ // else
58
+ // {
59
+ // first = ++ index;
60
+ // count -= step + 1;
61
+ // }
62
+ // }
63
+
64
+ // return first;
65
+ // }
66
+
67
+ /* CombSort: sort points in distance to a plane. */
68
+ void
69
+ sort (inout vec4 points [ARRAY_SIZE], const in int count, const in Plane3 plane)
70
+ {
71
+ const float shrink = 1.0 / 1.3;
72
+
73
+ int gap = count;
74
+ bool exchanged = true;
75
+
76
+ while (exchanged)
77
+ {
78
+ gap = int (float (gap) * shrink);
79
+
80
+ if (gap <= 1)
81
+ {
82
+ exchanged = false;
83
+ gap = 1;
84
+ }
85
+
86
+ for (int i = 0, l = count - gap; i < l; ++ i)
87
+ {
88
+ int j = gap + i;
89
+
90
+ if (plane_distance (plane, points [i] .xyz) > plane_distance (plane, points [j] .xyz))
91
+ {
92
+ vec4 tmp1 = points [i];
93
+ points [i] = points [j];
94
+ points [j] = tmp1;
95
+
96
+ exchanged = true;
97
+ }
98
+ }
99
+ }
100
+ }
101
+
102
+
103
+ // /* CombSort: sort points and normals in distance to a plane. */
104
+ // void
105
+ // sort (inout vec4 points [ARRAY_SIZE], inout vec3 normals [ARRAY_SIZE], const in int count, const in Plane3 plane)
106
+ // {
107
+ // const float shrink = 1.0 / 1.3;
108
+
109
+ // int gap = count;
110
+ // bool exchanged = true;
111
+
112
+ // while (exchanged)
113
+ // {
114
+ // gap = int (float (gap) * shrink);
115
+
116
+ // if (gap <= 1)
117
+ // {
118
+ // exchanged = false;
119
+ // gap = 1;
120
+ // }
121
+
122
+ // for (int i = 0, l = count - gap; i < l; ++ i)
123
+ // {
124
+ // int j = gap + i;
125
+
126
+ // if (plane_distance (plane, points [i] .xyz) > plane_distance (plane, points [j] .xyz))
127
+ // {
128
+ // vec4 tmp1 = points [i];
129
+ // points [i] = points [j];
130
+ // points [j] = tmp1;
131
+
132
+ // vec3 tmp2 = normals [i];
133
+ // normals [i] = normals [j];
134
+ // normals [j] = tmp2;
135
+
136
+ // exchanged = true;
137
+ // }
138
+ // }
139
+ // }
140
+ // }
141
+
142
+ int
143
+ min_index (const in vec4 points [ARRAY_SIZE], const in int count, const in float value, const in Plane3 plane)
144
+ {
145
+ int index = -1;
146
+ float dist = 1000000.0;
147
+
148
+ for (int i = 0; i < count; ++ i)
149
+ {
150
+ float d = plane_distance (plane, points [i] .xyz);
151
+
152
+ if (d >= value && d < dist)
153
+ {
154
+ dist = d;
155
+ index = i;
156
+ }
157
+ }
158
+
159
+ return index;
160
+ }
@@ -56,6 +56,8 @@ function ($,
56
56
  {
57
57
  "use strict";
58
58
 
59
+ const CONTEXT_MENU_TIME = 1200;
60
+
59
61
  function PointingDevice (executionContext)
60
62
  {
61
63
  X3DBaseNode .call (this, executionContext);
@@ -96,9 +98,6 @@ function ($,
96
98
 
97
99
  browser .getElement () .focus ();
98
100
 
99
- if (browser .getContextMenu () .getActive ())
100
- return;
101
-
102
101
  if (browser .getShiftKey () && browser .getControlKey ())
103
102
  return;
104
103
 
@@ -190,6 +189,18 @@ function ($,
190
189
  event .pageY = touches [0] .pageY;
191
190
 
192
191
  this .mousedown (event);
192
+
193
+ // Show context menu on long tab.
194
+
195
+ const nearestHit = this .getBrowser () .getNearestHit ();
196
+
197
+ if (! nearestHit || nearestHit .sensors .size === 0)
198
+ {
199
+ this .touchX = event .pageX;
200
+ this .touchY = event .pageY;
201
+ this .touchTimeout = setTimeout (this .showContextMenu .bind (this, event), CONTEXT_MENU_TIME);
202
+ }
203
+
193
204
  break;
194
205
  }
195
206
  case 2:
@@ -202,7 +213,10 @@ function ($,
202
213
  touchend: function (event)
203
214
  {
204
215
  event .button = 0;
216
+
205
217
  this .mouseup (event);
218
+
219
+ clearTimeout (this .touchTimeout);
206
220
  },
207
221
  touchmove: function (event)
208
222
  {
@@ -219,6 +233,10 @@ function ($,
219
233
  event .pageY = touches [0] .pageY;
220
234
 
221
235
  this .mousemove (event);
236
+
237
+ if (Math .hypot (this .touchX - event .pageX, this .touchY - event .pageY) > 7)
238
+ clearTimeout (this .touchTimeout);
239
+
222
240
  break;
223
241
  }
224
242
  }
@@ -233,6 +251,7 @@ function ($,
233
251
  {
234
252
  this .isOver = true;
235
253
  this .cursor = browser .getCursor ();
254
+
236
255
  browser .setCursor ("HAND");
237
256
  }
238
257
  }
@@ -241,6 +260,7 @@ function ($,
241
260
  if (this .isOver)
242
261
  {
243
262
  this .isOver = false;
263
+
244
264
  browser .setCursor (this .cursor);
245
265
  }
246
266
  }
@@ -259,6 +279,10 @@ function ($,
259
279
 
260
280
  this .onmotion (x, y);
261
281
  },
282
+ showContextMenu: function (event)
283
+ {
284
+ this .getBrowser () .getContextMenu () .show (event);
285
+ },
262
286
  });
263
287
 
264
288
  return PointingDevice;