@kitware/vtk.js 28.10.2 → 28.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Common/Core/Base64.js +53 -82
- package/Common/Core/CellArray.js +52 -60
- package/Common/Core/ClassHierarchy.js +8 -36
- package/Common/Core/DataArray/Constants.js +6 -6
- package/Common/Core/DataArray.js +185 -270
- package/Common/Core/Endian.js +14 -17
- package/Common/Core/HalfFloat.js +17 -34
- package/Common/Core/ImageHelper.js +17 -25
- package/Common/Core/LookupTable.js +131 -144
- package/Common/Core/Math/Constants.js +8 -8
- package/Common/Core/Math/index.js +754 -942
- package/Common/Core/Math.js +2 -4
- package/Common/Core/MatrixBuilder.js +99 -151
- package/Common/Core/Points.js +43 -43
- package/Common/Core/PriorityQueue.js +30 -28
- package/Common/Core/ProgressHandler.js +31 -32
- package/Common/Core/ScalarsToColors/Constants.js +4 -4
- package/Common/Core/ScalarsToColors.js +196 -253
- package/Common/Core/StringArray.js +48 -73
- package/Common/Core/URLExtract.js +10 -29
- package/Common/Core/VariantArray.js +48 -73
- package/Common/Core.js +11 -11
- package/Common/DataModel/AbstractPointLocator.js +19 -17
- package/Common/DataModel/BoundingBox.js +322 -490
- package/Common/DataModel/Box.js +46 -63
- package/Common/DataModel/CardinalSpline1D.js +92 -102
- package/Common/DataModel/Cell.js +41 -61
- package/Common/DataModel/CellLinks.js +91 -127
- package/Common/DataModel/CellTypes/Constants.js +7 -6
- package/Common/DataModel/CellTypes.js +55 -74
- package/Common/DataModel/Collection.js +45 -61
- package/Common/DataModel/Cone.js +28 -20
- package/Common/DataModel/Cylinder.js +41 -35
- package/Common/DataModel/DataSet/Constants.js +11 -5
- package/Common/DataModel/DataSet.js +37 -25
- package/Common/DataModel/DataSetAttributes/Constants.js +18 -18
- package/Common/DataModel/DataSetAttributes/FieldData.js +103 -194
- package/Common/DataModel/DataSetAttributes.js +96 -138
- package/Common/DataModel/EdgeLocator.js +45 -70
- package/Common/DataModel/ITKHelper.js +67 -137
- package/Common/DataModel/ImageData.js +115 -172
- package/Common/DataModel/ImplicitBoolean/Constants.js +2 -2
- package/Common/DataModel/ImplicitBoolean.js +66 -96
- package/Common/DataModel/IncrementalOctreeNode.js +201 -231
- package/Common/DataModel/IncrementalOctreePointLocator.js +160 -198
- package/Common/DataModel/KochanekSpline1D.js +78 -81
- package/Common/DataModel/Line/Constants.js +2 -2
- package/Common/DataModel/Line.js +82 -105
- package/Common/DataModel/Locator.js +17 -10
- package/Common/DataModel/Molecule.js +26 -17
- package/Common/DataModel/PiecewiseFunction.js +218 -239
- package/Common/DataModel/Plane.js +90 -113
- package/Common/DataModel/PointSet.js +30 -26
- package/Common/DataModel/PolyData/Constants.js +2 -2
- package/Common/DataModel/PolyData.js +95 -120
- package/Common/DataModel/PolyLine.js +44 -61
- package/Common/DataModel/Polygon/Constants.js +4 -4
- package/Common/DataModel/Polygon.js +128 -169
- package/Common/DataModel/Quad/Constants.js +2 -2
- package/Common/DataModel/Quad.js +61 -100
- package/Common/DataModel/SelectionNode/Constants.js +5 -4
- package/Common/DataModel/SelectionNode.js +25 -21
- package/Common/DataModel/Sphere.js +40 -35
- package/Common/DataModel/Spline1D/Constants.js +3 -2
- package/Common/DataModel/Spline1D.js +34 -18
- package/Common/DataModel/Spline3D/Constants.js +2 -2
- package/Common/DataModel/Spline3D.js +46 -41
- package/Common/DataModel/StructuredData/Constants.js +2 -2
- package/Common/DataModel/StructuredData.js +9 -20
- package/Common/DataModel/Triangle.js +207 -250
- package/Common/DataModel.js +19 -19
- package/Common/System/MobileVR.js +56 -61
- package/Common/System/TimerLog.js +1 -1
- package/Common/System.js +2 -2
- package/Common/Transform/LandmarkTransform/Constants.js +2 -2
- package/Common/Transform/LandmarkTransform.js +133 -117
- package/Common/Transform/Transform.js +42 -57
- package/Common/Transform.js +2 -2
- package/Common/index.js +4 -4
- package/Filters/Core/Cutter.js +134 -146
- package/Filters/Core/PolyDataNormals.js +44 -50
- package/Filters/Core.js +2 -2
- package/Filters/Cornerstone/ImageDataToCornerstoneImage.js +45 -33
- package/Filters/Cornerstone.js +1 -1
- package/Filters/General/AppendPolyData.js +84 -100
- package/Filters/General/Calculator.js +95 -163
- package/Filters/General/ClipClosedSurface/Constants.js +2 -2
- package/Filters/General/ClipClosedSurface.js +341 -416
- package/Filters/General/ClosedPolyLineToSurfaceFilter.js +141 -156
- package/Filters/General/ContourTriangulator/Constants.js +2 -2
- package/Filters/General/ContourTriangulator/helper.js +684 -812
- package/Filters/General/ContourTriangulator.js +92 -89
- package/Filters/General/ImageCropFilter.js +77 -78
- package/Filters/General/ImageDataOutlineFilter.js +42 -36
- package/Filters/General/ImageMarchingCubes/caseTable.js +9 -521
- package/Filters/General/ImageMarchingCubes.js +99 -112
- package/Filters/General/ImageMarchingSquares/caseTable.js +9 -41
- package/Filters/General/ImageMarchingSquares.js +93 -118
- package/Filters/General/ImageOutlineFilter.js +53 -54
- package/Filters/General/ImageSliceFilter.js +39 -30
- package/Filters/General/ImageStreamline.js +107 -124
- package/Filters/General/LineFilter.js +26 -15
- package/Filters/General/MoleculeToRepresentation.js +136 -149
- package/Filters/General/OBBTree/OBBNode.js +36 -34
- package/Filters/General/OBBTree/helper.js +19 -24
- package/Filters/General/OBBTree.js +396 -488
- package/Filters/General/OutlineFilter.js +52 -34
- package/Filters/General/PaintFilter/PaintFilter.worker.js +93 -130
- package/Filters/General/PaintFilter.js +150 -162
- package/Filters/General/ScalarToRGBA.js +38 -33
- package/Filters/General/TriangleFilter.js +65 -62
- package/Filters/General/TubeFilter/Constants.js +4 -4
- package/Filters/General/TubeFilter.js +376 -496
- package/Filters/General/WarpScalar.js +58 -60
- package/Filters/General/WindowedSincPolyDataFilter.js +258 -330
- package/Filters/General.js +21 -21
- package/Filters/Sources/Arrow2DSource/Constants.js +2 -2
- package/Filters/Sources/Arrow2DSource.js +56 -56
- package/Filters/Sources/ArrowSource.js +39 -29
- package/Filters/Sources/CircleSource.js +43 -43
- package/Filters/Sources/ConcentricCylinderSource.js +151 -174
- package/Filters/Sources/ConeSource.js +51 -42
- package/Filters/Sources/CubeSource.js +75 -96
- package/Filters/Sources/Cursor3D.js +94 -109
- package/Filters/Sources/CylinderSource.js +90 -90
- package/Filters/Sources/ImageGridSource.js +43 -43
- package/Filters/Sources/LineSource.js +49 -39
- package/Filters/Sources/PlaneSource.js +97 -104
- package/Filters/Sources/PointSource.js +46 -37
- package/Filters/Sources/RTAnalyticSource.js +50 -48
- package/Filters/Sources/SLICSource.js +63 -73
- package/Filters/Sources/SphereSource.js +88 -78
- package/Filters/Sources/ViewFinderSource.js +26 -23
- package/Filters/Sources.js +14 -14
- package/Filters/Texture/TextureMapToPlane.js +95 -97
- package/Filters/Texture/TextureMapToSphere.js +46 -54
- package/Filters/Texture.js +2 -2
- package/Filters/index.js +5 -5
- package/IO/Core/BinaryHelper.js +12 -18
- package/IO/Core/DataAccessHelper/HtmlDataAccessHelper.js +43 -59
- package/IO/Core/DataAccessHelper/HttpDataAccessHelper.js +76 -113
- package/IO/Core/DataAccessHelper/JSZipDataAccessHelper.js +62 -112
- package/IO/Core/DataAccessHelper/LiteHttpDataAccessHelper.js +76 -113
- package/IO/Core/DataAccessHelper.js +6 -6
- package/IO/Core/HttpDataSetReader.js +136 -139
- package/IO/Core/HttpDataSetSeriesReader.js +64 -75
- package/IO/Core/HttpSceneLoader.js +130 -179
- package/IO/Core/ImageStream/DefaultProtocol.js +29 -43
- package/IO/Core/ImageStream/ViewStream.js +100 -103
- package/IO/Core/ImageStream.js +62 -54
- package/IO/Core/ResourceLoader.js +10 -9
- package/IO/Core/Serializer/ArraySerializer.js +40 -40
- package/IO/Core/Serializer/FieldDataSerializer.js +18 -28
- package/IO/Core/Serializer/ImageDataSerializer.js +22 -23
- package/IO/Core/Serializer/PolyDataSerializer.js +17 -21
- package/IO/Core/Serializer.js +6 -13
- package/IO/Core/WSLinkClient.js +90 -76
- package/IO/Core/ZipMultiDataSetReader.js +46 -44
- package/IO/Core/ZipMultiDataSetWriter.js +43 -34
- package/IO/Core.js +7 -7
- package/IO/Geometry/DracoReader.js +118 -121
- package/IO/Geometry/PLYReader.js +163 -223
- package/IO/Geometry/PLYWriter/Constants.js +5 -5
- package/IO/Geometry/PLYWriter.js +139 -154
- package/IO/Geometry/STLReader.js +123 -146
- package/IO/Geometry/STLWriter/Constants.js +2 -2
- package/IO/Geometry/STLWriter.js +83 -82
- package/IO/Geometry.js +5 -5
- package/IO/Legacy/LegacyAsciiParser.js +78 -139
- package/IO/Legacy/PolyDataReader.js +48 -36
- package/IO/Legacy.js +2 -2
- package/IO/Misc/ElevationReader.js +67 -60
- package/IO/Misc/HttpDataSetLODsLoader.js +41 -38
- package/IO/Misc/ITKImageReader.js +58 -45
- package/IO/Misc/ITKPolyDataReader.js +50 -38
- package/IO/Misc/JSONNucleoReader.js +49 -42
- package/IO/Misc/JSONReader.js +38 -33
- package/IO/Misc/MTLReader.js +74 -119
- package/IO/Misc/OBJReader.js +153 -206
- package/IO/Misc/PDBReader.js +70 -68
- package/IO/Misc/SkyboxReader.js +77 -82
- package/IO/Misc.js +9 -9
- package/IO/XML/XMLImageDataReader.js +36 -38
- package/IO/XML/XMLImageDataWriter.js +28 -21
- package/IO/XML/XMLPolyDataReader.js +49 -46
- package/IO/XML/XMLPolyDataWriter.js +43 -42
- package/IO/XML/XMLReader.js +262 -304
- package/IO/XML/XMLWriter/Constants.js +3 -3
- package/IO/XML/XMLWriter.js +70 -84
- package/IO/XML.js +6 -6
- package/IO/index.js +5 -5
- package/Imaging/Core/AbstractImageInterpolator/Constants.js +4 -4
- package/Imaging/Core/AbstractImageInterpolator/InterpolationInfo.js +30 -27
- package/Imaging/Core/AbstractImageInterpolator.js +74 -87
- package/Imaging/Core/ImageInterpolator.js +201 -252
- package/Imaging/Core/ImagePointDataIterator.js +96 -122
- package/Imaging/Core/ImageReslice/Constants.js +2 -2
- package/Imaging/Core/ImageReslice.js +327 -464
- package/Imaging/Core.js +4 -4
- package/Imaging/Hybrid/SampleFunction.js +58 -51
- package/Imaging/Hybrid.js +1 -1
- package/Imaging/index.js +2 -2
- package/Interaction/Animations/TimeStepBasedAnimationHandler.js +39 -54
- package/Interaction/Manipulators/CompositeCameraManipulator.js +22 -13
- package/Interaction/Manipulators/CompositeGestureManipulator.js +31 -43
- package/Interaction/Manipulators/CompositeKeyboardManipulator.js +15 -11
- package/Interaction/Manipulators/CompositeMouseManipulator.js +27 -33
- package/Interaction/Manipulators/CompositeVRManipulator.js +22 -15
- package/Interaction/Manipulators/GestureCameraManipulator.js +54 -36
- package/Interaction/Manipulators/KeyboardCameraManipulator.js +95 -97
- package/Interaction/Manipulators/MouseBoxSelectorManipulator.js +70 -89
- package/Interaction/Manipulators/MouseCameraAxisRotateManipulator.js +67 -54
- package/Interaction/Manipulators/MouseCameraSliceManipulator.js +40 -38
- package/Interaction/Manipulators/MouseCameraTrackballFirstPersonManipulator.js +83 -68
- package/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator.js +32 -28
- package/Interaction/Manipulators/MouseCameraTrackballPanManipulator.js +47 -40
- package/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js +55 -43
- package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +56 -46
- package/Interaction/Manipulators/MouseCameraTrackballZoomManipulator.js +41 -46
- package/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator.js +29 -27
- package/Interaction/Manipulators/MouseCameraUnicamManipulator.js +123 -146
- package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +144 -166
- package/Interaction/Manipulators/MouseRangeManipulator.js +127 -132
- package/Interaction/Manipulators/VRButtonPanManipulator.js +33 -23
- package/Interaction/Manipulators.js +21 -21
- package/Interaction/Misc/DeviceOrientationToCamera.js +25 -47
- package/Interaction/Misc.js +1 -1
- package/Interaction/Style/InteractorStyleImage.js +101 -121
- package/Interaction/Style/InteractorStyleMPRSlice.js +111 -128
- package/Interaction/Style/InteractorStyleManipulator/Presets.js +9 -17
- package/Interaction/Style/InteractorStyleManipulator.js +254 -329
- package/Interaction/Style/InteractorStyleRemoteMouse.js +195 -180
- package/Interaction/Style/InteractorStyleTrackballCamera.js +154 -157
- package/Interaction/Style/InteractorStyleUnicam.js +30 -38
- package/Interaction/Style.js +5 -5
- package/Interaction/UI/CornerAnnotation/CornerAnnotation.module.css.js +1 -1
- package/Interaction/UI/CornerAnnotation.js +65 -48
- package/Interaction/UI/FPSMonitor.js +104 -105
- package/Interaction/UI/Icons.js +1 -1
- package/Interaction/UI/Slider/Constants.js +2 -2
- package/Interaction/UI/Slider.js +78 -95
- package/Interaction/UI/VolumeController.js +104 -97
- package/Interaction/UI.js +5 -5
- package/Interaction/Widgets/OrientationMarkerWidget/Constants.js +2 -2
- package/Interaction/Widgets/OrientationMarkerWidget.js +90 -135
- package/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +0 -3
- package/Interaction/Widgets/PiecewiseGaussianWidget.js +381 -498
- package/Interaction/Widgets.js +2 -2
- package/Interaction/index.js +5 -5
- package/Proxy/Animation/AbstractAnimationProxy.js +22 -15
- package/Proxy/Animation/AnimationProxyManager.js +43 -51
- package/Proxy/Animation/TimeStepBasedAnimationHandlerProxy.js +26 -19
- package/Proxy/Core/AbstractRepresentationProxy.js +97 -151
- package/Proxy/Core/LookupTableProxy/Constants.js +4 -4
- package/Proxy/Core/LookupTableProxy.js +49 -52
- package/Proxy/Core/PiecewiseFunctionProxy/Constants.js +4 -4
- package/Proxy/Core/PiecewiseFunctionProxy.js +63 -72
- package/Proxy/Core/ProxyManager/core.js +83 -106
- package/Proxy/Core/ProxyManager/properties.js +53 -76
- package/Proxy/Core/ProxyManager/state.js +100 -110
- package/Proxy/Core/ProxyManager/view.js +45 -55
- package/Proxy/Core/ProxyManager.js +16 -8
- package/Proxy/Core/SourceProxy.js +41 -38
- package/Proxy/Core/View2DProxy.js +143 -199
- package/Proxy/Core/ViewProxy.js +223 -269
- package/Proxy/Core.js +7 -7
- package/Proxy/Representations/GeometryRepresentationProxy.js +34 -20
- package/Proxy/Representations/GlyphRepresentationProxy.js +42 -41
- package/Proxy/Representations/MoleculeRepresentationProxy.js +32 -22
- package/Proxy/Representations/ResliceRepresentationProxy.js +48 -32
- package/Proxy/Representations/SkyboxRepresentationProxy.js +30 -29
- package/Proxy/Representations/SliceRepresentationProxy.js +93 -112
- package/Proxy/Representations/SlicedGeometryRepresentationProxy.js +46 -42
- package/Proxy/Representations/VolumeRepresentationProxy.js +108 -133
- package/Proxy/Representations.js +7 -7
- package/Proxy/index.js +2 -2
- package/Rendering/Core/AbstractImageMapper/helper.js +44 -49
- package/Rendering/Core/AbstractImageMapper.js +18 -19
- package/Rendering/Core/AbstractMapper.js +39 -55
- package/Rendering/Core/AbstractMapper3D.js +26 -31
- package/Rendering/Core/AbstractPicker.js +25 -21
- package/Rendering/Core/Actor.js +71 -93
- package/Rendering/Core/Actor2D.js +64 -78
- package/Rendering/Core/AnnotatedCubeActor/Presets.js +5 -11
- package/Rendering/Core/AnnotatedCubeActor.js +94 -79
- package/Rendering/Core/AxesActor.js +65 -87
- package/Rendering/Core/Camera.js +246 -271
- package/Rendering/Core/CellPicker.js +125 -148
- package/Rendering/Core/ColorTransferFunction/ColorMaps.js +20 -21
- package/Rendering/Core/ColorTransferFunction/ColorMapsLite.js +20 -21
- package/Rendering/Core/ColorTransferFunction/Constants.js +4 -4
- package/Rendering/Core/ColorTransferFunction.js +460 -546
- package/Rendering/Core/Coordinate/Constants.js +2 -2
- package/Rendering/Core/Coordinate.js +119 -198
- package/Rendering/Core/CubeAxesActor.js +294 -320
- package/Rendering/Core/Follower.js +46 -45
- package/Rendering/Core/Glyph3DMapper/Constants.js +4 -4
- package/Rendering/Core/Glyph3DMapper.js +96 -148
- package/Rendering/Core/HardwareSelector.js +36 -69
- package/Rendering/Core/ImageArrayMapper.js +87 -126
- package/Rendering/Core/ImageCPRMapper.js +134 -209
- package/Rendering/Core/ImageMapper/Constants.js +2 -2
- package/Rendering/Core/ImageMapper.js +85 -144
- package/Rendering/Core/ImageProperty/Constants.js +2 -2
- package/Rendering/Core/ImageProperty.js +66 -81
- package/Rendering/Core/ImageResliceMapper/Constants.js +2 -2
- package/Rendering/Core/ImageResliceMapper.js +36 -29
- package/Rendering/Core/ImageSlice.js +85 -127
- package/Rendering/Core/InteractorObserver.js +82 -73
- package/Rendering/Core/InteractorStyle/Constants.js +2 -2
- package/Rendering/Core/InteractorStyle.js +56 -58
- package/Rendering/Core/Light.js +43 -49
- package/Rendering/Core/Mapper/CoincidentTopologyHelper.js +37 -48
- package/Rendering/Core/Mapper/Constants.js +6 -6
- package/Rendering/Core/Mapper/Static.js +15 -12
- package/Rendering/Core/Mapper.js +194 -259
- package/Rendering/Core/Mapper2D.js +61 -100
- package/Rendering/Core/Picker.js +124 -143
- package/Rendering/Core/PixelSpaceCallbackMapper.js +40 -37
- package/Rendering/Core/PointPicker.js +68 -79
- package/Rendering/Core/Prop/Constants.js +2 -2
- package/Rendering/Core/Prop.js +58 -106
- package/Rendering/Core/Prop3D.js +54 -83
- package/Rendering/Core/Property/Constants.js +6 -6
- package/Rendering/Core/Property.js +45 -74
- package/Rendering/Core/Property2D/Constants.js +2 -2
- package/Rendering/Core/Property2D.js +33 -42
- package/Rendering/Core/RenderWindow.js +70 -82
- package/Rendering/Core/RenderWindowInteractor/Constants.js +7 -7
- package/Rendering/Core/RenderWindowInteractor.js +324 -439
- package/Rendering/Core/Renderer.js +192 -256
- package/Rendering/Core/ScalarBarActor.js +267 -272
- package/Rendering/Core/Skybox.js +26 -24
- package/Rendering/Core/SphereMapper.js +22 -12
- package/Rendering/Core/StickMapper.js +22 -12
- package/Rendering/Core/SurfaceLICInterface/Constants.js +6 -6
- package/Rendering/Core/SurfaceLICInterface.js +13 -9
- package/Rendering/Core/SurfaceLICMapper.js +23 -15
- package/Rendering/Core/Texture.js +99 -141
- package/Rendering/Core/Viewport.js +60 -88
- package/Rendering/Core/Volume.js +55 -77
- package/Rendering/Core/VolumeMapper/Constants.js +4 -4
- package/Rendering/Core/VolumeMapper.js +59 -91
- package/Rendering/Core/VolumeProperty/Constants.js +4 -4
- package/Rendering/Core/VolumeProperty.js +78 -115
- package/Rendering/Core.js +47 -49
- package/Rendering/Misc/CanvasView.js +62 -61
- package/Rendering/Misc/FullScreenRenderWindow.js +60 -62
- package/Rendering/Misc/GenericRenderWindow.js +48 -37
- package/Rendering/Misc/RemoteView.js +86 -80
- package/Rendering/Misc/RenderWindowWithControlBar.js +54 -48
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager/CameraSynchronizer.js +43 -51
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager.js +52 -82
- package/Rendering/Misc/SynchronizableRenderWindow/ObjectManager.js +258 -308
- package/Rendering/Misc/SynchronizableRenderWindow.js +133 -163
- package/Rendering/Misc/TextureLODsDownloader.js +72 -74
- package/Rendering/Misc.js +7 -7
- package/Rendering/OpenGL/Actor.js +57 -68
- package/Rendering/OpenGL/Actor2D.js +56 -56
- package/Rendering/OpenGL/BufferObject/Constants.js +2 -2
- package/Rendering/OpenGL/BufferObject.js +50 -65
- package/Rendering/OpenGL/Camera.js +35 -29
- package/Rendering/OpenGL/CellArrayBufferObject.js +119 -149
- package/Rendering/OpenGL/Convolution2DPass.js +87 -81
- package/Rendering/OpenGL/CubeAxesActor.js +28 -21
- package/Rendering/OpenGL/ForwardPass.js +53 -64
- package/Rendering/OpenGL/Framebuffer.js +61 -101
- package/Rendering/OpenGL/Glyph3DMapper.js +165 -196
- package/Rendering/OpenGL/HardwareSelector/Constants.js +2 -2
- package/Rendering/OpenGL/HardwareSelector.js +272 -397
- package/Rendering/OpenGL/Helper.js +58 -73
- package/Rendering/OpenGL/ImageCPRMapper.js +339 -421
- package/Rendering/OpenGL/ImageMapper.js +268 -361
- package/Rendering/OpenGL/ImageResliceMapper.js +306 -438
- package/Rendering/OpenGL/ImageSlice.js +48 -54
- package/Rendering/OpenGL/OrderIndependentTranslucentPass.js +102 -84
- package/Rendering/OpenGL/PixelSpaceCallbackMapper.js +43 -42
- package/Rendering/OpenGL/PolyDataMapper.js +358 -492
- package/Rendering/OpenGL/PolyDataMapper2D.js +153 -205
- package/Rendering/OpenGL/RadialDistortionPass.js +86 -89
- package/Rendering/OpenGL/RenderWindow/Constants.js +2 -2
- package/Rendering/OpenGL/RenderWindow/ContextProxy.js +20 -29
- package/Rendering/OpenGL/RenderWindow.js +356 -510
- package/Rendering/OpenGL/Renderer.js +77 -89
- package/Rendering/OpenGL/ReplacementShaderMapper.js +28 -46
- package/Rendering/OpenGL/ScalarBarActor.js +28 -21
- package/Rendering/OpenGL/Shader.js +37 -31
- package/Rendering/OpenGL/ShaderCache.js +67 -74
- package/Rendering/OpenGL/ShaderProgram.js +136 -248
- package/Rendering/OpenGL/Skybox.js +99 -60
- package/Rendering/OpenGL/SphereMapper.js +94 -108
- package/Rendering/OpenGL/StickMapper.js +110 -114
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D/pingpong.js +91 -157
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D.js +142 -151
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICInterface.js +142 -216
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICMapper.js +79 -100
- package/Rendering/OpenGL/SurfaceLIC.js +2 -2
- package/Rendering/OpenGL/Texture/Constants.js +4 -4
- package/Rendering/OpenGL/Texture.js +443 -608
- package/Rendering/OpenGL/TextureUnitManager.js +47 -43
- package/Rendering/OpenGL/VertexArrayObject.js +92 -131
- package/Rendering/OpenGL/ViewNodeFactory.js +25 -13
- package/Rendering/OpenGL/Volume.js +38 -34
- package/Rendering/OpenGL/VolumeMapper.js +437 -547
- package/Rendering/OpenGL.js +28 -28
- package/Rendering/SceneGraph/RenderPass.js +34 -31
- package/Rendering/SceneGraph/RenderWindowViewNode.js +68 -94
- package/Rendering/SceneGraph/ViewNode.js +82 -111
- package/Rendering/SceneGraph/ViewNodeFactory.js +31 -26
- package/Rendering/SceneGraph.js +4 -4
- package/Rendering/WebGPU/Actor.js +49 -49
- package/Rendering/WebGPU/Actor2D.js +45 -44
- package/Rendering/WebGPU/BindGroup.js +43 -50
- package/Rendering/WebGPU/Buffer.js +41 -50
- package/Rendering/WebGPU/BufferManager/Constants.js +4 -4
- package/Rendering/WebGPU/BufferManager.js +111 -141
- package/Rendering/WebGPU/Camera.js +65 -67
- package/Rendering/WebGPU/CellArrayMapper.js +621 -388
- package/Rendering/WebGPU/CubeAxesActor.js +28 -19
- package/Rendering/WebGPU/Device.js +78 -133
- package/Rendering/WebGPU/ForwardPass.js +75 -72
- package/Rendering/WebGPU/FullScreenQuad.js +25 -18
- package/Rendering/WebGPU/Glyph3DMapper.js +62 -74
- package/Rendering/WebGPU/HardwareSelectionPass.js +45 -38
- package/Rendering/WebGPU/HardwareSelector.js +200 -276
- package/Rendering/WebGPU/ImageMapper.js +180 -171
- package/Rendering/WebGPU/ImageSlice.js +45 -44
- package/Rendering/WebGPU/IndexBuffer.js +166 -200
- package/Rendering/WebGPU/OpaquePass.js +37 -36
- package/Rendering/WebGPU/OrderIndependentTranslucentPass.js +72 -45
- package/Rendering/WebGPU/Pipeline.js +37 -51
- package/Rendering/WebGPU/PixelSpaceCallbackMapper.js +27 -19
- package/Rendering/WebGPU/PolyDataMapper.js +50 -53
- package/Rendering/WebGPU/PolyDataMapper2D.js +39 -39
- package/Rendering/WebGPU/RenderEncoder.js +68 -88
- package/Rendering/WebGPU/RenderWindow.js +262 -376
- package/Rendering/WebGPU/Renderer.js +224 -208
- package/Rendering/WebGPU/Sampler.js +27 -21
- package/Rendering/WebGPU/ScalarBarActor.js +28 -19
- package/Rendering/WebGPU/ShaderCache.js +43 -41
- package/Rendering/WebGPU/ShaderDescription.js +52 -59
- package/Rendering/WebGPU/ShaderModule.js +26 -17
- package/Rendering/WebGPU/SimpleMapper.js +185 -121
- package/Rendering/WebGPU/SphereMapper.js +200 -130
- package/Rendering/WebGPU/StickMapper.js +289 -152
- package/Rendering/WebGPU/StorageBuffer.js +100 -115
- package/Rendering/WebGPU/Texture.js +79 -99
- package/Rendering/WebGPU/TextureManager.js +52 -54
- package/Rendering/WebGPU/TextureView.js +40 -43
- package/Rendering/WebGPU/Types.js +53 -70
- package/Rendering/WebGPU/UniformBuffer.js +158 -184
- package/Rendering/WebGPU/VertexInput.js +64 -90
- package/Rendering/WebGPU/ViewNodeFactory.js +25 -13
- package/Rendering/WebGPU/Volume.js +52 -51
- package/Rendering/WebGPU/VolumePass.js +218 -239
- package/Rendering/WebGPU/VolumePassFSQ.js +625 -306
- package/Rendering/WebGPU.js +1 -1
- package/Rendering/index.js +5 -5
- package/Widgets/Core/AbstractWidget/Constants.js +2 -2
- package/Widgets/Core/AbstractWidget.js +49 -58
- package/Widgets/Core/AbstractWidgetFactory.js +101 -122
- package/Widgets/Core/StateBuilder/boundsMixin.js +23 -28
- package/Widgets/Core/StateBuilder/color3Mixin.js +10 -7
- package/Widgets/Core/StateBuilder/colorMixin.js +10 -6
- package/Widgets/Core/StateBuilder/cornerMixin.js +16 -15
- package/Widgets/Core/StateBuilder/directionMixin.js +20 -18
- package/Widgets/Core/StateBuilder/manipulatorMixin.js +26 -18
- package/Widgets/Core/StateBuilder/nameMixin.js +10 -6
- package/Widgets/Core/StateBuilder/orientationMixin.js +19 -16
- package/Widgets/Core/StateBuilder/originMixin.js +25 -32
- package/Widgets/Core/StateBuilder/scale1Mixin.js +10 -6
- package/Widgets/Core/StateBuilder/scale3Mixin.js +10 -6
- package/Widgets/Core/StateBuilder/shapeMixin.js +12 -6
- package/Widgets/Core/StateBuilder/textMixin.js +10 -6
- package/Widgets/Core/StateBuilder/visibleMixin.js +10 -6
- package/Widgets/Core/StateBuilder.js +120 -149
- package/Widgets/Core/WidgetManager/Constants.js +7 -7
- package/Widgets/Core/WidgetManager.js +249 -421
- package/Widgets/Core/WidgetState.js +48 -57
- package/Widgets/Core.js +5 -5
- package/Widgets/Manipulators/AbstractManipulator.js +20 -14
- package/Widgets/Manipulators/CPRManipulator.js +55 -71
- package/Widgets/Manipulators/LineManipulator.js +31 -28
- package/Widgets/Manipulators/PickerManipulator.d.ts +48 -0
- package/Widgets/Manipulators/PickerManipulator.js +65 -0
- package/Widgets/Manipulators/PlaneManipulator.js +26 -23
- package/Widgets/Manipulators/TrackballManipulator.js +39 -35
- package/Widgets/Manipulators.js +4 -2
- package/Widgets/Representations/ArrowHandleRepresentation.js +148 -162
- package/Widgets/Representations/CircleContextRepresentation.js +44 -38
- package/Widgets/Representations/ContextRepresentation.js +17 -14
- package/Widgets/Representations/ConvexFaceContextRepresentation.js +50 -47
- package/Widgets/Representations/CroppingOutlineRepresentation.js +38 -27
- package/Widgets/Representations/CubeHandleRepresentation.js +21 -18
- package/Widgets/Representations/GlyphRepresentation.js +107 -152
- package/Widgets/Representations/HandleRepresentation.js +17 -14
- package/Widgets/Representations/ImplicitPlaneRepresentation.js +97 -91
- package/Widgets/Representations/LineHandleRepresentation.js +44 -41
- package/Widgets/Representations/OutlineContextRepresentation.js +42 -36
- package/Widgets/Representations/PolyLineRepresentation.js +60 -75
- package/Widgets/Representations/RectangleContextRepresentation.js +42 -37
- package/Widgets/Representations/SphereContextRepresentation.js +19 -27
- package/Widgets/Representations/SphereHandleRepresentation.js +31 -27
- package/Widgets/Representations/SplineContextRepresentation.js +46 -70
- package/Widgets/Representations/WidgetRepresentation/Constants.js +2 -2
- package/Widgets/Representations/WidgetRepresentation.js +99 -134
- package/Widgets/Representations.js +13 -13
- package/Widgets/Widgets3D/AngleWidget/behavior.js +41 -63
- package/Widgets/Widgets3D/AngleWidget.js +40 -38
- package/Widgets/Widgets3D/DistanceWidget/behavior.js +40 -61
- package/Widgets/Widgets3D/DistanceWidget.js +38 -36
- package/Widgets/Widgets3D/EllipseWidget/behavior.js +14 -19
- package/Widgets/Widgets3D/EllipseWidget/state.js +4 -2
- package/Widgets/Widgets3D/EllipseWidget.js +37 -26
- package/Widgets/Widgets3D/ImageCroppingWidget/behavior.js +26 -56
- package/Widgets/Widgets3D/ImageCroppingWidget/helpers.js +14 -17
- package/Widgets/Widgets3D/ImageCroppingWidget/state.js +20 -16
- package/Widgets/Widgets3D/ImageCroppingWidget.js +80 -98
- package/Widgets/Widgets3D/ImplicitPlaneWidget.js +55 -77
- package/Widgets/Widgets3D/InteractiveOrientationWidget/behavior.js +17 -18
- package/Widgets/Widgets3D/InteractiveOrientationWidget/state.js +15 -7
- package/Widgets/Widgets3D/InteractiveOrientationWidget.js +30 -29
- package/Widgets/Widgets3D/LabelWidget/behavior.js +37 -62
- package/Widgets/Widgets3D/LabelWidget.js +31 -25
- package/Widgets/Widgets3D/LineWidget/Constants.js +8 -8
- package/Widgets/Widgets3D/LineWidget/behavior.js +77 -114
- package/Widgets/Widgets3D/LineWidget/helpers.js +13 -20
- package/Widgets/Widgets3D/LineWidget/state.js +2 -1
- package/Widgets/Widgets3D/LineWidget.js +39 -35
- package/Widgets/Widgets3D/PaintWidget/behavior.js +24 -59
- package/Widgets/Widgets3D/PaintWidget.js +39 -37
- package/Widgets/Widgets3D/PolyLineWidget/behavior.js +44 -68
- package/Widgets/Widgets3D/PolyLineWidget.js +36 -31
- package/Widgets/Widgets3D/RectangleWidget/behavior.js +6 -11
- package/Widgets/Widgets3D/RectangleWidget/state.js +4 -2
- package/Widgets/Widgets3D/RectangleWidget.js +37 -25
- package/Widgets/Widgets3D/ResliceCursorWidget/Constants.js +35 -21
- package/Widgets/Widgets3D/ResliceCursorWidget/behavior.js +133 -209
- package/Widgets/Widgets3D/ResliceCursorWidget/cprBehavior.js +26 -41
- package/Widgets/Widgets3D/ResliceCursorWidget/helpers.js +89 -116
- package/Widgets/Widgets3D/ResliceCursorWidget/state.js +33 -40
- package/Widgets/Widgets3D/ResliceCursorWidget.js +186 -227
- package/Widgets/Widgets3D/SeedWidget/behavior.js +82 -0
- package/Widgets/Widgets3D/SeedWidget/state.js +18 -0
- package/Widgets/Widgets3D/SeedWidget.d.ts +44 -0
- package/Widgets/Widgets3D/SeedWidget.js +43 -0
- package/Widgets/Widgets3D/ShapeWidget/Constants.js +19 -19
- package/Widgets/Widgets3D/ShapeWidget/behavior.js +150 -252
- package/Widgets/Widgets3D/ShapeWidget.js +24 -27
- package/Widgets/Widgets3D/SphereWidget/behavior.js +35 -69
- package/Widgets/Widgets3D/SphereWidget/state.js +9 -5
- package/Widgets/Widgets3D/SphereWidget.js +34 -44
- package/Widgets/Widgets3D/SplineWidget/behavior.js +85 -120
- package/Widgets/Widgets3D/SplineWidget.js +43 -39
- package/Widgets/Widgets3D.js +15 -15
- package/Widgets/index.js +4 -4
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Filters/General/PaintFilter/PaintFilter.worker.js +95 -207
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +0 -3
- package/favicon.js +5 -6
- package/index.d.ts +4 -2
- package/index.js +4 -3
- package/macros.js +4 -1931
- package/macros2.js +1684 -0
- package/package.json +6 -6
- package/vtk.js +18 -31
|
@@ -1,52 +1,47 @@
|
|
|
1
|
-
import
|
|
2
|
-
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
3
|
-
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
4
|
-
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
5
|
-
import macro from '../../macros.js';
|
|
1
|
+
import { m as macro } from '../../macros2.js';
|
|
6
2
|
import Constants from './HardwareSelector/Constants.js';
|
|
7
3
|
import vtkHardwareSelector$1 from '../Core/HardwareSelector.js';
|
|
8
4
|
import vtkOpenGLFramebuffer from './Framebuffer.js';
|
|
9
5
|
import vtkSelectionNode from '../../Common/DataModel/SelectionNode.js';
|
|
10
6
|
import vtkDataSet from '../../Common/DataModel/DataSet.js';
|
|
11
7
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
const {
|
|
9
|
+
PassTypes
|
|
10
|
+
} = Constants;
|
|
11
|
+
const {
|
|
12
|
+
SelectionContent,
|
|
13
|
+
SelectionField
|
|
14
|
+
} = vtkSelectionNode;
|
|
15
|
+
const {
|
|
16
|
+
FieldAssociations
|
|
17
|
+
} = vtkDataSet;
|
|
18
|
+
const {
|
|
19
|
+
vtkErrorMacro
|
|
20
|
+
} = macro;
|
|
21
|
+
const idOffset = 1;
|
|
22
22
|
function getInfoHash(info) {
|
|
23
|
-
return
|
|
23
|
+
return `${info.propID} ${info.compositeID}`;
|
|
24
24
|
}
|
|
25
|
-
|
|
26
25
|
function getAlpha(xx, yy, pb, area) {
|
|
27
26
|
if (!pb) {
|
|
28
27
|
return 0;
|
|
29
28
|
}
|
|
30
|
-
|
|
31
|
-
var offset = (yy * (area[2] - area[0] + 1) + xx) * 4;
|
|
29
|
+
const offset = (yy * (area[2] - area[0] + 1) + xx) * 4;
|
|
32
30
|
return pb[offset + 3];
|
|
33
31
|
}
|
|
34
|
-
|
|
35
32
|
function convert(xx, yy, pb, area) {
|
|
36
33
|
if (!pb) {
|
|
37
34
|
return 0;
|
|
38
35
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
var b = pb[offset + 2];
|
|
36
|
+
const offset = (yy * (area[2] - area[0] + 1) + xx) * 4;
|
|
37
|
+
const r = pb[offset];
|
|
38
|
+
const g = pb[offset + 1];
|
|
39
|
+
const b = pb[offset + 2];
|
|
44
40
|
return (b * 256 + g) * 256 + r;
|
|
45
41
|
}
|
|
46
|
-
|
|
47
42
|
function getID(low24, high8) {
|
|
48
43
|
/* eslint-disable no-bitwise */
|
|
49
|
-
|
|
44
|
+
let val = high8;
|
|
50
45
|
val <<= 24;
|
|
51
46
|
val |= low24;
|
|
52
47
|
return val;
|
|
@@ -55,187 +50,156 @@ function getID(low24, high8) {
|
|
|
55
50
|
|
|
56
51
|
function getPixelInformationWithData(buffdata, inDisplayPosition, maxDistance, outSelectedPosition) {
|
|
57
52
|
// Base case
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
const maxDist = maxDistance < 0 ? 0 : maxDistance;
|
|
60
54
|
if (maxDist === 0) {
|
|
61
55
|
outSelectedPosition[0] = inDisplayPosition[0];
|
|
62
56
|
outSelectedPosition[1] = inDisplayPosition[1];
|
|
63
|
-
|
|
64
57
|
if (inDisplayPosition[0] < buffdata.area[0] || inDisplayPosition[0] > buffdata.area[2] || inDisplayPosition[1] < buffdata.area[1] || inDisplayPosition[1] > buffdata.area[3]) {
|
|
65
58
|
return null;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
var displayPosition = [inDisplayPosition[0] - buffdata.area[0], inDisplayPosition[1] - buffdata.area[1]];
|
|
70
|
-
var actorid = convert(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.ACTOR_PASS], buffdata.area);
|
|
59
|
+
}
|
|
71
60
|
|
|
61
|
+
// offset inDisplayPosition based on the lower-left-corner of the Area.
|
|
62
|
+
const displayPosition = [inDisplayPosition[0] - buffdata.area[0], inDisplayPosition[1] - buffdata.area[1]];
|
|
63
|
+
const actorid = convert(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.ACTOR_PASS], buffdata.area);
|
|
72
64
|
if (actorid <= 0 || actorid - idOffset >= buffdata.props.length) {
|
|
73
65
|
// the pixel did not hit any actor.
|
|
74
66
|
return null;
|
|
75
67
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
var compositeID = convert(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.COMPOSITE_INDEX_PASS], buffdata.area);
|
|
82
|
-
|
|
68
|
+
const info = {};
|
|
69
|
+
info.valid = true;
|
|
70
|
+
info.propID = actorid - idOffset;
|
|
71
|
+
info.prop = buffdata.props[info.propID];
|
|
72
|
+
let compositeID = convert(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.COMPOSITE_INDEX_PASS], buffdata.area);
|
|
83
73
|
if (compositeID < 0 || compositeID > 0xffffff) {
|
|
84
74
|
compositeID = 0;
|
|
85
75
|
}
|
|
86
|
-
|
|
87
|
-
_info.compositeID = compositeID - idOffset;
|
|
88
|
-
|
|
76
|
+
info.compositeID = compositeID - idOffset;
|
|
89
77
|
if (buffdata.captureZValues) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
78
|
+
const offset = (displayPosition[1] * (buffdata.area[2] - buffdata.area[0] + 1) + displayPosition[0]) * 4;
|
|
79
|
+
info.zValue = (256 * buffdata.zBuffer[offset] + buffdata.zBuffer[offset + 1]) / 65535.0;
|
|
80
|
+
info.displayPosition = inDisplayPosition;
|
|
93
81
|
}
|
|
94
|
-
|
|
95
82
|
if (buffdata.pixBuffer[PassTypes.ID_LOW24]) {
|
|
96
83
|
if (getAlpha(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.ID_LOW24], buffdata.area) === 0.0) {
|
|
97
|
-
return
|
|
84
|
+
return info;
|
|
98
85
|
}
|
|
99
86
|
}
|
|
87
|
+
const low24 = convert(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.ID_LOW24], buffdata.area);
|
|
88
|
+
const high24 = convert(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.ID_HIGH24], buffdata.area);
|
|
89
|
+
info.attributeID = getID(low24, high24);
|
|
90
|
+
return info;
|
|
91
|
+
}
|
|
100
92
|
|
|
101
|
-
|
|
102
|
-
var high24 = convert(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.ID_HIGH24], buffdata.area);
|
|
103
|
-
_info.attributeID = getID(low24, high24);
|
|
104
|
-
return _info;
|
|
105
|
-
} // Iterate over successively growing boxes.
|
|
93
|
+
// Iterate over successively growing boxes.
|
|
106
94
|
// They recursively call the base case to handle single pixels.
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
var curPos = [0, 0];
|
|
111
|
-
var info = getPixelInformationWithData(buffdata, inDisplayPosition, 0, outSelectedPosition);
|
|
112
|
-
|
|
95
|
+
const dispPos = [inDisplayPosition[0], inDisplayPosition[1]];
|
|
96
|
+
const curPos = [0, 0];
|
|
97
|
+
let info = getPixelInformationWithData(buffdata, inDisplayPosition, 0, outSelectedPosition);
|
|
113
98
|
if (info && info.valid) {
|
|
114
99
|
return info;
|
|
115
100
|
}
|
|
116
|
-
|
|
117
|
-
for (var dist = 1; dist < maxDist; ++dist) {
|
|
101
|
+
for (let dist = 1; dist < maxDist; ++dist) {
|
|
118
102
|
// Vertical sides of box.
|
|
119
|
-
for (
|
|
103
|
+
for (let y = dispPos[1] > dist ? dispPos[1] - dist : 0; y <= dispPos[1] + dist; ++y) {
|
|
120
104
|
curPos[1] = y;
|
|
121
|
-
|
|
122
105
|
if (dispPos[0] >= dist) {
|
|
123
106
|
curPos[0] = dispPos[0] - dist;
|
|
124
107
|
info = getPixelInformationWithData(buffdata, curPos, 0, outSelectedPosition);
|
|
125
|
-
|
|
126
108
|
if (info && info.valid) {
|
|
127
109
|
return info;
|
|
128
110
|
}
|
|
129
111
|
}
|
|
130
|
-
|
|
131
112
|
curPos[0] = dispPos[0] + dist;
|
|
132
113
|
info = getPixelInformationWithData(buffdata, curPos, 0, outSelectedPosition);
|
|
133
|
-
|
|
134
114
|
if (info && info.valid) {
|
|
135
115
|
return info;
|
|
136
116
|
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
for (var x = dispPos[0] >= dist ? dispPos[0] - (dist - 1) : 0; x <= dispPos[0] + (dist - 1); ++x) {
|
|
117
|
+
}
|
|
118
|
+
// Horizontal sides of box.
|
|
119
|
+
for (let x = dispPos[0] >= dist ? dispPos[0] - (dist - 1) : 0; x <= dispPos[0] + (dist - 1); ++x) {
|
|
141
120
|
curPos[0] = x;
|
|
142
|
-
|
|
143
121
|
if (dispPos[1] >= dist) {
|
|
144
122
|
curPos[1] = dispPos[1] - dist;
|
|
145
123
|
info = getPixelInformationWithData(buffdata, curPos, 0, outSelectedPosition);
|
|
146
|
-
|
|
147
124
|
if (info && info.valid) {
|
|
148
125
|
return info;
|
|
149
126
|
}
|
|
150
127
|
}
|
|
151
|
-
|
|
152
128
|
curPos[1] = dispPos[1] + dist;
|
|
153
129
|
info = getPixelInformationWithData(buffdata, curPos, 0, outSelectedPosition);
|
|
154
|
-
|
|
155
130
|
if (info && info.valid) {
|
|
156
131
|
return info;
|
|
157
132
|
}
|
|
158
133
|
}
|
|
159
|
-
}
|
|
160
|
-
|
|
134
|
+
}
|
|
161
135
|
|
|
136
|
+
// nothing hit.
|
|
162
137
|
outSelectedPosition[0] = inDisplayPosition[0];
|
|
163
138
|
outSelectedPosition[1] = inDisplayPosition[1];
|
|
164
139
|
return null;
|
|
165
|
-
}
|
|
166
|
-
|
|
140
|
+
}
|
|
167
141
|
|
|
142
|
+
//-----------------------------------------------------------------------------
|
|
168
143
|
function convertSelection(fieldassociation, dataMap, captureZValues, renderer, openGLRenderWindow) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
dataMap.forEach(
|
|
172
|
-
|
|
144
|
+
const sel = [];
|
|
145
|
+
let count = 0;
|
|
146
|
+
dataMap.forEach((value, key) => {
|
|
147
|
+
const child = vtkSelectionNode.newInstance();
|
|
173
148
|
child.setContentType(SelectionContent.INDICES);
|
|
174
|
-
|
|
175
149
|
switch (fieldassociation) {
|
|
176
150
|
case FieldAssociations.FIELD_ASSOCIATION_CELLS:
|
|
177
151
|
child.setFieldType(SelectionField.CELL);
|
|
178
152
|
break;
|
|
179
|
-
|
|
180
153
|
case FieldAssociations.FIELD_ASSOCIATION_POINTS:
|
|
181
154
|
child.setFieldType(SelectionField.POINT);
|
|
182
155
|
break;
|
|
183
|
-
|
|
184
156
|
default:
|
|
185
157
|
vtkErrorMacro('Unknown field association');
|
|
186
158
|
}
|
|
187
|
-
|
|
188
159
|
child.getProperties().propID = value.info.propID;
|
|
189
160
|
child.getProperties().prop = value.info.prop;
|
|
190
161
|
child.getProperties().compositeID = value.info.compositeID;
|
|
191
162
|
child.getProperties().attributeID = value.info.attributeID;
|
|
192
163
|
child.getProperties().pixelCount = value.pixelCount;
|
|
193
|
-
|
|
194
164
|
if (captureZValues) {
|
|
195
165
|
child.getProperties().displayPosition = [value.info.displayPosition[0], value.info.displayPosition[1], value.info.zValue];
|
|
196
166
|
child.getProperties().worldPosition = openGLRenderWindow.displayToWorld(value.info.displayPosition[0], value.info.displayPosition[1], value.info.zValue, renderer);
|
|
197
167
|
}
|
|
198
|
-
|
|
199
168
|
child.setSelectionList(value.attributeIDs);
|
|
200
169
|
sel[count] = child;
|
|
201
170
|
count++;
|
|
202
171
|
});
|
|
203
172
|
return sel;
|
|
204
|
-
}
|
|
205
|
-
|
|
173
|
+
}
|
|
206
174
|
|
|
175
|
+
//----------------------------------------------------------------------------
|
|
207
176
|
function generateSelectionWithData(buffdata, fx1, fy1, fx2, fy2) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
var info = getPixelInformationWithData(buffdata, pos, 0, outSelectedPosition);
|
|
219
|
-
|
|
177
|
+
const x1 = Math.floor(fx1);
|
|
178
|
+
const y1 = Math.floor(fy1);
|
|
179
|
+
const x2 = Math.floor(fx2);
|
|
180
|
+
const y2 = Math.floor(fy2);
|
|
181
|
+
const dataMap = new Map();
|
|
182
|
+
const outSelectedPosition = [0, 0];
|
|
183
|
+
for (let yy = y1; yy <= y2; yy++) {
|
|
184
|
+
for (let xx = x1; xx <= x2; xx++) {
|
|
185
|
+
const pos = [xx, yy];
|
|
186
|
+
const info = getPixelInformationWithData(buffdata, pos, 0, outSelectedPosition);
|
|
220
187
|
if (info && info.valid) {
|
|
221
|
-
|
|
222
|
-
|
|
188
|
+
const hash = getInfoHash(info);
|
|
223
189
|
if (!dataMap.has(hash)) {
|
|
224
190
|
dataMap.set(hash, {
|
|
225
|
-
info
|
|
191
|
+
info,
|
|
226
192
|
pixelCount: 1,
|
|
227
193
|
attributeIDs: [info.attributeID]
|
|
228
194
|
});
|
|
229
195
|
} else {
|
|
230
|
-
|
|
196
|
+
const dmv = dataMap.get(hash);
|
|
231
197
|
dmv.pixelCount++;
|
|
232
|
-
|
|
233
198
|
if (buffdata.captureZValues) {
|
|
234
199
|
if (info.zValue < dmv.info.zValue) {
|
|
235
200
|
dmv.info = info;
|
|
236
201
|
}
|
|
237
202
|
}
|
|
238
|
-
|
|
239
203
|
if (dmv.attributeIDs.indexOf(info.attributeID) === -1) {
|
|
240
204
|
dmv.attributeIDs.push(info.attributeID);
|
|
241
205
|
}
|
|
@@ -243,505 +207,416 @@ function generateSelectionWithData(buffdata, fx1, fy1, fx2, fy2) {
|
|
|
243
207
|
}
|
|
244
208
|
}
|
|
245
209
|
}
|
|
246
|
-
|
|
247
210
|
return convertSelection(buffdata.fieldAssociation, dataMap, buffdata.captureZValues, buffdata.renderer, buffdata.openGLRenderWindow);
|
|
248
|
-
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// ----------------------------------------------------------------------------
|
|
249
214
|
// vtkOpenGLHardwareSelector methods
|
|
250
215
|
// ----------------------------------------------------------------------------
|
|
251
216
|
|
|
252
|
-
|
|
253
217
|
function vtkOpenGLHardwareSelector(publicAPI, model) {
|
|
254
218
|
// Set our className
|
|
255
|
-
model.classHierarchy.push('vtkOpenGLHardwareSelector');
|
|
219
|
+
model.classHierarchy.push('vtkOpenGLHardwareSelector');
|
|
256
220
|
|
|
257
|
-
|
|
221
|
+
//----------------------------------------------------------------------------
|
|
222
|
+
publicAPI.releasePixBuffers = () => {
|
|
258
223
|
model.rawPixBuffer = [];
|
|
259
224
|
model.pixBuffer = [];
|
|
260
225
|
model.zBuffer = null;
|
|
261
|
-
};
|
|
262
|
-
|
|
226
|
+
};
|
|
263
227
|
|
|
264
|
-
|
|
228
|
+
//----------------------------------------------------------------------------
|
|
229
|
+
publicAPI.beginSelection = () => {
|
|
265
230
|
model._openGLRenderer = model._openGLRenderWindow.getViewNodeFor(model._renderer);
|
|
266
231
|
model.maxAttributeId = 0;
|
|
267
|
-
|
|
268
|
-
var size = model._openGLRenderWindow.getSize();
|
|
269
|
-
|
|
232
|
+
const size = model._openGLRenderWindow.getSize();
|
|
270
233
|
if (!model.framebuffer) {
|
|
271
234
|
model.framebuffer = vtkOpenGLFramebuffer.newInstance();
|
|
272
235
|
model.framebuffer.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
273
236
|
model.framebuffer.saveCurrentBindingsAndBuffers();
|
|
274
|
-
model.framebuffer.create(size[0], size[1]);
|
|
275
|
-
|
|
237
|
+
model.framebuffer.create(size[0], size[1]);
|
|
238
|
+
// this calls model.framebuffer.bind()
|
|
276
239
|
model.framebuffer.populateFramebuffer();
|
|
277
240
|
} else {
|
|
278
241
|
model.framebuffer.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
279
242
|
model.framebuffer.saveCurrentBindingsAndBuffers();
|
|
280
|
-
|
|
281
|
-
|
|
243
|
+
const fbSize = model.framebuffer.getSize();
|
|
282
244
|
if (fbSize[0] !== size[0] || fbSize[1] !== size[1]) {
|
|
283
|
-
model.framebuffer.create(size[0], size[1]);
|
|
284
|
-
|
|
245
|
+
model.framebuffer.create(size[0], size[1]);
|
|
246
|
+
// this calls model.framebuffer.bind()
|
|
285
247
|
model.framebuffer.populateFramebuffer();
|
|
286
248
|
} else {
|
|
287
249
|
model.framebuffer.bind();
|
|
288
250
|
}
|
|
289
251
|
}
|
|
290
|
-
|
|
291
252
|
model._openGLRenderer.clear();
|
|
292
|
-
|
|
293
253
|
model._openGLRenderer.setSelector(publicAPI);
|
|
294
|
-
|
|
295
254
|
model.hitProps = {};
|
|
296
255
|
model.propPixels = {};
|
|
297
256
|
model.props = [];
|
|
298
257
|
publicAPI.releasePixBuffers();
|
|
299
|
-
|
|
300
258
|
if (model.fieldAssociation === FieldAssociations.FIELD_ASSOCIATION_POINTS) {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
var originalBlending = gl.isEnabled(gl.BLEND);
|
|
259
|
+
const gl = model._openGLRenderWindow.getContext();
|
|
260
|
+
const originalBlending = gl.isEnabled(gl.BLEND);
|
|
304
261
|
gl.disable(gl.BLEND);
|
|
305
|
-
|
|
306
262
|
model._openGLRenderWindow.traverseAllPasses();
|
|
307
|
-
|
|
308
263
|
if (originalBlending) {
|
|
309
264
|
gl.enable(gl.BLEND);
|
|
310
265
|
}
|
|
311
266
|
}
|
|
312
|
-
};
|
|
313
|
-
|
|
267
|
+
};
|
|
314
268
|
|
|
315
|
-
|
|
269
|
+
//----------------------------------------------------------------------------
|
|
270
|
+
publicAPI.endSelection = () => {
|
|
316
271
|
model.hitProps = {};
|
|
317
|
-
|
|
318
272
|
model._openGLRenderer.setSelector(null);
|
|
319
|
-
|
|
320
273
|
model.framebuffer.restorePreviousBindingsAndBuffers();
|
|
321
274
|
};
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
275
|
+
publicAPI.preCapturePass = () => {
|
|
276
|
+
const gl = model._openGLRenderWindow.getContext();
|
|
277
|
+
// Disable blending
|
|
327
278
|
model.originalBlending = gl.isEnabled(gl.BLEND);
|
|
328
279
|
gl.disable(gl.BLEND);
|
|
329
280
|
};
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
281
|
+
publicAPI.postCapturePass = () => {
|
|
282
|
+
const gl = model._openGLRenderWindow.getContext();
|
|
283
|
+
// Restore blending if it was enabled prior to the capture
|
|
335
284
|
if (model.originalBlending) {
|
|
336
285
|
gl.enable(gl.BLEND);
|
|
337
286
|
}
|
|
338
|
-
};
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
publicAPI.select = function () {
|
|
342
|
-
var sel = null;
|
|
287
|
+
};
|
|
343
288
|
|
|
289
|
+
//----------------------------------------------------------------------------
|
|
290
|
+
publicAPI.select = () => {
|
|
291
|
+
let sel = null;
|
|
344
292
|
if (publicAPI.captureBuffers()) {
|
|
345
293
|
sel = publicAPI.generateSelection(model.area[0], model.area[1], model.area[2], model.area[3]);
|
|
346
294
|
publicAPI.releasePixBuffers();
|
|
347
295
|
}
|
|
348
|
-
|
|
349
296
|
return sel;
|
|
350
297
|
};
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
return _context.abrupt("return", false);
|
|
376
|
-
|
|
377
|
-
case 4:
|
|
378
|
-
result = {
|
|
379
|
-
area: _toConsumableArray(model.area),
|
|
380
|
-
pixBuffer: _toConsumableArray(model.pixBuffer),
|
|
381
|
-
captureZValues: model.captureZValues,
|
|
382
|
-
zBuffer: model.zBuffer,
|
|
383
|
-
props: _toConsumableArray(model.props),
|
|
384
|
-
fieldAssociation: model.fieldAssociation,
|
|
385
|
-
renderer: renderer,
|
|
386
|
-
openGLRenderWindow: model._openGLRenderWindow
|
|
387
|
-
};
|
|
388
|
-
|
|
389
|
-
result.generateSelection = function () {
|
|
390
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
391
|
-
args[_key] = arguments[_key];
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
return generateSelectionWithData.apply(void 0, [result].concat(args));
|
|
395
|
-
};
|
|
396
|
-
|
|
397
|
-
return _context.abrupt("return", result);
|
|
398
|
-
|
|
399
|
-
case 7:
|
|
400
|
-
case "end":
|
|
401
|
-
return _context.stop();
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
}, _callee);
|
|
405
|
-
}));
|
|
406
|
-
|
|
407
|
-
return function (_x, _x2, _x3, _x4, _x5) {
|
|
408
|
-
return _ref.apply(this, arguments);
|
|
298
|
+
publicAPI.getSourceDataAsync = async (renderer, fx1, fy1, fx2, fy2) => {
|
|
299
|
+
// assign the renderer
|
|
300
|
+
model._renderer = renderer;
|
|
301
|
+
|
|
302
|
+
// set area to all if no arguments provided
|
|
303
|
+
if (fx1 === undefined) {
|
|
304
|
+
const size = model._openGLRenderWindow.getSize();
|
|
305
|
+
publicAPI.setArea(0, 0, size[0] - 1, size[1] - 1);
|
|
306
|
+
} else {
|
|
307
|
+
publicAPI.setArea(fx1, fy1, fx2, fy2);
|
|
308
|
+
}
|
|
309
|
+
// just do capture buffers and package up the result
|
|
310
|
+
if (!publicAPI.captureBuffers()) {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
const result = {
|
|
314
|
+
area: [...model.area],
|
|
315
|
+
pixBuffer: [...model.pixBuffer],
|
|
316
|
+
captureZValues: model.captureZValues,
|
|
317
|
+
zBuffer: model.zBuffer,
|
|
318
|
+
props: [...model.props],
|
|
319
|
+
fieldAssociation: model.fieldAssociation,
|
|
320
|
+
renderer,
|
|
321
|
+
openGLRenderWindow: model._openGLRenderWindow
|
|
409
322
|
};
|
|
410
|
-
|
|
411
|
-
|
|
323
|
+
result.generateSelection = function () {
|
|
324
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
325
|
+
args[_key] = arguments[_key];
|
|
326
|
+
}
|
|
327
|
+
return generateSelectionWithData(result, ...args);
|
|
328
|
+
};
|
|
329
|
+
return result;
|
|
330
|
+
};
|
|
412
331
|
|
|
413
|
-
|
|
332
|
+
//----------------------------------------------------------------------------
|
|
333
|
+
publicAPI.captureBuffers = () => {
|
|
414
334
|
if (!model._renderer || !model._openGLRenderWindow) {
|
|
415
335
|
vtkErrorMacro('Renderer and view must be set before calling Select.');
|
|
416
336
|
return false;
|
|
417
337
|
}
|
|
338
|
+
model._openGLRenderer = model._openGLRenderWindow.getViewNodeFor(model._renderer);
|
|
418
339
|
|
|
419
|
-
|
|
340
|
+
// todo revisit making selection part of core
|
|
420
341
|
// then we can do this in core
|
|
342
|
+
model._openGLRenderWindow.getRenderable().preRender();
|
|
421
343
|
|
|
422
|
-
|
|
344
|
+
// int rgba[4];
|
|
423
345
|
// rwin.getColorBufferSizes(rgba);
|
|
424
346
|
// if (rgba[0] < 8 || rgba[1] < 8 || rgba[2] < 8) {
|
|
425
347
|
// vtkErrorMacro("Color buffer depth must be at least 8 bit. "
|
|
426
348
|
// "Currently: " << rgba[0] << ", " << rgba[1] << ", " <<rgba[2]);
|
|
427
349
|
// return false;
|
|
428
350
|
// }
|
|
429
|
-
|
|
430
|
-
|
|
431
351
|
publicAPI.invokeEvent({
|
|
432
352
|
type: 'StartEvent'
|
|
433
|
-
});
|
|
434
|
-
// change the renderer's background to black, which will indicate a miss
|
|
353
|
+
});
|
|
435
354
|
|
|
355
|
+
// Initialize renderer for selection.
|
|
356
|
+
// change the renderer's background to black, which will indicate a miss
|
|
436
357
|
model.originalBackground = model._renderer.getBackgroundByReference();
|
|
437
|
-
|
|
438
358
|
model._renderer.setBackground(0.0, 0.0, 0.0, 0.0);
|
|
439
|
-
|
|
440
|
-
var rpasses = model._openGLRenderWindow.getRenderPasses();
|
|
441
|
-
|
|
359
|
+
const rpasses = model._openGLRenderWindow.getRenderPasses();
|
|
442
360
|
publicAPI.beginSelection();
|
|
443
|
-
|
|
444
361
|
for (model.currentPass = PassTypes.MIN_KNOWN_PASS; model.currentPass <= PassTypes.MAX_KNOWN_PASS; model.currentPass++) {
|
|
445
362
|
if (publicAPI.passRequired(model.currentPass)) {
|
|
446
363
|
publicAPI.preCapturePass(model.currentPass);
|
|
447
|
-
|
|
448
364
|
if (model.captureZValues && model.currentPass === PassTypes.ACTOR_PASS && typeof rpasses[0].requestDepth === 'function' && typeof rpasses[0].getFramebuffer === 'function') {
|
|
449
365
|
rpasses[0].requestDepth();
|
|
450
|
-
|
|
451
366
|
model._openGLRenderWindow.traverseAllPasses();
|
|
452
367
|
} else {
|
|
453
368
|
model._openGLRenderWindow.traverseAllPasses();
|
|
454
369
|
}
|
|
455
|
-
|
|
456
370
|
publicAPI.postCapturePass(model.currentPass);
|
|
457
371
|
publicAPI.savePixelBuffer(model.currentPass);
|
|
458
372
|
publicAPI.processPixelBuffers();
|
|
459
373
|
}
|
|
460
374
|
}
|
|
375
|
+
publicAPI.endSelection();
|
|
461
376
|
|
|
462
|
-
|
|
463
|
-
|
|
377
|
+
// restore original background
|
|
464
378
|
model._renderer.setBackground(model.originalBackground);
|
|
465
|
-
|
|
466
379
|
publicAPI.invokeEvent({
|
|
467
380
|
type: 'EndEvent'
|
|
468
|
-
});
|
|
469
|
-
// model._openGLRenderWindow.traverseAllPasses();
|
|
381
|
+
});
|
|
470
382
|
|
|
383
|
+
// restore image, not needed?
|
|
384
|
+
// model._openGLRenderWindow.traverseAllPasses();
|
|
471
385
|
return true;
|
|
472
386
|
};
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
model.props.forEach(function (prop, index) {
|
|
387
|
+
publicAPI.processPixelBuffers = () => {
|
|
388
|
+
model.props.forEach((prop, index) => {
|
|
476
389
|
if (publicAPI.isPropHit(index)) {
|
|
477
390
|
prop.processSelectorPixelBuffers(publicAPI, model.propPixels[index]);
|
|
478
391
|
}
|
|
479
392
|
});
|
|
480
|
-
};
|
|
481
|
-
|
|
393
|
+
};
|
|
482
394
|
|
|
483
|
-
|
|
395
|
+
//----------------------------------------------------------------------------
|
|
396
|
+
publicAPI.passRequired = pass => {
|
|
484
397
|
if (pass === PassTypes.ID_HIGH24) {
|
|
485
398
|
if (model.fieldAssociation === FieldAssociations.FIELD_ASSOCIATION_POINTS) {
|
|
486
399
|
return model.maximumPointId > 0x00ffffff;
|
|
487
400
|
}
|
|
488
|
-
|
|
489
401
|
if (model.fieldAssociation === FieldAssociations.FIELD_ASSOCIATION_CELLS) {
|
|
490
402
|
return model.maximumCellId > 0x00ffffff;
|
|
491
403
|
}
|
|
492
404
|
}
|
|
493
|
-
|
|
494
405
|
return true;
|
|
495
|
-
};
|
|
496
|
-
|
|
406
|
+
};
|
|
497
407
|
|
|
498
|
-
|
|
408
|
+
//----------------------------------------------------------------------------
|
|
409
|
+
publicAPI.savePixelBuffer = passNo => {
|
|
499
410
|
model.pixBuffer[passNo] = model._openGLRenderWindow.getPixelData(model.area[0], model.area[1], model.area[2], model.area[3]);
|
|
500
|
-
|
|
501
411
|
if (!model.rawPixBuffer[passNo]) {
|
|
502
|
-
|
|
412
|
+
const size = (model.area[2] - model.area[0] + 1) * (model.area[3] - model.area[1] + 1) * 4;
|
|
503
413
|
model.rawPixBuffer[passNo] = new Uint8Array(size);
|
|
504
414
|
model.rawPixBuffer[passNo].set(model.pixBuffer[passNo]);
|
|
505
415
|
}
|
|
506
|
-
|
|
507
416
|
if (passNo === PassTypes.ACTOR_PASS) {
|
|
508
417
|
if (model.captureZValues) {
|
|
509
|
-
|
|
510
|
-
|
|
418
|
+
const rpasses = model._openGLRenderWindow.getRenderPasses();
|
|
511
419
|
if (typeof rpasses[0].requestDepth === 'function' && typeof rpasses[0].getFramebuffer === 'function') {
|
|
512
|
-
|
|
420
|
+
const fb = rpasses[0].getFramebuffer();
|
|
513
421
|
fb.saveCurrentBindingsAndBuffers();
|
|
514
422
|
fb.bind();
|
|
515
423
|
model.zBuffer = model._openGLRenderWindow.getPixelData(model.area[0], model.area[1], model.area[2], model.area[3]);
|
|
516
424
|
fb.restorePreviousBindingsAndBuffers();
|
|
517
425
|
}
|
|
518
426
|
}
|
|
519
|
-
|
|
520
427
|
publicAPI.buildPropHitList(model.rawPixBuffer[passNo]);
|
|
521
428
|
}
|
|
522
|
-
};
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
publicAPI.buildPropHitList = function (pixelbuffer) {
|
|
526
|
-
var offset = 0;
|
|
527
|
-
|
|
528
|
-
for (var yy = 0; yy <= model.area[3] - model.area[1]; yy++) {
|
|
529
|
-
for (var xx = 0; xx <= model.area[2] - model.area[0]; xx++) {
|
|
530
|
-
var val = convert(xx, yy, pixelbuffer, model.area);
|
|
429
|
+
};
|
|
531
430
|
|
|
431
|
+
//----------------------------------------------------------------------------
|
|
432
|
+
publicAPI.buildPropHitList = pixelbuffer => {
|
|
433
|
+
let offset = 0;
|
|
434
|
+
for (let yy = 0; yy <= model.area[3] - model.area[1]; yy++) {
|
|
435
|
+
for (let xx = 0; xx <= model.area[2] - model.area[0]; xx++) {
|
|
436
|
+
let val = convert(xx, yy, pixelbuffer, model.area);
|
|
532
437
|
if (val > 0) {
|
|
533
438
|
val--;
|
|
534
|
-
|
|
535
439
|
if (!(val in model.hitProps)) {
|
|
536
440
|
model.hitProps[val] = true;
|
|
537
441
|
model.propPixels[val] = [];
|
|
538
442
|
}
|
|
539
|
-
|
|
540
443
|
model.propPixels[val].push(offset * 4);
|
|
541
444
|
}
|
|
542
|
-
|
|
543
445
|
++offset;
|
|
544
446
|
}
|
|
545
447
|
}
|
|
546
|
-
};
|
|
547
|
-
|
|
448
|
+
};
|
|
548
449
|
|
|
549
|
-
|
|
450
|
+
//----------------------------------------------------------------------------
|
|
451
|
+
publicAPI.renderProp = prop => {
|
|
550
452
|
if (model.currentPass === PassTypes.ACTOR_PASS) {
|
|
551
453
|
publicAPI.setPropColorValueFromInt(model.props.length + idOffset);
|
|
552
454
|
model.props.push(prop);
|
|
553
455
|
}
|
|
554
|
-
};
|
|
555
|
-
|
|
456
|
+
};
|
|
556
457
|
|
|
557
|
-
|
|
458
|
+
//----------------------------------------------------------------------------
|
|
459
|
+
publicAPI.renderCompositeIndex = index => {
|
|
558
460
|
if (model.currentPass === PassTypes.COMPOSITE_INDEX_PASS) {
|
|
559
461
|
publicAPI.setPropColorValueFromInt(index + idOffset);
|
|
560
462
|
}
|
|
561
|
-
};
|
|
562
|
-
// TODO: make inline
|
|
563
|
-
|
|
463
|
+
};
|
|
564
464
|
|
|
565
|
-
|
|
465
|
+
//----------------------------------------------------------------------------
|
|
466
|
+
// TODO: make inline
|
|
467
|
+
publicAPI.renderAttributeId = attribid => {
|
|
566
468
|
if (attribid < 0) {
|
|
567
469
|
// negative attribid is valid. It happens when rendering higher order
|
|
568
470
|
// elements where new points are added for rendering smooth surfaces.
|
|
569
471
|
return;
|
|
570
472
|
}
|
|
473
|
+
model.maxAttributeId = attribid > model.maxAttributeId ? attribid : model.maxAttributeId;
|
|
571
474
|
|
|
572
|
-
|
|
475
|
+
// if (model.currentPass < PassTypes.ID_LOW24) {
|
|
573
476
|
// return; // useless...
|
|
574
477
|
// }
|
|
575
|
-
}; //----------------------------------------------------------------------------
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
publicAPI.passTypeToString = function (type) {
|
|
579
|
-
return macro.enumToString(PassTypes, type);
|
|
580
|
-
}; //----------------------------------------------------------------------------
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
publicAPI.isPropHit = function (id) {
|
|
584
|
-
return Boolean(model.hitProps[id]);
|
|
585
478
|
};
|
|
586
479
|
|
|
587
|
-
|
|
480
|
+
//----------------------------------------------------------------------------
|
|
481
|
+
publicAPI.passTypeToString = type => macro.enumToString(PassTypes, type);
|
|
482
|
+
|
|
483
|
+
//----------------------------------------------------------------------------
|
|
484
|
+
publicAPI.isPropHit = id => Boolean(model.hitProps[id]);
|
|
485
|
+
publicAPI.setPropColorValueFromInt = val => {
|
|
588
486
|
model.propColorValue[0] = val % 256 / 255.0;
|
|
589
487
|
model.propColorValue[1] = Math.floor(val / 256) % 256 / 255.0;
|
|
590
488
|
model.propColorValue[2] = Math.floor(val / 65536) % 256 / 255.0;
|
|
591
|
-
};
|
|
489
|
+
};
|
|
490
|
+
|
|
491
|
+
// info has
|
|
592
492
|
// valid
|
|
593
493
|
// propId
|
|
594
494
|
// prop
|
|
595
495
|
// compositeID
|
|
596
496
|
// attributeID
|
|
597
|
-
//----------------------------------------------------------------------------
|
|
598
497
|
|
|
599
|
-
|
|
600
|
-
publicAPI.getPixelInformation =
|
|
498
|
+
//----------------------------------------------------------------------------
|
|
499
|
+
publicAPI.getPixelInformation = (inDisplayPosition, maxDistance, outSelectedPosition) => {
|
|
601
500
|
// Base case
|
|
602
|
-
|
|
603
|
-
|
|
501
|
+
const maxDist = maxDistance < 0 ? 0 : maxDistance;
|
|
604
502
|
if (maxDist === 0) {
|
|
605
503
|
outSelectedPosition[0] = inDisplayPosition[0];
|
|
606
504
|
outSelectedPosition[1] = inDisplayPosition[1];
|
|
607
|
-
|
|
608
505
|
if (inDisplayPosition[0] < model.area[0] || inDisplayPosition[0] > model.area[2] || inDisplayPosition[1] < model.area[1] || inDisplayPosition[1] > model.area[3]) {
|
|
609
506
|
return null;
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
var displayPosition = [inDisplayPosition[0] - model.area[0], inDisplayPosition[1] - model.area[1]];
|
|
614
|
-
var actorid = convert(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.ACTOR_PASS], model.area);
|
|
507
|
+
}
|
|
615
508
|
|
|
509
|
+
// offset inDisplayPosition based on the lower-left-corner of the Area.
|
|
510
|
+
const displayPosition = [inDisplayPosition[0] - model.area[0], inDisplayPosition[1] - model.area[1]];
|
|
511
|
+
const actorid = convert(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.ACTOR_PASS], model.area);
|
|
616
512
|
if (actorid <= 0 || actorid - idOffset >= model.props.length) {
|
|
617
513
|
// the pixel did not hit any actor.
|
|
618
514
|
return null;
|
|
619
515
|
}
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
var compositeID = convert(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.COMPOSITE_INDEX_PASS], model.area);
|
|
626
|
-
|
|
516
|
+
const info = {};
|
|
517
|
+
info.valid = true;
|
|
518
|
+
info.propID = actorid - idOffset;
|
|
519
|
+
info.prop = model.props[info.propID];
|
|
520
|
+
let compositeID = convert(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.COMPOSITE_INDEX_PASS], model.area);
|
|
627
521
|
if (compositeID < 0 || compositeID > 0xffffff) {
|
|
628
522
|
compositeID = 0;
|
|
629
523
|
}
|
|
630
|
-
|
|
631
|
-
_info2.compositeID = compositeID - idOffset;
|
|
632
|
-
|
|
524
|
+
info.compositeID = compositeID - idOffset;
|
|
633
525
|
if (model.captureZValues) {
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
}
|
|
638
|
-
|
|
526
|
+
const offset = (displayPosition[1] * (model.area[2] - model.area[0] + 1) + displayPosition[0]) * 4;
|
|
527
|
+
info.zValue = (256 * model.zBuffer[offset] + model.zBuffer[offset + 1]) / 65535.0;
|
|
528
|
+
info.displayPosition = inDisplayPosition;
|
|
529
|
+
}
|
|
639
530
|
|
|
531
|
+
// Skip attribute ids if alpha is zero (missed)
|
|
640
532
|
if (model.pixBuffer[PassTypes.ID_LOW24]) {
|
|
641
533
|
if (getAlpha(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.ID_LOW24], model.area) === 0.0) {
|
|
642
|
-
return
|
|
534
|
+
return info;
|
|
643
535
|
}
|
|
644
536
|
}
|
|
537
|
+
const low24 = convert(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.ID_LOW24], model.area);
|
|
538
|
+
const high24 = convert(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.ID_HIGH24], model.area);
|
|
539
|
+
info.attributeID = getID(low24, high24);
|
|
540
|
+
return info;
|
|
541
|
+
}
|
|
645
542
|
|
|
646
|
-
|
|
647
|
-
var high24 = convert(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.ID_HIGH24], model.area);
|
|
648
|
-
_info2.attributeID = getID(low24, high24);
|
|
649
|
-
return _info2;
|
|
650
|
-
} // Iterate over successively growing boxes.
|
|
543
|
+
// Iterate over successively growing boxes.
|
|
651
544
|
// They recursively call the base case to handle single pixels.
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
var curPos = [0, 0];
|
|
656
|
-
var info = publicAPI.getPixelInformation(inDisplayPosition, 0, outSelectedPosition);
|
|
657
|
-
|
|
545
|
+
const dispPos = [inDisplayPosition[0], inDisplayPosition[1]];
|
|
546
|
+
const curPos = [0, 0];
|
|
547
|
+
let info = publicAPI.getPixelInformation(inDisplayPosition, 0, outSelectedPosition);
|
|
658
548
|
if (info && info.valid) {
|
|
659
549
|
return info;
|
|
660
550
|
}
|
|
661
|
-
|
|
662
|
-
for (var dist = 1; dist < maxDist; ++dist) {
|
|
551
|
+
for (let dist = 1; dist < maxDist; ++dist) {
|
|
663
552
|
// Vertical sides of box.
|
|
664
|
-
for (
|
|
553
|
+
for (let y = dispPos[1] > dist ? dispPos[1] - dist : 0; y <= dispPos[1] + dist; ++y) {
|
|
665
554
|
curPos[1] = y;
|
|
666
|
-
|
|
667
555
|
if (dispPos[0] >= dist) {
|
|
668
556
|
curPos[0] = dispPos[0] - dist;
|
|
669
557
|
info = publicAPI.getPixelInformation(curPos, 0, outSelectedPosition);
|
|
670
|
-
|
|
671
558
|
if (info && info.valid) {
|
|
672
559
|
return info;
|
|
673
560
|
}
|
|
674
561
|
}
|
|
675
|
-
|
|
676
562
|
curPos[0] = dispPos[0] + dist;
|
|
677
563
|
info = publicAPI.getPixelInformation(curPos, 0, outSelectedPosition);
|
|
678
|
-
|
|
679
564
|
if (info && info.valid) {
|
|
680
565
|
return info;
|
|
681
566
|
}
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
for (var x = dispPos[0] >= dist ? dispPos[0] - (dist - 1) : 0; x <= dispPos[0] + (dist - 1); ++x) {
|
|
567
|
+
}
|
|
568
|
+
// Horizontal sides of box.
|
|
569
|
+
for (let x = dispPos[0] >= dist ? dispPos[0] - (dist - 1) : 0; x <= dispPos[0] + (dist - 1); ++x) {
|
|
686
570
|
curPos[0] = x;
|
|
687
|
-
|
|
688
571
|
if (dispPos[1] >= dist) {
|
|
689
572
|
curPos[1] = dispPos[1] - dist;
|
|
690
573
|
info = publicAPI.getPixelInformation(curPos, 0, outSelectedPosition);
|
|
691
|
-
|
|
692
574
|
if (info && info.valid) {
|
|
693
575
|
return info;
|
|
694
576
|
}
|
|
695
577
|
}
|
|
696
|
-
|
|
697
578
|
curPos[1] = dispPos[1] + dist;
|
|
698
579
|
info = publicAPI.getPixelInformation(curPos, 0, outSelectedPosition);
|
|
699
|
-
|
|
700
580
|
if (info && info.valid) {
|
|
701
581
|
return info;
|
|
702
582
|
}
|
|
703
583
|
}
|
|
704
|
-
}
|
|
705
|
-
|
|
584
|
+
}
|
|
706
585
|
|
|
586
|
+
// nothing hit.
|
|
707
587
|
outSelectedPosition[0] = inDisplayPosition[0];
|
|
708
588
|
outSelectedPosition[1] = inDisplayPosition[1];
|
|
709
589
|
return null;
|
|
710
|
-
};
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
publicAPI.generateSelection = function (fx1, fy1, fx2, fy2) {
|
|
714
|
-
var x1 = Math.floor(fx1);
|
|
715
|
-
var y1 = Math.floor(fy1);
|
|
716
|
-
var x2 = Math.floor(fx2);
|
|
717
|
-
var y2 = Math.floor(fy2);
|
|
718
|
-
var dataMap = new Map();
|
|
719
|
-
var outSelectedPosition = [0, 0];
|
|
720
|
-
|
|
721
|
-
for (var yy = y1; yy <= y2; yy++) {
|
|
722
|
-
for (var xx = x1; xx <= x2; xx++) {
|
|
723
|
-
var pos = [xx, yy];
|
|
724
|
-
var info = publicAPI.getPixelInformation(pos, 0, outSelectedPosition);
|
|
590
|
+
};
|
|
725
591
|
|
|
592
|
+
//----------------------------------------------------------------------------
|
|
593
|
+
publicAPI.generateSelection = (fx1, fy1, fx2, fy2) => {
|
|
594
|
+
const x1 = Math.floor(fx1);
|
|
595
|
+
const y1 = Math.floor(fy1);
|
|
596
|
+
const x2 = Math.floor(fx2);
|
|
597
|
+
const y2 = Math.floor(fy2);
|
|
598
|
+
const dataMap = new Map();
|
|
599
|
+
const outSelectedPosition = [0, 0];
|
|
600
|
+
for (let yy = y1; yy <= y2; yy++) {
|
|
601
|
+
for (let xx = x1; xx <= x2; xx++) {
|
|
602
|
+
const pos = [xx, yy];
|
|
603
|
+
const info = publicAPI.getPixelInformation(pos, 0, outSelectedPosition);
|
|
726
604
|
if (info && info.valid) {
|
|
727
|
-
|
|
728
|
-
|
|
605
|
+
const hash = getInfoHash(info);
|
|
729
606
|
if (!dataMap.has(hash)) {
|
|
730
607
|
dataMap.set(hash, {
|
|
731
|
-
info
|
|
608
|
+
info,
|
|
732
609
|
pixelCount: 1,
|
|
733
610
|
attributeIDs: [info.attributeID]
|
|
734
611
|
});
|
|
735
612
|
} else {
|
|
736
|
-
|
|
613
|
+
const dmv = dataMap.get(hash);
|
|
737
614
|
dmv.pixelCount++;
|
|
738
|
-
|
|
739
615
|
if (model.captureZValues) {
|
|
740
616
|
if (info.zValue < dmv.info.zValue) {
|
|
741
617
|
dmv.info = info;
|
|
742
618
|
}
|
|
743
619
|
}
|
|
744
|
-
|
|
745
620
|
if (dmv.attributeIDs.indexOf(info.attributeID) === -1) {
|
|
746
621
|
dmv.attributeIDs.push(info.attributeID);
|
|
747
622
|
}
|
|
@@ -749,44 +624,37 @@ function vtkOpenGLHardwareSelector(publicAPI, model) {
|
|
|
749
624
|
}
|
|
750
625
|
}
|
|
751
626
|
}
|
|
752
|
-
|
|
753
627
|
return convertSelection(model.fieldAssociation, dataMap, model.captureZValues, model._renderer, model._openGLRenderWindow);
|
|
754
628
|
};
|
|
629
|
+
publicAPI.getRawPixelBuffer = passNo => model.rawPixBuffer[passNo];
|
|
630
|
+
publicAPI.getPixelBuffer = passNo => model.pixBuffer[passNo];
|
|
755
631
|
|
|
756
|
-
|
|
757
|
-
return model.rawPixBuffer[passNo];
|
|
758
|
-
};
|
|
759
|
-
|
|
760
|
-
publicAPI.getPixelBuffer = function (passNo) {
|
|
761
|
-
return model.pixBuffer[passNo];
|
|
762
|
-
}; //----------------------------------------------------------------------------
|
|
763
|
-
|
|
632
|
+
//----------------------------------------------------------------------------
|
|
764
633
|
|
|
765
|
-
publicAPI.attach =
|
|
634
|
+
publicAPI.attach = (w, r) => {
|
|
766
635
|
model._openGLRenderWindow = w;
|
|
767
636
|
model._renderer = r;
|
|
768
|
-
};
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
var superSetArea = publicAPI.setArea;
|
|
637
|
+
};
|
|
772
638
|
|
|
639
|
+
// override
|
|
640
|
+
const superSetArea = publicAPI.setArea;
|
|
773
641
|
publicAPI.setArea = function () {
|
|
774
|
-
if (superSetArea
|
|
642
|
+
if (superSetArea(...arguments)) {
|
|
775
643
|
model.area[0] = Math.floor(model.area[0]);
|
|
776
644
|
model.area[1] = Math.floor(model.area[1]);
|
|
777
645
|
model.area[2] = Math.floor(model.area[2]);
|
|
778
646
|
model.area[3] = Math.floor(model.area[3]);
|
|
779
647
|
return true;
|
|
780
648
|
}
|
|
781
|
-
|
|
782
649
|
return false;
|
|
783
650
|
};
|
|
784
|
-
}
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
// ----------------------------------------------------------------------------
|
|
785
654
|
// Object factory
|
|
786
655
|
// ----------------------------------------------------------------------------
|
|
787
656
|
|
|
788
|
-
|
|
789
|
-
var DEFAULT_VALUES = {
|
|
657
|
+
const DEFAULT_VALUES = {
|
|
790
658
|
area: undefined,
|
|
791
659
|
// _renderer: null,
|
|
792
660
|
// _openGLRenderWindow: null,
|
|
@@ -797,34 +665,41 @@ var DEFAULT_VALUES = {
|
|
|
797
665
|
maximumPointId: 0,
|
|
798
666
|
maximumCellId: 0,
|
|
799
667
|
idOffset: 1
|
|
800
|
-
};
|
|
668
|
+
};
|
|
669
|
+
|
|
670
|
+
// ----------------------------------------------------------------------------
|
|
801
671
|
|
|
802
672
|
function extend(publicAPI, model) {
|
|
803
|
-
|
|
804
|
-
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
673
|
+
let initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
674
|
+
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
805
675
|
|
|
676
|
+
// Build VTK API
|
|
806
677
|
vtkHardwareSelector$1.extend(publicAPI, model, initialValues);
|
|
807
678
|
model.propColorValue = [0, 0, 0];
|
|
808
679
|
model.props = [];
|
|
809
|
-
|
|
810
680
|
if (!model.area) {
|
|
811
681
|
model.area = [0, 0, 0, 0];
|
|
812
682
|
}
|
|
813
|
-
|
|
814
683
|
macro.setGetArray(publicAPI, model, ['area'], 4);
|
|
815
684
|
macro.setGet(publicAPI, model, ['_renderer', 'currentPass', '_openGLRenderWindow', 'maximumPointId', 'maximumCellId']);
|
|
816
685
|
macro.setGetArray(publicAPI, model, ['propColorValue'], 3);
|
|
817
686
|
macro.moveToProtected(publicAPI, model, ['renderer', 'openGLRenderWindow']);
|
|
818
|
-
macro.event(publicAPI, model, 'event');
|
|
687
|
+
macro.event(publicAPI, model, 'event');
|
|
819
688
|
|
|
689
|
+
// Object methods
|
|
820
690
|
vtkOpenGLHardwareSelector(publicAPI, model);
|
|
821
|
-
}
|
|
691
|
+
}
|
|
822
692
|
|
|
823
|
-
|
|
693
|
+
// ----------------------------------------------------------------------------
|
|
694
|
+
|
|
695
|
+
const newInstance = macro.newInstance(extend, 'vtkOpenGLHardwareSelector');
|
|
696
|
+
|
|
697
|
+
// ----------------------------------------------------------------------------
|
|
824
698
|
|
|
825
|
-
var vtkHardwareSelector =
|
|
826
|
-
newInstance
|
|
827
|
-
extend
|
|
828
|
-
|
|
699
|
+
var vtkHardwareSelector = {
|
|
700
|
+
newInstance,
|
|
701
|
+
extend,
|
|
702
|
+
...Constants
|
|
703
|
+
};
|
|
829
704
|
|
|
830
705
|
export { vtkHardwareSelector as default, extend, newInstance };
|