@kitware/vtk.js 28.10.2 → 28.11.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/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 +185 -270
- 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/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
package/Rendering/Core/Camera.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
1
|
import { mat4, vec4, vec3, quat } from 'gl-matrix';
|
|
3
|
-
import macro from '../../
|
|
2
|
+
import { m as macro } from '../../macros2.js';
|
|
4
3
|
import { r as radiansFromDegrees, k as add, j as cross } from '../../Common/Core/Math/index.js';
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
const {
|
|
6
|
+
vtkDebugMacro
|
|
7
|
+
} = macro;
|
|
8
|
+
|
|
7
9
|
/* eslint-disable new-cap */
|
|
8
10
|
|
|
9
11
|
/*
|
|
@@ -15,134 +17,130 @@ var vtkDebugMacro = macro.vtkDebugMacro;
|
|
|
15
17
|
// const idx = (row * 4) + col;
|
|
16
18
|
// return matrix[idx];
|
|
17
19
|
// }
|
|
20
|
+
|
|
18
21
|
// ----------------------------------------------------------------------------
|
|
19
22
|
// vtkCamera methods
|
|
20
23
|
// ----------------------------------------------------------------------------
|
|
21
24
|
|
|
22
25
|
function vtkCamera(publicAPI, model) {
|
|
23
26
|
// Set our className
|
|
24
|
-
model.classHierarchy.push('vtkCamera');
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
27
|
+
model.classHierarchy.push('vtkCamera');
|
|
28
|
+
|
|
29
|
+
// Set up private variables and methods
|
|
30
|
+
const origin = new Float64Array(3);
|
|
31
|
+
const dopbasis = new Float64Array([0.0, 0.0, -1.0]);
|
|
32
|
+
const upbasis = new Float64Array([0.0, 1.0, 0.0]);
|
|
33
|
+
const tmpMatrix = mat4.identity(new Float64Array(16));
|
|
34
|
+
const tmpMatrix2 = mat4.identity(new Float64Array(16));
|
|
35
|
+
const tmpvec1 = new Float64Array(3);
|
|
36
|
+
const tmpvec2 = new Float64Array(3);
|
|
37
|
+
const tmpvec3 = new Float64Array(3);
|
|
38
|
+
const rotateMatrix = mat4.identity(new Float64Array(16));
|
|
39
|
+
const trans = mat4.identity(new Float64Array(16));
|
|
40
|
+
const newPosition = new Float64Array(3);
|
|
41
|
+
const newFocalPoint = new Float64Array(3);
|
|
42
|
+
|
|
43
|
+
// Internal Functions that don't need to be public
|
|
39
44
|
function computeViewPlaneNormal() {
|
|
40
45
|
// VPN is -DOP
|
|
41
46
|
model.viewPlaneNormal[0] = -model.directionOfProjection[0];
|
|
42
47
|
model.viewPlaneNormal[1] = -model.directionOfProjection[1];
|
|
43
48
|
model.viewPlaneNormal[2] = -model.directionOfProjection[2];
|
|
44
49
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
var vt = publicAPI.getViewMatrix();
|
|
50
|
+
publicAPI.orthogonalizeViewUp = () => {
|
|
51
|
+
const vt = publicAPI.getViewMatrix();
|
|
48
52
|
model.viewUp[0] = vt[4];
|
|
49
53
|
model.viewUp[1] = vt[5];
|
|
50
54
|
model.viewUp[2] = vt[6];
|
|
51
55
|
publicAPI.modified();
|
|
52
56
|
};
|
|
53
|
-
|
|
54
|
-
publicAPI.setPosition = function (x, y, z) {
|
|
57
|
+
publicAPI.setPosition = (x, y, z) => {
|
|
55
58
|
if (x === model.position[0] && y === model.position[1] && z === model.position[2]) {
|
|
56
59
|
return;
|
|
57
60
|
}
|
|
58
|
-
|
|
59
61
|
model.position[0] = x;
|
|
60
62
|
model.position[1] = y;
|
|
61
|
-
model.position[2] = z;
|
|
63
|
+
model.position[2] = z;
|
|
62
64
|
|
|
65
|
+
// recompute the focal distance
|
|
63
66
|
publicAPI.computeDistance();
|
|
64
67
|
publicAPI.modified();
|
|
65
68
|
};
|
|
66
|
-
|
|
67
|
-
publicAPI.setFocalPoint = function (x, y, z) {
|
|
69
|
+
publicAPI.setFocalPoint = (x, y, z) => {
|
|
68
70
|
if (x === model.focalPoint[0] && y === model.focalPoint[1] && z === model.focalPoint[2]) {
|
|
69
71
|
return;
|
|
70
72
|
}
|
|
71
|
-
|
|
72
73
|
model.focalPoint[0] = x;
|
|
73
74
|
model.focalPoint[1] = y;
|
|
74
|
-
model.focalPoint[2] = z;
|
|
75
|
+
model.focalPoint[2] = z;
|
|
75
76
|
|
|
77
|
+
// recompute the focal distance
|
|
76
78
|
publicAPI.computeDistance();
|
|
77
79
|
publicAPI.modified();
|
|
78
80
|
};
|
|
79
|
-
|
|
80
|
-
publicAPI.setDistance = function (d) {
|
|
81
|
+
publicAPI.setDistance = d => {
|
|
81
82
|
if (model.distance === d) {
|
|
82
83
|
return;
|
|
83
84
|
}
|
|
84
|
-
|
|
85
85
|
model.distance = d;
|
|
86
|
-
|
|
87
86
|
if (model.distance < 1e-20) {
|
|
88
87
|
model.distance = 1e-20;
|
|
89
88
|
vtkDebugMacro('Distance is set to minimum.');
|
|
90
|
-
}
|
|
91
|
-
|
|
89
|
+
}
|
|
92
90
|
|
|
93
|
-
|
|
91
|
+
// we want to keep the camera pointing in the same direction
|
|
92
|
+
const vec = model.directionOfProjection;
|
|
94
93
|
|
|
94
|
+
// recalculate FocalPoint
|
|
95
95
|
model.focalPoint[0] = model.position[0] + vec[0] * model.distance;
|
|
96
96
|
model.focalPoint[1] = model.position[1] + vec[1] * model.distance;
|
|
97
97
|
model.focalPoint[2] = model.position[2] + vec[2] * model.distance;
|
|
98
98
|
publicAPI.modified();
|
|
99
|
-
};
|
|
100
|
-
// This method must be called when the focal point or camera position changes
|
|
101
|
-
|
|
99
|
+
};
|
|
102
100
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
101
|
+
//----------------------------------------------------------------------------
|
|
102
|
+
// This method must be called when the focal point or camera position changes
|
|
103
|
+
publicAPI.computeDistance = () => {
|
|
104
|
+
const dx = model.focalPoint[0] - model.position[0];
|
|
105
|
+
const dy = model.focalPoint[1] - model.position[1];
|
|
106
|
+
const dz = model.focalPoint[2] - model.position[2];
|
|
107
107
|
model.distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
108
|
-
|
|
109
108
|
if (model.distance < 1e-20) {
|
|
110
109
|
model.distance = 1e-20;
|
|
111
110
|
vtkDebugMacro('Distance is set to minimum.');
|
|
112
|
-
|
|
111
|
+
const vec = model.directionOfProjection;
|
|
113
112
|
|
|
113
|
+
// recalculate FocalPoint
|
|
114
114
|
model.focalPoint[0] = model.position[0] + vec[0] * model.distance;
|
|
115
115
|
model.focalPoint[1] = model.position[1] + vec[1] * model.distance;
|
|
116
116
|
model.focalPoint[2] = model.position[2] + vec[2] * model.distance;
|
|
117
117
|
}
|
|
118
|
-
|
|
119
118
|
model.directionOfProjection[0] = dx / model.distance;
|
|
120
119
|
model.directionOfProjection[1] = dy / model.distance;
|
|
121
120
|
model.directionOfProjection[2] = dz / model.distance;
|
|
122
121
|
computeViewPlaneNormal();
|
|
123
|
-
};
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
//----------------------------------------------------------------------------
|
|
124
125
|
// Move the position of the camera along the view plane normal. Moving
|
|
125
126
|
// towards the focal point (e.g., > 1) is a dolly-in, moving away
|
|
126
127
|
// from the focal point (e.g., < 1) is a dolly-out.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
publicAPI.dolly = function (amount) {
|
|
128
|
+
publicAPI.dolly = amount => {
|
|
130
129
|
if (amount <= 0.0) {
|
|
131
130
|
return;
|
|
132
|
-
}
|
|
133
|
-
|
|
131
|
+
}
|
|
134
132
|
|
|
135
|
-
|
|
133
|
+
// dolly moves the camera towards the focus
|
|
134
|
+
const d = model.distance / amount;
|
|
136
135
|
publicAPI.setPosition(model.focalPoint[0] - d * model.directionOfProjection[0], model.focalPoint[1] - d * model.directionOfProjection[1], model.focalPoint[2] - d * model.directionOfProjection[2]);
|
|
137
136
|
};
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
var viewUpVec4 = new Float64Array([up[0], up[1], up[2], 0.0]);
|
|
137
|
+
publicAPI.roll = angle => {
|
|
138
|
+
const eye = model.position;
|
|
139
|
+
const at = model.focalPoint;
|
|
140
|
+
const up = model.viewUp;
|
|
141
|
+
const viewUpVec4 = new Float64Array([up[0], up[1], up[2], 0.0]);
|
|
144
142
|
mat4.identity(rotateMatrix);
|
|
145
|
-
|
|
143
|
+
const viewDir = new Float64Array([at[0] - eye[0], at[1] - eye[1], at[2] - eye[2]]);
|
|
146
144
|
mat4.rotate(rotateMatrix, rotateMatrix, radiansFromDegrees(angle), viewDir);
|
|
147
145
|
vec4.transformMat4(viewUpVec4, viewUpVec4, rotateMatrix);
|
|
148
146
|
model.viewUp[0] = viewUpVec4[0];
|
|
@@ -150,156 +148,140 @@ function vtkCamera(publicAPI, model) {
|
|
|
150
148
|
model.viewUp[2] = viewUpVec4[2];
|
|
151
149
|
publicAPI.modified();
|
|
152
150
|
};
|
|
151
|
+
publicAPI.azimuth = angle => {
|
|
152
|
+
const fp = model.focalPoint;
|
|
153
|
+
mat4.identity(trans);
|
|
153
154
|
|
|
154
|
-
|
|
155
|
-
var fp = model.focalPoint;
|
|
156
|
-
mat4.identity(trans); // translate the focal point to the origin,
|
|
155
|
+
// translate the focal point to the origin,
|
|
157
156
|
// rotate about view up,
|
|
158
157
|
// translate back again
|
|
159
|
-
|
|
160
158
|
mat4.translate(trans, trans, fp);
|
|
161
159
|
mat4.rotate(trans, trans, radiansFromDegrees(angle), model.viewUp);
|
|
162
|
-
mat4.translate(trans, trans, [-fp[0], -fp[1], -fp[2]]);
|
|
160
|
+
mat4.translate(trans, trans, [-fp[0], -fp[1], -fp[2]]);
|
|
163
161
|
|
|
162
|
+
// apply the transform to the position
|
|
164
163
|
vec3.transformMat4(newPosition, model.position, trans);
|
|
165
164
|
publicAPI.setPosition(newPosition[0], newPosition[1], newPosition[2]);
|
|
166
165
|
};
|
|
166
|
+
publicAPI.yaw = angle => {
|
|
167
|
+
const position = model.position;
|
|
168
|
+
mat4.identity(trans);
|
|
167
169
|
|
|
168
|
-
|
|
169
|
-
var position = model.position;
|
|
170
|
-
mat4.identity(trans); // translate the camera to the origin,
|
|
170
|
+
// translate the camera to the origin,
|
|
171
171
|
// rotate about axis,
|
|
172
172
|
// translate back again
|
|
173
|
-
|
|
174
173
|
mat4.translate(trans, trans, position);
|
|
175
174
|
mat4.rotate(trans, trans, radiansFromDegrees(angle), model.viewUp);
|
|
176
|
-
mat4.translate(trans, trans, [-position[0], -position[1], -position[2]]);
|
|
175
|
+
mat4.translate(trans, trans, [-position[0], -position[1], -position[2]]);
|
|
177
176
|
|
|
177
|
+
// apply the transform to the position
|
|
178
178
|
vec3.transformMat4(newFocalPoint, model.focalPoint, trans);
|
|
179
179
|
publicAPI.setFocalPoint(newFocalPoint[0], newFocalPoint[1], newFocalPoint[2]);
|
|
180
180
|
};
|
|
181
|
+
publicAPI.elevation = angle => {
|
|
182
|
+
const fp = model.focalPoint;
|
|
181
183
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
+
// get the eye / camera position from the viewMatrix
|
|
185
|
+
const vt = publicAPI.getViewMatrix();
|
|
186
|
+
const axis = [-vt[0], -vt[1], -vt[2]];
|
|
187
|
+
mat4.identity(trans);
|
|
184
188
|
|
|
185
|
-
|
|
186
|
-
var axis = [-vt[0], -vt[1], -vt[2]];
|
|
187
|
-
mat4.identity(trans); // translate the focal point to the origin,
|
|
189
|
+
// translate the focal point to the origin,
|
|
188
190
|
// rotate about view up,
|
|
189
191
|
// translate back again
|
|
190
|
-
|
|
191
192
|
mat4.translate(trans, trans, fp);
|
|
192
193
|
mat4.rotate(trans, trans, radiansFromDegrees(angle), axis);
|
|
193
|
-
mat4.translate(trans, trans, [-fp[0], -fp[1], -fp[2]]);
|
|
194
|
+
mat4.translate(trans, trans, [-fp[0], -fp[1], -fp[2]]);
|
|
194
195
|
|
|
196
|
+
// apply the transform to the position
|
|
195
197
|
vec3.transformMat4(newPosition, model.position, trans);
|
|
196
198
|
publicAPI.setPosition(newPosition[0], newPosition[1], newPosition[2]);
|
|
197
199
|
};
|
|
200
|
+
publicAPI.pitch = angle => {
|
|
201
|
+
const position = model.position;
|
|
202
|
+
const vt = publicAPI.getViewMatrix();
|
|
203
|
+
const axis = [vt[0], vt[1], vt[2]];
|
|
204
|
+
mat4.identity(trans);
|
|
198
205
|
|
|
199
|
-
|
|
200
|
-
var position = model.position;
|
|
201
|
-
var vt = publicAPI.getViewMatrix();
|
|
202
|
-
var axis = [vt[0], vt[1], vt[2]];
|
|
203
|
-
mat4.identity(trans); // translate the camera to the origin,
|
|
206
|
+
// translate the camera to the origin,
|
|
204
207
|
// rotate about axis,
|
|
205
208
|
// translate back again
|
|
206
|
-
|
|
207
209
|
mat4.translate(trans, trans, position);
|
|
208
210
|
mat4.rotate(trans, trans, radiansFromDegrees(angle), axis);
|
|
209
|
-
mat4.translate(trans, trans, [-position[0], -position[1], -position[2]]);
|
|
211
|
+
mat4.translate(trans, trans, [-position[0], -position[1], -position[2]]);
|
|
210
212
|
|
|
213
|
+
// apply the transform to the focal point
|
|
211
214
|
vec3.transformMat4(newFocalPoint, model.focalPoint, trans);
|
|
212
|
-
publicAPI.setFocalPoint
|
|
215
|
+
publicAPI.setFocalPoint(...newFocalPoint);
|
|
213
216
|
};
|
|
214
|
-
|
|
215
|
-
publicAPI.zoom = function (factor) {
|
|
217
|
+
publicAPI.zoom = factor => {
|
|
216
218
|
if (factor <= 0) {
|
|
217
219
|
return;
|
|
218
220
|
}
|
|
219
|
-
|
|
220
221
|
if (model.parallelProjection) {
|
|
221
222
|
model.parallelScale /= factor;
|
|
222
223
|
} else {
|
|
223
224
|
model.viewAngle /= factor;
|
|
224
225
|
}
|
|
225
|
-
|
|
226
226
|
publicAPI.modified();
|
|
227
227
|
};
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
var offset = [x, y, z];
|
|
228
|
+
publicAPI.translate = (x, y, z) => {
|
|
229
|
+
const offset = [x, y, z];
|
|
231
230
|
add(model.position, offset, model.position);
|
|
232
231
|
add(model.focalPoint, offset, model.focalPoint);
|
|
233
232
|
publicAPI.computeDistance();
|
|
234
233
|
publicAPI.modified();
|
|
235
234
|
};
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
var vuNew = [];
|
|
235
|
+
publicAPI.applyTransform = transformMat4 => {
|
|
236
|
+
const vuOld = [...model.viewUp, 1.0];
|
|
237
|
+
const posNew = [];
|
|
238
|
+
const fpNew = [];
|
|
239
|
+
const vuNew = [];
|
|
242
240
|
vuOld[0] += model.position[0];
|
|
243
241
|
vuOld[1] += model.position[1];
|
|
244
242
|
vuOld[2] += model.position[2];
|
|
245
|
-
vec4.transformMat4(posNew, [
|
|
246
|
-
vec4.transformMat4(fpNew, [
|
|
243
|
+
vec4.transformMat4(posNew, [...model.position, 1.0], transformMat4);
|
|
244
|
+
vec4.transformMat4(fpNew, [...model.focalPoint, 1.0], transformMat4);
|
|
247
245
|
vec4.transformMat4(vuNew, vuOld, transformMat4);
|
|
248
246
|
vuNew[0] -= posNew[0];
|
|
249
247
|
vuNew[1] -= posNew[1];
|
|
250
248
|
vuNew[2] -= posNew[2];
|
|
251
|
-
publicAPI.setPosition
|
|
252
|
-
publicAPI.setFocalPoint
|
|
253
|
-
publicAPI.setViewUp
|
|
254
|
-
};
|
|
255
|
-
|
|
256
|
-
publicAPI.getThickness = function () {
|
|
257
|
-
return model.clippingRange[1] - model.clippingRange[0];
|
|
249
|
+
publicAPI.setPosition(...posNew.slice(0, 3));
|
|
250
|
+
publicAPI.setFocalPoint(...fpNew.slice(0, 3));
|
|
251
|
+
publicAPI.setViewUp(...vuNew.slice(0, 3));
|
|
258
252
|
};
|
|
259
|
-
|
|
260
|
-
publicAPI.setThickness =
|
|
261
|
-
|
|
262
|
-
|
|
253
|
+
publicAPI.getThickness = () => model.clippingRange[1] - model.clippingRange[0];
|
|
254
|
+
publicAPI.setThickness = thickness => {
|
|
255
|
+
let t = thickness;
|
|
263
256
|
if (t < 1e-20) {
|
|
264
257
|
t = 1e-20;
|
|
265
258
|
vtkDebugMacro('Thickness is set to minimum.');
|
|
266
259
|
}
|
|
267
|
-
|
|
268
260
|
publicAPI.setClippingRange(model.clippingRange[0], model.clippingRange[0] + t);
|
|
269
261
|
};
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
var t = thickness;
|
|
273
|
-
|
|
262
|
+
publicAPI.setThicknessFromFocalPoint = thickness => {
|
|
263
|
+
let t = thickness;
|
|
274
264
|
if (t < 1e-20) {
|
|
275
265
|
t = 1e-20;
|
|
276
266
|
vtkDebugMacro('Thickness is set to minimum.');
|
|
277
267
|
}
|
|
278
|
-
|
|
279
268
|
publicAPI.setClippingRange(model.distance - t / 2, model.distance + t / 2);
|
|
280
|
-
}; // Unimplemented functions
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
publicAPI.setRoll = function (angle) {}; // dependency on GetOrientation() and a model.ViewTransform object, see https://github.com/Kitware/VTK/blob/master/Common/Transforms/vtkTransform.cxx and https://vtk.org/doc/nightly/html/classvtkTransform.html
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
publicAPI.getRoll = function () {};
|
|
287
|
-
|
|
288
|
-
publicAPI.setObliqueAngles = function (alpha, beta) {};
|
|
289
|
-
|
|
290
|
-
publicAPI.getOrientation = function () {};
|
|
291
|
-
|
|
292
|
-
publicAPI.getOrientationWXYZ = function () {};
|
|
293
|
-
|
|
294
|
-
publicAPI.getFrustumPlanes = function (aspect) {// Return array of 24 params (4 params for each of 6 plane equations)
|
|
295
269
|
};
|
|
296
270
|
|
|
297
|
-
|
|
271
|
+
// Unimplemented functions
|
|
272
|
+
publicAPI.setRoll = angle => {}; // dependency on GetOrientation() and a model.ViewTransform object, see https://github.com/Kitware/VTK/blob/master/Common/Transforms/vtkTransform.cxx and https://vtk.org/doc/nightly/html/classvtkTransform.html
|
|
273
|
+
publicAPI.getRoll = () => {};
|
|
274
|
+
publicAPI.setObliqueAngles = (alpha, beta) => {};
|
|
275
|
+
publicAPI.getOrientation = () => {};
|
|
276
|
+
publicAPI.getOrientationWXYZ = () => {};
|
|
277
|
+
publicAPI.getFrustumPlanes = aspect => {
|
|
278
|
+
// Return array of 24 params (4 params for each of 6 plane equations)
|
|
279
|
+
};
|
|
280
|
+
publicAPI.getCameraLightTransformMatrix = matrix => {
|
|
298
281
|
mat4.copy(matrix, model.cameraLightTransform);
|
|
299
282
|
return matrix;
|
|
300
283
|
};
|
|
301
|
-
|
|
302
|
-
publicAPI.computeCameraLightTransform = function () {
|
|
284
|
+
publicAPI.computeCameraLightTransform = () => {
|
|
303
285
|
// not sure if this is the correct transformation, based on the same funciton in VTK
|
|
304
286
|
mat4.copy(tmpMatrix, publicAPI.getViewMatrix());
|
|
305
287
|
mat4.invert(tmpMatrix, tmpMatrix);
|
|
@@ -308,31 +290,30 @@ function vtkCamera(publicAPI, model) {
|
|
|
308
290
|
mat4.identity(model.cameraLightTransform);
|
|
309
291
|
mat4.translate(model.cameraLightTransform, tmpMatrix, [0.0, 0.0, -1.0]);
|
|
310
292
|
};
|
|
311
|
-
|
|
312
|
-
publicAPI.
|
|
313
|
-
|
|
314
|
-
publicAPI.physicalOrientationToWorldDirection = function (ori) {
|
|
293
|
+
publicAPI.deepCopy = sourceCamera => {};
|
|
294
|
+
publicAPI.physicalOrientationToWorldDirection = ori => {
|
|
315
295
|
// push the x axis through the orientation quat
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
quat.conjugate(coriq, oriq);
|
|
296
|
+
const oriq = quat.fromValues(ori[0], ori[1], ori[2], ori[3]);
|
|
297
|
+
const coriq = quat.create();
|
|
298
|
+
const qdir = quat.fromValues(0.0, 0.0, 1.0, 0.0);
|
|
299
|
+
quat.conjugate(coriq, oriq);
|
|
320
300
|
|
|
301
|
+
// rotate the z axis by the quat
|
|
321
302
|
quat.multiply(qdir, oriq, qdir);
|
|
322
|
-
quat.multiply(qdir, qdir, coriq);
|
|
303
|
+
quat.multiply(qdir, qdir, coriq);
|
|
323
304
|
|
|
305
|
+
// return the z axis in world coords
|
|
324
306
|
return [qdir[0], qdir[1], qdir[2]];
|
|
325
307
|
};
|
|
326
|
-
|
|
327
|
-
publicAPI.getPhysicalToWorldMatrix = function (result) {
|
|
308
|
+
publicAPI.getPhysicalToWorldMatrix = result => {
|
|
328
309
|
publicAPI.getWorldToPhysicalMatrix(result);
|
|
329
310
|
mat4.invert(result, result);
|
|
330
311
|
};
|
|
312
|
+
publicAPI.getWorldToPhysicalMatrix = result => {
|
|
313
|
+
mat4.identity(result);
|
|
331
314
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
var physVRight = [3];
|
|
315
|
+
// now the physical to vtk world rotation tform
|
|
316
|
+
const physVRight = [3];
|
|
336
317
|
cross(model.physicalViewNorth, model.physicalViewUp, physVRight);
|
|
337
318
|
result[0] = physVRight[0];
|
|
338
319
|
result[1] = physVRight[1];
|
|
@@ -348,24 +329,26 @@ function vtkCamera(publicAPI, model) {
|
|
|
348
329
|
mat4.scale(result, result, tmpvec1);
|
|
349
330
|
mat4.translate(result, result, model.physicalTranslation);
|
|
350
331
|
};
|
|
351
|
-
|
|
352
|
-
publicAPI.computeViewParametersFromViewMatrix = function (vmat) {
|
|
332
|
+
publicAPI.computeViewParametersFromViewMatrix = vmat => {
|
|
353
333
|
// invert to get view to world
|
|
354
|
-
mat4.invert(tmpMatrix, vmat);
|
|
334
|
+
mat4.invert(tmpMatrix, vmat);
|
|
335
|
+
|
|
336
|
+
// note with glmatrix operations happen in
|
|
355
337
|
// the reverse order
|
|
356
338
|
// mat.scale
|
|
357
339
|
// mat.translate
|
|
358
340
|
// will result in the translation then the scale
|
|
359
341
|
// mat.mult(a,b)
|
|
360
342
|
// results in perform the B transformation then A
|
|
343
|
+
|
|
361
344
|
// then extract the params position, orientation
|
|
362
345
|
// push 0,0,0 through to get a translation
|
|
363
|
-
|
|
364
346
|
vec3.transformMat4(tmpvec1, origin, tmpMatrix);
|
|
365
347
|
publicAPI.computeDistance();
|
|
366
|
-
|
|
367
|
-
publicAPI.setPosition(tmpvec1[0], tmpvec1[1], tmpvec1[2]);
|
|
348
|
+
const oldDist = model.distance;
|
|
349
|
+
publicAPI.setPosition(tmpvec1[0], tmpvec1[1], tmpvec1[2]);
|
|
368
350
|
|
|
351
|
+
// push basis vectors to get orientation
|
|
369
352
|
vec3.transformMat4(tmpvec2, dopbasis, tmpMatrix);
|
|
370
353
|
vec3.subtract(tmpvec2, tmpvec2, tmpvec1);
|
|
371
354
|
vec3.normalize(tmpvec2, tmpvec2);
|
|
@@ -375,144 +358,131 @@ function vtkCamera(publicAPI, model) {
|
|
|
375
358
|
vec3.normalize(tmpvec3, tmpvec3);
|
|
376
359
|
publicAPI.setViewUp(tmpvec3[0], tmpvec3[1], tmpvec3[2]);
|
|
377
360
|
publicAPI.setDistance(oldDist);
|
|
378
|
-
};
|
|
361
|
+
};
|
|
362
|
+
|
|
363
|
+
// the provided matrix should include
|
|
379
364
|
// translation and orientation only
|
|
380
365
|
// mat is physical to view
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
publicAPI.computeViewParametersFromPhysicalMatrix = function (mat) {
|
|
366
|
+
publicAPI.computeViewParametersFromPhysicalMatrix = mat => {
|
|
384
367
|
// get the WorldToPhysicalMatrix
|
|
385
|
-
publicAPI.getWorldToPhysicalMatrix(tmpMatrix);
|
|
386
|
-
// world -> view
|
|
368
|
+
publicAPI.getWorldToPhysicalMatrix(tmpMatrix);
|
|
387
369
|
|
|
370
|
+
// first convert the physical -> view matrix to be
|
|
371
|
+
// world -> view
|
|
388
372
|
mat4.multiply(tmpMatrix, mat, tmpMatrix);
|
|
389
373
|
publicAPI.computeViewParametersFromViewMatrix(tmpMatrix);
|
|
390
374
|
};
|
|
391
|
-
|
|
392
|
-
publicAPI.setViewMatrix = function (mat) {
|
|
375
|
+
publicAPI.setViewMatrix = mat => {
|
|
393
376
|
model.viewMatrix = mat;
|
|
394
|
-
|
|
395
377
|
if (model.viewMatrix) {
|
|
396
378
|
mat4.copy(tmpMatrix, model.viewMatrix);
|
|
397
379
|
publicAPI.computeViewParametersFromViewMatrix(tmpMatrix);
|
|
398
380
|
mat4.transpose(model.viewMatrix, model.viewMatrix);
|
|
399
381
|
}
|
|
400
382
|
};
|
|
401
|
-
|
|
402
|
-
publicAPI.getViewMatrix = function () {
|
|
383
|
+
publicAPI.getViewMatrix = () => {
|
|
403
384
|
if (model.viewMatrix) {
|
|
404
385
|
return model.viewMatrix;
|
|
405
386
|
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
model.focalPoint,
|
|
387
|
+
mat4.lookAt(tmpMatrix, model.position,
|
|
388
|
+
// eye
|
|
389
|
+
model.focalPoint,
|
|
390
|
+
// at
|
|
409
391
|
model.viewUp // up
|
|
410
392
|
);
|
|
393
|
+
|
|
411
394
|
mat4.transpose(tmpMatrix, tmpMatrix);
|
|
412
|
-
|
|
395
|
+
const result = new Float64Array(16);
|
|
413
396
|
mat4.copy(result, tmpMatrix);
|
|
414
397
|
return result;
|
|
415
398
|
};
|
|
416
|
-
|
|
417
|
-
publicAPI.setProjectionMatrix = function (mat) {
|
|
399
|
+
publicAPI.setProjectionMatrix = mat => {
|
|
418
400
|
model.projectionMatrix = mat;
|
|
419
401
|
};
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
var result = new Float64Array(16);
|
|
402
|
+
publicAPI.getProjectionMatrix = (aspect, nearz, farz) => {
|
|
403
|
+
const result = new Float64Array(16);
|
|
423
404
|
mat4.identity(result);
|
|
424
|
-
|
|
425
405
|
if (model.projectionMatrix) {
|
|
426
|
-
|
|
406
|
+
const scale = 1 / model.physicalScale;
|
|
427
407
|
vec3.set(tmpvec1, scale, scale, scale);
|
|
428
408
|
mat4.copy(result, model.projectionMatrix);
|
|
429
409
|
mat4.scale(result, result, tmpvec1);
|
|
430
410
|
mat4.transpose(result, result);
|
|
431
411
|
return result;
|
|
432
412
|
}
|
|
413
|
+
mat4.identity(tmpMatrix);
|
|
433
414
|
|
|
434
|
-
|
|
415
|
+
// FIXME: Not sure what to do about adjust z buffer here
|
|
435
416
|
// adjust Z-buffer range
|
|
436
417
|
// this->ProjectionTransform->AdjustZBuffer( -1, +1, nearz, farz );
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
var cRange = [model.clippingRange[0] + (nearz + 1) * cWidth / 2.0, model.clippingRange[0] + (farz + 1) * cWidth / 2.0];
|
|
440
|
-
|
|
418
|
+
const cWidth = model.clippingRange[1] - model.clippingRange[0];
|
|
419
|
+
const cRange = [model.clippingRange[0] + (nearz + 1) * cWidth / 2.0, model.clippingRange[0] + (farz + 1) * cWidth / 2.0];
|
|
441
420
|
if (model.parallelProjection) {
|
|
442
421
|
// set up a rectangular parallelipiped
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
422
|
+
const width = model.parallelScale * aspect;
|
|
423
|
+
const height = model.parallelScale;
|
|
424
|
+
const xmin = (model.windowCenter[0] - 1.0) * width;
|
|
425
|
+
const xmax = (model.windowCenter[0] + 1.0) * width;
|
|
426
|
+
const ymin = (model.windowCenter[1] - 1.0) * height;
|
|
427
|
+
const ymax = (model.windowCenter[1] + 1.0) * height;
|
|
449
428
|
mat4.ortho(tmpMatrix, xmin, xmax, ymin, ymax, cRange[0], cRange[1]);
|
|
450
429
|
mat4.transpose(tmpMatrix, tmpMatrix);
|
|
451
430
|
} else if (model.useOffAxisProjection) {
|
|
452
431
|
throw new Error('Off-Axis projection is not supported at this time');
|
|
453
432
|
} else {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
var _height;
|
|
459
|
-
|
|
433
|
+
const tmp = Math.tan(radiansFromDegrees(model.viewAngle) / 2.0);
|
|
434
|
+
let width;
|
|
435
|
+
let height;
|
|
460
436
|
if (model.useHorizontalViewAngle === true) {
|
|
461
|
-
|
|
462
|
-
|
|
437
|
+
width = model.clippingRange[0] * tmp;
|
|
438
|
+
height = model.clippingRange[0] * tmp / aspect;
|
|
463
439
|
} else {
|
|
464
|
-
|
|
465
|
-
|
|
440
|
+
width = model.clippingRange[0] * tmp * aspect;
|
|
441
|
+
height = model.clippingRange[0] * tmp;
|
|
466
442
|
}
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
var zfar = cRange[1];
|
|
478
|
-
tmpMatrix[0] = 2.0 * znear / (_xmax - _xmin);
|
|
479
|
-
tmpMatrix[5] = 2.0 * znear / (_ymax - _ymin);
|
|
480
|
-
tmpMatrix[2] = (_xmin + _xmax) / (_xmax - _xmin);
|
|
481
|
-
tmpMatrix[6] = (_ymin + _ymax) / (_ymax - _ymin);
|
|
443
|
+
const xmin = (model.windowCenter[0] - 1.0) * width;
|
|
444
|
+
const xmax = (model.windowCenter[0] + 1.0) * width;
|
|
445
|
+
const ymin = (model.windowCenter[1] - 1.0) * height;
|
|
446
|
+
const ymax = (model.windowCenter[1] + 1.0) * height;
|
|
447
|
+
const znear = cRange[0];
|
|
448
|
+
const zfar = cRange[1];
|
|
449
|
+
tmpMatrix[0] = 2.0 * znear / (xmax - xmin);
|
|
450
|
+
tmpMatrix[5] = 2.0 * znear / (ymax - ymin);
|
|
451
|
+
tmpMatrix[2] = (xmin + xmax) / (xmax - xmin);
|
|
452
|
+
tmpMatrix[6] = (ymin + ymax) / (ymax - ymin);
|
|
482
453
|
tmpMatrix[10] = -(znear + zfar) / (zfar - znear);
|
|
483
454
|
tmpMatrix[14] = -1.0;
|
|
484
455
|
tmpMatrix[11] = -2.0 * znear * zfar / (zfar - znear);
|
|
485
456
|
tmpMatrix[15] = 0.0;
|
|
486
457
|
}
|
|
487
|
-
|
|
488
458
|
mat4.copy(result, tmpMatrix);
|
|
489
459
|
return result;
|
|
490
460
|
};
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
461
|
+
publicAPI.getCompositeProjectionMatrix = (aspect, nearz, farz) => {
|
|
462
|
+
const vMat = publicAPI.getViewMatrix();
|
|
463
|
+
const pMat = publicAPI.getProjectionMatrix(aspect, nearz, farz);
|
|
464
|
+
// mats are transposed so the order is A then B
|
|
495
465
|
// we reuse pMat as it is a copy so we can do what we want with it
|
|
496
|
-
|
|
497
466
|
mat4.multiply(pMat, vMat, pMat);
|
|
498
467
|
return pMat;
|
|
499
468
|
};
|
|
500
|
-
|
|
501
|
-
publicAPI.setDirectionOfProjection = function (x, y, z) {
|
|
469
|
+
publicAPI.setDirectionOfProjection = (x, y, z) => {
|
|
502
470
|
if (model.directionOfProjection[0] === x && model.directionOfProjection[1] === y && model.directionOfProjection[2] === z) {
|
|
503
471
|
return;
|
|
504
472
|
}
|
|
505
|
-
|
|
506
473
|
model.directionOfProjection[0] = x;
|
|
507
474
|
model.directionOfProjection[1] = y;
|
|
508
475
|
model.directionOfProjection[2] = z;
|
|
509
|
-
|
|
476
|
+
const vec = model.directionOfProjection;
|
|
510
477
|
|
|
478
|
+
// recalculate FocalPoint
|
|
511
479
|
model.focalPoint[0] = model.position[0] + vec[0] * model.distance;
|
|
512
480
|
model.focalPoint[1] = model.position[1] + vec[1] * model.distance;
|
|
513
481
|
model.focalPoint[2] = model.position[2] + vec[2] * model.distance;
|
|
514
482
|
computeViewPlaneNormal();
|
|
515
|
-
};
|
|
483
|
+
};
|
|
484
|
+
|
|
485
|
+
// used to handle convert js device orientation angles
|
|
516
486
|
// when you use this method the camera will adjust to the
|
|
517
487
|
// device orientation such that the physicalViewUp you set
|
|
518
488
|
// in world coordinates looks up, and the physicalViewNorth
|
|
@@ -528,76 +498,73 @@ function vtkCamera(publicAPI, model) {
|
|
|
528
498
|
// convention with axes of Z, X, Y (the code below substitutes
|
|
529
499
|
// the physical coordinate system for these axes to get the right
|
|
530
500
|
// modified coordinate system.
|
|
501
|
+
publicAPI.setDeviceAngles = (alpha, beta, gamma, screen) => {
|
|
502
|
+
const physVRight = [3];
|
|
503
|
+
cross(model.physicalViewNorth, model.physicalViewUp, physVRight);
|
|
531
504
|
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
var physVRight = [3];
|
|
535
|
-
cross(model.physicalViewNorth, model.physicalViewUp, physVRight); // phone to physical coordinates
|
|
536
|
-
|
|
537
|
-
var rotmat = mat4.identity(new Float64Array(16));
|
|
505
|
+
// phone to physical coordinates
|
|
506
|
+
const rotmat = mat4.identity(new Float64Array(16));
|
|
538
507
|
mat4.rotate(rotmat, rotmat, radiansFromDegrees(alpha), model.physicalViewUp);
|
|
539
508
|
mat4.rotate(rotmat, rotmat, radiansFromDegrees(beta), physVRight);
|
|
540
509
|
mat4.rotate(rotmat, rotmat, radiansFromDegrees(gamma), model.physicalViewNorth);
|
|
541
510
|
mat4.rotate(rotmat, rotmat, radiansFromDegrees(-screen), model.physicalViewUp);
|
|
542
|
-
|
|
543
|
-
|
|
511
|
+
const dop = new Float64Array([-model.physicalViewUp[0], -model.physicalViewUp[1], -model.physicalViewUp[2]]);
|
|
512
|
+
const vup = new Float64Array(model.physicalViewNorth);
|
|
544
513
|
vec3.transformMat4(dop, dop, rotmat);
|
|
545
514
|
vec3.transformMat4(vup, vup, rotmat);
|
|
546
515
|
publicAPI.setDirectionOfProjection(dop[0], dop[1], dop[2]);
|
|
547
516
|
publicAPI.setViewUp(vup[0], vup[1], vup[2]);
|
|
548
517
|
publicAPI.modified();
|
|
549
518
|
};
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
var quatMat = mat4.identity(new Float64Array(16));
|
|
553
|
-
|
|
519
|
+
publicAPI.setOrientationWXYZ = (degrees, x, y, z) => {
|
|
520
|
+
const quatMat = mat4.identity(new Float64Array(16));
|
|
554
521
|
if (degrees !== 0.0 && (x !== 0.0 || y !== 0.0 || z !== 0.0)) {
|
|
555
522
|
// convert to radians
|
|
556
|
-
|
|
557
|
-
|
|
523
|
+
const angle = radiansFromDegrees(degrees);
|
|
524
|
+
const q = quat.create();
|
|
558
525
|
quat.setAxisAngle(q, [x, y, z], angle);
|
|
559
526
|
mat4.fromQuat(quatMat, q);
|
|
560
527
|
}
|
|
561
|
-
|
|
562
|
-
var newdop = new Float64Array(3);
|
|
528
|
+
const newdop = new Float64Array(3);
|
|
563
529
|
vec3.transformMat4(newdop, [0.0, 0.0, -1.0], quatMat);
|
|
564
|
-
|
|
530
|
+
const newvup = new Float64Array(3);
|
|
565
531
|
vec3.transformMat4(newvup, [0.0, 1.0, 0.0], quatMat);
|
|
566
|
-
publicAPI.setDirectionOfProjection
|
|
567
|
-
publicAPI.setViewUp
|
|
532
|
+
publicAPI.setDirectionOfProjection(...newdop);
|
|
533
|
+
publicAPI.setViewUp(...newvup);
|
|
568
534
|
publicAPI.modified();
|
|
569
535
|
};
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
var position = null;
|
|
536
|
+
publicAPI.computeClippingRange = bounds => {
|
|
537
|
+
let vn = null;
|
|
538
|
+
let position = null;
|
|
574
539
|
vn = model.viewPlaneNormal;
|
|
575
540
|
position = model.position;
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
541
|
+
const a = -vn[0];
|
|
542
|
+
const b = -vn[1];
|
|
543
|
+
const c = -vn[2];
|
|
544
|
+
const d = -(a * position[0] + b * position[1] + c * position[2]);
|
|
545
|
+
|
|
546
|
+
// Set the max near clipping plane and the min far clipping plane
|
|
547
|
+
const range = [a * bounds[0] + b * bounds[2] + c * bounds[4] + d, 1e-18];
|
|
548
|
+
|
|
549
|
+
// Find the closest / farthest bounding box vertex
|
|
550
|
+
for (let k = 0; k < 2; k++) {
|
|
551
|
+
for (let j = 0; j < 2; j++) {
|
|
552
|
+
for (let i = 0; i < 2; i++) {
|
|
553
|
+
const dist = a * bounds[i] + b * bounds[2 + j] + c * bounds[4 + k] + d;
|
|
587
554
|
range[0] = dist < range[0] ? dist : range[0];
|
|
588
555
|
range[1] = dist > range[1] ? dist : range[1];
|
|
589
556
|
}
|
|
590
557
|
}
|
|
591
558
|
}
|
|
592
|
-
|
|
593
559
|
return range;
|
|
594
560
|
};
|
|
595
|
-
}
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
// ----------------------------------------------------------------------------
|
|
596
564
|
// Object factory
|
|
597
565
|
// ----------------------------------------------------------------------------
|
|
598
566
|
|
|
599
|
-
|
|
600
|
-
var DEFAULT_VALUES = {
|
|
567
|
+
const DEFAULT_VALUES = {
|
|
601
568
|
position: [0, 0, 1],
|
|
602
569
|
focalPoint: [0, 0, 0],
|
|
603
570
|
viewUp: [0, 1, 0],
|
|
@@ -622,27 +589,35 @@ var DEFAULT_VALUES = {
|
|
|
622
589
|
physicalScale: 1.0,
|
|
623
590
|
physicalViewUp: [0, 1, 0],
|
|
624
591
|
physicalViewNorth: [0, 0, -1]
|
|
625
|
-
};
|
|
592
|
+
};
|
|
593
|
+
|
|
594
|
+
// ----------------------------------------------------------------------------
|
|
626
595
|
|
|
627
596
|
function extend(publicAPI, model) {
|
|
628
|
-
|
|
629
|
-
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
597
|
+
let initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
598
|
+
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
630
599
|
|
|
600
|
+
// Build VTK API
|
|
631
601
|
macro.obj(publicAPI, model);
|
|
632
602
|
macro.get(publicAPI, model, ['distance']);
|
|
633
603
|
macro.setGet(publicAPI, model, ['parallelProjection', 'useHorizontalViewAngle', 'viewAngle', 'parallelScale', 'useOffAxisProjection', 'freezeFocalPoint', 'physicalScale']);
|
|
634
604
|
macro.getArray(publicAPI, model, ['directionOfProjection', 'viewPlaneNormal', 'position', 'focalPoint']);
|
|
635
605
|
macro.setGetArray(publicAPI, model, ['clippingRange', 'windowCenter'], 2);
|
|
636
|
-
macro.setGetArray(publicAPI, model, ['viewUp', 'screenBottomLeft', 'screenBottomRight', 'screenTopRight', 'physicalTranslation', 'physicalViewUp', 'physicalViewNorth'], 3);
|
|
606
|
+
macro.setGetArray(publicAPI, model, ['viewUp', 'screenBottomLeft', 'screenBottomRight', 'screenTopRight', 'physicalTranslation', 'physicalViewUp', 'physicalViewNorth'], 3);
|
|
637
607
|
|
|
608
|
+
// Object methods
|
|
638
609
|
vtkCamera(publicAPI, model);
|
|
639
|
-
}
|
|
610
|
+
}
|
|
640
611
|
|
|
641
|
-
|
|
612
|
+
// ----------------------------------------------------------------------------
|
|
613
|
+
|
|
614
|
+
const newInstance = macro.newInstance(extend, 'vtkCamera');
|
|
615
|
+
|
|
616
|
+
// ----------------------------------------------------------------------------
|
|
642
617
|
|
|
643
618
|
var vtkCamera$1 = {
|
|
644
|
-
newInstance
|
|
645
|
-
extend
|
|
619
|
+
newInstance,
|
|
620
|
+
extend
|
|
646
621
|
};
|
|
647
622
|
|
|
648
623
|
export { DEFAULT_VALUES, vtkCamera$1 as default, extend, newInstance };
|