@kitware/vtk.js 28.10.2 → 28.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Common/Core/Base64.js +53 -82
- package/Common/Core/CellArray.js +52 -60
- package/Common/Core/ClassHierarchy.js +8 -36
- package/Common/Core/DataArray/Constants.js +6 -6
- package/Common/Core/DataArray.js +185 -270
- package/Common/Core/Endian.js +14 -17
- package/Common/Core/HalfFloat.js +17 -34
- package/Common/Core/ImageHelper.js +17 -25
- package/Common/Core/LookupTable.js +131 -144
- package/Common/Core/Math/Constants.js +8 -8
- package/Common/Core/Math/index.js +754 -942
- package/Common/Core/Math.js +2 -4
- package/Common/Core/MatrixBuilder.js +99 -151
- package/Common/Core/Points.js +43 -43
- package/Common/Core/PriorityQueue.js +30 -28
- package/Common/Core/ProgressHandler.js +31 -32
- package/Common/Core/ScalarsToColors/Constants.js +4 -4
- package/Common/Core/ScalarsToColors.js +196 -253
- package/Common/Core/StringArray.js +48 -73
- package/Common/Core/URLExtract.js +10 -29
- package/Common/Core/VariantArray.js +48 -73
- package/Common/Core.js +11 -11
- package/Common/DataModel/AbstractPointLocator.js +19 -17
- package/Common/DataModel/BoundingBox.js +322 -490
- package/Common/DataModel/Box.js +46 -63
- package/Common/DataModel/CardinalSpline1D.js +92 -102
- package/Common/DataModel/Cell.js +41 -61
- package/Common/DataModel/CellLinks.js +91 -127
- package/Common/DataModel/CellTypes/Constants.js +7 -6
- package/Common/DataModel/CellTypes.js +55 -74
- package/Common/DataModel/Collection.js +45 -61
- package/Common/DataModel/Cone.js +28 -20
- package/Common/DataModel/Cylinder.js +41 -35
- package/Common/DataModel/DataSet/Constants.js +11 -5
- package/Common/DataModel/DataSet.js +37 -25
- package/Common/DataModel/DataSetAttributes/Constants.js +18 -18
- package/Common/DataModel/DataSetAttributes/FieldData.js +103 -194
- package/Common/DataModel/DataSetAttributes.js +96 -138
- package/Common/DataModel/EdgeLocator.js +45 -70
- package/Common/DataModel/ITKHelper.js +67 -137
- package/Common/DataModel/ImageData.js +115 -172
- package/Common/DataModel/ImplicitBoolean/Constants.js +2 -2
- package/Common/DataModel/ImplicitBoolean.js +66 -96
- package/Common/DataModel/IncrementalOctreeNode.js +201 -231
- package/Common/DataModel/IncrementalOctreePointLocator.js +160 -198
- package/Common/DataModel/KochanekSpline1D.js +78 -81
- package/Common/DataModel/Line/Constants.js +2 -2
- package/Common/DataModel/Line.js +82 -105
- package/Common/DataModel/Locator.js +17 -10
- package/Common/DataModel/Molecule.js +26 -17
- package/Common/DataModel/PiecewiseFunction.js +218 -239
- package/Common/DataModel/Plane.js +90 -113
- package/Common/DataModel/PointSet.js +30 -26
- package/Common/DataModel/PolyData/Constants.js +2 -2
- package/Common/DataModel/PolyData.js +95 -120
- package/Common/DataModel/PolyLine.js +44 -61
- package/Common/DataModel/Polygon/Constants.js +4 -4
- package/Common/DataModel/Polygon.js +128 -169
- package/Common/DataModel/Quad/Constants.js +2 -2
- package/Common/DataModel/Quad.js +61 -100
- package/Common/DataModel/SelectionNode/Constants.js +5 -4
- package/Common/DataModel/SelectionNode.js +25 -21
- package/Common/DataModel/Sphere.js +40 -35
- package/Common/DataModel/Spline1D/Constants.js +3 -2
- package/Common/DataModel/Spline1D.js +34 -18
- package/Common/DataModel/Spline3D/Constants.js +2 -2
- package/Common/DataModel/Spline3D.js +46 -41
- package/Common/DataModel/StructuredData/Constants.js +2 -2
- package/Common/DataModel/StructuredData.js +9 -20
- package/Common/DataModel/Triangle.js +207 -250
- package/Common/DataModel.js +19 -19
- package/Common/System/MobileVR.js +56 -61
- package/Common/System/TimerLog.js +1 -1
- package/Common/System.js +2 -2
- package/Common/Transform/LandmarkTransform/Constants.js +2 -2
- package/Common/Transform/LandmarkTransform.js +133 -117
- package/Common/Transform/Transform.js +42 -57
- package/Common/Transform.js +2 -2
- package/Common/index.js +4 -4
- package/Filters/Core/Cutter.js +134 -146
- package/Filters/Core/PolyDataNormals.js +44 -50
- package/Filters/Core.js +2 -2
- package/Filters/Cornerstone/ImageDataToCornerstoneImage.js +45 -33
- package/Filters/Cornerstone.js +1 -1
- package/Filters/General/AppendPolyData.js +84 -100
- package/Filters/General/Calculator.js +95 -163
- package/Filters/General/ClipClosedSurface/Constants.js +2 -2
- package/Filters/General/ClipClosedSurface.js +341 -416
- package/Filters/General/ClosedPolyLineToSurfaceFilter.js +141 -156
- package/Filters/General/ContourTriangulator/Constants.js +2 -2
- package/Filters/General/ContourTriangulator/helper.js +684 -812
- package/Filters/General/ContourTriangulator.js +92 -89
- package/Filters/General/ImageCropFilter.js +77 -78
- package/Filters/General/ImageDataOutlineFilter.js +42 -36
- package/Filters/General/ImageMarchingCubes/caseTable.js +9 -521
- package/Filters/General/ImageMarchingCubes.js +99 -112
- package/Filters/General/ImageMarchingSquares/caseTable.js +9 -41
- package/Filters/General/ImageMarchingSquares.js +93 -118
- package/Filters/General/ImageOutlineFilter.js +53 -54
- package/Filters/General/ImageSliceFilter.js +39 -30
- package/Filters/General/ImageStreamline.js +107 -124
- package/Filters/General/LineFilter.js +26 -15
- package/Filters/General/MoleculeToRepresentation.js +136 -149
- package/Filters/General/OBBTree/OBBNode.js +36 -34
- package/Filters/General/OBBTree/helper.js +19 -24
- package/Filters/General/OBBTree.js +396 -488
- package/Filters/General/OutlineFilter.js +52 -34
- package/Filters/General/PaintFilter/PaintFilter.worker.js +93 -130
- package/Filters/General/PaintFilter.js +150 -162
- package/Filters/General/ScalarToRGBA.js +38 -33
- package/Filters/General/TriangleFilter.js +65 -62
- package/Filters/General/TubeFilter/Constants.js +4 -4
- package/Filters/General/TubeFilter.js +376 -496
- package/Filters/General/WarpScalar.js +58 -60
- package/Filters/General/WindowedSincPolyDataFilter.js +258 -330
- package/Filters/General.js +21 -21
- package/Filters/Sources/Arrow2DSource/Constants.js +2 -2
- package/Filters/Sources/Arrow2DSource.js +56 -56
- package/Filters/Sources/ArrowSource.js +39 -29
- package/Filters/Sources/CircleSource.js +43 -43
- package/Filters/Sources/ConcentricCylinderSource.js +151 -174
- package/Filters/Sources/ConeSource.js +51 -42
- package/Filters/Sources/CubeSource.js +75 -96
- package/Filters/Sources/Cursor3D.js +94 -109
- package/Filters/Sources/CylinderSource.js +90 -90
- package/Filters/Sources/ImageGridSource.js +43 -43
- package/Filters/Sources/LineSource.js +49 -39
- package/Filters/Sources/PlaneSource.js +97 -104
- package/Filters/Sources/PointSource.js +46 -37
- package/Filters/Sources/RTAnalyticSource.js +50 -48
- package/Filters/Sources/SLICSource.js +63 -73
- package/Filters/Sources/SphereSource.js +88 -78
- package/Filters/Sources/ViewFinderSource.js +26 -23
- package/Filters/Sources.js +14 -14
- package/Filters/Texture/TextureMapToPlane.js +95 -97
- package/Filters/Texture/TextureMapToSphere.js +46 -54
- package/Filters/Texture.js +2 -2
- package/Filters/index.js +5 -5
- package/IO/Core/BinaryHelper.js +12 -18
- package/IO/Core/DataAccessHelper/HtmlDataAccessHelper.js +43 -59
- package/IO/Core/DataAccessHelper/HttpDataAccessHelper.js +76 -113
- package/IO/Core/DataAccessHelper/JSZipDataAccessHelper.js +62 -112
- package/IO/Core/DataAccessHelper/LiteHttpDataAccessHelper.js +76 -113
- package/IO/Core/DataAccessHelper.js +6 -6
- package/IO/Core/HttpDataSetReader.js +136 -139
- package/IO/Core/HttpDataSetSeriesReader.js +64 -75
- package/IO/Core/HttpSceneLoader.js +130 -179
- package/IO/Core/ImageStream/DefaultProtocol.js +29 -43
- package/IO/Core/ImageStream/ViewStream.js +100 -103
- package/IO/Core/ImageStream.js +62 -54
- package/IO/Core/ResourceLoader.js +10 -9
- package/IO/Core/Serializer/ArraySerializer.js +40 -40
- package/IO/Core/Serializer/FieldDataSerializer.js +18 -28
- package/IO/Core/Serializer/ImageDataSerializer.js +22 -23
- package/IO/Core/Serializer/PolyDataSerializer.js +17 -21
- package/IO/Core/Serializer.js +6 -13
- package/IO/Core/WSLinkClient.js +90 -76
- package/IO/Core/ZipMultiDataSetReader.js +46 -44
- package/IO/Core/ZipMultiDataSetWriter.js +43 -34
- package/IO/Core.js +7 -7
- package/IO/Geometry/DracoReader.js +118 -121
- package/IO/Geometry/PLYReader.js +163 -223
- package/IO/Geometry/PLYWriter/Constants.js +5 -5
- package/IO/Geometry/PLYWriter.js +139 -154
- package/IO/Geometry/STLReader.js +123 -146
- package/IO/Geometry/STLWriter/Constants.js +2 -2
- package/IO/Geometry/STLWriter.js +83 -82
- package/IO/Geometry.js +5 -5
- package/IO/Legacy/LegacyAsciiParser.js +78 -139
- package/IO/Legacy/PolyDataReader.js +48 -36
- package/IO/Legacy.js +2 -2
- package/IO/Misc/ElevationReader.js +67 -60
- package/IO/Misc/HttpDataSetLODsLoader.js +41 -38
- package/IO/Misc/ITKImageReader.js +58 -45
- package/IO/Misc/ITKPolyDataReader.js +50 -38
- package/IO/Misc/JSONNucleoReader.js +49 -42
- package/IO/Misc/JSONReader.js +38 -33
- package/IO/Misc/MTLReader.js +74 -119
- package/IO/Misc/OBJReader.js +153 -206
- package/IO/Misc/PDBReader.js +70 -68
- package/IO/Misc/SkyboxReader.js +77 -82
- package/IO/Misc.js +9 -9
- package/IO/XML/XMLImageDataReader.js +36 -38
- package/IO/XML/XMLImageDataWriter.js +28 -21
- package/IO/XML/XMLPolyDataReader.js +49 -46
- package/IO/XML/XMLPolyDataWriter.js +43 -42
- package/IO/XML/XMLReader.js +262 -304
- package/IO/XML/XMLWriter/Constants.js +3 -3
- package/IO/XML/XMLWriter.js +70 -84
- package/IO/XML.js +6 -6
- package/IO/index.js +5 -5
- package/Imaging/Core/AbstractImageInterpolator/Constants.js +4 -4
- package/Imaging/Core/AbstractImageInterpolator/InterpolationInfo.js +30 -27
- package/Imaging/Core/AbstractImageInterpolator.js +74 -87
- package/Imaging/Core/ImageInterpolator.js +201 -252
- package/Imaging/Core/ImagePointDataIterator.js +96 -122
- package/Imaging/Core/ImageReslice/Constants.js +2 -2
- package/Imaging/Core/ImageReslice.js +327 -464
- package/Imaging/Core.js +4 -4
- package/Imaging/Hybrid/SampleFunction.js +58 -51
- package/Imaging/Hybrid.js +1 -1
- package/Imaging/index.js +2 -2
- package/Interaction/Animations/TimeStepBasedAnimationHandler.js +39 -54
- package/Interaction/Manipulators/CompositeCameraManipulator.js +22 -13
- package/Interaction/Manipulators/CompositeGestureManipulator.js +31 -43
- package/Interaction/Manipulators/CompositeKeyboardManipulator.js +15 -11
- package/Interaction/Manipulators/CompositeMouseManipulator.js +27 -33
- package/Interaction/Manipulators/CompositeVRManipulator.js +22 -15
- package/Interaction/Manipulators/GestureCameraManipulator.js +54 -36
- package/Interaction/Manipulators/KeyboardCameraManipulator.js +95 -97
- package/Interaction/Manipulators/MouseBoxSelectorManipulator.js +70 -89
- package/Interaction/Manipulators/MouseCameraAxisRotateManipulator.js +67 -54
- package/Interaction/Manipulators/MouseCameraSliceManipulator.js +40 -38
- package/Interaction/Manipulators/MouseCameraTrackballFirstPersonManipulator.js +83 -68
- package/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator.js +32 -28
- package/Interaction/Manipulators/MouseCameraTrackballPanManipulator.js +47 -40
- package/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js +55 -43
- package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +56 -46
- package/Interaction/Manipulators/MouseCameraTrackballZoomManipulator.js +41 -46
- package/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator.js +29 -27
- package/Interaction/Manipulators/MouseCameraUnicamManipulator.js +123 -146
- package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +144 -166
- package/Interaction/Manipulators/MouseRangeManipulator.js +127 -132
- package/Interaction/Manipulators/VRButtonPanManipulator.js +33 -23
- package/Interaction/Manipulators.js +21 -21
- package/Interaction/Misc/DeviceOrientationToCamera.js +25 -47
- package/Interaction/Misc.js +1 -1
- package/Interaction/Style/InteractorStyleImage.js +101 -121
- package/Interaction/Style/InteractorStyleMPRSlice.js +111 -128
- package/Interaction/Style/InteractorStyleManipulator/Presets.js +9 -17
- package/Interaction/Style/InteractorStyleManipulator.js +254 -329
- package/Interaction/Style/InteractorStyleRemoteMouse.js +195 -180
- package/Interaction/Style/InteractorStyleTrackballCamera.js +154 -157
- package/Interaction/Style/InteractorStyleUnicam.js +30 -38
- package/Interaction/Style.js +5 -5
- package/Interaction/UI/CornerAnnotation/CornerAnnotation.module.css.js +1 -1
- package/Interaction/UI/CornerAnnotation.js +65 -48
- package/Interaction/UI/FPSMonitor.js +104 -105
- package/Interaction/UI/Icons.js +1 -1
- package/Interaction/UI/Slider/Constants.js +2 -2
- package/Interaction/UI/Slider.js +78 -95
- package/Interaction/UI/VolumeController.js +104 -97
- package/Interaction/UI.js +5 -5
- package/Interaction/Widgets/OrientationMarkerWidget/Constants.js +2 -2
- package/Interaction/Widgets/OrientationMarkerWidget.js +90 -135
- package/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +0 -3
- package/Interaction/Widgets/PiecewiseGaussianWidget.js +381 -498
- package/Interaction/Widgets.js +2 -2
- package/Interaction/index.js +5 -5
- package/Proxy/Animation/AbstractAnimationProxy.js +22 -15
- package/Proxy/Animation/AnimationProxyManager.js +43 -51
- package/Proxy/Animation/TimeStepBasedAnimationHandlerProxy.js +26 -19
- package/Proxy/Core/AbstractRepresentationProxy.js +97 -151
- package/Proxy/Core/LookupTableProxy/Constants.js +4 -4
- package/Proxy/Core/LookupTableProxy.js +49 -52
- package/Proxy/Core/PiecewiseFunctionProxy/Constants.js +4 -4
- package/Proxy/Core/PiecewiseFunctionProxy.js +63 -72
- package/Proxy/Core/ProxyManager/core.js +83 -106
- package/Proxy/Core/ProxyManager/properties.js +53 -76
- package/Proxy/Core/ProxyManager/state.js +100 -110
- package/Proxy/Core/ProxyManager/view.js +45 -55
- package/Proxy/Core/ProxyManager.js +16 -8
- package/Proxy/Core/SourceProxy.js +41 -38
- package/Proxy/Core/View2DProxy.js +143 -199
- package/Proxy/Core/ViewProxy.js +223 -269
- package/Proxy/Core.js +7 -7
- package/Proxy/Representations/GeometryRepresentationProxy.js +34 -20
- package/Proxy/Representations/GlyphRepresentationProxy.js +42 -41
- package/Proxy/Representations/MoleculeRepresentationProxy.js +32 -22
- package/Proxy/Representations/ResliceRepresentationProxy.js +48 -32
- package/Proxy/Representations/SkyboxRepresentationProxy.js +30 -29
- package/Proxy/Representations/SliceRepresentationProxy.js +93 -112
- package/Proxy/Representations/SlicedGeometryRepresentationProxy.js +46 -42
- package/Proxy/Representations/VolumeRepresentationProxy.js +108 -133
- package/Proxy/Representations.js +7 -7
- package/Proxy/index.js +2 -2
- package/Rendering/Core/AbstractImageMapper/helper.js +44 -49
- package/Rendering/Core/AbstractImageMapper.js +18 -19
- package/Rendering/Core/AbstractMapper.js +39 -55
- package/Rendering/Core/AbstractMapper3D.js +26 -31
- package/Rendering/Core/AbstractPicker.js +25 -21
- package/Rendering/Core/Actor.js +71 -93
- package/Rendering/Core/Actor2D.js +64 -78
- package/Rendering/Core/AnnotatedCubeActor/Presets.js +5 -11
- package/Rendering/Core/AnnotatedCubeActor.js +94 -79
- package/Rendering/Core/AxesActor.js +65 -87
- package/Rendering/Core/Camera.js +246 -271
- package/Rendering/Core/CellPicker.js +125 -148
- package/Rendering/Core/ColorTransferFunction/ColorMaps.js +20 -21
- package/Rendering/Core/ColorTransferFunction/ColorMapsLite.js +20 -21
- package/Rendering/Core/ColorTransferFunction/Constants.js +4 -4
- package/Rendering/Core/ColorTransferFunction.js +460 -546
- package/Rendering/Core/Coordinate/Constants.js +2 -2
- package/Rendering/Core/Coordinate.js +119 -198
- package/Rendering/Core/CubeAxesActor.js +294 -320
- package/Rendering/Core/Follower.js +46 -45
- package/Rendering/Core/Glyph3DMapper/Constants.js +4 -4
- package/Rendering/Core/Glyph3DMapper.js +96 -148
- package/Rendering/Core/HardwareSelector.js +36 -69
- package/Rendering/Core/ImageArrayMapper.js +87 -126
- package/Rendering/Core/ImageCPRMapper.js +134 -209
- package/Rendering/Core/ImageMapper/Constants.js +2 -2
- package/Rendering/Core/ImageMapper.js +85 -144
- package/Rendering/Core/ImageProperty/Constants.js +2 -2
- package/Rendering/Core/ImageProperty.js +66 -81
- package/Rendering/Core/ImageResliceMapper/Constants.js +2 -2
- package/Rendering/Core/ImageResliceMapper.js +36 -29
- package/Rendering/Core/ImageSlice.js +85 -127
- package/Rendering/Core/InteractorObserver.js +82 -73
- package/Rendering/Core/InteractorStyle/Constants.js +2 -2
- package/Rendering/Core/InteractorStyle.js +56 -58
- package/Rendering/Core/Light.js +43 -49
- package/Rendering/Core/Mapper/CoincidentTopologyHelper.js +37 -48
- package/Rendering/Core/Mapper/Constants.js +6 -6
- package/Rendering/Core/Mapper/Static.js +15 -12
- package/Rendering/Core/Mapper.js +194 -259
- package/Rendering/Core/Mapper2D.js +61 -100
- package/Rendering/Core/Picker.js +124 -143
- package/Rendering/Core/PixelSpaceCallbackMapper.js +40 -37
- package/Rendering/Core/PointPicker.js +68 -79
- package/Rendering/Core/Prop/Constants.js +2 -2
- package/Rendering/Core/Prop.js +58 -106
- package/Rendering/Core/Prop3D.js +54 -83
- package/Rendering/Core/Property/Constants.js +6 -6
- package/Rendering/Core/Property.js +45 -74
- package/Rendering/Core/Property2D/Constants.js +2 -2
- package/Rendering/Core/Property2D.js +33 -42
- package/Rendering/Core/RenderWindow.js +70 -82
- package/Rendering/Core/RenderWindowInteractor/Constants.js +7 -7
- package/Rendering/Core/RenderWindowInteractor.js +324 -439
- package/Rendering/Core/Renderer.js +192 -256
- package/Rendering/Core/ScalarBarActor.js +267 -272
- package/Rendering/Core/Skybox.js +26 -24
- package/Rendering/Core/SphereMapper.js +22 -12
- package/Rendering/Core/StickMapper.js +22 -12
- package/Rendering/Core/SurfaceLICInterface/Constants.js +6 -6
- package/Rendering/Core/SurfaceLICInterface.js +13 -9
- package/Rendering/Core/SurfaceLICMapper.js +23 -15
- package/Rendering/Core/Texture.js +99 -141
- package/Rendering/Core/Viewport.js +60 -88
- package/Rendering/Core/Volume.js +55 -77
- package/Rendering/Core/VolumeMapper/Constants.js +4 -4
- package/Rendering/Core/VolumeMapper.js +59 -91
- package/Rendering/Core/VolumeProperty/Constants.js +4 -4
- package/Rendering/Core/VolumeProperty.js +78 -115
- package/Rendering/Core.js +47 -49
- package/Rendering/Misc/CanvasView.js +62 -61
- package/Rendering/Misc/FullScreenRenderWindow.js +60 -62
- package/Rendering/Misc/GenericRenderWindow.js +48 -37
- package/Rendering/Misc/RemoteView.js +86 -80
- package/Rendering/Misc/RenderWindowWithControlBar.js +54 -48
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager/CameraSynchronizer.js +43 -51
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager.js +52 -82
- package/Rendering/Misc/SynchronizableRenderWindow/ObjectManager.js +258 -308
- package/Rendering/Misc/SynchronizableRenderWindow.js +133 -163
- package/Rendering/Misc/TextureLODsDownloader.js +72 -74
- package/Rendering/Misc.js +7 -7
- package/Rendering/OpenGL/Actor.js +57 -68
- package/Rendering/OpenGL/Actor2D.js +56 -56
- package/Rendering/OpenGL/BufferObject/Constants.js +2 -2
- package/Rendering/OpenGL/BufferObject.js +50 -65
- package/Rendering/OpenGL/Camera.js +35 -29
- package/Rendering/OpenGL/CellArrayBufferObject.js +119 -149
- package/Rendering/OpenGL/Convolution2DPass.js +87 -81
- package/Rendering/OpenGL/CubeAxesActor.js +28 -21
- package/Rendering/OpenGL/ForwardPass.js +53 -64
- package/Rendering/OpenGL/Framebuffer.js +61 -101
- package/Rendering/OpenGL/Glyph3DMapper.js +165 -196
- package/Rendering/OpenGL/HardwareSelector/Constants.js +2 -2
- package/Rendering/OpenGL/HardwareSelector.js +272 -397
- package/Rendering/OpenGL/Helper.js +58 -73
- package/Rendering/OpenGL/ImageCPRMapper.js +339 -421
- package/Rendering/OpenGL/ImageMapper.js +268 -361
- package/Rendering/OpenGL/ImageResliceMapper.js +306 -438
- package/Rendering/OpenGL/ImageSlice.js +48 -54
- package/Rendering/OpenGL/OrderIndependentTranslucentPass.js +102 -84
- package/Rendering/OpenGL/PixelSpaceCallbackMapper.js +43 -42
- package/Rendering/OpenGL/PolyDataMapper.js +358 -492
- package/Rendering/OpenGL/PolyDataMapper2D.js +153 -205
- package/Rendering/OpenGL/RadialDistortionPass.js +86 -89
- package/Rendering/OpenGL/RenderWindow/Constants.js +2 -2
- package/Rendering/OpenGL/RenderWindow/ContextProxy.js +20 -29
- package/Rendering/OpenGL/RenderWindow.js +356 -510
- package/Rendering/OpenGL/Renderer.js +77 -89
- package/Rendering/OpenGL/ReplacementShaderMapper.js +28 -46
- package/Rendering/OpenGL/ScalarBarActor.js +28 -21
- package/Rendering/OpenGL/Shader.js +37 -31
- package/Rendering/OpenGL/ShaderCache.js +67 -74
- package/Rendering/OpenGL/ShaderProgram.js +136 -248
- package/Rendering/OpenGL/Skybox.js +99 -60
- package/Rendering/OpenGL/SphereMapper.js +94 -108
- package/Rendering/OpenGL/StickMapper.js +110 -114
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D/pingpong.js +91 -157
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D.js +142 -151
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICInterface.js +142 -216
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICMapper.js +79 -100
- package/Rendering/OpenGL/SurfaceLIC.js +2 -2
- package/Rendering/OpenGL/Texture/Constants.js +4 -4
- package/Rendering/OpenGL/Texture.js +443 -608
- package/Rendering/OpenGL/TextureUnitManager.js +47 -43
- package/Rendering/OpenGL/VertexArrayObject.js +92 -131
- package/Rendering/OpenGL/ViewNodeFactory.js +25 -13
- package/Rendering/OpenGL/Volume.js +38 -34
- package/Rendering/OpenGL/VolumeMapper.js +437 -547
- package/Rendering/OpenGL.js +28 -28
- package/Rendering/SceneGraph/RenderPass.js +34 -31
- package/Rendering/SceneGraph/RenderWindowViewNode.js +68 -94
- package/Rendering/SceneGraph/ViewNode.js +82 -111
- package/Rendering/SceneGraph/ViewNodeFactory.js +31 -26
- package/Rendering/SceneGraph.js +4 -4
- package/Rendering/WebGPU/Actor.js +49 -49
- package/Rendering/WebGPU/Actor2D.js +45 -44
- package/Rendering/WebGPU/BindGroup.js +43 -50
- package/Rendering/WebGPU/Buffer.js +41 -50
- package/Rendering/WebGPU/BufferManager/Constants.js +4 -4
- package/Rendering/WebGPU/BufferManager.js +111 -141
- package/Rendering/WebGPU/Camera.js +65 -67
- package/Rendering/WebGPU/CellArrayMapper.js +621 -388
- package/Rendering/WebGPU/CubeAxesActor.js +28 -19
- package/Rendering/WebGPU/Device.js +78 -133
- package/Rendering/WebGPU/ForwardPass.js +75 -72
- package/Rendering/WebGPU/FullScreenQuad.js +25 -18
- package/Rendering/WebGPU/Glyph3DMapper.js +62 -74
- package/Rendering/WebGPU/HardwareSelectionPass.js +45 -38
- package/Rendering/WebGPU/HardwareSelector.js +200 -276
- package/Rendering/WebGPU/ImageMapper.js +180 -171
- package/Rendering/WebGPU/ImageSlice.js +45 -44
- package/Rendering/WebGPU/IndexBuffer.js +166 -200
- package/Rendering/WebGPU/OpaquePass.js +37 -36
- package/Rendering/WebGPU/OrderIndependentTranslucentPass.js +72 -45
- package/Rendering/WebGPU/Pipeline.js +37 -51
- package/Rendering/WebGPU/PixelSpaceCallbackMapper.js +27 -19
- package/Rendering/WebGPU/PolyDataMapper.js +50 -53
- package/Rendering/WebGPU/PolyDataMapper2D.js +39 -39
- package/Rendering/WebGPU/RenderEncoder.js +68 -88
- package/Rendering/WebGPU/RenderWindow.js +262 -376
- package/Rendering/WebGPU/Renderer.js +224 -208
- package/Rendering/WebGPU/Sampler.js +27 -21
- package/Rendering/WebGPU/ScalarBarActor.js +28 -19
- package/Rendering/WebGPU/ShaderCache.js +43 -41
- package/Rendering/WebGPU/ShaderDescription.js +52 -59
- package/Rendering/WebGPU/ShaderModule.js +26 -17
- package/Rendering/WebGPU/SimpleMapper.js +185 -121
- package/Rendering/WebGPU/SphereMapper.js +200 -130
- package/Rendering/WebGPU/StickMapper.js +289 -152
- package/Rendering/WebGPU/StorageBuffer.js +100 -115
- package/Rendering/WebGPU/Texture.js +79 -99
- package/Rendering/WebGPU/TextureManager.js +52 -54
- package/Rendering/WebGPU/TextureView.js +40 -43
- package/Rendering/WebGPU/Types.js +53 -70
- package/Rendering/WebGPU/UniformBuffer.js +158 -184
- package/Rendering/WebGPU/VertexInput.js +64 -90
- package/Rendering/WebGPU/ViewNodeFactory.js +25 -13
- package/Rendering/WebGPU/Volume.js +52 -51
- package/Rendering/WebGPU/VolumePass.js +218 -239
- package/Rendering/WebGPU/VolumePassFSQ.js +625 -306
- package/Rendering/WebGPU.js +1 -1
- package/Rendering/index.js +5 -5
- package/Widgets/Core/AbstractWidget/Constants.js +2 -2
- package/Widgets/Core/AbstractWidget.js +49 -58
- package/Widgets/Core/AbstractWidgetFactory.js +101 -122
- package/Widgets/Core/StateBuilder/boundsMixin.js +23 -28
- package/Widgets/Core/StateBuilder/color3Mixin.js +10 -7
- package/Widgets/Core/StateBuilder/colorMixin.js +10 -6
- package/Widgets/Core/StateBuilder/cornerMixin.js +16 -15
- package/Widgets/Core/StateBuilder/directionMixin.js +20 -18
- package/Widgets/Core/StateBuilder/manipulatorMixin.js +26 -18
- package/Widgets/Core/StateBuilder/nameMixin.js +10 -6
- package/Widgets/Core/StateBuilder/orientationMixin.js +19 -16
- package/Widgets/Core/StateBuilder/originMixin.js +25 -32
- package/Widgets/Core/StateBuilder/scale1Mixin.js +10 -6
- package/Widgets/Core/StateBuilder/scale3Mixin.js +10 -6
- package/Widgets/Core/StateBuilder/shapeMixin.js +12 -6
- package/Widgets/Core/StateBuilder/textMixin.js +10 -6
- package/Widgets/Core/StateBuilder/visibleMixin.js +10 -6
- package/Widgets/Core/StateBuilder.js +120 -149
- package/Widgets/Core/WidgetManager/Constants.js +7 -7
- package/Widgets/Core/WidgetManager.js +249 -421
- package/Widgets/Core/WidgetState.js +48 -57
- package/Widgets/Core.js +5 -5
- package/Widgets/Manipulators/AbstractManipulator.js +20 -14
- package/Widgets/Manipulators/CPRManipulator.js +55 -71
- package/Widgets/Manipulators/LineManipulator.js +31 -28
- package/Widgets/Manipulators/PickerManipulator.d.ts +48 -0
- package/Widgets/Manipulators/PickerManipulator.js +65 -0
- package/Widgets/Manipulators/PlaneManipulator.js +26 -23
- package/Widgets/Manipulators/TrackballManipulator.js +39 -35
- package/Widgets/Manipulators.js +4 -2
- package/Widgets/Representations/ArrowHandleRepresentation.js +148 -162
- package/Widgets/Representations/CircleContextRepresentation.js +44 -38
- package/Widgets/Representations/ContextRepresentation.js +17 -14
- package/Widgets/Representations/ConvexFaceContextRepresentation.js +50 -47
- package/Widgets/Representations/CroppingOutlineRepresentation.js +38 -27
- package/Widgets/Representations/CubeHandleRepresentation.js +21 -18
- package/Widgets/Representations/GlyphRepresentation.js +107 -152
- package/Widgets/Representations/HandleRepresentation.js +17 -14
- package/Widgets/Representations/ImplicitPlaneRepresentation.js +97 -91
- package/Widgets/Representations/LineHandleRepresentation.js +44 -41
- package/Widgets/Representations/OutlineContextRepresentation.js +42 -36
- package/Widgets/Representations/PolyLineRepresentation.js +60 -75
- package/Widgets/Representations/RectangleContextRepresentation.js +42 -37
- package/Widgets/Representations/SphereContextRepresentation.js +19 -27
- package/Widgets/Representations/SphereHandleRepresentation.js +31 -27
- package/Widgets/Representations/SplineContextRepresentation.js +46 -70
- package/Widgets/Representations/WidgetRepresentation/Constants.js +2 -2
- package/Widgets/Representations/WidgetRepresentation.js +99 -134
- package/Widgets/Representations.js +13 -13
- package/Widgets/Widgets3D/AngleWidget/behavior.js +41 -63
- package/Widgets/Widgets3D/AngleWidget.js +40 -38
- package/Widgets/Widgets3D/DistanceWidget/behavior.js +40 -61
- package/Widgets/Widgets3D/DistanceWidget.js +38 -36
- package/Widgets/Widgets3D/EllipseWidget/behavior.js +14 -19
- package/Widgets/Widgets3D/EllipseWidget/state.js +4 -2
- package/Widgets/Widgets3D/EllipseWidget.js +37 -26
- package/Widgets/Widgets3D/ImageCroppingWidget/behavior.js +26 -56
- package/Widgets/Widgets3D/ImageCroppingWidget/helpers.js +14 -17
- package/Widgets/Widgets3D/ImageCroppingWidget/state.js +20 -16
- package/Widgets/Widgets3D/ImageCroppingWidget.js +80 -98
- package/Widgets/Widgets3D/ImplicitPlaneWidget.js +55 -77
- package/Widgets/Widgets3D/InteractiveOrientationWidget/behavior.js +17 -18
- package/Widgets/Widgets3D/InteractiveOrientationWidget/state.js +15 -7
- package/Widgets/Widgets3D/InteractiveOrientationWidget.js +30 -29
- package/Widgets/Widgets3D/LabelWidget/behavior.js +37 -62
- package/Widgets/Widgets3D/LabelWidget.js +31 -25
- package/Widgets/Widgets3D/LineWidget/Constants.js +8 -8
- package/Widgets/Widgets3D/LineWidget/behavior.js +77 -114
- package/Widgets/Widgets3D/LineWidget/helpers.js +13 -20
- package/Widgets/Widgets3D/LineWidget/state.js +2 -1
- package/Widgets/Widgets3D/LineWidget.js +39 -35
- package/Widgets/Widgets3D/PaintWidget/behavior.js +24 -59
- package/Widgets/Widgets3D/PaintWidget.js +39 -37
- package/Widgets/Widgets3D/PolyLineWidget/behavior.js +44 -68
- package/Widgets/Widgets3D/PolyLineWidget.js +36 -31
- package/Widgets/Widgets3D/RectangleWidget/behavior.js +6 -11
- package/Widgets/Widgets3D/RectangleWidget/state.js +4 -2
- package/Widgets/Widgets3D/RectangleWidget.js +37 -25
- package/Widgets/Widgets3D/ResliceCursorWidget/Constants.js +35 -21
- package/Widgets/Widgets3D/ResliceCursorWidget/behavior.js +133 -209
- package/Widgets/Widgets3D/ResliceCursorWidget/cprBehavior.js +26 -41
- package/Widgets/Widgets3D/ResliceCursorWidget/helpers.js +89 -116
- package/Widgets/Widgets3D/ResliceCursorWidget/state.js +33 -40
- package/Widgets/Widgets3D/ResliceCursorWidget.js +186 -227
- package/Widgets/Widgets3D/SeedWidget/behavior.js +82 -0
- package/Widgets/Widgets3D/SeedWidget/state.js +18 -0
- package/Widgets/Widgets3D/SeedWidget.d.ts +44 -0
- package/Widgets/Widgets3D/SeedWidget.js +43 -0
- package/Widgets/Widgets3D/ShapeWidget/Constants.js +19 -19
- package/Widgets/Widgets3D/ShapeWidget/behavior.js +150 -252
- package/Widgets/Widgets3D/ShapeWidget.js +24 -27
- package/Widgets/Widgets3D/SphereWidget/behavior.js +35 -69
- package/Widgets/Widgets3D/SphereWidget/state.js +9 -5
- package/Widgets/Widgets3D/SphereWidget.js +34 -44
- package/Widgets/Widgets3D/SplineWidget/behavior.js +85 -120
- package/Widgets/Widgets3D/SplineWidget.js +43 -39
- package/Widgets/Widgets3D.js +15 -15
- package/Widgets/index.js +4 -4
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Filters/General/PaintFilter/PaintFilter.worker.js +95 -207
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +0 -3
- package/favicon.js +5 -6
- package/index.d.ts +4 -2
- package/index.js +4 -3
- package/macros.js +4 -1931
- package/macros2.js +1684 -0
- package/package.json +6 -6
- package/vtk.js +18 -31
package/IO/XML/XMLReader.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
|
-
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
3
1
|
import { create } from 'xmlbuilder2';
|
|
4
2
|
import { decompressSync } from 'fflate';
|
|
5
3
|
import DataAccessHelper from '../Core/DataAccessHelper.js';
|
|
6
4
|
import Base64 from '../../Common/Core/Base64.js';
|
|
7
|
-
import macro from '../../
|
|
5
|
+
import { m as macro } from '../../macros2.js';
|
|
8
6
|
import vtkDataArray from '../../Common/Core/DataArray.js';
|
|
9
7
|
import vtkStringArray from '../../Common/Core/StringArray.js';
|
|
10
8
|
import BinaryHelper from '../Core/BinaryHelper.js';
|
|
@@ -13,31 +11,31 @@ import '../Core/DataAccessHelper/LiteHttpDataAccessHelper.js';
|
|
|
13
11
|
// import 'vtk.js/Sources/IO/Core/DataAccessHelper/HttpDataAccessHelper'; // HTTP + zip
|
|
14
12
|
// import 'vtk.js/Sources/IO/Core/DataAccessHelper/HtmlDataAccessHelper'; // html + base64 + zip
|
|
15
13
|
// import 'vtk.js/Sources/IO/Core/DataAccessHelper/JSZipDataAccessHelper'; // zip
|
|
14
|
+
|
|
16
15
|
// ----------------------------------------------------------------------------
|
|
17
16
|
// Global methods
|
|
18
17
|
// ----------------------------------------------------------------------------
|
|
19
18
|
|
|
20
19
|
function findAllTags(node, tagName) {
|
|
21
|
-
return
|
|
20
|
+
return [...node.getElementsByTagName(tagName)];
|
|
22
21
|
}
|
|
23
22
|
function findFirstTag(node, tagName) {
|
|
24
23
|
return findAllTags(node, tagName)[0];
|
|
25
24
|
}
|
|
26
|
-
|
|
27
25
|
function parseXML(xmlStr) {
|
|
28
26
|
// see xmlbuilder2 docs on the object format
|
|
29
27
|
return create(xmlStr);
|
|
30
28
|
}
|
|
31
|
-
|
|
32
29
|
function extractAppendedData(buffer) {
|
|
33
30
|
// search for appended data tag
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
const prefixRegex = /^\s*<AppendedData\s+encoding="raw">\s*_/m;
|
|
32
|
+
const suffixRegex = /\n\s*<\/AppendedData>/m;
|
|
36
33
|
return BinaryHelper.extractBinary(buffer, prefixRegex, suffixRegex);
|
|
37
|
-
}
|
|
34
|
+
}
|
|
38
35
|
|
|
36
|
+
// ----------------------------------------------------------------------------
|
|
39
37
|
|
|
40
|
-
|
|
38
|
+
const TYPED_ARRAY = {
|
|
41
39
|
Int8: Int8Array,
|
|
42
40
|
UInt8: Uint8Array,
|
|
43
41
|
Int16: Int16Array,
|
|
@@ -50,9 +48,11 @@ var TYPED_ARRAY = {
|
|
|
50
48
|
// Not supported with JavaScript will cause error in binary
|
|
51
49
|
Float32: Float32Array,
|
|
52
50
|
Float64: Float64Array
|
|
53
|
-
};
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// ----------------------------------------------------------------------------
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
const TYPED_ARRAY_BYTES = {
|
|
56
56
|
Int8: 1,
|
|
57
57
|
UInt8: 1,
|
|
58
58
|
Int16: 2,
|
|
@@ -65,15 +65,16 @@ var TYPED_ARRAY_BYTES = {
|
|
|
65
65
|
// Not supported with JavaScript will cause error in binary
|
|
66
66
|
Float32: 4,
|
|
67
67
|
Float64: 8
|
|
68
|
-
};
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// ----------------------------------------------------------------------------
|
|
69
71
|
|
|
70
72
|
function integer64to32(array) {
|
|
71
|
-
|
|
73
|
+
const maxIdx = array.length - 1; // Skip last
|
|
74
|
+
return array.filter((v, i) => i < maxIdx && i % 2 === 0);
|
|
75
|
+
}
|
|
72
76
|
|
|
73
|
-
|
|
74
|
-
return i < maxIdx && i % 2 === 0;
|
|
75
|
-
});
|
|
76
|
-
} // ----------------------------------------------------------------------------
|
|
77
|
+
// ----------------------------------------------------------------------------
|
|
77
78
|
|
|
78
79
|
/**
|
|
79
80
|
* Reads the data of a length-prefixed blob.
|
|
@@ -84,122 +85,108 @@ function integer64to32(array) {
|
|
|
84
85
|
* @param {string} dataType
|
|
85
86
|
* @param {string} headerType either UInt64 or UInt32
|
|
86
87
|
*/
|
|
87
|
-
|
|
88
|
-
|
|
89
88
|
function readLengthPrefixedData(uint8, dataType, headerType) {
|
|
90
89
|
if (!['UInt64', 'UInt32'].includes(headerType)) {
|
|
91
|
-
throw new Error(
|
|
90
|
+
throw new Error(`Cannot handle a header type of ${headerType}`);
|
|
92
91
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
var dataFallbackTo32 = false;
|
|
97
|
-
|
|
92
|
+
let HeaderTypedArray = TYPED_ARRAY[headerType];
|
|
93
|
+
let DataTypedArray = TYPED_ARRAY[dataType];
|
|
94
|
+
let dataFallbackTo32 = false;
|
|
98
95
|
if (headerType === 'UInt64') {
|
|
99
96
|
HeaderTypedArray = TYPED_ARRAY.UInt32;
|
|
100
97
|
}
|
|
101
|
-
|
|
102
98
|
if (/^U?Int64$/.test(dataType)) {
|
|
103
99
|
dataFallbackTo32 = true;
|
|
104
100
|
DataTypedArray = TYPED_ARRAY[dataType.replace('64', '32')];
|
|
105
101
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
102
|
+
const {
|
|
103
|
+
byteOffset
|
|
104
|
+
} = uint8;
|
|
105
|
+
const dataWordSize = TYPED_ARRAY_BYTES[dataType];
|
|
106
|
+
const headerWordSize = TYPED_ARRAY_BYTES[headerType];
|
|
107
|
+
|
|
108
|
+
// slice if offset is not word aligned
|
|
109
|
+
let header;
|
|
113
110
|
if (byteOffset % headerWordSize === 0) {
|
|
114
111
|
header = new HeaderTypedArray(uint8.buffer, byteOffset, 1);
|
|
115
112
|
} else {
|
|
116
113
|
header = new HeaderTypedArray(uint8.buffer.slice(byteOffset, byteOffset + headerWordSize));
|
|
117
114
|
}
|
|
115
|
+
const dataByteLength = Number(header[0]);
|
|
118
116
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
var arraySize = dataByteLength / dataWordSize;
|
|
123
|
-
|
|
117
|
+
// read values
|
|
118
|
+
let values;
|
|
119
|
+
let arraySize = dataByteLength / dataWordSize;
|
|
124
120
|
if (dataFallbackTo32) {
|
|
125
121
|
// We are reading int64 data with an int32 typed array.
|
|
126
122
|
arraySize *= 2;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
var dataOffset = byteOffset + headerWordSize;
|
|
123
|
+
}
|
|
131
124
|
|
|
125
|
+
// slice if offset is not word aligned
|
|
126
|
+
const dataOffset = byteOffset + headerWordSize;
|
|
132
127
|
if (dataOffset % dataWordSize === 0) {
|
|
133
128
|
values = new DataTypedArray(uint8.buffer, dataOffset, arraySize);
|
|
134
129
|
} else {
|
|
135
130
|
values = new DataTypedArray(uint8.buffer.slice(dataOffset, dataOffset + dataByteLength));
|
|
136
131
|
}
|
|
137
|
-
|
|
138
132
|
if (dataFallbackTo32) {
|
|
139
133
|
// remove higher order 32 bits
|
|
140
134
|
values = integer64to32(values);
|
|
141
135
|
}
|
|
142
|
-
|
|
143
136
|
return values;
|
|
144
|
-
}
|
|
137
|
+
}
|
|
145
138
|
|
|
139
|
+
// ----------------------------------------------------------------------------
|
|
146
140
|
|
|
147
141
|
function readerHeader(uint8, headerType) {
|
|
148
142
|
// We do not handle endianness or if more than 32 bits are needed to encode the data
|
|
149
143
|
if (headerType === 'UInt64') {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
for (var i = 0; i < _nbBlocks; i++) {
|
|
161
|
-
_resultArray.push(_uint[i * 2]);
|
|
144
|
+
const offset = 8;
|
|
145
|
+
let uint32 = new Uint32Array(uint8.buffer, 0, 6);
|
|
146
|
+
const nbBlocks = uint32[0];
|
|
147
|
+
const s1 = uint32[2];
|
|
148
|
+
const s2 = uint32[4];
|
|
149
|
+
const resultArray = [offset, nbBlocks, s1, s2];
|
|
150
|
+
uint32 = new Uint32Array(uint8.buffer, 3 * 8, nbBlocks * 2);
|
|
151
|
+
for (let i = 0; i < nbBlocks; i++) {
|
|
152
|
+
resultArray.push(uint32[i * 2]);
|
|
162
153
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
var s2 = uint32[2];
|
|
173
|
-
var resultArray = [offset, nbBlocks, s1, s2];
|
|
154
|
+
return resultArray;
|
|
155
|
+
}
|
|
156
|
+
// UInt32
|
|
157
|
+
let uint32 = new Uint32Array(uint8.buffer, 0, 3);
|
|
158
|
+
const offset = 4;
|
|
159
|
+
const nbBlocks = uint32[0];
|
|
160
|
+
const s1 = uint32[1];
|
|
161
|
+
const s2 = uint32[2];
|
|
162
|
+
const resultArray = [offset, nbBlocks, s1, s2];
|
|
174
163
|
uint32 = new Uint32Array(uint8.buffer, 3 * 4, nbBlocks);
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
resultArray.push(uint32[_i]);
|
|
164
|
+
for (let i = 0; i < nbBlocks; i++) {
|
|
165
|
+
resultArray.push(uint32[i]);
|
|
178
166
|
}
|
|
179
|
-
|
|
180
167
|
return resultArray;
|
|
181
|
-
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// ----------------------------------------------------------------------------
|
|
182
171
|
|
|
183
172
|
/**
|
|
184
173
|
* Given the return value of readerHeader, return header byte length.
|
|
185
174
|
*/
|
|
186
|
-
|
|
187
|
-
|
|
188
175
|
function getHeaderByteLength(header, headerType) {
|
|
189
176
|
// ignore the first number, which isn't actually part of the header.
|
|
190
|
-
|
|
191
|
-
headerWordSize = _header[0];
|
|
192
|
-
|
|
177
|
+
const [headerWordSize] = header;
|
|
193
178
|
return (header.length - 1) * headerWordSize;
|
|
194
|
-
}
|
|
179
|
+
}
|
|
195
180
|
|
|
181
|
+
// ----------------------------------------------------------------------------
|
|
196
182
|
|
|
197
183
|
function uncompressBlock(compressedUint8, output) {
|
|
198
|
-
|
|
184
|
+
const uncompressedBlock = decompressSync(compressedUint8);
|
|
199
185
|
output.uint8.set(uncompressedBlock, output.offset);
|
|
200
186
|
output.offset += uncompressedBlock.length;
|
|
201
|
-
}
|
|
187
|
+
}
|
|
202
188
|
|
|
189
|
+
// ----------------------------------------------------------------------------
|
|
203
190
|
|
|
204
191
|
function decompressZLib(bytes, headerType) {
|
|
205
192
|
// ----------------------------------------------------------------------
|
|
@@ -210,13 +197,13 @@ function decompressZLib(bytes, headerType) {
|
|
|
210
197
|
// [header] s2: uncompress size of the last blocks
|
|
211
198
|
// [header] blockSize: size of the block in compressed space that represent to bloc to inflate in zlib. (This also give the offset to the next block)
|
|
212
199
|
// ----------------------------------------------------------------------
|
|
213
|
-
// Header reading: [offset, numBlocks, s1, s2]
|
|
214
|
-
var header = readerHeader(bytes, headerType);
|
|
215
|
-
var nbBlocks = header[1];
|
|
216
|
-
var s1 = header[2];
|
|
217
|
-
var s2 = header[3];
|
|
218
|
-
var dataByteLength = 0;
|
|
219
200
|
|
|
201
|
+
// Header reading: [offset, numBlocks, s1, s2]
|
|
202
|
+
const header = readerHeader(bytes, headerType);
|
|
203
|
+
const nbBlocks = header[1];
|
|
204
|
+
const s1 = header[2];
|
|
205
|
+
const s2 = header[3];
|
|
206
|
+
let dataByteLength = 0;
|
|
220
207
|
if (nbBlocks > 0) {
|
|
221
208
|
// If the last block's size is labeled as 0, that means the last block
|
|
222
209
|
// really has size header[2].
|
|
@@ -226,104 +213,98 @@ function decompressZLib(bytes, headerType) {
|
|
|
226
213
|
dataByteLength = (nbBlocks - 1) * s1 + s2;
|
|
227
214
|
}
|
|
228
215
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
var output = {
|
|
216
|
+
const buffer = new ArrayBuffer(dataByteLength);
|
|
217
|
+
const output = {
|
|
232
218
|
offset: 0,
|
|
233
219
|
uint8: new Uint8Array(buffer)
|
|
234
220
|
};
|
|
235
|
-
|
|
221
|
+
let offset = getHeaderByteLength(header);
|
|
222
|
+
// Starting from end of the data header, find the zlib header, which starts with 0x78.
|
|
236
223
|
// This accounts for any padding between the header and the compressed data.
|
|
237
|
-
|
|
238
224
|
while (offset < bytes.length && bytes[offset] !== 0x78) {
|
|
239
225
|
offset++;
|
|
240
226
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
var compressedBlock = new Uint8Array(bytes.buffer, offset, blockSize);
|
|
227
|
+
for (let i = 0; i < nbBlocks; i++) {
|
|
228
|
+
const blockSize = header[4 + i];
|
|
229
|
+
const compressedBlock = new Uint8Array(bytes.buffer, offset, blockSize);
|
|
245
230
|
uncompressBlock(compressedBlock, output);
|
|
246
231
|
offset += blockSize;
|
|
247
232
|
}
|
|
248
|
-
|
|
249
233
|
return output.uint8;
|
|
250
|
-
}
|
|
234
|
+
}
|
|
251
235
|
|
|
236
|
+
// ----------------------------------------------------------------------------
|
|
252
237
|
|
|
253
238
|
function processDataArray(size, dataArrayElem, compressor, byteOrder, headerType, binaryBuffer) {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
var values = null;
|
|
260
|
-
|
|
239
|
+
const dataType = dataArrayElem.getAttribute('type');
|
|
240
|
+
const name = dataArrayElem.getAttribute('Name');
|
|
241
|
+
const format = dataArrayElem.getAttribute('format'); // binary, ascii, appended
|
|
242
|
+
const numberOfComponents = Number(dataArrayElem.getAttribute('NumberOfComponents') || '1');
|
|
243
|
+
let values = null;
|
|
261
244
|
if (format === 'ascii') {
|
|
262
245
|
values = new TYPED_ARRAY[dataType](size * numberOfComponents);
|
|
263
|
-
|
|
264
|
-
dataArrayElem.firstChild.nodeValue.split(/[\\t \\n]+/).forEach(
|
|
246
|
+
let offset = 0;
|
|
247
|
+
dataArrayElem.firstChild.nodeValue.split(/[\\t \\n]+/).forEach(token => {
|
|
265
248
|
if (token.trim().length) {
|
|
266
249
|
values[offset++] = Number(token);
|
|
267
250
|
}
|
|
268
251
|
});
|
|
269
252
|
} else if (format === 'binary') {
|
|
270
|
-
|
|
271
|
-
|
|
253
|
+
const uint8 = new Uint8Array(Base64.toArrayBuffer(dataArrayElem.firstChild.nodeValue.trim()));
|
|
272
254
|
if (compressor === 'vtkZLibDataCompressor') {
|
|
273
|
-
|
|
274
|
-
values = new TYPED_ARRAY[dataType](data.buffer);
|
|
255
|
+
const data = decompressZLib(uint8, headerType);
|
|
256
|
+
values = new TYPED_ARRAY[dataType](data.buffer);
|
|
275
257
|
|
|
258
|
+
// Handle (u)int64 hoping for no overflow...
|
|
276
259
|
if (/^U?Int64$/.test(dataType)) {
|
|
277
260
|
values = integer64to32(values);
|
|
278
261
|
}
|
|
279
262
|
} else {
|
|
280
|
-
values = new TYPED_ARRAY[dataType](uint8.buffer, TYPED_ARRAY_BYTES[headerType]);
|
|
263
|
+
values = new TYPED_ARRAY[dataType](uint8.buffer, TYPED_ARRAY_BYTES[headerType]);
|
|
281
264
|
|
|
265
|
+
// Handle (u)int64 hoping no overflow...
|
|
282
266
|
if (dataType.indexOf('Int64') !== -1) {
|
|
283
267
|
values = integer64to32(values);
|
|
284
268
|
}
|
|
285
269
|
}
|
|
286
270
|
} else if (format === 'appended') {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
values = readLengthPrefixedData(new Uint8Array(binaryBuffer, _offset2), dataType, headerType);
|
|
271
|
+
const offset = Number(dataArrayElem.getAttribute('offset'));
|
|
272
|
+
values = readLengthPrefixedData(new Uint8Array(binaryBuffer, offset), dataType, headerType);
|
|
290
273
|
} else {
|
|
291
274
|
console.error('Format not supported', format);
|
|
292
275
|
}
|
|
293
|
-
|
|
294
276
|
return {
|
|
295
|
-
name
|
|
296
|
-
values
|
|
297
|
-
numberOfComponents
|
|
277
|
+
name,
|
|
278
|
+
values,
|
|
279
|
+
numberOfComponents
|
|
298
280
|
};
|
|
299
|
-
}
|
|
281
|
+
}
|
|
300
282
|
|
|
283
|
+
// ----------------------------------------------------------------------------
|
|
301
284
|
|
|
302
285
|
function decodeStringArrayFromBytes(bytes) {
|
|
303
|
-
|
|
304
|
-
|
|
286
|
+
const decoder = new TextDecoder();
|
|
287
|
+
const decoded = decoder.decode(bytes);
|
|
305
288
|
|
|
289
|
+
// strings are null-terminated
|
|
306
290
|
return decoded.split('\x00').slice(0, -1);
|
|
307
|
-
}
|
|
291
|
+
}
|
|
308
292
|
|
|
293
|
+
// ----------------------------------------------------------------------------
|
|
309
294
|
|
|
310
295
|
function processStringArray(stringArrayElem, compressor, byteOrder, headerType, binaryBuffer) {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
var strings = [];
|
|
318
|
-
|
|
296
|
+
const name = stringArrayElem.getAttribute('Name');
|
|
297
|
+
const format = stringArrayElem.getAttribute('format'); // binary, ascii, appended
|
|
298
|
+
const numberOfComponents = Number(stringArrayElem.getAttribute('NumberOfComponents') || '1');
|
|
299
|
+
const numberOfTuples = Number(stringArrayElem.getAttribute('NumberOfTuples') || '1');
|
|
300
|
+
const nbStrings = numberOfTuples * numberOfComponents;
|
|
301
|
+
const strings = [];
|
|
319
302
|
if (format === 'ascii') {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
303
|
+
const tokens = stringArrayElem.firstChild.nodeValue.trim().split(/\s+/);
|
|
304
|
+
let tokIdx = 0;
|
|
305
|
+
const strChars = [];
|
|
324
306
|
while (strings.length < nbStrings) {
|
|
325
|
-
|
|
326
|
-
|
|
307
|
+
const token = Number(tokens[tokIdx++]);
|
|
327
308
|
if (token === 0) {
|
|
328
309
|
strings.push(strChars.join(''));
|
|
329
310
|
strChars.length = 0;
|
|
@@ -332,214 +313,197 @@ function processStringArray(stringArrayElem, compressor, byteOrder, headerType,
|
|
|
332
313
|
}
|
|
333
314
|
}
|
|
334
315
|
} else if (format === 'binary') {
|
|
335
|
-
|
|
336
|
-
|
|
316
|
+
const uint8 = new Uint8Array(Base64.toArrayBuffer(stringArrayElem.firstChild.nodeValue.trim()));
|
|
337
317
|
if (compressor === 'vtkZLibDataCompressor') {
|
|
338
|
-
|
|
339
|
-
strings.push
|
|
318
|
+
const decompressed = decompressZLib(uint8, headerType);
|
|
319
|
+
strings.push(...decodeStringArrayFromBytes(decompressed));
|
|
340
320
|
} else {
|
|
341
|
-
|
|
342
|
-
strings.push
|
|
321
|
+
const strData = readLengthPrefixedData(uint8, 'UInt8', headerType);
|
|
322
|
+
strings.push(...decodeStringArrayFromBytes(strData));
|
|
343
323
|
}
|
|
344
324
|
} else if (format === 'appended') {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
strings.push
|
|
325
|
+
const offset = Number(stringArrayElem.getAttribute('offset'));
|
|
326
|
+
const values = readLengthPrefixedData(new Uint8Array(binaryBuffer, offset), 'UInt8', headerType);
|
|
327
|
+
strings.push(...decodeStringArrayFromBytes(values));
|
|
348
328
|
} else {
|
|
349
|
-
macro.vtkErrorMacro(
|
|
329
|
+
macro.vtkErrorMacro(`Format not supported: ${format}`);
|
|
350
330
|
}
|
|
351
|
-
|
|
352
331
|
return {
|
|
353
|
-
name
|
|
332
|
+
name,
|
|
354
333
|
values: strings,
|
|
355
|
-
numberOfComponents
|
|
334
|
+
numberOfComponents
|
|
356
335
|
};
|
|
357
|
-
}
|
|
336
|
+
}
|
|
358
337
|
|
|
338
|
+
// ----------------------------------------------------------------------------
|
|
359
339
|
|
|
360
340
|
function processCells(size, containerElem, compressor, byteOrder, headerType, binaryBuffer) {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
var el = dataArrayElems[elIdx];
|
|
341
|
+
const arrayElems = {};
|
|
342
|
+
const dataArrayElems = containerElem.getElementsByTagName('DataArray');
|
|
343
|
+
for (let elIdx = 0; elIdx < dataArrayElems.length; elIdx++) {
|
|
344
|
+
const el = dataArrayElems[elIdx];
|
|
366
345
|
arrayElems[el.getAttribute('Name')] = el;
|
|
367
346
|
}
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
var cellSize = v - previousOffset;
|
|
347
|
+
const offsets = processDataArray(size, arrayElems.offsets, compressor, byteOrder, headerType, binaryBuffer).values;
|
|
348
|
+
const connectivitySize = offsets[offsets.length - 1];
|
|
349
|
+
const connectivity = processDataArray(connectivitySize, arrayElems.connectivity, compressor, byteOrder, headerType, binaryBuffer).values;
|
|
350
|
+
const values = new Uint32Array(size + connectivitySize);
|
|
351
|
+
let writeOffset = 0;
|
|
352
|
+
let previousOffset = 0;
|
|
353
|
+
offsets.forEach(v => {
|
|
354
|
+
const cellSize = v - previousOffset;
|
|
377
355
|
values[writeOffset++] = cellSize;
|
|
378
|
-
|
|
379
|
-
for (var i = 0; i < cellSize; i++) {
|
|
356
|
+
for (let i = 0; i < cellSize; i++) {
|
|
380
357
|
values[writeOffset++] = connectivity[previousOffset + i];
|
|
381
|
-
}
|
|
382
|
-
|
|
358
|
+
}
|
|
383
359
|
|
|
360
|
+
// save previous offset
|
|
384
361
|
previousOffset = v;
|
|
385
362
|
});
|
|
386
363
|
return values;
|
|
387
|
-
}
|
|
364
|
+
}
|
|
388
365
|
|
|
366
|
+
// ----------------------------------------------------------------------------
|
|
389
367
|
|
|
390
368
|
function processFieldData(size, fieldElem, fieldContainer, compressor, byteOrder, headerType, binaryBuffer) {
|
|
391
369
|
if (fieldElem) {
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
attributes.forEach(
|
|
395
|
-
|
|
396
|
-
|
|
370
|
+
const attributes = ['Scalars', 'Vectors', 'Normals', 'Tensors', 'TCoords'];
|
|
371
|
+
const nameBinding = {};
|
|
372
|
+
attributes.forEach(attrName => {
|
|
373
|
+
const arrayName = fieldElem.getAttribute(attrName);
|
|
397
374
|
if (arrayName) {
|
|
398
|
-
nameBinding[arrayName] = fieldContainer[
|
|
375
|
+
nameBinding[arrayName] = fieldContainer[`set${attrName}`];
|
|
399
376
|
}
|
|
400
377
|
});
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
var name = dataArray.getName();
|
|
378
|
+
const dataArrayElems = fieldElem.getElementsByTagName('DataArray');
|
|
379
|
+
const nbArrays = dataArrayElems.length;
|
|
380
|
+
for (let idx = 0; idx < nbArrays; idx++) {
|
|
381
|
+
const array = dataArrayElems[idx];
|
|
382
|
+
const dataArray = vtkDataArray.newInstance(processDataArray(size, array, compressor, byteOrder, headerType, binaryBuffer));
|
|
383
|
+
const name = dataArray.getName();
|
|
408
384
|
(nameBinding[name] || fieldContainer.addArray)(dataArray);
|
|
409
385
|
}
|
|
410
386
|
}
|
|
411
|
-
}
|
|
412
|
-
|
|
387
|
+
}
|
|
413
388
|
|
|
389
|
+
// ----------------------------------------------------------------------------
|
|
414
390
|
function handleFieldDataArrays(fieldDataElem, compressor, byteOrder, headerType, binaryBuffer) {
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
var stringArrays = _toConsumableArray(fieldDataElem.getElementsByTagName('Array')).filter(function (elem) {
|
|
420
|
-
return elem.getAttribute('type') === 'String';
|
|
421
|
-
}).map(function (arrElem) {
|
|
422
|
-
var sa = vtkStringArray.newInstance(processStringArray(arrElem, compressor, byteOrder, headerType, binaryBuffer));
|
|
391
|
+
const dataArrays = [...fieldDataElem.getElementsByTagName('DataArray')].map(daElem => vtkDataArray.newInstance(processDataArray(Number(daElem.getAttribute('NumberOfTuples')), daElem, compressor, byteOrder, headerType, binaryBuffer)));
|
|
392
|
+
const stringArrays = [...fieldDataElem.getElementsByTagName('Array')].filter(elem => elem.getAttribute('type') === 'String').map(arrElem => {
|
|
393
|
+
const sa = vtkStringArray.newInstance(processStringArray(arrElem, compressor, byteOrder, headerType, binaryBuffer));
|
|
423
394
|
return sa;
|
|
424
395
|
});
|
|
396
|
+
return [...dataArrays, ...stringArrays];
|
|
397
|
+
}
|
|
425
398
|
|
|
426
|
-
|
|
427
|
-
} // ----------------------------------------------------------------------------
|
|
399
|
+
// ----------------------------------------------------------------------------
|
|
428
400
|
// vtkXMLReader methods
|
|
429
401
|
// ----------------------------------------------------------------------------
|
|
430
402
|
|
|
431
|
-
|
|
432
403
|
function vtkXMLReader(publicAPI, model) {
|
|
433
404
|
// Set our className
|
|
434
|
-
model.classHierarchy.push('vtkXMLReader');
|
|
405
|
+
model.classHierarchy.push('vtkXMLReader');
|
|
435
406
|
|
|
407
|
+
// Create default dataAccessHelper if not available
|
|
436
408
|
if (!model.dataAccessHelper) {
|
|
437
409
|
model.dataAccessHelper = DataAccessHelper.get('http');
|
|
438
|
-
}
|
|
439
|
-
|
|
410
|
+
}
|
|
440
411
|
|
|
412
|
+
// Internal method to fetch Array
|
|
441
413
|
function fetchData(url) {
|
|
442
|
-
|
|
414
|
+
let option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
443
415
|
return model.dataAccessHelper.fetchBinary(url, option);
|
|
444
|
-
}
|
|
445
|
-
|
|
416
|
+
}
|
|
446
417
|
|
|
418
|
+
// Set DataSet url
|
|
447
419
|
publicAPI.setUrl = function (url) {
|
|
448
|
-
|
|
449
|
-
model.url = url;
|
|
420
|
+
let option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
421
|
+
model.url = url;
|
|
450
422
|
|
|
451
|
-
|
|
423
|
+
// Remove the file in the URL
|
|
424
|
+
const path = url.split('/');
|
|
452
425
|
path.pop();
|
|
453
|
-
model.baseURL = path.join('/');
|
|
426
|
+
model.baseURL = path.join('/');
|
|
454
427
|
|
|
428
|
+
// Fetch metadata
|
|
455
429
|
return publicAPI.loadData(option);
|
|
456
|
-
};
|
|
457
|
-
|
|
430
|
+
};
|
|
458
431
|
|
|
432
|
+
// Fetch the actual data arrays
|
|
459
433
|
publicAPI.loadData = function () {
|
|
460
|
-
|
|
434
|
+
let option = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
461
435
|
return fetchData(model.url, option).then(publicAPI.parseAsArrayBuffer);
|
|
462
436
|
};
|
|
463
|
-
|
|
464
|
-
publicAPI.parseAsArrayBuffer = function (arrayBuffer) {
|
|
437
|
+
publicAPI.parseAsArrayBuffer = arrayBuffer => {
|
|
465
438
|
if (!arrayBuffer) {
|
|
466
439
|
return false;
|
|
467
440
|
}
|
|
468
|
-
|
|
469
441
|
if (arrayBuffer !== model.rawDataBuffer) {
|
|
470
442
|
publicAPI.modified();
|
|
471
443
|
} else {
|
|
472
444
|
return true;
|
|
473
445
|
}
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
446
|
+
const {
|
|
447
|
+
text: content,
|
|
448
|
+
binaryBuffer
|
|
449
|
+
} = extractAppendedData(arrayBuffer);
|
|
479
450
|
model.rawDataBuffer = arrayBuffer;
|
|
480
|
-
model.binaryBuffer = binaryBuffer;
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
451
|
+
model.binaryBuffer = binaryBuffer;
|
|
452
|
+
|
|
453
|
+
// Parse data here...
|
|
454
|
+
const doc = parseXML(content);
|
|
455
|
+
const root = doc.root();
|
|
456
|
+
const rootElem = root.node;
|
|
457
|
+
const type = rootElem.getAttribute('type');
|
|
458
|
+
const compressor = rootElem.getAttribute('compressor');
|
|
459
|
+
const byteOrder = rootElem.getAttribute('byte_order');
|
|
460
|
+
// default to UInt32. I think version 0.1 vtp/vti files default to UInt32.
|
|
461
|
+
const headerType = rootElem.getAttribute('header_type') || 'UInt32';
|
|
491
462
|
if (compressor && compressor !== 'vtkZLibDataCompressor') {
|
|
492
463
|
console.error('Invalid compressor', compressor);
|
|
493
464
|
return false;
|
|
494
465
|
}
|
|
495
|
-
|
|
496
466
|
if (byteOrder && byteOrder !== 'LittleEndian') {
|
|
497
467
|
console.error('Only LittleEndian encoding is supported');
|
|
498
468
|
return false;
|
|
499
469
|
}
|
|
500
|
-
|
|
501
470
|
if (type !== model.dataType) {
|
|
502
471
|
console.error('Invalid data type', type, 'expecting', model.dataType);
|
|
503
472
|
return false;
|
|
504
|
-
}
|
|
505
|
-
|
|
473
|
+
}
|
|
506
474
|
|
|
475
|
+
// appended format
|
|
507
476
|
if (findFirstTag(rootElem, 'AppendedData')) {
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
477
|
+
const appendedDataElem = findFirstTag(rootElem, 'AppendedData');
|
|
478
|
+
const encoding = appendedDataElem.getAttribute('encoding');
|
|
479
|
+
const arrays = root.filter(xmlNode => {
|
|
480
|
+
const {
|
|
481
|
+
node
|
|
482
|
+
} = xmlNode;
|
|
512
483
|
return node.nodeType === Node.ELEMENT_NODE && node.getAttribute('format') === 'appended' && node.hasAttribute('offset');
|
|
513
|
-
}, false, true).map(
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
return a.offset - b.offset;
|
|
522
|
-
});
|
|
523
|
-
var appendedBuffer = model.binaryBuffer;
|
|
524
|
-
|
|
484
|
+
}, false, true).map(xmlNode => ({
|
|
485
|
+
node: xmlNode.node,
|
|
486
|
+
offset: Number(xmlNode.node.getAttribute('offset'))
|
|
487
|
+
}));
|
|
488
|
+
|
|
489
|
+
// sort dataElems by increasing offset
|
|
490
|
+
arrays.sort((a, b) => a.offset - b.offset);
|
|
491
|
+
let appendedBuffer = model.binaryBuffer;
|
|
525
492
|
if (encoding === 'base64') {
|
|
526
493
|
// substr(1) is to remove the '_' prefix
|
|
527
494
|
appendedBuffer = appendedDataElem.textContent.trim().substr(1);
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
var dataArrays = [];
|
|
532
|
-
|
|
533
|
-
for (var i = 0; i < arrays.length; ++i) {
|
|
534
|
-
var offset = arrays[i].offset;
|
|
535
|
-
var nextOffset = 0;
|
|
495
|
+
}
|
|
536
496
|
|
|
497
|
+
// get data array chunks
|
|
498
|
+
const dataArrays = [];
|
|
499
|
+
for (let i = 0; i < arrays.length; ++i) {
|
|
500
|
+
const offset = arrays[i].offset;
|
|
501
|
+
let nextOffset = 0;
|
|
537
502
|
if (i === arrays.length - 1) {
|
|
538
503
|
nextOffset = appendedBuffer.length || appendedBuffer.byteLength;
|
|
539
504
|
} else {
|
|
540
505
|
nextOffset = arrays[i + 1].offset;
|
|
541
506
|
}
|
|
542
|
-
|
|
543
507
|
if (encoding === 'base64') {
|
|
544
508
|
dataArrays.push(new Uint8Array(Base64.toArrayBuffer(appendedBuffer.substring(offset, nextOffset))));
|
|
545
509
|
} else {
|
|
@@ -548,92 +512,86 @@ function vtkXMLReader(publicAPI, model) {
|
|
|
548
512
|
dataArrays.push(new Uint8Array(appendedBuffer.slice(offset, nextOffset)));
|
|
549
513
|
}
|
|
550
514
|
}
|
|
551
|
-
|
|
552
515
|
if (compressor === 'vtkZLibDataCompressor') {
|
|
553
|
-
for (
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
516
|
+
for (let arrayidx = 0; arrayidx < dataArrays.length; ++arrayidx) {
|
|
517
|
+
const dataArray = dataArrays[arrayidx];
|
|
518
|
+
const uncompressed = decompressZLib(dataArray, headerType);
|
|
519
|
+
const data = new Uint8Array(uncompressed.length + TYPED_ARRAY_BYTES[headerType]);
|
|
520
|
+
// set length header
|
|
557
521
|
// TODO this does not work for lengths that are greater than the max Uint32 value.
|
|
558
|
-
|
|
559
522
|
new TYPED_ARRAY[headerType](data.buffer, 0, 1)[0] = uncompressed.length;
|
|
560
523
|
data.set(uncompressed, TYPED_ARRAY_BYTES[headerType]);
|
|
561
524
|
dataArrays[arrayidx] = data;
|
|
562
525
|
}
|
|
563
526
|
}
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
var buffer = new ArrayBuffer(bufferLength);
|
|
569
|
-
var view = new Uint8Array(buffer);
|
|
570
|
-
|
|
571
|
-
for (var _i2 = 0, _offset3 = 0; _i2 < dataArrays.length; ++_i2) {
|
|
527
|
+
const bufferLength = dataArrays.reduce((acc, arr) => acc + arr.length, 0);
|
|
528
|
+
const buffer = new ArrayBuffer(bufferLength);
|
|
529
|
+
const view = new Uint8Array(buffer);
|
|
530
|
+
for (let i = 0, offset = 0; i < dataArrays.length; ++i) {
|
|
572
531
|
// set correct offsets
|
|
573
|
-
arrays[
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
_offset3 += dataArrays[_i2].length;
|
|
532
|
+
arrays[i].node.setAttribute('offset', offset);
|
|
533
|
+
// set final buffer data
|
|
534
|
+
view.set(dataArrays[i], offset);
|
|
535
|
+
offset += dataArrays[i].length;
|
|
578
536
|
}
|
|
579
|
-
|
|
580
537
|
model.binaryBuffer = buffer;
|
|
581
|
-
|
|
582
538
|
if (!model.binaryBuffer) {
|
|
583
539
|
console.error('Processing appended data format: requires binaryBuffer to parse');
|
|
584
540
|
return false;
|
|
585
541
|
}
|
|
586
542
|
}
|
|
587
|
-
|
|
588
543
|
publicAPI.parseXML(rootElem, type, compressor, byteOrder, headerType);
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
544
|
+
const datasetElem = rootElem.getElementsByTagName(type)[0];
|
|
545
|
+
const fieldDataElem = datasetElem.getElementsByTagName('FieldData')[0];
|
|
592
546
|
if (fieldDataElem) {
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
for (var j = 0; j < fieldDataArrays.length; j++) {
|
|
547
|
+
const fieldDataArrays = handleFieldDataArrays(fieldDataElem, compressor, byteOrder, headerType, model.binaryBuffer);
|
|
548
|
+
for (let i = 0; i < model.output.length; i++) {
|
|
549
|
+
const fieldData = model.output[i].getFieldData();
|
|
550
|
+
for (let j = 0; j < fieldDataArrays.length; j++) {
|
|
599
551
|
fieldData.addArray(fieldDataArrays[j]);
|
|
600
552
|
}
|
|
601
553
|
}
|
|
602
554
|
}
|
|
603
|
-
|
|
604
555
|
return true;
|
|
605
556
|
};
|
|
606
|
-
|
|
607
|
-
publicAPI.requestData = function (inData, outData) {
|
|
557
|
+
publicAPI.requestData = (inData, outData) => {
|
|
608
558
|
publicAPI.parseAsArrayBuffer(model.rawDataBuffer);
|
|
609
559
|
};
|
|
610
|
-
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// ----------------------------------------------------------------------------
|
|
611
563
|
// Object factory
|
|
612
564
|
// ----------------------------------------------------------------------------
|
|
613
565
|
|
|
614
|
-
|
|
615
|
-
|
|
566
|
+
const DEFAULT_VALUES = {
|
|
567
|
+
// baseURL: null,
|
|
616
568
|
// dataAccessHelper: null,
|
|
617
569
|
// url: null,
|
|
618
|
-
};
|
|
570
|
+
};
|
|
571
|
+
|
|
572
|
+
// ----------------------------------------------------------------------------
|
|
619
573
|
|
|
620
574
|
function extend(publicAPI, model) {
|
|
621
|
-
|
|
622
|
-
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
575
|
+
let initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
576
|
+
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
623
577
|
|
|
578
|
+
// Build VTK API
|
|
624
579
|
macro.obj(publicAPI, model);
|
|
625
580
|
macro.get(publicAPI, model, ['url', 'baseURL']);
|
|
626
581
|
macro.setGet(publicAPI, model, ['dataAccessHelper']);
|
|
627
|
-
macro.algo(publicAPI, model, 0, 1);
|
|
582
|
+
macro.algo(publicAPI, model, 0, 1);
|
|
628
583
|
|
|
584
|
+
// vtkXMLReader methods
|
|
629
585
|
vtkXMLReader(publicAPI, model);
|
|
630
|
-
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// ----------------------------------------------------------------------------
|
|
631
589
|
|
|
632
590
|
var vtkXMLReader$1 = {
|
|
633
|
-
extend
|
|
634
|
-
processDataArray
|
|
635
|
-
processFieldData
|
|
636
|
-
processCells
|
|
591
|
+
extend,
|
|
592
|
+
processDataArray,
|
|
593
|
+
processFieldData,
|
|
594
|
+
processCells
|
|
637
595
|
};
|
|
638
596
|
|
|
639
597
|
export { vtkXMLReader$1 as default, extend, findAllTags, findFirstTag };
|