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.
- package/.vscode/settings.json +12 -5
- package/.vscode/tasks.json +21 -0
- package/Makefile +10 -15
- package/README.md +6 -11
- package/build/bin/dist.pl +0 -6
- package/build/bin/version.pl +1 -4
- package/dist/assets/components/annotation.js +2 -2
- package/dist/assets/components/annotation.min.js +1 -1
- package/dist/assets/components/cad-geometry.js +2 -2
- package/dist/assets/components/cad-geometry.min.js +1 -1
- package/dist/assets/components/cube-map-texturing.js +6 -19
- package/dist/assets/components/cube-map-texturing.min.js +1 -1
- package/dist/assets/components/dis.js +2 -2
- package/dist/assets/components/dis.min.js +1 -1
- package/dist/assets/components/event-utilities.js +3 -3
- package/dist/assets/components/event-utilities.min.js +1 -1
- package/dist/assets/components/geometry2d.js +4 -4
- package/dist/assets/components/geometry2d.min.js +1 -1
- package/dist/assets/components/geospatial.js +32 -1685
- package/dist/assets/components/geospatial.min.js +1 -1
- package/dist/assets/components/h-anim.js +70 -77
- package/dist/assets/components/h-anim.min.js +1 -1
- package/dist/assets/components/key-device-sensor.js +3 -3
- package/dist/assets/components/key-device-sensor.min.js +1 -1
- package/dist/assets/components/layout.js +38 -52
- package/dist/assets/components/layout.min.js +1 -1
- package/dist/assets/components/nurbs.js +277 -194
- package/dist/assets/components/nurbs.min.js +1 -1
- package/dist/assets/components/particle-systems.js +1918 -1658
- package/dist/assets/components/particle-systems.min.js +1 -1
- package/dist/assets/components/picking.js +33 -41
- package/dist/assets/components/picking.min.js +1 -1
- package/dist/assets/components/projective-texture-mapping.js +72 -86
- package/dist/assets/components/projective-texture-mapping.min.js +1 -1
- package/dist/assets/components/rigid-body-physics.js +36 -57
- package/dist/assets/components/rigid-body-physics.min.js +1 -1
- package/dist/assets/components/scripting.js +2 -2
- package/dist/assets/components/scripting.min.js +1 -1
- package/dist/assets/components/texturing-3d.js +26 -75
- package/dist/assets/components/texturing-3d.min.js +3 -3
- package/dist/assets/components/volume-rendering.js +10 -10
- package/dist/assets/components/volume-rendering.min.js +1 -1
- package/dist/assets/components/x_ite.js +2 -2
- package/dist/assets/components/x_ite.min.js +1 -1
- package/dist/assets/linetype/1.png +0 -0
- package/dist/assets/linetype/10.png +0 -0
- package/dist/assets/linetype/11.png +0 -0
- package/dist/assets/linetype/12.png +0 -0
- package/dist/assets/linetype/13.png +0 -0
- package/dist/assets/linetype/14.png +0 -0
- package/dist/assets/linetype/15.png +0 -0
- package/dist/assets/linetype/16.png +0 -0
- package/dist/assets/linetype/2.png +0 -0
- package/dist/assets/linetype/3.png +0 -0
- package/dist/assets/linetype/4.png +0 -0
- package/dist/assets/linetype/5.png +0 -0
- package/dist/assets/linetype/6.png +0 -0
- package/dist/assets/linetype/7.png +0 -0
- package/dist/assets/linetype/8.png +0 -0
- package/dist/assets/linetype/9.png +0 -0
- package/dist/assets/shaders/webgl1/Line.fs +0 -21
- package/dist/assets/shaders/webgl1/Line.vs +0 -10
- package/dist/assets/shaders/webgl1/PBR.vs +1 -1
- package/dist/assets/shaders/webgl2/Depth.vs +29 -1
- package/dist/assets/shaders/webgl2/Gouraud.vs +31 -3
- package/dist/assets/shaders/webgl2/Line.fs +24 -12
- package/dist/assets/shaders/webgl2/Line.vs +36 -11
- package/dist/assets/shaders/webgl2/LineTransform.fs +4 -0
- package/dist/assets/shaders/webgl2/LineTransform.vs +57 -0
- package/dist/assets/shaders/webgl2/PBR.vs +35 -7
- package/dist/assets/shaders/webgl2/Phong.vs +31 -3
- package/dist/assets/shaders/webgl2/Point.vs +29 -1
- package/dist/assets/shaders/webgl2/Unlit.vs +31 -3
- package/dist/example.html +6 -6
- package/dist/x_ite.css +180 -208
- package/dist/x_ite.js +16477 -16629
- package/dist/x_ite.min.js +17 -17
- package/dist/x_ite.zip +0 -0
- package/docs/404.md +6 -0
- package/docs/Accessing-the-External-Browser.md +20 -14
- package/docs/Browser-Support.md +6 -0
- package/docs/Custom-Shaders.md +17 -24
- package/docs/Features.md +7 -1
- package/docs/Gemfile +44 -0
- package/docs/Gemfile.lock +122 -0
- package/docs/Glossary.md +6 -0
- package/docs/How-To-Configure-Your-Web-Server.md +6 -0
- package/docs/Supported-Nodes.md +9 -1
- package/docs/What's-New.md +31 -0
- package/docs/XHTML-DOM-Integration.md +6 -0
- package/docs/_config.yml +1 -1
- package/docs/assets/css/main.scss +26 -0
- package/docs/index.md +38 -46
- package/docs/reference/Browser-Services.md +9 -3
- package/docs/reference/Constants-Services.md +6 -0
- package/docs/reference/ECMAScript-Object-and-Function-Definitions.md +6 -0
- package/docs/reference/Field-Services-and-Objects.md +6 -0
- package/docs/reference/Prototype-Services.md +6 -0
- package/docs/reference/Route-Services.md +6 -0
- package/docs/reference/Scene-Services.md +8 -2
- package/docs/reference/Script-Node-Authoring-Interface.md +7 -1
- package/docs/tutorials/Adding-backgrounds.md +6 -0
- package/docs/tutorials/Adding-fog.md +6 -0
- package/docs/tutorials/Adding-sound.md +6 -0
- package/docs/tutorials/Animating-transforms.md +6 -0
- package/docs/tutorials/Basic-Nodes.md +6 -0
- package/docs/tutorials/Building-a-X3D-world.md +6 -0
- package/docs/tutorials/Building-elevation-grids.md +6 -0
- package/docs/tutorials/Building-extruded-shapes.md +6 -0
- package/docs/tutorials/Building-primitive-shapes.md +6 -0
- package/docs/tutorials/Building-shapes-out-of-points,-lines,-and-faces.md +6 -0
- package/docs/tutorials/Controlling-appearance-with-materials.md +6 -0
- package/docs/tutorials/Controlling-color-on-coordinate-based-geometry.md +6 -0
- package/docs/tutorials/Controlling-detail.md +6 -0
- package/docs/tutorials/Controlling-how-textures-are-mapped.md +6 -0
- package/docs/tutorials/Controlling-navigation.md +6 -0
- package/docs/tutorials/Controlling-shading-on-coordinate-based-geometry.md +6 -0
- package/docs/tutorials/Controlling-the-viewpoint.md +6 -0
- package/docs/tutorials/Creating-new-node-types.md +6 -0
- package/docs/tutorials/Grouping-nodes.md +6 -0
- package/docs/tutorials/Hello,-World!.md +6 -0
- package/docs/tutorials/Improving-Performance.md +6 -0
- package/docs/tutorials/Increasing-Rendering-Speed.md +6 -0
- package/docs/tutorials/Introducing-X3D.md +6 -0
- package/docs/tutorials/Introducing-animation.md +6 -0
- package/docs/tutorials/Introducing-script-use.md +6 -0
- package/docs/tutorials/Lighting-your-world.md +6 -0
- package/docs/tutorials/Mapping-textures.md +6 -0
- package/docs/tutorials/Naming-nodes.md +6 -0
- package/docs/tutorials/Providing-information-about-your-world.md +6 -0
- package/docs/tutorials/Sensing-the-viewer.md +6 -0
- package/docs/tutorials/Sensing-viewer-actions.md +6 -0
- package/docs/tutorials/Transforming-Shapes.md +6 -0
- package/docs/tutorials/Writing-program-scripts-with-ECMAScript.md +6 -0
- package/docs/tutorials/index.md +6 -0
- package/package.json +6 -7
- package/src/assets/components/geometry2d.js +1 -1
- package/src/assets/components/key-device-sensor.js +1 -1
- package/src/assets/components/layout.js +1 -1
- package/src/assets/components/particle-systems.js +1 -1
- package/src/assets/components/volume-rendering.js +1 -1
- package/src/assets/linetype/1.png +0 -0
- package/src/assets/linetype/10.png +0 -0
- package/src/assets/linetype/11.png +0 -0
- package/src/assets/linetype/12.png +0 -0
- package/src/assets/linetype/13.png +0 -0
- package/src/assets/linetype/14.png +0 -0
- package/src/assets/linetype/15.png +0 -0
- package/src/assets/linetype/16.png +0 -0
- package/src/assets/linetype/2.png +0 -0
- package/src/assets/linetype/3.png +0 -0
- package/src/assets/linetype/4.png +0 -0
- package/src/assets/linetype/5.png +0 -0
- package/src/assets/linetype/6.png +0 -0
- package/src/assets/linetype/7.png +0 -0
- package/src/assets/linetype/8.png +0 -0
- package/src/assets/linetype/9.png +0 -0
- package/src/assets/shaders/Types.glsl +1 -9
- package/src/assets/shaders/webgl1/Line.fs +3 -28
- package/src/assets/shaders/webgl1/Line.vs +5 -19
- package/src/assets/shaders/webgl1/PBR.vs +1 -1
- package/src/assets/shaders/webgl1/Point.vs +2 -3
- package/src/assets/shaders/webgl2/Depth.vs +4 -1
- package/src/assets/shaders/webgl2/Gouraud.vs +5 -3
- package/src/assets/shaders/webgl2/Line.fs +11 -17
- package/src/assets/shaders/webgl2/Line.vs +16 -20
- package/src/assets/shaders/webgl2/LineTransform.fs +6 -0
- package/src/assets/shaders/webgl2/LineTransform.vs +77 -0
- package/src/assets/shaders/webgl2/PBR.vs +10 -7
- package/src/assets/shaders/webgl2/Phong.vs +6 -3
- package/src/assets/shaders/webgl2/Point.vs +6 -6
- package/src/assets/shaders/webgl2/Unlit.vs +6 -3
- package/src/assets/shaders/webgl2/include/Line2.glsl +20 -0
- package/src/assets/shaders/webgl2/include/Particle.glsl +36 -0
- package/src/example.html +6 -6
- package/src/standard/Math/Algorithm.js +12 -28
- package/src/standard/Math/Geometry/Plane3.js +0 -2
- package/src/standard/Math/Geometry/ViewVolume.js +88 -83
- package/src/standard/Math/Numbers/Color3.js +6 -0
- package/src/standard/Math/Numbers/Color4.js +7 -0
- package/src/standard/Math/Numbers/Complex.js +5 -0
- package/src/standard/Math/Numbers/Matrix2.js +20 -2
- package/src/standard/Math/Numbers/Matrix3.js +129 -110
- package/src/standard/Math/Numbers/Matrix4.js +138 -119
- package/src/standard/Math/Numbers/Quaternion.js +7 -0
- package/src/standard/Math/Numbers/Rotation4.js +7 -0
- package/src/standard/Math/Numbers/Vector2.js +8 -5
- package/src/standard/Math/Numbers/Vector3.js +16 -10
- package/src/standard/Math/Numbers/Vector4.js +12 -7
- package/src/standard/Math/Utility/BVH.js +45 -17
- package/src/tests.js +6 -1
- package/src/x_ite/Base/X3DBaseNode.js +22 -11
- package/src/x_ite/Base/X3DField.js +1 -1
- package/src/x_ite/Browser/Core/BrowserOptions.js +2 -2
- package/src/x_ite/Browser/Core/BrowserTimings.js +4 -2
- package/src/x_ite/Browser/Core/Context.js +185 -0
- package/src/x_ite/Browser/Core/ContextMenu.js +299 -193
- package/src/x_ite/Browser/Core/Notification.js +1 -0
- package/src/x_ite/Browser/Core/X3DCoreContext.js +35 -146
- package/src/x_ite/Browser/Layout/ScreenText.js +11 -4
- package/src/x_ite/Browser/Layout/X3DLayoutContext.js +4 -15
- package/src/x_ite/Browser/Navigation/ExamineViewer.js +12 -19
- package/src/x_ite/Browser/Navigation/LookAtViewer.js +0 -3
- package/src/x_ite/Browser/Navigation/PlaneViewer.js +0 -3
- package/src/x_ite/Browser/Navigation/X3DFlyViewer.js +14 -7
- package/src/x_ite/Browser/Navigation/X3DViewer.js +12 -20
- package/src/x_ite/Browser/Networking/X3DNetworkingContext.js +11 -7
- package/src/x_ite/Browser/ParticleSystems/BVH.glsl +183 -0
- package/src/x_ite/Browser/ParticleSystems/Box3.glsl +47 -0
- package/src/x_ite/Browser/ParticleSystems/GeometryTypes.js +66 -0
- package/src/x_ite/Browser/ParticleSystems/Line3.glsl +55 -0
- package/src/x_ite/Browser/ParticleSystems/Plane3.glsl +160 -0
- package/src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js +27 -3
- package/src/x_ite/Browser/PointingDeviceSensor/X3DPointingDeviceSensorContext.js +37 -37
- package/src/x_ite/Browser/Rendering/X3DRenderingContext.js +19 -13
- package/src/x_ite/Browser/Shaders/Shader.js +33 -12
- package/src/x_ite/Browser/Shaders/ShaderSource.js +6 -0
- package/src/x_ite/Browser/Shaders/ShaderTest.js +16 -10
- package/src/x_ite/Browser/Shape/X3DShapeContext.js +50 -9
- package/src/x_ite/Browser/Text/X3DTextContext.js +4 -13
- package/src/x_ite/Browser/Texturing/X3DTexturingContext.js +23 -33
- package/src/x_ite/Browser/Texturing3D/DICOMParser.js +2 -2
- package/src/x_ite/Browser/Time/X3DTimeContext.js +3 -1
- package/src/x_ite/Browser/VERSION.js +1 -1
- package/src/x_ite/Browser/X3DBrowser.js +7 -6
- package/src/x_ite/Browser/X3DBrowserContext.js +35 -10
- package/src/x_ite/Components/Core/X3DNode.js +4 -0
- package/src/x_ite/Components/Core/X3DPrototypeInstance.js +0 -2
- package/src/x_ite/Components/CubeMapTexturing/ComposedCubeMapTexture.js +3 -4
- package/src/x_ite/Components/CubeMapTexturing/GeneratedCubeMapTexture.js +1 -12
- package/src/x_ite/Components/CubeMapTexturing/ImageCubeMapTexture.js +0 -1
- package/src/x_ite/Components/EnvironmentalEffects/TextureBackground.js +1 -1
- package/src/x_ite/Components/EnvironmentalEffects/X3DBackgroundNode.js +76 -77
- package/src/x_ite/Components/EnvironmentalEffects/X3DFogObject.js +2 -9
- package/src/x_ite/Components/EnvironmentalSensor/ProximitySensor.js +51 -65
- package/src/x_ite/Components/EventUtilities/X3DSequencerNode.js +1 -1
- package/src/x_ite/Components/Followers/X3DChaserNode.js +18 -32
- package/src/x_ite/Components/Followers/X3DDamperNode.js +1 -6
- package/src/x_ite/Components/Geometry2D/TriangleSet2D.js +1 -1
- package/src/x_ite/Components/Geometry3D/ElevationGrid.js +12 -4
- package/src/x_ite/Components/Geometry3D/IndexedFaceSet.js +4 -4
- package/src/x_ite/Components/Geospatial/GeoCoordinate.js +10 -27
- package/src/x_ite/Components/Geospatial/GeoPositionInterpolator.js +5 -10
- package/src/x_ite/Components/Geospatial/GeoTouchSensor.js +9 -16
- package/src/x_ite/Components/Geospatial/GeoTransform.js +6 -18
- package/src/x_ite/Components/Geospatial/X3DGeospatialObject.js +20 -27
- package/src/x_ite/Components/Grouping/X3DGroupingNode.js +8 -8
- package/src/x_ite/Components/Grouping/X3DTransformNode.js +0 -4
- package/src/x_ite/Components/HAnim/HAnimHumanoid.js +68 -75
- package/src/x_ite/Components/Interpolation/OrientationInterpolator.js +4 -11
- package/src/x_ite/Components/Interpolation/X3DInterpolatorNode.js +1 -1
- package/src/x_ite/Components/Layout/LayoutGroup.js +4 -9
- package/src/x_ite/Components/Layout/ScreenFontStyle.js +1 -1
- package/src/x_ite/Components/Layout/ScreenGroup.js +18 -23
- package/src/x_ite/Components/Lighting/DirectionalLight.js +28 -36
- package/src/x_ite/Components/Lighting/PointLight.js +32 -47
- package/src/x_ite/Components/Lighting/SpotLight.js +33 -48
- package/src/x_ite/Components/Navigation/Billboard.js +49 -56
- package/src/x_ite/Components/Navigation/LOD.js +1 -1
- package/src/x_ite/Components/Navigation/X3DViewpointNode.js +82 -111
- package/src/x_ite/Components/Networking/Anchor.js +10 -4
- package/src/x_ite/Components/ParticleSystems/BoundedPhysicsModel.js +6 -6
- package/src/x_ite/Components/ParticleSystems/ConeEmitter.js +44 -36
- package/src/x_ite/Components/ParticleSystems/ExplosionEmitter.js +26 -17
- package/src/x_ite/Components/ParticleSystems/ForcePhysicsModel.js +20 -7
- package/src/x_ite/Components/ParticleSystems/ParticleSystem.js +461 -876
- package/src/x_ite/Components/ParticleSystems/PointEmitter.js +39 -35
- package/src/x_ite/Components/ParticleSystems/PolylineEmitter.js +112 -128
- package/src/x_ite/Components/ParticleSystems/SurfaceEmitter.js +105 -112
- package/src/x_ite/Components/ParticleSystems/VolumeEmitter.js +138 -176
- package/src/x_ite/Components/ParticleSystems/WindPhysicsModel.js +16 -11
- package/src/x_ite/Components/ParticleSystems/X3DParticleEmitterNode.js +807 -217
- package/src/x_ite/Components/Picking/LinePickSensor.js +31 -39
- package/src/x_ite/Components/PointingDeviceSensor/CylinderSensor.js +90 -107
- package/src/x_ite/Components/PointingDeviceSensor/PlaneSensor.js +48 -55
- package/src/x_ite/Components/PointingDeviceSensor/SphereSensor.js +53 -70
- package/src/x_ite/Components/PointingDeviceSensor/TouchSensor.js +8 -15
- package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorParallel.js +43 -50
- package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorPerspective.js +32 -39
- package/src/x_ite/Components/Rendering/ClipPlane.js +3 -11
- package/src/x_ite/Components/Rendering/Color.js +12 -37
- package/src/x_ite/Components/Rendering/ColorRGBA.js +13 -38
- package/src/x_ite/Components/Rendering/IndexedLineSet.js +12 -4
- package/src/x_ite/Components/Rendering/LineSet.js +21 -13
- package/src/x_ite/Components/Rendering/PointSet.js +21 -13
- package/src/x_ite/Components/Rendering/X3DColorNode.js +13 -0
- package/src/x_ite/Components/Rendering/X3DComposedGeometryNode.js +13 -5
- package/src/x_ite/Components/Rendering/X3DGeometryNode.js +248 -325
- package/src/x_ite/Components/Rendering/X3DLineGeometryNode.js +305 -134
- package/src/x_ite/Components/Rendering/X3DPointGeometryNode.js +99 -122
- package/src/x_ite/Components/RigidBodyPhysics/DoubleAxisHingeJoint.js +24 -38
- package/src/x_ite/Components/RigidBodyPhysics/SingleAxisHingeJoint.js +10 -17
- package/src/x_ite/Components/Shaders/ComposedShader.js +35 -75
- package/src/x_ite/Components/Shaders/FloatVertexAttribute.js +5 -15
- package/src/x_ite/Components/Shaders/Matrix3VertexAttribute.js +7 -24
- package/src/x_ite/Components/Shaders/Matrix4VertexAttribute.js +7 -24
- package/src/x_ite/Components/Shaders/ShaderPart.js +1 -10
- package/src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js +219 -209
- package/src/x_ite/Components/Shaders/X3DShaderNode.js +1 -1
- package/src/x_ite/Components/Shaders/X3DVertexAttributeNode.js +23 -1
- package/src/x_ite/Components/Shape/Appearance.js +12 -0
- package/src/x_ite/Components/Shape/FillProperties.js +12 -1
- package/src/x_ite/Components/Shape/LineProperties.js +33 -1
- package/src/x_ite/Components/Shape/PointProperties.js +23 -1
- package/src/x_ite/Components/Shape/Shape.js +27 -34
- package/src/x_ite/Components/Sound/Sound.js +30 -40
- package/src/x_ite/Components/Text/Text.js +6 -20
- package/src/x_ite/Components/Texturing/TextureCoordinate.js +5 -26
- package/src/x_ite/Components/Texturing/TextureProperties.js +4 -4
- package/src/x_ite/Components/Texturing/X3DSingleTextureCoordinateNode.js +21 -0
- package/src/x_ite/Components/Texturing/X3DSingleTextureNode.js +5 -4
- package/src/x_ite/Components/Texturing/X3DTexture2DNode.js +24 -33
- package/src/x_ite/Components/Texturing3D/TextureCoordinate3D.js +5 -26
- package/src/x_ite/Components/Texturing3D/TextureCoordinate4D.js +5 -26
- package/src/x_ite/Components/Texturing3D/X3DTexture3DNode.js +12 -19
- package/src/x_ite/Components/VolumeRendering/X3DVolumeDataNode.js +7 -7
- package/src/x_ite/Components.js +2 -2
- package/src/x_ite/Fallback.js +9 -3
- package/src/x_ite/Fields/SFColor.js +4 -0
- package/src/x_ite/Fields/SFColorRGBA.js +4 -0
- package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +4 -0
- package/src/x_ite/Fields/SFRotation.js +4 -0
- package/src/x_ite/Fields/SFString.js +4 -0
- package/src/x_ite/Fields/SFVecPrototypeTemplate.js +4 -0
- package/src/x_ite/Parser/XMLParser.js +1 -1
- package/src/x_ite/Rendering/TextureBuffer.js +43 -36
- package/src/x_ite/Rendering/VertexArray.js +101 -0
- package/src/x_ite/Rendering/X3DRenderObject.js +123 -144
- package/src/x_ite/X3D.js +32 -26
- package/src/x_ite.config.js +0 -5
- package/src/x_ite.css +200 -162
- package/src/x_ite.html +26 -10
- package/src/x_ite.js +42 -0
- package/x_ite.min.html +26 -10
- package/dist/assets/hatching/0.png +0 -0
- package/dist/assets/linetype/0.png +0 -0
- package/src/assets/hatching/0.png +0 -0
- package/src/assets/linetype/0.png +0 -0
- package/src/spinner.css +0 -67
- 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;
|