@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { mat4 } from 'gl-matrix';
|
|
2
2
|
import Constants from '../Core/ImageMapper/Constants.js';
|
|
3
|
-
import {
|
|
3
|
+
import { n as newInstance$1, e as setGet, o as obj, r as vtkErrorMacro$1, c as macro } from '../../macros2.js';
|
|
4
4
|
import vtkDataArray from '../../Common/Core/DataArray.js';
|
|
5
5
|
import { VtkDataTypes } from '../../Common/Core/DataArray/Constants.js';
|
|
6
6
|
import vtkHelper from './Helper.js';
|
|
@@ -16,30 +16,34 @@ import { v as vtkPolyDataFS } from './glsl/vtkPolyDataFS.glsl.js';
|
|
|
16
16
|
import vtkReplacementShaderMapper from './ReplacementShaderMapper.js';
|
|
17
17
|
import { registerOverride } from './ViewNodeFactory.js';
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
const {
|
|
20
|
+
vtkErrorMacro
|
|
21
|
+
} = macro;
|
|
22
|
+
const {
|
|
23
|
+
SlicingMode
|
|
24
|
+
} = Constants;
|
|
25
|
+
|
|
26
|
+
// ----------------------------------------------------------------------------
|
|
21
27
|
// helper methods
|
|
22
28
|
// ----------------------------------------------------------------------------
|
|
23
29
|
|
|
24
30
|
function computeFnToString(property, fn, numberOfComponents) {
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
const pwfun = fn.apply(property);
|
|
27
32
|
if (pwfun) {
|
|
28
|
-
|
|
29
|
-
return
|
|
33
|
+
const iComps = property.getIndependentComponents();
|
|
34
|
+
return `${property.getMTime()}-${iComps}-${numberOfComponents}`;
|
|
30
35
|
}
|
|
31
|
-
|
|
32
36
|
return '0';
|
|
33
|
-
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// ----------------------------------------------------------------------------
|
|
34
40
|
// vtkOpenGLImageMapper methods
|
|
35
41
|
// ----------------------------------------------------------------------------
|
|
36
42
|
|
|
37
|
-
|
|
38
43
|
function vtkOpenGLImageMapper(publicAPI, model) {
|
|
39
44
|
// Set our className
|
|
40
45
|
model.classHierarchy.push('vtkOpenGLImageMapper');
|
|
41
|
-
|
|
42
|
-
publicAPI.buildPass = function (prepass) {
|
|
46
|
+
publicAPI.buildPass = prepass => {
|
|
43
47
|
if (prepass) {
|
|
44
48
|
model.currentRenderPass = null;
|
|
45
49
|
model.openGLImageSlice = publicAPI.getFirstAncestorOfType('vtkOpenGLImageSlice');
|
|
@@ -50,25 +54,21 @@ function vtkOpenGLImageMapper(publicAPI, model) {
|
|
|
50
54
|
model.openGLTexture.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
51
55
|
model.colorTexture.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
52
56
|
model.pwfTexture.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
model.openGLCamera = model._openGLRenderer.getViewNodeFor(ren.getActiveCamera()); // is slice set by the camera
|
|
57
|
-
|
|
57
|
+
const ren = model._openGLRenderer.getRenderable();
|
|
58
|
+
model.openGLCamera = model._openGLRenderer.getViewNodeFor(ren.getActiveCamera());
|
|
59
|
+
// is slice set by the camera
|
|
58
60
|
if (model.renderable.isA('vtkImageMapper') && model.renderable.getSliceAtFocalPoint()) {
|
|
59
61
|
model.renderable.setSliceFromCamera(ren.getActiveCamera());
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
64
|
};
|
|
63
|
-
|
|
64
|
-
publicAPI.translucentPass = function (prepass, renderPass) {
|
|
65
|
+
publicAPI.translucentPass = (prepass, renderPass) => {
|
|
65
66
|
if (prepass) {
|
|
66
67
|
model.currentRenderPass = renderPass;
|
|
67
68
|
publicAPI.render();
|
|
68
69
|
}
|
|
69
70
|
};
|
|
70
|
-
|
|
71
|
-
publicAPI.zBufferPass = function (prepass) {
|
|
71
|
+
publicAPI.zBufferPass = prepass => {
|
|
72
72
|
if (prepass) {
|
|
73
73
|
model.haveSeenDepthRequest = true;
|
|
74
74
|
model.renderDepth = true;
|
|
@@ -76,118 +76,97 @@ function vtkOpenGLImageMapper(publicAPI, model) {
|
|
|
76
76
|
model.renderDepth = false;
|
|
77
77
|
}
|
|
78
78
|
};
|
|
79
|
-
|
|
80
|
-
publicAPI.
|
|
81
|
-
return publicAPI.zBufferPass(prepass);
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
publicAPI.opaquePass = function (prepass) {
|
|
79
|
+
publicAPI.opaqueZBufferPass = prepass => publicAPI.zBufferPass(prepass);
|
|
80
|
+
publicAPI.opaquePass = prepass => {
|
|
85
81
|
if (prepass) {
|
|
86
82
|
publicAPI.render();
|
|
87
83
|
}
|
|
88
84
|
};
|
|
89
|
-
|
|
90
|
-
publicAPI.getCoincidentParameters = function (ren, actor) {
|
|
85
|
+
publicAPI.getCoincidentParameters = (ren, actor) => {
|
|
91
86
|
if (model.renderable.getResolveCoincidentTopology()) {
|
|
92
87
|
return model.renderable.getCoincidentTopologyPolygonOffsetParameters();
|
|
93
88
|
}
|
|
94
|
-
|
|
95
89
|
return null;
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
publicAPI.render = function () {
|
|
100
|
-
var actor = model.openGLImageSlice.getRenderable();
|
|
101
|
-
|
|
102
|
-
var ren = model._openGLRenderer.getRenderable();
|
|
90
|
+
};
|
|
103
91
|
|
|
92
|
+
// Renders myself
|
|
93
|
+
publicAPI.render = () => {
|
|
94
|
+
const actor = model.openGLImageSlice.getRenderable();
|
|
95
|
+
const ren = model._openGLRenderer.getRenderable();
|
|
104
96
|
publicAPI.renderPiece(ren, actor);
|
|
105
97
|
};
|
|
106
|
-
|
|
107
|
-
publicAPI.getShaderTemplate = function (shaders, ren, actor) {
|
|
98
|
+
publicAPI.getShaderTemplate = (shaders, ren, actor) => {
|
|
108
99
|
shaders.Vertex = vtkPolyDataVS;
|
|
109
100
|
shaders.Fragment = vtkPolyDataFS;
|
|
110
101
|
shaders.Geometry = '';
|
|
111
102
|
};
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
var FSSource = shaders.Fragment;
|
|
103
|
+
publicAPI.replaceShaderValues = (shaders, ren, actor) => {
|
|
104
|
+
let VSSource = shaders.Vertex;
|
|
105
|
+
let FSSource = shaders.Fragment;
|
|
116
106
|
VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Camera::Dec', ['uniform mat4 MCPCMatrix;']).result;
|
|
117
107
|
VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::PositionVC::Impl', [' gl_Position = MCPCMatrix * vertexMC;']).result;
|
|
118
108
|
VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::TCoord::Impl', 'tcoordVCVSOutput = tcoordMC;').result;
|
|
119
109
|
VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::TCoord::Dec', 'attribute vec2 tcoordMC; varying vec2 tcoordVCVSOutput;').result;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
110
|
+
const tNumComp = model.openGLTexture.getComponents();
|
|
111
|
+
const iComps = actor.getProperty().getIndependentComponents();
|
|
112
|
+
let tcoordDec = ['varying vec2 tcoordVCVSOutput;',
|
|
113
|
+
// color shift and scale
|
|
114
|
+
'uniform float cshift0;', 'uniform float cscale0;',
|
|
115
|
+
// pwf shift and scale
|
|
124
116
|
'uniform float pwfshift0;', 'uniform float pwfscale0;', 'uniform sampler2D texture1;', 'uniform sampler2D colorTexture1;', 'uniform sampler2D pwfTexture1;', 'uniform float opacity;'];
|
|
125
|
-
|
|
126
117
|
if (iComps) {
|
|
127
|
-
for (
|
|
128
|
-
tcoordDec = tcoordDec.concat([
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
118
|
+
for (let comp = 1; comp < tNumComp; comp++) {
|
|
119
|
+
tcoordDec = tcoordDec.concat([
|
|
120
|
+
// color shift and scale
|
|
121
|
+
`uniform float cshift${comp};`, `uniform float cscale${comp};`,
|
|
122
|
+
// weighting shift and scale
|
|
123
|
+
`uniform float pwfshift${comp};`, `uniform float pwfscale${comp};`]);
|
|
124
|
+
}
|
|
125
|
+
// the heights defined below are the locations
|
|
132
126
|
// for the up to four components of the tfuns
|
|
133
127
|
// the tfuns have a height of 2XnumComps pixels so the
|
|
134
128
|
// values are computed to hit the middle of the two rows
|
|
135
129
|
// for that component
|
|
136
|
-
|
|
137
|
-
|
|
138
130
|
switch (tNumComp) {
|
|
139
131
|
case 1:
|
|
140
132
|
tcoordDec = tcoordDec.concat(['uniform float mix0;', '#define height0 0.5']);
|
|
141
133
|
break;
|
|
142
|
-
|
|
143
134
|
case 2:
|
|
144
135
|
tcoordDec = tcoordDec.concat(['uniform float mix0;', 'uniform float mix1;', '#define height0 0.25', '#define height1 0.75']);
|
|
145
136
|
break;
|
|
146
|
-
|
|
147
137
|
case 3:
|
|
148
138
|
tcoordDec = tcoordDec.concat(['uniform float mix0;', 'uniform float mix1;', 'uniform float mix2;', '#define height0 0.17', '#define height1 0.5', '#define height2 0.83']);
|
|
149
139
|
break;
|
|
150
|
-
|
|
151
140
|
case 4:
|
|
152
141
|
tcoordDec = tcoordDec.concat(['uniform float mix0;', 'uniform float mix1;', 'uniform float mix2;', 'uniform float mix3;', '#define height0 0.125', '#define height1 0.375', '#define height2 0.625', '#define height3 0.875']);
|
|
153
142
|
break;
|
|
154
|
-
|
|
155
143
|
default:
|
|
156
144
|
vtkErrorMacro('Unsupported number of independent coordinates.');
|
|
157
145
|
}
|
|
158
146
|
}
|
|
159
|
-
|
|
160
147
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Dec', tcoordDec).result;
|
|
161
|
-
|
|
162
148
|
if (iComps) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
tcoordImpl = tcoordImpl.concat(["vec3 tcolor".concat(_comp, " = mix").concat(_comp, " * texture2D(colorTexture1, vec2(tvalue.").concat(rgba[_comp], " * cscale").concat(_comp, " + cshift").concat(_comp, ", height").concat(_comp, ")).rgb;"), "float compWeight".concat(_comp, " = mix").concat(_comp, " * texture2D(pwfTexture1, vec2(tvalue.").concat(rgba[_comp], " * pwfscale").concat(_comp, " + pwfshift").concat(_comp, ", height").concat(_comp, ")).r;")]);
|
|
149
|
+
const rgba = ['r', 'g', 'b', 'a'];
|
|
150
|
+
let tcoordImpl = ['vec4 tvalue = texture2D(texture1, tcoordVCVSOutput);'];
|
|
151
|
+
for (let comp = 0; comp < tNumComp; comp++) {
|
|
152
|
+
tcoordImpl = tcoordImpl.concat([`vec3 tcolor${comp} = mix${comp} * texture2D(colorTexture1, vec2(tvalue.${rgba[comp]} * cscale${comp} + cshift${comp}, height${comp})).rgb;`, `float compWeight${comp} = mix${comp} * texture2D(pwfTexture1, vec2(tvalue.${rgba[comp]} * pwfscale${comp} + pwfshift${comp}, height${comp})).r;`]);
|
|
168
153
|
}
|
|
169
|
-
|
|
170
154
|
switch (tNumComp) {
|
|
171
155
|
case 1:
|
|
172
156
|
tcoordImpl = tcoordImpl.concat(['gl_FragData[0] = vec4(tcolor0.rgb, opacity);']);
|
|
173
157
|
break;
|
|
174
|
-
|
|
175
158
|
case 2:
|
|
176
159
|
tcoordImpl = tcoordImpl.concat(['float weightSum = compWeight0 + compWeight1;', 'gl_FragData[0] = vec4(vec3((tcolor0.rgb * (compWeight0 / weightSum)) + (tcolor1.rgb * (compWeight1 / weightSum))), opacity);']);
|
|
177
160
|
break;
|
|
178
|
-
|
|
179
161
|
case 3:
|
|
180
162
|
tcoordImpl = tcoordImpl.concat(['float weightSum = compWeight0 + compWeight1 + compWeight2;', 'gl_FragData[0] = vec4(vec3((tcolor0.rgb * (compWeight0 / weightSum)) + (tcolor1.rgb * (compWeight1 / weightSum)) + (tcolor2.rgb * (compWeight2 / weightSum))), opacity);']);
|
|
181
163
|
break;
|
|
182
|
-
|
|
183
164
|
case 4:
|
|
184
165
|
tcoordImpl = tcoordImpl.concat(['float weightSum = compWeight0 + compWeight1 + compWeight2 + compWeight3;', 'gl_FragData[0] = vec4(vec3((tcolor0.rgb * (compWeight0 / weightSum)) + (tcolor1.rgb * (compWeight1 / weightSum)) + (tcolor2.rgb * (compWeight2 / weightSum)) + (tcolor3.rgb * (compWeight3 / weightSum))), opacity);']);
|
|
185
166
|
break;
|
|
186
|
-
|
|
187
167
|
default:
|
|
188
168
|
vtkErrorMacro('Unsupported number of independent coordinates.');
|
|
189
169
|
}
|
|
190
|
-
|
|
191
170
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Impl', tcoordImpl).result;
|
|
192
171
|
} else {
|
|
193
172
|
// dependent components
|
|
@@ -195,295 +174,258 @@ function vtkOpenGLImageMapper(publicAPI, model) {
|
|
|
195
174
|
case 1:
|
|
196
175
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Impl', ['float intensity = texture2D(texture1, tcoordVCVSOutput).r;', 'vec3 tcolor = texture2D(colorTexture1, vec2(intensity * cscale0 + cshift0, 0.5)).rgb;', 'float scalarOpacity = texture2D(pwfTexture1, vec2(intensity * pwfscale0 + pwfshift0, 0.5)).r;', 'gl_FragData[0] = vec4(tcolor, scalarOpacity * opacity);']).result;
|
|
197
176
|
break;
|
|
198
|
-
|
|
199
177
|
case 2:
|
|
200
178
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Impl', ['vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);', 'float intensity = tcolor.r*cscale0 + cshift0;', 'gl_FragData[0] = vec4(texture2D(colorTexture1, vec2(intensity, 0.5)).rgb, pwfscale0*tcolor.g + pwfshift0);']).result;
|
|
201
179
|
break;
|
|
202
|
-
|
|
203
180
|
case 3:
|
|
204
181
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Impl', ['vec4 tcolor = cscale0*texture2D(texture1, tcoordVCVSOutput.st) + cshift0;', 'gl_FragData[0] = vec4(texture2D(colorTexture1, vec2(tcolor.r,0.5)).r,', ' texture2D(colorTexture1, vec2(tcolor.g,0.5)).r,', ' texture2D(colorTexture1, vec2(tcolor.b,0.5)).r, opacity);']).result;
|
|
205
182
|
break;
|
|
206
|
-
|
|
207
183
|
default:
|
|
208
184
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Impl', ['vec4 tcolor = cscale0*texture2D(texture1, tcoordVCVSOutput.st) + cshift0;', 'gl_FragData[0] = vec4(texture2D(colorTexture1, vec2(tcolor.r,0.5)).r,', ' texture2D(colorTexture1, vec2(tcolor.g,0.5)).r,', ' texture2D(colorTexture1, vec2(tcolor.b,0.5)).r, tcolor.a);']).result;
|
|
209
185
|
}
|
|
210
186
|
}
|
|
211
|
-
|
|
212
187
|
if (model.haveSeenDepthRequest) {
|
|
213
188
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::ZBuffer::Dec', 'uniform int depthRequest;').result;
|
|
214
189
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::ZBuffer::Impl', ['if (depthRequest == 1) {', 'float iz = floor(gl_FragCoord.z*65535.0 + 0.1);', 'float rf = floor(iz/256.0)/255.0;', 'float gf = mod(iz,256.0)/255.0;', 'gl_FragData[0] = vec4(rf, gf, 0.0, 1.0); }']).result;
|
|
215
190
|
}
|
|
216
|
-
|
|
217
191
|
shaders.Vertex = VSSource;
|
|
218
192
|
shaders.Fragment = FSSource;
|
|
219
193
|
publicAPI.replaceShaderClip(shaders, ren, actor);
|
|
220
194
|
publicAPI.replaceShaderCoincidentOffset(shaders, ren, actor);
|
|
221
195
|
};
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
var FSSource = shaders.Fragment;
|
|
226
|
-
|
|
196
|
+
publicAPI.replaceShaderClip = (shaders, ren, actor) => {
|
|
197
|
+
let VSSource = shaders.Vertex;
|
|
198
|
+
let FSSource = shaders.Fragment;
|
|
227
199
|
if (model.renderable.getNumberOfClippingPlanes()) {
|
|
228
|
-
|
|
229
|
-
|
|
200
|
+
let numClipPlanes = model.renderable.getNumberOfClippingPlanes();
|
|
230
201
|
if (numClipPlanes > 6) {
|
|
231
202
|
vtkErrorMacro$1('OpenGL has a limit of 6 clipping planes');
|
|
232
203
|
numClipPlanes = 6;
|
|
233
204
|
}
|
|
234
|
-
|
|
235
205
|
VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Clip::Dec', ['uniform int numClipPlanes;', 'uniform vec4 clipPlanes[6];', 'varying float clipDistancesVSOutput[6];']).result;
|
|
236
206
|
VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Clip::Impl', ['for (int planeNum = 0; planeNum < 6; planeNum++)', ' {', ' if (planeNum >= numClipPlanes)', ' {', ' break;', ' }', ' clipDistancesVSOutput[planeNum] = dot(clipPlanes[planeNum], vertexMC);', ' }']).result;
|
|
237
207
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Clip::Dec', ['uniform int numClipPlanes;', 'varying float clipDistancesVSOutput[6];']).result;
|
|
238
208
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Clip::Impl', ['for (int planeNum = 0; planeNum < 6; planeNum++)', ' {', ' if (planeNum >= numClipPlanes)', ' {', ' break;', ' }', ' if (clipDistancesVSOutput[planeNum] < 0.0) discard;', ' }']).result;
|
|
239
209
|
}
|
|
240
|
-
|
|
241
210
|
shaders.Vertex = VSSource;
|
|
242
211
|
shaders.Fragment = FSSource;
|
|
243
212
|
};
|
|
244
|
-
|
|
245
|
-
publicAPI.getNeedToRebuildShaders = function (cellBO, ren, actor) {
|
|
213
|
+
publicAPI.getNeedToRebuildShaders = (cellBO, ren, actor) => {
|
|
246
214
|
// has something changed that would require us to recreate the shader?
|
|
247
215
|
// candidates are
|
|
248
216
|
// property modified (representation interpolation and lighting)
|
|
249
217
|
// input modified
|
|
250
218
|
// light complexity changed
|
|
251
219
|
// render pass shader replacement changed
|
|
252
|
-
var tNumComp = model.openGLTexture.getComponents();
|
|
253
|
-
var iComp = actor.getProperty().getIndependentComponents(); // has the render pass shader replacement changed? Two options
|
|
254
220
|
|
|
255
|
-
|
|
221
|
+
const tNumComp = model.openGLTexture.getComponents();
|
|
222
|
+
const iComp = actor.getProperty().getIndependentComponents();
|
|
256
223
|
|
|
224
|
+
// has the render pass shader replacement changed? Two options
|
|
225
|
+
let needRebuild = false;
|
|
257
226
|
if (!model.currentRenderPass && model.lastRenderPassShaderReplacement || model.currentRenderPass && model.currentRenderPass.getShaderReplacement() !== model.lastRenderPassShaderReplacement) {
|
|
258
227
|
needRebuild = true;
|
|
259
228
|
}
|
|
260
|
-
|
|
261
229
|
if (needRebuild || model.lastHaveSeenDepthRequest !== model.haveSeenDepthRequest || cellBO.getProgram() === 0 || model.lastTextureComponents !== tNumComp || model.lastIndependentComponents !== iComp) {
|
|
262
230
|
model.lastHaveSeenDepthRequest = model.haveSeenDepthRequest;
|
|
263
231
|
model.lastTextureComponents = tNumComp;
|
|
264
232
|
model.lastIndependentComponents = iComp;
|
|
265
233
|
return true;
|
|
266
234
|
}
|
|
267
|
-
|
|
268
235
|
return false;
|
|
269
236
|
};
|
|
237
|
+
publicAPI.updateShaders = (cellBO, ren, actor) => {
|
|
238
|
+
model.lastBoundBO = cellBO;
|
|
270
239
|
|
|
271
|
-
|
|
272
|
-
model.lastBoundBO = cellBO; // has something changed that would require us to recreate the shader?
|
|
273
|
-
|
|
240
|
+
// has something changed that would require us to recreate the shader?
|
|
274
241
|
if (publicAPI.getNeedToRebuildShaders(cellBO, ren, actor)) {
|
|
275
|
-
|
|
242
|
+
const shaders = {
|
|
276
243
|
Vertex: null,
|
|
277
244
|
Fragment: null,
|
|
278
245
|
Geometry: null
|
|
279
246
|
};
|
|
280
|
-
publicAPI.buildShaders(shaders, ren, actor);
|
|
281
|
-
|
|
282
|
-
var newShader = model._openGLRenderWindow.getShaderCache().readyShaderProgramArray(shaders.Vertex, shaders.Fragment, shaders.Geometry); // if the shader changed reinitialize the VAO
|
|
247
|
+
publicAPI.buildShaders(shaders, ren, actor);
|
|
283
248
|
|
|
249
|
+
// compile and bind the program if needed
|
|
250
|
+
const newShader = model._openGLRenderWindow.getShaderCache().readyShaderProgramArray(shaders.Vertex, shaders.Fragment, shaders.Geometry);
|
|
284
251
|
|
|
252
|
+
// if the shader changed reinitialize the VAO
|
|
285
253
|
if (newShader !== cellBO.getProgram()) {
|
|
286
|
-
cellBO.setProgram(newShader);
|
|
287
|
-
|
|
254
|
+
cellBO.setProgram(newShader);
|
|
255
|
+
// reset the VAO as the shader has changed
|
|
288
256
|
cellBO.getVAO().releaseGraphicsResources();
|
|
289
257
|
}
|
|
290
|
-
|
|
291
258
|
cellBO.getShaderSourceTime().modified();
|
|
292
259
|
} else {
|
|
293
260
|
model._openGLRenderWindow.getShaderCache().readyShaderProgram(cellBO.getProgram());
|
|
294
261
|
}
|
|
295
|
-
|
|
296
262
|
cellBO.getVAO().bind();
|
|
297
263
|
publicAPI.setMapperShaderParameters(cellBO, ren, actor);
|
|
298
264
|
publicAPI.setCameraShaderParameters(cellBO, ren, actor);
|
|
299
265
|
publicAPI.setPropertyShaderParameters(cellBO, ren, actor);
|
|
300
266
|
};
|
|
301
|
-
|
|
302
|
-
publicAPI.setMapperShaderParameters = function (cellBO, ren, actor) {
|
|
267
|
+
publicAPI.setMapperShaderParameters = (cellBO, ren, actor) => {
|
|
303
268
|
// Now to update the VAO too, if necessary.
|
|
269
|
+
|
|
304
270
|
if (cellBO.getCABO().getElementCount() && (model.VBOBuildTime > cellBO.getAttributeUpdateTime().getMTime() || cellBO.getShaderSourceTime().getMTime() > cellBO.getAttributeUpdateTime().getMTime())) {
|
|
305
271
|
if (cellBO.getProgram().isAttributeUsed('vertexMC')) {
|
|
306
272
|
if (!cellBO.getVAO().addAttributeArray(cellBO.getProgram(), cellBO.getCABO(), 'vertexMC', cellBO.getCABO().getVertexOffset(), cellBO.getCABO().getStride(), model.context.FLOAT, 3, model.context.FALSE)) {
|
|
307
273
|
vtkErrorMacro('Error setting vertexMC in shader VAO.');
|
|
308
274
|
}
|
|
309
275
|
}
|
|
310
|
-
|
|
311
276
|
if (cellBO.getProgram().isAttributeUsed('tcoordMC') && cellBO.getCABO().getTCoordOffset()) {
|
|
312
277
|
if (!cellBO.getVAO().addAttributeArray(cellBO.getProgram(), cellBO.getCABO(), 'tcoordMC', cellBO.getCABO().getTCoordOffset(), cellBO.getCABO().getStride(), model.context.FLOAT, cellBO.getCABO().getTCoordComponents(), model.context.FALSE)) {
|
|
313
278
|
vtkErrorMacro('Error setting tcoordMC in shader VAO.');
|
|
314
279
|
}
|
|
315
280
|
}
|
|
316
|
-
|
|
317
281
|
cellBO.getAttributeUpdateTime().modified();
|
|
318
282
|
}
|
|
319
|
-
|
|
320
|
-
var texUnit = model.openGLTexture.getTextureUnit();
|
|
283
|
+
const texUnit = model.openGLTexture.getTextureUnit();
|
|
321
284
|
cellBO.getProgram().setUniformi('texture1', texUnit);
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
285
|
+
const numComp = model.openGLTexture.getComponents();
|
|
286
|
+
const iComps = actor.getProperty().getIndependentComponents();
|
|
325
287
|
if (iComps) {
|
|
326
|
-
for (
|
|
327
|
-
cellBO.getProgram().setUniformf(
|
|
288
|
+
for (let i = 0; i < numComp; i++) {
|
|
289
|
+
cellBO.getProgram().setUniformf(`mix${i}`, actor.getProperty().getComponentWeight(i));
|
|
328
290
|
}
|
|
329
291
|
}
|
|
292
|
+
const oglShiftScale = model.openGLTexture.getShiftAndScale();
|
|
330
293
|
|
|
331
|
-
|
|
294
|
+
// three levels of shift scale combined into one
|
|
332
295
|
// for performance in the fragment shader
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
var cfun = actor.getProperty().getRGBTransferFunction(target);
|
|
339
|
-
|
|
296
|
+
for (let i = 0; i < numComp; i++) {
|
|
297
|
+
let cw = actor.getProperty().getColorWindow();
|
|
298
|
+
let cl = actor.getProperty().getColorLevel();
|
|
299
|
+
const target = iComps ? i : 0;
|
|
300
|
+
const cfun = actor.getProperty().getRGBTransferFunction(target);
|
|
340
301
|
if (cfun && actor.getProperty().getUseLookupTableScalarRange()) {
|
|
341
|
-
|
|
302
|
+
const cRange = cfun.getRange();
|
|
342
303
|
cw = cRange[1] - cRange[0];
|
|
343
304
|
cl = 0.5 * (cRange[1] + cRange[0]);
|
|
344
305
|
}
|
|
306
|
+
const scale = oglShiftScale.scale / cw;
|
|
307
|
+
const shift = (oglShiftScale.shift - cl) / cw + 0.5;
|
|
308
|
+
cellBO.getProgram().setUniformf(`cshift${i}`, shift);
|
|
309
|
+
cellBO.getProgram().setUniformf(`cscale${i}`, scale);
|
|
310
|
+
}
|
|
345
311
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
for (var _i2 = 0; _i2 < numComp; _i2++) {
|
|
354
|
-
var pwfScale = 1.0;
|
|
355
|
-
var pwfShift = 0.0;
|
|
356
|
-
|
|
357
|
-
var _target = iComps ? _i2 : 0;
|
|
358
|
-
|
|
359
|
-
var pwfun = actor.getProperty().getPiecewiseFunction(_target);
|
|
360
|
-
|
|
312
|
+
// pwf shift/scale
|
|
313
|
+
for (let i = 0; i < numComp; i++) {
|
|
314
|
+
let pwfScale = 1.0;
|
|
315
|
+
let pwfShift = 0.0;
|
|
316
|
+
const target = iComps ? i : 0;
|
|
317
|
+
const pwfun = actor.getProperty().getPiecewiseFunction(target);
|
|
361
318
|
if (pwfun) {
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
319
|
+
const pwfRange = pwfun.getRange();
|
|
320
|
+
const length = pwfRange[1] - pwfRange[0];
|
|
321
|
+
const mid = 0.5 * (pwfRange[0] + pwfRange[1]);
|
|
365
322
|
pwfScale = oglShiftScale.scale / length;
|
|
366
323
|
pwfShift = (oglShiftScale.shift - mid) / length + 0.5;
|
|
367
324
|
}
|
|
368
|
-
|
|
369
|
-
cellBO.getProgram().setUniformf(
|
|
370
|
-
cellBO.getProgram().setUniformf("pwfscale".concat(_i2), pwfScale);
|
|
325
|
+
cellBO.getProgram().setUniformf(`pwfshift${i}`, pwfShift);
|
|
326
|
+
cellBO.getProgram().setUniformf(`pwfscale${i}`, pwfScale);
|
|
371
327
|
}
|
|
372
|
-
|
|
373
328
|
if (model.haveSeenDepthRequest) {
|
|
374
329
|
cellBO.getProgram().setUniformi('depthRequest', model.renderDepth ? 1 : 0);
|
|
375
|
-
}
|
|
376
|
-
|
|
330
|
+
}
|
|
377
331
|
|
|
332
|
+
// handle coincident
|
|
378
333
|
if (cellBO.getProgram().isUniformUsed('coffset')) {
|
|
379
|
-
|
|
380
|
-
cellBO.getProgram().setUniformf('coffset', cp.offset);
|
|
381
|
-
|
|
334
|
+
const cp = publicAPI.getCoincidentParameters(ren, actor);
|
|
335
|
+
cellBO.getProgram().setUniformf('coffset', cp.offset);
|
|
336
|
+
// cfactor isn't always used when coffset is.
|
|
382
337
|
if (cellBO.getProgram().isUniformUsed('cfactor')) {
|
|
383
338
|
cellBO.getProgram().setUniformf('cfactor', cp.factor);
|
|
384
339
|
}
|
|
385
340
|
}
|
|
386
|
-
|
|
387
|
-
var texColorUnit = model.colorTexture.getTextureUnit();
|
|
341
|
+
const texColorUnit = model.colorTexture.getTextureUnit();
|
|
388
342
|
cellBO.getProgram().setUniformi('colorTexture1', texColorUnit);
|
|
389
|
-
|
|
343
|
+
const texOpacityUnit = model.pwfTexture.getTextureUnit();
|
|
390
344
|
cellBO.getProgram().setUniformi('pwfTexture1', texOpacityUnit);
|
|
391
|
-
|
|
392
345
|
if (model.renderable.getNumberOfClippingPlanes()) {
|
|
393
346
|
// add all the clipping planes
|
|
394
|
-
|
|
395
|
-
|
|
347
|
+
let numClipPlanes = model.renderable.getNumberOfClippingPlanes();
|
|
396
348
|
if (numClipPlanes > 6) {
|
|
397
349
|
vtkErrorMacro$1('OpenGL has a limit of 6 clipping planes');
|
|
398
350
|
numClipPlanes = 6;
|
|
399
351
|
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
var mat = inverseShiftScaleMatrix ? mat4.copy(model.imagematinv, actor.getMatrix()) : actor.getMatrix();
|
|
404
|
-
|
|
352
|
+
const shiftScaleEnabled = cellBO.getCABO().getCoordShiftAndScaleEnabled();
|
|
353
|
+
const inverseShiftScaleMatrix = shiftScaleEnabled ? cellBO.getCABO().getInverseShiftAndScaleMatrix() : null;
|
|
354
|
+
const mat = inverseShiftScaleMatrix ? mat4.copy(model.imagematinv, actor.getMatrix()) : actor.getMatrix();
|
|
405
355
|
if (inverseShiftScaleMatrix) {
|
|
406
356
|
mat4.transpose(mat, mat);
|
|
407
357
|
mat4.multiply(mat, mat, inverseShiftScaleMatrix);
|
|
408
358
|
mat4.transpose(mat, mat);
|
|
409
|
-
}
|
|
410
|
-
|
|
359
|
+
}
|
|
411
360
|
|
|
361
|
+
// transform crop plane normal with transpose(inverse(worldToIndex))
|
|
412
362
|
mat4.transpose(model.imagemat, model.currentInput.getIndexToWorld());
|
|
413
363
|
mat4.multiply(model.imagematinv, mat, model.imagemat);
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
for (var j = 0; j < 4; j++) {
|
|
364
|
+
const planeEquations = [];
|
|
365
|
+
for (let i = 0; i < numClipPlanes; i++) {
|
|
366
|
+
const planeEquation = [];
|
|
367
|
+
model.renderable.getClippingPlaneInDataCoords(model.imagematinv, i, planeEquation);
|
|
368
|
+
for (let j = 0; j < 4; j++) {
|
|
421
369
|
planeEquations.push(planeEquation[j]);
|
|
422
370
|
}
|
|
423
371
|
}
|
|
424
|
-
|
|
425
372
|
cellBO.getProgram().setUniformi('numClipPlanes', numClipPlanes);
|
|
426
373
|
cellBO.getProgram().setUniform4fv('clipPlanes', planeEquations);
|
|
427
374
|
}
|
|
428
375
|
};
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
var i2wmat4 = image.getIndexToWorld();
|
|
376
|
+
publicAPI.setCameraShaderParameters = (cellBO, ren, actor) => {
|
|
377
|
+
const program = cellBO.getProgram();
|
|
378
|
+
const actMats = model.openGLImageSlice.getKeyMatrices();
|
|
379
|
+
const image = model.currentInput;
|
|
380
|
+
const i2wmat4 = image.getIndexToWorld();
|
|
435
381
|
mat4.multiply(model.imagemat, actMats.mcwc, i2wmat4);
|
|
436
|
-
|
|
382
|
+
const keyMats = model.openGLCamera.getKeyMatrices(ren);
|
|
437
383
|
mat4.multiply(model.imagemat, keyMats.wcpc, model.imagemat);
|
|
438
|
-
|
|
439
384
|
if (cellBO.getCABO().getCoordShiftAndScaleEnabled()) {
|
|
440
|
-
|
|
385
|
+
const inverseShiftScaleMat = cellBO.getCABO().getInverseShiftAndScaleMatrix();
|
|
441
386
|
mat4.multiply(model.imagemat, model.imagemat, inverseShiftScaleMat);
|
|
442
387
|
}
|
|
443
|
-
|
|
444
388
|
program.setUniformMatrix('MCPCMatrix', model.imagemat);
|
|
445
389
|
};
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
var opacity = ppty.getOpacity();
|
|
390
|
+
publicAPI.setPropertyShaderParameters = (cellBO, ren, actor) => {
|
|
391
|
+
const program = cellBO.getProgram();
|
|
392
|
+
const ppty = actor.getProperty();
|
|
393
|
+
const opacity = ppty.getOpacity();
|
|
451
394
|
program.setUniformf('opacity', opacity);
|
|
452
395
|
};
|
|
453
|
-
|
|
454
|
-
publicAPI.renderPieceStart = function (ren, actor) {
|
|
396
|
+
publicAPI.renderPieceStart = (ren, actor) => {
|
|
455
397
|
// make sure the BOs are up to date
|
|
456
|
-
publicAPI.updateBufferObjects(ren, actor);
|
|
398
|
+
publicAPI.updateBufferObjects(ren, actor);
|
|
457
399
|
|
|
400
|
+
// Bind the OpenGL, this is shared between the different primitive/cell types.
|
|
458
401
|
model.lastBoundBO = null;
|
|
459
402
|
};
|
|
403
|
+
publicAPI.renderPieceDraw = (ren, actor) => {
|
|
404
|
+
const gl = model.context;
|
|
460
405
|
|
|
461
|
-
|
|
462
|
-
var gl = model.context; // activate the texture
|
|
463
|
-
|
|
406
|
+
// activate the texture
|
|
464
407
|
model.openGLTexture.activate();
|
|
465
408
|
model.colorTexture.activate();
|
|
466
|
-
model.pwfTexture.activate();
|
|
409
|
+
model.pwfTexture.activate();
|
|
467
410
|
|
|
411
|
+
// draw polygons
|
|
468
412
|
if (model.tris.getCABO().getElementCount()) {
|
|
469
413
|
// First we do the triangles, update the shader, set uniforms, etc.
|
|
470
414
|
publicAPI.updateShaders(model.tris, ren, actor);
|
|
471
415
|
gl.drawArrays(gl.TRIANGLES, 0, model.tris.getCABO().getElementCount());
|
|
472
416
|
model.tris.getVAO().release();
|
|
473
417
|
}
|
|
474
|
-
|
|
475
418
|
model.openGLTexture.deactivate();
|
|
476
419
|
model.colorTexture.deactivate();
|
|
477
420
|
model.pwfTexture.deactivate();
|
|
478
421
|
};
|
|
479
|
-
|
|
480
|
-
publicAPI.
|
|
481
|
-
|
|
482
|
-
publicAPI.renderPiece = function (ren, actor) {
|
|
422
|
+
publicAPI.renderPieceFinish = (ren, actor) => {};
|
|
423
|
+
publicAPI.renderPiece = (ren, actor) => {
|
|
483
424
|
// Make sure that we have been properly initialized.
|
|
484
425
|
// if (ren.getRenderWindow().checkAbortStatus()) {
|
|
485
426
|
// return;
|
|
486
427
|
// }
|
|
428
|
+
|
|
487
429
|
publicAPI.invokeEvent({
|
|
488
430
|
type: 'StartEvent'
|
|
489
431
|
});
|
|
@@ -492,61 +434,49 @@ function vtkOpenGLImageMapper(publicAPI, model) {
|
|
|
492
434
|
publicAPI.invokeEvent({
|
|
493
435
|
type: 'EndEvent'
|
|
494
436
|
});
|
|
495
|
-
|
|
496
437
|
if (!model.currentInput) {
|
|
497
438
|
vtkErrorMacro('No input!');
|
|
498
439
|
return;
|
|
499
440
|
}
|
|
500
|
-
|
|
501
441
|
publicAPI.renderPieceStart(ren, actor);
|
|
502
442
|
publicAPI.renderPieceDraw(ren, actor);
|
|
503
443
|
publicAPI.renderPieceFinish(ren, actor);
|
|
504
444
|
};
|
|
505
|
-
|
|
506
|
-
publicAPI.computeBounds = function (ren, actor) {
|
|
445
|
+
publicAPI.computeBounds = (ren, actor) => {
|
|
507
446
|
if (!publicAPI.getInput()) {
|
|
508
447
|
uninitializeBounds(model.bounds);
|
|
509
448
|
return;
|
|
510
449
|
}
|
|
511
|
-
|
|
512
450
|
model.bounds = publicAPI.getInput().getBounds();
|
|
513
451
|
};
|
|
514
|
-
|
|
515
|
-
publicAPI.updateBufferObjects = function (ren, actor) {
|
|
452
|
+
publicAPI.updateBufferObjects = (ren, actor) => {
|
|
516
453
|
// Rebuild buffers if needed
|
|
517
454
|
if (publicAPI.getNeedToRebuildBufferObjects(ren, actor)) {
|
|
518
455
|
publicAPI.buildBufferObjects(ren, actor);
|
|
519
456
|
}
|
|
520
457
|
};
|
|
521
|
-
|
|
522
|
-
publicAPI.getNeedToRebuildBufferObjects = function (ren, actor) {
|
|
458
|
+
publicAPI.getNeedToRebuildBufferObjects = (ren, actor) => {
|
|
523
459
|
// first do a coarse check
|
|
524
460
|
if (model.VBOBuildTime.getMTime() < publicAPI.getMTime() || model.VBOBuildTime.getMTime() < actor.getMTime() || model.VBOBuildTime.getMTime() < model.renderable.getMTime() || model.VBOBuildTime.getMTime() < actor.getProperty().getMTime() || model.VBOBuildTime.getMTime() < model.currentInput.getMTime()) {
|
|
525
461
|
return true;
|
|
526
462
|
}
|
|
527
|
-
|
|
528
463
|
return false;
|
|
529
464
|
};
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
var image = model.currentInput;
|
|
533
|
-
|
|
465
|
+
publicAPI.buildBufferObjects = (ren, actor) => {
|
|
466
|
+
const image = model.currentInput;
|
|
534
467
|
if (!image) {
|
|
535
468
|
return;
|
|
536
469
|
}
|
|
537
|
-
|
|
538
|
-
var imgScalars = image.getPointData() && image.getPointData().getScalars();
|
|
539
|
-
|
|
470
|
+
const imgScalars = image.getPointData() && image.getPointData().getScalars();
|
|
540
471
|
if (!imgScalars) {
|
|
541
472
|
return;
|
|
542
473
|
}
|
|
474
|
+
const dataType = imgScalars.getDataType();
|
|
475
|
+
const numComp = imgScalars.getNumberOfComponents();
|
|
476
|
+
const actorProperty = actor.getProperty();
|
|
543
477
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
var actorProperty = actor.getProperty(); // set interpolation on the texture based on property setting
|
|
547
|
-
|
|
548
|
-
var iType = actorProperty.getInterpolationType();
|
|
549
|
-
|
|
478
|
+
// set interpolation on the texture based on property setting
|
|
479
|
+
const iType = actorProperty.getInterpolationType();
|
|
550
480
|
if (iType === InterpolationType.NEAREST) {
|
|
551
481
|
model.colorTexture.setMinificationFilter(Filter.NEAREST);
|
|
552
482
|
model.colorTexture.setMagnificationFilter(Filter.NEAREST);
|
|
@@ -558,144 +488,123 @@ function vtkOpenGLImageMapper(publicAPI, model) {
|
|
|
558
488
|
model.pwfTexture.setMinificationFilter(Filter.LINEAR);
|
|
559
489
|
model.pwfTexture.setMagnificationFilter(Filter.LINEAR);
|
|
560
490
|
}
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
var cfunToString = computeFnToString(actorProperty, actorProperty.getRGBTransferFunction, numIComps);
|
|
566
|
-
|
|
491
|
+
const iComps = actorProperty.getIndependentComponents();
|
|
492
|
+
const numIComps = iComps ? numComp : 1;
|
|
493
|
+
const textureHeight = iComps ? 2 * numIComps : 1;
|
|
494
|
+
const cfunToString = computeFnToString(actorProperty, actorProperty.getRGBTransferFunction, numIComps);
|
|
567
495
|
if (model.colorTextureString !== cfunToString) {
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
496
|
+
const cWidth = 1024;
|
|
497
|
+
const cSize = cWidth * textureHeight * 3;
|
|
498
|
+
const cTable = new Uint8Array(cSize);
|
|
499
|
+
let cfun = actorProperty.getRGBTransferFunction();
|
|
573
500
|
if (cfun) {
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
for (var c = 0; c < numIComps; c++) {
|
|
501
|
+
const tmpTable = new Float32Array(cWidth * 3);
|
|
502
|
+
for (let c = 0; c < numIComps; c++) {
|
|
577
503
|
cfun = actorProperty.getRGBTransferFunction(c);
|
|
578
|
-
|
|
504
|
+
const cRange = cfun.getRange();
|
|
579
505
|
cfun.getTable(cRange[0], cRange[1], cWidth, tmpTable, 1);
|
|
580
|
-
|
|
581
506
|
if (iComps) {
|
|
582
|
-
for (
|
|
507
|
+
for (let i = 0; i < cWidth * 3; i++) {
|
|
583
508
|
cTable[c * cWidth * 6 + i] = 255.0 * tmpTable[i];
|
|
584
509
|
cTable[c * cWidth * 6 + i + cWidth * 3] = 255.0 * tmpTable[i];
|
|
585
510
|
}
|
|
586
511
|
} else {
|
|
587
|
-
for (
|
|
588
|
-
cTable[c * cWidth * 6 +
|
|
512
|
+
for (let i = 0; i < cWidth * 3; i++) {
|
|
513
|
+
cTable[c * cWidth * 6 + i] = 255.0 * tmpTable[i];
|
|
589
514
|
}
|
|
590
515
|
}
|
|
591
516
|
}
|
|
592
|
-
|
|
593
517
|
model.colorTexture.create2DFromRaw(cWidth, textureHeight, 3, VtkDataTypes.UNSIGNED_CHAR, cTable);
|
|
594
518
|
} else {
|
|
595
|
-
for (
|
|
596
|
-
cTable[
|
|
597
|
-
cTable[
|
|
598
|
-
cTable[
|
|
519
|
+
for (let i = 0; i < cWidth * 3; ++i) {
|
|
520
|
+
cTable[i] = 255.0 * i / ((cWidth - 1) * 3);
|
|
521
|
+
cTable[i + 1] = 255.0 * i / ((cWidth - 1) * 3);
|
|
522
|
+
cTable[i + 2] = 255.0 * i / ((cWidth - 1) * 3);
|
|
599
523
|
}
|
|
600
|
-
|
|
601
524
|
model.colorTexture.create2DFromRaw(cWidth, 1, 3, VtkDataTypes.UNSIGNED_CHAR, cTable);
|
|
602
525
|
}
|
|
603
|
-
|
|
604
526
|
model.colorTextureString = cfunToString;
|
|
605
|
-
}
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
// Build piecewise function buffer. This buffer is used either
|
|
606
530
|
// for component weighting or opacity, depending on whether we're
|
|
607
531
|
// rendering components independently or not.
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
var pwfunToString = computeFnToString(actorProperty, actorProperty.getPiecewiseFunction, numIComps);
|
|
611
|
-
|
|
532
|
+
const pwfunToString = computeFnToString(actorProperty, actorProperty.getPiecewiseFunction, numIComps);
|
|
612
533
|
if (model.pwfTextureString !== pwfunToString) {
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
534
|
+
const pwfWidth = 1024;
|
|
535
|
+
const pwfSize = pwfWidth * textureHeight;
|
|
536
|
+
const pwfTable = new Uint8Array(pwfSize);
|
|
537
|
+
let pwfun = actorProperty.getPiecewiseFunction();
|
|
538
|
+
// support case where pwfun is added/removed
|
|
618
539
|
model.pwfTexture.resetFormatAndType();
|
|
619
|
-
|
|
620
540
|
if (pwfun) {
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
for (var _c = 0; _c < numIComps; ++_c) {
|
|
626
|
-
pwfun = actorProperty.getPiecewiseFunction(_c);
|
|
627
|
-
|
|
541
|
+
const pwfFloatTable = new Float32Array(pwfSize);
|
|
542
|
+
const tmpTable = new Float32Array(pwfWidth);
|
|
543
|
+
for (let c = 0; c < numIComps; ++c) {
|
|
544
|
+
pwfun = actorProperty.getPiecewiseFunction(c);
|
|
628
545
|
if (pwfun === null) {
|
|
629
546
|
// Piecewise constant max if no function supplied for this component
|
|
630
547
|
pwfFloatTable.fill(1.0);
|
|
631
548
|
} else {
|
|
632
|
-
|
|
633
|
-
pwfun.getTable(pwfRange[0], pwfRange[1], pwfWidth,
|
|
634
|
-
|
|
549
|
+
const pwfRange = pwfun.getRange();
|
|
550
|
+
pwfun.getTable(pwfRange[0], pwfRange[1], pwfWidth, tmpTable, 1);
|
|
551
|
+
// adjust for sample distance etc
|
|
635
552
|
if (iComps) {
|
|
636
|
-
for (
|
|
637
|
-
pwfFloatTable[
|
|
638
|
-
pwfFloatTable[
|
|
553
|
+
for (let i = 0; i < pwfWidth; i++) {
|
|
554
|
+
pwfFloatTable[c * pwfWidth * 2 + i] = tmpTable[i];
|
|
555
|
+
pwfFloatTable[c * pwfWidth * 2 + i + pwfWidth] = tmpTable[i];
|
|
639
556
|
}
|
|
640
557
|
} else {
|
|
641
|
-
for (
|
|
642
|
-
pwfFloatTable[
|
|
558
|
+
for (let i = 0; i < pwfWidth; i++) {
|
|
559
|
+
pwfFloatTable[c * pwfWidth * 2 + i] = tmpTable[i];
|
|
643
560
|
}
|
|
644
561
|
}
|
|
645
562
|
}
|
|
646
563
|
}
|
|
647
|
-
|
|
648
564
|
model.pwfTexture.create2DFromRaw(pwfWidth, textureHeight, 1, VtkDataTypes.FLOAT, pwfFloatTable);
|
|
649
565
|
} else {
|
|
650
566
|
// default is opaque
|
|
651
567
|
pwfTable.fill(255.0);
|
|
652
568
|
model.pwfTexture.create2DFromRaw(pwfWidth, 1, 1, VtkDataTypes.UNSIGNED_CHAR, pwfTable);
|
|
653
569
|
}
|
|
654
|
-
|
|
655
570
|
model.pwfTextureString = pwfunToString;
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
var _model$renderable$get = model.renderable.getClosestIJKAxis(),
|
|
660
|
-
ijkMode = _model$renderable$get.ijkMode; // Find the IJK slice
|
|
661
|
-
|
|
571
|
+
}
|
|
662
572
|
|
|
663
|
-
|
|
573
|
+
// Find what IJK axis and what direction to slice along
|
|
574
|
+
const {
|
|
575
|
+
ijkMode
|
|
576
|
+
} = model.renderable.getClosestIJKAxis();
|
|
664
577
|
|
|
578
|
+
// Find the IJK slice
|
|
579
|
+
let slice = model.renderable.getSlice();
|
|
665
580
|
if (ijkMode !== model.renderable.getSlicingMode()) {
|
|
666
581
|
// If not IJK slicing, get the IJK slice from the XYZ position/slice
|
|
667
582
|
slice = model.renderable.getSliceAtPosition(slice);
|
|
668
|
-
}
|
|
669
|
-
// since this mapper uses a collection of vtkImageData (and not just a single vtkImageData).
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
var nSlice = model.renderable.isA('vtkImageArrayMapper') ? model.renderable.getSubSlice() // get subSlice of the current (possibly multi-frame) image
|
|
673
|
-
: Math.round(slice); // Find sliceOffset
|
|
583
|
+
}
|
|
674
584
|
|
|
675
|
-
|
|
676
|
-
|
|
585
|
+
// Use sub-Slice number/offset if mapper being used is vtkImageArrayMapper,
|
|
586
|
+
// since this mapper uses a collection of vtkImageData (and not just a single vtkImageData).
|
|
587
|
+
const nSlice = model.renderable.isA('vtkImageArrayMapper') ? model.renderable.getSubSlice() // get subSlice of the current (possibly multi-frame) image
|
|
588
|
+
: Math.round(slice);
|
|
677
589
|
|
|
590
|
+
// Find sliceOffset
|
|
591
|
+
const ext = image.getExtent();
|
|
592
|
+
let sliceOffset;
|
|
678
593
|
if (ijkMode === SlicingMode.I) {
|
|
679
594
|
sliceOffset = nSlice - ext[0];
|
|
680
595
|
}
|
|
681
|
-
|
|
682
596
|
if (ijkMode === SlicingMode.J) {
|
|
683
597
|
sliceOffset = nSlice - ext[2];
|
|
684
598
|
}
|
|
685
|
-
|
|
686
599
|
if (ijkMode === SlicingMode.K || ijkMode === SlicingMode.NONE) {
|
|
687
600
|
sliceOffset = nSlice - ext[4];
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
var toString = "".concat(slice, "A").concat(image.getMTime(), "A").concat(imgScalars.getMTime(), "B").concat(publicAPI.getMTime(), "C").concat(model.renderable.getSlicingMode(), "D").concat(actor.getProperty().getInterpolationType());
|
|
601
|
+
}
|
|
692
602
|
|
|
603
|
+
// rebuild the VBO if the data has changed
|
|
604
|
+
const toString = `${slice}A${image.getMTime()}A${imgScalars.getMTime()}B${publicAPI.getMTime()}C${model.renderable.getSlicingMode()}D${actor.getProperty().getInterpolationType()}`;
|
|
693
605
|
if (model.VBOBuildString !== toString) {
|
|
694
|
-
var _model$renderable$get2, _model$renderable;
|
|
695
|
-
|
|
696
606
|
// Build the VBOs
|
|
697
|
-
|
|
698
|
-
|
|
607
|
+
const dims = image.getDimensions();
|
|
699
608
|
if (iType === InterpolationType.NEAREST) {
|
|
700
609
|
if (new Set([1, 3, 4]).has(numComp) && dataType === VtkDataTypes.UNSIGNED_CHAR && !iComps) {
|
|
701
610
|
model.openGLTexture.setGenerateMipmap(true);
|
|
@@ -703,7 +612,6 @@ function vtkOpenGLImageMapper(publicAPI, model) {
|
|
|
703
612
|
} else {
|
|
704
613
|
model.openGLTexture.setMinificationFilter(Filter.NEAREST);
|
|
705
614
|
}
|
|
706
|
-
|
|
707
615
|
model.openGLTexture.setMagnificationFilter(Filter.NEAREST);
|
|
708
616
|
} else {
|
|
709
617
|
if (numComp === 4 && dataType === VtkDataTypes.UNSIGNED_CHAR && !iComps) {
|
|
@@ -712,45 +620,39 @@ function vtkOpenGLImageMapper(publicAPI, model) {
|
|
|
712
620
|
} else {
|
|
713
621
|
model.openGLTexture.setMinificationFilter(Filter.LINEAR);
|
|
714
622
|
}
|
|
715
|
-
|
|
716
623
|
model.openGLTexture.setMagnificationFilter(Filter.LINEAR);
|
|
717
624
|
}
|
|
718
|
-
|
|
719
625
|
model.openGLTexture.setWrapS(Wrap.CLAMP_TO_EDGE);
|
|
720
626
|
model.openGLTexture.setWrapT(Wrap.CLAMP_TO_EDGE);
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
tcoordArray[
|
|
727
|
-
|
|
728
|
-
|
|
627
|
+
const sliceSize = dims[0] * dims[1] * numComp;
|
|
628
|
+
const ptsArray = new Float32Array(12);
|
|
629
|
+
const tcoordArray = new Float32Array(8);
|
|
630
|
+
for (let i = 0; i < 4; i++) {
|
|
631
|
+
tcoordArray[i * 2] = i % 2 ? 1.0 : 0.0;
|
|
632
|
+
tcoordArray[i * 2 + 1] = i > 1 ? 1.0 : 0.0;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
// Determine depth position of the slicing plane in the scene.
|
|
729
636
|
// Slicing modes X, Y, and Z use a continuous axis position, whereas
|
|
730
637
|
// slicing modes I, J, and K should use discrete positions.
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
var scalars = null; // Get right scalars according to slicing mode
|
|
737
|
-
|
|
638
|
+
const sliceDepth = [SlicingMode.X, SlicingMode.Y, SlicingMode.Z].includes(model.renderable.getSlicingMode()) ? slice : nSlice;
|
|
639
|
+
const spatialExt = image.getSpatialExtent();
|
|
640
|
+
const basicScalars = imgScalars.getData();
|
|
641
|
+
let scalars = null;
|
|
642
|
+
// Get right scalars according to slicing mode
|
|
738
643
|
if (ijkMode === SlicingMode.I) {
|
|
739
644
|
scalars = new basicScalars.constructor(dims[2] * dims[1] * numComp);
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
var bsIdx = (sliceOffset + j * dims[0] + k * dims[0] * dims[1]) * numComp;
|
|
645
|
+
let id = 0;
|
|
646
|
+
for (let k = 0; k < dims[2]; k++) {
|
|
647
|
+
for (let j = 0; j < dims[1]; j++) {
|
|
648
|
+
let bsIdx = (sliceOffset + j * dims[0] + k * dims[0] * dims[1]) * numComp;
|
|
745
649
|
id = (k * dims[1] + j) * numComp;
|
|
746
|
-
|
|
747
|
-
|
|
650
|
+
const end = bsIdx + numComp;
|
|
748
651
|
while (bsIdx < end) {
|
|
749
652
|
scalars[id++] = basicScalars[bsIdx++];
|
|
750
653
|
}
|
|
751
654
|
}
|
|
752
655
|
}
|
|
753
|
-
|
|
754
656
|
dims[0] = dims[1];
|
|
755
657
|
dims[1] = dims[2];
|
|
756
658
|
ptsArray[0] = sliceDepth;
|
|
@@ -767,22 +669,17 @@ function vtkOpenGLImageMapper(publicAPI, model) {
|
|
|
767
669
|
ptsArray[11] = spatialExt[5];
|
|
768
670
|
} else if (ijkMode === SlicingMode.J) {
|
|
769
671
|
scalars = new basicScalars.constructor(dims[2] * dims[0] * numComp);
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
var _end = _bsIdx + numComp;
|
|
779
|
-
|
|
780
|
-
while (_bsIdx < _end) {
|
|
781
|
-
scalars[_id++] = basicScalars[_bsIdx++];
|
|
672
|
+
let id = 0;
|
|
673
|
+
for (let k = 0; k < dims[2]; k++) {
|
|
674
|
+
for (let i = 0; i < dims[0]; i++) {
|
|
675
|
+
let bsIdx = (i + sliceOffset * dims[0] + k * dims[0] * dims[1]) * numComp;
|
|
676
|
+
id = (k * dims[0] + i) * numComp;
|
|
677
|
+
const end = bsIdx + numComp;
|
|
678
|
+
while (bsIdx < end) {
|
|
679
|
+
scalars[id++] = basicScalars[bsIdx++];
|
|
782
680
|
}
|
|
783
681
|
}
|
|
784
682
|
}
|
|
785
|
-
|
|
786
683
|
dims[1] = dims[2];
|
|
787
684
|
ptsArray[0] = spatialExt[0];
|
|
788
685
|
ptsArray[1] = sliceDepth;
|
|
@@ -813,22 +710,21 @@ function vtkOpenGLImageMapper(publicAPI, model) {
|
|
|
813
710
|
} else {
|
|
814
711
|
vtkErrorMacro('Reformat slicing not yet supported.');
|
|
815
712
|
}
|
|
816
|
-
|
|
817
|
-
model.openGLTexture.create2DFilterableFromRaw(dims[0], dims[1], numComp, imgScalars.getDataType(), scalars, (_model$renderable$get2 = (_model$renderable = model.renderable).getPreferSizeOverAccuracy) === null || _model$renderable$get2 === void 0 ? void 0 : _model$renderable$get2.call(_model$renderable));
|
|
713
|
+
model.openGLTexture.create2DFilterableFromRaw(dims[0], dims[1], numComp, imgScalars.getDataType(), scalars, model.renderable.getPreferSizeOverAccuracy?.());
|
|
818
714
|
model.openGLTexture.activate();
|
|
819
715
|
model.openGLTexture.sendParameters();
|
|
820
716
|
model.openGLTexture.deactivate();
|
|
821
|
-
|
|
717
|
+
const points = vtkDataArray.newInstance({
|
|
822
718
|
numberOfComponents: 3,
|
|
823
719
|
values: ptsArray
|
|
824
720
|
});
|
|
825
721
|
points.setName('points');
|
|
826
|
-
|
|
722
|
+
const tcoords = vtkDataArray.newInstance({
|
|
827
723
|
numberOfComponents: 2,
|
|
828
724
|
values: tcoordArray
|
|
829
725
|
});
|
|
830
726
|
tcoords.setName('tcoords');
|
|
831
|
-
|
|
727
|
+
const cellArray = new Uint16Array(8);
|
|
832
728
|
cellArray[0] = 3;
|
|
833
729
|
cellArray[1] = 0;
|
|
834
730
|
cellArray[2] = 1;
|
|
@@ -837,25 +733,26 @@ function vtkOpenGLImageMapper(publicAPI, model) {
|
|
|
837
733
|
cellArray[5] = 0;
|
|
838
734
|
cellArray[6] = 3;
|
|
839
735
|
cellArray[7] = 2;
|
|
840
|
-
|
|
736
|
+
const cells = vtkDataArray.newInstance({
|
|
841
737
|
numberOfComponents: 1,
|
|
842
738
|
values: cellArray
|
|
843
739
|
});
|
|
844
740
|
model.tris.getCABO().createVBO(cells, 'polys', Representation.SURFACE, {
|
|
845
|
-
points
|
|
846
|
-
tcoords
|
|
741
|
+
points,
|
|
742
|
+
tcoords,
|
|
847
743
|
cellOffset: 0
|
|
848
744
|
});
|
|
849
745
|
model.VBOBuildTime.modified();
|
|
850
746
|
model.VBOBuildString = toString;
|
|
851
747
|
}
|
|
852
748
|
};
|
|
853
|
-
}
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
// ----------------------------------------------------------------------------
|
|
854
752
|
// Object factory
|
|
855
753
|
// ----------------------------------------------------------------------------
|
|
856
754
|
|
|
857
|
-
|
|
858
|
-
var DEFAULT_VALUES = {
|
|
755
|
+
const DEFAULT_VALUES = {
|
|
859
756
|
VBOBuildTime: 0,
|
|
860
757
|
VBOBuildString: null,
|
|
861
758
|
openGLTexture: null,
|
|
@@ -867,12 +764,15 @@ var DEFAULT_VALUES = {
|
|
|
867
764
|
lastHaveSeenDepthRequest: false,
|
|
868
765
|
haveSeenDepthRequest: false,
|
|
869
766
|
lastTextureComponents: 0
|
|
870
|
-
};
|
|
767
|
+
};
|
|
768
|
+
|
|
769
|
+
// ----------------------------------------------------------------------------
|
|
871
770
|
|
|
872
771
|
function extend(publicAPI, model) {
|
|
873
|
-
|
|
874
|
-
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
772
|
+
let initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
773
|
+
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
875
774
|
|
|
775
|
+
// Inheritance
|
|
876
776
|
vtkViewNode.extend(publicAPI, model, initialValues);
|
|
877
777
|
vtkReplacementShaderMapper.implementReplaceShaderCoincidentOffset(publicAPI, model, initialValues);
|
|
878
778
|
vtkReplacementShaderMapper.implementBuildShadersWithReplacements(publicAPI, model, initialValues);
|
|
@@ -887,22 +787,29 @@ function extend(publicAPI, model) {
|
|
|
887
787
|
resizable: true
|
|
888
788
|
});
|
|
889
789
|
model.imagemat = mat4.identity(new Float64Array(16));
|
|
890
|
-
model.imagematinv = mat4.identity(new Float64Array(16));
|
|
790
|
+
model.imagematinv = mat4.identity(new Float64Array(16));
|
|
891
791
|
|
|
792
|
+
// Build VTK API
|
|
892
793
|
setGet(publicAPI, model, []);
|
|
893
794
|
model.VBOBuildTime = {};
|
|
894
|
-
obj(model.VBOBuildTime);
|
|
795
|
+
obj(model.VBOBuildTime);
|
|
895
796
|
|
|
797
|
+
// Object methods
|
|
896
798
|
vtkOpenGLImageMapper(publicAPI, model);
|
|
897
|
-
}
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
// ----------------------------------------------------------------------------
|
|
898
802
|
|
|
899
|
-
|
|
803
|
+
const newInstance = newInstance$1(extend, 'vtkOpenGLImageMapper');
|
|
804
|
+
|
|
805
|
+
// ----------------------------------------------------------------------------
|
|
900
806
|
|
|
901
807
|
var vtkImageMapper = {
|
|
902
|
-
newInstance
|
|
903
|
-
extend
|
|
904
|
-
};
|
|
808
|
+
newInstance,
|
|
809
|
+
extend
|
|
810
|
+
};
|
|
905
811
|
|
|
812
|
+
// Register ourself to OpenGL backend if imported
|
|
906
813
|
registerOverride('vtkAbstractImageMapper', newInstance);
|
|
907
814
|
|
|
908
815
|
export { vtkImageMapper as default, extend, newInstance };
|