@kitware/vtk.js 28.10.1 → 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 +778 -903
- package/Common/Core/Math.d.ts +14 -0
- 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 +92 -170
- 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 +193 -257
- 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 +444 -609
- 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 +41 -39
- 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 +134 -210
- package/Widgets/Widgets3D/ResliceCursorWidget/cprBehavior.js +26 -41
- package/Widgets/Widgets3D/ResliceCursorWidget/helpers.js +90 -117
- 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,4 +1,4 @@
|
|
|
1
|
-
import macro from '../../
|
|
1
|
+
import { m as macro } from '../../macros2.js';
|
|
2
2
|
import vtkBoundingBox from '../../Common/DataModel/BoundingBox.js';
|
|
3
3
|
import vtkDataArray from '../../Common/Core/DataArray.js';
|
|
4
4
|
import { f as vtkMath } from '../../Common/Core/Math/index.js';
|
|
@@ -7,113 +7,110 @@ import vtkPoints from '../../Common/Core/Points.js';
|
|
|
7
7
|
import vtkPolyData from '../../Common/DataModel/PolyData.js';
|
|
8
8
|
import vtkTriangle from '../../Common/DataModel/Triangle.js';
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
const VertexType = {
|
|
11
11
|
VTK_SIMPLE_VERTEX: 0,
|
|
12
12
|
VTK_FIXED_VERTEX: 1,
|
|
13
13
|
VTK_FEATURE_EDGE_VERTEX: 2,
|
|
14
14
|
VTK_BOUNDARY_EDGE_VERTEX: 3
|
|
15
|
-
};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// ----------------------------------------------------------------------------
|
|
16
18
|
// vtkWindowedSincPolyDataFilter methods
|
|
17
19
|
// ----------------------------------------------------------------------------
|
|
18
20
|
|
|
19
21
|
function vtkWindowedSincPolyDataFilter(publicAPI, model) {
|
|
20
22
|
// Set our className
|
|
21
23
|
model.classHierarchy.push('vtkWindowedSincPolyDataFilter');
|
|
22
|
-
|
|
23
|
-
publicAPI.vtkWindowedSincPolyDataFilterExecute = function (inPts, inputPolyData, output) {
|
|
24
|
+
publicAPI.vtkWindowedSincPolyDataFilterExecute = (inPts, inputPolyData, output) => {
|
|
24
25
|
if (!inPts || model.numberOfIterations <= 0) {
|
|
25
26
|
return inPts;
|
|
26
27
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
28
|
+
const inPtsData = inPts.getData();
|
|
29
|
+
const inVerts = inputPolyData.getVerts().getData();
|
|
30
|
+
const inLines = inputPolyData.getLines().getData();
|
|
31
|
+
const inPolys = inputPolyData.getPolys().getData();
|
|
32
|
+
const inStrips = inputPolyData.getStrips().getData();
|
|
33
|
+
const cosFeatureAngle = Math.cos(vtkMath.radiansFromDegrees(model.featureAngle));
|
|
34
|
+
const cosEdgeAngle = Math.cos(vtkMath.radiansFromDegrees(model.edgeAngle));
|
|
35
|
+
const numPts = inPts.getNumberOfPoints();
|
|
36
|
+
|
|
37
|
+
// Perform topological analysis. What we're going to do is build a connectivity
|
|
36
38
|
// array of connected vertices. The outcome will be one of three
|
|
37
39
|
// classifications for a vertex: VTK_SIMPLE_VERTEX, VTK_FIXED_VERTEX. or
|
|
38
40
|
// VTK_EDGE_VERTEX. Simple vertices are smoothed using all connected
|
|
39
41
|
// vertices. FIXED vertices are never smoothed. Edge vertices are smoothed
|
|
40
42
|
// using a subset of the attached vertices.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
for (var i = 0; i < numPts; ++i) {
|
|
43
|
+
const verts = new Array(numPts);
|
|
44
|
+
for (let i = 0; i < numPts; ++i) {
|
|
45
45
|
verts[i] = {
|
|
46
46
|
type: VertexType.VTK_SIMPLE_VERTEX,
|
|
47
47
|
edges: null
|
|
48
48
|
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
var npts = 0;
|
|
53
|
-
|
|
54
|
-
for (var _i = 0; _i < inVerts.length; _i += npts + 1) {
|
|
55
|
-
npts = inVerts[_i];
|
|
56
|
-
var pts = inVerts.slice(_i + 1, _i + 1 + npts);
|
|
49
|
+
}
|
|
57
50
|
|
|
58
|
-
|
|
51
|
+
// check vertices first. Vertices are never smoothed_--------------
|
|
52
|
+
let npts = 0;
|
|
53
|
+
for (let i = 0; i < inVerts.length; i += npts + 1) {
|
|
54
|
+
npts = inVerts[i];
|
|
55
|
+
const pts = inVerts.slice(i + 1, i + 1 + npts);
|
|
56
|
+
for (let j = 0; j < pts.length; ++j) {
|
|
59
57
|
verts[pts[j]].type = VertexType.VTK_FIXED_VERTEX;
|
|
60
58
|
}
|
|
61
|
-
}
|
|
62
|
-
|
|
59
|
+
}
|
|
63
60
|
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
// now check lines. Only manifold lines can be smoothed------------
|
|
62
|
+
for (let i = 0; i < inLines.length; i += npts + 1) {
|
|
63
|
+
npts = inLines[i];
|
|
64
|
+
const pts = inLines.slice(i + 1, i + 1 + npts);
|
|
66
65
|
|
|
67
|
-
|
|
66
|
+
// Check for closed loop which are treated specially. Basically the
|
|
68
67
|
// last point is ignored (set to fixed).
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
for (var _j = 0; _j < npts; ++_j) {
|
|
74
|
-
if (verts[_pts[_j]].type === VertexType.VTK_SIMPLE_VERTEX) {
|
|
68
|
+
const closedLoop = pts[0] === pts[npts - 1] && npts > 3;
|
|
69
|
+
for (let j = 0; j < npts; ++j) {
|
|
70
|
+
if (verts[pts[j]].type === VertexType.VTK_SIMPLE_VERTEX) {
|
|
75
71
|
// First point
|
|
76
|
-
if (
|
|
72
|
+
if (j === 0) {
|
|
77
73
|
if (!closedLoop) {
|
|
78
|
-
verts[
|
|
74
|
+
verts[pts[0]].type = VertexType.VTK_FIXED_VERTEX;
|
|
79
75
|
} else {
|
|
80
|
-
verts[
|
|
81
|
-
verts[
|
|
76
|
+
verts[pts[0]].type = VertexType.VTK_FEATURE_EDGE_VERTEX;
|
|
77
|
+
verts[pts[0]].edges = [pts[npts - 2], pts[1]];
|
|
82
78
|
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
79
|
+
}
|
|
80
|
+
// Last point
|
|
81
|
+
else if (j === npts - 1 && !closedLoop) {
|
|
82
|
+
verts[pts[j]].type = VertexType.VTK_FIXED_VERTEX;
|
|
83
|
+
}
|
|
84
|
+
// In between point // is edge vertex (unless already edge vertex!)
|
|
87
85
|
else {
|
|
88
|
-
verts[
|
|
89
|
-
verts[
|
|
86
|
+
verts[pts[j]].type = VertexType.VTK_FEATURE_EDGE_VERTEX;
|
|
87
|
+
verts[pts[j]].edges = [pts[j - 1], pts[closedLoop && j === npts - 2 ? 0 : j + 1]];
|
|
90
88
|
}
|
|
91
89
|
} // if simple vertex
|
|
90
|
+
|
|
92
91
|
// Vertex has been visited before, need to fix it. Special case
|
|
93
92
|
// when working on closed loop.
|
|
94
|
-
else if (verts[
|
|
95
|
-
verts[
|
|
96
|
-
verts[
|
|
93
|
+
else if (verts[pts[j]].type === VertexType.VTK_FEATURE_EDGE_VERTEX && !(closedLoop && j === npts - 1)) {
|
|
94
|
+
verts[pts[j]].type = VertexType.VTK_FIXED_VERTEX;
|
|
95
|
+
verts[pts[j]].edges = null;
|
|
97
96
|
}
|
|
98
97
|
} // for all points in this line
|
|
99
|
-
|
|
100
98
|
} // for all lines
|
|
101
|
-
// now polygons and triangle strips-------------------------------
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
var numPolys = inPolys.length;
|
|
105
|
-
var numStrips = inStrips.length;
|
|
106
99
|
|
|
100
|
+
// now polygons and triangle strips-------------------------------
|
|
101
|
+
const numPolys = inPolys.length;
|
|
102
|
+
const numStrips = inStrips.length;
|
|
107
103
|
if (numPolys > 0 || numStrips > 0) {
|
|
108
|
-
|
|
104
|
+
const inMesh = vtkPolyData.newInstance();
|
|
109
105
|
inMesh.setPoints(inputPolyData.getPoints());
|
|
110
106
|
inMesh.setPolys(inputPolyData.getPolys());
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
107
|
+
const mesh = inMesh;
|
|
108
|
+
let neighbors = [];
|
|
109
|
+
let nei = 0;
|
|
110
|
+
// const numNeiPts = 0;
|
|
111
|
+
const normal = [];
|
|
112
|
+
const neiNormal = [];
|
|
114
113
|
|
|
115
|
-
var normal = [];
|
|
116
|
-
var neiNormal = [];
|
|
117
114
|
/* TODO: Add vtkTriangleFilter
|
|
118
115
|
if ( (numStrips = inputPolyData.getStrips().GetNumberOfCells()) > 0 )
|
|
119
116
|
{ // convert data to triangles
|
|
@@ -126,64 +123,51 @@ function vtkWindowedSincPolyDataFilter(publicAPI, model) {
|
|
|
126
123
|
*/
|
|
127
124
|
|
|
128
125
|
mesh.buildLinks(); // to do neighborhood searching
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
for (var _i3 = 0; _i3 < npts; ++_i3) {
|
|
139
|
-
var p1 = _pts2[_i3];
|
|
140
|
-
var p2 = _pts2[(_i3 + 1) % npts];
|
|
141
|
-
|
|
126
|
+
const polys = mesh.getPolys().getData();
|
|
127
|
+
let cellId = 0;
|
|
128
|
+
for (let c = 0; c < polys.length; c += npts + 1, ++cellId) {
|
|
129
|
+
npts = polys[c];
|
|
130
|
+
const pts = polys.slice(c + 1, c + 1 + npts);
|
|
131
|
+
for (let i = 0; i < npts; ++i) {
|
|
132
|
+
const p1 = pts[i];
|
|
133
|
+
const p2 = pts[(i + 1) % npts];
|
|
142
134
|
if (verts[p1].edges === null) {
|
|
143
135
|
verts[p1].edges = [];
|
|
144
136
|
}
|
|
145
|
-
|
|
146
137
|
if (verts[p2].edges == null) {
|
|
147
138
|
verts[p2].edges = [];
|
|
148
139
|
}
|
|
149
|
-
|
|
150
140
|
neighbors = mesh.getCellEdgeNeighbors(cellId, p1, p2);
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
var edge = VertexType.VTK_SIMPLE_VERTEX;
|
|
141
|
+
const numNei = neighbors.length; // neighbors->GetNumberOfIds();
|
|
154
142
|
|
|
143
|
+
let edge = VertexType.VTK_SIMPLE_VERTEX;
|
|
155
144
|
if (numNei === 0) {
|
|
156
145
|
edge = VertexType.VTK_BOUNDARY_EDGE_VERTEX;
|
|
157
146
|
} else if (numNei >= 2) {
|
|
158
147
|
// non-manifold case, check nonmanifold smoothing state
|
|
159
148
|
if (!model.nonManifoldSmoothing) {
|
|
160
149
|
// check to make sure that this edge hasn't been marked already
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (neighbors[_j2] < cellId) {
|
|
150
|
+
let j = 0;
|
|
151
|
+
for (; j < numNei; ++j) {
|
|
152
|
+
if (neighbors[j] < cellId) {
|
|
165
153
|
break;
|
|
166
154
|
}
|
|
167
155
|
}
|
|
168
|
-
|
|
169
|
-
if (_j2 >= numNei) {
|
|
156
|
+
if (j >= numNei) {
|
|
170
157
|
edge = VertexType.VTK_FEATURE_EDGE_VERTEX;
|
|
171
158
|
}
|
|
172
159
|
}
|
|
173
160
|
/* eslint-disable no-cond-assign */
|
|
174
|
-
|
|
175
161
|
} else if (numNei === 1 && (nei = neighbors[0]) > cellId) {
|
|
176
162
|
if (model.featureEdgeSmoothing) {
|
|
177
163
|
// TODO: support polygons
|
|
178
164
|
// vtkPolygon::ComputeNormal(inPts,npts,pts,normal);
|
|
179
|
-
vtkTriangle.computeNormal(inPts.getPoint(
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
165
|
+
vtkTriangle.computeNormal(inPts.getPoint(pts[0]), inPts.getPoint(pts[1]), inPts.getPoint(pts[2]), normal);
|
|
166
|
+
const {
|
|
167
|
+
cellPointIds
|
|
168
|
+
} = mesh.getCellPoints(nei);
|
|
169
|
+
// vtkPolygon::ComputeNormal(inPts,numNeiPts,neiPts,neiNormal);
|
|
185
170
|
vtkTriangle.computeNormal(inPts.getPoint(cellPointIds[0]), inPts.getPoint(cellPointIds[1]), inPts.getPoint(cellPointIds[2]), neiNormal);
|
|
186
|
-
|
|
187
171
|
if (vtkMath.dot(normal, neiNormal) <= cosFeatureAngle) {
|
|
188
172
|
edge = VertexType.VTK_FEATURE_EDGE_VERTEX;
|
|
189
173
|
}
|
|
@@ -193,24 +177,20 @@ function vtkWindowedSincPolyDataFilter(publicAPI, model) {
|
|
|
193
177
|
/* eslint-disable no-continue */
|
|
194
178
|
continue;
|
|
195
179
|
}
|
|
196
|
-
|
|
197
180
|
if (edge && verts[p1].type === VertexType.VTK_SIMPLE_VERTEX) {
|
|
198
181
|
verts[p1].edges = [p2];
|
|
199
182
|
verts[p1].type = edge;
|
|
200
183
|
} else if (edge && verts[p1].type === VertexType.VTK_BOUNDARY_EDGE_VERTEX || edge && verts[p1].type === VertexType.VTK_FEATURE_EDGE_VERTEX || !edge && verts[p1].type === VertexType.VTK_SIMPLE_VERTEX) {
|
|
201
184
|
verts[p1].edges.push(p2);
|
|
202
|
-
|
|
203
185
|
if (verts[p1].type && edge === VertexType.VTK_BOUNDARY_EDGE_VERTEX) {
|
|
204
186
|
verts[p1].type = VertexType.VTK_BOUNDARY_EDGE_VERTEX;
|
|
205
187
|
}
|
|
206
188
|
}
|
|
207
|
-
|
|
208
189
|
if (edge && verts[p2].type === VertexType.VTK_SIMPLE_VERTEX) {
|
|
209
190
|
verts[p2].edges = [p1];
|
|
210
191
|
verts[p2].type = edge;
|
|
211
192
|
} else if (edge && verts[p2].type === VertexType.VTK_BOUNDARY_EDGE_VERTEX || edge && verts[p2].type === VertexType.VTK_FEATURE_EDGE_VERTEX || !edge && verts[p2].type === VertexType.VTK_SIMPLE_VERTEX) {
|
|
212
193
|
verts[p2].edges.push(p1);
|
|
213
|
-
|
|
214
194
|
if (verts[p2].type && edge === VertexType.VTK_BOUNDARY_EDGE_VERTEX) {
|
|
215
195
|
verts[p2].type = VertexType.VTK_BOUNDARY_EDGE_VERTEX;
|
|
216
196
|
}
|
|
@@ -218,49 +198,42 @@ function vtkWindowedSincPolyDataFilter(publicAPI, model) {
|
|
|
218
198
|
}
|
|
219
199
|
}
|
|
220
200
|
} // if strips or polys
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
if (verts[_i4].type === VertexType.VTK_SIMPLE_VERTEX) ; else if (verts[_i4].type === VertexType.VTK_FIXED_VERTEX) ; else if (verts[_i4].type === VertexType.VTK_FEATURE_EDGE_VERTEX || verts[_i4].type === VertexType.VTK_BOUNDARY_EDGE_VERTEX) {
|
|
201
|
+
for (let i = 0; i < numPts; ++i) {
|
|
202
|
+
if (verts[i].type === VertexType.VTK_SIMPLE_VERTEX) ; else if (verts[i].type === VertexType.VTK_FIXED_VERTEX) ; else if (verts[i].type === VertexType.VTK_FEATURE_EDGE_VERTEX || verts[i].type === VertexType.VTK_BOUNDARY_EDGE_VERTEX) {
|
|
224
203
|
// see how many edges; if two, what the angle is
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
204
|
+
|
|
205
|
+
if (!model.boundarySmoothing && verts[i].type === VertexType.VTK_BOUNDARY_EDGE_VERTEX) {
|
|
206
|
+
verts[i].type = VertexType.VTK_FIXED_VERTEX;
|
|
207
|
+
} else if ((npts = verts[i].edges.length) !== 2) {
|
|
228
208
|
// can only smooth edges on 2-manifold surfaces
|
|
229
|
-
verts[
|
|
209
|
+
verts[i].type = VertexType.VTK_FIXED_VERTEX;
|
|
230
210
|
} // check angle between edges
|
|
231
211
|
else {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
for (var k = 0; k < 3; ++k) {
|
|
241
|
-
l1[k] = _x2[k] - _x[k];
|
|
242
|
-
l2[k] = x3[k] - _x2[k];
|
|
212
|
+
const x1 = inPts.getPoint(verts[i].edges[0]);
|
|
213
|
+
const x2 = inPts.getPoint(i);
|
|
214
|
+
const x3 = inPts.getPoint(verts[i].edges[1]);
|
|
215
|
+
const l1 = [0, 0, 0];
|
|
216
|
+
const l2 = [0, 0, 0];
|
|
217
|
+
for (let k = 0; k < 3; ++k) {
|
|
218
|
+
l1[k] = x2[k] - x1[k];
|
|
219
|
+
l2[k] = x3[k] - x2[k];
|
|
243
220
|
}
|
|
244
|
-
|
|
245
221
|
if (vtkMath.normalize(l1) >= 0.0 && vtkMath.normalize(l2) >= 0.0 && vtkMath.dot(l1, l2) < cosEdgeAngle) {
|
|
246
|
-
verts[
|
|
247
|
-
} else if (verts[
|
|
222
|
+
verts[i].type = VertexType.VTK_FIXED_VERTEX;
|
|
223
|
+
} else if (verts[i].type === VertexType.VTK_FEATURE_EDGE_VERTEX) ; else ;
|
|
248
224
|
} // if along edge
|
|
249
|
-
|
|
250
225
|
} // if edge vertex
|
|
251
|
-
|
|
252
226
|
} // for all points
|
|
227
|
+
|
|
253
228
|
// Perform Windowed Sinc function interpolation
|
|
254
229
|
//
|
|
255
230
|
// console.log('Beginning smoothing iterations...');
|
|
256
231
|
// need 4 vectors of points
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
var three = 3;
|
|
263
|
-
var newPts = [];
|
|
232
|
+
let zero = 0;
|
|
233
|
+
let one = 1;
|
|
234
|
+
let two = 2;
|
|
235
|
+
const three = 3;
|
|
236
|
+
const newPts = [];
|
|
264
237
|
newPts.push(vtkPoints.newInstance());
|
|
265
238
|
newPts[zero].setNumberOfPoints(numPts);
|
|
266
239
|
newPts.push(vtkPoints.newInstance());
|
|
@@ -268,106 +241,99 @@ function vtkWindowedSincPolyDataFilter(publicAPI, model) {
|
|
|
268
241
|
newPts.push(vtkPoints.newInstance());
|
|
269
242
|
newPts[two].setNumberOfPoints(numPts);
|
|
270
243
|
newPts.push(vtkPoints.newInstance());
|
|
271
|
-
newPts[three].setNumberOfPoints(numPts);
|
|
272
|
-
|
|
273
|
-
var inCenter = vtkBoundingBox.getCenter(inputPolyData.getBounds());
|
|
274
|
-
var inLength = vtkBoundingBox.getDiagonalLength(inputPolyData.getBounds());
|
|
244
|
+
newPts[three].setNumberOfPoints(numPts);
|
|
275
245
|
|
|
246
|
+
// Get the center and length of the input dataset
|
|
247
|
+
const inCenter = vtkBoundingBox.getCenter(inputPolyData.getBounds());
|
|
248
|
+
const inLength = vtkBoundingBox.getDiagonalLength(inputPolyData.getBounds());
|
|
276
249
|
if (!model.normalizeCoordinates) {
|
|
277
250
|
// initialize to old coordinates
|
|
278
251
|
// for (let i = 0; i < numPts; ++i) {
|
|
279
252
|
// newPts[zero].setPoint(i, inPts.subarray(i));
|
|
280
253
|
// }
|
|
281
|
-
|
|
254
|
+
const copy = macro.newTypedArray(newPts[zero].getDataType(), inPtsData);
|
|
282
255
|
newPts[zero].setData(copy, 3);
|
|
283
256
|
} else {
|
|
284
257
|
// center the data and scale to be within unit cube [-1, 1]
|
|
285
258
|
// initialize to old coordinates
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
var _newPts$zero;
|
|
290
|
-
|
|
291
|
-
inPts.getPoint(_i5, normalizedPoint);
|
|
259
|
+
const normalizedPoint = [0, 0, 0];
|
|
260
|
+
for (let i = 0; i < numPts; ++i) {
|
|
261
|
+
inPts.getPoint(i, normalizedPoint);
|
|
292
262
|
normalizedPoint[0] = (normalizedPoint[0] - inCenter[0]) / inLength;
|
|
293
263
|
normalizedPoint[1] = (normalizedPoint[1] - inCenter[1]) / inLength;
|
|
294
264
|
normalizedPoint[2] = (normalizedPoint[2] - inCenter[2]) / inLength;
|
|
295
|
-
|
|
296
|
-
(_newPts$zero = newPts[zero]).setPoint.apply(_newPts$zero, [_i5].concat(normalizedPoint));
|
|
265
|
+
newPts[zero].setPoint(i, ...normalizedPoint);
|
|
297
266
|
}
|
|
298
|
-
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Smooth with a low pass filter defined as a windowed sinc function.
|
|
299
270
|
// Taubin describes this methodology is the IBM tech report RC-20404
|
|
300
271
|
// (#90237, dated 3/12/96) "Optimal Surface Smoothing as Filter Design"
|
|
301
272
|
// G. Taubin, T. Zhang and G. Golub. (Zhang and Golub are at Stanford
|
|
302
273
|
// University)
|
|
274
|
+
|
|
303
275
|
// The formulas here follow the notation of Taubin's TR, i.e.
|
|
304
276
|
// newPts[zero], newPts[one], etc.
|
|
305
|
-
// calculate weights and filter coefficients
|
|
306
277
|
|
|
278
|
+
// calculate weights and filter coefficients
|
|
279
|
+
const kPb = model.passBand; // reasonable default for kPb in [0, 2] is 0.1
|
|
280
|
+
const thetaPb = Math.acos(1.0 - 0.5 * kPb); // thetaPb in [0, M_PI/2]
|
|
307
281
|
|
|
308
|
-
var kPb = model.passBand; // reasonable default for kPb in [0, 2] is 0.1
|
|
309
|
-
|
|
310
|
-
var thetaPb = Math.acos(1.0 - 0.5 * kPb); // thetaPb in [0, M_PI/2]
|
|
311
282
|
// vtkDebugMacro(<< "thetaPb = " << thetaPb);
|
|
312
283
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
284
|
+
const w = new Array(model.numberOfIterations + 1);
|
|
285
|
+
const c = new Array(model.numberOfIterations + 1);
|
|
286
|
+
const cprime = new Array(model.numberOfIterations + 1);
|
|
287
|
+
const zerovector = [0, 0, 0];
|
|
288
|
+
|
|
289
|
+
// Calculate the weights and the Chebychev coefficients c.
|
|
317
290
|
//
|
|
291
|
+
|
|
318
292
|
// Windowed sinc function weights. This is for a Hamming window. Other
|
|
319
293
|
// windowing function could be implemented here.
|
|
294
|
+
for (let i = 0; i <= model.numberOfIterations; ++i) {
|
|
295
|
+
w[i] = 0.54 + 0.46 * Math.cos(i * Math.PI / (model.numberOfIterations + 1));
|
|
296
|
+
}
|
|
320
297
|
|
|
321
|
-
|
|
322
|
-
w[_i6] = 0.54 + 0.46 * Math.cos(_i6 * Math.PI / (model.numberOfIterations + 1));
|
|
323
|
-
} // Calculate the optimal sigma (offset or fudge factor for the filter).
|
|
298
|
+
// Calculate the optimal sigma (offset or fudge factor for the filter).
|
|
324
299
|
// This is a Newton-Raphson Search.
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
var sigma = 0.0;
|
|
331
|
-
|
|
332
|
-
for (var _j3 = 0; !done && _j3 < 500; ++_j3) {
|
|
300
|
+
let fKpb = 0;
|
|
301
|
+
let fPrimeKpb = 0;
|
|
302
|
+
let done = false;
|
|
303
|
+
let sigma = 0.0;
|
|
304
|
+
for (let j = 0; !done && j < 500; ++j) {
|
|
333
305
|
// Chebyshev coefficients
|
|
334
306
|
c[0] = w[0] * (thetaPb + sigma) / Math.PI;
|
|
307
|
+
for (let i = 1; i <= model.numberOfIterations; ++i) {
|
|
308
|
+
c[i] = 2.0 * w[i] * Math.sin(i * (thetaPb + sigma)) / (i * Math.PI);
|
|
309
|
+
}
|
|
335
310
|
|
|
336
|
-
|
|
337
|
-
c[_i7] = 2.0 * w[_i7] * Math.sin(_i7 * (thetaPb + sigma)) / (_i7 * Math.PI);
|
|
338
|
-
} // calculate the Chebyshev coefficients for the derivative of the filter
|
|
339
|
-
|
|
340
|
-
|
|
311
|
+
// calculate the Chebyshev coefficients for the derivative of the filter
|
|
341
312
|
cprime[model.numberOfIterations] = 0.0;
|
|
342
313
|
cprime[model.numberOfIterations - 1] = 0.0;
|
|
343
|
-
|
|
344
314
|
if (model.numberOfIterations > 1) {
|
|
345
315
|
cprime[model.numberOfIterations - 2] = 2.0 * (model.numberOfIterations - 1) * c[model.numberOfIterations - 1];
|
|
346
316
|
}
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
317
|
+
for (let i = model.numberOfIterations - 3; i >= 0; --i) {
|
|
318
|
+
cprime[i] = cprime[i + 2] + 2.0 * (i + 1) * c[i + 1];
|
|
319
|
+
}
|
|
320
|
+
// Evaluate the filter and its derivative at kPb (note the discrepancy
|
|
351
321
|
// of calculating the c's based on thetaPb + sigma and evaluating the
|
|
352
322
|
// filter at kPb (which is equivalent to thetaPb)
|
|
353
|
-
|
|
354
|
-
|
|
355
323
|
fKpb = 0.0;
|
|
356
324
|
fPrimeKpb = 0.0;
|
|
357
325
|
fKpb += c[0];
|
|
358
326
|
fPrimeKpb += cprime[0];
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
fPrimeKpb += cprime[_i9] * (1.0 - 0.5 * kPb);
|
|
327
|
+
for (let i = 1; i <= model.numberOfIterations; ++i) {
|
|
328
|
+
if (i === 1) {
|
|
329
|
+
fKpb += c[i] * (1.0 - 0.5 * kPb);
|
|
330
|
+
fPrimeKpb += cprime[i] * (1.0 - 0.5 * kPb);
|
|
364
331
|
} else {
|
|
365
|
-
fKpb += c[
|
|
366
|
-
fPrimeKpb += cprime[
|
|
332
|
+
fKpb += c[i] * Math.cos(i * Math.acos(1.0 - 0.5 * kPb));
|
|
333
|
+
fPrimeKpb += cprime[i] * Math.cos(i * Math.acos(1.0 - 0.5 * kPb));
|
|
367
334
|
}
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
|
|
335
|
+
}
|
|
336
|
+
// if fKpb is not close enough to 1.0, then adjust sigma
|
|
371
337
|
if (model.numberOfIterations > 1) {
|
|
372
338
|
if (Math.abs(fKpb - 1.0) >= 1e-3) {
|
|
373
339
|
sigma -= (fKpb - 1.0) / fPrimeKpb; // Newton-Rhapson (want f=1)
|
|
@@ -381,220 +347,174 @@ function vtkWindowedSincPolyDataFilter(publicAPI, model) {
|
|
|
381
347
|
sigma = 0.0;
|
|
382
348
|
}
|
|
383
349
|
}
|
|
384
|
-
|
|
385
350
|
if (Math.abs(fKpb - 1.0) >= 1e-3) {
|
|
386
351
|
console.log('An optimal offset for the smoothing filter could not be found. Unpredictable smoothing/shrinkage may result.');
|
|
387
352
|
}
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
for (
|
|
397
|
-
if (verts[
|
|
398
|
-
var _newPts$one, _newPts$three;
|
|
399
|
-
|
|
353
|
+
const x = [0, 0, 0];
|
|
354
|
+
const y = [0, 0, 0];
|
|
355
|
+
const deltaX = [0, 0, 0];
|
|
356
|
+
const xNew = [0, 0, 0];
|
|
357
|
+
const x1 = [0, 0, 0];
|
|
358
|
+
const x2 = [0, 0, 0];
|
|
359
|
+
|
|
360
|
+
// first iteration
|
|
361
|
+
for (let i = 0; i < numPts; ++i) {
|
|
362
|
+
if (verts[i].edges != null && (npts = verts[i].edges.length) > 0) {
|
|
400
363
|
// point is allowed to move
|
|
401
|
-
newPts[zero].getPoint(
|
|
402
|
-
|
|
364
|
+
newPts[zero].getPoint(i, x); // use current points
|
|
403
365
|
deltaX[0] = 0.0;
|
|
404
366
|
deltaX[1] = 0.0;
|
|
405
|
-
deltaX[2] = 0.0;
|
|
406
|
-
// for all connected points
|
|
367
|
+
deltaX[2] = 0.0;
|
|
407
368
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
369
|
+
// calculate the negative of the laplacian
|
|
370
|
+
// for all connected points
|
|
371
|
+
for (let j = 0; j < npts; ++j) {
|
|
372
|
+
newPts[zero].getPoint(verts[i].edges[j], y);
|
|
373
|
+
for (let k = 0; k < 3; ++k) {
|
|
374
|
+
deltaX[k] += (x[k] - y[k]) / npts;
|
|
413
375
|
}
|
|
414
|
-
} // newPts[one] = newPts[zero] - 0.5 newPts[one]
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
for (var _k2 = 0; _k2 < 3; ++_k2) {
|
|
418
|
-
deltaX[_k2] = x[_k2] - 0.5 * deltaX[_k2];
|
|
419
376
|
}
|
|
420
|
-
|
|
421
|
-
(
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
377
|
+
// newPts[one] = newPts[zero] - 0.5 newPts[one]
|
|
378
|
+
for (let k = 0; k < 3; ++k) {
|
|
379
|
+
deltaX[k] = x[k] - 0.5 * deltaX[k];
|
|
380
|
+
}
|
|
381
|
+
newPts[one].setPoint(i, ...deltaX);
|
|
382
|
+
if (verts[i].type === VertexType.VTK_FIXED_VERTEX) {
|
|
383
|
+
newPts[zero].getPoint(i, deltaX);
|
|
425
384
|
} else {
|
|
426
385
|
// calculate newPts[three] = c0 newPts[zero] + c1 newPts[one]
|
|
427
|
-
for (
|
|
428
|
-
deltaX[
|
|
386
|
+
for (let k = 0; k < 3; ++k) {
|
|
387
|
+
deltaX[k] = c[0] * x[k] + c[1] * deltaX[k];
|
|
429
388
|
}
|
|
430
389
|
}
|
|
431
|
-
|
|
432
|
-
(_newPts$three = newPts[three]).setPoint.apply(_newPts$three, [_i10].concat(deltaX));
|
|
390
|
+
newPts[three].setPoint(i, ...deltaX);
|
|
433
391
|
} // if can move point
|
|
434
392
|
else {
|
|
435
|
-
var _newPts$one2, _newPts$three2;
|
|
436
|
-
|
|
437
393
|
// point is not allowed to move, just use the old point...
|
|
438
394
|
// (zero out the Laplacian)
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
newPts[
|
|
442
|
-
|
|
443
|
-
(_newPts$three2 = newPts[three]).setPoint.apply(_newPts$three2, [_i10].concat(deltaX));
|
|
395
|
+
newPts[one].setPoint(i, ...zerovector);
|
|
396
|
+
newPts[zero].getPoint(i, deltaX);
|
|
397
|
+
newPts[three].setPoint(i, ...deltaX);
|
|
444
398
|
}
|
|
445
399
|
} // for all points
|
|
446
|
-
// for the rest of the iterations
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
var pX0 = [0, 0, 0];
|
|
450
|
-
var pX1 = [0, 0, 0];
|
|
451
|
-
var pX3 = [0, 0, 0];
|
|
452
|
-
var iterationNumber = 2;
|
|
453
400
|
|
|
401
|
+
// for the rest of the iterations
|
|
402
|
+
const pX0 = [0, 0, 0];
|
|
403
|
+
const pX1 = [0, 0, 0];
|
|
404
|
+
const pX3 = [0, 0, 0];
|
|
405
|
+
let iterationNumber = 2;
|
|
454
406
|
for (; iterationNumber <= model.numberOfIterations; iterationNumber++) {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
npts = verts[_i11].edges != null ? verts[_i11].edges.length : 0;
|
|
458
|
-
|
|
407
|
+
for (let i = 0; i < numPts; ++i) {
|
|
408
|
+
npts = verts[i].edges != null ? verts[i].edges.length : 0;
|
|
459
409
|
if (npts > 0) {
|
|
460
|
-
var _newPts$two;
|
|
461
|
-
|
|
462
410
|
// point is allowed to move
|
|
463
|
-
newPts[zero].getPoint(
|
|
464
|
-
|
|
465
|
-
newPts[one].getPoint(_i11, pX1);
|
|
411
|
+
newPts[zero].getPoint(i, pX0); // use current points
|
|
412
|
+
newPts[one].getPoint(i, pX1);
|
|
466
413
|
deltaX[0] = 0.0;
|
|
467
414
|
deltaX[1] = 0.0;
|
|
468
|
-
deltaX[2] = 0.0;
|
|
469
|
-
|
|
470
|
-
for (var _j5 = 0; _j5 < npts; ++_j5) {
|
|
471
|
-
newPts[one].getPoint(verts[_i11].edges[_j5], y);
|
|
415
|
+
deltaX[2] = 0.0;
|
|
472
416
|
|
|
473
|
-
|
|
474
|
-
|
|
417
|
+
// calculate the negative laplacian of x1
|
|
418
|
+
for (let j = 0; j < npts; ++j) {
|
|
419
|
+
newPts[one].getPoint(verts[i].edges[j], y);
|
|
420
|
+
for (let k = 0; k < 3; ++k) {
|
|
421
|
+
deltaX[k] += (pX1[k] - y[k]) / npts;
|
|
475
422
|
}
|
|
476
423
|
} // for all connected points
|
|
477
|
-
// Taubin: x2 = (x1 - x0) + (x1 - x2)
|
|
478
|
-
|
|
479
424
|
|
|
480
|
-
|
|
481
|
-
|
|
425
|
+
// Taubin: x2 = (x1 - x0) + (x1 - x2)
|
|
426
|
+
for (let k = 0; k < 3; ++k) {
|
|
427
|
+
deltaX[k] = pX1[k] - pX0[k] + pX1[k] - deltaX[k];
|
|
482
428
|
}
|
|
429
|
+
newPts[two].setPoint(i, ...deltaX);
|
|
483
430
|
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
for (var _k6 = 0; _k6 < 3; ++_k6) {
|
|
490
|
-
xNew[_k6] = pX3[_k6] + c[iterationNumber] * deltaX[_k6];
|
|
431
|
+
// smooth the vertex (x3 = x3 + cj x2)
|
|
432
|
+
newPts[three].getPoint(i, pX3);
|
|
433
|
+
for (let k = 0; k < 3; ++k) {
|
|
434
|
+
xNew[k] = pX3[k] + c[iterationNumber] * deltaX[k];
|
|
491
435
|
}
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
var _newPts$three3;
|
|
495
|
-
|
|
496
|
-
(_newPts$three3 = newPts[three]).setPoint.apply(_newPts$three3, [_i11].concat(xNew));
|
|
436
|
+
if (verts[i].type !== VertexType.VTK_FIXED_VERTEX) {
|
|
437
|
+
newPts[three].setPoint(i, ...xNew);
|
|
497
438
|
}
|
|
498
439
|
} // if can move point
|
|
499
440
|
else {
|
|
500
|
-
var _newPts$one3, _newPts$two2;
|
|
501
|
-
|
|
502
441
|
// point is not allowed to move, just use the old point...
|
|
503
442
|
// (zero out the Laplacian)
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
(_newPts$two2 = newPts[two]).setPoint.apply(_newPts$two2, [_i11].concat(zerovector));
|
|
443
|
+
newPts[one].setPoint(i, ...zerovector);
|
|
444
|
+
newPts[two].setPoint(i, ...zerovector);
|
|
507
445
|
}
|
|
508
446
|
} // for all points
|
|
447
|
+
|
|
509
448
|
// update the pointers. three is always three. all other pointers
|
|
510
449
|
// shift by one and wrap.
|
|
511
|
-
|
|
512
|
-
|
|
513
450
|
zero = (1 + zero) % 3;
|
|
514
451
|
one = (1 + one) % 3;
|
|
515
452
|
two = (1 + two) % 3;
|
|
516
453
|
} // for all iterations or until converge
|
|
454
|
+
|
|
517
455
|
// move the iteration count back down so that it matches the
|
|
518
456
|
// actual number of iterations executed
|
|
457
|
+
--iterationNumber;
|
|
519
458
|
|
|
459
|
+
// set zero to three so the correct set of positions is outputted
|
|
460
|
+
zero = three;
|
|
520
461
|
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
zero = three; // console.log('Performed', iterationNumber, 'smoothing passes');
|
|
462
|
+
// console.log('Performed', iterationNumber, 'smoothing passes');
|
|
524
463
|
// if we scaled the data down to the unit cube, then scale data back
|
|
525
464
|
// up to the original space
|
|
526
|
-
|
|
527
465
|
if (model.normalizeCoordinates) {
|
|
528
466
|
// Re-position the coordinated
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
newPts[zero].getPoint(_i12, repositionedPoint);
|
|
535
|
-
|
|
536
|
-
for (var _j6 = 0; _j6 < 3; ++_j6) {
|
|
537
|
-
repositionedPoint[_j6] = repositionedPoint[_j6] * inLength + inCenter[_j6];
|
|
467
|
+
const repositionedPoint = [0, 0, 0];
|
|
468
|
+
for (let i = 0; i < numPts; ++i) {
|
|
469
|
+
newPts[zero].getPoint(i, repositionedPoint);
|
|
470
|
+
for (let j = 0; j < 3; ++j) {
|
|
471
|
+
repositionedPoint[j] = repositionedPoint[j] * inLength + inCenter[j];
|
|
538
472
|
}
|
|
539
|
-
|
|
540
|
-
(_newPts$zero2 = newPts[zero]).setPoint.apply(_newPts$zero2, [_i12].concat(repositionedPoint));
|
|
473
|
+
newPts[zero].setPoint(i, ...repositionedPoint);
|
|
541
474
|
}
|
|
542
475
|
}
|
|
543
|
-
|
|
544
476
|
if (model.generateErrorScalars) {
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
newScalars[_i13] = Math.sqrt(Math.distance2BetweenPoints(x1, x2));
|
|
477
|
+
const newScalars = new Float32Array(numPts);
|
|
478
|
+
for (let i = 0; i < numPts; ++i) {
|
|
479
|
+
inPts.getPoint(i, x1);
|
|
480
|
+
newPts[zero].getPoint(i, x2);
|
|
481
|
+
newScalars[i] = Math.sqrt(Math.distance2BetweenPoints(x1, x2));
|
|
551
482
|
}
|
|
552
|
-
|
|
553
|
-
var newScalarsArray = vtkDataArray.newInstance({
|
|
483
|
+
const newScalarsArray = vtkDataArray.newInstance({
|
|
554
484
|
numberOfComponents: 1,
|
|
555
485
|
values: newScalars
|
|
556
486
|
});
|
|
557
|
-
|
|
487
|
+
const idx = output.getPointData().addArray(newScalarsArray);
|
|
558
488
|
output.getPointData().setActiveAttribute(idx, AttributeTypes.SCALARS);
|
|
559
489
|
}
|
|
560
|
-
|
|
561
490
|
if (model.generateErrorVectors) {
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
for (var _j7 = 0; _j7 < 3; ++_j7) {
|
|
569
|
-
newVectors[3 * _i14 + _j7] = x2[_j7] - x1[_j7];
|
|
491
|
+
const newVectors = new Float32Array(3 * numPts);
|
|
492
|
+
for (let i = 0; i < numPts; ++i) {
|
|
493
|
+
inPts.getPoint(i, x1);
|
|
494
|
+
newPts[zero].getPoint(i, x2);
|
|
495
|
+
for (let j = 0; j < 3; ++j) {
|
|
496
|
+
newVectors[3 * i + j] = x2[j] - x1[j];
|
|
570
497
|
}
|
|
571
498
|
}
|
|
572
|
-
|
|
573
|
-
var newVectorsArray = vtkDataArray.newInstance({
|
|
499
|
+
const newVectorsArray = vtkDataArray.newInstance({
|
|
574
500
|
numberOfComponents: 3,
|
|
575
501
|
values: newVectors
|
|
576
502
|
});
|
|
577
503
|
output.getPointData().setVectors(newVectorsArray);
|
|
578
504
|
}
|
|
579
|
-
|
|
580
505
|
return newPts[zero];
|
|
581
506
|
};
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
var numberOfInputs = publicAPI.getNumberOfInputPorts();
|
|
585
|
-
|
|
507
|
+
publicAPI.requestData = (inData, outData) => {
|
|
508
|
+
const numberOfInputs = publicAPI.getNumberOfInputPorts();
|
|
586
509
|
if (!numberOfInputs) {
|
|
587
510
|
return;
|
|
588
511
|
}
|
|
589
|
-
|
|
590
|
-
var input = inData[0];
|
|
591
|
-
|
|
512
|
+
const input = inData[0];
|
|
592
513
|
if (!input) {
|
|
593
514
|
return;
|
|
594
515
|
}
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
var outputPoints = publicAPI.vtkWindowedSincPolyDataFilterExecute(input.getPoints(), input, output);
|
|
516
|
+
const output = vtkPolyData.newInstance();
|
|
517
|
+
const outputPoints = publicAPI.vtkWindowedSincPolyDataFilterExecute(input.getPoints(), input, output);
|
|
598
518
|
output.setPointData(input.getPointData());
|
|
599
519
|
output.setCellData(input.getCellData());
|
|
600
520
|
output.setFieldData(input.getFieldData());
|
|
@@ -605,12 +525,12 @@ function vtkWindowedSincPolyDataFilter(publicAPI, model) {
|
|
|
605
525
|
output.setStrips(input.getStrips());
|
|
606
526
|
outData[0] = output;
|
|
607
527
|
};
|
|
608
|
-
}
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
// ----------------------------------------------------------------------------
|
|
609
531
|
// Object factory
|
|
610
532
|
// ----------------------------------------------------------------------------
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
var DEFAULT_VALUES = {
|
|
533
|
+
const DEFAULT_VALUES = {
|
|
614
534
|
numberOfIterations: 20,
|
|
615
535
|
passBand: 0.1,
|
|
616
536
|
featureAngle: 45.0,
|
|
@@ -621,30 +541,38 @@ var DEFAULT_VALUES = {
|
|
|
621
541
|
generateErrorScalars: 0,
|
|
622
542
|
generateErrorVectors: 0,
|
|
623
543
|
normalizeCoordinates: 0
|
|
624
|
-
};
|
|
544
|
+
};
|
|
625
545
|
|
|
546
|
+
// ----------------------------------------------------------------------------
|
|
626
547
|
function extend(publicAPI, model) {
|
|
627
|
-
|
|
548
|
+
let initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
628
549
|
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
550
|
+
|
|
629
551
|
/* Make this a VTK object */
|
|
630
552
|
|
|
631
553
|
macro.obj(publicAPI, model);
|
|
554
|
+
|
|
632
555
|
/* Also make it an algorithm with one input and one output */
|
|
633
556
|
|
|
634
557
|
macro.algo(publicAPI, model, 1, 1);
|
|
635
|
-
/* Setters */
|
|
636
558
|
|
|
559
|
+
/* Setters */
|
|
637
560
|
macro.setGet(publicAPI, model, ['numberOfIterations', 'passBand', 'featureAngle', 'edgeAngle', 'featureEdgeSmoothing', 'boundarySmoothing', 'nonManifoldSmoothing', 'generateErrorScalars', 'generateErrorVectors', 'normalizeCoordinates']);
|
|
561
|
+
|
|
638
562
|
/* Object specific methods */
|
|
639
563
|
|
|
640
564
|
vtkWindowedSincPolyDataFilter(publicAPI, model);
|
|
641
|
-
}
|
|
565
|
+
}
|
|
642
566
|
|
|
643
|
-
|
|
567
|
+
// ----------------------------------------------------------------------------
|
|
568
|
+
|
|
569
|
+
const newInstance = macro.newInstance(extend, 'vtkWindowedSincPolyDataFilter');
|
|
570
|
+
|
|
571
|
+
// ----------------------------------------------------------------------------
|
|
644
572
|
|
|
645
573
|
var vtkWindowedSincPolyDataFilter$1 = {
|
|
646
|
-
newInstance
|
|
647
|
-
extend
|
|
574
|
+
newInstance,
|
|
575
|
+
extend
|
|
648
576
|
};
|
|
649
577
|
|
|
650
578
|
export { vtkWindowedSincPolyDataFilter$1 as default, extend, newInstance };
|