@kitware/vtk.js 28.10.2 → 28.11.1
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/Common/Core/Base64.js +53 -82
- package/Common/Core/CellArray.js +52 -60
- package/Common/Core/ClassHierarchy.js +8 -36
- package/Common/Core/DataArray/Constants.js +6 -6
- package/Common/Core/DataArray.js +193 -277
- package/Common/Core/Endian.js +14 -17
- package/Common/Core/HalfFloat.js +17 -34
- package/Common/Core/ImageHelper.js +17 -25
- package/Common/Core/LookupTable.js +131 -144
- package/Common/Core/Math/Constants.js +8 -8
- package/Common/Core/Math/index.js +754 -942
- package/Common/Core/Math.js +2 -4
- package/Common/Core/MatrixBuilder.js +99 -151
- package/Common/Core/Points.js +43 -43
- package/Common/Core/PriorityQueue.js +30 -28
- package/Common/Core/ProgressHandler.js +31 -32
- package/Common/Core/ScalarsToColors/Constants.js +4 -4
- package/Common/Core/ScalarsToColors.js +196 -253
- package/Common/Core/StringArray.js +48 -73
- package/Common/Core/URLExtract.js +10 -29
- package/Common/Core/VariantArray.js +48 -73
- package/Common/Core.js +11 -11
- package/Common/DataModel/AbstractPointLocator.js +19 -17
- package/Common/DataModel/BoundingBox.js +322 -490
- package/Common/DataModel/Box.js +46 -63
- package/Common/DataModel/CardinalSpline1D.js +92 -102
- package/Common/DataModel/Cell.js +41 -61
- package/Common/DataModel/CellLinks.js +91 -127
- package/Common/DataModel/CellTypes/Constants.js +7 -6
- package/Common/DataModel/CellTypes.js +55 -74
- package/Common/DataModel/Collection.js +45 -61
- package/Common/DataModel/Cone.js +28 -20
- package/Common/DataModel/Cylinder.js +41 -35
- package/Common/DataModel/DataSet/Constants.js +11 -5
- package/Common/DataModel/DataSet.js +37 -25
- package/Common/DataModel/DataSetAttributes/Constants.js +18 -18
- package/Common/DataModel/DataSetAttributes/FieldData.js +103 -194
- package/Common/DataModel/DataSetAttributes.js +96 -138
- package/Common/DataModel/EdgeLocator.js +45 -70
- package/Common/DataModel/ITKHelper.js +67 -137
- package/Common/DataModel/ImageData.js +115 -172
- package/Common/DataModel/ImplicitBoolean/Constants.js +2 -2
- package/Common/DataModel/ImplicitBoolean.js +66 -96
- package/Common/DataModel/IncrementalOctreeNode.js +201 -231
- package/Common/DataModel/IncrementalOctreePointLocator.js +160 -198
- package/Common/DataModel/KochanekSpline1D.js +78 -81
- package/Common/DataModel/Line/Constants.js +2 -2
- package/Common/DataModel/Line.js +82 -105
- package/Common/DataModel/Locator.js +17 -10
- package/Common/DataModel/Molecule.js +26 -17
- package/Common/DataModel/PiecewiseFunction.js +218 -239
- package/Common/DataModel/Plane.js +90 -113
- package/Common/DataModel/PointSet.js +30 -26
- package/Common/DataModel/PolyData/Constants.js +2 -2
- package/Common/DataModel/PolyData.js +95 -120
- package/Common/DataModel/PolyLine.js +44 -61
- package/Common/DataModel/Polygon/Constants.js +4 -4
- package/Common/DataModel/Polygon.js +128 -169
- package/Common/DataModel/Quad/Constants.js +2 -2
- package/Common/DataModel/Quad.js +61 -100
- package/Common/DataModel/SelectionNode/Constants.js +5 -4
- package/Common/DataModel/SelectionNode.js +25 -21
- package/Common/DataModel/Sphere.js +40 -35
- package/Common/DataModel/Spline1D/Constants.js +3 -2
- package/Common/DataModel/Spline1D.js +34 -18
- package/Common/DataModel/Spline3D/Constants.js +2 -2
- package/Common/DataModel/Spline3D.js +46 -41
- package/Common/DataModel/StructuredData/Constants.js +2 -2
- package/Common/DataModel/StructuredData.js +9 -20
- package/Common/DataModel/Triangle.js +207 -250
- package/Common/DataModel.js +19 -19
- package/Common/System/MobileVR.js +56 -61
- package/Common/System/TimerLog.js +1 -1
- package/Common/System.js +2 -2
- package/Common/Transform/LandmarkTransform/Constants.js +2 -2
- package/Common/Transform/LandmarkTransform.js +133 -117
- package/Common/Transform/Transform.js +42 -57
- package/Common/Transform.js +2 -2
- package/Common/index.js +4 -4
- package/Filters/Core/Cutter.js +134 -146
- package/Filters/Core/PolyDataNormals.js +44 -50
- package/Filters/Core.js +2 -2
- package/Filters/Cornerstone/ImageDataToCornerstoneImage.js +45 -33
- package/Filters/Cornerstone.js +1 -1
- package/Filters/General/AppendPolyData.js +84 -100
- package/Filters/General/Calculator.js +95 -163
- package/Filters/General/ClipClosedSurface/Constants.js +2 -2
- package/Filters/General/ClipClosedSurface.js +341 -416
- package/Filters/General/ClosedPolyLineToSurfaceFilter.js +141 -156
- package/Filters/General/ContourTriangulator/Constants.js +2 -2
- package/Filters/General/ContourTriangulator/helper.js +684 -812
- package/Filters/General/ContourTriangulator.js +92 -89
- package/Filters/General/ImageCropFilter.js +77 -78
- package/Filters/General/ImageDataOutlineFilter.js +42 -36
- package/Filters/General/ImageMarchingCubes/caseTable.js +9 -521
- package/Filters/General/ImageMarchingCubes.js +99 -112
- package/Filters/General/ImageMarchingSquares/caseTable.js +9 -41
- package/Filters/General/ImageMarchingSquares.js +93 -118
- package/Filters/General/ImageOutlineFilter.js +53 -54
- package/Filters/General/ImageSliceFilter.js +39 -30
- package/Filters/General/ImageStreamline.js +107 -124
- package/Filters/General/LineFilter.js +26 -15
- package/Filters/General/MoleculeToRepresentation.js +136 -149
- package/Filters/General/OBBTree/OBBNode.js +36 -34
- package/Filters/General/OBBTree/helper.js +19 -24
- package/Filters/General/OBBTree.js +396 -488
- package/Filters/General/OutlineFilter.js +52 -34
- package/Filters/General/PaintFilter/PaintFilter.worker.js +93 -130
- package/Filters/General/PaintFilter.js +150 -162
- package/Filters/General/ScalarToRGBA.js +38 -33
- package/Filters/General/TriangleFilter.js +65 -62
- package/Filters/General/TubeFilter/Constants.js +4 -4
- package/Filters/General/TubeFilter.js +376 -496
- package/Filters/General/WarpScalar.js +58 -60
- package/Filters/General/WindowedSincPolyDataFilter.js +258 -330
- package/Filters/General.js +21 -21
- package/Filters/Sources/Arrow2DSource/Constants.js +2 -2
- package/Filters/Sources/Arrow2DSource.js +56 -56
- package/Filters/Sources/ArrowSource.js +39 -29
- package/Filters/Sources/CircleSource.js +43 -43
- package/Filters/Sources/ConcentricCylinderSource.js +151 -174
- package/Filters/Sources/ConeSource.js +51 -42
- package/Filters/Sources/CubeSource.js +75 -96
- package/Filters/Sources/Cursor3D.js +94 -109
- package/Filters/Sources/CylinderSource.js +90 -90
- package/Filters/Sources/ImageGridSource.js +43 -43
- package/Filters/Sources/LineSource.js +49 -39
- package/Filters/Sources/PlaneSource.js +97 -104
- package/Filters/Sources/PointSource.js +46 -37
- package/Filters/Sources/RTAnalyticSource.js +50 -48
- package/Filters/Sources/SLICSource.js +63 -73
- package/Filters/Sources/SphereSource.js +88 -78
- package/Filters/Sources/ViewFinderSource.js +26 -23
- package/Filters/Sources.js +14 -14
- package/Filters/Texture/TextureMapToPlane.js +95 -97
- package/Filters/Texture/TextureMapToSphere.js +46 -54
- package/Filters/Texture.js +2 -2
- package/Filters/index.js +5 -5
- package/IO/Core/BinaryHelper.js +12 -18
- package/IO/Core/DataAccessHelper/HtmlDataAccessHelper.js +43 -59
- package/IO/Core/DataAccessHelper/HttpDataAccessHelper.js +76 -113
- package/IO/Core/DataAccessHelper/JSZipDataAccessHelper.js +62 -112
- package/IO/Core/DataAccessHelper/LiteHttpDataAccessHelper.js +76 -113
- package/IO/Core/DataAccessHelper.js +6 -6
- package/IO/Core/HttpDataSetReader.js +136 -139
- package/IO/Core/HttpDataSetSeriesReader.js +64 -75
- package/IO/Core/HttpSceneLoader.js +130 -179
- package/IO/Core/ImageStream/DefaultProtocol.js +29 -43
- package/IO/Core/ImageStream/ViewStream.js +100 -103
- package/IO/Core/ImageStream.js +62 -54
- package/IO/Core/ResourceLoader.js +10 -9
- package/IO/Core/Serializer/ArraySerializer.js +40 -40
- package/IO/Core/Serializer/FieldDataSerializer.js +18 -28
- package/IO/Core/Serializer/ImageDataSerializer.js +22 -23
- package/IO/Core/Serializer/PolyDataSerializer.js +17 -21
- package/IO/Core/Serializer.js +6 -13
- package/IO/Core/WSLinkClient.js +90 -76
- package/IO/Core/ZipMultiDataSetReader.js +46 -44
- package/IO/Core/ZipMultiDataSetWriter.js +43 -34
- package/IO/Core.js +7 -7
- package/IO/Geometry/DracoReader.js +118 -121
- package/IO/Geometry/PLYReader.js +163 -223
- package/IO/Geometry/PLYWriter/Constants.js +5 -5
- package/IO/Geometry/PLYWriter.js +139 -154
- package/IO/Geometry/STLReader.js +123 -146
- package/IO/Geometry/STLWriter/Constants.js +2 -2
- package/IO/Geometry/STLWriter.js +83 -82
- package/IO/Geometry.js +5 -5
- package/IO/Legacy/LegacyAsciiParser.js +78 -139
- package/IO/Legacy/PolyDataReader.js +48 -36
- package/IO/Legacy.js +2 -2
- package/IO/Misc/ElevationReader.js +67 -60
- package/IO/Misc/HttpDataSetLODsLoader.js +41 -38
- package/IO/Misc/ITKImageReader.js +58 -45
- package/IO/Misc/ITKPolyDataReader.js +50 -38
- package/IO/Misc/JSONNucleoReader.js +49 -42
- package/IO/Misc/JSONReader.js +38 -33
- package/IO/Misc/MTLReader.js +74 -119
- package/IO/Misc/OBJReader.js +153 -206
- package/IO/Misc/PDBReader.js +70 -68
- package/IO/Misc/SkyboxReader.js +77 -82
- package/IO/Misc.js +9 -9
- package/IO/XML/XMLImageDataReader.js +36 -38
- package/IO/XML/XMLImageDataWriter.js +28 -21
- package/IO/XML/XMLPolyDataReader.js +49 -46
- package/IO/XML/XMLPolyDataWriter.js +43 -42
- package/IO/XML/XMLReader.js +262 -304
- package/IO/XML/XMLWriter/Constants.js +3 -3
- package/IO/XML/XMLWriter.js +70 -84
- package/IO/XML.js +6 -6
- package/IO/index.js +5 -5
- package/Imaging/Core/AbstractImageInterpolator/Constants.js +4 -4
- package/Imaging/Core/AbstractImageInterpolator/InterpolationInfo.js +30 -27
- package/Imaging/Core/AbstractImageInterpolator.js +74 -87
- package/Imaging/Core/ImageInterpolator.js +201 -252
- package/Imaging/Core/ImagePointDataIterator.js +96 -122
- package/Imaging/Core/ImageReslice/Constants.js +2 -2
- package/Imaging/Core/ImageReslice.js +327 -464
- package/Imaging/Core.js +4 -4
- package/Imaging/Hybrid/SampleFunction.js +58 -51
- package/Imaging/Hybrid.js +1 -1
- package/Imaging/index.js +2 -2
- package/Interaction/Animations/TimeStepBasedAnimationHandler.js +39 -54
- package/Interaction/Manipulators/CompositeCameraManipulator.js +22 -13
- package/Interaction/Manipulators/CompositeGestureManipulator.js +31 -43
- package/Interaction/Manipulators/CompositeKeyboardManipulator.js +15 -11
- package/Interaction/Manipulators/CompositeMouseManipulator.js +27 -33
- package/Interaction/Manipulators/CompositeVRManipulator.js +22 -15
- package/Interaction/Manipulators/GestureCameraManipulator.js +54 -36
- package/Interaction/Manipulators/KeyboardCameraManipulator.js +95 -97
- package/Interaction/Manipulators/MouseBoxSelectorManipulator.js +70 -89
- package/Interaction/Manipulators/MouseCameraAxisRotateManipulator.js +67 -54
- package/Interaction/Manipulators/MouseCameraSliceManipulator.js +40 -38
- package/Interaction/Manipulators/MouseCameraTrackballFirstPersonManipulator.js +83 -68
- package/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator.js +32 -28
- package/Interaction/Manipulators/MouseCameraTrackballPanManipulator.js +47 -40
- package/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js +55 -43
- package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +56 -46
- package/Interaction/Manipulators/MouseCameraTrackballZoomManipulator.js +41 -46
- package/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator.js +29 -27
- package/Interaction/Manipulators/MouseCameraUnicamManipulator.js +123 -146
- package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +144 -166
- package/Interaction/Manipulators/MouseRangeManipulator.js +127 -132
- package/Interaction/Manipulators/VRButtonPanManipulator.js +33 -23
- package/Interaction/Manipulators.js +21 -21
- package/Interaction/Misc/DeviceOrientationToCamera.js +25 -47
- package/Interaction/Misc.js +1 -1
- package/Interaction/Style/InteractorStyleImage.js +101 -121
- package/Interaction/Style/InteractorStyleMPRSlice.js +111 -128
- package/Interaction/Style/InteractorStyleManipulator/Presets.js +9 -17
- package/Interaction/Style/InteractorStyleManipulator.js +254 -329
- package/Interaction/Style/InteractorStyleRemoteMouse.js +195 -180
- package/Interaction/Style/InteractorStyleTrackballCamera.js +154 -157
- package/Interaction/Style/InteractorStyleUnicam.js +30 -38
- package/Interaction/Style.js +5 -5
- package/Interaction/UI/CornerAnnotation/CornerAnnotation.module.css.js +1 -1
- package/Interaction/UI/CornerAnnotation.js +65 -48
- package/Interaction/UI/FPSMonitor.js +104 -105
- package/Interaction/UI/Icons.js +1 -1
- package/Interaction/UI/Slider/Constants.js +2 -2
- package/Interaction/UI/Slider.js +78 -95
- package/Interaction/UI/VolumeController.js +104 -97
- package/Interaction/UI.js +5 -5
- package/Interaction/Widgets/OrientationMarkerWidget/Constants.js +2 -2
- package/Interaction/Widgets/OrientationMarkerWidget.js +90 -135
- package/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +0 -3
- package/Interaction/Widgets/PiecewiseGaussianWidget.js +381 -498
- package/Interaction/Widgets.js +2 -2
- package/Interaction/index.js +5 -5
- package/Proxy/Animation/AbstractAnimationProxy.js +22 -15
- package/Proxy/Animation/AnimationProxyManager.js +43 -51
- package/Proxy/Animation/TimeStepBasedAnimationHandlerProxy.js +26 -19
- package/Proxy/Core/AbstractRepresentationProxy.js +97 -151
- package/Proxy/Core/LookupTableProxy/Constants.js +4 -4
- package/Proxy/Core/LookupTableProxy.js +49 -52
- package/Proxy/Core/PiecewiseFunctionProxy/Constants.js +4 -4
- package/Proxy/Core/PiecewiseFunctionProxy.js +63 -72
- package/Proxy/Core/ProxyManager/core.js +83 -106
- package/Proxy/Core/ProxyManager/properties.js +53 -76
- package/Proxy/Core/ProxyManager/state.js +100 -110
- package/Proxy/Core/ProxyManager/view.js +45 -55
- package/Proxy/Core/ProxyManager.js +16 -8
- package/Proxy/Core/SourceProxy.js +41 -38
- package/Proxy/Core/View2DProxy.js +143 -199
- package/Proxy/Core/ViewProxy.js +223 -269
- package/Proxy/Core.js +7 -7
- package/Proxy/Representations/GeometryRepresentationProxy.js +34 -20
- package/Proxy/Representations/GlyphRepresentationProxy.js +42 -41
- package/Proxy/Representations/MoleculeRepresentationProxy.js +32 -22
- package/Proxy/Representations/ResliceRepresentationProxy.js +48 -32
- package/Proxy/Representations/SkyboxRepresentationProxy.js +30 -29
- package/Proxy/Representations/SliceRepresentationProxy.js +93 -112
- package/Proxy/Representations/SlicedGeometryRepresentationProxy.js +46 -42
- package/Proxy/Representations/VolumeRepresentationProxy.js +108 -133
- package/Proxy/Representations.js +7 -7
- package/Proxy/index.js +2 -2
- package/README.md +1 -1
- package/Rendering/Core/AbstractImageMapper/helper.js +44 -49
- package/Rendering/Core/AbstractImageMapper.js +18 -19
- package/Rendering/Core/AbstractMapper.js +39 -55
- package/Rendering/Core/AbstractMapper3D.js +26 -31
- package/Rendering/Core/AbstractPicker.js +25 -21
- package/Rendering/Core/Actor.js +71 -93
- package/Rendering/Core/Actor2D.js +64 -78
- package/Rendering/Core/AnnotatedCubeActor/Presets.js +5 -11
- package/Rendering/Core/AnnotatedCubeActor.js +94 -79
- package/Rendering/Core/AxesActor.js +65 -87
- package/Rendering/Core/Camera.js +246 -271
- package/Rendering/Core/CellPicker.js +125 -148
- package/Rendering/Core/ColorTransferFunction/ColorMaps.js +20 -21
- package/Rendering/Core/ColorTransferFunction/ColorMapsLite.js +20 -21
- package/Rendering/Core/ColorTransferFunction/Constants.js +4 -4
- package/Rendering/Core/ColorTransferFunction.js +460 -546
- package/Rendering/Core/Coordinate/Constants.js +2 -2
- package/Rendering/Core/Coordinate.js +119 -198
- package/Rendering/Core/CubeAxesActor.js +294 -320
- package/Rendering/Core/Follower.js +46 -45
- package/Rendering/Core/Glyph3DMapper/Constants.js +4 -4
- package/Rendering/Core/Glyph3DMapper.js +96 -148
- package/Rendering/Core/HardwareSelector.js +36 -69
- package/Rendering/Core/ImageArrayMapper.js +87 -126
- package/Rendering/Core/ImageCPRMapper.js +134 -209
- package/Rendering/Core/ImageMapper/Constants.js +2 -2
- package/Rendering/Core/ImageMapper.js +85 -144
- package/Rendering/Core/ImageProperty/Constants.js +2 -2
- package/Rendering/Core/ImageProperty.js +66 -81
- package/Rendering/Core/ImageResliceMapper/Constants.js +2 -2
- package/Rendering/Core/ImageResliceMapper.js +36 -29
- package/Rendering/Core/ImageSlice.js +85 -127
- package/Rendering/Core/InteractorObserver.js +82 -73
- package/Rendering/Core/InteractorStyle/Constants.js +2 -2
- package/Rendering/Core/InteractorStyle.js +56 -58
- package/Rendering/Core/Light.js +43 -49
- package/Rendering/Core/Mapper/CoincidentTopologyHelper.js +37 -48
- package/Rendering/Core/Mapper/Constants.js +6 -6
- package/Rendering/Core/Mapper/Static.js +15 -12
- package/Rendering/Core/Mapper.js +194 -259
- package/Rendering/Core/Mapper2D.js +61 -100
- package/Rendering/Core/Picker.js +124 -143
- package/Rendering/Core/PixelSpaceCallbackMapper.js +40 -37
- package/Rendering/Core/PointPicker.js +68 -79
- package/Rendering/Core/Prop/Constants.js +2 -2
- package/Rendering/Core/Prop.js +58 -106
- package/Rendering/Core/Prop3D.js +54 -83
- package/Rendering/Core/Property/Constants.js +6 -6
- package/Rendering/Core/Property.js +45 -74
- package/Rendering/Core/Property2D/Constants.js +2 -2
- package/Rendering/Core/Property2D.js +33 -42
- package/Rendering/Core/RenderWindow.js +70 -82
- package/Rendering/Core/RenderWindowInteractor/Constants.js +7 -7
- package/Rendering/Core/RenderWindowInteractor.js +324 -439
- package/Rendering/Core/Renderer.js +192 -256
- package/Rendering/Core/ScalarBarActor.js +267 -272
- package/Rendering/Core/Skybox.js +26 -24
- package/Rendering/Core/SphereMapper.js +22 -12
- package/Rendering/Core/StickMapper.js +22 -12
- package/Rendering/Core/SurfaceLICInterface/Constants.js +6 -6
- package/Rendering/Core/SurfaceLICInterface.js +13 -9
- package/Rendering/Core/SurfaceLICMapper.js +23 -15
- package/Rendering/Core/Texture.js +99 -141
- package/Rendering/Core/Viewport.js +60 -88
- package/Rendering/Core/Volume.js +55 -77
- package/Rendering/Core/VolumeMapper/Constants.js +4 -4
- package/Rendering/Core/VolumeMapper.js +59 -91
- package/Rendering/Core/VolumeProperty/Constants.js +4 -4
- package/Rendering/Core/VolumeProperty.js +78 -115
- package/Rendering/Core.js +47 -49
- package/Rendering/Misc/CanvasView.js +62 -61
- package/Rendering/Misc/FullScreenRenderWindow.js +60 -62
- package/Rendering/Misc/GenericRenderWindow.js +48 -37
- package/Rendering/Misc/RemoteView.js +86 -80
- package/Rendering/Misc/RenderWindowWithControlBar.js +54 -48
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager/CameraSynchronizer.js +43 -51
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager.js +52 -82
- package/Rendering/Misc/SynchronizableRenderWindow/ObjectManager.js +258 -308
- package/Rendering/Misc/SynchronizableRenderWindow.js +133 -163
- package/Rendering/Misc/TextureLODsDownloader.js +72 -74
- package/Rendering/Misc.js +7 -7
- package/Rendering/OpenGL/Actor.js +57 -68
- package/Rendering/OpenGL/Actor2D.js +56 -56
- package/Rendering/OpenGL/BufferObject/Constants.js +2 -2
- package/Rendering/OpenGL/BufferObject.js +50 -65
- package/Rendering/OpenGL/Camera.js +35 -29
- package/Rendering/OpenGL/CellArrayBufferObject.js +119 -149
- package/Rendering/OpenGL/Convolution2DPass.js +87 -81
- package/Rendering/OpenGL/CubeAxesActor.js +28 -21
- package/Rendering/OpenGL/ForwardPass.js +53 -64
- package/Rendering/OpenGL/Framebuffer.js +61 -101
- package/Rendering/OpenGL/Glyph3DMapper.js +165 -196
- package/Rendering/OpenGL/HardwareSelector/Constants.js +2 -2
- package/Rendering/OpenGL/HardwareSelector.js +272 -397
- package/Rendering/OpenGL/Helper.js +58 -73
- package/Rendering/OpenGL/ImageCPRMapper.js +339 -421
- package/Rendering/OpenGL/ImageMapper.js +268 -361
- package/Rendering/OpenGL/ImageResliceMapper.js +306 -438
- package/Rendering/OpenGL/ImageSlice.js +48 -54
- package/Rendering/OpenGL/OrderIndependentTranslucentPass.js +102 -84
- package/Rendering/OpenGL/PixelSpaceCallbackMapper.js +43 -42
- package/Rendering/OpenGL/PolyDataMapper.js +358 -492
- package/Rendering/OpenGL/PolyDataMapper2D.js +153 -205
- package/Rendering/OpenGL/RadialDistortionPass.js +86 -89
- package/Rendering/OpenGL/RenderWindow/Constants.js +2 -2
- package/Rendering/OpenGL/RenderWindow/ContextProxy.js +20 -29
- package/Rendering/OpenGL/RenderWindow.js +356 -510
- package/Rendering/OpenGL/Renderer.js +77 -89
- package/Rendering/OpenGL/ReplacementShaderMapper.js +28 -46
- package/Rendering/OpenGL/ScalarBarActor.js +28 -21
- package/Rendering/OpenGL/Shader.js +37 -31
- package/Rendering/OpenGL/ShaderCache.js +67 -74
- package/Rendering/OpenGL/ShaderProgram.js +136 -248
- package/Rendering/OpenGL/Skybox.js +99 -60
- package/Rendering/OpenGL/SphereMapper.js +94 -108
- package/Rendering/OpenGL/StickMapper.js +110 -114
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D/pingpong.js +91 -157
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D.js +142 -151
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICInterface.js +142 -216
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICMapper.js +79 -100
- package/Rendering/OpenGL/SurfaceLIC.js +2 -2
- package/Rendering/OpenGL/Texture/Constants.js +4 -4
- package/Rendering/OpenGL/Texture.js +443 -608
- package/Rendering/OpenGL/TextureUnitManager.js +47 -43
- package/Rendering/OpenGL/VertexArrayObject.js +92 -131
- package/Rendering/OpenGL/ViewNodeFactory.js +25 -13
- package/Rendering/OpenGL/Volume.js +38 -34
- package/Rendering/OpenGL/VolumeMapper.js +437 -547
- package/Rendering/OpenGL.js +28 -28
- package/Rendering/SceneGraph/RenderPass.js +34 -31
- package/Rendering/SceneGraph/RenderWindowViewNode.js +68 -94
- package/Rendering/SceneGraph/ViewNode.js +82 -111
- package/Rendering/SceneGraph/ViewNodeFactory.js +31 -26
- package/Rendering/SceneGraph.js +4 -4
- package/Rendering/WebGPU/Actor.js +49 -49
- package/Rendering/WebGPU/Actor2D.js +45 -44
- package/Rendering/WebGPU/BindGroup.js +43 -50
- package/Rendering/WebGPU/Buffer.js +41 -50
- package/Rendering/WebGPU/BufferManager/Constants.js +4 -4
- package/Rendering/WebGPU/BufferManager.js +111 -141
- package/Rendering/WebGPU/Camera.js +65 -67
- package/Rendering/WebGPU/CellArrayMapper.js +621 -388
- package/Rendering/WebGPU/CubeAxesActor.js +28 -19
- package/Rendering/WebGPU/Device.js +78 -133
- package/Rendering/WebGPU/ForwardPass.js +75 -72
- package/Rendering/WebGPU/FullScreenQuad.js +25 -18
- package/Rendering/WebGPU/Glyph3DMapper.js +62 -74
- package/Rendering/WebGPU/HardwareSelectionPass.js +45 -38
- package/Rendering/WebGPU/HardwareSelector.js +200 -276
- package/Rendering/WebGPU/ImageMapper.js +180 -171
- package/Rendering/WebGPU/ImageSlice.js +45 -44
- package/Rendering/WebGPU/IndexBuffer.js +166 -200
- package/Rendering/WebGPU/OpaquePass.js +37 -36
- package/Rendering/WebGPU/OrderIndependentTranslucentPass.js +72 -45
- package/Rendering/WebGPU/Pipeline.js +37 -51
- package/Rendering/WebGPU/PixelSpaceCallbackMapper.js +27 -19
- package/Rendering/WebGPU/PolyDataMapper.js +50 -53
- package/Rendering/WebGPU/PolyDataMapper2D.js +39 -39
- package/Rendering/WebGPU/RenderEncoder.js +68 -88
- package/Rendering/WebGPU/RenderWindow.js +262 -376
- package/Rendering/WebGPU/Renderer.js +224 -208
- package/Rendering/WebGPU/Sampler.js +27 -21
- package/Rendering/WebGPU/ScalarBarActor.js +28 -19
- package/Rendering/WebGPU/ShaderCache.js +43 -41
- package/Rendering/WebGPU/ShaderDescription.js +52 -59
- package/Rendering/WebGPU/ShaderModule.js +26 -17
- package/Rendering/WebGPU/SimpleMapper.js +185 -121
- package/Rendering/WebGPU/SphereMapper.js +200 -130
- package/Rendering/WebGPU/StickMapper.js +289 -152
- package/Rendering/WebGPU/StorageBuffer.js +100 -115
- package/Rendering/WebGPU/Texture.js +79 -99
- package/Rendering/WebGPU/TextureManager.js +52 -54
- package/Rendering/WebGPU/TextureView.js +40 -43
- package/Rendering/WebGPU/Types.js +53 -70
- package/Rendering/WebGPU/UniformBuffer.js +158 -184
- package/Rendering/WebGPU/VertexInput.js +64 -90
- package/Rendering/WebGPU/ViewNodeFactory.js +25 -13
- package/Rendering/WebGPU/Volume.js +52 -51
- package/Rendering/WebGPU/VolumePass.js +218 -239
- package/Rendering/WebGPU/VolumePassFSQ.js +625 -306
- package/Rendering/WebGPU.js +1 -1
- package/Rendering/index.js +5 -5
- package/Widgets/Core/AbstractWidget/Constants.js +2 -2
- package/Widgets/Core/AbstractWidget.js +49 -58
- package/Widgets/Core/AbstractWidgetFactory.js +101 -122
- package/Widgets/Core/StateBuilder/boundsMixin.js +23 -28
- package/Widgets/Core/StateBuilder/color3Mixin.js +10 -7
- package/Widgets/Core/StateBuilder/colorMixin.js +10 -6
- package/Widgets/Core/StateBuilder/cornerMixin.js +16 -15
- package/Widgets/Core/StateBuilder/directionMixin.js +20 -18
- package/Widgets/Core/StateBuilder/manipulatorMixin.js +26 -18
- package/Widgets/Core/StateBuilder/nameMixin.js +10 -6
- package/Widgets/Core/StateBuilder/orientationMixin.js +19 -16
- package/Widgets/Core/StateBuilder/originMixin.js +25 -32
- package/Widgets/Core/StateBuilder/scale1Mixin.js +10 -6
- package/Widgets/Core/StateBuilder/scale3Mixin.js +10 -6
- package/Widgets/Core/StateBuilder/shapeMixin.js +12 -6
- package/Widgets/Core/StateBuilder/textMixin.js +10 -6
- package/Widgets/Core/StateBuilder/visibleMixin.js +10 -6
- package/Widgets/Core/StateBuilder.js +120 -149
- package/Widgets/Core/WidgetManager/Constants.js +7 -7
- package/Widgets/Core/WidgetManager.js +249 -421
- package/Widgets/Core/WidgetState.js +48 -57
- package/Widgets/Core.js +5 -5
- package/Widgets/Manipulators/AbstractManipulator.js +20 -14
- package/Widgets/Manipulators/CPRManipulator.js +55 -71
- package/Widgets/Manipulators/LineManipulator.js +31 -28
- package/Widgets/Manipulators/PickerManipulator.d.ts +48 -0
- package/Widgets/Manipulators/PickerManipulator.js +65 -0
- package/Widgets/Manipulators/PlaneManipulator.js +26 -23
- package/Widgets/Manipulators/TrackballManipulator.js +39 -35
- package/Widgets/Manipulators.js +4 -2
- package/Widgets/Representations/ArrowHandleRepresentation.js +148 -162
- package/Widgets/Representations/CircleContextRepresentation.js +44 -38
- package/Widgets/Representations/ContextRepresentation.js +17 -14
- package/Widgets/Representations/ConvexFaceContextRepresentation.js +50 -47
- package/Widgets/Representations/CroppingOutlineRepresentation.js +38 -27
- package/Widgets/Representations/CubeHandleRepresentation.js +21 -18
- package/Widgets/Representations/GlyphRepresentation.js +107 -152
- package/Widgets/Representations/HandleRepresentation.js +17 -14
- package/Widgets/Representations/ImplicitPlaneRepresentation.js +97 -91
- package/Widgets/Representations/LineHandleRepresentation.js +44 -41
- package/Widgets/Representations/OutlineContextRepresentation.js +42 -36
- package/Widgets/Representations/PolyLineRepresentation.js +60 -75
- package/Widgets/Representations/RectangleContextRepresentation.js +42 -37
- package/Widgets/Representations/SphereContextRepresentation.js +19 -27
- package/Widgets/Representations/SphereHandleRepresentation.js +31 -27
- package/Widgets/Representations/SplineContextRepresentation.js +46 -70
- package/Widgets/Representations/WidgetRepresentation/Constants.js +2 -2
- package/Widgets/Representations/WidgetRepresentation.js +99 -134
- package/Widgets/Representations.js +13 -13
- package/Widgets/Widgets3D/AngleWidget/behavior.js +41 -63
- package/Widgets/Widgets3D/AngleWidget.js +40 -38
- package/Widgets/Widgets3D/DistanceWidget/behavior.js +40 -61
- package/Widgets/Widgets3D/DistanceWidget.js +38 -36
- package/Widgets/Widgets3D/EllipseWidget/behavior.js +14 -19
- package/Widgets/Widgets3D/EllipseWidget/state.js +4 -2
- package/Widgets/Widgets3D/EllipseWidget.js +37 -26
- package/Widgets/Widgets3D/ImageCroppingWidget/behavior.js +26 -56
- package/Widgets/Widgets3D/ImageCroppingWidget/helpers.js +14 -17
- package/Widgets/Widgets3D/ImageCroppingWidget/state.js +20 -16
- package/Widgets/Widgets3D/ImageCroppingWidget.js +80 -98
- package/Widgets/Widgets3D/ImplicitPlaneWidget.js +55 -77
- package/Widgets/Widgets3D/InteractiveOrientationWidget/behavior.js +17 -18
- package/Widgets/Widgets3D/InteractiveOrientationWidget/state.js +15 -7
- package/Widgets/Widgets3D/InteractiveOrientationWidget.js +30 -29
- package/Widgets/Widgets3D/LabelWidget/behavior.js +37 -62
- package/Widgets/Widgets3D/LabelWidget.js +31 -25
- package/Widgets/Widgets3D/LineWidget/Constants.js +8 -8
- package/Widgets/Widgets3D/LineWidget/behavior.js +77 -114
- package/Widgets/Widgets3D/LineWidget/helpers.js +13 -20
- package/Widgets/Widgets3D/LineWidget/state.js +2 -1
- package/Widgets/Widgets3D/LineWidget.js +39 -35
- package/Widgets/Widgets3D/PaintWidget/behavior.js +24 -59
- package/Widgets/Widgets3D/PaintWidget.js +39 -37
- package/Widgets/Widgets3D/PolyLineWidget/behavior.js +44 -68
- package/Widgets/Widgets3D/PolyLineWidget.js +36 -31
- package/Widgets/Widgets3D/RectangleWidget/behavior.js +6 -11
- package/Widgets/Widgets3D/RectangleWidget/state.js +4 -2
- package/Widgets/Widgets3D/RectangleWidget.js +37 -25
- package/Widgets/Widgets3D/ResliceCursorWidget/Constants.js +35 -21
- package/Widgets/Widgets3D/ResliceCursorWidget/behavior.js +133 -209
- package/Widgets/Widgets3D/ResliceCursorWidget/cprBehavior.js +26 -41
- package/Widgets/Widgets3D/ResliceCursorWidget/helpers.js +89 -116
- package/Widgets/Widgets3D/ResliceCursorWidget/state.js +33 -40
- package/Widgets/Widgets3D/ResliceCursorWidget.js +186 -227
- package/Widgets/Widgets3D/SeedWidget/behavior.js +82 -0
- package/Widgets/Widgets3D/SeedWidget/state.js +18 -0
- package/Widgets/Widgets3D/SeedWidget.d.ts +44 -0
- package/Widgets/Widgets3D/SeedWidget.js +43 -0
- package/Widgets/Widgets3D/ShapeWidget/Constants.js +19 -19
- package/Widgets/Widgets3D/ShapeWidget/behavior.js +150 -252
- package/Widgets/Widgets3D/ShapeWidget.js +24 -27
- package/Widgets/Widgets3D/SphereWidget/behavior.js +35 -69
- package/Widgets/Widgets3D/SphereWidget/state.js +9 -5
- package/Widgets/Widgets3D/SphereWidget.js +34 -44
- package/Widgets/Widgets3D/SplineWidget/behavior.js +85 -120
- package/Widgets/Widgets3D/SplineWidget.js +43 -39
- package/Widgets/Widgets3D.js +15 -15
- package/Widgets/index.js +4 -4
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Filters/General/PaintFilter/PaintFilter.worker.js +95 -207
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +0 -3
- package/favicon.js +5 -6
- package/index.d.ts +4 -2
- package/index.js +4 -3
- package/macros.js +4 -1931
- package/macros2.js +1684 -0
- package/package.json +6 -6
- package/vtk.js +18 -31
|
@@ -1,155 +1,143 @@
|
|
|
1
|
-
import
|
|
2
|
-
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
|
-
import macro from '../../macros.js';
|
|
1
|
+
import { m as macro } from '../../macros2.js';
|
|
4
2
|
import { A as degreesFromRadians } from '../../Common/Core/Math/index.js';
|
|
5
3
|
import Constants from './RenderWindowInteractor/Constants.js';
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
const {
|
|
6
|
+
Device,
|
|
7
|
+
Input
|
|
8
|
+
} = Constants;
|
|
9
|
+
const {
|
|
10
|
+
vtkWarningMacro,
|
|
11
|
+
vtkErrorMacro,
|
|
12
|
+
normalizeWheel,
|
|
13
|
+
vtkOnceErrorMacro
|
|
14
|
+
} = macro;
|
|
8
15
|
|
|
9
|
-
|
|
10
|
-
var Device = Constants.Device,
|
|
11
|
-
Input = Constants.Input;
|
|
12
|
-
var vtkWarningMacro = macro.vtkWarningMacro,
|
|
13
|
-
vtkErrorMacro = macro.vtkErrorMacro,
|
|
14
|
-
normalizeWheel = macro.normalizeWheel,
|
|
15
|
-
vtkOnceErrorMacro = macro.vtkOnceErrorMacro; // ----------------------------------------------------------------------------
|
|
16
|
+
// ----------------------------------------------------------------------------
|
|
16
17
|
// Global methods
|
|
17
18
|
// ----------------------------------------------------------------------------
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
const EMPTY_MOUSE_EVENT = new MouseEvent('');
|
|
21
|
+
const deviceInputMap = {
|
|
21
22
|
'xr-standard': [Input.Trigger, Input.Grip, Input.TrackPad, Input.Thumbstick, Input.A, Input.B]
|
|
22
23
|
};
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
const handledEvents = ['StartAnimation', 'Animation', 'EndAnimation', 'PointerEnter', 'PointerLeave', 'MouseEnter', 'MouseLeave', 'StartMouseMove', 'MouseMove', 'EndMouseMove', 'LeftButtonPress', 'LeftButtonRelease', 'MiddleButtonPress', 'MiddleButtonRelease', 'RightButtonPress', 'RightButtonRelease', 'KeyPress', 'KeyDown', 'KeyUp', 'StartMouseWheel', 'MouseWheel', 'EndMouseWheel', 'StartPinch', 'Pinch', 'EndPinch', 'StartPan', 'Pan', 'EndPan', 'StartRotate', 'Rotate', 'EndRotate', 'Button3D', 'Move3D', 'StartPointerLock', 'EndPointerLock', 'StartInteraction', 'Interaction', 'EndInteraction', 'AnimationFrameRateUpdate'];
|
|
25
25
|
function preventDefault(event) {
|
|
26
26
|
if (event.cancelable) {
|
|
27
27
|
event.preventDefault();
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
|
|
31
30
|
function pointerCacheToPositions(cache) {
|
|
32
|
-
|
|
33
|
-
cache.forEach(
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
const positions = Object.create(null);
|
|
32
|
+
cache.forEach(_ref => {
|
|
33
|
+
let {
|
|
34
|
+
pointerId,
|
|
35
|
+
position
|
|
36
|
+
} = _ref;
|
|
36
37
|
positions[pointerId] = position;
|
|
37
38
|
});
|
|
38
39
|
return positions;
|
|
39
|
-
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// ----------------------------------------------------------------------------
|
|
40
43
|
// vtkRenderWindowInteractor methods
|
|
41
44
|
// ----------------------------------------------------------------------------
|
|
42
45
|
|
|
43
|
-
|
|
44
46
|
function vtkRenderWindowInteractor(publicAPI, model) {
|
|
45
47
|
// Set our className
|
|
46
|
-
model.classHierarchy.push('vtkRenderWindowInteractor');
|
|
48
|
+
model.classHierarchy.push('vtkRenderWindowInteractor');
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
// Initialize list of requesters
|
|
51
|
+
const animationRequesters = new Set();
|
|
49
52
|
|
|
50
|
-
|
|
53
|
+
// map from pointerId to { pointerId: number, position: [x, y] }
|
|
54
|
+
const pointerCache = new Map();
|
|
51
55
|
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
// Factor to apply on wheel spin.
|
|
57
|
+
let wheelCoefficient = 1;
|
|
58
|
+
|
|
59
|
+
// Public API methods
|
|
54
60
|
|
|
55
|
-
|
|
61
|
+
//----------------------------------------------------------------------
|
|
62
|
+
publicAPI.start = () => {
|
|
56
63
|
// Let the compositing handle the event loop if it wants to.
|
|
57
64
|
// if (publicAPI.HasObserver(vtkCommand::StartEvent) && !publicAPI.HandleEventLoop) {
|
|
58
65
|
// publicAPI.invokeEvent({ type: 'StartEvent' });
|
|
59
66
|
// return;
|
|
60
67
|
// }
|
|
68
|
+
|
|
61
69
|
// As a convenience, initialize if we aren't initialized yet.
|
|
62
70
|
if (!model.initialized) {
|
|
63
71
|
publicAPI.initialize();
|
|
64
|
-
|
|
65
72
|
if (!model.initialized) {
|
|
66
73
|
return;
|
|
67
74
|
}
|
|
68
|
-
}
|
|
75
|
+
}
|
|
76
|
+
// Pass execution to the subclass which will run the event loop,
|
|
69
77
|
// this will not return until TerminateApp is called.
|
|
70
|
-
|
|
71
|
-
|
|
72
78
|
publicAPI.startEventLoop();
|
|
73
|
-
};
|
|
74
|
-
|
|
79
|
+
};
|
|
75
80
|
|
|
76
|
-
|
|
81
|
+
//----------------------------------------------------------------------
|
|
82
|
+
publicAPI.setRenderWindow = aren => {
|
|
77
83
|
vtkErrorMacro('you want to call setView(view) instead of setRenderWindow on a vtk.js interactor');
|
|
78
|
-
};
|
|
79
|
-
|
|
84
|
+
};
|
|
80
85
|
|
|
81
|
-
|
|
86
|
+
//----------------------------------------------------------------------
|
|
87
|
+
publicAPI.setInteractorStyle = style => {
|
|
82
88
|
if (model.interactorStyle !== style) {
|
|
83
89
|
if (model.interactorStyle != null) {
|
|
84
90
|
model.interactorStyle.setInteractor(null);
|
|
85
91
|
}
|
|
86
|
-
|
|
87
92
|
model.interactorStyle = style;
|
|
88
|
-
|
|
89
93
|
if (model.interactorStyle != null) {
|
|
90
94
|
if (model.interactorStyle.getInteractor() !== publicAPI) {
|
|
91
95
|
model.interactorStyle.setInteractor(publicAPI);
|
|
92
96
|
}
|
|
93
97
|
}
|
|
94
98
|
}
|
|
95
|
-
};
|
|
96
|
-
|
|
99
|
+
};
|
|
97
100
|
|
|
98
|
-
|
|
101
|
+
//---------------------------------------------------------------------
|
|
102
|
+
publicAPI.initialize = () => {
|
|
99
103
|
model.initialized = true;
|
|
100
104
|
publicAPI.enable();
|
|
101
105
|
publicAPI.render();
|
|
102
106
|
};
|
|
103
|
-
|
|
104
|
-
publicAPI.
|
|
105
|
-
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
publicAPI.disable = function () {
|
|
109
|
-
return publicAPI.setEnabled(false);
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
publicAPI.startEventLoop = function () {
|
|
113
|
-
return vtkWarningMacro('empty event loop');
|
|
114
|
-
};
|
|
115
|
-
|
|
107
|
+
publicAPI.enable = () => publicAPI.setEnabled(true);
|
|
108
|
+
publicAPI.disable = () => publicAPI.setEnabled(false);
|
|
109
|
+
publicAPI.startEventLoop = () => vtkWarningMacro('empty event loop');
|
|
116
110
|
function updateCurrentRenderer(x, y) {
|
|
117
111
|
if (!model._forcedRenderer) {
|
|
118
112
|
model.currentRenderer = publicAPI.findPokedRenderer(x, y);
|
|
119
113
|
}
|
|
120
114
|
}
|
|
121
|
-
|
|
122
|
-
publicAPI.getCurrentRenderer = function () {
|
|
115
|
+
publicAPI.getCurrentRenderer = () => {
|
|
123
116
|
if (model.currentRenderer) {
|
|
124
117
|
return model.currentRenderer;
|
|
125
118
|
}
|
|
126
|
-
|
|
127
119
|
updateCurrentRenderer(0, 0);
|
|
128
120
|
return model.currentRenderer;
|
|
129
121
|
};
|
|
130
|
-
|
|
131
122
|
function _getScreenEventPositionFor(source) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
var position = {
|
|
123
|
+
const canvas = model._view.getCanvas();
|
|
124
|
+
const bounds = canvas.getBoundingClientRect();
|
|
125
|
+
const scaleX = canvas.width / bounds.width;
|
|
126
|
+
const scaleY = canvas.height / bounds.height;
|
|
127
|
+
const position = {
|
|
138
128
|
x: scaleX * (source.clientX - bounds.left),
|
|
139
129
|
y: scaleY * (bounds.height - source.clientY + bounds.top),
|
|
140
130
|
z: 0
|
|
141
|
-
};
|
|
131
|
+
};
|
|
142
132
|
|
|
133
|
+
// if multitouch, do not update the current renderer
|
|
143
134
|
if (pointerCache.size <= 1 || !model.currentRenderer) {
|
|
144
135
|
updateCurrentRenderer(position.x, position.y);
|
|
145
136
|
}
|
|
146
|
-
|
|
147
137
|
return position;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
var getScreenEventPositionFor = model._getScreenEventPositionFor || _getScreenEventPositionFor;
|
|
152
|
-
|
|
138
|
+
}
|
|
139
|
+
// Allow user to override it
|
|
140
|
+
const getScreenEventPositionFor = model._getScreenEventPositionFor || _getScreenEventPositionFor;
|
|
153
141
|
function getModifierKeysFor(event) {
|
|
154
142
|
return {
|
|
155
143
|
controlKey: event.ctrlKey,
|
|
@@ -157,23 +145,19 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
157
145
|
shiftKey: event.shiftKey
|
|
158
146
|
};
|
|
159
147
|
}
|
|
160
|
-
|
|
161
148
|
function getKeysFor(event) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
var keys = _objectSpread({
|
|
149
|
+
const modifierKeys = getModifierKeysFor(event);
|
|
150
|
+
const keys = {
|
|
165
151
|
key: event.key,
|
|
166
|
-
keyCode: event.charCode
|
|
167
|
-
|
|
168
|
-
|
|
152
|
+
keyCode: event.charCode,
|
|
153
|
+
...modifierKeys
|
|
154
|
+
};
|
|
169
155
|
return keys;
|
|
170
156
|
}
|
|
171
|
-
|
|
172
157
|
function getDeviceTypeFor(event) {
|
|
173
158
|
return event.pointerType || '';
|
|
174
159
|
}
|
|
175
|
-
|
|
176
|
-
publicAPI.bindEvents = function (container) {
|
|
160
|
+
publicAPI.bindEvents = container => {
|
|
177
161
|
model.container = container;
|
|
178
162
|
container.addEventListener('contextmenu', preventDefault);
|
|
179
163
|
container.addEventListener('wheel', publicAPI.handleWheel);
|
|
@@ -191,17 +175,19 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
191
175
|
document.addEventListener('keypress', publicAPI.handleKeyPress);
|
|
192
176
|
document.addEventListener('keydown', publicAPI.handleKeyDown);
|
|
193
177
|
document.addEventListener('keyup', publicAPI.handleKeyUp);
|
|
194
|
-
document.addEventListener('pointerlockchange', publicAPI.handlePointerLockChange);
|
|
195
|
-
// in a touchstart handler.
|
|
178
|
+
document.addEventListener('pointerlockchange', publicAPI.handlePointerLockChange);
|
|
196
179
|
|
|
180
|
+
// using touchAction is more performant than preventDefault
|
|
181
|
+
// in a touchstart handler.
|
|
197
182
|
container.style.touchAction = 'none';
|
|
198
|
-
container.style.userSelect = 'none';
|
|
199
|
-
|
|
183
|
+
container.style.userSelect = 'none';
|
|
184
|
+
// disables tap highlight for when cursor is pointer
|
|
200
185
|
container.style.webkitTapHighlightColor = 'rgba(0,0,0,0)';
|
|
201
186
|
};
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
187
|
+
publicAPI.unbindEvents = () => {
|
|
188
|
+
const {
|
|
189
|
+
container
|
|
190
|
+
} = model;
|
|
205
191
|
container.removeEventListener('contextmenu', preventDefault);
|
|
206
192
|
container.removeEventListener('wheel', publicAPI.handleWheel);
|
|
207
193
|
container.removeEventListener('DOMMouseScroll', publicAPI.handleWheel);
|
|
@@ -222,101 +208,82 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
222
208
|
model.container = null;
|
|
223
209
|
pointerCache.clear();
|
|
224
210
|
};
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
var data = getKeysFor(event);
|
|
211
|
+
publicAPI.handleKeyPress = event => {
|
|
212
|
+
const data = getKeysFor(event);
|
|
228
213
|
publicAPI.keyPressEvent(data);
|
|
229
214
|
};
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
var data = getKeysFor(event);
|
|
215
|
+
publicAPI.handleKeyDown = event => {
|
|
216
|
+
const data = getKeysFor(event);
|
|
233
217
|
publicAPI.keyDownEvent(data);
|
|
234
218
|
};
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
var data = getKeysFor(event);
|
|
219
|
+
publicAPI.handleKeyUp = event => {
|
|
220
|
+
const data = getKeysFor(event);
|
|
238
221
|
publicAPI.keyUpEvent(data);
|
|
239
222
|
};
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
223
|
+
publicAPI.handlePointerEnter = event => {
|
|
224
|
+
const callData = {
|
|
225
|
+
...getModifierKeysFor(event),
|
|
243
226
|
position: getScreenEventPositionFor(event),
|
|
244
227
|
deviceType: getDeviceTypeFor(event)
|
|
245
|
-
}
|
|
246
|
-
|
|
228
|
+
};
|
|
247
229
|
publicAPI.pointerEnterEvent(callData);
|
|
248
|
-
|
|
249
230
|
if (callData.deviceType === 'mouse') {
|
|
250
231
|
publicAPI.mouseEnterEvent(callData);
|
|
251
232
|
}
|
|
252
233
|
};
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
234
|
+
publicAPI.handlePointerLeave = event => {
|
|
235
|
+
const callData = {
|
|
236
|
+
...getModifierKeysFor(event),
|
|
256
237
|
position: getScreenEventPositionFor(event),
|
|
257
238
|
deviceType: getDeviceTypeFor(event)
|
|
258
|
-
}
|
|
259
|
-
|
|
239
|
+
};
|
|
260
240
|
publicAPI.pointerLeaveEvent(callData);
|
|
261
|
-
|
|
262
241
|
if (callData.deviceType === 'mouse') {
|
|
263
242
|
publicAPI.mouseLeaveEvent(callData);
|
|
264
243
|
}
|
|
265
244
|
};
|
|
266
|
-
|
|
267
|
-
publicAPI.handlePointerDown = function (event) {
|
|
245
|
+
publicAPI.handlePointerDown = event => {
|
|
268
246
|
if (event.button > 2 || publicAPI.isPointerLocked()) {
|
|
269
247
|
// ignore events from extra mouse buttons such as `back` and `forward`
|
|
270
248
|
return;
|
|
271
249
|
}
|
|
272
|
-
|
|
273
250
|
if (model.preventDefaultOnPointerDown) {
|
|
274
251
|
preventDefault(event);
|
|
275
252
|
}
|
|
276
|
-
|
|
277
253
|
if (event.target.hasPointerCapture(event.pointerId)) {
|
|
278
254
|
event.target.releasePointerCapture(event.pointerId);
|
|
279
255
|
}
|
|
280
|
-
|
|
281
256
|
model.container.setPointerCapture(event.pointerId);
|
|
282
|
-
|
|
283
257
|
if (pointerCache.has(event.pointerId)) {
|
|
284
258
|
vtkWarningMacro('[RenderWindowInteractor] duplicate pointerId detected');
|
|
285
259
|
}
|
|
286
|
-
|
|
287
260
|
pointerCache.set(event.pointerId, {
|
|
288
261
|
pointerId: event.pointerId,
|
|
289
262
|
position: getScreenEventPositionFor(event)
|
|
290
263
|
});
|
|
291
|
-
|
|
292
264
|
switch (event.pointerType) {
|
|
293
265
|
case 'pen':
|
|
294
266
|
case 'touch':
|
|
295
267
|
publicAPI.handleTouchStart(event);
|
|
296
268
|
break;
|
|
297
|
-
|
|
298
269
|
case 'mouse':
|
|
299
270
|
default:
|
|
300
271
|
publicAPI.handleMouseDown(event);
|
|
301
272
|
break;
|
|
302
273
|
}
|
|
303
274
|
};
|
|
304
|
-
|
|
305
|
-
publicAPI.handlePointerUp = function (event) {
|
|
275
|
+
publicAPI.handlePointerUp = event => {
|
|
306
276
|
if (pointerCache.has(event.pointerId)) {
|
|
307
277
|
if (model.preventDefaultOnPointerUp) {
|
|
308
278
|
preventDefault(event);
|
|
309
279
|
}
|
|
310
|
-
|
|
311
280
|
pointerCache.delete(event.pointerId);
|
|
312
281
|
model.container.releasePointerCapture(event.pointerId);
|
|
313
|
-
|
|
314
282
|
switch (event.pointerType) {
|
|
315
283
|
case 'pen':
|
|
316
284
|
case 'touch':
|
|
317
285
|
publicAPI.handleTouchEnd(event);
|
|
318
286
|
break;
|
|
319
|
-
|
|
320
287
|
case 'mouse':
|
|
321
288
|
default:
|
|
322
289
|
publicAPI.handleMouseUp(event);
|
|
@@ -324,17 +291,14 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
324
291
|
}
|
|
325
292
|
}
|
|
326
293
|
};
|
|
327
|
-
|
|
328
|
-
publicAPI.handlePointerCancel = function (event) {
|
|
294
|
+
publicAPI.handlePointerCancel = event => {
|
|
329
295
|
if (pointerCache.has(event.pointerId)) {
|
|
330
296
|
pointerCache.delete(event.pointerId);
|
|
331
|
-
|
|
332
297
|
switch (event.pointerType) {
|
|
333
298
|
case 'pen':
|
|
334
299
|
case 'touch':
|
|
335
300
|
publicAPI.handleTouchEnd(event);
|
|
336
301
|
break;
|
|
337
|
-
|
|
338
302
|
case 'mouse':
|
|
339
303
|
default:
|
|
340
304
|
publicAPI.handleMouseUp(event);
|
|
@@ -342,121 +306,100 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
342
306
|
}
|
|
343
307
|
}
|
|
344
308
|
};
|
|
345
|
-
|
|
346
|
-
publicAPI.handlePointerMove = function (event) {
|
|
309
|
+
publicAPI.handlePointerMove = event => {
|
|
347
310
|
if (pointerCache.has(event.pointerId)) {
|
|
348
|
-
|
|
311
|
+
const pointer = pointerCache.get(event.pointerId);
|
|
349
312
|
pointer.position = getScreenEventPositionFor(event);
|
|
350
313
|
}
|
|
351
|
-
|
|
352
314
|
switch (event.pointerType) {
|
|
353
315
|
case 'pen':
|
|
354
316
|
case 'touch':
|
|
355
317
|
publicAPI.handleTouchMove(event);
|
|
356
318
|
break;
|
|
357
|
-
|
|
358
319
|
case 'mouse':
|
|
359
320
|
default:
|
|
360
321
|
publicAPI.handleMouseMove(event);
|
|
361
322
|
break;
|
|
362
323
|
}
|
|
363
324
|
};
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
325
|
+
publicAPI.handleMouseDown = event => {
|
|
326
|
+
const callData = {
|
|
327
|
+
...getModifierKeysFor(event),
|
|
367
328
|
position: getScreenEventPositionFor(event),
|
|
368
329
|
deviceType: getDeviceTypeFor(event)
|
|
369
|
-
}
|
|
370
|
-
|
|
330
|
+
};
|
|
371
331
|
switch (event.button) {
|
|
372
332
|
case 0:
|
|
373
333
|
publicAPI.leftButtonPressEvent(callData);
|
|
374
334
|
break;
|
|
375
|
-
|
|
376
335
|
case 1:
|
|
377
336
|
publicAPI.middleButtonPressEvent(callData);
|
|
378
337
|
break;
|
|
379
|
-
|
|
380
338
|
case 2:
|
|
381
339
|
publicAPI.rightButtonPressEvent(callData);
|
|
382
340
|
break;
|
|
383
|
-
|
|
384
341
|
default:
|
|
385
|
-
vtkErrorMacro(
|
|
342
|
+
vtkErrorMacro(`Unknown mouse button pressed: ${event.button}`);
|
|
386
343
|
break;
|
|
387
344
|
}
|
|
388
|
-
};
|
|
389
|
-
|
|
345
|
+
};
|
|
390
346
|
|
|
391
|
-
|
|
347
|
+
//----------------------------------------------------------------------
|
|
348
|
+
publicAPI.requestPointerLock = () => {
|
|
392
349
|
if (model.container) {
|
|
393
350
|
model.container.requestPointerLock();
|
|
394
351
|
}
|
|
395
|
-
};
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
publicAPI.exitPointerLock = function () {
|
|
399
|
-
var _document$exitPointer, _document;
|
|
400
|
-
|
|
401
|
-
return (_document$exitPointer = (_document = document).exitPointerLock) === null || _document$exitPointer === void 0 ? void 0 : _document$exitPointer.call(_document);
|
|
402
|
-
}; //----------------------------------------------------------------------
|
|
403
|
-
|
|
352
|
+
};
|
|
404
353
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
}; //----------------------------------------------------------------------
|
|
354
|
+
//----------------------------------------------------------------------
|
|
355
|
+
publicAPI.exitPointerLock = () => document.exitPointerLock?.();
|
|
408
356
|
|
|
357
|
+
//----------------------------------------------------------------------
|
|
358
|
+
publicAPI.isPointerLocked = () => !!model.container && document.pointerLockElement === model.container;
|
|
409
359
|
|
|
410
|
-
|
|
360
|
+
//----------------------------------------------------------------------
|
|
361
|
+
publicAPI.handlePointerLockChange = () => {
|
|
411
362
|
if (publicAPI.isPointerLocked()) {
|
|
412
363
|
publicAPI.startPointerLockEvent();
|
|
413
364
|
} else {
|
|
414
365
|
publicAPI.endPointerLockEvent();
|
|
415
366
|
}
|
|
416
|
-
};
|
|
417
|
-
|
|
367
|
+
};
|
|
418
368
|
|
|
369
|
+
//----------------------------------------------------------------------
|
|
419
370
|
function forceRender() {
|
|
420
371
|
if (model._view && model.enabled && model.enableRender) {
|
|
421
372
|
model.inRender = true;
|
|
422
|
-
|
|
423
373
|
model._view.traverseAllPasses();
|
|
424
|
-
|
|
425
374
|
model.inRender = false;
|
|
426
|
-
}
|
|
375
|
+
}
|
|
376
|
+
// outside the above test so that third-party code can redirect
|
|
427
377
|
// the render to the appropriate class
|
|
428
|
-
|
|
429
|
-
|
|
430
378
|
publicAPI.invokeRenderEvent();
|
|
431
379
|
}
|
|
432
|
-
|
|
433
|
-
publicAPI.requestAnimation = function (requestor) {
|
|
380
|
+
publicAPI.requestAnimation = requestor => {
|
|
434
381
|
if (requestor === undefined) {
|
|
435
|
-
vtkErrorMacro(
|
|
382
|
+
vtkErrorMacro(`undefined requester, can not start animating`);
|
|
436
383
|
return;
|
|
437
384
|
}
|
|
438
|
-
|
|
439
385
|
if (animationRequesters.has(requestor)) {
|
|
440
|
-
vtkWarningMacro(
|
|
386
|
+
vtkWarningMacro(`requester is already registered for animating`);
|
|
441
387
|
return;
|
|
442
388
|
}
|
|
443
|
-
|
|
444
389
|
animationRequesters.add(requestor);
|
|
445
|
-
|
|
446
390
|
if (!model.animationRequest && animationRequesters.size === 1 && !model.xrAnimation) {
|
|
447
391
|
model._animationStartTime = Date.now();
|
|
448
392
|
model._animationFrameCount = 0;
|
|
449
393
|
model.animationRequest = requestAnimationFrame(publicAPI.handleAnimation);
|
|
450
394
|
publicAPI.startAnimationEvent();
|
|
451
395
|
}
|
|
452
|
-
};
|
|
453
|
-
// milliseconds.
|
|
454
|
-
|
|
396
|
+
};
|
|
455
397
|
|
|
456
|
-
|
|
457
|
-
|
|
398
|
+
// continue animating for at least the specified duration of
|
|
399
|
+
// milliseconds.
|
|
400
|
+
publicAPI.extendAnimation = duration => {
|
|
401
|
+
const newEnd = Date.now() + duration;
|
|
458
402
|
model._animationExtendedEnd = Math.max(model._animationExtendedEnd, newEnd);
|
|
459
|
-
|
|
460
403
|
if (!model.animationRequest && animationRequesters.size === 0 && !model.xrAnimation) {
|
|
461
404
|
model._animationStartTime = Date.now();
|
|
462
405
|
model._animationFrameCount = 0;
|
|
@@ -464,25 +407,17 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
464
407
|
publicAPI.startAnimationEvent();
|
|
465
408
|
}
|
|
466
409
|
};
|
|
467
|
-
|
|
468
|
-
publicAPI.isAnimating = function () {
|
|
469
|
-
return model.xrAnimation || model.animationRequest !== null;
|
|
470
|
-
};
|
|
471
|
-
|
|
410
|
+
publicAPI.isAnimating = () => model.xrAnimation || model.animationRequest !== null;
|
|
472
411
|
publicAPI.cancelAnimation = function (requestor) {
|
|
473
|
-
|
|
474
|
-
|
|
412
|
+
let skipWarning = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
475
413
|
if (!animationRequesters.has(requestor)) {
|
|
476
414
|
if (!skipWarning) {
|
|
477
|
-
|
|
478
|
-
vtkWarningMacro(
|
|
415
|
+
const requestStr = requestor && requestor.getClassName ? requestor.getClassName() : requestor;
|
|
416
|
+
vtkWarningMacro(`${requestStr} did not request an animation`);
|
|
479
417
|
}
|
|
480
|
-
|
|
481
418
|
return;
|
|
482
419
|
}
|
|
483
|
-
|
|
484
420
|
animationRequesters.delete(requestor);
|
|
485
|
-
|
|
486
421
|
if (model.animationRequest && animationRequesters.size === 0 && Date.now() > model._animationExtendedEnd) {
|
|
487
422
|
cancelAnimationFrame(model.animationRequest);
|
|
488
423
|
model.animationRequest = null;
|
|
@@ -490,33 +425,27 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
490
425
|
publicAPI.render();
|
|
491
426
|
}
|
|
492
427
|
};
|
|
493
|
-
|
|
494
|
-
publicAPI.switchToXRAnimation = function () {
|
|
428
|
+
publicAPI.switchToXRAnimation = () => {
|
|
495
429
|
// cancel existing animation if any
|
|
496
430
|
if (model.animationRequest) {
|
|
497
431
|
cancelAnimationFrame(model.animationRequest);
|
|
498
432
|
model.animationRequest = null;
|
|
499
433
|
}
|
|
500
|
-
|
|
501
434
|
model.xrAnimation = true;
|
|
502
435
|
};
|
|
503
|
-
|
|
504
|
-
publicAPI.returnFromXRAnimation = function () {
|
|
436
|
+
publicAPI.returnFromXRAnimation = () => {
|
|
505
437
|
model.xrAnimation = false;
|
|
506
|
-
|
|
507
438
|
if (animationRequesters.size !== 0) {
|
|
508
439
|
model.recentAnimationFrameRate = 10.0;
|
|
509
440
|
model.animationRequest = requestAnimationFrame(publicAPI.handleAnimation);
|
|
510
441
|
}
|
|
511
442
|
};
|
|
512
|
-
|
|
513
|
-
publicAPI.updateXRGamepads = function (xrSession, xrFrame, xrRefSpace) {
|
|
443
|
+
publicAPI.updateXRGamepads = (xrSession, xrFrame, xrRefSpace) => {
|
|
514
444
|
// watch for when buttons change state and fire events
|
|
515
|
-
xrSession.inputSources.forEach(
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
445
|
+
xrSession.inputSources.forEach(inputSource => {
|
|
446
|
+
const gripPose = inputSource.gripSpace == null ? null : xrFrame.getPose(inputSource.gripSpace, xrRefSpace);
|
|
447
|
+
const gp = inputSource.gamepad;
|
|
448
|
+
const hand = inputSource.handedness;
|
|
520
449
|
if (gp) {
|
|
521
450
|
if (!(gp.index in model.lastGamepadValues)) {
|
|
522
451
|
model.lastGamepadValues[gp.index] = {
|
|
@@ -531,12 +460,10 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
531
460
|
}
|
|
532
461
|
};
|
|
533
462
|
}
|
|
534
|
-
|
|
535
|
-
for (var b = 0; b < gp.buttons.length; ++b) {
|
|
463
|
+
for (let b = 0; b < gp.buttons.length; ++b) {
|
|
536
464
|
if (!(b in model.lastGamepadValues[gp.index][hand].buttons)) {
|
|
537
465
|
model.lastGamepadValues[gp.index][hand].buttons[b] = false;
|
|
538
466
|
}
|
|
539
|
-
|
|
540
467
|
if (model.lastGamepadValues[gp.index][hand].buttons[b] !== gp.buttons[b].pressed && gripPose != null) {
|
|
541
468
|
publicAPI.button3DEvent({
|
|
542
469
|
gamepad: gp,
|
|
@@ -548,7 +475,6 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
548
475
|
});
|
|
549
476
|
model.lastGamepadValues[gp.index][hand].buttons[b] = gp.buttons[b].pressed;
|
|
550
477
|
}
|
|
551
|
-
|
|
552
478
|
if (model.lastGamepadValues[gp.index][hand].buttons[b] && gripPose != null) {
|
|
553
479
|
publicAPI.move3DEvent({
|
|
554
480
|
gamepad: gp,
|
|
@@ -561,31 +487,28 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
561
487
|
}
|
|
562
488
|
});
|
|
563
489
|
};
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
490
|
+
publicAPI.handleMouseMove = event => {
|
|
491
|
+
const callData = {
|
|
492
|
+
...getModifierKeysFor(event),
|
|
567
493
|
position: getScreenEventPositionFor(event),
|
|
568
494
|
deviceType: getDeviceTypeFor(event)
|
|
569
|
-
}
|
|
570
|
-
|
|
495
|
+
};
|
|
571
496
|
if (model.moveTimeoutID === 0) {
|
|
572
497
|
publicAPI.startMouseMoveEvent(callData);
|
|
573
498
|
} else {
|
|
574
499
|
publicAPI.mouseMoveEvent(callData);
|
|
575
500
|
clearTimeout(model.moveTimeoutID);
|
|
576
|
-
}
|
|
577
|
-
|
|
501
|
+
}
|
|
578
502
|
|
|
579
|
-
|
|
503
|
+
// start a timer to keep us animating while we get mouse move events
|
|
504
|
+
model.moveTimeoutID = setTimeout(() => {
|
|
580
505
|
publicAPI.endMouseMoveEvent();
|
|
581
506
|
model.moveTimeoutID = 0;
|
|
582
507
|
}, 200);
|
|
583
508
|
};
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
var currTime = Date.now();
|
|
509
|
+
publicAPI.handleAnimation = () => {
|
|
510
|
+
const currTime = Date.now();
|
|
587
511
|
model._animationFrameCount++;
|
|
588
|
-
|
|
589
512
|
if (currTime - model._animationStartTime > 1000.0 && model._animationFrameCount > 1) {
|
|
590
513
|
model.recentAnimationFrameRate = 1000.0 * (model._animationFrameCount - 1) / (currTime - model._animationStartTime);
|
|
591
514
|
model.lastFrameTime = 1.0 / model.recentAnimationFrameRate;
|
|
@@ -593,10 +516,8 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
593
516
|
model._animationStartTime = currTime;
|
|
594
517
|
model._animationFrameCount = 1;
|
|
595
518
|
}
|
|
596
|
-
|
|
597
519
|
publicAPI.animationEvent();
|
|
598
520
|
forceRender();
|
|
599
|
-
|
|
600
521
|
if (animationRequesters.size > 0 || Date.now() < model._animationExtendedEnd) {
|
|
601
522
|
model.animationRequest = requestAnimationFrame(publicAPI.handleAnimation);
|
|
602
523
|
} else {
|
|
@@ -606,9 +527,9 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
606
527
|
publicAPI.render();
|
|
607
528
|
}
|
|
608
529
|
};
|
|
609
|
-
|
|
610
|
-
publicAPI.handleWheel = function (event) {
|
|
530
|
+
publicAPI.handleWheel = event => {
|
|
611
531
|
preventDefault(event);
|
|
532
|
+
|
|
612
533
|
/**
|
|
613
534
|
* wheel event values can vary significantly across browsers, platforms
|
|
614
535
|
* and devices [1]. `normalizeWheel` uses facebook's solution from their
|
|
@@ -625,18 +546,19 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
625
546
|
* pixelY -- " - y plane
|
|
626
547
|
*
|
|
627
548
|
*/
|
|
628
|
-
|
|
629
|
-
|
|
549
|
+
const callData = {
|
|
550
|
+
...normalizeWheel(event),
|
|
551
|
+
...getModifierKeysFor(event),
|
|
630
552
|
position: getScreenEventPositionFor(event),
|
|
631
553
|
deviceType: getDeviceTypeFor(event)
|
|
632
|
-
}
|
|
554
|
+
};
|
|
555
|
+
|
|
556
|
+
// Wheel events are thought to scroll pages (i.e. multiple lines at once).
|
|
633
557
|
// See normalizeWheel() documentation for more context.
|
|
634
558
|
// While trackpad wheel events are many small (<1) wheel spins,
|
|
635
559
|
// mouse wheel events have absolute spin values higher than 1.
|
|
636
560
|
// Here the first spin value is "recorded", and used to normalize
|
|
637
561
|
// all the following mouse wheel events.
|
|
638
|
-
|
|
639
|
-
|
|
640
562
|
if (model.wheelTimeoutID === 0) {
|
|
641
563
|
// we attempt to distinguish between trackpads and mice
|
|
642
564
|
// .3 will be larger than the first trackpad event,
|
|
@@ -649,9 +571,7 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
649
571
|
wheelCoefficient = 1;
|
|
650
572
|
}
|
|
651
573
|
}
|
|
652
|
-
|
|
653
574
|
callData.spinY /= wheelCoefficient;
|
|
654
|
-
|
|
655
575
|
if (model.wheelTimeoutID === 0) {
|
|
656
576
|
publicAPI.startMouseWheelEvent(callData);
|
|
657
577
|
publicAPI.mouseWheelEvent(callData);
|
|
@@ -659,334 +579,298 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
659
579
|
publicAPI.mouseWheelEvent(callData);
|
|
660
580
|
clearTimeout(model.wheelTimeoutID);
|
|
661
581
|
}
|
|
662
|
-
|
|
663
582
|
if (model.mouseScrollDebounceByPass) {
|
|
664
583
|
publicAPI.extendAnimation(600);
|
|
665
584
|
publicAPI.endMouseWheelEvent();
|
|
666
585
|
model.wheelTimeoutID = 0;
|
|
667
586
|
} else {
|
|
668
587
|
// start a timer to keep us animating while we get wheel events
|
|
669
|
-
model.wheelTimeoutID = setTimeout(
|
|
588
|
+
model.wheelTimeoutID = setTimeout(() => {
|
|
670
589
|
publicAPI.extendAnimation(600);
|
|
671
590
|
publicAPI.endMouseWheelEvent();
|
|
672
591
|
model.wheelTimeoutID = 0;
|
|
673
592
|
}, 200);
|
|
674
593
|
}
|
|
675
594
|
};
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
595
|
+
publicAPI.handleMouseUp = event => {
|
|
596
|
+
const callData = {
|
|
597
|
+
...getModifierKeysFor(event),
|
|
679
598
|
position: getScreenEventPositionFor(event),
|
|
680
599
|
deviceType: getDeviceTypeFor(event)
|
|
681
|
-
}
|
|
682
|
-
|
|
600
|
+
};
|
|
683
601
|
switch (event.button) {
|
|
684
602
|
case 0:
|
|
685
603
|
publicAPI.leftButtonReleaseEvent(callData);
|
|
686
604
|
break;
|
|
687
|
-
|
|
688
605
|
case 1:
|
|
689
606
|
publicAPI.middleButtonReleaseEvent(callData);
|
|
690
607
|
break;
|
|
691
|
-
|
|
692
608
|
case 2:
|
|
693
609
|
publicAPI.rightButtonReleaseEvent(callData);
|
|
694
610
|
break;
|
|
695
|
-
|
|
696
611
|
default:
|
|
697
|
-
vtkErrorMacro(
|
|
612
|
+
vtkErrorMacro(`Unknown mouse button released: ${event.button}`);
|
|
698
613
|
break;
|
|
699
614
|
}
|
|
700
615
|
};
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
616
|
+
publicAPI.handleTouchStart = event => {
|
|
617
|
+
const pointers = [...pointerCache.values()];
|
|
618
|
+
// If multitouch
|
|
706
619
|
if (model.recognizeGestures && pointers.length > 1) {
|
|
707
|
-
|
|
708
|
-
|
|
620
|
+
const positions = pointerCacheToPositions(pointerCache);
|
|
621
|
+
// did we just transition to multitouch?
|
|
709
622
|
if (pointers.length === 2) {
|
|
710
|
-
|
|
623
|
+
const callData = {
|
|
624
|
+
...getModifierKeysFor(EMPTY_MOUSE_EVENT),
|
|
711
625
|
position: pointers[0].position,
|
|
712
626
|
deviceType: getDeviceTypeFor(event)
|
|
713
|
-
}
|
|
714
|
-
|
|
627
|
+
};
|
|
715
628
|
publicAPI.leftButtonReleaseEvent(callData);
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
|
|
629
|
+
}
|
|
630
|
+
// handle the gesture
|
|
719
631
|
publicAPI.recognizeGesture('TouchStart', positions);
|
|
720
632
|
} else if (pointers.length === 1) {
|
|
721
|
-
|
|
633
|
+
const callData = {
|
|
634
|
+
...getModifierKeysFor(EMPTY_MOUSE_EVENT),
|
|
722
635
|
position: getScreenEventPositionFor(event),
|
|
723
636
|
deviceType: getDeviceTypeFor(event)
|
|
724
|
-
}
|
|
725
|
-
|
|
726
|
-
publicAPI.leftButtonPressEvent(_callData);
|
|
637
|
+
};
|
|
638
|
+
publicAPI.leftButtonPressEvent(callData);
|
|
727
639
|
}
|
|
728
640
|
};
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
var pointers = _toConsumableArray(pointerCache.values());
|
|
732
|
-
|
|
641
|
+
publicAPI.handleTouchMove = event => {
|
|
642
|
+
const pointers = [...pointerCache.values()];
|
|
733
643
|
if (model.recognizeGestures && pointers.length > 1) {
|
|
734
|
-
|
|
644
|
+
const positions = pointerCacheToPositions(pointerCache);
|
|
735
645
|
publicAPI.recognizeGesture('TouchMove', positions);
|
|
736
646
|
} else if (pointers.length === 1) {
|
|
737
|
-
|
|
647
|
+
const callData = {
|
|
648
|
+
...getModifierKeysFor(EMPTY_MOUSE_EVENT),
|
|
738
649
|
position: pointers[0].position,
|
|
739
650
|
deviceType: getDeviceTypeFor(event)
|
|
740
|
-
}
|
|
741
|
-
|
|
651
|
+
};
|
|
742
652
|
publicAPI.mouseMoveEvent(callData);
|
|
743
653
|
}
|
|
744
654
|
};
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
var pointers = _toConsumableArray(pointerCache.values());
|
|
748
|
-
|
|
655
|
+
publicAPI.handleTouchEnd = event => {
|
|
656
|
+
const pointers = [...pointerCache.values()];
|
|
749
657
|
if (model.recognizeGestures) {
|
|
750
658
|
// No more fingers down
|
|
751
659
|
if (pointers.length === 0) {
|
|
752
|
-
|
|
660
|
+
const callData = {
|
|
661
|
+
...getModifierKeysFor(EMPTY_MOUSE_EVENT),
|
|
753
662
|
position: getScreenEventPositionFor(event),
|
|
754
663
|
deviceType: getDeviceTypeFor(event)
|
|
755
|
-
}
|
|
756
|
-
|
|
664
|
+
};
|
|
757
665
|
publicAPI.leftButtonReleaseEvent(callData);
|
|
758
666
|
} else if (pointers.length === 1) {
|
|
759
667
|
// If one finger left, end touch and start button press
|
|
760
|
-
|
|
668
|
+
const positions = pointerCacheToPositions(pointerCache);
|
|
761
669
|
publicAPI.recognizeGesture('TouchEnd', positions);
|
|
762
|
-
|
|
763
|
-
|
|
670
|
+
const callData = {
|
|
671
|
+
...getModifierKeysFor(EMPTY_MOUSE_EVENT),
|
|
764
672
|
position: pointers[0].position,
|
|
765
673
|
deviceType: getDeviceTypeFor(event)
|
|
766
|
-
}
|
|
767
|
-
|
|
768
|
-
publicAPI.leftButtonPressEvent(_callData2);
|
|
674
|
+
};
|
|
675
|
+
publicAPI.leftButtonPressEvent(callData);
|
|
769
676
|
} else {
|
|
770
677
|
// If more than one finger left, keep touch move
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
publicAPI.recognizeGesture('TouchMove', _positions);
|
|
678
|
+
const positions = pointerCacheToPositions(pointerCache);
|
|
679
|
+
publicAPI.recognizeGesture('TouchMove', positions);
|
|
774
680
|
}
|
|
775
681
|
} else if (pointers.length === 1) {
|
|
776
|
-
|
|
682
|
+
const callData = {
|
|
683
|
+
...getModifierKeysFor(EMPTY_MOUSE_EVENT),
|
|
777
684
|
position: pointers[0].position,
|
|
778
685
|
deviceType: getDeviceTypeFor(event)
|
|
779
|
-
}
|
|
780
|
-
|
|
781
|
-
publicAPI.leftButtonReleaseEvent(_callData3);
|
|
686
|
+
};
|
|
687
|
+
publicAPI.leftButtonReleaseEvent(callData);
|
|
782
688
|
}
|
|
783
689
|
};
|
|
784
|
-
|
|
785
|
-
publicAPI.setView = function (val) {
|
|
690
|
+
publicAPI.setView = val => {
|
|
786
691
|
if (model._view === val) {
|
|
787
692
|
return;
|
|
788
693
|
}
|
|
789
|
-
|
|
790
694
|
model._view = val;
|
|
791
|
-
|
|
792
695
|
model._view.getRenderable().setInteractor(publicAPI);
|
|
793
|
-
|
|
794
696
|
publicAPI.modified();
|
|
795
697
|
};
|
|
796
|
-
|
|
797
|
-
publicAPI.getFirstRenderer = function () {
|
|
798
|
-
var _model$_view, _model$_view$getRende, _model$_view$getRende2;
|
|
799
|
-
|
|
800
|
-
return (_model$_view = model._view) === null || _model$_view === void 0 ? void 0 : (_model$_view$getRende = _model$_view.getRenderable()) === null || _model$_view$getRende === void 0 ? void 0 : (_model$_view$getRende2 = _model$_view$getRende.getRenderersByReference()) === null || _model$_view$getRende2 === void 0 ? void 0 : _model$_view$getRende2[0];
|
|
801
|
-
};
|
|
802
|
-
|
|
698
|
+
publicAPI.getFirstRenderer = () => model._view?.getRenderable()?.getRenderersByReference()?.[0];
|
|
803
699
|
publicAPI.findPokedRenderer = function () {
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
807
|
-
var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
808
|
-
|
|
700
|
+
let x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
701
|
+
let y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
809
702
|
if (!model._view) {
|
|
810
703
|
return null;
|
|
811
|
-
}
|
|
704
|
+
}
|
|
705
|
+
// The original order of renderers needs to remain as
|
|
812
706
|
// the first one is the one we want to manipulate the camera on.
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
var rc = (_model$_view2 = model._view) === null || _model$_view2 === void 0 ? void 0 : (_model$_view2$getRend = _model$_view2.getRenderable()) === null || _model$_view2$getRend === void 0 ? void 0 : _model$_view2$getRend.getRenderers();
|
|
816
|
-
|
|
707
|
+
const rc = model._view?.getRenderable()?.getRenderers();
|
|
817
708
|
if (!rc || rc.length === 0) {
|
|
818
709
|
return null;
|
|
819
710
|
}
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
var viewportren = null;
|
|
826
|
-
var currentRenderer = null;
|
|
827
|
-
var count = rc.length;
|
|
828
|
-
|
|
711
|
+
rc.sort((a, b) => a.getLayer() - b.getLayer());
|
|
712
|
+
let interactiveren = null;
|
|
713
|
+
let viewportren = null;
|
|
714
|
+
let currentRenderer = null;
|
|
715
|
+
let count = rc.length;
|
|
829
716
|
while (count--) {
|
|
830
|
-
|
|
831
|
-
|
|
717
|
+
const aren = rc[count];
|
|
832
718
|
if (model._view.isInViewport(x, y, aren) && aren.getInteractive()) {
|
|
833
719
|
currentRenderer = aren;
|
|
834
720
|
break;
|
|
835
721
|
}
|
|
836
|
-
|
|
837
722
|
if (interactiveren === null && aren.getInteractive()) {
|
|
838
723
|
// Save this renderer in case we can't find one in the viewport that
|
|
839
724
|
// is interactive.
|
|
840
725
|
interactiveren = aren;
|
|
841
726
|
}
|
|
842
|
-
|
|
843
727
|
if (viewportren === null && model._view.isInViewport(x, y, aren)) {
|
|
844
728
|
// Save this renderer in case we can't find one in the viewport that
|
|
845
729
|
// is interactive.
|
|
846
730
|
viewportren = aren;
|
|
847
731
|
}
|
|
848
|
-
}
|
|
849
|
-
// better than a non-interactive renderer.
|
|
850
|
-
|
|
732
|
+
}
|
|
851
733
|
|
|
734
|
+
// We must have a value. If we found an interactive renderer before, that's
|
|
735
|
+
// better than a non-interactive renderer.
|
|
852
736
|
if (currentRenderer === null) {
|
|
853
737
|
currentRenderer = interactiveren;
|
|
854
|
-
}
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
// We must have a value. If we found a renderer that is in the viewport,
|
|
855
741
|
// that is better than any old viewport (but not as good as an interactive
|
|
856
742
|
// one).
|
|
857
|
-
|
|
858
|
-
|
|
859
743
|
if (currentRenderer === null) {
|
|
860
744
|
currentRenderer = viewportren;
|
|
861
|
-
}
|
|
862
|
-
|
|
745
|
+
}
|
|
863
746
|
|
|
747
|
+
// We must have a value - take anything.
|
|
864
748
|
if (currentRenderer == null) {
|
|
865
749
|
currentRenderer = rc[0];
|
|
866
750
|
}
|
|
867
|
-
|
|
868
751
|
return currentRenderer;
|
|
869
|
-
};
|
|
752
|
+
};
|
|
753
|
+
|
|
754
|
+
// only render if we are not animating. If we are animating
|
|
870
755
|
// then renders will happen naturally anyhow and we definitely
|
|
871
756
|
// do not want extra renders as the make the apparent interaction
|
|
872
757
|
// rate slower.
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
publicAPI.render = function () {
|
|
758
|
+
publicAPI.render = () => {
|
|
876
759
|
if (!publicAPI.isAnimating() && !model.inRender) {
|
|
877
760
|
forceRender();
|
|
878
761
|
}
|
|
879
|
-
};
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
handledEvents.forEach(function (eventName) {
|
|
883
|
-
var lowerFirst = eventName.charAt(0).toLowerCase() + eventName.slice(1);
|
|
762
|
+
};
|
|
884
763
|
|
|
885
|
-
|
|
764
|
+
// create the generic Event methods
|
|
765
|
+
handledEvents.forEach(eventName => {
|
|
766
|
+
const lowerFirst = eventName.charAt(0).toLowerCase() + eventName.slice(1);
|
|
767
|
+
publicAPI[`${lowerFirst}Event`] = arg => {
|
|
886
768
|
// Check that interactor enabled
|
|
887
769
|
if (!model.enabled) {
|
|
888
770
|
return;
|
|
889
|
-
}
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
var renderer = publicAPI.getCurrentRenderer();
|
|
771
|
+
}
|
|
893
772
|
|
|
773
|
+
// Check that a poked renderer exists
|
|
774
|
+
const renderer = publicAPI.getCurrentRenderer();
|
|
894
775
|
if (!renderer) {
|
|
895
|
-
vtkOnceErrorMacro(
|
|
776
|
+
vtkOnceErrorMacro(`
|
|
777
|
+
Can not forward events without a current renderer on the interactor.
|
|
778
|
+
`);
|
|
896
779
|
return;
|
|
897
|
-
}
|
|
898
|
-
|
|
780
|
+
}
|
|
899
781
|
|
|
900
|
-
|
|
782
|
+
// Pass the eventName and the poked renderer
|
|
783
|
+
const callData = {
|
|
901
784
|
type: eventName,
|
|
902
785
|
pokedRenderer: model.currentRenderer,
|
|
903
|
-
firstRenderer: publicAPI.getFirstRenderer()
|
|
904
|
-
|
|
905
|
-
|
|
786
|
+
firstRenderer: publicAPI.getFirstRenderer(),
|
|
787
|
+
// Add the arguments to the call data
|
|
788
|
+
...arg
|
|
789
|
+
};
|
|
906
790
|
|
|
907
|
-
|
|
791
|
+
// Call invoke
|
|
792
|
+
publicAPI[`invoke${eventName}`](callData);
|
|
908
793
|
};
|
|
909
|
-
});
|
|
794
|
+
});
|
|
910
795
|
|
|
911
|
-
|
|
796
|
+
// we know we are in multitouch now, so start recognizing
|
|
797
|
+
publicAPI.recognizeGesture = (event, positions) => {
|
|
912
798
|
// more than two pointers we ignore
|
|
913
799
|
if (Object.keys(positions).length > 2) {
|
|
914
800
|
return;
|
|
915
801
|
}
|
|
916
|
-
|
|
917
802
|
if (!model.startingEventPositions) {
|
|
918
803
|
model.startingEventPositions = {};
|
|
919
|
-
}
|
|
920
|
-
|
|
804
|
+
}
|
|
921
805
|
|
|
806
|
+
// store the initial positions
|
|
922
807
|
if (event === 'TouchStart') {
|
|
923
|
-
Object.keys(positions).forEach(
|
|
808
|
+
Object.keys(positions).forEach(key => {
|
|
924
809
|
model.startingEventPositions[key] = positions[key];
|
|
925
|
-
});
|
|
926
|
-
|
|
810
|
+
});
|
|
811
|
+
// we do not know what the gesture is yet
|
|
927
812
|
model.currentGesture = 'Start';
|
|
928
813
|
return;
|
|
929
|
-
}
|
|
930
|
-
|
|
814
|
+
}
|
|
931
815
|
|
|
816
|
+
// end the gesture if needed
|
|
932
817
|
if (event === 'TouchEnd') {
|
|
933
818
|
if (model.currentGesture === 'Pinch') {
|
|
934
819
|
publicAPI.render();
|
|
935
820
|
publicAPI.endPinchEvent();
|
|
936
821
|
}
|
|
937
|
-
|
|
938
822
|
if (model.currentGesture === 'Rotate') {
|
|
939
823
|
publicAPI.render();
|
|
940
824
|
publicAPI.endRotateEvent();
|
|
941
825
|
}
|
|
942
|
-
|
|
943
826
|
if (model.currentGesture === 'Pan') {
|
|
944
827
|
publicAPI.render();
|
|
945
828
|
publicAPI.endPanEvent();
|
|
946
829
|
}
|
|
947
|
-
|
|
948
830
|
model.currentGesture = 'Start';
|
|
949
831
|
model.startingEventPositions = {};
|
|
950
832
|
return;
|
|
951
|
-
}
|
|
952
|
-
|
|
833
|
+
}
|
|
953
834
|
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
835
|
+
// what are the two pointers we are working with
|
|
836
|
+
let count = 0;
|
|
837
|
+
const posVals = [];
|
|
838
|
+
const startVals = [];
|
|
839
|
+
Object.keys(positions).forEach(key => {
|
|
958
840
|
posVals[count] = positions[key];
|
|
959
841
|
startVals[count] = model.startingEventPositions[key];
|
|
960
842
|
count++;
|
|
961
|
-
});
|
|
843
|
+
});
|
|
844
|
+
|
|
845
|
+
// The meat of the algorithm
|
|
962
846
|
// on move events we analyze them to determine what type
|
|
963
847
|
// of movement it is and then deal with it.
|
|
964
848
|
// calculate the distances
|
|
849
|
+
const originalDistance = Math.sqrt((startVals[0].x - startVals[1].x) * (startVals[0].x - startVals[1].x) + (startVals[0].y - startVals[1].y) * (startVals[0].y - startVals[1].y));
|
|
850
|
+
const newDistance = Math.sqrt((posVals[0].x - posVals[1].x) * (posVals[0].x - posVals[1].x) + (posVals[0].y - posVals[1].y) * (posVals[0].y - posVals[1].y));
|
|
965
851
|
|
|
966
|
-
|
|
967
|
-
|
|
852
|
+
// calculate rotations
|
|
853
|
+
let originalAngle = degreesFromRadians(Math.atan2(startVals[1].y - startVals[0].y, startVals[1].x - startVals[0].x));
|
|
854
|
+
let newAngle = degreesFromRadians(Math.atan2(posVals[1].y - posVals[0].y, posVals[1].x - posVals[0].x));
|
|
968
855
|
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
var angleDeviation = newAngle - originalAngle;
|
|
856
|
+
// angles are cyclic so watch for that, 1 and 359 are only 2 apart :)
|
|
857
|
+
let angleDeviation = newAngle - originalAngle;
|
|
973
858
|
newAngle = newAngle + 180.0 >= 360.0 ? newAngle - 180.0 : newAngle + 180.0;
|
|
974
859
|
originalAngle = originalAngle + 180.0 >= 360.0 ? originalAngle - 180.0 : originalAngle + 180.0;
|
|
975
|
-
|
|
976
860
|
if (Math.abs(newAngle - originalAngle) < Math.abs(angleDeviation)) {
|
|
977
861
|
angleDeviation = newAngle - originalAngle;
|
|
978
|
-
}
|
|
979
|
-
|
|
862
|
+
}
|
|
980
863
|
|
|
981
|
-
|
|
864
|
+
// calculate the translations
|
|
865
|
+
const trans = [];
|
|
982
866
|
trans[0] = (posVals[0].x - startVals[0].x + posVals[1].x - startVals[1].x) / 2.0;
|
|
983
867
|
trans[1] = (posVals[0].y - startVals[0].y + posVals[1].y - startVals[1].y) / 2.0;
|
|
984
|
-
|
|
985
868
|
if (event === 'TouchMove') {
|
|
986
869
|
// OK we want to
|
|
987
870
|
// - immediately respond to the user
|
|
988
871
|
// - allow the user to zoom without panning (saves focal point)
|
|
989
872
|
// - allow the user to rotate without panning (saves focal point)
|
|
873
|
+
|
|
990
874
|
// do we know what gesture we are doing yet? If not
|
|
991
875
|
// see if we can figure it out
|
|
992
876
|
if (model.currentGesture === 'Start') {
|
|
@@ -995,109 +879,99 @@ function vtkRenderWindowInteractor(publicAPI, model) {
|
|
|
995
879
|
// pan is a move of the center point
|
|
996
880
|
// compute the distance along each of these axes in pixels
|
|
997
881
|
// the first to break thresh wins
|
|
998
|
-
|
|
999
|
-
|
|
882
|
+
let thresh = 0.01 * Math.sqrt(model.container.clientWidth * model.container.clientWidth + model.container.clientHeight * model.container.clientHeight);
|
|
1000
883
|
if (thresh < 15.0) {
|
|
1001
884
|
thresh = 15.0;
|
|
1002
885
|
}
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
var panDistance = Math.sqrt(trans[0] * trans[0] + trans[1] * trans[1]);
|
|
1007
|
-
|
|
886
|
+
const pinchDistance = Math.abs(newDistance - originalDistance);
|
|
887
|
+
const rotateDistance = newDistance * 3.1415926 * Math.abs(angleDeviation) / 360.0;
|
|
888
|
+
const panDistance = Math.sqrt(trans[0] * trans[0] + trans[1] * trans[1]);
|
|
1008
889
|
if (pinchDistance > thresh && pinchDistance > rotateDistance && pinchDistance > panDistance) {
|
|
1009
890
|
model.currentGesture = 'Pinch';
|
|
1010
|
-
|
|
891
|
+
const callData = {
|
|
1011
892
|
scale: 1.0,
|
|
1012
893
|
touches: positions
|
|
1013
894
|
};
|
|
1014
895
|
publicAPI.startPinchEvent(callData);
|
|
1015
896
|
} else if (rotateDistance > thresh && rotateDistance > panDistance) {
|
|
1016
897
|
model.currentGesture = 'Rotate';
|
|
1017
|
-
|
|
898
|
+
const callData = {
|
|
1018
899
|
rotation: 0.0,
|
|
1019
900
|
touches: positions
|
|
1020
901
|
};
|
|
1021
|
-
publicAPI.startRotateEvent(
|
|
902
|
+
publicAPI.startRotateEvent(callData);
|
|
1022
903
|
} else if (panDistance > thresh) {
|
|
1023
904
|
model.currentGesture = 'Pan';
|
|
1024
|
-
|
|
905
|
+
const callData = {
|
|
1025
906
|
translation: [0, 0],
|
|
1026
907
|
touches: positions
|
|
1027
908
|
};
|
|
1028
|
-
publicAPI.startPanEvent(
|
|
909
|
+
publicAPI.startPanEvent(callData);
|
|
1029
910
|
}
|
|
1030
911
|
} else {
|
|
1031
912
|
// if we have found a specific type of movement then
|
|
1032
913
|
// handle it
|
|
1033
914
|
if (model.currentGesture === 'Rotate') {
|
|
1034
|
-
|
|
915
|
+
const callData = {
|
|
1035
916
|
rotation: angleDeviation,
|
|
1036
917
|
touches: positions
|
|
1037
918
|
};
|
|
1038
|
-
publicAPI.rotateEvent(
|
|
919
|
+
publicAPI.rotateEvent(callData);
|
|
1039
920
|
}
|
|
1040
|
-
|
|
1041
921
|
if (model.currentGesture === 'Pinch') {
|
|
1042
|
-
|
|
922
|
+
const callData = {
|
|
1043
923
|
scale: newDistance / originalDistance,
|
|
1044
924
|
touches: positions
|
|
1045
925
|
};
|
|
1046
|
-
publicAPI.pinchEvent(
|
|
926
|
+
publicAPI.pinchEvent(callData);
|
|
1047
927
|
}
|
|
1048
|
-
|
|
1049
928
|
if (model.currentGesture === 'Pan') {
|
|
1050
|
-
|
|
929
|
+
const callData = {
|
|
1051
930
|
translation: trans,
|
|
1052
931
|
touches: positions
|
|
1053
932
|
};
|
|
1054
|
-
publicAPI.panEvent(
|
|
933
|
+
publicAPI.panEvent(callData);
|
|
1055
934
|
}
|
|
1056
935
|
}
|
|
1057
936
|
}
|
|
1058
937
|
};
|
|
1059
|
-
|
|
1060
|
-
publicAPI.handleVisibilityChange = function () {
|
|
938
|
+
publicAPI.handleVisibilityChange = () => {
|
|
1061
939
|
model._animationStartTime = Date.now();
|
|
1062
940
|
model._animationFrameCount = 0;
|
|
1063
941
|
};
|
|
1064
|
-
|
|
1065
|
-
publicAPI.setCurrentRenderer = function (r) {
|
|
942
|
+
publicAPI.setCurrentRenderer = r => {
|
|
1066
943
|
model._forcedRenderer = !!r;
|
|
1067
944
|
model.currentRenderer = r;
|
|
1068
|
-
};
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
var superDelete = publicAPI.delete;
|
|
945
|
+
};
|
|
1072
946
|
|
|
1073
|
-
|
|
947
|
+
// Stop animating if the renderWindowInteractor is deleted.
|
|
948
|
+
const superDelete = publicAPI.delete;
|
|
949
|
+
publicAPI.delete = () => {
|
|
1074
950
|
while (animationRequesters.size) {
|
|
1075
951
|
publicAPI.cancelAnimation(animationRequesters.values().next().value);
|
|
1076
952
|
}
|
|
1077
|
-
|
|
1078
953
|
if (typeof document.hidden !== 'undefined') {
|
|
1079
954
|
document.removeEventListener('visibilitychange', publicAPI.handleVisibilityChange);
|
|
1080
955
|
}
|
|
1081
|
-
|
|
1082
956
|
if (model.container) {
|
|
1083
957
|
publicAPI.unbindEvents();
|
|
1084
958
|
}
|
|
1085
|
-
|
|
1086
959
|
superDelete();
|
|
1087
|
-
};
|
|
960
|
+
};
|
|
961
|
+
|
|
962
|
+
// Use the Page Visibility API to detect when we switch away from or back to
|
|
1088
963
|
// this tab, and reset the animationFrameStart. When tabs are not active, browsers
|
|
1089
964
|
// will stop calling requestAnimationFrame callbacks.
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
965
|
if (typeof document.hidden !== 'undefined') {
|
|
1093
966
|
document.addEventListener('visibilitychange', publicAPI.handleVisibilityChange, false);
|
|
1094
967
|
}
|
|
1095
|
-
}
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
// ----------------------------------------------------------------------------
|
|
1096
971
|
// Object factory
|
|
1097
972
|
// ----------------------------------------------------------------------------
|
|
1098
973
|
|
|
1099
|
-
|
|
1100
|
-
var DEFAULT_VALUES = {
|
|
974
|
+
const DEFAULT_VALUES = {
|
|
1101
975
|
renderWindow: null,
|
|
1102
976
|
interactorStyle: null,
|
|
1103
977
|
picker: null,
|
|
@@ -1122,35 +996,46 @@ var DEFAULT_VALUES = {
|
|
|
1122
996
|
preventDefaultOnPointerDown: false,
|
|
1123
997
|
preventDefaultOnPointerUp: false,
|
|
1124
998
|
mouseScrollDebounceByPass: false
|
|
1125
|
-
};
|
|
999
|
+
};
|
|
1000
|
+
|
|
1001
|
+
// ----------------------------------------------------------------------------
|
|
1126
1002
|
|
|
1127
1003
|
function extend(publicAPI, model) {
|
|
1128
|
-
|
|
1129
|
-
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
1004
|
+
let initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
1005
|
+
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
1130
1006
|
|
|
1131
|
-
|
|
1007
|
+
// Object methods
|
|
1008
|
+
macro.obj(publicAPI, model);
|
|
1132
1009
|
|
|
1010
|
+
// run animation at least until this time
|
|
1133
1011
|
model._animationExtendedEnd = 0;
|
|
1134
1012
|
macro.event(publicAPI, model, 'RenderEvent');
|
|
1135
|
-
handledEvents.forEach(
|
|
1136
|
-
return macro.event(publicAPI, model, eventName);
|
|
1137
|
-
}); // Create get-only macros
|
|
1013
|
+
handledEvents.forEach(eventName => macro.event(publicAPI, model, eventName));
|
|
1138
1014
|
|
|
1139
|
-
|
|
1015
|
+
// Create get-only macros
|
|
1016
|
+
macro.get(publicAPI, model, ['initialized', 'container', 'interactorStyle', 'lastFrameTime', 'recentAnimationFrameRate', '_view']);
|
|
1140
1017
|
|
|
1018
|
+
// Create get-set macros
|
|
1141
1019
|
macro.setGet(publicAPI, model, ['lightFollowCamera', 'enabled', 'enableRender', 'recognizeGestures', 'desiredUpdateRate', 'stillUpdateRate', 'picker', 'preventDefaultOnPointerDown', 'preventDefaultOnPointerUp', 'mouseScrollDebounceByPass']);
|
|
1142
|
-
macro.moveToProtected(publicAPI, model, ['view']);
|
|
1143
|
-
// Object specific methods
|
|
1020
|
+
macro.moveToProtected(publicAPI, model, ['view']);
|
|
1144
1021
|
|
|
1022
|
+
// For more macro methods, see "Sources/macros.js"
|
|
1023
|
+
|
|
1024
|
+
// Object specific methods
|
|
1145
1025
|
vtkRenderWindowInteractor(publicAPI, model);
|
|
1146
|
-
}
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
// ----------------------------------------------------------------------------
|
|
1029
|
+
|
|
1030
|
+
const newInstance = macro.newInstance(extend, 'vtkRenderWindowInteractor');
|
|
1147
1031
|
|
|
1148
|
-
|
|
1032
|
+
// ----------------------------------------------------------------------------
|
|
1149
1033
|
|
|
1150
|
-
var vtkRenderWindowInteractor$1 =
|
|
1151
|
-
newInstance
|
|
1152
|
-
extend
|
|
1153
|
-
handledEvents
|
|
1154
|
-
|
|
1034
|
+
var vtkRenderWindowInteractor$1 = {
|
|
1035
|
+
newInstance,
|
|
1036
|
+
extend,
|
|
1037
|
+
handledEvents,
|
|
1038
|
+
...Constants
|
|
1039
|
+
};
|
|
1155
1040
|
|
|
1156
1041
|
export { vtkRenderWindowInteractor$1 as default, extend, newInstance };
|