@kitware/vtk.js 28.10.2 → 28.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Common/Core/Base64.js +53 -82
- package/Common/Core/CellArray.js +52 -60
- package/Common/Core/ClassHierarchy.js +8 -36
- package/Common/Core/DataArray/Constants.js +6 -6
- package/Common/Core/DataArray.js +193 -277
- package/Common/Core/Endian.js +14 -17
- package/Common/Core/HalfFloat.js +17 -34
- package/Common/Core/ImageHelper.js +17 -25
- package/Common/Core/LookupTable.js +131 -144
- package/Common/Core/Math/Constants.js +8 -8
- package/Common/Core/Math/index.js +754 -942
- package/Common/Core/Math.js +2 -4
- package/Common/Core/MatrixBuilder.js +99 -151
- package/Common/Core/Points.js +43 -43
- package/Common/Core/PriorityQueue.js +30 -28
- package/Common/Core/ProgressHandler.js +31 -32
- package/Common/Core/ScalarsToColors/Constants.js +4 -4
- package/Common/Core/ScalarsToColors.js +196 -253
- package/Common/Core/StringArray.js +48 -73
- package/Common/Core/URLExtract.js +10 -29
- package/Common/Core/VariantArray.js +48 -73
- package/Common/Core.js +11 -11
- package/Common/DataModel/AbstractPointLocator.js +19 -17
- package/Common/DataModel/BoundingBox.js +322 -490
- package/Common/DataModel/Box.js +46 -63
- package/Common/DataModel/CardinalSpline1D.js +92 -102
- package/Common/DataModel/Cell.js +41 -61
- package/Common/DataModel/CellLinks.js +91 -127
- package/Common/DataModel/CellTypes/Constants.js +7 -6
- package/Common/DataModel/CellTypes.js +55 -74
- package/Common/DataModel/Collection.js +45 -61
- package/Common/DataModel/Cone.js +28 -20
- package/Common/DataModel/Cylinder.js +41 -35
- package/Common/DataModel/DataSet/Constants.js +11 -5
- package/Common/DataModel/DataSet.js +37 -25
- package/Common/DataModel/DataSetAttributes/Constants.js +18 -18
- package/Common/DataModel/DataSetAttributes/FieldData.js +103 -194
- package/Common/DataModel/DataSetAttributes.js +96 -138
- package/Common/DataModel/EdgeLocator.js +45 -70
- package/Common/DataModel/ITKHelper.js +67 -137
- package/Common/DataModel/ImageData.js +115 -172
- package/Common/DataModel/ImplicitBoolean/Constants.js +2 -2
- package/Common/DataModel/ImplicitBoolean.js +66 -96
- package/Common/DataModel/IncrementalOctreeNode.js +201 -231
- package/Common/DataModel/IncrementalOctreePointLocator.js +160 -198
- package/Common/DataModel/KochanekSpline1D.js +78 -81
- package/Common/DataModel/Line/Constants.js +2 -2
- package/Common/DataModel/Line.js +82 -105
- package/Common/DataModel/Locator.js +17 -10
- package/Common/DataModel/Molecule.js +26 -17
- package/Common/DataModel/PiecewiseFunction.js +218 -239
- package/Common/DataModel/Plane.js +90 -113
- package/Common/DataModel/PointSet.js +30 -26
- package/Common/DataModel/PolyData/Constants.js +2 -2
- package/Common/DataModel/PolyData.js +95 -120
- package/Common/DataModel/PolyLine.js +44 -61
- package/Common/DataModel/Polygon/Constants.js +4 -4
- package/Common/DataModel/Polygon.js +128 -169
- package/Common/DataModel/Quad/Constants.js +2 -2
- package/Common/DataModel/Quad.js +61 -100
- package/Common/DataModel/SelectionNode/Constants.js +5 -4
- package/Common/DataModel/SelectionNode.js +25 -21
- package/Common/DataModel/Sphere.js +40 -35
- package/Common/DataModel/Spline1D/Constants.js +3 -2
- package/Common/DataModel/Spline1D.js +34 -18
- package/Common/DataModel/Spline3D/Constants.js +2 -2
- package/Common/DataModel/Spline3D.js +46 -41
- package/Common/DataModel/StructuredData/Constants.js +2 -2
- package/Common/DataModel/StructuredData.js +9 -20
- package/Common/DataModel/Triangle.js +207 -250
- package/Common/DataModel.js +19 -19
- package/Common/System/MobileVR.js +56 -61
- package/Common/System/TimerLog.js +1 -1
- package/Common/System.js +2 -2
- package/Common/Transform/LandmarkTransform/Constants.js +2 -2
- package/Common/Transform/LandmarkTransform.js +133 -117
- package/Common/Transform/Transform.js +42 -57
- package/Common/Transform.js +2 -2
- package/Common/index.js +4 -4
- package/Filters/Core/Cutter.js +134 -146
- package/Filters/Core/PolyDataNormals.js +44 -50
- package/Filters/Core.js +2 -2
- package/Filters/Cornerstone/ImageDataToCornerstoneImage.js +45 -33
- package/Filters/Cornerstone.js +1 -1
- package/Filters/General/AppendPolyData.js +84 -100
- package/Filters/General/Calculator.js +95 -163
- package/Filters/General/ClipClosedSurface/Constants.js +2 -2
- package/Filters/General/ClipClosedSurface.js +341 -416
- package/Filters/General/ClosedPolyLineToSurfaceFilter.js +141 -156
- package/Filters/General/ContourTriangulator/Constants.js +2 -2
- package/Filters/General/ContourTriangulator/helper.js +684 -812
- package/Filters/General/ContourTriangulator.js +92 -89
- package/Filters/General/ImageCropFilter.js +77 -78
- package/Filters/General/ImageDataOutlineFilter.js +42 -36
- package/Filters/General/ImageMarchingCubes/caseTable.js +9 -521
- package/Filters/General/ImageMarchingCubes.js +99 -112
- package/Filters/General/ImageMarchingSquares/caseTable.js +9 -41
- package/Filters/General/ImageMarchingSquares.js +93 -118
- package/Filters/General/ImageOutlineFilter.js +53 -54
- package/Filters/General/ImageSliceFilter.js +39 -30
- package/Filters/General/ImageStreamline.js +107 -124
- package/Filters/General/LineFilter.js +26 -15
- package/Filters/General/MoleculeToRepresentation.js +136 -149
- package/Filters/General/OBBTree/OBBNode.js +36 -34
- package/Filters/General/OBBTree/helper.js +19 -24
- package/Filters/General/OBBTree.js +396 -488
- package/Filters/General/OutlineFilter.js +52 -34
- package/Filters/General/PaintFilter/PaintFilter.worker.js +93 -130
- package/Filters/General/PaintFilter.js +150 -162
- package/Filters/General/ScalarToRGBA.js +38 -33
- package/Filters/General/TriangleFilter.js +65 -62
- package/Filters/General/TubeFilter/Constants.js +4 -4
- package/Filters/General/TubeFilter.js +376 -496
- package/Filters/General/WarpScalar.js +58 -60
- package/Filters/General/WindowedSincPolyDataFilter.js +258 -330
- package/Filters/General.js +21 -21
- package/Filters/Sources/Arrow2DSource/Constants.js +2 -2
- package/Filters/Sources/Arrow2DSource.js +56 -56
- package/Filters/Sources/ArrowSource.js +39 -29
- package/Filters/Sources/CircleSource.js +43 -43
- package/Filters/Sources/ConcentricCylinderSource.js +151 -174
- package/Filters/Sources/ConeSource.js +51 -42
- package/Filters/Sources/CubeSource.js +75 -96
- package/Filters/Sources/Cursor3D.js +94 -109
- package/Filters/Sources/CylinderSource.js +90 -90
- package/Filters/Sources/ImageGridSource.js +43 -43
- package/Filters/Sources/LineSource.js +49 -39
- package/Filters/Sources/PlaneSource.js +97 -104
- package/Filters/Sources/PointSource.js +46 -37
- package/Filters/Sources/RTAnalyticSource.js +50 -48
- package/Filters/Sources/SLICSource.js +63 -73
- package/Filters/Sources/SphereSource.js +88 -78
- package/Filters/Sources/ViewFinderSource.js +26 -23
- package/Filters/Sources.js +14 -14
- package/Filters/Texture/TextureMapToPlane.js +95 -97
- package/Filters/Texture/TextureMapToSphere.js +46 -54
- package/Filters/Texture.js +2 -2
- package/Filters/index.js +5 -5
- package/IO/Core/BinaryHelper.js +12 -18
- package/IO/Core/DataAccessHelper/HtmlDataAccessHelper.js +43 -59
- package/IO/Core/DataAccessHelper/HttpDataAccessHelper.js +76 -113
- package/IO/Core/DataAccessHelper/JSZipDataAccessHelper.js +62 -112
- package/IO/Core/DataAccessHelper/LiteHttpDataAccessHelper.js +76 -113
- package/IO/Core/DataAccessHelper.js +6 -6
- package/IO/Core/HttpDataSetReader.js +136 -139
- package/IO/Core/HttpDataSetSeriesReader.js +64 -75
- package/IO/Core/HttpSceneLoader.js +130 -179
- package/IO/Core/ImageStream/DefaultProtocol.js +29 -43
- package/IO/Core/ImageStream/ViewStream.js +100 -103
- package/IO/Core/ImageStream.js +62 -54
- package/IO/Core/ResourceLoader.js +10 -9
- package/IO/Core/Serializer/ArraySerializer.js +40 -40
- package/IO/Core/Serializer/FieldDataSerializer.js +18 -28
- package/IO/Core/Serializer/ImageDataSerializer.js +22 -23
- package/IO/Core/Serializer/PolyDataSerializer.js +17 -21
- package/IO/Core/Serializer.js +6 -13
- package/IO/Core/WSLinkClient.js +90 -76
- package/IO/Core/ZipMultiDataSetReader.js +46 -44
- package/IO/Core/ZipMultiDataSetWriter.js +43 -34
- package/IO/Core.js +7 -7
- package/IO/Geometry/DracoReader.js +118 -121
- package/IO/Geometry/PLYReader.js +163 -223
- package/IO/Geometry/PLYWriter/Constants.js +5 -5
- package/IO/Geometry/PLYWriter.js +139 -154
- package/IO/Geometry/STLReader.js +123 -146
- package/IO/Geometry/STLWriter/Constants.js +2 -2
- package/IO/Geometry/STLWriter.js +83 -82
- package/IO/Geometry.js +5 -5
- package/IO/Legacy/LegacyAsciiParser.js +78 -139
- package/IO/Legacy/PolyDataReader.js +48 -36
- package/IO/Legacy.js +2 -2
- package/IO/Misc/ElevationReader.js +67 -60
- package/IO/Misc/HttpDataSetLODsLoader.js +41 -38
- package/IO/Misc/ITKImageReader.js +58 -45
- package/IO/Misc/ITKPolyDataReader.js +50 -38
- package/IO/Misc/JSONNucleoReader.js +49 -42
- package/IO/Misc/JSONReader.js +38 -33
- package/IO/Misc/MTLReader.js +74 -119
- package/IO/Misc/OBJReader.js +153 -206
- package/IO/Misc/PDBReader.js +70 -68
- package/IO/Misc/SkyboxReader.js +77 -82
- package/IO/Misc.js +9 -9
- package/IO/XML/XMLImageDataReader.js +36 -38
- package/IO/XML/XMLImageDataWriter.js +28 -21
- package/IO/XML/XMLPolyDataReader.js +49 -46
- package/IO/XML/XMLPolyDataWriter.js +43 -42
- package/IO/XML/XMLReader.js +262 -304
- package/IO/XML/XMLWriter/Constants.js +3 -3
- package/IO/XML/XMLWriter.js +70 -84
- package/IO/XML.js +6 -6
- package/IO/index.js +5 -5
- package/Imaging/Core/AbstractImageInterpolator/Constants.js +4 -4
- package/Imaging/Core/AbstractImageInterpolator/InterpolationInfo.js +30 -27
- package/Imaging/Core/AbstractImageInterpolator.js +74 -87
- package/Imaging/Core/ImageInterpolator.js +201 -252
- package/Imaging/Core/ImagePointDataIterator.js +96 -122
- package/Imaging/Core/ImageReslice/Constants.js +2 -2
- package/Imaging/Core/ImageReslice.js +327 -464
- package/Imaging/Core.js +4 -4
- package/Imaging/Hybrid/SampleFunction.js +58 -51
- package/Imaging/Hybrid.js +1 -1
- package/Imaging/index.js +2 -2
- package/Interaction/Animations/TimeStepBasedAnimationHandler.js +39 -54
- package/Interaction/Manipulators/CompositeCameraManipulator.js +22 -13
- package/Interaction/Manipulators/CompositeGestureManipulator.js +31 -43
- package/Interaction/Manipulators/CompositeKeyboardManipulator.js +15 -11
- package/Interaction/Manipulators/CompositeMouseManipulator.js +27 -33
- package/Interaction/Manipulators/CompositeVRManipulator.js +22 -15
- package/Interaction/Manipulators/GestureCameraManipulator.js +54 -36
- package/Interaction/Manipulators/KeyboardCameraManipulator.js +95 -97
- package/Interaction/Manipulators/MouseBoxSelectorManipulator.js +70 -89
- package/Interaction/Manipulators/MouseCameraAxisRotateManipulator.js +67 -54
- package/Interaction/Manipulators/MouseCameraSliceManipulator.js +40 -38
- package/Interaction/Manipulators/MouseCameraTrackballFirstPersonManipulator.js +83 -68
- package/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator.js +32 -28
- package/Interaction/Manipulators/MouseCameraTrackballPanManipulator.js +47 -40
- package/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js +55 -43
- package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +56 -46
- package/Interaction/Manipulators/MouseCameraTrackballZoomManipulator.js +41 -46
- package/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator.js +29 -27
- package/Interaction/Manipulators/MouseCameraUnicamManipulator.js +123 -146
- package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +144 -166
- package/Interaction/Manipulators/MouseRangeManipulator.js +127 -132
- package/Interaction/Manipulators/VRButtonPanManipulator.js +33 -23
- package/Interaction/Manipulators.js +21 -21
- package/Interaction/Misc/DeviceOrientationToCamera.js +25 -47
- package/Interaction/Misc.js +1 -1
- package/Interaction/Style/InteractorStyleImage.js +101 -121
- package/Interaction/Style/InteractorStyleMPRSlice.js +111 -128
- package/Interaction/Style/InteractorStyleManipulator/Presets.js +9 -17
- package/Interaction/Style/InteractorStyleManipulator.js +254 -329
- package/Interaction/Style/InteractorStyleRemoteMouse.js +195 -180
- package/Interaction/Style/InteractorStyleTrackballCamera.js +154 -157
- package/Interaction/Style/InteractorStyleUnicam.js +30 -38
- package/Interaction/Style.js +5 -5
- package/Interaction/UI/CornerAnnotation/CornerAnnotation.module.css.js +1 -1
- package/Interaction/UI/CornerAnnotation.js +65 -48
- package/Interaction/UI/FPSMonitor.js +104 -105
- package/Interaction/UI/Icons.js +1 -1
- package/Interaction/UI/Slider/Constants.js +2 -2
- package/Interaction/UI/Slider.js +78 -95
- package/Interaction/UI/VolumeController.js +104 -97
- package/Interaction/UI.js +5 -5
- package/Interaction/Widgets/OrientationMarkerWidget/Constants.js +2 -2
- package/Interaction/Widgets/OrientationMarkerWidget.js +90 -135
- package/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +0 -3
- package/Interaction/Widgets/PiecewiseGaussianWidget.js +381 -498
- package/Interaction/Widgets.js +2 -2
- package/Interaction/index.js +5 -5
- package/Proxy/Animation/AbstractAnimationProxy.js +22 -15
- package/Proxy/Animation/AnimationProxyManager.js +43 -51
- package/Proxy/Animation/TimeStepBasedAnimationHandlerProxy.js +26 -19
- package/Proxy/Core/AbstractRepresentationProxy.js +97 -151
- package/Proxy/Core/LookupTableProxy/Constants.js +4 -4
- package/Proxy/Core/LookupTableProxy.js +49 -52
- package/Proxy/Core/PiecewiseFunctionProxy/Constants.js +4 -4
- package/Proxy/Core/PiecewiseFunctionProxy.js +63 -72
- package/Proxy/Core/ProxyManager/core.js +83 -106
- package/Proxy/Core/ProxyManager/properties.js +53 -76
- package/Proxy/Core/ProxyManager/state.js +100 -110
- package/Proxy/Core/ProxyManager/view.js +45 -55
- package/Proxy/Core/ProxyManager.js +16 -8
- package/Proxy/Core/SourceProxy.js +41 -38
- package/Proxy/Core/View2DProxy.js +143 -199
- package/Proxy/Core/ViewProxy.js +223 -269
- package/Proxy/Core.js +7 -7
- package/Proxy/Representations/GeometryRepresentationProxy.js +34 -20
- package/Proxy/Representations/GlyphRepresentationProxy.js +42 -41
- package/Proxy/Representations/MoleculeRepresentationProxy.js +32 -22
- package/Proxy/Representations/ResliceRepresentationProxy.js +48 -32
- package/Proxy/Representations/SkyboxRepresentationProxy.js +30 -29
- package/Proxy/Representations/SliceRepresentationProxy.js +93 -112
- package/Proxy/Representations/SlicedGeometryRepresentationProxy.js +46 -42
- package/Proxy/Representations/VolumeRepresentationProxy.js +108 -133
- package/Proxy/Representations.js +7 -7
- package/Proxy/index.js +2 -2
- package/README.md +1 -1
- package/Rendering/Core/AbstractImageMapper/helper.js +44 -49
- package/Rendering/Core/AbstractImageMapper.js +18 -19
- package/Rendering/Core/AbstractMapper.js +39 -55
- package/Rendering/Core/AbstractMapper3D.js +26 -31
- package/Rendering/Core/AbstractPicker.js +25 -21
- package/Rendering/Core/Actor.js +71 -93
- package/Rendering/Core/Actor2D.js +64 -78
- package/Rendering/Core/AnnotatedCubeActor/Presets.js +5 -11
- package/Rendering/Core/AnnotatedCubeActor.js +94 -79
- package/Rendering/Core/AxesActor.js +65 -87
- package/Rendering/Core/Camera.js +246 -271
- package/Rendering/Core/CellPicker.js +125 -148
- package/Rendering/Core/ColorTransferFunction/ColorMaps.js +20 -21
- package/Rendering/Core/ColorTransferFunction/ColorMapsLite.js +20 -21
- package/Rendering/Core/ColorTransferFunction/Constants.js +4 -4
- package/Rendering/Core/ColorTransferFunction.js +460 -546
- package/Rendering/Core/Coordinate/Constants.js +2 -2
- package/Rendering/Core/Coordinate.js +119 -198
- package/Rendering/Core/CubeAxesActor.js +294 -320
- package/Rendering/Core/Follower.js +46 -45
- package/Rendering/Core/Glyph3DMapper/Constants.js +4 -4
- package/Rendering/Core/Glyph3DMapper.js +96 -148
- package/Rendering/Core/HardwareSelector.js +36 -69
- package/Rendering/Core/ImageArrayMapper.js +87 -126
- package/Rendering/Core/ImageCPRMapper.js +134 -209
- package/Rendering/Core/ImageMapper/Constants.js +2 -2
- package/Rendering/Core/ImageMapper.js +85 -144
- package/Rendering/Core/ImageProperty/Constants.js +2 -2
- package/Rendering/Core/ImageProperty.js +66 -81
- package/Rendering/Core/ImageResliceMapper/Constants.js +2 -2
- package/Rendering/Core/ImageResliceMapper.js +36 -29
- package/Rendering/Core/ImageSlice.js +85 -127
- package/Rendering/Core/InteractorObserver.js +82 -73
- package/Rendering/Core/InteractorStyle/Constants.js +2 -2
- package/Rendering/Core/InteractorStyle.js +56 -58
- package/Rendering/Core/Light.js +43 -49
- package/Rendering/Core/Mapper/CoincidentTopologyHelper.js +37 -48
- package/Rendering/Core/Mapper/Constants.js +6 -6
- package/Rendering/Core/Mapper/Static.js +15 -12
- package/Rendering/Core/Mapper.js +194 -259
- package/Rendering/Core/Mapper2D.js +61 -100
- package/Rendering/Core/Picker.js +124 -143
- package/Rendering/Core/PixelSpaceCallbackMapper.js +40 -37
- package/Rendering/Core/PointPicker.js +68 -79
- package/Rendering/Core/Prop/Constants.js +2 -2
- package/Rendering/Core/Prop.js +58 -106
- package/Rendering/Core/Prop3D.js +54 -83
- package/Rendering/Core/Property/Constants.js +6 -6
- package/Rendering/Core/Property.js +45 -74
- package/Rendering/Core/Property2D/Constants.js +2 -2
- package/Rendering/Core/Property2D.js +33 -42
- package/Rendering/Core/RenderWindow.js +70 -82
- package/Rendering/Core/RenderWindowInteractor/Constants.js +7 -7
- package/Rendering/Core/RenderWindowInteractor.js +324 -439
- package/Rendering/Core/Renderer.js +192 -256
- package/Rendering/Core/ScalarBarActor.js +267 -272
- package/Rendering/Core/Skybox.js +26 -24
- package/Rendering/Core/SphereMapper.js +22 -12
- package/Rendering/Core/StickMapper.js +22 -12
- package/Rendering/Core/SurfaceLICInterface/Constants.js +6 -6
- package/Rendering/Core/SurfaceLICInterface.js +13 -9
- package/Rendering/Core/SurfaceLICMapper.js +23 -15
- package/Rendering/Core/Texture.js +99 -141
- package/Rendering/Core/Viewport.js +60 -88
- package/Rendering/Core/Volume.js +55 -77
- package/Rendering/Core/VolumeMapper/Constants.js +4 -4
- package/Rendering/Core/VolumeMapper.js +59 -91
- package/Rendering/Core/VolumeProperty/Constants.js +4 -4
- package/Rendering/Core/VolumeProperty.js +78 -115
- package/Rendering/Core.js +47 -49
- package/Rendering/Misc/CanvasView.js +62 -61
- package/Rendering/Misc/FullScreenRenderWindow.js +60 -62
- package/Rendering/Misc/GenericRenderWindow.js +48 -37
- package/Rendering/Misc/RemoteView.js +86 -80
- package/Rendering/Misc/RenderWindowWithControlBar.js +54 -48
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager/CameraSynchronizer.js +43 -51
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager.js +52 -82
- package/Rendering/Misc/SynchronizableRenderWindow/ObjectManager.js +258 -308
- package/Rendering/Misc/SynchronizableRenderWindow.js +133 -163
- package/Rendering/Misc/TextureLODsDownloader.js +72 -74
- package/Rendering/Misc.js +7 -7
- package/Rendering/OpenGL/Actor.js +57 -68
- package/Rendering/OpenGL/Actor2D.js +56 -56
- package/Rendering/OpenGL/BufferObject/Constants.js +2 -2
- package/Rendering/OpenGL/BufferObject.js +50 -65
- package/Rendering/OpenGL/Camera.js +35 -29
- package/Rendering/OpenGL/CellArrayBufferObject.js +119 -149
- package/Rendering/OpenGL/Convolution2DPass.js +87 -81
- package/Rendering/OpenGL/CubeAxesActor.js +28 -21
- package/Rendering/OpenGL/ForwardPass.js +53 -64
- package/Rendering/OpenGL/Framebuffer.js +61 -101
- package/Rendering/OpenGL/Glyph3DMapper.js +165 -196
- package/Rendering/OpenGL/HardwareSelector/Constants.js +2 -2
- package/Rendering/OpenGL/HardwareSelector.js +272 -397
- package/Rendering/OpenGL/Helper.js +58 -73
- package/Rendering/OpenGL/ImageCPRMapper.js +339 -421
- package/Rendering/OpenGL/ImageMapper.js +268 -361
- package/Rendering/OpenGL/ImageResliceMapper.js +306 -438
- package/Rendering/OpenGL/ImageSlice.js +48 -54
- package/Rendering/OpenGL/OrderIndependentTranslucentPass.js +102 -84
- package/Rendering/OpenGL/PixelSpaceCallbackMapper.js +43 -42
- package/Rendering/OpenGL/PolyDataMapper.js +358 -492
- package/Rendering/OpenGL/PolyDataMapper2D.js +153 -205
- package/Rendering/OpenGL/RadialDistortionPass.js +86 -89
- package/Rendering/OpenGL/RenderWindow/Constants.js +2 -2
- package/Rendering/OpenGL/RenderWindow/ContextProxy.js +20 -29
- package/Rendering/OpenGL/RenderWindow.js +356 -510
- package/Rendering/OpenGL/Renderer.js +77 -89
- package/Rendering/OpenGL/ReplacementShaderMapper.js +28 -46
- package/Rendering/OpenGL/ScalarBarActor.js +28 -21
- package/Rendering/OpenGL/Shader.js +37 -31
- package/Rendering/OpenGL/ShaderCache.js +67 -74
- package/Rendering/OpenGL/ShaderProgram.js +136 -248
- package/Rendering/OpenGL/Skybox.js +99 -60
- package/Rendering/OpenGL/SphereMapper.js +94 -108
- package/Rendering/OpenGL/StickMapper.js +110 -114
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D/pingpong.js +91 -157
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D.js +142 -151
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICInterface.js +142 -216
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICMapper.js +79 -100
- package/Rendering/OpenGL/SurfaceLIC.js +2 -2
- package/Rendering/OpenGL/Texture/Constants.js +4 -4
- package/Rendering/OpenGL/Texture.js +443 -608
- package/Rendering/OpenGL/TextureUnitManager.js +47 -43
- package/Rendering/OpenGL/VertexArrayObject.js +92 -131
- package/Rendering/OpenGL/ViewNodeFactory.js +25 -13
- package/Rendering/OpenGL/Volume.js +38 -34
- package/Rendering/OpenGL/VolumeMapper.js +437 -547
- package/Rendering/OpenGL.js +28 -28
- package/Rendering/SceneGraph/RenderPass.js +34 -31
- package/Rendering/SceneGraph/RenderWindowViewNode.js +68 -94
- package/Rendering/SceneGraph/ViewNode.js +82 -111
- package/Rendering/SceneGraph/ViewNodeFactory.js +31 -26
- package/Rendering/SceneGraph.js +4 -4
- package/Rendering/WebGPU/Actor.js +49 -49
- package/Rendering/WebGPU/Actor2D.js +45 -44
- package/Rendering/WebGPU/BindGroup.js +43 -50
- package/Rendering/WebGPU/Buffer.js +41 -50
- package/Rendering/WebGPU/BufferManager/Constants.js +4 -4
- package/Rendering/WebGPU/BufferManager.js +111 -141
- package/Rendering/WebGPU/Camera.js +65 -67
- package/Rendering/WebGPU/CellArrayMapper.js +621 -388
- package/Rendering/WebGPU/CubeAxesActor.js +28 -19
- package/Rendering/WebGPU/Device.js +78 -133
- package/Rendering/WebGPU/ForwardPass.js +75 -72
- package/Rendering/WebGPU/FullScreenQuad.js +25 -18
- package/Rendering/WebGPU/Glyph3DMapper.js +62 -74
- package/Rendering/WebGPU/HardwareSelectionPass.js +45 -38
- package/Rendering/WebGPU/HardwareSelector.js +200 -276
- package/Rendering/WebGPU/ImageMapper.js +180 -171
- package/Rendering/WebGPU/ImageSlice.js +45 -44
- package/Rendering/WebGPU/IndexBuffer.js +166 -200
- package/Rendering/WebGPU/OpaquePass.js +37 -36
- package/Rendering/WebGPU/OrderIndependentTranslucentPass.js +72 -45
- package/Rendering/WebGPU/Pipeline.js +37 -51
- package/Rendering/WebGPU/PixelSpaceCallbackMapper.js +27 -19
- package/Rendering/WebGPU/PolyDataMapper.js +50 -53
- package/Rendering/WebGPU/PolyDataMapper2D.js +39 -39
- package/Rendering/WebGPU/RenderEncoder.js +68 -88
- package/Rendering/WebGPU/RenderWindow.js +262 -376
- package/Rendering/WebGPU/Renderer.js +224 -208
- package/Rendering/WebGPU/Sampler.js +27 -21
- package/Rendering/WebGPU/ScalarBarActor.js +28 -19
- package/Rendering/WebGPU/ShaderCache.js +43 -41
- package/Rendering/WebGPU/ShaderDescription.js +52 -59
- package/Rendering/WebGPU/ShaderModule.js +26 -17
- package/Rendering/WebGPU/SimpleMapper.js +185 -121
- package/Rendering/WebGPU/SphereMapper.js +200 -130
- package/Rendering/WebGPU/StickMapper.js +289 -152
- package/Rendering/WebGPU/StorageBuffer.js +100 -115
- package/Rendering/WebGPU/Texture.js +79 -99
- package/Rendering/WebGPU/TextureManager.js +52 -54
- package/Rendering/WebGPU/TextureView.js +40 -43
- package/Rendering/WebGPU/Types.js +53 -70
- package/Rendering/WebGPU/UniformBuffer.js +158 -184
- package/Rendering/WebGPU/VertexInput.js +64 -90
- package/Rendering/WebGPU/ViewNodeFactory.js +25 -13
- package/Rendering/WebGPU/Volume.js +52 -51
- package/Rendering/WebGPU/VolumePass.js +218 -239
- package/Rendering/WebGPU/VolumePassFSQ.js +625 -306
- package/Rendering/WebGPU.js +1 -1
- package/Rendering/index.js +5 -5
- package/Widgets/Core/AbstractWidget/Constants.js +2 -2
- package/Widgets/Core/AbstractWidget.js +49 -58
- package/Widgets/Core/AbstractWidgetFactory.js +101 -122
- package/Widgets/Core/StateBuilder/boundsMixin.js +23 -28
- package/Widgets/Core/StateBuilder/color3Mixin.js +10 -7
- package/Widgets/Core/StateBuilder/colorMixin.js +10 -6
- package/Widgets/Core/StateBuilder/cornerMixin.js +16 -15
- package/Widgets/Core/StateBuilder/directionMixin.js +20 -18
- package/Widgets/Core/StateBuilder/manipulatorMixin.js +26 -18
- package/Widgets/Core/StateBuilder/nameMixin.js +10 -6
- package/Widgets/Core/StateBuilder/orientationMixin.js +19 -16
- package/Widgets/Core/StateBuilder/originMixin.js +25 -32
- package/Widgets/Core/StateBuilder/scale1Mixin.js +10 -6
- package/Widgets/Core/StateBuilder/scale3Mixin.js +10 -6
- package/Widgets/Core/StateBuilder/shapeMixin.js +12 -6
- package/Widgets/Core/StateBuilder/textMixin.js +10 -6
- package/Widgets/Core/StateBuilder/visibleMixin.js +10 -6
- package/Widgets/Core/StateBuilder.js +120 -149
- package/Widgets/Core/WidgetManager/Constants.js +7 -7
- package/Widgets/Core/WidgetManager.js +249 -421
- package/Widgets/Core/WidgetState.js +48 -57
- package/Widgets/Core.js +5 -5
- package/Widgets/Manipulators/AbstractManipulator.js +20 -14
- package/Widgets/Manipulators/CPRManipulator.js +55 -71
- package/Widgets/Manipulators/LineManipulator.js +31 -28
- package/Widgets/Manipulators/PickerManipulator.d.ts +48 -0
- package/Widgets/Manipulators/PickerManipulator.js +65 -0
- package/Widgets/Manipulators/PlaneManipulator.js +26 -23
- package/Widgets/Manipulators/TrackballManipulator.js +39 -35
- package/Widgets/Manipulators.js +4 -2
- package/Widgets/Representations/ArrowHandleRepresentation.js +148 -162
- package/Widgets/Representations/CircleContextRepresentation.js +44 -38
- package/Widgets/Representations/ContextRepresentation.js +17 -14
- package/Widgets/Representations/ConvexFaceContextRepresentation.js +50 -47
- package/Widgets/Representations/CroppingOutlineRepresentation.js +38 -27
- package/Widgets/Representations/CubeHandleRepresentation.js +21 -18
- package/Widgets/Representations/GlyphRepresentation.js +107 -152
- package/Widgets/Representations/HandleRepresentation.js +17 -14
- package/Widgets/Representations/ImplicitPlaneRepresentation.js +97 -91
- package/Widgets/Representations/LineHandleRepresentation.js +44 -41
- package/Widgets/Representations/OutlineContextRepresentation.js +42 -36
- package/Widgets/Representations/PolyLineRepresentation.js +60 -75
- package/Widgets/Representations/RectangleContextRepresentation.js +42 -37
- package/Widgets/Representations/SphereContextRepresentation.js +19 -27
- package/Widgets/Representations/SphereHandleRepresentation.js +31 -27
- package/Widgets/Representations/SplineContextRepresentation.js +46 -70
- package/Widgets/Representations/WidgetRepresentation/Constants.js +2 -2
- package/Widgets/Representations/WidgetRepresentation.js +99 -134
- package/Widgets/Representations.js +13 -13
- package/Widgets/Widgets3D/AngleWidget/behavior.js +41 -63
- package/Widgets/Widgets3D/AngleWidget.js +40 -38
- package/Widgets/Widgets3D/DistanceWidget/behavior.js +40 -61
- package/Widgets/Widgets3D/DistanceWidget.js +38 -36
- package/Widgets/Widgets3D/EllipseWidget/behavior.js +14 -19
- package/Widgets/Widgets3D/EllipseWidget/state.js +4 -2
- package/Widgets/Widgets3D/EllipseWidget.js +37 -26
- package/Widgets/Widgets3D/ImageCroppingWidget/behavior.js +26 -56
- package/Widgets/Widgets3D/ImageCroppingWidget/helpers.js +14 -17
- package/Widgets/Widgets3D/ImageCroppingWidget/state.js +20 -16
- package/Widgets/Widgets3D/ImageCroppingWidget.js +80 -98
- package/Widgets/Widgets3D/ImplicitPlaneWidget.js +55 -77
- package/Widgets/Widgets3D/InteractiveOrientationWidget/behavior.js +17 -18
- package/Widgets/Widgets3D/InteractiveOrientationWidget/state.js +15 -7
- package/Widgets/Widgets3D/InteractiveOrientationWidget.js +30 -29
- package/Widgets/Widgets3D/LabelWidget/behavior.js +37 -62
- package/Widgets/Widgets3D/LabelWidget.js +31 -25
- package/Widgets/Widgets3D/LineWidget/Constants.js +8 -8
- package/Widgets/Widgets3D/LineWidget/behavior.js +77 -114
- package/Widgets/Widgets3D/LineWidget/helpers.js +13 -20
- package/Widgets/Widgets3D/LineWidget/state.js +2 -1
- package/Widgets/Widgets3D/LineWidget.js +39 -35
- package/Widgets/Widgets3D/PaintWidget/behavior.js +24 -59
- package/Widgets/Widgets3D/PaintWidget.js +39 -37
- package/Widgets/Widgets3D/PolyLineWidget/behavior.js +44 -68
- package/Widgets/Widgets3D/PolyLineWidget.js +36 -31
- package/Widgets/Widgets3D/RectangleWidget/behavior.js +6 -11
- package/Widgets/Widgets3D/RectangleWidget/state.js +4 -2
- package/Widgets/Widgets3D/RectangleWidget.js +37 -25
- package/Widgets/Widgets3D/ResliceCursorWidget/Constants.js +35 -21
- package/Widgets/Widgets3D/ResliceCursorWidget/behavior.js +133 -209
- package/Widgets/Widgets3D/ResliceCursorWidget/cprBehavior.js +26 -41
- package/Widgets/Widgets3D/ResliceCursorWidget/helpers.js +89 -116
- package/Widgets/Widgets3D/ResliceCursorWidget/state.js +33 -40
- package/Widgets/Widgets3D/ResliceCursorWidget.js +186 -227
- package/Widgets/Widgets3D/SeedWidget/behavior.js +82 -0
- package/Widgets/Widgets3D/SeedWidget/state.js +18 -0
- package/Widgets/Widgets3D/SeedWidget.d.ts +44 -0
- package/Widgets/Widgets3D/SeedWidget.js +43 -0
- package/Widgets/Widgets3D/ShapeWidget/Constants.js +19 -19
- package/Widgets/Widgets3D/ShapeWidget/behavior.js +150 -252
- package/Widgets/Widgets3D/ShapeWidget.js +24 -27
- package/Widgets/Widgets3D/SphereWidget/behavior.js +35 -69
- package/Widgets/Widgets3D/SphereWidget/state.js +9 -5
- package/Widgets/Widgets3D/SphereWidget.js +34 -44
- package/Widgets/Widgets3D/SplineWidget/behavior.js +85 -120
- package/Widgets/Widgets3D/SplineWidget.js +43 -39
- package/Widgets/Widgets3D.js +15 -15
- package/Widgets/index.js +4 -4
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Filters/General/PaintFilter/PaintFilter.worker.js +95 -207
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +0 -3
- package/favicon.js +5 -6
- package/index.d.ts +4 -2
- package/index.js +4 -3
- package/macros.js +4 -1931
- package/macros2.js +1684 -0
- package/package.json +6 -6
- package/vtk.js +18 -31
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
|
-
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
1
|
import * as d3 from 'd3-scale';
|
|
4
2
|
import { N as nearestPowerOfTwo } from '../../Common/Core/Math/index.js';
|
|
5
|
-
import macro from '../../
|
|
3
|
+
import { m as macro } from '../../macros2.js';
|
|
6
4
|
import vtkActor from './Actor.js';
|
|
7
5
|
import vtkDataArray from '../../Common/Core/DataArray.js';
|
|
8
6
|
import vtkScalarsToColors from '../../Common/Core/ScalarsToColors.js';
|
|
@@ -10,10 +8,11 @@ import vtkMapper from './Mapper.js';
|
|
|
10
8
|
import vtkPolyData from '../../Common/DataModel/PolyData.js';
|
|
11
9
|
import vtkTexture from './Texture.js';
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
const {
|
|
12
|
+
VectorMode
|
|
13
|
+
} = vtkScalarsToColors;
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
var VectorMode = vtkScalarsToColors.VectorMode; // ----------------------------------------------------------------------------
|
|
15
|
+
// ----------------------------------------------------------------------------
|
|
17
16
|
// vtkScalarBarActor
|
|
18
17
|
//
|
|
19
18
|
// Note log scales are currently not supported
|
|
@@ -33,10 +32,13 @@ function applyTextStyle(ctx, style) {
|
|
|
33
32
|
ctx.strokeStyle = style.strokeColor;
|
|
34
33
|
ctx.lineWidth = style.strokeSize;
|
|
35
34
|
ctx.fillStyle = style.fontColor;
|
|
36
|
-
ctx.font =
|
|
37
|
-
}
|
|
35
|
+
ctx.font = `${style.fontStyle} ${style.fontSize}px ${style.fontFamily}`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// ----------------------------------------------------------------------------
|
|
38
39
|
// Default autoLayout function
|
|
39
40
|
// ----------------------------------------------------------------------------
|
|
41
|
+
|
|
40
42
|
// compute good values to use based on window size etc a bunch of heuristics
|
|
41
43
|
// here with hand tuned constants These values worked for me but really this
|
|
42
44
|
// method could be redically changed. The basic gist is
|
|
@@ -53,41 +55,42 @@ function applyTextStyle(ctx, style) {
|
|
|
53
55
|
// instance that is provided as those values are the ones that will be used
|
|
54
56
|
// for rendering.
|
|
55
57
|
//
|
|
56
|
-
|
|
57
|
-
|
|
58
58
|
function defaultAutoLayout(publicAPI, model) {
|
|
59
|
-
return
|
|
59
|
+
return helper => {
|
|
60
60
|
// we don't do a linear scale, the proportions for
|
|
61
61
|
// a 700 pixel window differ from a 1400
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
const lastSize = helper.getLastSize();
|
|
63
|
+
const xAxisAdjust = (lastSize[0] / 700) ** 0.8;
|
|
64
|
+
const yAxisAdjust = (lastSize[1] / 700) ** 0.8;
|
|
65
|
+
const minAdjust = Math.min(xAxisAdjust, yAxisAdjust);
|
|
66
|
+
const axisTextStyle = helper.getAxisTextStyle();
|
|
67
|
+
const tickTextStyle = helper.getTickTextStyle();
|
|
68
68
|
Object.assign(axisTextStyle, model.axisTextStyle);
|
|
69
|
-
Object.assign(tickTextStyle, model.tickTextStyle);
|
|
69
|
+
Object.assign(tickTextStyle, model.tickTextStyle);
|
|
70
70
|
|
|
71
|
+
// compute a reasonable font size first
|
|
71
72
|
axisTextStyle.fontSize = Math.max(24 * minAdjust, 12);
|
|
72
|
-
|
|
73
73
|
if (helper.getLastAspectRatio() > 1.0) {
|
|
74
74
|
tickTextStyle.fontSize = Math.max(20 * minAdjust, 10);
|
|
75
75
|
} else {
|
|
76
76
|
tickTextStyle.fontSize = Math.max(16 * minAdjust, 10);
|
|
77
|
-
}
|
|
77
|
+
}
|
|
78
78
|
|
|
79
|
+
// rebuild the text atlas
|
|
80
|
+
const textSizes = helper.updateTextureAtlas();
|
|
79
81
|
|
|
80
|
-
|
|
82
|
+
// now compute the boxSize and pixel offsets, different algorithm
|
|
81
83
|
// for horizonal versus vertical
|
|
82
|
-
|
|
83
84
|
helper.setTopTitle(false);
|
|
84
|
-
|
|
85
|
+
const boxSize = helper.getBoxSizeByReference();
|
|
85
86
|
|
|
87
|
+
// if vertical
|
|
86
88
|
if (helper.getLastAspectRatio() > 1.0) {
|
|
87
|
-
helper.setTickLabelPixelOffset(0.3 * tickTextStyle.fontSize);
|
|
89
|
+
helper.setTickLabelPixelOffset(0.3 * tickTextStyle.fontSize);
|
|
90
|
+
|
|
91
|
+
// if the title will fit within the width of the bar then that looks
|
|
88
92
|
// nicer to put it at the top (helper.topTitle), otherwise rotate it
|
|
89
93
|
// and place it sideways
|
|
90
|
-
|
|
91
94
|
if (textSizes.titleWidth <= textSizes.tickWidth + helper.getTickLabelPixelOffset() + 0.8 * tickTextStyle.fontSize) {
|
|
92
95
|
helper.setTopTitle(true);
|
|
93
96
|
helper.setAxisTitlePixelOffset(0.2 * tickTextStyle.fontSize);
|
|
@@ -98,60 +101,59 @@ function defaultAutoLayout(publicAPI, model) {
|
|
|
98
101
|
boxSize[0] = 2.0 * (textSizes.titleHeight + helper.getAxisTitlePixelOffset() + textSizes.tickWidth + helper.getTickLabelPixelOffset() + 0.8 * tickTextStyle.fontSize) / lastSize[0];
|
|
99
102
|
helper.setBoxPosition([0.99 - boxSize[0], -0.92]);
|
|
100
103
|
}
|
|
101
|
-
|
|
102
104
|
boxSize[1] = Math.max(1.2, Math.min(1.84 / yAxisAdjust, 1.84));
|
|
103
105
|
} else {
|
|
104
106
|
// horizontal
|
|
105
107
|
helper.setAxisTitlePixelOffset(1.2 * tickTextStyle.fontSize);
|
|
106
108
|
helper.setTickLabelPixelOffset(0.1 * tickTextStyle.fontSize);
|
|
107
|
-
|
|
109
|
+
const titleHeight =
|
|
110
|
+
// total offset from top of bar (includes ticks)
|
|
108
111
|
2.0 * (0.8 * tickTextStyle.fontSize + textSizes.titleHeight + helper.getAxisTitlePixelOffset()) / lastSize[1];
|
|
109
|
-
|
|
112
|
+
const tickWidth = 2.0 * textSizes.tickWidth / lastSize[0];
|
|
110
113
|
boxSize[0] = Math.min(1.9, Math.max(1.4, 1.4 * tickWidth * (helper.getTicks().length + 3)));
|
|
111
114
|
boxSize[1] = titleHeight;
|
|
112
115
|
helper.setBoxPosition([-0.5 * boxSize[0], -0.97]);
|
|
113
|
-
}
|
|
114
|
-
|
|
116
|
+
}
|
|
115
117
|
|
|
118
|
+
// recomute bar segments based on positioning
|
|
116
119
|
helper.recomputeBarSegments(textSizes);
|
|
117
120
|
};
|
|
118
|
-
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// ----------------------------------------------------------------------------
|
|
119
124
|
// Default generateTicks function
|
|
120
125
|
// ----------------------------------------------------------------------------
|
|
126
|
+
|
|
121
127
|
// This function returns the default function used to generate vtkScalarBarActor ticks.
|
|
122
128
|
// The default function makes use of d3.scaleLinear() to generate 5 tick marks between
|
|
123
129
|
// the minimum and maximum values of the scalar bar. Customize this behavior by passing
|
|
124
130
|
// a function to vtkScalarBarActor.newInstance({ generateTicks: customGenerateTicks })
|
|
125
131
|
// or by calling scalarBarActor.setGenerateTicks(customGenerateTicks).
|
|
126
|
-
|
|
127
|
-
|
|
128
132
|
function defaultGenerateTicks(publicApi, model) {
|
|
129
|
-
return
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
133
|
+
return helper => {
|
|
134
|
+
const lastTickBounds = helper.getLastTickBounds();
|
|
135
|
+
const scale = d3.scaleLinear().domain([lastTickBounds[0], lastTickBounds[1]]);
|
|
136
|
+
const ticks = scale.ticks(5);
|
|
137
|
+
const format = scale.tickFormat(5);
|
|
134
138
|
helper.setTicks(ticks);
|
|
135
139
|
helper.setTickStrings(ticks.map(format));
|
|
136
140
|
};
|
|
137
|
-
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// many properties of this actor depend on the API specific view The main
|
|
138
144
|
// dependency being the resolution as that drives what font sizes to use.
|
|
139
145
|
// Bacause of this we need to do some of the calculations in a API specific
|
|
140
146
|
// subclass. But... we don't want a lot of duplicated code between WebGL and
|
|
141
147
|
// WebGPU for example so we have this helper class, that is designed to be
|
|
142
148
|
// fairly API independent so that API specific views can call this to do
|
|
143
149
|
// most of the work.
|
|
144
|
-
|
|
145
|
-
|
|
146
150
|
function vtkScalarBarActorHelper(publicAPI, model) {
|
|
147
151
|
// Set our className
|
|
148
152
|
model.classHierarchy.push('vtkScalarBarActorHelper');
|
|
149
|
-
|
|
150
|
-
publicAPI.setRenderable = function (renderable) {
|
|
153
|
+
publicAPI.setRenderable = renderable => {
|
|
151
154
|
if (model.renderable === renderable) {
|
|
152
155
|
return;
|
|
153
156
|
}
|
|
154
|
-
|
|
155
157
|
model.renderable = renderable;
|
|
156
158
|
model.barActor.setProperty(renderable.getProperty());
|
|
157
159
|
model.barActor.setParentProp(renderable);
|
|
@@ -160,12 +162,15 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
160
162
|
model.tmActor.setParentProp(renderable);
|
|
161
163
|
model.tmActor.setCoordinateSystemToDisplay();
|
|
162
164
|
model.generateTicks = renderable.generateTicks;
|
|
163
|
-
model.axisTextStyle =
|
|
164
|
-
|
|
165
|
+
model.axisTextStyle = {
|
|
166
|
+
...renderable.getAxisTextStyle()
|
|
167
|
+
};
|
|
168
|
+
model.tickTextStyle = {
|
|
169
|
+
...renderable.getTickTextStyle()
|
|
170
|
+
};
|
|
165
171
|
publicAPI.modified();
|
|
166
172
|
};
|
|
167
|
-
|
|
168
|
-
publicAPI.updateAPISpecificData = function (size, camera, renderWindow) {
|
|
173
|
+
publicAPI.updateAPISpecificData = (size, camera, renderWindow) => {
|
|
169
174
|
// has the size changed?
|
|
170
175
|
if (model.lastSize[0] !== size[0] || model.lastSize[1] !== size[1]) {
|
|
171
176
|
model.lastSize[0] = size[0];
|
|
@@ -173,68 +178,74 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
173
178
|
model.lastAspectRatio = size[0] / size[1];
|
|
174
179
|
model.forceUpdate = true;
|
|
175
180
|
}
|
|
176
|
-
|
|
177
|
-
var scalarsToColors = model.renderable.getScalarsToColors();
|
|
178
|
-
|
|
181
|
+
const scalarsToColors = model.renderable.getScalarsToColors();
|
|
179
182
|
if (!scalarsToColors || !model.renderable.getVisibility()) {
|
|
180
183
|
return;
|
|
181
|
-
}
|
|
182
|
-
|
|
184
|
+
}
|
|
183
185
|
|
|
184
|
-
|
|
186
|
+
// make sure the lut is assigned to our mapper
|
|
187
|
+
model.barMapper.setLookupTable(scalarsToColors);
|
|
185
188
|
|
|
189
|
+
// camera should be the same for all views
|
|
186
190
|
model.camera = camera;
|
|
187
|
-
model.renderWindow = renderWindow;
|
|
191
|
+
model.renderWindow = renderWindow;
|
|
188
192
|
|
|
193
|
+
// did something significant change? If so rebuild a lot of things
|
|
189
194
|
if (model.forceUpdate || Math.max(scalarsToColors.getMTime(), publicAPI.getMTime(), model.renderable.getMTime()) > model.lastRebuildTime.getMTime()) {
|
|
190
|
-
|
|
191
|
-
model.lastTickBounds =
|
|
195
|
+
const range = scalarsToColors.getMappingRange();
|
|
196
|
+
model.lastTickBounds = [...range];
|
|
192
197
|
|
|
198
|
+
// compute tick marks for axes (update for log scale)
|
|
193
199
|
model.renderable.getGenerateTicks()(publicAPI);
|
|
194
|
-
|
|
195
200
|
if (model.renderable.getAutomated()) {
|
|
196
201
|
model.renderable.getAutoLayout()(publicAPI);
|
|
197
202
|
} else {
|
|
198
203
|
// copy values from renderable
|
|
199
|
-
model.axisTextStyle =
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
model.
|
|
203
|
-
|
|
204
|
-
|
|
204
|
+
model.axisTextStyle = {
|
|
205
|
+
...model.renderable.getAxisTextStyle()
|
|
206
|
+
};
|
|
207
|
+
model.tickTextStyle = {
|
|
208
|
+
...model.renderable.getTickTextStyle()
|
|
209
|
+
};
|
|
210
|
+
model.barPosition = [...model.renderable.getBarPosition()];
|
|
211
|
+
model.barSize = [...model.renderable.getBarSize()];
|
|
212
|
+
model.boxPosition = [...model.renderable.getBoxPosition()];
|
|
213
|
+
model.boxSize = [...model.renderable.getBoxSize()];
|
|
205
214
|
model.axisTitlePixelOffset = model.renderable.getAxisTitlePixelOffset();
|
|
206
|
-
model.tickLabelPixelOffset = model.renderable.getTickLabelPixelOffset();
|
|
207
|
-
// visibility changes do to change the atlas
|
|
215
|
+
model.tickLabelPixelOffset = model.renderable.getTickLabelPixelOffset();
|
|
208
216
|
|
|
209
|
-
|
|
217
|
+
// rebuild the texture only when force or changed bounds, face
|
|
218
|
+
// visibility changes do to change the atlas
|
|
219
|
+
const textSizes = publicAPI.updateTextureAtlas();
|
|
210
220
|
|
|
221
|
+
// recompute bar segments based on positioning
|
|
211
222
|
publicAPI.recomputeBarSegments(textSizes);
|
|
212
223
|
}
|
|
213
|
-
|
|
214
224
|
publicAPI.updatePolyDataForLabels();
|
|
215
225
|
publicAPI.updatePolyDataForBarSegments();
|
|
216
226
|
model.lastRebuildTime.modified();
|
|
217
227
|
model.forceUpdate = false;
|
|
218
228
|
}
|
|
219
|
-
};
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
// create the texture map atlas that contains the rendering of
|
|
220
232
|
// all the text strings. Only needs to be called when the text strings
|
|
221
233
|
// have changed (labels and ticks)
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
publicAPI.updateTextureAtlas = function () {
|
|
234
|
+
publicAPI.updateTextureAtlas = () => {
|
|
225
235
|
// set the text properties
|
|
226
236
|
model.tmContext.textBaseline = 'bottom';
|
|
227
|
-
model.tmContext.textAlign = 'left';
|
|
228
|
-
|
|
229
|
-
var results = {}; // first the axislabel
|
|
237
|
+
model.tmContext.textAlign = 'left';
|
|
230
238
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
var totalHeight = 1; // start one pixel in so we have a border
|
|
239
|
+
// return some factors about the text atlas
|
|
240
|
+
const results = {};
|
|
234
241
|
|
|
242
|
+
// first the axislabel
|
|
243
|
+
const newTmAtlas = new Map();
|
|
244
|
+
let maxWidth = 0;
|
|
245
|
+
let totalHeight = 1; // start one pixel in so we have a border
|
|
235
246
|
applyTextStyle(model.tmContext, model.axisTextStyle);
|
|
236
|
-
|
|
237
|
-
|
|
247
|
+
let metrics = model.tmContext.measureText(model.renderable.getAxisLabel());
|
|
248
|
+
let entry = {
|
|
238
249
|
height: metrics.actualBoundingBoxAscent + 2,
|
|
239
250
|
startingHeight: totalHeight,
|
|
240
251
|
width: metrics.width + 2,
|
|
@@ -244,14 +255,14 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
244
255
|
totalHeight += entry.height;
|
|
245
256
|
maxWidth = entry.width;
|
|
246
257
|
results.titleWidth = entry.width;
|
|
247
|
-
results.titleHeight = entry.height;
|
|
258
|
+
results.titleHeight = entry.height;
|
|
248
259
|
|
|
260
|
+
// and the ticks, NaN Below and Above
|
|
249
261
|
results.tickWidth = 0;
|
|
250
262
|
results.tickHeight = 0;
|
|
251
263
|
applyTextStyle(model.tmContext, model.tickTextStyle);
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
for (var t = 0; t < strings.length; t++) {
|
|
264
|
+
const strings = [...publicAPI.getTickStrings(), 'NaN', 'Below', 'Above'];
|
|
265
|
+
for (let t = 0; t < strings.length; t++) {
|
|
255
266
|
if (!newTmAtlas.has(strings[t])) {
|
|
256
267
|
metrics = model.tmContext.measureText(strings[t]);
|
|
257
268
|
entry = {
|
|
@@ -262,85 +273,82 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
262
273
|
};
|
|
263
274
|
newTmAtlas.set(strings[t], entry);
|
|
264
275
|
totalHeight += entry.height;
|
|
265
|
-
|
|
266
276
|
if (maxWidth < entry.width) {
|
|
267
277
|
maxWidth = entry.width;
|
|
268
278
|
}
|
|
269
|
-
|
|
270
279
|
if (results.tickWidth < entry.width) {
|
|
271
280
|
results.tickWidth = entry.width;
|
|
272
281
|
}
|
|
273
|
-
|
|
274
282
|
if (results.tickHeight < entry.height) {
|
|
275
283
|
results.tickHeight = entry.height;
|
|
276
284
|
}
|
|
277
285
|
}
|
|
278
|
-
}
|
|
279
|
-
// in cases where PO2 is required
|
|
280
|
-
|
|
286
|
+
}
|
|
281
287
|
|
|
288
|
+
// always use power of two to avoid interpolation
|
|
289
|
+
// in cases where PO2 is required
|
|
282
290
|
maxWidth = nearestPowerOfTwo(maxWidth);
|
|
283
|
-
totalHeight = nearestPowerOfTwo(totalHeight);
|
|
291
|
+
totalHeight = nearestPowerOfTwo(totalHeight);
|
|
284
292
|
|
|
285
|
-
|
|
293
|
+
// set the tcoord values
|
|
294
|
+
newTmAtlas.forEach(value => {
|
|
286
295
|
value.tcoords = [0.0, (totalHeight - value.startingHeight - value.height) / totalHeight, value.width / maxWidth, (totalHeight - value.startingHeight - value.height) / totalHeight, value.width / maxWidth, (totalHeight - value.startingHeight) / totalHeight, 0.0, (totalHeight - value.startingHeight) / totalHeight];
|
|
287
|
-
});
|
|
296
|
+
});
|
|
288
297
|
|
|
298
|
+
// make sure we have power of two dimensions
|
|
289
299
|
model.tmCanvas.width = maxWidth;
|
|
290
300
|
model.tmCanvas.height = totalHeight;
|
|
291
301
|
model.tmContext.textBaseline = 'bottom';
|
|
292
302
|
model.tmContext.textAlign = 'left';
|
|
293
|
-
model.tmContext.clearRect(0, 0, maxWidth, totalHeight);
|
|
303
|
+
model.tmContext.clearRect(0, 0, maxWidth, totalHeight);
|
|
294
304
|
|
|
295
|
-
|
|
305
|
+
// draw the text onto the texture
|
|
306
|
+
newTmAtlas.forEach((value, key) => {
|
|
296
307
|
applyTextStyle(model.tmContext, value.textStyle);
|
|
297
308
|
model.tmContext.fillText(key, 1, value.startingHeight + value.height - 1);
|
|
298
309
|
});
|
|
299
|
-
model.tmTexture.setCanvas(model.tmCanvas);
|
|
300
|
-
|
|
310
|
+
model.tmTexture.setCanvas(model.tmCanvas);
|
|
311
|
+
// mark as modified since the canvas typically doesn't change
|
|
301
312
|
model.tmTexture.modified();
|
|
302
313
|
model._tmAtlas = newTmAtlas;
|
|
303
314
|
return results;
|
|
304
315
|
};
|
|
305
|
-
|
|
306
|
-
publicAPI.computeBarSize = function (textSizes) {
|
|
316
|
+
publicAPI.computeBarSize = textSizes => {
|
|
307
317
|
// compute orientation
|
|
308
318
|
model.vertical = model.boxSize[1] > model.boxSize[0];
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
// orientation
|
|
319
|
+
const tickHeight = 2.0 * textSizes.tickHeight / model.lastSize[1];
|
|
320
|
+
const segSize = [1, 1];
|
|
312
321
|
|
|
322
|
+
// horizontal and vertical have different astetics so adjust based on
|
|
323
|
+
// orientation
|
|
313
324
|
if (model.vertical) {
|
|
314
|
-
|
|
315
|
-
|
|
325
|
+
const tickWidth = 2.0 * (textSizes.tickWidth + model.tickLabelPixelOffset) / model.lastSize[0];
|
|
316
326
|
if (model.topTitle) {
|
|
317
|
-
|
|
327
|
+
const titleHeight = 2.0 * (textSizes.titleHeight + model.axisTitlePixelOffset) / model.lastSize[1];
|
|
318
328
|
model.barSize[0] = model.boxSize[0] - tickWidth;
|
|
319
329
|
model.barSize[1] = model.boxSize[1] - titleHeight;
|
|
320
330
|
} else {
|
|
321
331
|
// rotated title so width is based off height
|
|
322
|
-
|
|
332
|
+
const titleWidth = 2.0 * (textSizes.titleHeight + model.axisTitlePixelOffset) / model.lastSize[0];
|
|
323
333
|
model.barSize[0] = model.boxSize[0] - titleWidth - tickWidth;
|
|
324
334
|
model.barSize[1] = model.boxSize[1];
|
|
325
335
|
}
|
|
326
|
-
|
|
327
336
|
model.barPosition[0] = model.boxPosition[0] + tickWidth;
|
|
328
337
|
model.barPosition[1] = model.boxPosition[1];
|
|
329
338
|
segSize[1] = tickHeight;
|
|
330
339
|
} else {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
var _titleHeight = 2.0 * (textSizes.titleHeight + model.axisTitlePixelOffset) / model.lastSize[1];
|
|
334
|
-
|
|
340
|
+
const tickWidth = (2.0 * textSizes.tickWidth - 8) / model.lastSize[0];
|
|
341
|
+
const titleHeight = 2.0 * (textSizes.titleHeight + model.axisTitlePixelOffset) / model.lastSize[1];
|
|
335
342
|
model.barSize[0] = model.boxSize[0];
|
|
336
343
|
model.barPosition[0] = model.boxPosition[0];
|
|
337
|
-
model.barSize[1] = model.boxSize[1] -
|
|
344
|
+
model.barSize[1] = model.boxSize[1] - titleHeight;
|
|
338
345
|
model.barPosition[1] = model.boxPosition[1];
|
|
339
|
-
segSize[0] =
|
|
346
|
+
segSize[0] = tickWidth;
|
|
340
347
|
}
|
|
341
|
-
|
|
342
348
|
return segSize;
|
|
343
|
-
};
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
// based on all the settins compute a barSegments array
|
|
344
352
|
// containing the segments of the scalar bar
|
|
345
353
|
// each segment contains
|
|
346
354
|
// corners[4][2]
|
|
@@ -349,89 +357,81 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
349
357
|
//
|
|
350
358
|
// Note that the bar consumes the space in the box that remains after
|
|
351
359
|
// leaving room for the text labels
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
publicAPI.recomputeBarSegments = function (textSizes) {
|
|
355
|
-
var _model$renderable$get, _model$renderable$get2, _model$renderable$get3, _model$renderable$get4;
|
|
356
|
-
|
|
360
|
+
publicAPI.recomputeBarSegments = textSizes => {
|
|
357
361
|
// first compute the barSize/Position
|
|
358
|
-
|
|
362
|
+
const segSize = publicAPI.computeBarSize(textSizes);
|
|
359
363
|
model.barSegments = [];
|
|
360
|
-
|
|
361
|
-
// orientation
|
|
362
|
-
|
|
363
|
-
var barAxis = model.vertical ? 1 : 0;
|
|
364
|
-
var segSpace = model.vertical ? 0.01 : 0.02;
|
|
364
|
+
const startPos = [0.0, 0.0];
|
|
365
365
|
|
|
366
|
+
// horizontal and vertical have different astetics so adjust based on
|
|
367
|
+
// orientation
|
|
368
|
+
const barAxis = model.vertical ? 1 : 0;
|
|
369
|
+
const segSpace = model.vertical ? 0.01 : 0.02;
|
|
366
370
|
function pushSeg(title, scalars) {
|
|
367
371
|
model.barSegments.push({
|
|
368
|
-
corners: [[]
|
|
369
|
-
scalars
|
|
370
|
-
title
|
|
372
|
+
corners: [[...startPos], [startPos[0] + segSize[0], startPos[1]], [startPos[0] + segSize[0], startPos[1] + segSize[1]], [startPos[0], startPos[1] + segSize[1]]],
|
|
373
|
+
scalars,
|
|
374
|
+
title
|
|
371
375
|
});
|
|
372
376
|
startPos[barAxis] += segSize[barAxis] + segSpace;
|
|
373
377
|
}
|
|
374
|
-
|
|
375
378
|
if (model.renderable.getDrawNanAnnotation() && model.renderable.getScalarsToColors().getNanColor()) {
|
|
376
379
|
pushSeg('NaN', [NaN, NaN, NaN, NaN]);
|
|
377
380
|
}
|
|
378
|
-
|
|
379
|
-
if (model.renderable.getDrawBelowRangeSwatch() && (_model$renderable$get = (_model$renderable$get2 = model.renderable.getScalarsToColors()).getUseBelowRangeColor) !== null && _model$renderable$get !== void 0 && _model$renderable$get.call(_model$renderable$get2)) {
|
|
381
|
+
if (model.renderable.getDrawBelowRangeSwatch() && model.renderable.getScalarsToColors().getUseBelowRangeColor?.()) {
|
|
380
382
|
pushSeg('Below', [-0.1, -0.1, -0.1, -0.1]);
|
|
381
383
|
}
|
|
384
|
+
const haveAbove = model.renderable.getScalarsToColors().getUseAboveRangeColor?.();
|
|
382
385
|
|
|
383
|
-
|
|
384
|
-
|
|
386
|
+
// extra space around the ticks section
|
|
385
387
|
startPos[barAxis] += segSpace;
|
|
386
|
-
|
|
388
|
+
const oldSegSize = segSize[barAxis];
|
|
387
389
|
segSize[barAxis] = haveAbove ? 1.0 - 2.0 * segSpace - segSize[barAxis] - startPos[barAxis] : 1.0 - segSpace - startPos[barAxis];
|
|
388
390
|
pushSeg('ticks', model.vertical ? [0, 0, 0.995, 0.995] : [0, 0.995, 0.995, 0]);
|
|
389
|
-
|
|
390
391
|
if (model.renderable.getDrawAboveRangeSwatch() && haveAbove) {
|
|
391
392
|
segSize[barAxis] = oldSegSize;
|
|
392
393
|
startPos[barAxis] += segSpace;
|
|
393
394
|
pushSeg('Above', [1.1, 1.1, 1.1, 1.1]);
|
|
394
395
|
}
|
|
395
|
-
};
|
|
396
|
-
// modifies class constants tmp2v3
|
|
396
|
+
};
|
|
397
397
|
|
|
398
|
+
// called by updatePolyDataForLabels
|
|
399
|
+
// modifies class constants tmp2v3
|
|
400
|
+
const tmp2v3 = new Float64Array(3);
|
|
398
401
|
|
|
399
|
-
|
|
402
|
+
// anchor point = pos
|
|
400
403
|
// H alignment = left, middle, right
|
|
401
404
|
// V alignment = bottom, middle, top
|
|
402
405
|
// Text Orientation = horizontal, vertical
|
|
403
406
|
// orientation
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
var value = model._tmAtlas.get(text);
|
|
407
|
-
|
|
407
|
+
publicAPI.createPolyDataForOneLabel = (text, pos, alignment, orientation, offset, results) => {
|
|
408
|
+
const value = model._tmAtlas.get(text);
|
|
408
409
|
if (!value) {
|
|
409
410
|
return;
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
var cellIdx = results.cellIdx; // get achor point in pixels
|
|
411
|
+
}
|
|
412
|
+
// have to find the four corners of the texture polygon for this label
|
|
413
|
+
let ptIdx = results.ptIdx;
|
|
414
|
+
let cellIdx = results.cellIdx;
|
|
415
415
|
|
|
416
|
+
// get achor point in pixels
|
|
416
417
|
tmp2v3[0] = (0.5 * pos[0] + 0.5) * model.lastSize[0];
|
|
417
418
|
tmp2v3[1] = (0.5 * pos[1] + 0.5) * model.lastSize[1];
|
|
418
419
|
tmp2v3[2] = pos[2];
|
|
419
420
|
tmp2v3[0] += offset[0];
|
|
420
|
-
tmp2v3[1] += offset[1];
|
|
421
|
-
|
|
422
|
-
var textSize = [];
|
|
423
|
-
var textAxes = orientation === 'vertical' ? [1, 0] : [0, 1];
|
|
421
|
+
tmp2v3[1] += offset[1];
|
|
424
422
|
|
|
423
|
+
// get text size in display pixels
|
|
424
|
+
const textSize = [];
|
|
425
|
+
const textAxes = orientation === 'vertical' ? [1, 0] : [0, 1];
|
|
425
426
|
if (orientation === 'vertical') {
|
|
426
427
|
textSize[0] = value.width;
|
|
427
|
-
textSize[1] = -value.height;
|
|
428
|
-
|
|
428
|
+
textSize[1] = -value.height;
|
|
429
|
+
// update anchor point based on alignment
|
|
429
430
|
if (alignment[0] === 'middle') {
|
|
430
431
|
tmp2v3[1] -= value.width / 2.0;
|
|
431
432
|
} else if (alignment[0] === 'right') {
|
|
432
433
|
tmp2v3[1] -= value.width;
|
|
433
434
|
}
|
|
434
|
-
|
|
435
435
|
if (alignment[1] === 'middle') {
|
|
436
436
|
tmp2v3[0] += value.height / 2.0;
|
|
437
437
|
} else if (alignment[1] === 'top') {
|
|
@@ -439,21 +439,19 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
439
439
|
}
|
|
440
440
|
} else {
|
|
441
441
|
textSize[0] = value.width;
|
|
442
|
-
textSize[1] = value.height;
|
|
443
|
-
|
|
442
|
+
textSize[1] = value.height;
|
|
443
|
+
// update anchor point based on alignment
|
|
444
444
|
if (alignment[0] === 'middle') {
|
|
445
445
|
tmp2v3[0] -= value.width / 2.0;
|
|
446
446
|
} else if (alignment[0] === 'right') {
|
|
447
447
|
tmp2v3[0] -= value.width;
|
|
448
448
|
}
|
|
449
|
-
|
|
450
449
|
if (alignment[1] === 'middle') {
|
|
451
450
|
tmp2v3[1] -= value.height / 2.0;
|
|
452
451
|
} else if (alignment[1] === 'top') {
|
|
453
452
|
tmp2v3[1] -= value.height;
|
|
454
453
|
}
|
|
455
454
|
}
|
|
456
|
-
|
|
457
455
|
results.points[ptIdx * 3] = tmp2v3[0];
|
|
458
456
|
results.points[ptIdx * 3 + 1] = tmp2v3[1];
|
|
459
457
|
results.points[ptIdx * 3 + 2] = tmp2v3[2];
|
|
@@ -480,8 +478,9 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
480
478
|
results.points[ptIdx * 3 + 2] = tmp2v3[2];
|
|
481
479
|
results.tcoords[ptIdx * 2] = value.tcoords[6];
|
|
482
480
|
results.tcoords[ptIdx * 2 + 1] = value.tcoords[7];
|
|
483
|
-
ptIdx++;
|
|
481
|
+
ptIdx++;
|
|
484
482
|
|
|
483
|
+
// add the two triangles to represent the quad
|
|
485
484
|
results.polys[cellIdx * 4] = 3;
|
|
486
485
|
results.polys[cellIdx * 4 + 1] = ptIdx - 4;
|
|
487
486
|
results.polys[cellIdx * 4 + 2] = ptIdx - 3;
|
|
@@ -493,53 +492,52 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
493
492
|
results.polys[cellIdx * 4 + 3] = ptIdx - 1;
|
|
494
493
|
results.ptIdx += 4;
|
|
495
494
|
results.cellIdx += 2;
|
|
496
|
-
};
|
|
495
|
+
};
|
|
496
|
+
|
|
497
|
+
// update the polydata associated with drawing the text labels
|
|
497
498
|
// specifically the quads used for each label and their associated tcoords
|
|
498
499
|
// etc. This changes every time the camera viewpoint changes
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
var tmpv3 = new Float64Array(3);
|
|
502
|
-
|
|
503
|
-
publicAPI.updatePolyDataForLabels = function () {
|
|
500
|
+
const tmpv3 = new Float64Array(3);
|
|
501
|
+
publicAPI.updatePolyDataForLabels = () => {
|
|
504
502
|
// update the polydata
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
503
|
+
const numLabels = publicAPI.getTickStrings().length + model.barSegments.length;
|
|
504
|
+
const numPts = numLabels * 4;
|
|
505
|
+
const numTris = numLabels * 2;
|
|
506
|
+
const points = new Float64Array(numPts * 3);
|
|
507
|
+
const polys = new Uint16Array(numTris * 4);
|
|
508
|
+
const tcoords = new Float32Array(numPts * 2);
|
|
509
|
+
const results = {
|
|
512
510
|
ptIdx: 0,
|
|
513
511
|
cellIdx: 0,
|
|
514
|
-
polys
|
|
515
|
-
points
|
|
516
|
-
tcoords
|
|
517
|
-
};
|
|
512
|
+
polys,
|
|
513
|
+
points,
|
|
514
|
+
tcoords
|
|
515
|
+
};
|
|
518
516
|
|
|
519
|
-
|
|
520
|
-
|
|
517
|
+
// compute the direction vector
|
|
518
|
+
const offsetAxis = model.vertical ? 0 : 1;
|
|
519
|
+
const spacedAxis = model.vertical ? 1 : 0;
|
|
521
520
|
tmpv3[2] = -0.99; // near plane
|
|
522
|
-
// draw the title
|
|
523
|
-
|
|
524
|
-
var alignment = model.vertical ? ['right', 'middle'] : ['middle', 'bottom'];
|
|
525
|
-
var dir = [0, 1];
|
|
526
|
-
var tickOffsets = [0, 0];
|
|
527
521
|
|
|
522
|
+
// draw the title
|
|
523
|
+
const alignment = model.vertical ? ['right', 'middle'] : ['middle', 'bottom'];
|
|
524
|
+
let dir = [0, 1];
|
|
525
|
+
const tickOffsets = [0, 0];
|
|
528
526
|
if (model.vertical) {
|
|
529
527
|
tickOffsets[0] = -model.tickLabelPixelOffset;
|
|
530
|
-
|
|
531
528
|
if (model.topTitle) {
|
|
532
529
|
tmpv3[0] = model.boxPosition[0] + 0.5 * model.boxSize[0];
|
|
533
|
-
tmpv3[1] = model.barPosition[1] + model.barSize[1];
|
|
530
|
+
tmpv3[1] = model.barPosition[1] + model.barSize[1];
|
|
534
531
|
|
|
532
|
+
// write the axis label
|
|
535
533
|
publicAPI.createPolyDataForOneLabel(model.renderable.getAxisLabel(), tmpv3, ['middle', 'bottom'], 'horizontal', [0, model.axisTitlePixelOffset], results);
|
|
536
534
|
} else {
|
|
537
535
|
tmpv3[0] = model.barPosition[0] + model.barSize[0];
|
|
538
|
-
tmpv3[1] = model.barPosition[1] + 0.5 * model.barSize[1];
|
|
536
|
+
tmpv3[1] = model.barPosition[1] + 0.5 * model.barSize[1];
|
|
539
537
|
|
|
538
|
+
// write the axis label
|
|
540
539
|
publicAPI.createPolyDataForOneLabel(model.renderable.getAxisLabel(), tmpv3, ['middle', 'top'], 'vertical', [model.axisTitlePixelOffset, 0], results);
|
|
541
540
|
}
|
|
542
|
-
|
|
543
541
|
dir = [-1, 0];
|
|
544
542
|
} else {
|
|
545
543
|
tickOffsets[1] = model.tickLabelPixelOffset;
|
|
@@ -547,15 +545,13 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
547
545
|
tmpv3[1] = model.barPosition[1] + model.barSize[1];
|
|
548
546
|
publicAPI.createPolyDataForOneLabel(model.renderable.getAxisLabel(), tmpv3, ['middle', 'bottom'], 'horizontal', [0, model.axisTitlePixelOffset], results);
|
|
549
547
|
}
|
|
550
|
-
|
|
551
548
|
tmpv3[offsetAxis] = model.barPosition[offsetAxis] + (0.5 * dir[offsetAxis] + 0.5) * model.barSize[offsetAxis];
|
|
552
|
-
tmpv3[spacedAxis] = model.barPosition[spacedAxis] + model.barSize[spacedAxis] * 0.5;
|
|
553
|
-
|
|
554
|
-
var tickSeg = null;
|
|
555
|
-
|
|
556
|
-
for (var i = 0; i < model.barSegments.length; i++) {
|
|
557
|
-
var seg = model.barSegments[i];
|
|
549
|
+
tmpv3[spacedAxis] = model.barPosition[spacedAxis] + model.barSize[spacedAxis] * 0.5;
|
|
558
550
|
|
|
551
|
+
// draw bar segment labels
|
|
552
|
+
let tickSeg = null;
|
|
553
|
+
for (let i = 0; i < model.barSegments.length; i++) {
|
|
554
|
+
const seg = model.barSegments[i];
|
|
559
555
|
if (seg.title === 'ticks') {
|
|
560
556
|
// handle ticks below
|
|
561
557
|
tickSeg = seg;
|
|
@@ -563,21 +559,19 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
563
559
|
tmpv3[spacedAxis] = model.barPosition[spacedAxis] + 0.5 * model.barSize[spacedAxis] * (seg.corners[2][spacedAxis] + seg.corners[0][spacedAxis]);
|
|
564
560
|
publicAPI.createPolyDataForOneLabel(seg.title, tmpv3, alignment, 'horizontal', tickOffsets, results);
|
|
565
561
|
}
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
var tickSegmentStart = model.barPosition[spacedAxis] + model.barSize[spacedAxis] * tickSeg.corners[0][spacedAxis];
|
|
570
|
-
var tickSegmentSize = model.barSize[spacedAxis] * (tickSeg.corners[2][spacedAxis] - tickSeg.corners[0][spacedAxis]);
|
|
571
|
-
var ticks = publicAPI.getTicks();
|
|
572
|
-
var tickStrings = publicAPI.getTickStrings();
|
|
562
|
+
}
|
|
573
563
|
|
|
574
|
-
|
|
575
|
-
|
|
564
|
+
// write the tick labels
|
|
565
|
+
const tickSegmentStart = model.barPosition[spacedAxis] + model.barSize[spacedAxis] * tickSeg.corners[0][spacedAxis];
|
|
566
|
+
const tickSegmentSize = model.barSize[spacedAxis] * (tickSeg.corners[2][spacedAxis] - tickSeg.corners[0][spacedAxis]);
|
|
567
|
+
const ticks = publicAPI.getTicks();
|
|
568
|
+
const tickStrings = publicAPI.getTickStrings();
|
|
569
|
+
for (let t = 0; t < ticks.length; t++) {
|
|
570
|
+
const tickPos = (ticks[t] - model.lastTickBounds[0]) / (model.lastTickBounds[1] - model.lastTickBounds[0]);
|
|
576
571
|
tmpv3[spacedAxis] = tickSegmentStart + tickSegmentSize * tickPos;
|
|
577
572
|
publicAPI.createPolyDataForOneLabel(tickStrings[t], tmpv3, alignment, 'horizontal', tickOffsets, results);
|
|
578
573
|
}
|
|
579
|
-
|
|
580
|
-
var tcoordDA = vtkDataArray.newInstance({
|
|
574
|
+
const tcoordDA = vtkDataArray.newInstance({
|
|
581
575
|
numberOfComponents: 2,
|
|
582
576
|
values: tcoords,
|
|
583
577
|
name: 'TextureCoordinates'
|
|
@@ -589,58 +583,46 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
589
583
|
model.tmPolyData.getPolys().modified();
|
|
590
584
|
model.tmPolyData.modified();
|
|
591
585
|
};
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
var scalarsToColors = model.renderable.getScalarsToColors();
|
|
597
|
-
var numberOfExtraColors = 0;
|
|
598
|
-
|
|
586
|
+
publicAPI.updatePolyDataForBarSegments = () => {
|
|
587
|
+
const scalarsToColors = model.renderable.getScalarsToColors();
|
|
588
|
+
let numberOfExtraColors = 0;
|
|
599
589
|
if (model.renderable.getDrawNanAnnotation() && scalarsToColors.getNanColor()) {
|
|
600
590
|
numberOfExtraColors += 1;
|
|
601
591
|
}
|
|
602
|
-
|
|
603
|
-
if (model.renderable.getDrawBelowRangeSwatch() && (_scalarsToColors$getU = scalarsToColors.getUseBelowRangeColor) !== null && _scalarsToColors$getU !== void 0 && _scalarsToColors$getU.call(scalarsToColors)) {
|
|
592
|
+
if (model.renderable.getDrawBelowRangeSwatch() && scalarsToColors.getUseBelowRangeColor?.()) {
|
|
604
593
|
numberOfExtraColors += 1;
|
|
605
594
|
}
|
|
606
|
-
|
|
607
|
-
if (model.renderable.getDrawAboveRangeSwatch() && (_scalarsToColors$getU2 = scalarsToColors.getUseAboveRangeColor) !== null && _scalarsToColors$getU2 !== void 0 && _scalarsToColors$getU2.call(scalarsToColors)) {
|
|
595
|
+
if (model.renderable.getDrawAboveRangeSwatch() && scalarsToColors.getUseAboveRangeColor?.()) {
|
|
608
596
|
numberOfExtraColors += 1;
|
|
609
597
|
}
|
|
598
|
+
const numPts = 4 * (1 + numberOfExtraColors);
|
|
599
|
+
const numQuads = numPts;
|
|
610
600
|
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
var numComps = 1;
|
|
615
|
-
|
|
601
|
+
// handle vector component mode
|
|
602
|
+
let numComps = 1;
|
|
616
603
|
if (scalarsToColors.getVectorMode() === VectorMode.COMPONENT) {
|
|
617
604
|
numComps = scalarsToColors.getVectorComponent() + 1;
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
var points = new Float64Array(numPts * 3);
|
|
622
|
-
var cells = new Uint16Array(numQuads * 5);
|
|
623
|
-
var scalars = new Float32Array(numPts * numComps);
|
|
624
|
-
var ptIdx = 0;
|
|
625
|
-
var cellIdx = 0;
|
|
626
|
-
|
|
627
|
-
for (var i = 0; i < model.barSegments.length; i++) {
|
|
628
|
-
var seg = model.barSegments[i];
|
|
605
|
+
}
|
|
629
606
|
|
|
630
|
-
|
|
607
|
+
// create the colored bars
|
|
608
|
+
const points = new Float64Array(numPts * 3);
|
|
609
|
+
const cells = new Uint16Array(numQuads * 5);
|
|
610
|
+
const scalars = new Float32Array(numPts * numComps);
|
|
611
|
+
let ptIdx = 0;
|
|
612
|
+
let cellIdx = 0;
|
|
613
|
+
for (let i = 0; i < model.barSegments.length; i++) {
|
|
614
|
+
const seg = model.barSegments[i];
|
|
615
|
+
for (let e = 0; e < 4; e++) {
|
|
631
616
|
tmpv3[0] = model.barPosition[0] + seg.corners[e][0] * model.barSize[0];
|
|
632
617
|
tmpv3[1] = model.barPosition[1] + seg.corners[e][1] * model.barSize[1];
|
|
633
618
|
points[ptIdx * 3] = (0.5 * tmpv3[0] + 0.5) * model.lastSize[0];
|
|
634
619
|
points[ptIdx * 3 + 1] = (0.5 * tmpv3[1] + 0.5) * model.lastSize[1];
|
|
635
620
|
points[ptIdx * 3 + 2] = tmpv3[2];
|
|
636
|
-
|
|
637
|
-
for (var nc = 0; nc < numComps; nc++) {
|
|
621
|
+
for (let nc = 0; nc < numComps; nc++) {
|
|
638
622
|
scalars[ptIdx * numComps + nc] = model.lastTickBounds[0] + seg.scalars[e] * (model.lastTickBounds[1] - model.lastTickBounds[0]);
|
|
639
623
|
}
|
|
640
|
-
|
|
641
624
|
ptIdx++;
|
|
642
625
|
}
|
|
643
|
-
|
|
644
626
|
cells[cellIdx * 5] = 4;
|
|
645
627
|
cells[cellIdx * 5 + 1] = ptIdx - 4;
|
|
646
628
|
cells[cellIdx * 5 + 2] = ptIdx - 3;
|
|
@@ -648,8 +630,7 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
648
630
|
cells[cellIdx * 5 + 4] = ptIdx - 1;
|
|
649
631
|
cellIdx++;
|
|
650
632
|
}
|
|
651
|
-
|
|
652
|
-
var scalarsDA = vtkDataArray.newInstance({
|
|
633
|
+
const scalarsDA = vtkDataArray.newInstance({
|
|
653
634
|
numberOfComponents: numComps,
|
|
654
635
|
values: scalars,
|
|
655
636
|
name: 'Scalars'
|
|
@@ -662,13 +643,13 @@ function vtkScalarBarActorHelper(publicAPI, model) {
|
|
|
662
643
|
model.polyData.modified();
|
|
663
644
|
};
|
|
664
645
|
}
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
|
646
|
+
const newScalarBarActorHelper = macro.newInstance(function (publicAPI, model) {
|
|
647
|
+
let initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
|
668
648
|
renderable: null
|
|
669
649
|
};
|
|
670
|
-
Object.assign(model, {}, initialValues);
|
|
650
|
+
Object.assign(model, {}, initialValues);
|
|
671
651
|
|
|
652
|
+
// Inheritance
|
|
672
653
|
macro.obj(publicAPI, model);
|
|
673
654
|
macro.setGet(publicAPI, model, ['axisTitlePixelOffset', 'tickLabelPixelOffset', 'renderable', 'topTitle', 'ticks', 'tickStrings']);
|
|
674
655
|
macro.get(publicAPI, model, ['lastSize', 'lastAspectRatio', 'lastTickBounds', 'axisTextStyle', 'tickTextStyle', 'barActor', 'tmActor']);
|
|
@@ -689,8 +670,9 @@ var newScalarBarActorHelper = macro.newInstance(function (publicAPI, model) {
|
|
|
689
670
|
model.polyData = vtkPolyData.newInstance();
|
|
690
671
|
model.barMapper.setInputData(model.polyData);
|
|
691
672
|
model.barActor = vtkActor.newInstance();
|
|
692
|
-
model.barActor.setMapper(model.barMapper);
|
|
673
|
+
model.barActor.setMapper(model.barMapper);
|
|
693
674
|
|
|
675
|
+
// for texture atlas
|
|
694
676
|
model.tmPolyData = vtkPolyData.newInstance();
|
|
695
677
|
model.tmMapper = vtkMapper.newInstance();
|
|
696
678
|
model.tmMapper.setInputData(model.tmPolyData);
|
|
@@ -706,45 +688,50 @@ var newScalarBarActorHelper = macro.newInstance(function (publicAPI, model) {
|
|
|
706
688
|
model.barPosition = [0, 0];
|
|
707
689
|
model.barSize = [0, 0];
|
|
708
690
|
model.boxPosition = [0.88, -0.92];
|
|
709
|
-
model.boxSize = [0.1, 1.1];
|
|
691
|
+
model.boxSize = [0.1, 1.1];
|
|
710
692
|
|
|
693
|
+
// internal variables
|
|
711
694
|
model.lastTickBounds = [];
|
|
712
695
|
vtkScalarBarActorHelper(publicAPI, model);
|
|
713
|
-
}, 'vtkScalarBarActorHelper');
|
|
696
|
+
}, 'vtkScalarBarActorHelper');
|
|
697
|
+
|
|
698
|
+
//
|
|
714
699
|
// Now we define the public class that the application sets view independent
|
|
715
700
|
// properties on. This class is fairly small as it mainly just holds
|
|
716
701
|
// properties setter and getters leaving all calculations to the helper
|
|
717
702
|
// class.
|
|
718
703
|
//
|
|
719
|
-
|
|
720
704
|
function vtkScalarBarActor(publicAPI, model) {
|
|
721
705
|
// Set our className
|
|
722
706
|
model.classHierarchy.push('vtkScalarBarActor');
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
707
|
+
publicAPI.setTickTextStyle = tickStyle => {
|
|
708
|
+
model.tickTextStyle = {
|
|
709
|
+
...model.tickTextStyle,
|
|
710
|
+
...tickStyle
|
|
711
|
+
};
|
|
726
712
|
publicAPI.modified();
|
|
727
713
|
};
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
714
|
+
publicAPI.setAxisTextStyle = axisStyle => {
|
|
715
|
+
model.axisTextStyle = {
|
|
716
|
+
...model.axisTextStyle,
|
|
717
|
+
...axisStyle
|
|
718
|
+
};
|
|
731
719
|
publicAPI.modified();
|
|
732
720
|
};
|
|
733
|
-
|
|
734
|
-
publicAPI.resetAutoLayoutToDefault = function () {
|
|
721
|
+
publicAPI.resetAutoLayoutToDefault = () => {
|
|
735
722
|
publicAPI.setAutoLayout(defaultAutoLayout(publicAPI, model));
|
|
736
723
|
};
|
|
737
|
-
|
|
738
|
-
publicAPI.resetGenerateTicksToDefault = function () {
|
|
724
|
+
publicAPI.resetGenerateTicksToDefault = () => {
|
|
739
725
|
publicAPI.setGenerateTicks(defaultGenerateTicks());
|
|
740
726
|
};
|
|
741
|
-
}
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
// ----------------------------------------------------------------------------
|
|
742
730
|
// Object factory
|
|
743
731
|
// ----------------------------------------------------------------------------
|
|
744
732
|
|
|
745
|
-
|
|
746
733
|
function defaultValues(initialValues) {
|
|
747
|
-
return
|
|
734
|
+
return {
|
|
748
735
|
automated: true,
|
|
749
736
|
autoLayout: null,
|
|
750
737
|
axisLabel: 'Scalar Value',
|
|
@@ -770,34 +757,42 @@ function defaultValues(initialValues) {
|
|
|
770
757
|
generateTicks: null,
|
|
771
758
|
drawNanAnnotation: true,
|
|
772
759
|
drawBelowRangeSwatch: true,
|
|
773
|
-
drawAboveRangeSwatch: true
|
|
774
|
-
|
|
775
|
-
}
|
|
760
|
+
drawAboveRangeSwatch: true,
|
|
761
|
+
...initialValues
|
|
762
|
+
};
|
|
763
|
+
}
|
|
776
764
|
|
|
765
|
+
// ----------------------------------------------------------------------------
|
|
777
766
|
|
|
778
767
|
function extend(publicAPI, model) {
|
|
779
|
-
|
|
768
|
+
let initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
780
769
|
Object.assign(model, defaultValues(initialValues));
|
|
781
770
|
if (!model.autoLayout) model.autoLayout = defaultAutoLayout(publicAPI, model);
|
|
782
|
-
if (!model.generateTicks) model.generateTicks = defaultGenerateTicks();
|
|
771
|
+
if (!model.generateTicks) model.generateTicks = defaultGenerateTicks();
|
|
783
772
|
|
|
773
|
+
// Inheritance
|
|
784
774
|
vtkActor.extend(publicAPI, model, initialValues);
|
|
785
775
|
publicAPI.getProperty().setDiffuse(0.0);
|
|
786
776
|
publicAPI.getProperty().setAmbient(1.0);
|
|
787
777
|
macro.setGet(publicAPI, model, ['automated', 'autoLayout', 'axisTitlePixelOffset', 'axisLabel', 'scalarsToColors', 'tickLabelPixelOffset', 'generateTicks', 'drawNanAnnotation', 'drawBelowRangeSwatch', 'drawAboveRangeSwatch']);
|
|
788
778
|
macro.get(publicAPI, model, ['axisTextStyle', 'tickTextStyle']);
|
|
789
779
|
macro.getArray(publicAPI, model, ['barPosition', 'barSize', 'boxPosition', 'boxSize']);
|
|
790
|
-
macro.setArray(publicAPI, model, ['barPosition', 'barSize', 'boxPosition', 'boxSize'], 2);
|
|
780
|
+
macro.setArray(publicAPI, model, ['barPosition', 'barSize', 'boxPosition', 'boxSize'], 2);
|
|
791
781
|
|
|
782
|
+
// Object methods
|
|
792
783
|
vtkScalarBarActor(publicAPI, model);
|
|
793
|
-
}
|
|
784
|
+
}
|
|
794
785
|
|
|
795
|
-
|
|
786
|
+
// ----------------------------------------------------------------------------
|
|
787
|
+
|
|
788
|
+
const newInstance = macro.newInstance(extend, 'vtkScalarBarActor');
|
|
789
|
+
|
|
790
|
+
// ----------------------------------------------------------------------------
|
|
796
791
|
|
|
797
792
|
var vtkScalarBarActor$1 = {
|
|
798
|
-
newInstance
|
|
799
|
-
extend
|
|
800
|
-
newScalarBarActorHelper
|
|
793
|
+
newInstance,
|
|
794
|
+
extend,
|
|
795
|
+
newScalarBarActorHelper
|
|
801
796
|
};
|
|
802
797
|
|
|
803
798
|
export { vtkScalarBarActor$1 as default, extend, newInstance };
|