diff --git a/.gitlab/ci/ctest_exclusions.cmake b/.gitlab/ci/ctest_exclusions.cmake index 5b534327eed3e49d0ebd597705618a3c4d09c781..98e297a3fe0d45afded302372cc6ac992c96c750 100644 --- a/.gitlab/ci/ctest_exclusions.cmake +++ b/.gitlab/ci/ctest_exclusions.cmake @@ -60,9 +60,6 @@ if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "fedora" OR "^VTK::FiltersModelingPython-TestCookieCutter$" "^VTK::RenderingCoreCxx-TestTextureRGBADepthPeeling$" # seems to just not work here - # Font rendering differences (new baseline?) - "^VTK::RenderingFreeTypeCxx-TestFreeTypeTextMapperWithColumns$" - # Flaky timeouts https://gitlab.kitware.com/vtk/vtk/-/issues/18861 "^VTK::InteractionWidgetsCxx-TestPickingManagerSeedWidget$" @@ -74,7 +71,12 @@ endif () if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "el8") list(APPEND test_exclusions - # Matplotlib fails to render anything. See #19302. + # Matplotlib related issues. See #19302. + # Matplotlib fails to render anything. + "^VTK::RenderingMatplotlibCxx-TestContextMathTextImage$" + "^VTK::RenderingMatplotlibCxx-TestIndexedLookupScalarBar$" + "^VTK::RenderingMatplotlibCxx-TestMathTextActor$" + "^VTK::RenderingMatplotlibCxx-TestMathTextActor3D$" "^VTK::RenderingMatplotlibCxx-TestRenderString$" "^VTK::RenderingMatplotlibCxx-TestScalarBarCombinatorics$" "^VTK::RenderingMatplotlibCxx-TestStringToPath$" @@ -82,6 +84,12 @@ if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "el8") "^VTK::RenderingMatplotlibPython-TestMathTextActor3D$" "^VTK::RenderingMatplotlibPython-TestRenderString$" "^VTK::RenderingMatplotlibPython-TestStringToPath$" + # Freetype, which depends on Matplotlib, fails to render anything + "^VTK::RenderingFreeTypeCxx-TestFontDPIScaling$" + "^VTK::RenderingFreeTypeCxx-TestFreeTypeTextMapper$" + "^VTK::RenderingFreeTypeCxx-TestFreeTypeTextMapperWithColumns$" + "^VTK::RenderingFreeTypeCxx-TestMathTextFonts$" + "^VTK::RenderingFreeTypeCxx-TestMathTextFreeTypeTextRenderer$" # Consistent timeout. Needs investigation. # https://gitlab.kitware.com/vtk/vtk/-/issues/19303 @@ -335,6 +343,7 @@ if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "macos_arm64") # floating point precision issues (fma optimizations change results) # https://gitlab.kitware.com/vtk/vtk/-/issues/19418 "^VTK::CommonDataModelCxx-TestHyperTreeGridGeometricLocator$" + "^VTK::ChartsCoreCxx-TestLinePlot3D$" "^VTK::FiltersCoreCxx-TestImplicitPolyDataDistanceCube$" "^VTK::FiltersCorePython-TestSphereTreeFilter$" "^VTK::FiltersFlowPathsCxx-TestEvenlySpacedStreamlines2D$" @@ -353,16 +362,24 @@ if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "macos_arm64") # https://gitlab.kitware.com/vtk/vtk/-/issues/18229 "^VTK::FiltersHyperTreeCxx-TestHyperTreeGridBinaryClipPlanes$" "^VTK::RenderingAnnotationCxx-TestCubeAxes3$" - "^VTK::RenderingAnnotationCxx-TestCubeAxesWithYLines$") + "^VTK::RenderingAnnotationCxx-TestCubeAxesWithYLines$" + + # https://gitlab.kitware.com/vtk/vtk/-/issues/19578 + "^VTK::FiltersGeneralCxx-TestContourTriangulatorHoles$") endif () if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "macos") list(APPEND test_exclusions + # line differences https://gitlab.kitware.com/vtk/vtk/-/issues/18229 + "^VTK::FiltersSourcesCxx-TestHyperTreeGridPreConfiguredSource$" + "^VTK::FiltersSourcesCxx-TestRandomHyperTreeGridSource$" + # geometry shader issues (observed on M4 hardware) # https://gitlab.kitware.com/vtk/vtk/-/issues/19555 "^VTK::IOIOSSCxx-TestIOSSApplyDisplacementsCGNS$" "^VTK::IOADIOS2Cxx-TestADIOS2BPReaderSingleTimeStep$" - "^VTK::CommonDataModelPython-TestClipPolyhedra$") + "^VTK::CommonDataModelPython-TestClipPolyhedra$" + "^VTK::ImagingCoreCxx-TestStencilWithPolyDataContour$") endif () if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "wheel_macos" AND @@ -370,12 +387,16 @@ if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "wheel_macos" AND list(APPEND test_exclusions # floating point precision issues (fma optimizations change results) # https://gitlab.kitware.com/vtk/vtk/-/issues/19418 + "^VTK::ChartsCoreCxx-TestLinePlot3D$" "^VTK::FiltersCorePython-TestSphereTreeFilter$" "^VTK::FiltersModelingPython-Hyper$" "^VTK::RenderingAnnotationPython-xyPlot$" "^VTK::RenderingAnnotationPython-xyPlot2$" "^VTK::RenderingAnnotationPython-xyPlot4$" - "^VTK::RenderingCorePython-pickImageData$") + "^VTK::RenderingCorePython-pickImageData$" + + # https://gitlab.kitware.com/vtk/vtk/-/issues/19578 + "^VTK::FiltersGeneralCxx-TestContourTriangulatorHoles$") endif () if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "macos_x86_64") diff --git a/.gitlab/ci/docker/el8-icc/install_deps.sh b/.gitlab/ci/docker/el8-icc/install_deps.sh index d87cd9f19b68538fb51b8efeaa2fd88ef47f3957..a4800a069e6222008c3d60c9b14035fbf847b675 100755 --- a/.gitlab/ci/docker/el8-icc/install_deps.sh +++ b/.gitlab/ci/docker/el8-icc/install_deps.sh @@ -29,7 +29,7 @@ dnf install -y --setopt=install_weak_deps=False \ python3.11-pip python3.11 -m venv /opt/python311/venv -/opt/python311/venv/bin/pip install matplotlib +/opt/python311/venv/bin/pip install 'matplotlib<=3.6.3' # wslink will bring aiohttp>=3.7.4 /opt/python311/venv/bin/pip install 'wslink>=1.0.4' diff --git a/CMake/vtkModuleTesting.cmake b/CMake/vtkModuleTesting.cmake index b14de44af83126cd8dbc79d38c5e4570b3fd015a..d6bfe27f8ba93b0c22be06413e4a637215158219 100644 --- a/CMake/vtkModuleTesting.cmake +++ b/CMake/vtkModuleTesting.cmake @@ -360,7 +360,9 @@ function (vtk_add_test_cxx exename _tests) # Insufficient graphics resources. "Attempt to use a texture buffer exceeding your hardware's limits" # Vulkan driver not setup correctly. - "vulkan: No DRI3 support detected - required for presentation") + "vulkan: No DRI3 support detected - required for presentation" + # OpenGL driver cannot render wide lines. + "a line width has been requested that is larger than your system supports") foreach (name IN LISTS names) _vtk_test_set_options("${cxx_options}" "local_" ${_${name}_options}) diff --git a/Charts/Core/Testing/Cxx/CMakeLists.txt b/Charts/Core/Testing/Cxx/CMakeLists.txt index a9c1f3da5692911ac72e2905bad9003962baefe2..4479a1a8108a8b406abafb243851a11daa2505cd 100644 --- a/Charts/Core/Testing/Cxx/CMakeLists.txt +++ b/Charts/Core/Testing/Cxx/CMakeLists.txt @@ -43,23 +43,23 @@ vtk_add_test_cxx(vtkChartsCoreCxxTests tests TestCompositeControlPointsItem.cxx,NO_DATA,NO_VALID TestControlPointsItemEvents.cxx,NO_DATA,NO_VALID TestAreaPlot.cxx - TestAxes.cxx + TestAxes.cxx,LOOSE_VALID TestAxes2.cxx - TestBagPlot.cxx - TestBarGraph.cxx - TestBarGraphHorizontal.cxx - TestBarGraphSelection.cxx - TestBoxPlot.cxx - TestBoxPlot2.cxx + TestBagPlot.cxx,LOOSE_VALID + TestBarGraph.cxx,LOOSE_VALID + TestBarGraphHorizontal.cxx,LOOSE_VALID + TestBarGraphSelection.cxx,LOOSE_VALID + TestBoxPlot.cxx,LOOSE_VALID + TestBoxPlot2.cxx,LOOSE_VALID TestCategoryLegend.cxx TestColorTransferFunction.cxx - TestChartBadPoints.cxx + TestChartBadPoints.cxx,LOOSE_VALID TestChartDouble.cxx TestChartDoubleColors.cxx TestChartDoubleColorsOpaque.cxx TestChartLogScaleUpdates.cxx - TestChartMatrix.cxx - TestChartMatrix2.cxx + TestChartMatrix.cxx,LOOSE_VALID + TestChartMatrix2.cxx,LOOSE_VALID TestChartMatrix3.cxx TestChartPicking.cxx,NO_DATA,NO_VALID TestChartTileScaling.cxx @@ -70,33 +70,33 @@ vtk_add_test_cxx(vtkChartsCoreCxxTests tests TestChartXYZMarginsRotations.cxx TestChartXYZOuterEdgeLabelling.cxx TestChartXYZUnconstrained.cxx - TestContext.cxx - TestContextArea.cxx - TestContextAreaFixedAspect.cxx - TestContextAreaFixedMargins.cxx + TestContext.cxx,LOOSE_VALID + TestContextArea.cxx,LOOSE_VALID + TestContextAreaFixedAspect.cxx,LOOSE_VALID + TestContextAreaFixedMargins.cxx,LOOSE_VALID TestContextAreaFixedRect.cxx TestContextImage.cxx TestContextItemStacking.cxx TestContextUnicode.cxx TestControlPointsHandleItem.cxx TestDiagram.cxx - TestFunctionalBagPlot.cxx - TestHistogram2D.cxx + TestFunctionalBagPlot.cxx,LOOSE_VALID + TestHistogram2D.cxx,LOOSE_VALID TestHistogram2DComponent.cxx TestHistogram2DMagnitude.cxx TestInteractiveChartXYZ.cxx - TestLegendHiddenPlots.cxx + TestLegendHiddenPlots.cxx,LOOSE_VALID TestLinePlot.cxx TestLinePlotDouble.cxx - TestLinePlotDouble2.cxx + TestLinePlotDouble2.cxx,LOOSE_VALID TestLinePlot3D.cxx - TestLinePlotAxisFonts.cxx + TestLinePlotAxisFonts.cxx,LOOSE_VALID TestLinePlot2.cxx TestLinePlotInteraction.cxx - TestLinePlotSelection.cxx - TestLinePlotSelection2.cxx + TestLinePlotSelection.cxx,LOOSE_VALID + TestLinePlotSelection2.cxx,LOOSE_VALID TestLinePlotSelectionMultiBlock.cxx - TestMultipleChartRenderers.cxx + TestMultipleChartRenderers.cxx,LOOSE_VALID TestMultipleRenderers.cxx TestMultipleScalarsToColors.cxx TestParallelCoordinates.cxx @@ -105,19 +105,19 @@ vtk_add_test_cxx(vtkChartsCoreCxxTests tests TestParallelCoordinatesSelection.cxx,NO_VALID TestPieChart.cxx TestPlotBarRangeHandlesItem.cxx,NO_DATA,NO_VALID - TestPlotMatrix.cxx + TestPlotMatrix.cxx,LOOSE_VALID TestPlotRangeHandlesItem.cxx,NO_DATA,NO_VALID TestPropItem.cxx TestRangeHandlesItemEvents.cxx,NO_DATA,NO_VALID TestScalarsToColors.cxx - TestScatterPlot.cxx + TestScatterPlot.cxx,LOOSE_VALID TestScatterPlotMatrix.cxx TestScatterPlotMatrixHistogram.cxx TestScatterPlotMatrixVehicles.cxx TestScatterPlotMatrixVisible.cxx - TestScientificPlot.cxx + TestScientificPlot.cxx,LOOSE_VALID TestStackedBarGraph.cxx - TestStackedPlot.cxx + TestStackedPlot.cxx,LOOSE_VALID TestSurfacePlot.cxx TestZoomAxis.cxx TestZoomIndividualAxis.cxx diff --git a/Charts/Core/Testing/Data/Baseline/TestFunctionalBagPlot.png.sha512 b/Charts/Core/Testing/Data/Baseline/TestFunctionalBagPlot.png.sha512 index 45871913d164f2d6a04f6d2ba9131cddac06acc0..7ab79d9101109953aec081034619b758c741d2c4 100644 --- a/Charts/Core/Testing/Data/Baseline/TestFunctionalBagPlot.png.sha512 +++ b/Charts/Core/Testing/Data/Baseline/TestFunctionalBagPlot.png.sha512 @@ -1 +1 @@ -4c0e5f5c302fb42f5710a73b461727bc190ad825d5933f0c8a50e305a9c7faec748244777c6ab59f4a2dc2498186be85ebf8c2442ebda6026c4807fdde816e54 +ec9d7af2d443f4f1ca500c53196d848cd44d05eb28fa9cb086f025c62eb982bc2545f67539a6606b4d719be84b52f9db93a4e9b18c9059935702c50ad90c50e7 diff --git a/Charts/Core/Testing/Data/Baseline/TestPropItem.png.sha512 b/Charts/Core/Testing/Data/Baseline/TestPropItem.png.sha512 index 279b1e1bb20123d6050e427c2fbbbaef3f64f062..ec5150f9079f69e5e4fc2f79360c99d62ca9d4c9 100644 --- a/Charts/Core/Testing/Data/Baseline/TestPropItem.png.sha512 +++ b/Charts/Core/Testing/Data/Baseline/TestPropItem.png.sha512 @@ -1 +1 @@ -d80dd6b9c0afa2b1fda24c592b402f60fee9b6acbf3b93e7a2e9dbff929da605d0b93ddf755d664046922dea8c650602f806bb3067c352eeb131b8c28ad24ab5 +02c8833b3820bab0ef027a0ebeb737a29cb569f9be34672f8e531e55a7516182a70152f96b4c63fd0de01aebef3f6c2fb5f2edfa405f9c16b899ab052917594a diff --git a/Common/DataModel/vtkAbstractCellLinks.h b/Common/DataModel/vtkAbstractCellLinks.h index bd905759e056255737ea833f7082ffe50ce600f3..e48643dab7c0b51d3ec4c98c17fcd9d4218f0e19 100644 --- a/Common/DataModel/vtkAbstractCellLinks.h +++ b/Common/DataModel/vtkAbstractCellLinks.h @@ -20,6 +20,7 @@ #define vtkAbstractCellLinks_h #include "vtkCommonDataModelModule.h" // For export macro +#include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_5_0 #include "vtkObject.h" VTK_ABI_NAMESPACE_BEGIN @@ -154,9 +155,28 @@ public: * filter always runs in serial mode.) This flag is typically used for * benchmarking purposes. */ + VTK_DEPRECATED_IN_9_5_0("No longer used.") vtkSetMacro(SequentialProcessing, bool); + VTK_DEPRECATED_IN_9_5_0("No longer used.") vtkGetMacro(SequentialProcessing, bool); - vtkBooleanMacro(SequentialProcessing, bool); + VTK_DEPRECATED_IN_9_5_0("No longer used.") + virtual void SequentialProcessingOn() + { + if (!this->SequentialProcessing) + { + this->SequentialProcessing = true; + this->Modified(); + } + } + VTK_DEPRECATED_IN_9_5_0("No longer used.") + virtual void SequentialProcessingOff() + { + if (this->SequentialProcessing) + { + this->SequentialProcessing = false; + this->Modified(); + } + } ///@} ///@{ @@ -177,6 +197,7 @@ protected: ~vtkAbstractCellLinks() override; vtkDataSet* DataSet; + // VTK_DEPRECATED_IN_9_5_0("No longer used.") bool SequentialProcessing; // control whether to thread or not int Type; // derived classes set this instance variable when constructed diff --git a/Common/DataModel/vtkBoundingBox.cxx b/Common/DataModel/vtkBoundingBox.cxx index 340d55f3404257263c48142a541195b2dc8bb91e..a3d13096668ea1ca536ca5cdf547060c64164f0e 100644 --- a/Common/DataModel/vtkBoundingBox.cxx +++ b/Common/DataModel/vtkBoundingBox.cxx @@ -765,6 +765,36 @@ bool vtkBoundingBox::IntersectsLine(const double p1[3], const double p2[3]) cons return false; } +// --------------------------------------------------------------------------- +void vtkBoundingBox::GetDistance(double point[3], double distance[3]) +{ + for (int i = 0; i < 3; i++) + { + if (point[i] < this->MinPnt[i]) + { + distance[i] = point[i] - this->MinPnt[i]; + } + else if (point[i] > this->MaxPnt[i]) + { + distance[i] = point[i] - this->MaxPnt[i]; + } + else + { + distance[i] = 0; + } + } +} + +// --------------------------------------------------------------------------- +void vtkBoundingBox::Translate(double motion[3]) +{ + for (int i = 0; i < 3; i++) + { + this->MinPnt[i] += motion[i]; + this->MaxPnt[i] += motion[i]; + } +} + // --------------------------------------------------------------------------- void vtkBoundingBox::ClampPoint(double point[3]) { diff --git a/Common/DataModel/vtkBoundingBox.h b/Common/DataModel/vtkBoundingBox.h index 77d20375023b5f280e3faf7cd49a4b89b926740e..50fe1839f7ce95b55217f5534d036ff4c8db8f84 100644 --- a/Common/DataModel/vtkBoundingBox.h +++ b/Common/DataModel/vtkBoundingBox.h @@ -381,6 +381,20 @@ public: */ void ClampPoint(double point[3]); + /** + * For each axis, get the minimum distance to put the point inside the box. + * A value of 0 means "between min and max" (for the given coordinates). + * This is useful to get the minimum translation to apply to contains a point. + * @see Translate. + */ + void GetDistance(double point[3], double distance[3]); + + /** + * Translate box from motion. + * The value of motion is added to MinPoint and MaxPoint. + */ + void Translate(double motion[3]); + protected: double MinPnt[3], MaxPnt[3]; }; diff --git a/Common/DataModel/vtkCellLinks.cxx b/Common/DataModel/vtkCellLinks.cxx index b4c2c65c56b00f5e3765b9b76a15ab7fe3759a31..3cf667c89879e584cd080390bab094f62c22afe9 100644 --- a/Common/DataModel/vtkCellLinks.cxx +++ b/Common/DataModel/vtkCellLinks.cxx @@ -249,7 +249,6 @@ void vtkCellLinks::DeepCopy(vtkAbstractCellLinks* src) { return; } - this->SetSequentialProcessing(src->GetSequentialProcessing()); this->Allocate(cellLinks->Size, cellLinks->Extend); vtkSMPTools::For(0, cellLinks->MaxId + 1, [&](vtkIdType ptId, vtkIdType endPtId) @@ -277,7 +276,6 @@ void vtkCellLinks::ShallowCopy(vtkAbstractCellLinks* src) { return; } - this->SetSequentialProcessing(src->GetSequentialProcessing()); this->ArraySharedPtr = cellLinks->ArraySharedPtr; this->Array = this->ArraySharedPtr.get(); this->Size = cellLinks->Size; diff --git a/Common/DataModel/vtkStaticCellLinks.cxx b/Common/DataModel/vtkStaticCellLinks.cxx index d075e88fb6f2fea71f7728c80f1f7ca42d401d0e..c58265bf27b8b4dbba8e1a3a01bb50ab5503a66e 100644 --- a/Common/DataModel/vtkStaticCellLinks.cxx +++ b/Common/DataModel/vtkStaticCellLinks.cxx @@ -28,7 +28,6 @@ void vtkStaticCellLinks::BuildLinks() { return; } - this->Impl->SetSequentialProcessing(this->SequentialProcessing); this->Impl->BuildLinks(this->DataSet); this->BuildTime.Modified(); } @@ -41,7 +40,6 @@ void vtkStaticCellLinks::DeepCopy(vtkAbstractCellLinks* src) { return; } - this->SetSequentialProcessing(staticCellLinks->GetSequentialProcessing()); this->Impl->DeepCopy(staticCellLinks->Impl); this->BuildTime.Modified(); } @@ -54,7 +52,6 @@ void vtkStaticCellLinks::ShallowCopy(vtkAbstractCellLinks* src) { return; } - this->SetSequentialProcessing(staticCellLinks->GetSequentialProcessing()); this->Impl->ShallowCopy(staticCellLinks->Impl); this->BuildTime.Modified(); } diff --git a/Common/DataModel/vtkStaticCellLinksTemplate.h b/Common/DataModel/vtkStaticCellLinksTemplate.h index 813032d5766b3c265622fe327211714237877c49..adbe026658e9f4fa45598012a9146082169ed3ae 100644 --- a/Common/DataModel/vtkStaticCellLinksTemplate.h +++ b/Common/DataModel/vtkStaticCellLinksTemplate.h @@ -34,7 +34,7 @@ #define vtkStaticCellLinksTemplate_h #include "vtkABINamespace.h" -#include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_4_0 +#include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_5_0 #include <memory> // For shared_ptr #include <vector> // For vector @@ -92,17 +92,33 @@ public: /** * Specialized methods for building links from cell array(S). */ + VTK_DEPRECATED_IN_9_5_0("Use BuildLinksFromMultipleArrays instead.") void SerialBuildLinksFromMultipleArrays( - vtkIdType numPts, vtkIdType numCells, std::vector<vtkCellArray*> cellArrays); + vtkIdType numPts, vtkIdType numCells, std::vector<vtkCellArray*> cellArrays) + { + this->BuildLinksFromMultipleArrays(numPts, numCells, cellArrays); + } + VTK_DEPRECATED_IN_9_5_0("Use BuildLinks instead.") void SerialBuildLinks(vtkIdType numPts, vtkIdType numCells, vtkCellArray* cellArray) { - this->SerialBuildLinksFromMultipleArrays(numPts, numCells, { cellArray }); + this->BuildLinksFromMultipleArrays(numPts, numCells, { cellArray }); } + VTK_DEPRECATED_IN_9_5_0("Use BuildLinksFromMultipleArrays instead.") void ThreadedBuildLinksFromMultipleArrays( - vtkIdType numPts, vtkIdType numCells, std::vector<vtkCellArray*> cellArrays); + vtkIdType numPts, vtkIdType numCells, std::vector<vtkCellArray*> cellArrays) + { + this->BuildLinksFromMultipleArrays(numPts, numCells, cellArrays); + } + VTK_DEPRECATED_IN_9_5_0("Use BuildLinks instead.") void ThreadedBuildLinks(vtkIdType numPts, vtkIdType numCells, vtkCellArray* cellArray) { - this->ThreadedBuildLinksFromMultipleArrays(numPts, numCells, { cellArray }); + this->BuildLinksFromMultipleArrays(numPts, numCells, { cellArray }); + } + void BuildLinksFromMultipleArrays( + vtkIdType numPts, vtkIdType numCells, std::vector<vtkCellArray*> cellArrays); + void BuildLinks(vtkIdType numPts, vtkIdType numCells, vtkCellArray* cellArray) + { + this->BuildLinksFromMultipleArrays(numPts, numCells, { cellArray }); } ///@} @@ -149,7 +165,7 @@ public: * Support vtkAbstractCellLinks API. */ unsigned long GetActualMemorySize(); - VTK_DEPRECATED_IN_9_4_0("Use DeepCopy(vtkStaticCellLinksTemplate instead.") + VTK_DEPRECATED_IN_9_5_0("Use DeepCopy(vtkStaticCellLinksTemplate instead.") void DeepCopy(vtkAbstractCellLinks*) {} void DeepCopy(vtkStaticCellLinksTemplate* src); void ShallowCopy(vtkStaticCellLinksTemplate* src); @@ -160,7 +176,9 @@ public: /** * Control whether to thread or serial process. */ + VTK_DEPRECATED_IN_9_5_0("No longer used.") void SetSequentialProcessing(vtkTypeBool seq) { this->SequentialProcessing = seq; } + VTK_DEPRECATED_IN_9_5_0("No longer used.") vtkTypeBool GetSequentialProcessing() { return this->SequentialProcessing; } ///@} @@ -179,6 +197,7 @@ protected: // Support for execution int Type; + // VTK_DEPRECATED_IN_9_5_0("No longer used.") vtkTypeBool SequentialProcessing; private: diff --git a/Common/DataModel/vtkStaticCellLinksTemplate.txx b/Common/DataModel/vtkStaticCellLinksTemplate.txx index 15dfb0768ff90fbbc051ea3a606b15c8af86a97a..f628f7d324534ec78153398c38c82439dd0ff196 100644 --- a/Common/DataModel/vtkStaticCellLinksTemplate.txx +++ b/Common/DataModel/vtkStaticCellLinksTemplate.txx @@ -12,10 +12,10 @@ #include "vtkPolyData.h" #include "vtkSMPTools.h" #include "vtkUnstructuredGrid.h" -#include <array> -#include <atomic> +#include <atomic> #include <type_traits> +#include <vector> //---------------------------------------------------------------------------- // Note: this class is a faster, threaded version of vtkCellLinks. It uses @@ -110,56 +110,55 @@ void vtkStaticCellLinksTemplate<TIds>::BuildLinks(vtkDataSet* ds) this->NumCells = ds->GetNumberOfCells(); this->NumPts = ds->GetNumberOfPoints(); - vtkIdType npts, ptId; - vtkIdType cellId, j; - vtkIdList* cellPts = vtkIdList::New(); - // Traverse data to determine number of uses of each point. Also count the // number of links to allocate. - this->OffsetsSharedPtr.reset(new TIds[this->NumPts + 1], std::default_delete<TIds[]>()); - this->Offsets = this->OffsetsSharedPtr.get(); - vtkSMPTools::Fill(this->Offsets, this->Offsets + this->NumPts + 1, 0); + std::vector<TIds> counts(static_cast<size_t>(this->NumPts)); - for (this->LinksSize = 0, cellId = 0; cellId < this->NumCells; cellId++) + vtkNew<vtkIdList> cellPts; + this->LinksSize = 0; + for (vtkIdType cellId = 0; cellId < this->NumCells; cellId++) { ds->GetCellPoints(cellId, cellPts); - npts = cellPts->GetNumberOfIds(); - for (j = 0; j < npts; j++) + vtkIdType npts = cellPts->GetNumberOfIds(); + for (vtkIdType j = 0; j < npts; j++) { - this->Offsets[cellPts->GetId(j)]++; + counts[cellPts->GetId(j)]++; this->LinksSize++; } } - // Allocate space for links. Perform prefix sum. + // Perform prefix sum to determine offsets + this->OffsetsSharedPtr.reset(new TIds[this->NumPts + 1], std::default_delete<TIds[]>()); + this->Offsets = this->OffsetsSharedPtr.get(); + this->Offsets[0] = 0; + for (vtkIdType ptId = 1; ptId < this->NumPts; ++ptId) + { + const TIds& nCells = counts[ptId - 1]; + this->Offsets[ptId] = this->Offsets[ptId - 1] + nCells; + } + this->Offsets[this->NumPts] = this->LinksSize; + + // Allocate links array, Extra one allocated to simplify later pointer manipulation this->LinkSharedPtr.reset(new TIds[this->LinksSize + 1], std::default_delete<TIds[]>()); this->Links = this->LinkSharedPtr.get(); this->Links[this->LinksSize] = this->NumPts; - for (ptId = 0; ptId < this->NumPts; ++ptId) - { - npts = this->Offsets[ptId + 1]; - this->Offsets[ptId + 1] = this->Offsets[ptId] + npts; - } - // Now build the links. The summation from the prefix sum indicates where // the cells are to be inserted. Each time a cell is inserted, the offset // is decremented. In the end, the offset array is also constructed as it // points to the beginning of each cell run. - for (cellId = 0; cellId < this->NumCells; ++cellId) + for (vtkIdType cellId = 0; cellId < this->NumCells; ++cellId) { ds->GetCellPoints(cellId, cellPts); - npts = cellPts->GetNumberOfIds(); - for (j = 0; j < npts; ++j) + vtkIdType npts = cellPts->GetNumberOfIds(); + for (vtkIdType j = 0; j < npts; ++j) { - ptId = cellPts->GetId(j); - this->Offsets[ptId]--; - this->Links[this->Offsets[ptId]] = cellId; + vtkIdType ptId = cellPts->GetId(j); + const TIds offset = this->Offsets[ptId + 1] - counts[ptId]--; + this->Links[offset] = cellId; } } this->Offsets[this->NumPts] = this->LinksSize; - - cellPts->Delete(); } VTK_ABI_NAMESPACE_END @@ -168,26 +167,10 @@ namespace vtkSCLT_detail VTK_ABI_NAMESPACE_BEGIN struct CountPoints -{ - template <typename CellStateT, typename TIds> - void operator()(CellStateT& state, TIds* linkOffsets) - { - using ValueType = typename CellStateT::ValueType; - const auto cellConnectivity = vtk::DataArrayValueRange<1>(state.GetConnectivity()); - - // Count number of point uses - for (const ValueType ptId : cellConnectivity) - { - ++linkOffsets[ptId]; - } - } -}; - -struct CountPointsThreaded { template <typename CellStateT, typename TIds> void operator()( - CellStateT& state, std::atomic<TIds>* linkOffsets, vtkIdType beginCellId, vtkIdType endCellId) + CellStateT& state, std::atomic<TIds>* counts, vtkIdType beginCellId, vtkIdType endCellId) { using ValueType = typename CellStateT::ValueType; const vtkIdType connBeginId = state.GetBeginOffset(beginCellId); @@ -198,43 +181,12 @@ struct CountPointsThreaded for (const ValueType ptId : connRange) { // memory_order_relaxed is safe here, since we're not using the atomics for synchronization. - linkOffsets[ptId].fetch_add(1, std::memory_order_relaxed); + counts[ptId].fetch_add(1, std::memory_order_relaxed); } } }; -// Serial version: struct BuildLinks -{ - template <typename CellStateT, typename TIds> - void operator()(CellStateT& state, TIds* linkOffsets, TIds* links, vtkIdType idOffset = 0) - { - using ValueType = typename CellStateT::ValueType; - - const vtkIdType numCells = state.GetNumberOfCells(); - - const auto cellConnectivity = vtk::DataArrayValueRange<1>(state.GetConnectivity()); - const auto cellOffsets = vtk::DataArrayValueRange<1>(state.GetOffsets()); - // Now build the links. The summation from the prefix sum indicates where - // the cells are to be inserted. Each time a cell is inserted, the offset - // is decremented. In the end, the offset array is also constructed as it - // points to the beginning of each cell run. - ValueType ptIdOffset; - size_t ptId; - for (vtkIdType cellId = 0; cellId < numCells; ++cellId) - { - for (ptIdOffset = cellOffsets[cellId]; ptIdOffset < cellOffsets[cellId + 1]; ++ptIdOffset) - { - ptId = static_cast<size_t>(cellConnectivity[ptIdOffset]); - --linkOffsets[ptId]; - links[linkOffsets[ptId]] = static_cast<TIds>(idOffset + cellId); - } - } - } -}; - -// Parallel version: -struct BuildLinksThreaded { template <typename CellStateT, typename TIds> void operator()(CellStateT& state, const TIds* offsets, std::atomic<TIds>* counts, TIds* links, @@ -257,7 +209,7 @@ struct BuildLinksThreaded { ptId = static_cast<size_t>(cellConnectivity[ptIdOffset]); // memory_order_relaxed is safe here, since we're not using the atomics for synchronization. - offset = offsets[ptId] + counts[ptId].fetch_sub(1, std::memory_order_relaxed) - 1; + offset = offsets[ptId + 1] - counts[ptId].fetch_sub(1, std::memory_order_relaxed); links[offset] = idOffset + cellId; } } @@ -267,64 +219,6 @@ struct BuildLinksThreaded VTK_ABI_NAMESPACE_END } // end namespace vtkSCLT_detail -VTK_ABI_NAMESPACE_BEGIN -//---------------------------------------------------------------------------- -// Build the link list array for unstructured grids. Note this is a serial -// implementation: while there is another method (threaded) that is usually -// much faster, in certain pathological situations the serial version can be -// faster. -template <typename TIds> -void vtkStaticCellLinksTemplate<TIds>::SerialBuildLinksFromMultipleArrays( - vtkIdType numPts, vtkIdType numCells, const std::vector<vtkCellArray*> cellArrays) -{ - // Basic information about the grid - this->NumPts = numPts; - this->NumCells = numCells; - - // compute links size - this->LinksSize = 0; - for (const vtkCellArray* cellArray : cellArrays) - { - this->LinksSize += cellArray->GetNumberOfConnectivityIds(); - } - // compute offsets of number of cells - std::vector<vtkIdType> offsets(cellArrays.size(), 0); - for (size_t i = 1; i < cellArrays.size(); ++i) - { - offsets[i] = cellArrays[i - 1]->GetNumberOfCells() + offsets[i - 1]; - } - - // Extra one allocated to simplify later pointer manipulation - this->LinkSharedPtr.reset(new TIds[this->LinksSize + 1], std::default_delete<TIds[]>()); - this->Links = this->LinkSharedPtr.get(); - this->Links[this->LinksSize] = this->NumPts; - this->OffsetsSharedPtr.reset(new TIds[this->NumPts + 1], std::default_delete<TIds[]>()); - this->Offsets = this->OffsetsSharedPtr.get(); - vtkSMPTools::Fill(this->Offsets, this->Offsets + this->NumPts + 1, 0); - - // Count how many cells each point appears in: - for (size_t i = 0; i < cellArrays.size(); ++i) - { - cellArrays[i]->Visit(vtkSCLT_detail::CountPoints{}, this->Offsets); - } - - // Perform prefix sum (inclusive scan) - for (vtkIdType ptId = 0; ptId < this->NumPts; ++ptId) - { - const vtkIdType npts = this->Offsets[ptId + 1]; - this->Offsets[ptId + 1] = this->Offsets[ptId] + npts; - } - - // Construct the links table and finalize the offsets: - for (size_t i = 0; i < cellArrays.size(); ++i) - { - cellArrays[i]->Visit(vtkSCLT_detail::BuildLinks{}, this->Offsets, this->Links, offsets[i]); - } - - this->Offsets[numPts] = this->LinksSize; -} -VTK_ABI_NAMESPACE_END - //---------------------------------------------------------------------------- // Threaded implementation of BuildLinks() using vtkSMPTools and std::atomic. @@ -345,7 +239,7 @@ struct CountUses void operator()(vtkIdType cellId, vtkIdType endCellId) { - this->CellArray->Visit(vtkSCLT_detail::CountPointsThreaded{}, this->Counts, cellId, endCellId); + this->CellArray->Visit(vtkSCLT_detail::CountPoints{}, this->Counts, cellId, endCellId); } }; @@ -370,8 +264,36 @@ struct InsertLinks void operator()(vtkIdType cellId, vtkIdType endCellId) { - this->CellArray->Visit(vtkSCLT_detail::BuildLinksThreaded{}, this->Offsets, this->Counts, - this->Links, cellId, endCellId, this->IdOffset); + this->CellArray->Visit(vtkSCLT_detail::BuildLinks{}, this->Offsets, this->Counts, this->Links, + cellId, endCellId, this->IdOffset); + } +}; + +template <typename TIds> +struct SortLinks +{ + const TIds* Offsets; + TIds* Links; + + SortLinks(const TIds* offsets, TIds* links) + : Offsets(offsets) + , Links(links) + { + } + + void operator()(vtkIdType beginPointId, vtkIdType endPointId) + { + for (vtkIdType pointId = beginPointId; pointId < endPointId; ++pointId) + { + // check if the links are sorted, because that's the most common case + const bool isSorted = std::is_sorted( + this->Links + this->Offsets[pointId], this->Links + this->Offsets[pointId + 1]); + // if the links are not sorted, we need to sort them + if (!isSorted) + { + std::sort(this->Links + this->Offsets[pointId], this->Links + this->Offsets[pointId + 1]); + } + } } }; @@ -382,7 +304,7 @@ VTK_ABI_NAMESPACE_BEGIN // Build the link list array for unstructured grids. Note this is a threaded // implementation: it uses SMPTools and atomics to prevent race situations. template <typename TIds> -void vtkStaticCellLinksTemplate<TIds>::ThreadedBuildLinksFromMultipleArrays( +void vtkStaticCellLinksTemplate<TIds>::BuildLinksFromMultipleArrays( vtkIdType numPts, vtkIdType numCells, const std::vector<vtkCellArray*> cellArrays) { // Basic information about the grid @@ -402,11 +324,6 @@ void vtkStaticCellLinksTemplate<TIds>::ThreadedBuildLinksFromMultipleArrays( offsets[i] = cellArrays[i - 1]->GetNumberOfCells() + offsets[i - 1]; } - // Extra one allocated to simplify later pointer manipulation - this->LinkSharedPtr.reset(new TIds[this->LinksSize + 1], std::default_delete<TIds[]>()); - this->Links = this->LinkSharedPtr.get(); - this->Links[this->LinksSize] = this->NumPts; - // Create an array of atomics with initial count=0. This will keep // track of point uses. Count them in parallel. std::atomic<TIds>* counts = new std::atomic<TIds>[numPts](); @@ -417,17 +334,21 @@ void vtkStaticCellLinksTemplate<TIds>::ThreadedBuildLinksFromMultipleArrays( } // Perform prefix sum to determine offsets - vtkIdType ptId, npts; this->OffsetsSharedPtr.reset(new TIds[numPts + 1], std::default_delete<TIds[]>()); this->Offsets = this->OffsetsSharedPtr.get(); this->Offsets[0] = 0; - for (ptId = 1; ptId < numPts; ++ptId) + for (vtkIdType ptId = 1; ptId < numPts; ++ptId) { - npts = counts[ptId - 1].load(std::memory_order_relaxed); - this->Offsets[ptId] = this->Offsets[ptId - 1] + npts; + TIds nCells = counts[ptId - 1].load(std::memory_order_relaxed); + this->Offsets[ptId] = this->Offsets[ptId - 1] + nCells; } this->Offsets[numPts] = this->LinksSize; + // Allocate links array, Extra one allocated to simplify later pointer manipulation + this->LinkSharedPtr.reset(new TIds[this->LinksSize + 1], std::default_delete<TIds[]>()); + this->Links = this->LinkSharedPtr.get(); + this->Links[this->LinksSize] = this->NumPts; + // Now insert cell ids into cell links. for (size_t i = 0; i < cellArrays.size(); ++i) { @@ -437,52 +358,28 @@ void vtkStaticCellLinksTemplate<TIds>::ThreadedBuildLinksFromMultipleArrays( // Clean up delete[] counts; + + // Sort the cell links of each point (if needed) to ensure deterministic order + SortLinks<TIds> sortLinks(this->Offsets, this->Links); + vtkSMPTools::For(0, numPts, sortLinks); } //---------------------------------------------------------------------------- -// Build the link list array for unstructured grids +// Build the link list array for unstructured grids. template <typename TIds> void vtkStaticCellLinksTemplate<TIds>::BuildLinks(vtkUnstructuredGrid* ugrid) { - // Basic information about the grid - vtkIdType numPts = ugrid->GetNumberOfPoints(); - vtkIdType numCells = ugrid->GetNumberOfCells(); - - // We're going to get into the guts of the class - vtkCellArray* cellArray = ugrid->GetCells(); - - // Use serial or threaded implementations - if (!this->SequentialProcessing) - { - this->ThreadedBuildLinks(numPts, numCells, cellArray); - } - else - { - this->SerialBuildLinks(numPts, numCells, cellArray); - } + // Build links + this->BuildLinks(ugrid->GetNumberOfPoints(), ugrid->GetNumberOfCells(), ugrid->GetCells()); } //---------------------------------------------------------------------------- -// Build the link list array for unstructured grids +// Build the link list array for explicit structured grids. template <typename TIds> void vtkStaticCellLinksTemplate<TIds>::BuildLinks(vtkExplicitStructuredGrid* esgrid) { - // Basic information about the grid - vtkIdType numPts = esgrid->GetNumberOfPoints(); - vtkIdType numCells = esgrid->GetNumberOfCells(); - - // We're going to get into the guts of the class - vtkCellArray* cellArray = esgrid->GetCells(); - - // Use serial or threaded implementations - if (!this->SequentialProcessing) - { - this->ThreadedBuildLinks(numPts, numCells, cellArray); - } - else - { - this->SerialBuildLinks(numPts, numCells, cellArray); - } + // Build links + this->BuildLinks(esgrid->GetNumberOfPoints(), esgrid->GetNumberOfCells(), esgrid->GetCells()); } //---------------------------------------------------------------------------- @@ -491,22 +388,13 @@ void vtkStaticCellLinksTemplate<TIds>::BuildLinks(vtkExplicitStructuredGrid* esg template <typename TIds> void vtkStaticCellLinksTemplate<TIds>::BuildLinks(vtkPolyData* pd) { - // Basic information about the grid - vtkIdType numPts = pd->GetNumberOfPoints(); - vtkIdType numCells = pd->GetNumberOfCells(); - + // Get cell arrays std::vector<vtkCellArray*> cellArrays = { pd->GetVerts(), pd->GetLines(), pd->GetPolys(), pd->GetStrips() }; // Remove any null cell arrays cellArrays.erase(std::remove(cellArrays.begin(), cellArrays.end(), nullptr), cellArrays.end()); - if (!this->SequentialProcessing) - { - this->ThreadedBuildLinksFromMultipleArrays(numPts, numCells, cellArrays); - } - else - { - this->SerialBuildLinksFromMultipleArrays(numPts, numCells, cellArrays); - } + // Build links + this->BuildLinksFromMultipleArrays(pd->GetNumberOfPoints(), pd->GetNumberOfCells(), cellArrays); } //---------------------------------------------------------------------------- diff --git a/Domains/ChemistryOpenGL2/Testing/Cxx/TestPDBBallAndStickTranslucent.cxx b/Domains/ChemistryOpenGL2/Testing/Cxx/TestPDBBallAndStickTranslucent.cxx index 9f00c49b0b32955e4d92a7ea5e1151f53189f61f..aec7c53967e2cdece3319667ad94380cf0420ff1 100644 --- a/Domains/ChemistryOpenGL2/Testing/Cxx/TestPDBBallAndStickTranslucent.cxx +++ b/Domains/ChemistryOpenGL2/Testing/Cxx/TestPDBBallAndStickTranslucent.cxx @@ -42,7 +42,7 @@ int TestPDBBallAndStickTranslucent(int argc, char* argv[]) vtkNew<vtkActor> actor; actor->SetMapper(molmapper); - actor->GetProperty()->SetOpacity(0.1); + actor->GetProperty()->SetOpacity(0.4); vtkNew<vtkRenderer> ren; vtkNew<vtkRenderWindow> win; diff --git a/Filters/Core/vtkConstrainedSmoothingFilter.cxx b/Filters/Core/vtkConstrainedSmoothingFilter.cxx index ba7afd4938d84dc74f6853b431a69d551213c13f..716ceb2e188c486449fae9801bf773bb1ce507a4 100644 --- a/Filters/Core/vtkConstrainedSmoothingFilter.cxx +++ b/Filters/Core/vtkConstrainedSmoothingFilter.cxx @@ -103,7 +103,7 @@ vtkSmartPointer<vtkCellArray> BuildStencils(vtkPointSet* input) // links from the points to the (line) cells using the output of // vtkExtractEdges. vtkStaticCellLinksTemplate<vtkIdType> links; - links.ThreadedBuildLinks(numPts, numLines, lines); + links.BuildLinks(numPts, numLines, lines); vtkIdType linksSize = links.GetLinksSize(); // Building the links does most of the work. Now we transform the links diff --git a/Filters/Core/vtkPolyDataPlaneClipper.cxx b/Filters/Core/vtkPolyDataPlaneClipper.cxx index 6944dda2928bbc001896d96bc20ef25d68f6aedc..d37728cded5d91353f9155a56ba6883458231a37 100644 --- a/Filters/Core/vtkPolyDataPlaneClipper.cxx +++ b/Filters/Core/vtkPolyDataPlaneClipper.cxx @@ -709,7 +709,7 @@ void GenerateCap(vtkCellArray* lines, vtkPolyData* pd) // Prepare for processing vtkStaticCellLinksTemplate<vtkIdType> links; - links.ThreadedBuildLinks(numPts, numLines, lines); + links.BuildLinks(numPts, numLines, lines); vtkNew<vtkCellArray> polys; vtkNew<vtkPolygon> polygon; vtkIdType* lineConn = diff --git a/Filters/General/Testing/Cxx/CMakeLists.txt b/Filters/General/Testing/Cxx/CMakeLists.txt index cf3d1505cb63d74e06bb7fff6eb511c68809645b..cd84cfc095b567cc8eb70393ee5c04c8ef333640 100644 --- a/Filters/General/Testing/Cxx/CMakeLists.txt +++ b/Filters/General/Testing/Cxx/CMakeLists.txt @@ -28,7 +28,7 @@ vtk_add_test_cxx(vtkFiltersGeneralCxxTests tests TestDeflectNormals.cxx TestDeformPointSet.cxx TestDensifyPolyData.cxx - TestDistancePolyDataFilter.cxx + TestDistancePolyDataFilter.cxx,LOOSE_VALID TestDistancePolyDataFilter2.cxx TestExplodeDataSet.cxx,NO_VALID TestExtractGhostCells.cxx,NO_VALID @@ -78,7 +78,7 @@ vtk_add_test_cxx(vtkFiltersGeneralCxxTests data_tests TestDataSetGradientPrecompute.cxx TestDateToNumeric.cxx TestGradientAndVorticity.cxx,NO_VALID - TestIconGlyphFilterGravity.cxx + TestIconGlyphFilterGravity.cxx,LOOSE_VALID TestQuadraturePoints.cxx TestYoungsMaterialInterface.cxx ) diff --git a/Filters/General/Testing/Data/Baseline/TestIntersectionPolyDataFilter.png.sha512 b/Filters/General/Testing/Data/Baseline/TestIntersectionPolyDataFilter.png.sha512 index 1c842ef33df381c6571a226dd0e77ae52bb3d878..498c463fbf12d89ba15f4f173448f7d19fa4cd2a 100644 --- a/Filters/General/Testing/Data/Baseline/TestIntersectionPolyDataFilter.png.sha512 +++ b/Filters/General/Testing/Data/Baseline/TestIntersectionPolyDataFilter.png.sha512 @@ -1 +1 @@ -35051d47e8c9b7d384924cb2b5f68a20ac5701e1513274ad78ae64130c98b1a0444b2d85ab296c5fbe39a674d5aa56be2de6b7e2738eae30153ceb6bda034a6e +4b95525a511d11b9f677d33ed10bc3a7ce1c1e82ab1359147d67e33491edb42f307b45d653ae171a27675250e35707fd7ac2086f25d9d87b80403e5ae3797a19 diff --git a/Filters/General/Testing/Data/Baseline/TestIntersectionPolyDataFilter3.png.sha512 b/Filters/General/Testing/Data/Baseline/TestIntersectionPolyDataFilter3.png.sha512 index 408ff848a4ac475bdfe2a8ceef9f442d0391b2d8..51363a67ac08b4b8d4450833cdb10459fe7c9f87 100644 --- a/Filters/General/Testing/Data/Baseline/TestIntersectionPolyDataFilter3.png.sha512 +++ b/Filters/General/Testing/Data/Baseline/TestIntersectionPolyDataFilter3.png.sha512 @@ -1 +1 @@ -312cd928a67dba024afd4184177b25d48f37604b7f261b44511d9a423e79a9430bc99e9aa7dbcfbd16b9b0c6bbe682dfa2e71583dc26d55b1c82d1d61e013cf1 +a1ebc7e518451b4b6f7975d519f3adcf333b2b7c1af73f02e6eb2578a045de6f3724a0abd65018fabf9019076d803ce31cea8fd13e3c06b5c0c73dd183ee8ac6 diff --git a/Filters/General/vtkContourTriangulator.cxx b/Filters/General/vtkContourTriangulator.cxx index 0a4517ff8240e560fd13e62cddd6363930cd23e4..eae412e5276f8665379c3f505756e43e9b934bf3 100644 --- a/Filters/General/vtkContourTriangulator.cxx +++ b/Filters/General/vtkContourTriangulator.cxx @@ -470,7 +470,7 @@ int vtkCCSTriangulate(const vtkCCSPoly& poly, vtkPoints* points, const vtkCCSPol } } - foundEar &= foundNegative; + foundEar = foundEar && foundNegative; } if (!foundEar) @@ -502,14 +502,14 @@ int vtkCCSTriangulate(const vtkCCSPoly& poly, vtkPoints* points, const vtkCCSPol size_t kk = (k != 0 ? k - 1 : n - 1); points->GetPoint(poly[verts[kk].first], point); double kq = vtkCCSTriangleQuality(point, ppoint, npoint, normal); - concave -= ((verts[k].second < 0) & (kq >= 0)); + concave -= ((verts[k].second < 0) && (kq >= 0)); verts[k].second = kq; // re-compute quality of next point size_t jj = (j + 1 != n ? j + 1 : 0); points->GetPoint(poly[verts[jj].first], point); double jq = vtkCCSTriangleQuality(ppoint, npoint, point, normal); - concave -= ((verts[j].second < 0) & (jq >= 0)); + concave -= ((verts[j].second < 0) && (jq >= 0)); verts[j].second = jq; } } @@ -913,16 +913,16 @@ int vtkCCSSplitAtPinchPoints(std::vector<vtkCCSPoly>& polys, vtkPoints* points, // Make sure that splitting this poly won't create a hole poly double p1[3], p2[3], p3[3]; size_t prevIdx = n + idx1 - 1; - size_t midIdx = idx1 + 1; - size_t nextIdx = idx2 + 1; if (prevIdx >= n) { prevIdx -= n; } + size_t midIdx = idx1 + 1; if (midIdx >= n) { midIdx -= n; } + size_t nextIdx = idx2 + 1; if (nextIdx >= n) { nextIdx -= n; @@ -1237,9 +1237,9 @@ void vtkCCSFindTrueEdges(std::vector<vtkCCSPoly>& polys, vtkPoints* points, cellCount = 1; // Rotate to the next point - p0[0] = p2[0]; - p0[1] = p2[1]; - p0[2] = p2[2]; + p0[0] = p1[0]; + p0[1] = p1[1]; + p0[2] = p1[2]; p1[0] = p2[0]; p1[1] = p2[1]; p1[2] = p2[2]; @@ -1853,11 +1853,11 @@ int vtkCCSCheckCut(const std::vector<vtkCCSPoly>& polys, vtkPoints* points, cons const vtkCCSPoly& poly = polys[polyId]; size_t n = poly.size(); size_t prevIdx = n - polyIdx - 1; - size_t nextIdx = polyIdx + 1; if (prevIdx >= n) { prevIdx -= n; } + size_t nextIdx = polyIdx + 1; if (nextIdx >= n) { nextIdx -= n; diff --git a/Filters/General/vtkRemovePolyData.cxx b/Filters/General/vtkRemovePolyData.cxx index d6add68e1549be34a8aaf3c6ef26f48841549296..297da5a2653cd0d276d477f7b9dedef79c342608 100644 --- a/Filters/General/vtkRemovePolyData.cxx +++ b/Filters/General/vtkRemovePolyData.cxx @@ -274,7 +274,7 @@ struct MarkDeletedCells if (numInVerts > 0) { vtkStaticCellLinksTemplate<TIds> links; - links.ThreadedBuildLinks(numPts, numInVerts, inVerts); + links.BuildLinks(numPts, numInVerts, inVerts); MarkPointIds<TIds>::Execute(ptIds, &links, cellMap, filter); for (auto i = 1; i < numInputs; ++i) { @@ -290,7 +290,7 @@ struct MarkDeletedCells if (numInLines > 0) { vtkStaticCellLinksTemplate<TIds> links; - links.ThreadedBuildLinks(numPts, numInLines, inLines); + links.BuildLinks(numPts, numInLines, inLines); MarkPointIds<TIds>::Execute(ptIds, &links, cellMap, filter); for (auto i = 1; i < numInputs; ++i) { @@ -306,7 +306,7 @@ struct MarkDeletedCells if (numInPolys > 0) { vtkStaticCellLinksTemplate<TIds> links; - links.ThreadedBuildLinks(numPts, numInPolys, inPolys); + links.BuildLinks(numPts, numInPolys, inPolys); MarkPointIds<TIds>::Execute(ptIds, &links, cellMap, filter); for (auto i = 1; i < numInputs; ++i) { @@ -322,7 +322,7 @@ struct MarkDeletedCells if (numInStrips > 0) { vtkStaticCellLinksTemplate<TIds> links; - links.ThreadedBuildLinks(numPts, numInStrips, inStrips); + links.BuildLinks(numPts, numInStrips, inStrips); MarkPointIds<TIds>::Execute(ptIds, &links, cellMap, filter); for (auto i = 1; i < numInputs; ++i) { diff --git a/Filters/Geometry/vtkAttributeSmoothingFilter.cxx b/Filters/Geometry/vtkAttributeSmoothingFilter.cxx index b58fe045f0265f6e1aee06dbe81e8f6c48fe623b..f4400fea1a608c7b85b473a8e3714cbf07167531 100644 --- a/Filters/Geometry/vtkAttributeSmoothingFilter.cxx +++ b/Filters/Geometry/vtkAttributeSmoothingFilter.cxx @@ -205,7 +205,7 @@ vtkSmartPointer<vtkCellArray> BuildStencils(vtkPolyData* edges, const unsigned c // links from the points to the (line) cells using the output of // vtkExtractEdges. vtkStaticCellLinksTemplate<vtkIdType> links; - links.ThreadedBuildLinks(numPts, numLines, lines); + links.BuildLinks(numPts, numLines, lines); vtkIdType linksSize = links.GetLinksSize(); // Building the links does most of the work. Now we transform the links diff --git a/Filters/Geometry/vtkGeometryFilter.cxx b/Filters/Geometry/vtkGeometryFilter.cxx index aab882735a1d9dbaeaaf8804a0e3ab2d33989b68..678369e1cf6ee6fa8b3921caafb591b4e8d1f20c 100644 --- a/Filters/Geometry/vtkGeometryFilter.cxx +++ b/Filters/Geometry/vtkGeometryFilter.cxx @@ -2599,7 +2599,7 @@ int vtkGeometryFilter::PolyDataExecute( if (excPolys->GetNumberOfCells() > 0) { exc.Links = new vtkStaticCellLinksTemplate<TInputIdType>; - exc.Links->ThreadedBuildLinks( + exc.Links->BuildLinks( dataSetInput->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); } } @@ -2617,7 +2617,7 @@ int vtkGeometryFilter::PolyDataExecute( if (excPolys->GetNumberOfCells() > 0) { exc.Links = new vtkStaticCellLinksTemplate<TInputIdType>; - exc.Links->ThreadedBuildLinks( + exc.Links->BuildLinks( dataSetInput->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); } } @@ -3166,7 +3166,7 @@ int vtkGeometryFilter::UnstructuredGridExecute(vtkDataSet* dataSetInput, vtkPoly if (excPolys->GetNumberOfCells() > 0) { exc.Links = new vtkStaticCellLinksTemplate<TInputIdType>; - exc.Links->ThreadedBuildLinks( + exc.Links->BuildLinks( dataSetInput->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); } } @@ -3195,7 +3195,7 @@ int vtkGeometryFilter::UnstructuredGridExecute(vtkDataSet* dataSetInput, vtkPoly if (excPolys->GetNumberOfCells() > 0) { exc.Links = new vtkStaticCellLinksTemplate<TInputIdType>; - exc.Links->ThreadedBuildLinks( + exc.Links->BuildLinks( dataSetInput->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); } } @@ -3430,8 +3430,7 @@ int vtkGeometryFilter::StructuredExecute(vtkDataSet* input, vtkPolyData* output, if (excPolys->GetNumberOfCells() > 0) { exc.Links = new vtkStaticCellLinksTemplate<TInputIdType>; - exc.Links->ThreadedBuildLinks( - input->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); + exc.Links->BuildLinks(input->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); } } return ExecuteStructured<TInputIdType>(this, input, output, wholeExtent, &exc, extractFace); @@ -3448,8 +3447,7 @@ int vtkGeometryFilter::StructuredExecute(vtkDataSet* input, vtkPolyData* output, if (excPolys->GetNumberOfCells() > 0) { exc.Links = new vtkStaticCellLinksTemplate<TInputIdType>; - exc.Links->ThreadedBuildLinks( - input->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); + exc.Links->BuildLinks(input->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); } } return ExecuteStructured<TInputIdType>(this, input, output, wholeExtent, &exc, extractFace); @@ -3685,8 +3683,7 @@ int vtkGeometryFilter::DataSetExecute( if (excPolys->GetNumberOfCells() > 0) { exc.Links = new vtkStaticCellLinksTemplate<TInputIdType>; - exc.Links->ThreadedBuildLinks( - input->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); + exc.Links->BuildLinks(input->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); } } return ExecuteDataSet<TInputIdType>(this, input, output, &exc); @@ -3702,8 +3699,7 @@ int vtkGeometryFilter::DataSetExecute( if (excPolys->GetNumberOfCells() > 0) { exc.Links = new vtkStaticCellLinksTemplate<TInputIdType>; - exc.Links->ThreadedBuildLinks( - input->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); + exc.Links->BuildLinks(input->GetNumberOfPoints(), excPolys->GetNumberOfCells(), excPolys); } } return ExecuteDataSet<TInputIdType>(this, input, output, &exc); diff --git a/Filters/Geometry/vtkMarkBoundaryFilter.cxx b/Filters/Geometry/vtkMarkBoundaryFilter.cxx index 6aa82c65db445ef3e1371c6cc7fb93cfb5c8bf5c..311b9193eb3a51f36708f2381dac6e18a55505e8 100644 --- a/Filters/Geometry/vtkMarkBoundaryFilter.cxx +++ b/Filters/Geometry/vtkMarkBoundaryFilter.cxx @@ -294,7 +294,7 @@ int PolyDataExecute(vtkDataSet* dsInput, const unsigned char* ghosts, unsigned c MarkCellBoundary marker(ghosts, bPoints, bCells, bFaces, self); auto iter = vtk::TakeSmartPointer(lines->NewIterator()); vtkStaticCellLinksTemplate<vtkIdType> links; - links.ThreadedBuildLinks(numPts, numLines, lines); + links.BuildLinks(numPts, numLines, lines); for (cellId = 0; cellId < numLines; ++cellId) { iter->GetCellAtId(cellId, npts, pts); @@ -316,7 +316,7 @@ int PolyDataExecute(vtkDataSet* dsInput, const unsigned char* ghosts, unsigned c if (numPolys > 0) { vtkStaticCellLinksTemplate<vtkIdType> links; - links.ThreadedBuildLinks(numPts, numPolys, polys); + links.BuildLinks(numPts, numPolys, polys); MarkPolys mark( input, ghosts, (numVerts + numLines), polys, &links, bPoints, bCells, bFaces, self); vtkSMPTools::For(0, numPolys, mark); diff --git a/Filters/Sources/Testing/Data/Baseline/TestEllipseArcSource.png.sha512 b/Filters/Sources/Testing/Data/Baseline/TestEllipseArcSource.png.sha512 index b553947d6f72849d72362eafe5548e31863d5993..99cdbc8b9a6edaa45a8cbc9bb549b0f753c9a646 100644 --- a/Filters/Sources/Testing/Data/Baseline/TestEllipseArcSource.png.sha512 +++ b/Filters/Sources/Testing/Data/Baseline/TestEllipseArcSource.png.sha512 @@ -1 +1 @@ -1f5eaabb8f9b3e42b3e40dcc3a3b1a220c0f11eb05e59777f755e79c380ee51f603180c9d0bc0a3836efa1a6fa57616eb7d619c6a24621af6f865b0c3ab50eee +a42e8be56c1c71df0c5e0e644993b324b665955323349cf5d44e0c2d313d47ed01ee78d149680e2d46b5fd367b356b5795682b003f55ae71a789f35441f20f9a diff --git a/GUISupport/Qt/Testing/Cxx/TestQtWithDisabledInteractor.cxx b/GUISupport/Qt/Testing/Cxx/TestQtWithDisabledInteractor.cxx index db0c7f1775ed27c816848f8519e3bde22b8ed7d3..2953211a7f90c9e381e713cc45b082c93c9c47b7 100644 --- a/GUISupport/Qt/Testing/Cxx/TestQtWithDisabledInteractor.cxx +++ b/GUISupport/Qt/Testing/Cxx/TestQtWithDisabledInteractor.cxx @@ -6,10 +6,10 @@ #include "vtkActor.h" #include "vtkGenericOpenGLRenderWindow.h" #include "vtkPolyDataMapper.h" +#include "vtkRegressionTestImage.h" #include "vtkRenderer.h" #include "vtkSmartPointer.h" #include "vtkSphereSource.h" -#include "vtkTesting.h" #include <QImage> @@ -76,7 +76,7 @@ int TestQtWithDisabledInteractor(int argc, char* argv[]) return EXIT_FAILURE; } - int retVal = vtktesting->RegressionTest(fileName, 0.05); + int retVal = vtktesting->RegressionTest(fileName, vtkRegressionTester::ErrorThreshold); switch (retVal) { case vtkTesting::DO_INTERACTOR: diff --git a/IO/Chemistry/Testing/Data/Baseline/TestVASPTessellationReader.png.sha512 b/IO/Chemistry/Testing/Data/Baseline/TestVASPTessellationReader.png.sha512 index a087c7eb9d0dcdd19b5a377f4f57ce91e70aef38..2e48f35976b838fdb1e453290012ac5f3cc911ae 100644 --- a/IO/Chemistry/Testing/Data/Baseline/TestVASPTessellationReader.png.sha512 +++ b/IO/Chemistry/Testing/Data/Baseline/TestVASPTessellationReader.png.sha512 @@ -1 +1 @@ -219690c832d7a673be47450a45502237c4035e99890f7bdf5bff4cb1424ed1dde91b93f2e5abe8a79899e2864e8a387b3fbbb9d08fe74b0b4a2c7771ebff7d8f +95bbffc401661a1fe69d85317ef0a8aedf1ce7c703f4477425ab60e3bf70babed1333abc682d9797a266e4a7abca1de0c5e8cc3befd6653b94a3dd17cf85df94 diff --git a/IO/Chemistry/Testing/Data/Baseline/TestVASPTessellationReader_1.png.sha512 b/IO/Chemistry/Testing/Data/Baseline/TestVASPTessellationReader_1.png.sha512 deleted file mode 100644 index 3c57a3c556c9df7547cbac65499c140c09980483..0000000000000000000000000000000000000000 --- a/IO/Chemistry/Testing/Data/Baseline/TestVASPTessellationReader_1.png.sha512 +++ /dev/null @@ -1 +0,0 @@ -78b33ba32ec0be9954d4abd3e231e84cae142e885d45a6143bc66762162e97cee0a5111a8ff31737134dcd5c5ebac2500f3bcd09f01a459c2bc80192ec006d28 diff --git a/IO/Image/vtkHDRReader.cxx b/IO/Image/vtkHDRReader.cxx index 4dfae391e702d62c0bdb135617c462e3bb16a28d..f546791d231e0314af6f1f1fb55a13b161e6ae90 100644 --- a/IO/Image/vtkHDRReader.cxx +++ b/IO/Image/vtkHDRReader.cxx @@ -6,6 +6,7 @@ #include "vtkImageFlip.h" #include "vtkImagePermute.h" #include "vtkLookupTable.h" +#include "vtkMathUtilities.h" #include "vtkNew.h" #include "vtkObjectFactory.h" #include "vtkPointData.h" @@ -19,7 +20,7 @@ vtkStandardNewMacro(vtkHDRReader); #define HDR_DATA_SIZE 3 -// Matrix to convert from XYZ into linear RGB +// The standard XYZ to linear RGB transformation matrix (for D65 illuminant) const float matrixXYZ2RGB[3][3] = { { 3.2404542f, -1.5371385f, -0.4985314f }, { -0.9692660f, 1.8760108f, 0.0415560f }, { 0.0556434f, -0.2040259f, 1.0572252f } }; @@ -203,7 +204,7 @@ void vtkHDRReader::ConvertAllDataFromRGBToXYZ(float* outPtr, int size) { for (int i = 0; i < size; i += HDR_DATA_SIZE) { - vtkHDRReader::XYZ2RGB(matrixXYZ2RGB, outPtr[i], outPtr[i + 1], outPtr[i + 2]); + vtkHDRReader::XYZ2RGB(matrixXYZ2RGB, this->Gamma, outPtr[i], outPtr[i + 1], outPtr[i + 2]); } } @@ -638,12 +639,42 @@ void vtkHDRReader::RGBE2Float(unsigned char* rgbe, float& r, float& g, float& b) } //------------------------------------------------------------------------------ -void vtkHDRReader::XYZ2RGB(const float convertMatrix[3][3], float& r, float& g, float& b) +void vtkHDRReader::XYZ2RGB( + const float convertMatrix[3][3], double gamma, float& r, float& g, float& b) { // Copy initial xyz values float x = r, y = g, z = b; - r = convertMatrix[0][0] * x + convertMatrix[0][1] * y + convertMatrix[0][2] * z; - g = convertMatrix[1][0] * x + convertMatrix[1][1] * y + convertMatrix[1][2] * z; - b = convertMatrix[2][0] * x + convertMatrix[2][1] * y + convertMatrix[2][2] * z; + + // Convert XYZ to linear RGB + float linearR = convertMatrix[0][0] * x + convertMatrix[0][1] * y + convertMatrix[0][2] * z; + float linearG = convertMatrix[1][0] * x + convertMatrix[1][1] * y + convertMatrix[1][2] * z; + float linearB = convertMatrix[2][0] * x + convertMatrix[2][1] * y + convertMatrix[2][2] * z; + + // Use sRGB transfer function if gamma is approximately 1.0 (default) + // Otherwise use the custom gamma from the file + auto gammaTransfer = [gamma](float linear) -> float + { + if (vtkMathUtilities::NearlyEqual(gamma, 1.0)) + { + // Standard sRGB transfer function (IEC 61966-2-1:1999) + return linear <= 0.0031308f ? 12.92f * linear + : 1.055f * std::pow(linear, 1.0f / 2.4f) - 0.055f; + } + else + { + // Custom gamma correction from file + return std::pow(linear, 1.0f / static_cast<float>(gamma)); + } + }; + + // Apply gamma correction and store results + r = gammaTransfer(linearR); + g = gammaTransfer(linearG); + b = gammaTransfer(linearB); + + // Clamp values to [0,1] range + r = std::max(0.0f, std::min(1.0f, r)); + g = std::max(0.0f, std::min(1.0f, g)); + b = std::max(0.0f, std::min(1.0f, b)); } VTK_ABI_NAMESPACE_END diff --git a/IO/Image/vtkHDRReader.h b/IO/Image/vtkHDRReader.h index 1342d7215936c694fed06bc925bbcf02fe95b49d..4ca9cb65b6b17a5a2a0a61df86d2cfed9d40cac7 100644 --- a/IO/Image/vtkHDRReader.h +++ b/IO/Image/vtkHDRReader.h @@ -146,7 +146,7 @@ protected: * Inplace version, r,g,b are in xyz color space in input, in rgb color space * in output */ - static void XYZ2RGB(const float convertMatrix[3][3], float& r, float& g, float& b); + static void XYZ2RGB(const float convertMatrix[3][3], double gamma, float& r, float& g, float& b); private: vtkHDRReader(const vtkHDRReader&) = delete; diff --git a/IO/Import/Testing/Data/Baseline/OBJImporter-TwoTrianglesWithNegativeIndices.png.sha512 b/IO/Import/Testing/Data/Baseline/OBJImporter-TwoTrianglesWithNegativeIndices.png.sha512 index 063e51cf5e48aede08392890c3d61447f0d3bdbb..7dcbdb5c89140aed15253900731cc234c30f3ef1 100644 --- a/IO/Import/Testing/Data/Baseline/OBJImporter-TwoTrianglesWithNegativeIndices.png.sha512 +++ b/IO/Import/Testing/Data/Baseline/OBJImporter-TwoTrianglesWithNegativeIndices.png.sha512 @@ -1 +1 @@ -453a0b9c980d30e0d32a1cd491e1199f491faa01ad3e6adb66268f1a4b00856ca87e49ea78ce37b3e920fcd776df16e88c4e05ce3bccd5927d4bc5e178e53b03 +e2a4b9607b14e6b4c542390e667d985f4be18ba350ffc5c201af64d2a4dc1b95b27345f4dcaaeb093300fc651884e24df449a8867b8d0364cbfa6e904cab42cd diff --git a/IO/Import/Testing/Data/Baseline/TestOBJImporter-SharedMtl.png.sha512 b/IO/Import/Testing/Data/Baseline/TestOBJImporter-SharedMtl.png.sha512 index cc50979e1347b61a4ebd8bb8edb4bf55d8bbc195..dcab020f170797322380c4b66b6fcbdf10d9ce37 100644 --- a/IO/Import/Testing/Data/Baseline/TestOBJImporter-SharedMtl.png.sha512 +++ b/IO/Import/Testing/Data/Baseline/TestOBJImporter-SharedMtl.png.sha512 @@ -1 +1 @@ -c6e9845fb09d0d425fc434296bff47927eeff2720d5f6b619dcf08f4c61e496ba7e180b24561bbd0ecdfe85a61e7807e1c9e2708c07f3c1916248b7b4d266977 +bc38cab070cc4e6f66139530e0fad137a62487e2b641694bc77490ea12cebd154d7e67a70b77e6ff79c2d47e7621b7d3e4dc69fe53d54416cdd765403eff8977 diff --git a/Imaging/Core/Testing/Cxx/ImageBlend.cxx b/Imaging/Core/Testing/Cxx/ImageBlend.cxx index e2fd1e3a6da4ccf3e4e2be7efc54633a679437bc..85f6dd3696e08a2dfa58a388afde8174bab6a802 100644 --- a/Imaging/Core/Testing/Cxx/ImageBlend.cxx +++ b/Imaging/Core/Testing/Cxx/ImageBlend.cxx @@ -35,18 +35,19 @@ int ImageBlend(int, char*[]) { for (int y = 0; y < dims[1]; ++y) { + double val; if (x < dims[0] / 2) { - double val = abs((dims[0] - x - 100) * (dims[1] - y - 100)); - imageData1->SetScalarComponentFromFloat(x, y, 0, 0, val); - imageData1->SetScalarComponentFromFloat(x, y, 0, 1, val); - imageData1->SetScalarComponentFromFloat(x, y, 0, 2, val); - imageData1->SetScalarComponentFromFloat(x, y, 0, 3, val); + val = std::abs((dims[0] - x - 100) * (dims[1] - y - 100)); } else { - imageData1->SetScalarComponentFromFloat(x, y, 0, 0, 0); + val = 0; } + imageData1->SetScalarComponentFromFloat(x, y, 0, 0, val); + imageData1->SetScalarComponentFromFloat(x, y, 0, 1, val); + imageData1->SetScalarComponentFromFloat(x, y, 0, 2, val); + imageData1->SetScalarComponentFromFloat(x, y, 0, 3, val); } } @@ -60,19 +61,20 @@ int ImageBlend(int, char*[]) { for (int y = 0; y < dims[1]; ++y) { + double val; if (x > (dims[0] / 2) - 50 && x < (dims[0] / 2) + 50 && y > (dims[1] / 2) - 50 && y < (dims[1] / 2) + 50) { - double val = x * y; - imageData2->SetScalarComponentFromFloat(x, y, 0, 0, val); - imageData2->SetScalarComponentFromFloat(x, y, 0, 1, val); - imageData2->SetScalarComponentFromFloat(x, y, 0, 2, val); - imageData2->SetScalarComponentFromFloat(x, y, 0, 3, val); + val = x * y; } else { - imageData2->SetScalarComponentFromFloat(x, y, 0, 0, 0); + val = 0; } + imageData2->SetScalarComponentFromFloat(x, y, 0, 0, val); + imageData2->SetScalarComponentFromFloat(x, y, 0, 1, val); + imageData2->SetScalarComponentFromFloat(x, y, 0, 2, val); + imageData2->SetScalarComponentFromFloat(x, y, 0, 3, val); } } diff --git a/Imaging/Core/Testing/Data/Baseline/ImageBlend.png.sha512 b/Imaging/Core/Testing/Data/Baseline/ImageBlend.png.sha512 index 78443ddbb9489ba5044cc27f775c7f25dd7f7ff7..408b98184b11dc3145660e9ab71962fd5c13b342 100644 --- a/Imaging/Core/Testing/Data/Baseline/ImageBlend.png.sha512 +++ b/Imaging/Core/Testing/Data/Baseline/ImageBlend.png.sha512 @@ -1 +1 @@ -2c22167f6f465d4799f5ca96503c262fdc37b4f77c517d4048c3cb50d6525644c6132d5ff57a2dc250c658c7f6f1e3144ae480c260adeac1ac3895920d06707d +4a0f815a6bfc9941ee3ab9eab750913ec30af053379545c274b293869bebb6b178fbfbe738891b20c4d59e41102388197ca6210264c98fe42d9b5c86bba466b4 diff --git a/Interaction/Widgets/Testing/Cxx/CMakeLists.txt b/Interaction/Widgets/Testing/Cxx/CMakeLists.txt index f6ed8177096a4744498aabc0cb6de998e5a8fc03..86a2bbe34561b65708b40185754e4c5eb796b5c1 100644 --- a/Interaction/Widgets/Testing/Cxx/CMakeLists.txt +++ b/Interaction/Widgets/Testing/Cxx/CMakeLists.txt @@ -10,7 +10,7 @@ vtk_add_test_cxx(vtkInteractionWidgetsCxxTests tests TestAngleWidget2D.cxx TestAngleWidget3D.cxx TestBalloonWidget.cxx - TestBiDimensionalWidget.cxx + TestBiDimensionalWidget.cxx,LOOSE_VALID TestBorderWidget.cxx TestBrokenLineWidget.cxx TestCamera3DWidget.cxx @@ -26,7 +26,7 @@ vtk_add_test_cxx(vtkInteractionWidgetsCxxTests tests TestCoordinateFrameWidget.cxx TestDijkstraImageGeodesicPath.cxx TestDisplaySizedImplicitPlaneWidget.cxx - TestDistanceWidget.cxx + TestDistanceWidget.cxx,LOOSE_VALID TestDistanceWidget3D.cxx TestFinitePlaneWidget.cxx TestFixedSizeHandleRepresentation3D.cxx @@ -68,7 +68,7 @@ vtk_add_test_cxx(vtkInteractionWidgetsCxxTests tests TestRectilinearWipeWidget.cxx TestResliceCursorWidget2.cxx TestResliceCursorWidget3.cxx - TestScalarBarWidget.cxx + TestScalarBarWidget.cxx,LOOSE_VALID TestSeedWidget.cxx TestSeedWidget2.cxx TestSeedWidgetNonUniformRepresentations.cxx diff --git a/Interaction/Widgets/Testing/Cxx/TestImplicitConeWidget.cxx b/Interaction/Widgets/Testing/Cxx/TestImplicitConeWidget.cxx index b5703ff142a518f97edbdda19e85c906757b36eb..5227a0425a9a0ef1b6c5f0a606bbb443aa58dca9 100644 --- a/Interaction/Widgets/Testing/Cxx/TestImplicitConeWidget.cxx +++ b/Interaction/Widgets/Testing/Cxx/TestImplicitConeWidget.cxx @@ -863,104 +863,7 @@ const char eventLog[] = "# StreamVersion 1.2\n" "MouseMoveEvent 225 133 0 0 0 0 0\n" "RenderEvent 225 133 0 0 0 0 0\n" "MouseMoveEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "LeftButtonPressEvent 226 133 0 0 0 0 0\n" - "StartInteractionEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "TimerEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "LeftButtonReleaseEvent 226 133 0 0 0 0 0\n" - "EndInteractionEvent 226 133 0 0 0 0 0\n" - "RenderEvent 226 133 0 0 0 0 0\n" - "MouseMoveEvent 225 131 0 0 0 0 0\n" - "MouseMoveEvent 224 127 0 0 0 0 0\n" - "MouseMoveEvent 223 124 0 0 0 0 0\n" - "MouseMoveEvent 222 121 0 0 0 0 0\n" - "MouseMoveEvent 220 117 0 0 0 0 0\n" - "MouseMoveEvent 218 114 0 0 0 0 0\n" - "MouseMoveEvent 218 111 0 0 0 0 0\n" - "MouseMoveEvent 218 109 0 0 0 0 0\n" - "MouseMoveEvent 217 106 0 0 0 0 0\n" - "MouseMoveEvent 217 104 0 0 0 0 0\n" - "MouseMoveEvent 216 101 0 0 0 0 0\n" - "MouseMoveEvent 215 99 0 0 0 0 0\n" - "MouseMoveEvent 213 97 0 0 0 0 0\n" - "MouseMoveEvent 212 95 0 0 0 0 0\n" - "MouseMoveEvent 211 93 0 0 0 0 0\n" - "MouseMoveEvent 209 91 0 0 0 0 0\n" - "MouseMoveEvent 208 90 0 0 0 0 0\n" - "MouseMoveEvent 207 88 0 0 0 0 0\n" - "MouseMoveEvent 207 87 0 0 0 0 0\n" - "MouseMoveEvent 206 86 0 0 0 0 0\n" - "MouseMoveEvent 205 84 0 0 0 0 0\n" - "MouseMoveEvent 204 83 0 0 0 0 0\n" - "MouseMoveEvent 203 82 0 0 0 0 0\n" - "MouseMoveEvent 203 80 0 0 0 0 0\n" - "MouseMoveEvent 202 79 0 0 0 0 0\n" - "MouseMoveEvent 202 77 0 0 0 0 0\n" - "MouseMoveEvent 202 76 0 0 0 0 0\n" - "MouseMoveEvent 201 74 0 0 0 0 0\n" - "MouseMoveEvent 201 72 0 0 0 0 0\n" - "MouseMoveEvent 200 71 0 0 0 0 0\n" - "MouseMoveEvent 200 70 0 0 0 0 0\n" - "MouseMoveEvent 199 69 0 0 0 0 0\n" - "MouseMoveEvent 199 67 0 0 0 0 0\n" - "RenderEvent 199 67 0 0 0 0 0\n" - "MouseMoveEvent 199 66 0 0 0 0 0\n" - "RenderEvent 199 66 0 0 0 0 0\n" - "MouseMoveEvent 198 65 0 0 0 0 0\n" - "RenderEvent 198 65 0 0 0 0 0\n" - "MouseMoveEvent 198 64 0 0 0 0 0\n" - "RenderEvent 198 64 0 0 0 0 0\n" - "MouseMoveEvent 198 63 0 0 0 0 0\n" - "RenderEvent 198 63 0 0 0 0 0\n" - "MouseMoveEvent 198 62 0 0 0 0 0\n" - "RenderEvent 198 62 0 0 0 0 0\n" - "MouseMoveEvent 197 58 0 0 0 0 0\n" - "RenderEvent 197 58 0 0 0 0 0\n" - "MouseMoveEvent 197 54 0 0 0 0 0\n" - "MouseMoveEvent 196 53 0 0 0 0 0\n" - "MouseMoveEvent 196 51 0 0 0 0 0\n" - "RenderEvent 196 51 0 0 0 0 0\n" - "MouseMoveEvent 196 49 0 0 0 0 0\n" - "RenderEvent 196 49 0 0 0 0 0\n" - "MouseMoveEvent 196 47 0 0 0 0 0\n" - "RenderEvent 196 47 0 0 0 0 0\n"; + "RenderEvent 226 133 0 0 0 0 0\n"; // This does the actual work: updates the vtkCone implicit function. // This in turn causes the pipeline to update and clip the object. @@ -1082,6 +985,8 @@ int TestImplicitConeWidget(int vtkNotUsed(argc), char* vtkNotUsed(argv)[]) // render the image interactor->Initialize(); renWin->Render(); + // uncomment to see cursor position during play. + // recorder->ShowCursorOn(); recorder->Play(); // Remove the observers so we can go interactive. Without this the "-I" diff --git a/Interaction/Widgets/Testing/Cxx/TestImplicitFrustumWidget.cxx b/Interaction/Widgets/Testing/Cxx/TestImplicitFrustumWidget.cxx index 4ea578ffe7d733bb472621dab20666c881e4e993..b034c8817ae253f00764f65fc120b4122e2861f0 100644 --- a/Interaction/Widgets/Testing/Cxx/TestImplicitFrustumWidget.cxx +++ b/Interaction/Widgets/Testing/Cxx/TestImplicitFrustumWidget.cxx @@ -25,100 +25,716 @@ namespace const char eventLog[] = "# StreamVersion 1.2\n" "ExposeEvent 0 299 0 0 0 0 0\n" - "EnterEvent 287 2 0 0 0 0 0\n" - "MouseMoveEvent 210 159 0 0 0 0 0\n" - "RenderEvent 210 159 0 0 0 0 0\n" - - "MouseWheelBackwardEvent 210 159 0 0 0 0 0\n" - "MouseWheelBackwardEvent 209 153 0 0 1 0 0\n" - "MouseWheelBackwardEvent 200 147 0 0 0 0 0\n" - "MouseWheelBackwardEvent 199 146 0 0 1 0 0\n" - "MouseWheelBackwardEvent 199 146 0 0 0 0 0\n" - "MouseWheelBackwardEvent 199 146 0 0 1 0 0\n" - "MouseWheelBackwardEvent 163 262 0 0 0 0 0\n" - "MouseWheelBackwardEvent 163 262 0 0 1 0 0\n" - - "MouseMoveEvent 163 262 0 0 0 0 0\n" - "MiddleButtonPressEvent 163 262 0 0 0 0 0\n" - "MouseMoveEvent 162 196 0 0 0 0 0\n" - "MiddleButtonReleaseEvent 162 196 0 0 0 0 0\n" - - "MouseWheelBackwardEvent 162 196 0 0 0 0 0\n" - - "MouseMoveEvent 247 259 0 0 0 0 0\n" - "LeftButtonPressEvent 247 259 0 0 0 0 0\n" - "MouseMoveEvent 1 257 0 0 0 0 0\n" - "LeftButtonReleaseEvent 1 257 0 0 0 0 0\n" - - "MouseMoveEvent 173 78 0 0 0 0 0\n" - "LeftButtonPressEvent 173 78 0 0 0 0 0\n" - "MouseMoveEvent 157 62 0 0 0 0 0\n" - "LeftButtonReleaseEvent 157 62 0 0 0 0 0\n" - - "MouseMoveEvent 140 81 0 0 0 0 0\n" - "LeftButtonPressEvent 140 81 0 0 0 0 0\n" - "MouseMoveEvent 121 75 0 0 0 0 0\n" - "LeftButtonReleaseEvent 121 75 0 0 0 0 0\n" - - "MouseMoveEvent 150 67 0 0 0 0 0\n" - "LeftButtonPressEvent 150 67 0 0 0 0 0\n" - "MouseMoveEvent 151 67 0 0 0 0 0\n" - "LeftButtonReleaseEvent 151 67 0 0 0 0 0\n" - - // Removing the MoveEvents cause the interaction to be wrong. - "MouseMoveEvent 151 76 0 0 0 0 0\n" - "LeftButtonPressEvent 151 76 0 0 0 0 0\n" - "MouseMoveEvent 150 76 0 0 0 0 0\n" - "MouseMoveEvent 149 76 0 0 0 0 0\n" - "MouseMoveEvent 145 77 0 0 0 0 0\n" - "MouseMoveEvent 143 78 0 0 0 0 0\n" - "MouseMoveEvent 142 78 0 0 0 0 0\n" - "MouseMoveEvent 141 79 0 0 0 0 0\n" - "MouseMoveEvent 140 79 0 0 0 0 0\n" - "MouseMoveEvent 140 80 0 0 0 0 0\n" - "MouseMoveEvent 139 80 0 0 0 0 0\n" - "MouseMoveEvent 138 80 0 0 0 0 0\n" - "MouseMoveEvent 138 80 0 0 0 0 0\n" - "MouseMoveEvent 137 80 0 0 0 0 0\n" - "MouseMoveEvent 137 81 0 0 0 0 0\n" - "MouseMoveEvent 136 81 0 0 0 0 0\n" - "MouseMoveEvent 136 82 0 0 0 0 0\n" - "MouseMoveEvent 135 82 0 0 0 0 0\n" - "MouseMoveEvent 134 82 0 0 0 0 0\n" - "MouseMoveEvent 133 84 0 0 0 0 0\n" - "MouseMoveEvent 131 85 0 0 0 0 0\n" - "MouseMoveEvent 130 86 0 0 0 0 0\n" - "MouseMoveEvent 129 88 0 0 0 0 0\n" - "MouseMoveEvent 128 89 0 0 0 0 0\n" - "MouseMoveEvent 127 90 0 0 0 0 0\n" - "MouseMoveEvent 124 92 0 0 0 0 0\n" - "MouseMoveEvent 123 93 0 0 0 0 0\n" - "MouseMoveEvent 122 94 0 0 0 0 0\n" - "MouseMoveEvent 122 95 0 0 0 0 0\n" - "MouseMoveEvent 121 97 0 0 0 0 0\n" - "MouseMoveEvent 120 99 0 0 0 0 0\n" - "MouseMoveEvent 119 101 0 0 0 0 0\n" - "MouseMoveEvent 119 102 0 0 0 0 0\n" - "MouseMoveEvent 118 104 0 0 0 0 0\n" - "MouseMoveEvent 118 105 0 0 0 0 0\n" - "LeftButtonReleaseEvent 118 105 0 0 0 0 0\n" - - "MouseMoveEvent 180 119 0 0 0 0 0\n" - "LeftButtonPressEvent 180 119 0 0 0 0 0\n" - "MouseMoveEvent 181 128 0 0 0 0 0\n" - "LeftButtonReleaseEvent 181 128 0 0 0 0 0\n" - - "MouseMoveEvent 163 268 0 0 0 0 0\n" - "LeftButtonPressEvent 163 268 0 0 0 0 0\n" - "MouseMoveEvent 363 129 0 0 0 0 0\n" - "LeftButtonReleaseEvent 363 129 0 0 0 0 0\n" - - "MouseMoveEvent 212 149 0 0 0 0 0\n" - "MiddleButtonPressEvent 212 149 0 0 0 0 0\n" - "MouseMoveEvent 159 155 0 0 0 0 0\n" - "MiddleButtonReleaseEvent 159 155 0 0 0 0 0\n" - - "RenderEvent 159 155 0 0 0 0 0\n"; + "RenderEvent 0 299 0 0 0 0 0\n" + "MouseWheelBackwardEvent 176 156 0 0 0 0 0\n" + "MouseWheelBackwardEvent 176 156 0 0 0 0 0\n" + "MouseWheelBackwardEvent 176 156 0 0 0 0 0\n" + "RenderEvent 78 109 0 0 0 0 0\n" + "LeftButtonPressEvent 78 109 0 0 0 0 0\n" + "RenderEvent 78 109 0 0 0 0 0\n" + "MouseMoveEvent 78 109 0 0 0 0 0\n" + "RenderEvent 78 109 0 0 0 0 0\n" + "MouseMoveEvent 79 108 0 0 0 0 0\n" + "RenderEvent 79 108 0 0 0 0 0\n" + "MouseMoveEvent 84 103 0 0 0 0 0\n" + "RenderEvent 84 103 0 0 0 0 0\n" + "MouseMoveEvent 85 102 0 0 0 0 0\n" + "RenderEvent 85 102 0 0 0 0 0\n" + "MouseMoveEvent 86 101 0 0 0 0 0\n" + "RenderEvent 86 101 0 0 0 0 0\n" + "MouseMoveEvent 87 101 0 0 0 0 0\n" + "RenderEvent 87 101 0 0 0 0 0\n" + "MouseMoveEvent 87 100 0 0 0 0 0\n" + "RenderEvent 87 100 0 0 0 0 0\n" + "MouseMoveEvent 88 100 0 0 0 0 0\n" + "RenderEvent 88 100 0 0 0 0 0\n" + "MouseMoveEvent 88 99 0 0 0 0 0\n" + "RenderEvent 88 99 0 0 0 0 0\n" + "MouseMoveEvent 89 99 0 0 0 0 0\n" + "RenderEvent 89 99 0 0 0 0 0\n" + "MouseMoveEvent 90 98 0 0 0 0 0\n" + "RenderEvent 90 98 0 0 0 0 0\n" + "MouseMoveEvent 90 97 0 0 0 0 0\n" + "RenderEvent 90 97 0 0 0 0 0\n" + "MouseMoveEvent 91 97 0 0 0 0 0\n" + "RenderEvent 91 97 0 0 0 0 0\n" + "MouseMoveEvent 92 97 0 0 0 0 0\n" + "RenderEvent 92 97 0 0 0 0 0\n" + "MouseMoveEvent 92 97 0 0 0 0 0\n" + "RenderEvent 92 97 0 0 0 0 0\n" + "MouseMoveEvent 93 97 0 0 0 0 0\n" + "RenderEvent 93 97 0 0 0 0 0\n" + "MouseMoveEvent 93 96 0 0 0 0 0\n" + "RenderEvent 93 96 0 0 0 0 0\n" + "MouseMoveEvent 94 95 0 0 0 0 0\n" + "RenderEvent 94 95 0 0 0 0 0\n" + "MouseMoveEvent 94 94 0 0 0 0 0\n" + "RenderEvent 94 94 0 0 0 0 0\n" + "MouseMoveEvent 95 94 0 0 0 0 0\n" + "RenderEvent 95 94 0 0 0 0 0\n" + "MouseMoveEvent 95 93 0 0 0 0 0\n" + "RenderEvent 95 93 0 0 0 0 0\n" + "MouseMoveEvent 95 94 0 0 0 0 0\n" + "RenderEvent 95 94 0 0 0 0 0\n" + "MouseMoveEvent 95 94 0 0 0 0 0\n" + "RenderEvent 95 94 0 0 0 0 0\n" + "MouseMoveEvent 95 95 0 0 0 0 0\n" + "RenderEvent 95 95 0 0 0 0 0\n" + "LeftButtonReleaseEvent 95 95 0 0 0 0 0\n" + "RenderEvent 95 95 0 0 0 0 0\n" + "MouseMoveEvent 95 96 0 0 0 0 0\n" + "RenderEvent 95 96 0 0 0 0 0\n" + "MouseMoveEvent 94 98 0 0 0 0 0\n" + "MouseMoveEvent 94 100 0 0 0 0 0\n" + "RenderEvent 94 100 0 0 0 0 0\n" + "MouseMoveEvent 94 104 0 0 0 0 0\n" + "RenderEvent 94 104 0 0 0 0 0\n" + "MouseMoveEvent 94 107 0 0 0 0 0\n" + "RenderEvent 94 107 0 0 0 0 0\n" + "MouseMoveEvent 94 114 0 0 0 0 0\n" + "RenderEvent 94 114 0 0 0 0 0\n" + "MouseMoveEvent 95 123 0 0 0 0 0\n" + "RenderEvent 95 123 0 0 0 0 0\n" + "MouseMoveEvent 102 133 0 0 0 0 0\n" + "RenderEvent 102 133 0 0 0 0 0\n" + "MouseMoveEvent 110 141 0 0 0 0 0\n" + "RenderEvent 110 141 0 0 0 0 0\n" + "MouseMoveEvent 117 150 0 0 0 0 0\n" + "RenderEvent 117 150 0 0 0 0 0\n" + "MouseMoveEvent 122 155 0 0 0 0 0\n" + "RenderEvent 122 155 0 0 0 0 0\n" + "MouseMoveEvent 128 172 0 0 0 0 0\n" + "RenderEvent 128 172 0 0 0 0 0\n" + "MouseMoveEvent 129 190 0 0 0 0 0\n" + "RenderEvent 129 190 0 0 0 0 0\n" + "MouseMoveEvent 129 207 0 0 0 0 0\n" + "RenderEvent 129 207 0 0 0 0 0\n" + "MouseMoveEvent 129 221 0 0 0 0 0\n" + "RenderEvent 129 221 0 0 0 0 0\n" + "MouseMoveEvent 129 233 0 0 0 0 0\n" + "RenderEvent 129 233 0 0 0 0 0\n" + "MouseMoveEvent 130 242 0 0 0 0 0\n" + "RenderEvent 130 242 0 0 0 0 0\n" + "MouseMoveEvent 131 248 0 0 0 0 0\n" + "RenderEvent 131 248 0 0 0 0 0\n" + "MouseMoveEvent 131 253 0 0 0 0 0\n" + "RenderEvent 131 253 0 0 0 0 0\n" + "MouseMoveEvent 131 257 0 0 0 0 0\n" + "RenderEvent 131 257 0 0 0 0 0\n" + "MouseMoveEvent 130 258 0 0 0 0 0\n" + "RenderEvent 130 258 0 0 0 0 0\n" + "MouseMoveEvent 131 257 0 0 0 0 0\n" + "RenderEvent 131 257 0 0 0 0 0\n" + "MouseMoveEvent 131 256 0 0 0 0 0\n" + "RenderEvent 131 256 0 0 0 0 0\n" + "MouseMoveEvent 132 256 0 0 0 0 0\n" + "RenderEvent 132 256 0 0 0 0 0\n" + "MouseMoveEvent 134 254 0 0 0 0 0\n" + "RenderEvent 134 254 0 0 0 0 0\n" + "MouseMoveEvent 138 250 0 0 0 0 0\n" + "RenderEvent 138 250 0 0 0 0 0\n" + "MouseMoveEvent 145 246 0 0 0 0 0\n" + "RenderEvent 145 246 0 0 0 0 0\n" + "MouseMoveEvent 154 244 0 0 0 0 0\n" + "RenderEvent 154 244 0 0 0 0 0\n" + "MouseMoveEvent 160 244 0 0 0 0 0\n" + "RenderEvent 160 244 0 0 0 0 0\n" + "MouseMoveEvent 162 244 0 0 0 0 0\n" + "RenderEvent 162 244 0 0 0 0 0\n" + "MouseMoveEvent 163 246 0 0 0 0 0\n" + "RenderEvent 163 246 0 0 0 0 0\n" + "MouseMoveEvent 164 248 0 0 0 0 0\n" + "RenderEvent 164 248 0 0 0 0 0\n" + "MouseMoveEvent 165 249 0 0 0 0 0\n" + "RenderEvent 165 249 0 0 0 0 0\n" + "MouseMoveEvent 165 250 0 0 0 0 0\n" + "RenderEvent 165 250 0 0 0 0 0\n" + "MouseMoveEvent 166 251 0 0 0 0 0\n" + "RenderEvent 166 251 0 0 0 0 0\n" + "MouseMoveEvent 167 253 0 0 0 0 0\n" + "RenderEvent 167 253 0 0 0 0 0\n" + "MouseMoveEvent 169 256 0 0 0 0 0\n" + "RenderEvent 169 256 0 0 0 0 0\n" + "MouseMoveEvent 170 259 0 0 0 0 0\n" + "RenderEvent 170 259 0 0 0 0 0\n" + "MouseMoveEvent 172 262 0 0 0 0 0\n" + "RenderEvent 172 262 0 0 0 0 0\n" + "MouseMoveEvent 172 263 0 0 0 0 0\n" + "RenderEvent 172 263 0 0 0 0 0\n" + "MouseMoveEvent 172 265 0 0 0 0 0\n" + "RenderEvent 172 265 0 0 0 0 0\n" + "MouseMoveEvent 172 265 0 0 0 0 0\n" + "RenderEvent 172 265 0 0 0 0 0\n" + "MouseMoveEvent 172 266 0 0 0 0 0\n" + "RenderEvent 172 266 0 0 0 0 0\n" + "MouseMoveEvent 172 267 0 0 0 0 0\n" + "RenderEvent 172 267 0 0 0 0 0\n" + "MouseMoveEvent 173 266 0 0 0 0 0\n" + "RenderEvent 173 266 0 0 0 0 0\n" + "MouseMoveEvent 173 266 0 0 0 0 0\n" + "RenderEvent 173 266 0 0 0 0 0\n" + "MouseMoveEvent 173 265 0 0 0 0 0\n" + "RenderEvent 173 265 0 0 0 0 0\n" + "MouseMoveEvent 174 264 0 0 0 0 0\n" + "RenderEvent 174 264 0 0 0 0 0\n" + "MouseMoveEvent 174 262 0 0 0 0 0\n" + "RenderEvent 174 262 0 0 0 0 0\n" + "MouseMoveEvent 174 261 0 0 0 0 0\n" + "RenderEvent 174 261 0 0 0 0 0\n" + "LeftButtonPressEvent 174 261 0 0 0 0 0\n" + "RenderEvent 174 261 0 0 0 0 0\n" + "MouseMoveEvent 174 261 0 0 0 0 0\n" + "RenderEvent 174 261 0 0 0 0 0\n" + "MouseMoveEvent 176 258 0 0 0 0 0\n" + "RenderEvent 176 258 0 0 0 0 0\n" + "MouseMoveEvent 179 256 0 0 0 0 0\n" + "RenderEvent 179 256 0 0 0 0 0\n" + "MouseMoveEvent 181 254 0 0 0 0 0\n" + "RenderEvent 181 254 0 0 0 0 0\n" + "MouseMoveEvent 183 252 0 0 0 0 0\n" + "RenderEvent 183 252 0 0 0 0 0\n" + "MouseMoveEvent 184 251 0 0 0 0 0\n" + "RenderEvent 184 251 0 0 0 0 0\n" + "MouseMoveEvent 186 249 0 0 0 0 0\n" + "RenderEvent 186 249 0 0 0 0 0\n" + "MouseMoveEvent 188 248 0 0 0 0 0\n" + "RenderEvent 188 248 0 0 0 0 0\n" + "MouseMoveEvent 189 246 0 0 0 0 0\n" + "RenderEvent 189 246 0 0 0 0 0\n" + "MouseMoveEvent 192 243 0 0 0 0 0\n" + "RenderEvent 192 243 0 0 0 0 0\n" + "MouseMoveEvent 194 241 0 0 0 0 0\n" + "RenderEvent 194 241 0 0 0 0 0\n" + "MouseMoveEvent 195 240 0 0 0 0 0\n" + "RenderEvent 195 240 0 0 0 0 0\n" + "MouseMoveEvent 196 239 0 0 0 0 0\n" + "RenderEvent 196 239 0 0 0 0 0\n" + "MouseMoveEvent 196 240 0 0 0 0 0\n" + "RenderEvent 196 240 0 0 0 0 0\n" + "MouseMoveEvent 195 242 0 0 0 0 0\n" + "RenderEvent 195 242 0 0 0 0 0\n" + "LeftButtonReleaseEvent 195 242 0 0 0 0 0\n" + "RenderEvent 195 242 0 0 0 0 0\n" + "MouseMoveEvent 195 241 0 0 0 0 0\n" + "RenderEvent 195 241 0 0 0 0 0\n" + "MouseMoveEvent 195 240 0 0 0 0 0\n" + "RenderEvent 195 240 0 0 0 0 0\n" + "MouseMoveEvent 195 240 0 0 0 0 0\n" + "RenderEvent 195 240 0 0 0 0 0\n" + "MouseMoveEvent 195 239 0 0 0 0 0\n" + "RenderEvent 195 239 0 0 0 0 0\n" + "MouseMoveEvent 195 238 0 0 0 0 0\n" + "RenderEvent 195 238 0 0 0 0 0\n" + "MouseMoveEvent 195 237 0 0 0 0 0\n" + "RenderEvent 195 237 0 0 0 0 0\n" + "MouseMoveEvent 195 236 0 0 0 0 0\n" + "RenderEvent 195 236 0 0 0 0 0\n" + "MouseMoveEvent 195 236 0 0 0 0 0\n" + "RenderEvent 195 236 0 0 0 0 0\n" + "MouseMoveEvent 195 235 0 0 0 0 0\n" + "RenderEvent 195 235 0 0 0 0 0\n" + "MouseMoveEvent 194 234 0 0 0 0 0\n" + "RenderEvent 194 234 0 0 0 0 0\n" + "MouseMoveEvent 191 231 0 0 0 0 0\n" + "RenderEvent 191 231 0 0 0 0 0\n" + "MouseMoveEvent 188 229 0 0 0 0 0\n" + "RenderEvent 188 229 0 0 0 0 0\n" + "MouseMoveEvent 180 222 0 0 0 0 0\n" + "RenderEvent 180 222 0 0 0 0 0\n" + "MouseMoveEvent 174 218 0 0 0 0 0\n" + "RenderEvent 174 218 0 0 0 0 0\n" + "MouseMoveEvent 172 215 0 0 0 0 0\n" + "RenderEvent 172 215 0 0 0 0 0\n" + "MouseMoveEvent 168 212 0 0 0 0 0\n" + "RenderEvent 168 212 0 0 0 0 0\n" + "MouseMoveEvent 166 211 0 0 0 0 0\n" + "RenderEvent 166 211 0 0 0 0 0\n" + "MouseMoveEvent 165 211 0 0 0 0 0\n" + "RenderEvent 165 211 0 0 0 0 0\n" + "MouseMoveEvent 164 211 0 0 0 0 0\n" + "RenderEvent 164 211 0 0 0 0 0\n" + "MouseMoveEvent 161 211 0 0 0 0 0\n" + "RenderEvent 161 211 0 0 0 0 0\n" + "MouseMoveEvent 160 211 0 0 0 0 0\n" + "RenderEvent 160 211 0 0 0 0 0\n" + "MouseMoveEvent 159 211 0 0 0 0 0\n" + "RenderEvent 159 211 0 0 0 0 0\n" + "MouseMoveEvent 158 211 0 0 0 0 0\n" + "RenderEvent 158 211 0 0 0 0 0\n" + "MouseMoveEvent 157 212 0 0 0 0 0\n" + "RenderEvent 157 212 0 0 0 0 0\n" + "MouseMoveEvent 157 212 0 0 0 0 0\n" + "RenderEvent 157 212 0 0 0 0 0\n" + "MouseMoveEvent 155 212 0 0 0 0 0\n" + "RenderEvent 155 212 0 0 0 0 0\n" + "MouseMoveEvent 154 213 0 0 0 0 0\n" + "RenderEvent 154 213 0 0 0 0 0\n" + "MouseMoveEvent 153 213 0 0 0 0 0\n" + "RenderEvent 153 213 0 0 0 0 0\n" + "LeftButtonPressEvent 153 213 0 0 0 0 0\n" + "RenderEvent 153 213 0 0 0 0 0\n" + "MouseMoveEvent 154 213 0 0 0 0 0\n" + "RenderEvent 154 213 0 0 0 0 0\n" + "MouseMoveEvent 154 213 0 0 0 0 0\n" + "RenderEvent 154 213 0 0 0 0 0\n" + "MouseMoveEvent 155 213 0 0 0 0 0\n" + "RenderEvent 155 213 0 0 0 0 0\n" + "MouseMoveEvent 156 213 0 0 0 0 0\n" + "RenderEvent 156 213 0 0 0 0 0\n" + "MouseMoveEvent 157 213 0 0 0 0 0\n" + "RenderEvent 157 213 0 0 0 0 0\n" + "MouseMoveEvent 159 213 0 0 0 0 0\n" + "RenderEvent 159 213 0 0 0 0 0\n" + "MouseMoveEvent 165 213 0 0 0 0 0\n" + "RenderEvent 165 213 0 0 0 0 0\n" + "MouseMoveEvent 167 213 0 0 0 0 0\n" + "RenderEvent 167 213 0 0 0 0 0\n" + "MouseMoveEvent 169 213 0 0 0 0 0\n" + "RenderEvent 169 213 0 0 0 0 0\n" + "MouseMoveEvent 171 213 0 0 0 0 0\n" + "RenderEvent 171 213 0 0 0 0 0\n" + "MouseMoveEvent 172 213 0 0 0 0 0\n" + "RenderEvent 172 213 0 0 0 0 0\n" + "MouseMoveEvent 173 213 0 0 0 0 0\n" + "RenderEvent 173 213 0 0 0 0 0\n" + "MouseMoveEvent 174 213 0 0 0 0 0\n" + "RenderEvent 174 213 0 0 0 0 0\n" + "MouseMoveEvent 174 213 0 0 0 0 0\n" + "RenderEvent 174 213 0 0 0 0 0\n" + "MouseMoveEvent 175 213 0 0 0 0 0\n" + "RenderEvent 175 213 0 0 0 0 0\n" + "MouseMoveEvent 178 210 0 0 0 0 0\n" + "RenderEvent 178 210 0 0 0 0 0\n" + "MouseMoveEvent 179 209 0 0 0 0 0\n" + "RenderEvent 179 209 0 0 0 0 0\n" + "MouseMoveEvent 179 208 0 0 0 0 0\n" + "RenderEvent 179 208 0 0 0 0 0\n" + "MouseMoveEvent 180 207 0 0 0 0 0\n" + "RenderEvent 180 207 0 0 0 0 0\n" + "MouseMoveEvent 181 206 0 0 0 0 0\n" + "RenderEvent 181 206 0 0 0 0 0\n" + "MouseMoveEvent 182 205 0 0 0 0 0\n" + "RenderEvent 182 205 0 0 0 0 0\n" + "MouseMoveEvent 185 202 0 0 0 0 0\n" + "RenderEvent 185 202 0 0 0 0 0\n" + "MouseMoveEvent 187 201 0 0 0 0 0\n" + "RenderEvent 187 201 0 0 0 0 0\n" + "MouseMoveEvent 188 200 0 0 0 0 0\n" + "RenderEvent 188 200 0 0 0 0 0\n" + "MouseMoveEvent 189 198 0 0 0 0 0\n" + "RenderEvent 189 198 0 0 0 0 0\n" + "MouseMoveEvent 190 196 0 0 0 0 0\n" + "RenderEvent 190 196 0 0 0 0 0\n" + "MouseMoveEvent 192 195 0 0 0 0 0\n" + "RenderEvent 192 195 0 0 0 0 0\n" + "MouseMoveEvent 193 195 0 0 0 0 0\n" + "RenderEvent 193 195 0 0 0 0 0\n" + "MouseMoveEvent 193 195 0 0 0 0 0\n" + "RenderEvent 193 195 0 0 0 0 0\n" + "MouseMoveEvent 190 196 0 0 0 0 0\n" + "RenderEvent 190 196 0 0 0 0 0\n" + "MouseMoveEvent 184 197 0 0 0 0 0\n" + "RenderEvent 184 197 0 0 0 0 0\n" + "MouseMoveEvent 180 197 0 0 0 0 0\n" + "RenderEvent 180 197 0 0 0 0 0\n" + "MouseMoveEvent 178 197 0 0 0 0 0\n" + "RenderEvent 178 197 0 0 0 0 0\n" + "MouseMoveEvent 176 197 0 0 0 0 0\n" + "RenderEvent 176 197 0 0 0 0 0\n" + "MouseMoveEvent 173 198 0 0 0 0 0\n" + "RenderEvent 173 198 0 0 0 0 0\n" + "MouseMoveEvent 169 198 0 0 0 0 0\n" + "RenderEvent 169 198 0 0 0 0 0\n" + "MouseMoveEvent 167 199 0 0 0 0 0\n" + "RenderEvent 167 199 0 0 0 0 0\n" + "MouseMoveEvent 165 200 0 0 0 0 0\n" + "RenderEvent 165 200 0 0 0 0 0\n" + "MouseMoveEvent 163 200 0 0 0 0 0\n" + "RenderEvent 163 200 0 0 0 0 0\n" + "MouseMoveEvent 161 200 0 0 0 0 0\n" + "RenderEvent 161 200 0 0 0 0 0\n" + "MouseMoveEvent 159 201 0 0 0 0 0\n" + "RenderEvent 159 201 0 0 0 0 0\n" + "MouseMoveEvent 157 202 0 0 0 0 0\n" + "RenderEvent 157 202 0 0 0 0 0\n" + "MouseMoveEvent 153 202 0 0 0 0 0\n" + "RenderEvent 153 202 0 0 0 0 0\n" + "MouseMoveEvent 148 203 0 0 0 0 0\n" + "RenderEvent 148 203 0 0 0 0 0\n" + "MouseMoveEvent 145 203 0 0 0 0 0\n" + "RenderEvent 145 203 0 0 0 0 0\n" + "MouseMoveEvent 143 203 0 0 0 0 0\n" + "RenderEvent 143 203 0 0 0 0 0\n" + "MouseMoveEvent 141 203 0 0 0 0 0\n" + "RenderEvent 141 203 0 0 0 0 0\n" + "MouseMoveEvent 140 203 0 0 0 0 0\n" + "RenderEvent 140 203 0 0 0 0 0\n" + "MouseMoveEvent 139 203 0 0 0 0 0\n" + "RenderEvent 139 203 0 0 0 0 0\n" + "MouseMoveEvent 137 203 0 0 0 0 0\n" + "RenderEvent 137 203 0 0 0 0 0\n" + "MouseMoveEvent 135 203 0 0 0 0 0\n" + "RenderEvent 135 203 0 0 0 0 0\n" + "MouseMoveEvent 134 204 0 0 0 0 0\n" + "RenderEvent 134 204 0 0 0 0 0\n" + "MouseMoveEvent 132 204 0 0 0 0 0\n" + "RenderEvent 132 204 0 0 0 0 0\n" + "MouseMoveEvent 131 204 0 0 0 0 0\n" + "RenderEvent 131 204 0 0 0 0 0\n" + "MouseMoveEvent 130 204 0 0 0 0 0\n" + "RenderEvent 130 204 0 0 0 0 0\n" + "MouseMoveEvent 129 204 0 0 0 0 0\n" + "RenderEvent 129 204 0 0 0 0 0\n" + "MouseMoveEvent 128 204 0 0 0 0 0\n" + "RenderEvent 128 204 0 0 0 0 0\n" + "MouseMoveEvent 128 205 0 0 0 0 0\n" + "RenderEvent 128 205 0 0 0 0 0\n" + "MouseMoveEvent 127 205 0 0 0 0 0\n" + "RenderEvent 127 205 0 0 0 0 0\n" + "MouseMoveEvent 127 205 0 0 0 0 0\n" + "RenderEvent 127 205 0 0 0 0 0\n" + "MouseMoveEvent 126 205 0 0 0 0 0\n" + "RenderEvent 126 205 0 0 0 0 0\n" + "MouseMoveEvent 126 205 0 0 0 0 0\n" + "RenderEvent 126 205 0 0 0 0 0\n" + "MouseMoveEvent 125 205 0 0 0 0 0\n" + "RenderEvent 125 205 0 0 0 0 0\n" + "MouseMoveEvent 123 205 0 0 0 0 0\n" + "RenderEvent 123 205 0 0 0 0 0\n" + "MouseMoveEvent 122 204 0 0 0 0 0\n" + "RenderEvent 122 204 0 0 0 0 0\n" + "MouseMoveEvent 121 204 0 0 0 0 0\n" + "RenderEvent 121 204 0 0 0 0 0\n" + "MouseMoveEvent 120 204 0 0 0 0 0\n" + "RenderEvent 120 204 0 0 0 0 0\n" + "LeftButtonReleaseEvent 120 204 0 0 0 0 0\n" + "RenderEvent 120 204 0 0 0 0 0\n" + "MouseMoveEvent 120 204 0 0 0 0 0\n" + "RenderEvent 120 204 0 0 0 0 0\n" + "MouseMoveEvent 120 202 0 0 0 0 0\n" + "RenderEvent 120 202 0 0 0 0 0\n" + "MouseMoveEvent 119 196 0 0 0 0 0\n" + "RenderEvent 119 196 0 0 0 0 0\n" + "MouseMoveEvent 118 191 0 0 0 0 0\n" + "MouseMoveEvent 116 185 0 0 0 0 0\n" + "MouseMoveEvent 114 179 0 0 0 0 0\n" + "MouseMoveEvent 113 174 0 0 0 0 0\n" + "MouseMoveEvent 111 169 0 0 0 0 0\n" + "MouseMoveEvent 108 161 0 0 0 0 0\n" + "MouseMoveEvent 107 156 0 0 0 0 0\n" + "MouseMoveEvent 105 150 0 0 0 0 0\n" + "MouseMoveEvent 103 145 0 0 0 0 0\n" + "MouseMoveEvent 102 142 0 0 0 0 0\n" + "MouseMoveEvent 101 137 0 0 0 0 0\n" + "MouseMoveEvent 100 134 0 0 0 0 0\n" + "MouseMoveEvent 99 131 0 0 0 0 0\n" + "RenderEvent 99 131 0 0 0 0 0\n" + "MouseMoveEvent 99 125 0 0 0 0 0\n" + "RenderEvent 99 125 0 0 0 0 0\n" + "MouseMoveEvent 99 124 0 0 0 0 0\n" + "RenderEvent 99 124 0 0 0 0 0\n" + "MouseMoveEvent 99 123 0 0 0 0 0\n" + "RenderEvent 99 123 0 0 0 0 0\n" + "MouseMoveEvent 99 122 0 0 0 0 0\n" + "RenderEvent 99 122 0 0 0 0 0\n" + "MouseMoveEvent 99 122 0 0 0 0 0\n" + "RenderEvent 99 122 0 0 0 0 0\n" + "MouseMoveEvent 99 118 0 0 0 0 0\n" + "RenderEvent 99 118 0 0 0 0 0\n" + "MouseMoveEvent 100 115 0 0 0 0 0\n" + "RenderEvent 100 115 0 0 0 0 0\n" + "MouseMoveEvent 100 111 0 0 0 0 0\n" + "RenderEvent 100 111 0 0 0 0 0\n" + "MouseMoveEvent 100 107 0 0 0 0 0\n" + "RenderEvent 100 107 0 0 0 0 0\n" + "MouseMoveEvent 100 103 0 0 0 0 0\n" + "RenderEvent 100 103 0 0 0 0 0\n" + "MouseMoveEvent 100 99 0 0 0 0 0\n" + "RenderEvent 100 99 0 0 0 0 0\n" + "MouseMoveEvent 101 97 0 0 0 0 0\n" + "RenderEvent 101 97 0 0 0 0 0\n" + "MouseMoveEvent 101 96 0 0 0 0 0\n" + "RenderEvent 101 96 0 0 0 0 0\n" + "MouseMoveEvent 102 96 0 0 0 0 0\n" + "RenderEvent 102 96 0 0 0 0 0\n" + "MouseMoveEvent 102 95 0 0 0 0 0\n" + "RenderEvent 102 95 0 0 0 0 0\n" + "MouseMoveEvent 102 94 0 0 0 0 0\n" + "RenderEvent 102 94 0 0 0 0 0\n" + "MouseMoveEvent 101 94 0 0 0 0 0\n" + "RenderEvent 101 94 0 0 0 0 0\n" + "MouseMoveEvent 100 94 0 0 0 0 0\n" + "RenderEvent 100 94 0 0 0 0 0\n" + "MouseMoveEvent 100 93 0 0 0 0 0\n" + "RenderEvent 100 93 0 0 0 0 0\n" + "MouseMoveEvent 100 93 0 0 0 0 0\n" + "RenderEvent 100 93 0 0 0 0 0\n" + "MouseMoveEvent 99 93 0 0 0 0 0\n" + "RenderEvent 99 93 0 0 0 0 0\n" + "MouseMoveEvent 99 93 0 0 0 0 0\n" + "RenderEvent 99 93 0 0 0 0 0\n" + "MouseMoveEvent 99 94 0 0 0 0 0\n" + "RenderEvent 99 94 0 0 0 0 0\n" + "MouseMoveEvent 98 94 0 0 0 0 0\n" + "RenderEvent 98 94 0 0 0 0 0\n" + "MouseMoveEvent 97 94 0 0 0 0 0\n" + "RenderEvent 97 94 0 0 0 0 0\n" + "MouseMoveEvent 96 95 0 0 0 0 0\n" + "RenderEvent 96 95 0 0 0 0 0\n" + "MouseMoveEvent 95 96 0 0 0 0 0\n" + "RenderEvent 95 96 0 0 0 0 0\n" + "MouseMoveEvent 95 97 0 0 0 0 0\n" + "RenderEvent 95 97 0 0 0 0 0\n" + "MouseMoveEvent 95 97 0 0 0 0 0\n" + "RenderEvent 95 97 0 0 0 0 0\n" + "MouseMoveEvent 95 96 0 0 0 0 0\n" + "RenderEvent 95 96 0 0 0 0 0\n" + "MouseMoveEvent 95 95 0 0 0 0 0\n" + "RenderEvent 95 95 0 0 0 0 0\n" + "MouseMoveEvent 94 95 0 0 0 0 0\n" + "RenderEvent 94 95 0 0 0 0 0\n" + "MouseMoveEvent 93 95 0 0 0 0 0\n" + "RenderEvent 93 95 0 0 0 0 0\n" + "MouseMoveEvent 92 95 0 0 0 0 0\n" + "RenderEvent 92 95 0 0 0 0 0\n" + "MouseMoveEvent 92 96 0 0 0 0 0\n" + "RenderEvent 92 96 0 0 0 0 0\n" + "LeftButtonPressEvent 92 96 0 0 0 0 0\n" + "RenderEvent 92 96 0 0 0 0 0\n" + "MouseMoveEvent 93 96 0 0 0 0 0\n" + "RenderEvent 93 96 0 0 0 0 0\n" + "MouseMoveEvent 101 95 0 0 0 0 0\n" + "RenderEvent 101 95 0 0 0 0 0\n" + "MouseMoveEvent 104 95 0 0 0 0 0\n" + "RenderEvent 104 95 0 0 0 0 0\n" + "MouseMoveEvent 105 95 0 0 0 0 0\n" + "RenderEvent 105 95 0 0 0 0 0\n" + "MouseMoveEvent 106 95 0 0 0 0 0\n" + "RenderEvent 106 95 0 0 0 0 0\n" + "MouseMoveEvent 110 95 0 0 0 0 0\n" + "RenderEvent 110 95 0 0 0 0 0\n" + "MouseMoveEvent 115 96 0 0 0 0 0\n" + "RenderEvent 115 96 0 0 0 0 0\n" + "MouseMoveEvent 119 97 0 0 0 0 0\n" + "RenderEvent 119 97 0 0 0 0 0\n" + "MouseMoveEvent 122 98 0 0 0 0 0\n" + "RenderEvent 122 98 0 0 0 0 0\n" + "MouseMoveEvent 123 98 0 0 0 0 0\n" + "RenderEvent 123 98 0 0 0 0 0\n" + "MouseMoveEvent 124 98 0 0 0 0 0\n" + "RenderEvent 124 98 0 0 0 0 0\n" + "MouseMoveEvent 125 98 0 0 0 0 0\n" + "RenderEvent 125 98 0 0 0 0 0\n" + "MouseMoveEvent 126 98 0 0 0 0 0\n" + "RenderEvent 126 98 0 0 0 0 0\n" + "MouseMoveEvent 128 98 0 0 0 0 0\n" + "RenderEvent 128 98 0 0 0 0 0\n" + "MouseMoveEvent 130 98 0 0 0 0 0\n" + "RenderEvent 130 98 0 0 0 0 0\n" + "MouseMoveEvent 132 98 0 0 0 0 0\n" + "RenderEvent 132 98 0 0 0 0 0\n" + "MouseMoveEvent 134 97 0 0 0 0 0\n" + "RenderEvent 134 97 0 0 0 0 0\n" + "MouseMoveEvent 138 96 0 0 0 0 0\n" + "RenderEvent 138 96 0 0 0 0 0\n" + "MouseMoveEvent 140 95 0 0 0 0 0\n" + "RenderEvent 140 95 0 0 0 0 0\n" + "MouseMoveEvent 141 95 0 0 0 0 0\n" + "RenderEvent 141 95 0 0 0 0 0\n" + "MouseMoveEvent 143 94 0 0 0 0 0\n" + "RenderEvent 143 94 0 0 0 0 0\n" + "MouseMoveEvent 145 94 0 0 0 0 0\n" + "RenderEvent 145 94 0 0 0 0 0\n" + "MouseMoveEvent 146 94 0 0 0 0 0\n" + "RenderEvent 146 94 0 0 0 0 0\n" + "MouseMoveEvent 146 93 0 0 0 0 0\n" + "RenderEvent 146 93 0 0 0 0 0\n" + "MouseMoveEvent 147 93 0 0 0 0 0\n" + "RenderEvent 147 93 0 0 0 0 0\n" + "MouseMoveEvent 147 92 0 0 0 0 0\n" + "RenderEvent 147 92 0 0 0 0 0\n" + "MouseMoveEvent 148 92 0 0 0 0 0\n" + "RenderEvent 148 92 0 0 0 0 0\n" + "MouseMoveEvent 147 92 0 0 0 0 0\n" + "RenderEvent 147 92 0 0 0 0 0\n" + "MouseMoveEvent 147 92 0 0 0 0 0\n" + "RenderEvent 147 92 0 0 0 0 0\n" + "MouseMoveEvent 146 92 0 0 0 0 0\n" + "RenderEvent 146 92 0 0 0 0 0\n" + "MouseMoveEvent 145 92 0 0 0 0 0\n" + "RenderEvent 145 92 0 0 0 0 0\n" + "MouseMoveEvent 144 92 0 0 0 0 0\n" + "RenderEvent 144 92 0 0 0 0 0\n" + "MouseMoveEvent 145 92 0 0 0 0 0\n" + "RenderEvent 145 92 0 0 0 0 0\n" + "MouseMoveEvent 147 92 0 0 0 0 0\n" + "RenderEvent 147 92 0 0 0 0 0\n" + "MouseMoveEvent 151 92 0 0 0 0 0\n" + "RenderEvent 151 92 0 0 0 0 0\n" + "MouseMoveEvent 153 92 0 0 0 0 0\n" + "RenderEvent 153 92 0 0 0 0 0\n" + "MouseMoveEvent 155 92 0 0 0 0 0\n" + "RenderEvent 155 92 0 0 0 0 0\n" + "MouseMoveEvent 156 92 0 0 0 0 0\n" + "RenderEvent 156 92 0 0 0 0 0\n" + "MouseMoveEvent 156 92 0 0 0 0 0\n" + "RenderEvent 156 92 0 0 0 0 0\n" + "MouseMoveEvent 157 92 0 0 0 0 0\n" + "RenderEvent 157 92 0 0 0 0 0\n" + "MouseMoveEvent 158 92 0 0 0 0 0\n" + "RenderEvent 158 92 0 0 0 0 0\n" + "MouseMoveEvent 159 92 0 0 0 0 0\n" + "RenderEvent 159 92 0 0 0 0 0\n" + "MouseMoveEvent 159 91 0 0 0 0 0\n" + "RenderEvent 159 91 0 0 0 0 0\n" + "MouseMoveEvent 159 91 0 0 0 0 0\n" + "RenderEvent 159 91 0 0 0 0 0\n" + "MouseMoveEvent 157 91 0 0 0 0 0\n" + "RenderEvent 157 91 0 0 0 0 0\n" + "MouseMoveEvent 154 91 0 0 0 0 0\n" + "RenderEvent 154 91 0 0 0 0 0\n" + "MouseMoveEvent 151 91 0 0 0 0 0\n" + "RenderEvent 151 91 0 0 0 0 0\n" + "MouseMoveEvent 150 91 0 0 0 0 0\n" + "RenderEvent 150 91 0 0 0 0 0\n" + "MouseMoveEvent 150 91 0 0 0 0 0\n" + "RenderEvent 150 91 0 0 0 0 0\n" + "MouseMoveEvent 145 91 0 0 0 0 0\n" + "RenderEvent 145 91 0 0 0 0 0\n" + "MouseMoveEvent 142 92 0 0 0 0 0\n" + "RenderEvent 142 92 0 0 0 0 0\n" + "MouseMoveEvent 140 92 0 0 0 0 0\n" + "RenderEvent 140 92 0 0 0 0 0\n" + "MouseMoveEvent 140 93 0 0 0 0 0\n" + "RenderEvent 140 93 0 0 0 0 0\n" + "MouseMoveEvent 139 93 0 0 0 0 0\n" + "RenderEvent 139 93 0 0 0 0 0\n" + "MouseMoveEvent 139 93 0 0 0 0 0\n" + "RenderEvent 139 93 0 0 0 0 0\n" + "MouseMoveEvent 138 93 0 0 0 0 0\n" + "RenderEvent 138 93 0 0 0 0 0\n" + "MouseMoveEvent 137 93 0 0 0 0 0\n" + "RenderEvent 137 93 0 0 0 0 0\n" + "MouseMoveEvent 136 93 0 0 0 0 0\n" + "RenderEvent 136 93 0 0 0 0 0\n" + "MouseMoveEvent 136 93 0 0 0 0 0\n" + "RenderEvent 136 93 0 0 0 0 0\n" + "MouseMoveEvent 135 93 0 0 0 0 0\n" + "RenderEvent 135 93 0 0 0 0 0\n" + "MouseMoveEvent 134 93 0 0 0 0 0\n" + "RenderEvent 134 93 0 0 0 0 0\n" + "LeftButtonReleaseEvent 134 93 0 0 0 0 0\n" + "RenderEvent 134 93 0 0 0 0 0\n" + "MouseMoveEvent 134 93 0 0 0 0 0\n" + "RenderEvent 134 93 0 0 0 0 0\n" + "MouseMoveEvent 134 93 0 0 0 0 0\n" + "MouseMoveEvent 136 93 0 0 0 0 0\n" + "MouseMoveEvent 140 93 0 0 0 0 0\n" + "RenderEvent 140 93 0 0 0 0 0\n" + "MouseMoveEvent 148 93 0 0 0 0 0\n" + "RenderEvent 148 93 0 0 0 0 0\n" + "MouseMoveEvent 153 94 0 0 0 0 0\n" + "RenderEvent 153 94 0 0 0 0 0\n" + "MouseMoveEvent 157 94 0 0 0 0 0\n" + "RenderEvent 157 94 0 0 0 0 0\n" + "MouseMoveEvent 159 95 0 0 0 0 0\n" + "RenderEvent 159 95 0 0 0 0 0\n" + "MouseMoveEvent 160 95 0 0 0 0 0\n" + "RenderEvent 160 95 0 0 0 0 0\n" + "MouseMoveEvent 160 96 0 0 0 0 0\n" + "RenderEvent 160 96 0 0 0 0 0\n" + "MouseMoveEvent 161 97 0 0 0 0 0\n" + "RenderEvent 161 97 0 0 0 0 0\n" + "MouseMoveEvent 161 98 0 0 0 0 0\n" + "RenderEvent 161 98 0 0 0 0 0\n" + "MouseMoveEvent 161 99 0 0 0 0 0\n" + "RenderEvent 161 99 0 0 0 0 0\n" + "MouseMoveEvent 161 99 0 0 0 0 0\n" + "RenderEvent 161 99 0 0 0 0 0\n" + "MouseMoveEvent 161 100 0 0 0 0 0\n" + "RenderEvent 161 100 0 0 0 0 0\n" + "MouseMoveEvent 161 101 0 0 0 0 0\n" + "RenderEvent 161 101 0 0 0 0 0\n" + "MouseMoveEvent 161 101 0 0 0 0 0\n" + "RenderEvent 161 101 0 0 0 0 0\n" + "MouseMoveEvent 161 102 0 0 0 0 0\n" + "RenderEvent 161 102 0 0 0 0 0\n" + "MouseMoveEvent 161 103 0 0 0 0 0\n" + "RenderEvent 161 103 0 0 0 0 0\n" + "MouseMoveEvent 160 103 0 0 0 0 0\n" + "RenderEvent 160 103 0 0 0 0 0\n" + "MouseMoveEvent 160 104 0 0 0 0 0\n" + "RenderEvent 160 104 0 0 0 0 0\n" + "LeftButtonPressEvent 160 104 0 0 0 0 0\n" + "RenderEvent 160 104 0 0 0 0 0\n" + "MouseMoveEvent 161 104 0 0 0 0 0\n" + "RenderEvent 161 104 0 0 0 0 0\n" + "MouseMoveEvent 161 104 0 0 0 0 0\n" + "RenderEvent 161 104 0 0 0 0 0\n" + "MouseMoveEvent 161 105 0 0 0 0 0\n" + "RenderEvent 161 105 0 0 0 0 0\n" + "MouseMoveEvent 163 107 0 0 0 0 0\n" + "RenderEvent 163 107 0 0 0 0 0\n" + "MouseMoveEvent 165 109 0 0 0 0 0\n" + "RenderEvent 165 109 0 0 0 0 0\n" + "MouseMoveEvent 166 110 0 0 0 0 0\n" + "RenderEvent 166 110 0 0 0 0 0\n" + "MouseMoveEvent 167 110 0 0 0 0 0\n" + "RenderEvent 167 110 0 0 0 0 0\n" + "MouseMoveEvent 168 111 0 0 0 0 0\n" + "RenderEvent 168 111 0 0 0 0 0\n" + "MouseMoveEvent 169 112 0 0 0 0 0\n" + "RenderEvent 169 112 0 0 0 0 0\n" + "MouseMoveEvent 171 113 0 0 0 0 0\n" + "RenderEvent 171 113 0 0 0 0 0\n" + "MouseMoveEvent 178 115 0 0 0 0 0\n" + "RenderEvent 178 115 0 0 0 0 0\n" + "MouseMoveEvent 183 116 0 0 0 0 0\n" + "RenderEvent 183 116 0 0 0 0 0\n" + "MouseMoveEvent 187 118 0 0 0 0 0\n" + "RenderEvent 187 118 0 0 0 0 0\n" + "MouseMoveEvent 188 120 0 0 0 0 0\n" + "RenderEvent 188 120 0 0 0 0 0\n" + "MouseMoveEvent 189 121 0 0 0 0 0\n" + "RenderEvent 189 121 0 0 0 0 0\n" + "MouseMoveEvent 190 122 0 0 0 0 0\n" + "RenderEvent 190 122 0 0 0 0 0\n" + "MouseMoveEvent 190 122 0 0 0 0 0\n" + "RenderEvent 190 122 0 0 0 0 0\n" + "MouseMoveEvent 190 123 0 0 0 0 0\n" + "RenderEvent 190 123 0 0 0 0 0\n" + "MouseMoveEvent 191 124 0 0 0 0 0\n" + "RenderEvent 191 124 0 0 0 0 0\n" + "MouseMoveEvent 191 125 0 0 0 0 0\n" + "RenderEvent 191 125 0 0 0 0 0\n" + "MouseMoveEvent 192 125 0 0 0 0 0\n" + "RenderEvent 192 125 0 0 0 0 0\n" + "MouseMoveEvent 192 126 0 0 0 0 0\n" + "RenderEvent 192 126 0 0 0 0 0\n" + "MouseMoveEvent 192 127 0 0 0 0 0\n" + "RenderEvent 192 127 0 0 0 0 0\n" + "MouseMoveEvent 193 128 0 0 0 0 0\n" + "RenderEvent 193 128 0 0 0 0 0\n" + "MouseMoveEvent 194 128 0 0 0 0 0\n" + "RenderEvent 194 128 0 0 0 0 0\n" + "MouseMoveEvent 194 128 0 0 0 0 0\n" + "RenderEvent 194 128 0 0 0 0 0\n" + "MouseMoveEvent 194 128 0 0 0 0 0\n" + "RenderEvent 194 128 0 0 0 0 0\n" + "MouseMoveEvent 195 128 0 0 0 0 0\n" + "RenderEvent 195 128 0 0 0 0 0\n" + "MouseMoveEvent 195 129 0 0 0 0 0\n" + "RenderEvent 195 129 0 0 0 0 0\n" + "MouseMoveEvent 196 129 0 0 0 0 0\n" + "RenderEvent 196 129 0 0 0 0 0\n" + "MouseMoveEvent 196 129 0 0 0 0 0\n" + "RenderEvent 196 129 0 0 0 0 0\n" + "MouseMoveEvent 196 130 0 0 0 0 0\n" + "RenderEvent 196 130 0 0 0 0 0\n" + "MouseMoveEvent 197 130 0 0 0 0 0\n" + "RenderEvent 197 130 0 0 0 0 0\n" + "LeftButtonReleaseEvent 197 130 0 0 0 0 0\n" + "RenderEvent 197 130 0 0 0 0 0\n"; // This does the actual work: updates the vtkFrustum implicit function. // This in turn causes the pipeline to update and clip the object. @@ -176,6 +792,7 @@ int TestImplicitFrustumWidget(int vtkNotUsed(argc), char* vtkNotUsed(argv)[]) vtkNew<vtkClipPolyData> clipper; clipper->SetInputConnection(apd->GetOutputPort()); clipper->SetClipFunction(frustum); + clipper->InsideOutOn(); vtkNew<vtkPolyDataMapper> selectMapper; selectMapper->SetInputConnection(clipper->GetOutputPort()); @@ -200,6 +817,9 @@ int TestImplicitFrustumWidget(int vtkNotUsed(argc), char* vtkNotUsed(argv)[]) vtkNew<vtkRenderWindowInteractor> interactor; renWin->SetInteractor(interactor); + renWin->Render(); + renderer->ResetCamera(); + // The SetInteractor method is how 3D widgets are associated with the render // window interactor. Internally, SetInteractor sets up a bunch of callbacks // using the Command/Observer mechanism (AddObserver()). @@ -210,6 +830,9 @@ int TestImplicitFrustumWidget(int vtkNotUsed(argc), char* vtkNotUsed(argv)[]) vtkNew<vtkImplicitFrustumRepresentation> rep; rep->SetPlaceFactor(1.25); rep->PlaceWidget(glyph->GetOutput()->GetBounds()); + // position origin outside of displayed geometry, for easier interactions + rep->SetOrigin(-0.8, -0.8, 0); + rep->SetOrientation(0, 0, -45); vtkNew<vtkImplicitFrustumWidget> frustumWidget; frustumWidget->SetInteractor(interactor); @@ -225,7 +848,6 @@ int TestImplicitFrustumWidget(int vtkNotUsed(argc), char* vtkNotUsed(argv)[]) recorder->Record(); interactor->Initialize(); - renWin->Render(); recorder->On(); interactor->Start(); @@ -238,6 +860,8 @@ int TestImplicitFrustumWidget(int vtkNotUsed(argc), char* vtkNotUsed(argv)[]) // render the image interactor->Initialize(); renWin->Render(); + // uncomment to see cursor + // recorder->ShowCursorOn(); recorder->Play(); // Remove the observers so we can go interactive. Without this the "-I" diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestHandleWidget.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestHandleWidget.png.sha512 index 5dd756a84b62ea15ffa5d2848b8031b1e3e07651..5628108698849660c0734a6737074092fd3882ba 100644 --- a/Interaction/Widgets/Testing/Data/Baseline/TestHandleWidget.png.sha512 +++ b/Interaction/Widgets/Testing/Data/Baseline/TestHandleWidget.png.sha512 @@ -1 +1 @@ -23ecbcc685e765cd2c069e1880548f6dc95f426884cb2cc408ec1f9fb365211a546a79c34a8362f33ecd1f063ccd839bed7abb17749ccddcd471e51c2ba7fb45 +711643268ba8489d39a295623f21d57baf84d91389b4dea2a43e2d3c40b07b27b0ac760c224ae958592a6cf5d480be6e5410cf252d42b6251dc8d7f34d17cac9 diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitAnnulusWidget.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitAnnulusWidget.png.sha512 index c2d97cf22a76fc76e24ade2d7136e3523433204f..285d85c0181342624049e17e4653088ddc4d7e1f 100644 --- a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitAnnulusWidget.png.sha512 +++ b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitAnnulusWidget.png.sha512 @@ -1 +1 @@ -d08529a11ab5a873120a9a09b93708821b54b315160f969fb98a78f63bea656556425efd311a583de35989350866f70f4c52d594dae3983f3c7ac30a65551613 +aee3084a490c54c62946717dfb98de553ef8d1a955881de67481845f50a6b91d2e57eecbfc7d4f952cc58e71dd1d73823fee260c3db33b2d0f1453c7e52e7eb0 diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitConeWidget.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitConeWidget.png.sha512 index 007badb037b14a869736d966f89ab5f4156cd9fe..cbc93003712ac629cca6f43a08e349d80eb0c55b 100644 --- a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitConeWidget.png.sha512 +++ b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitConeWidget.png.sha512 @@ -1 +1 @@ -8a038446462fa9dc1cf8e5cd0aabbc423c746786e84dbb279c6bf1e29ea96105910b07230bba08628d73af52b4347d5b16ba1d9e6a8b801195240968eea8662d +33e39faa6c4272218e6f71a01f6e5d6256430131c5099e929c63a701ae745e9b18d6a4a7313d080f5a37c5d2e8a9cd2e0b0a473b034e459fb1ef710d934b46d1 diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitCylinderWidget.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitCylinderWidget.png.sha512 index 783f1911d91ad00ffd7ee46528ff2534d6efcdbe..f53f20224b219dadbd21ab885917a147fb3925ad 100644 --- a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitCylinderWidget.png.sha512 +++ b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitCylinderWidget.png.sha512 @@ -1 +1 @@ -c0882bb540b371ddaf85bba704df834c165770ab43ea2bd9073a2c6d0f41cc6e0d9d8944ca4d2cd8883a1e4a8e9dad7733dc591a0a160a13ac769b40f3d499e5 +716430f3245a8696d1c85cd54d322dce51d6e74424aac10f6ee5c4806366277b87dd60e3b96f1c76cd597cedf73f43c32422dafe8dd429eeeaa052aa194768d8 diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitFrustumWidget.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitFrustumWidget.png.sha512 index 4b3e9e7bdfd415c0660a76e461eb54f54c4fc12b..e20787b0171b58c3117a4fd13bbfe7fb2dbd7030 100644 --- a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitFrustumWidget.png.sha512 +++ b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitFrustumWidget.png.sha512 @@ -1 +1 @@ -6ea0d749d77449e61e6dbfd3d1a5a78f9b89429ca014dbf5cd789873870fec0876b8e5cbf34a002483820d43cd5cd9a0f98252feaa4f2c9265b487f5664924b6 +85f5bcc6b046e215922d151bbd463f4bfe7ff73e5692ec99e56275c24de933f4ee7d90225f572833fc6086f8150ab7c9cd50c035bbe2bb6fcc844de5f11d7ec4 diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitPlaneWidget2b.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitPlaneWidget2b.png.sha512 index 595819f07e1a4a431b5627ea761fd0d58bdf832e..1c13e7a8659f6730cad038778c2ba1aab9a3a05c 100644 --- a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitPlaneWidget2b.png.sha512 +++ b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitPlaneWidget2b.png.sha512 @@ -1 +1 @@ -e99d8e60135832acaa5bbb5ef2d76655ec1278bc44589a707f1f7fb623359de2be13b5a7e2752a9c0b778acbd00951aecac3c2c84bb7a3febe57d2e5ee794d94 +d11b06f262aebf7c291fd1076e9d49161f498524bdd1b1984e6497e4a31d16690a16b5873d240e6565f56652fea0045fbd6723058af8502f5c3508e863185b9b diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitPlaneWidget2b_1.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitPlaneWidget2b_1.png.sha512 deleted file mode 100644 index 70b2537ac6404b010adc227c851e26cdee07d423..0000000000000000000000000000000000000000 --- a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitPlaneWidget2b_1.png.sha512 +++ /dev/null @@ -1 +0,0 @@ -ce2bf45a73f8db2badfa109e0f4fa093ed75fb336ebbf8aee1d8c26c0086a4431194c6dd6576fb7d14e29b6e000450de90ca277d36bd6d3aefa250da8ba88db6 diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitPlaneWidget2b_2.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestImplicitPlaneWidget2b_2.png.sha512 deleted file mode 100644 index 4165b80fff5b0d9766b71bc215ceedae5fd98149..0000000000000000000000000000000000000000 --- a/Interaction/Widgets/Testing/Data/Baseline/TestImplicitPlaneWidget2b_2.png.sha512 +++ /dev/null @@ -1 +0,0 @@ -4f2b31591f5d76336990aee75629875b397422683a15eadfd5ac91e1976f7d7277b6ab0b50fa409d3b6cd5ae3a9f20315e52a92a9bf814a63b90f3808f64ff53 diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestPickingManagerSeedWidget.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestPickingManagerSeedWidget.png.sha512 index 6c5ef5bc54a024092ee2b46077c5ff4f74acca02..f45f7e3084f16ee7a5908e690979cf2d947a1989 100644 --- a/Interaction/Widgets/Testing/Data/Baseline/TestPickingManagerSeedWidget.png.sha512 +++ b/Interaction/Widgets/Testing/Data/Baseline/TestPickingManagerSeedWidget.png.sha512 @@ -1 +1 @@ -9edf4fbdd04b3b9369eb69f3924ee814d607551eef8b085a7e5e3588851fe743578916c06acf5b12559b13d700675a3ef528677990e4618d4facc88c169d6e1d +be7528a79ebcc8e327821ee133b06d27e8a232bd0fc2109f36c3d18a1d4e674732586af1a33da9096b55258244fec181c6c4596455d58f202d6a4badc658991c diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget.png.sha512 index 74c4ff1ffd0e155a8834241c836ecca15cc2b1a7..d36fe84d29554e468a5aa337576ea97e44081778 100644 --- a/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget.png.sha512 +++ b/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget.png.sha512 @@ -1 +1 @@ -d885b2142e3c71478dcca62f6f53dd6580dfd1186829512c2f91d0835358b5b56d57c2fe3aedda3e94003a6c18a0817461d59c2e34fe02b3621f83f62a413a30 +95d92543131a296e15235031c4c74bcfa116fe9a143066e8ff2913fe82b24dcd6fe1bbc013fee8d57221b14705e33922762cdef78c27ccbe82d7c4c3c2537a98 diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget_1.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget_1.png.sha512 deleted file mode 100644 index 6ca42290c1cc73b21da8aac8202b967c7f5cf5ad..0000000000000000000000000000000000000000 --- a/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget_1.png.sha512 +++ /dev/null @@ -1 +0,0 @@ -f82b55c992faca4b7b1080d4a0523418223382de63f8d18b4288c131bd3c8b59c7cb3380c0cdbcdad42a212bd7403a3150fbf7a9278e124637e2750ed60b76e2 diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget_2.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget_2.png.sha512 deleted file mode 100644 index 3d38023f5d341655a13dded33569e81035b0de9b..0000000000000000000000000000000000000000 --- a/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget_2.png.sha512 +++ /dev/null @@ -1 +0,0 @@ -f5e521851867c56bcf565595177c2ccc386e814e4d8e9f570fb6edafc85d2aa0706cd1254eeee02c93a3b75df6d999749e6c8911e75f81cd71cfc9e64685cff5 diff --git a/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget_3.png.sha512 b/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget_3.png.sha512 deleted file mode 100644 index 6f71c806eb47957e94391d3e929232087bb4805e..0000000000000000000000000000000000000000 --- a/Interaction/Widgets/Testing/Data/Baseline/TestProgressBarWidget_3.png.sha512 +++ /dev/null @@ -1 +0,0 @@ -a8af43d36e57bb197097987127a39c4f7fdfb0ef0b75bd7d8a8420944cea127a70dbbcbf8d5f1dbd0a73457e713fa1ab77ff3df9f6281886b8f8890506df02d9 diff --git a/Interaction/Widgets/vtkBoundedWidgetRepresentation.cxx b/Interaction/Widgets/vtkBoundedWidgetRepresentation.cxx index 0e1b552a237732b91fc478d75db247c660a719a2..009e77a29db31c2ce80d4616e59e410a8da7a792 100644 --- a/Interaction/Widgets/vtkBoundedWidgetRepresentation.cxx +++ b/Interaction/Widgets/vtkBoundedWidgetRepresentation.cxx @@ -107,9 +107,13 @@ void vtkBoundedWidgetRepresentation::UpdateCenterAndBounds(double center[6]) if (this->GetConstrainToWidgetBounds()) { - // make sure that widget bounds still englobe center. - vtkBoundingBox centerBox(center, std::numeric_limits<double>::epsilon()); - widgetBox.AddBox(centerBox); + // move box to still contains center. + if (!widgetBox.ContainsPoint(center)) + { + double distance[3]; + widgetBox.GetDistance(center, distance); + widgetBox.Translate(distance); + } } } diff --git a/Interaction/Widgets/vtkImplicitFrustumRepresentation.cxx b/Interaction/Widgets/vtkImplicitFrustumRepresentation.cxx index 3ec7f36c610e9471472f36c88b83eccd06e8dbc9..6531166da38d564d7b1b38fcdcc71266d73e6542 100644 --- a/Interaction/Widgets/vtkImplicitFrustumRepresentation.cxx +++ b/Interaction/Widgets/vtkImplicitFrustumRepresentation.cxx @@ -27,6 +27,7 @@ #include "vtkTransform.h" #include "vtkTubeFilter.h" #include "vtkVector.h" +#include <cmath> VTK_ABI_NAMESPACE_BEGIN vtkStandardNewMacro(vtkImplicitFrustumRepresentation); @@ -805,65 +806,30 @@ void vtkImplicitFrustumRepresentation::UpdateFrustumTransform() //------------------------------------------------------------------------------ void vtkImplicitFrustumRepresentation::AdjustHorizontalAngle( - const vtkVector3d& p1, const vtkVector3d& p2) + const vtkVector3d& vtkNotUsed(previous), const vtkVector3d& current) { - vtkVector3d delta = p2 - p1; - double dot = delta.Dot(this->GetRightAxis()); + vtkVector3d edge = current - this->Origin; + double horizontalDistance = edge.Dot(this->GetRightAxis()); + horizontalDistance = std::fabs(horizontalDistance); + const double length = edge.Norm(); - /// @note: This uses a heuristic and takes into account the widget length to achieve similar - // results independently of the data bounds - // A better approach would involve calculating the angle so that the edge handle spaps to the - // mouse position - const double angleManipulationFactor = 8.; - double deltaAngle = delta.Norm() * angleManipulationFactor / this->Length; + double angle = std::asin(horizontalDistance / length); - if (dot == 0.) - { - return; - } - - if (dot < 0.) - { - deltaAngle = -deltaAngle; - } - - if (this->ActiveEdgeHandle == FrustumFace::Left) - { - deltaAngle = -deltaAngle; - } - - double currentAngle = this->Frustum->GetHorizontalAngle(); - this->Frustum->SetHorizontalAngle(currentAngle + deltaAngle); + this->SetHorizontalAngle(vtkMath::DegreesFromRadians(angle)); } //------------------------------------------------------------------------------ void vtkImplicitFrustumRepresentation::AdjustVerticalAngle( - const vtkVector3d& p1, const vtkVector3d& p2) + const vtkVector3d& vtkNotUsed(p1), const vtkVector3d& current) { + vtkVector3d edge = current - this->Origin; + double verticalDistance = edge.Dot(this->GetUpAxis()); + verticalDistance = std::fabs(verticalDistance); + const double length = edge.Norm(); - vtkVector3d delta = p2 - p1; - double dot = delta.Dot(this->GetUpAxis()); - - const double angleManipulationFactor = 8.; - double deltaAngle = delta.Norm() * angleManipulationFactor / this->Length; - - if (dot == 0.) - { - return; - } - - if (dot < 0.) - { - deltaAngle = -deltaAngle; - } - - if (this->ActiveEdgeHandle == FrustumFace::Bottom) - { - deltaAngle = -deltaAngle; - } + double angle = std::asin(verticalDistance / length); - double currentAngle = this->Frustum->GetVerticalAngle(); - this->Frustum->SetVerticalAngle(currentAngle + deltaAngle); + this->SetVerticalAngle(vtkMath::DegreesFromRadians(angle)); } //------------------------------------------------------------------------------ diff --git a/Rendering/Annotation/Testing/Cxx/CMakeLists.txt b/Rendering/Annotation/Testing/Cxx/CMakeLists.txt index 2cc3da3683e0969f843eb2e826c6c6d538ba079f..5f76033aac10f1b7a9e37b23ea41dbd3a1d051e9 100644 --- a/Rendering/Annotation/Testing/Cxx/CMakeLists.txt +++ b/Rendering/Annotation/Testing/Cxx/CMakeLists.txt @@ -37,7 +37,7 @@ vtk_add_test_cxx(vtkRenderingAnnotationCxxTests tests TestPolarAxes.cxx TestPolarAxes2D.cxx TestPolarAxes2DDefault.cxx - TestRadialGrid2D.cxx + TestRadialGrid2D.cxx,LOOSE_VALID TestScalarBar.cxx TestScalarBarAboveBelow.cxx TestSpiderPlotActor.cxx diff --git a/Rendering/Annotation/Testing/Data/Baseline/TestRadialGrid2D.png.sha512 b/Rendering/Annotation/Testing/Data/Baseline/TestRadialGrid2D.png.sha512 index e7bed99e5117966c2e5b4351ed4485bb7e4aa790..34bcae120e3ae21f78a8c9af865d2a8b131617b6 100644 --- a/Rendering/Annotation/Testing/Data/Baseline/TestRadialGrid2D.png.sha512 +++ b/Rendering/Annotation/Testing/Data/Baseline/TestRadialGrid2D.png.sha512 @@ -1 +1 @@ -10f045ff77101fdd404165b7f9986693b8ef7d7027a09260fb49ff5213388113e6a428b5f3eb37fe532797f4dc59870521759542542bec0a9f1b84c7f60be951 +32fb27a36317ffa2d56617978064c6a1c4b18412cc91de3fe2967bad9d09e3c82f52cca372966f592e1c7064d947f933f731db995d224fcb0a092b6daab63188 diff --git a/Rendering/Core/vtkInteractorEventRecorder.cxx b/Rendering/Core/vtkInteractorEventRecorder.cxx index 3062d3016f2e370a609281f15bb1adb437aab0ed..869e36d6ca63778bffad2eb1bffd769dece18c83 100644 --- a/Rendering/Core/vtkInteractorEventRecorder.cxx +++ b/Rendering/Core/vtkInteractorEventRecorder.cxx @@ -2,9 +2,14 @@ // SPDX-License-Identifier: BSD-3-Clause #include "vtkInteractorEventRecorder.h" +#include "vtkActor2D.h" #include "vtkCallbackCommand.h" #include "vtkObjectFactory.h" +#include "vtkPolyDataMapper2D.h" +#include "vtkRegularPolygonSource.h" +#include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" +#include "vtkRendererCollection.h" #include "vtkStringArray.h" #include <algorithm> @@ -42,6 +47,12 @@ vtkInteractorEventRecorder::vtkInteractorEventRecorder() this->ReadFromInputString = 0; this->InputString = nullptr; + + vtkNew<vtkRegularPolygonSource> disk; + disk->SetRadius(5); + vtkNew<vtkPolyDataMapper2D> mapper; + mapper->SetInputConnection(disk->GetOutputPort()); + this->CursorActor->SetMapper(mapper); } //------------------------------------------------------------------------------ @@ -190,6 +201,14 @@ void vtkInteractorEventRecorder::Play() } } + if (this->ShowCursor) + { + vtkRenderWindow* win = this->Interactor->GetRenderWindow(); + vtkRendererCollection* collec = win->GetRenderers(); + vtkRenderer* ren = collec->GetFirstRenderer(); + ren->AddActor(this->CursorActor); + } + vtkDebugMacro(<< "Playing"); this->State = vtkInteractorEventRecorder::Playing; @@ -199,6 +218,14 @@ void vtkInteractorEventRecorder::Play() { this->ReadEvent(line); } + + if (this->ShowCursor) + { + vtkRenderWindow* win = this->Interactor->GetRenderWindow(); + vtkRendererCollection* collec = win->GetRenderers(); + vtkRenderer* ren = collec->GetFirstRenderer(); + ren->RemoveActor(this->CursorActor); + } } this->State = vtkInteractorEventRecorder::Start; @@ -475,6 +502,11 @@ void vtkInteractorEventRecorder::ReadEvent(const std::string& line) } } + if (this->ShowCursor) + { + this->CursorActor->SetPosition(pos[0], pos[1]); + } + this->Interactor->SetEventPosition(pos); this->Interactor->SetControlKey(ctrlKey); this->Interactor->SetShiftKey(shiftKey); diff --git a/Rendering/Core/vtkInteractorEventRecorder.h b/Rendering/Core/vtkInteractorEventRecorder.h index 83fbbc4608840ba329d18087d94ede60c288fdb8..38287ba0e4e5537fe791ba88df6077d40ef90634 100644 --- a/Rendering/Core/vtkInteractorEventRecorder.h +++ b/Rendering/Core/vtkInteractorEventRecorder.h @@ -32,7 +32,11 @@ #include "vtkInteractorObserver.h" #include "vtkRenderingCoreModule.h" // For export macro +#include "vtkNew.h" // vtkNew + VTK_ABI_NAMESPACE_BEGIN + +class vtkActor2D; class vtkStringArray; // The superclass that all commands should be subclasses of @@ -111,6 +115,19 @@ public: vtkGetStringMacro(InputString); ///@} + ///@{ + /** + * Enable the display of a cursor at the played event position + * during `Play()` method. + * Cursor is hidden again at the end of the `Play()`, so last render + * is not impacted (baselines are preserved). + * Default is Off. + */ + vtkSetMacro(ShowCursor, bool); + vtkGetMacro(ShowCursor, bool); + vtkBooleanMacro(ShowCursor, bool); + ///@} + protected: vtkInteractorEventRecorder(); ~vtkInteractorEventRecorder() override; @@ -168,6 +185,9 @@ protected: private: vtkInteractorEventRecorder(const vtkInteractorEventRecorder&) = delete; void operator=(const vtkInteractorEventRecorder&) = delete; + + bool ShowCursor = false; + vtkNew<vtkActor2D> CursorActor; }; VTK_ABI_NAMESPACE_END diff --git a/Rendering/FreeType/Testing/Cxx/CMakeLists.txt b/Rendering/FreeType/Testing/Cxx/CMakeLists.txt index ec747014351e7b9cf708d2afe406c7b2e07bfe66..c2835464d47b41739eb1ab02ddadf4c1e0ef0501 100644 --- a/Rendering/FreeType/Testing/Cxx/CMakeLists.txt +++ b/Rendering/FreeType/Testing/Cxx/CMakeLists.txt @@ -4,13 +4,13 @@ set(TestMathTextFreeTypeTextRendererNoMath_ARGS DATA{../Data/Fonts/DejaVuSans.ttf} ) vtk_add_test_cxx(vtkRenderingFreeTypeCxxTests tests - TestBillboardTextActor3D.cxx + TestBillboardTextActor3D.cxx,LOOSE_VALID TestFTStringToPath.cxx TestFlagpoleLabel.cxx TestFreeTypeTextMapperNoMath.cxx TestFreeTypeTools.cxx,NO_VALID TestMathTextFreeTypeTextRendererNoMath.cxx - TestTextActor.cxx + TestTextActor.cxx,LOOSE_VALID TestTextActorTileScaling.cxx TestTextActor3D.cxx,LOOSE_VALID TestTextActorAlphaBlending.cxx,LOOSE_VALID @@ -18,7 +18,7 @@ vtk_add_test_cxx(vtkRenderingFreeTypeCxxTests tests TestTextActor3DAlphaBlending.cxx TestTextActor3DDepthPeeling.cxx TestTextActorScaleModeProp.cxx - TestTextMapper.cxx + TestTextMapper.cxx,LOOSE_VALID TestTextOpaquePass.cxx ) diff --git a/Rendering/FreeType/Testing/Data/Baseline/TestFTStringToPath.png.sha512 b/Rendering/FreeType/Testing/Data/Baseline/TestFTStringToPath.png.sha512 index 775c69a5b288759a9af0aba15a8867d6ee38351e..6d39bfa254b5635b633e39f1c83418361bfe1385 100644 --- a/Rendering/FreeType/Testing/Data/Baseline/TestFTStringToPath.png.sha512 +++ b/Rendering/FreeType/Testing/Data/Baseline/TestFTStringToPath.png.sha512 @@ -1 +1 @@ -5887ec8b032d7187bffbcdd82f0f90b69377865da695c7194e8e1458be8bcbfdd32bcc9a40724c05f3d05bbbdc9728f7e329d87437c4ece5dce1558523ebf517 +daaf486f5f37f349816b5d019673b235842721421007e7e1c4fc624091f6a652d686e0a07050e8bf44a590f281b0091acffd620c8abce5f7a95d3bc0f0427594 diff --git a/Rendering/Matplotlib/Testing/Cxx/CMakeLists.txt b/Rendering/Matplotlib/Testing/Cxx/CMakeLists.txt index 9858bd35ad4855a6931575006fa2ca326ace8b54..3d072f5a6c8182b66b54e95feec4a8e5b0010888 100644 --- a/Rendering/Matplotlib/Testing/Cxx/CMakeLists.txt +++ b/Rendering/Matplotlib/Testing/Cxx/CMakeLists.txt @@ -12,7 +12,7 @@ if(MATPLOTLIB_FOUND) TestMathTextActor3D.cxx TestRenderString.cxx TestStringToPath.cxx - TestIndexedLookupScalarBar.cxx + TestIndexedLookupScalarBar.cxx,LOOSE_VALID TestScalarBarCombinatorics.cxx ) diff --git a/Rendering/OpenGL2/Testing/Data/Baseline/TestPBRIrradianceHDR.png.sha512 b/Rendering/OpenGL2/Testing/Data/Baseline/TestPBRIrradianceHDR.png.sha512 index 3d73766b783ac465b3f26842da52d1500a8718b4..56ee2e08c64e1dfec8e3b5b3bfa808a2c9d31e84 100644 --- a/Rendering/OpenGL2/Testing/Data/Baseline/TestPBRIrradianceHDR.png.sha512 +++ b/Rendering/OpenGL2/Testing/Data/Baseline/TestPBRIrradianceHDR.png.sha512 @@ -1 +1 @@ -5205c0355c973d52f90e5a28f53aaa9284896c87272d46f65337398559cd8e6b4b67a3d20d85f1a52259a6c822edd3f76c1b6d49ee4e395849e71df30416a24b +8e3116a176b37f4dd421b631505d69654fabf64e58efcecb815d27ba7d882b1765ea5b9360088823d766fa931d5c24a595c265342af9971f2f67329a2603f1cc diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMultiBlock.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMultiBlock.png.sha512 index d89f161599e1ede5c38d46f35990cc3f1cf6a9c1..8431e969d02cd66f4e859f89416670b786701274 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMultiBlock.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMultiBlock.png.sha512 @@ -1 +1 @@ -b5b0a5d2970fe1914063a6b71a8b3e3b47b0a8c7c91d87c530c4fa59123eccd29dd457ed6389f3cbe4f8c90058e8e41093ff559d83f5af7d134b4228cfd892b4 +f82ed88a6f3aa28573ef175aaf656cdbfccffe2ca1801b50e718eacb5a69c71537bb48cd174262a2100646d24a796cea9e44f324e9fb12ddbb4da433af2d0111 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestGPUVolumeRayCastMapper.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestGPUVolumeRayCastMapper.png.sha512 index 3343e099c1fd45da685ab14f75d7c5fb101508a4..6d59f7bcb5eee6e391227e615ae3a1fa09746bdb 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestGPUVolumeRayCastMapper.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestGPUVolumeRayCastMapper.png.sha512 @@ -1 +1 @@ -e9bc8f1efd66a9abb45a365fe59d8734100c55abdd2c056051312959f17ca27369bb9dae816803d83d23b5f9b0c7b424e3e1516977a846504746307c924951d8 +d8b9d09c16e515cde0c6837d536e0cae94449ebe2d39d03e646cec2374dde8b5295b539b97630a64ae93c30122902a805b52505e47634a90224bbbfd2e614fd3 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayAmbient.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayAmbient.png.sha512 index 2787adfcb724739899819fcdc321c307de14e811..27108fe19a791aa6f481a47eca4288f5e05dd087 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayAmbient.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayAmbient.png.sha512 @@ -1 +1 @@ -3aa82be296aeb59198ced95daab459ff6df167253ad80ba1be71536f369ea5102ba3f0d60b72f499a8e1bf68ab73ef23fb27f842c922dc30f537d75dd2d40368 +e15e18e6ddd7a2d7aa524c1519cc25d789d98e67a8c123167fdedb95d483ceb01ae9195f1a04adf348d25fd130d2feb7a326c3dcca33db99e6705596dd21e1ae diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayCompositePolyDataMapper2.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayCompositePolyDataMapper2.png.sha512 index 81468664ee938c131903d930a8cf3b2f60bdcce9..3329d5e652db406548aaca8a09df4d6730906acb 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayCompositePolyDataMapper2.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayCompositePolyDataMapper2.png.sha512 @@ -1 +1 @@ -7912761e1f1d7fcf9eb80cdfa41c865b7b0765be7277ef6ae5b194ee9007cc684a84ebe56918d76fcfdb86e96cf6aaff5d451a6534b9c8bfea81e6bf6e34f48c +60a61aab93d3d333a0e43b5f19532c82da65dd23e3f906c436aeedad32e50425547ed85c526c75f5c43d8707349804e7fb5717a9df3a7642934f8c08cbd6cb07 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayImplicits.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayImplicits.png.sha512 index e5bc85e1ce3c774b86d657d8107ed367d20ebdc9..839bb003d49830e3a62d9797045dcd80e0342e4c 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayImplicits.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayImplicits.png.sha512 @@ -1 +1 @@ -dbb841b05546fe97f504e38f4c78b56a1688a2dbf71f169707f70bcc9def9bf4757ec587ec7c0db8e3b98e176798c1d5ee7196d88944d5c0c2f111738c683f84 +9d1d6a6531356ba9e953bf23477403c9f5c9dfb8189b9b6250753a97c95b8deb90953f97b9889a51d7390def5948d4b811617eb504eec315911193635f80fc07 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayIsosurface.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayIsosurface.png.sha512 index 08e4550f3c3199cba43062a8467c96d206b2f3c8..14ef054417b347ef4721cd4f6fe283084a9ce70f 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayIsosurface.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayIsosurface.png.sha512 @@ -1 +1 @@ -fbe8a5dab65f39bd982cd1fc5cdc525b356f787d4bb0b61c0ccb8214fa0a2ded91bbd6c669431a866987e8e03b16a955b95afad335e3d5467b4e36ab4462829c +ef77dd550682bd533e6f7e759f16660378562a5959822e6272b8cd36194402e4493cdc9dc7b992e69e28ed52a1d6ca329f2c5bb34296f9658532f9eb5714cfab diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayLights.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayLights.png.sha512 index 981d4b64c0872362889d444c040d5e5db9d85f31..62913c1763aad37a94ff6dce68edc366a85fa5f1 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayLights.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayLights.png.sha512 @@ -1 +1 @@ -d4d1bc4217e554da3ae3116772574d34e9d717bb1c068198729ebd971ba81eca4132ef819f44db17a790630afbafb0a5d4fb1d6033e7698c0ecd77f82932f0ab +a78a8e508ab22a8ff69ec27549b25d84d7625ced1ccdcf19510a825962a200d2841671b07e19629dca1035c63e2ac7d0ea19521de4c912cbfdae88a5e1ccaa0e diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTiling.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTiling.png.sha512 index e35e1225300d22d5fe1cbea3c3154ec28781e0fe..b2774ca5146560def9aa5c2c649e4b217fc07787 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTiling.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTiling.png.sha512 @@ -1 +1 @@ -e7ed435445e9c6c8c55bc411027261b493994a9795a61dee45f4a9622516565d89c982f41fd89adee0dca975cdde6d020601a1a8b8c76e77d5e49844332e2a44 +62aee5252c1c8cfab150764afae90c6351a3a2543f80275d9b914083e4bbeb26af43a094e756df5c4d09c6517c17ca70de3506594941dac84d90c75645125b62 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerBackground.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerBackground.png.sha512 index e9839b5173b3fc41bffe08cfeb694000d031f6ba..4cbd51bc856ba34748ea8f83bf3eb5c35e8d8e27 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerBackground.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerBackground.png.sha512 @@ -1 +1 @@ -24040ea56d54348dae46b3fc018ab41d81168edb29f21e4a43571ee5902c4f9cf3de649c4168b092830abdb8869e4cc108910a31dd4c88c0ed6b84ea528c6513 +1e9cd93ed121903dcf6c8837d15d9da1efeb58948376b625e2fe7e9a65c72e635b5a184e524fd5e88743ead7de672929f09505aa74e7d27ec1d5733ff9a6e029 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerShadows.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerShadows.png.sha512 index c523c67265926d6995ff8ebbef736421e79e6d3e..030d75fe159bc22a327ec679968d1790d58c591f 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerShadows.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerShadows.png.sha512 @@ -1 +1 @@ -4daa84ea4b987b3bb04672222c8d48a99da1f0ae1baf54f789e1d5c04aa2476a1a9d00916ac9adbbcaf620e5f42085516a967550e01938dbd0d2e860bddaab99 +ff29c29891eb05f679960ae7ca3324e287808f85f4786fac4f182dae2491b071c563298c58f919de67538b1b00a7d577c9957a24c2a558fbb9b4ddc0cb1a9fd4 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestRayTracedMolecules.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestRayTracedMolecules.png.sha512 index 13f8ff6907352a37de2bbb1017587047b62c350a..52342f22f8f93d7a41c2f8f798be42859f23224c 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestRayTracedMolecules.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestRayTracedMolecules.png.sha512 @@ -1 +1 @@ -63e62f0a4103b31ebd06e667a60ae53857dee55ef26e5cbe0db43d89ec627211f9d6638662406c8a86e2ba9c32ce6032f6680aa99c1f88ac6b6b37a45b552455 +29548b7ba264a0e846a0362ff64d4026f6f2f28cf0147ce8e78ce1f6bd819316cec023c305e6fdc9c8c1913afdfbb13abb812c660ca14d6e9fb4cdfcfe2f18a5 diff --git a/Rendering/Volume/Testing/Data/Baseline/TestGPURayCastVolumeUpdate.png.sha512 b/Rendering/Volume/Testing/Data/Baseline/TestGPURayCastVolumeUpdate.png.sha512 index a0513c1f8706ae21183e7314b9f94daf64efffbb..df2b458d3365f69ba19795463e1ec42c6524b614 100644 --- a/Rendering/Volume/Testing/Data/Baseline/TestGPURayCastVolumeUpdate.png.sha512 +++ b/Rendering/Volume/Testing/Data/Baseline/TestGPURayCastVolumeUpdate.png.sha512 @@ -1 +1 @@ -e0712eb78a4fd0351fbb922a67b4125f5d8339be88530ccadfd9c5f3e48ecac0bc6e5672d980932fe6c8dd014581196cd9c95d6aa999ec5811a296e7d415f09c +d9664d87f42045ac782710efc00e805eac28066cee00fc821538b92d2e8d2f374e2c9b7ae830979295fc568092e17a177278fd3ce9bcefa5a796d628bfa21f93 diff --git a/Rendering/Volume/Testing/Data/Baseline/TestGPURayCastVolumeUpdate_1.png.sha512 b/Rendering/Volume/Testing/Data/Baseline/TestGPURayCastVolumeUpdate_1.png.sha512 deleted file mode 100644 index 987432286fd6ce81cc0363c7b7a8150fa829fb5d..0000000000000000000000000000000000000000 --- a/Rendering/Volume/Testing/Data/Baseline/TestGPURayCastVolumeUpdate_1.png.sha512 +++ /dev/null @@ -1 +0,0 @@ -08f9a9750f89d245aaa25ee9536b0b7a38feafd2f4da6e207e15b67d452a21619ac83a80247b4eeebb36b7dbc0e4dcc348fd169d5dd107d86ab5756224f9382d diff --git a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering.png.sha512 b/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering.png.sha512 index 0e5885fd6b3b7ec7d6e824a529fca9c0b64b93bf..2f443f95b008f3bc041bfb5e8d510005bcfc38fc 100644 --- a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering.png.sha512 +++ b/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering.png.sha512 @@ -1 +1 @@ -30f0f805435ab24890ba2f4231e7d29d74f07db4f71c963e609dd85dbf86c173dce066827339b2e77cd95266657cdf824d45c53ecab2d7180a6e634209cf5d9a +e229112e8e40ce7514bfbdf34367c5a32cf85c539ec9e643ad3700cdb806471136b8a73d3e3ffdd330dd7051743f58a4dd1b72da738b2e74e0c9c79ee8f782e2 diff --git a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_1.png.sha512 b/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_1.png.sha512 deleted file mode 100644 index 1599bcbe06267b34df0c9dc4220b78d6968feccb..0000000000000000000000000000000000000000 --- a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_1.png.sha512 +++ /dev/null @@ -1 +0,0 @@ -c37b139a4cc989e22ee7c7933e9ec34021cef496ffb8ddbad7ed46a68ff4b8e50402160148393628b039d2297defa98fec4a54b85f1714e0abca90e42059bc70 diff --git a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_2.png.sha512 b/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_2.png.sha512 deleted file mode 100644 index 609413bbe908616fffabcd0041e6eac1ca9f4671..0000000000000000000000000000000000000000 --- a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_2.png.sha512 +++ /dev/null @@ -1 +0,0 @@ -10664834a98d12cab003927f1047e6602f15d5a0d6d9befec844dfd9f0e73a16e66c07a5de57071936abe4acac627b8786f9207c1f2cea2734db003e3c154a63 diff --git a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_3.png.sha512 b/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_3.png.sha512 deleted file mode 100644 index 537cfadc051207d02c38575ba1cf1adc266fe993..0000000000000000000000000000000000000000 --- a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_3.png.sha512 +++ /dev/null @@ -1 +0,0 @@ -0abcd32f303e476a24fc1589f31548ab17f4381f76a7e7fde23108234d422975e96e39f71b64fbd6728586d8821cc65fa75aee4baa65fd1211c8a1be6d451f0e diff --git a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_4.png.sha512 b/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_4.png.sha512 deleted file mode 100644 index 1ae3971ef3315ae079974d56dd4e7c4c691db370..0000000000000000000000000000000000000000 --- a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastJittering_4.png.sha512 +++ /dev/null @@ -1 +0,0 @@ -07a0e460154e43611a86a5e36f53afd87507a14fa9550273a34255f93cc7bcd5e94d2168de608ac6f2f8e3f15ad44c3134e92a75d46d515b66f12990fab928c0 diff --git a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastToggleJittering.png.sha512 b/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastToggleJittering.png.sha512 index b2cfdbad9f9bdc336720cf6378f0486b2403b08d..44287f0e4bee9fe7d0030858311fd4e0ccaa373f 100644 --- a/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastToggleJittering.png.sha512 +++ b/Rendering/VolumeOpenGL2/Testing/Data/Baseline/TestGPURayCastToggleJittering.png.sha512 @@ -1 +1 @@ -f44a41afa3714c819f194b211c65cd491bf3cb36f0943989c9bcee8cbe0dcb6b7567e53605e392347f820c458321ca89b5899e73fc30decfd24d62202f5aec44 +21d288e74e70d66308295bf965e5d794e6c4a55fbe7faff65c3df454e83b40c77fd6300fa07013ce1d70ad477a853d521c4b7d77215c6f6aaef07e52bc255a89 diff --git a/Testing/Rendering/vtkRegressionTestImage.h b/Testing/Rendering/vtkRegressionTestImage.h index ae7c178d1c57db70ff48c530a4c24dd633947027..a81271ff04f6a737b4cae4adb2c5c546a182eb4d 100644 --- a/Testing/Rendering/vtkRegressionTestImage.h +++ b/Testing/Rendering/vtkRegressionTestImage.h @@ -12,6 +12,12 @@ VTK_ABI_NAMESPACE_BEGIN class vtkRegressionTester : public vtkTesting { +public: + // 0.05 threshold is arbitrary but found to + // allow most graphics system variances to pass + // when they should and fail when they should + static constexpr double ErrorThreshold = 0.05; + protected: vtkRegressionTester() = default; ~vtkRegressionTester() override = default; @@ -21,10 +27,8 @@ private: void operator=(const vtkRegressionTester&) = delete; }; -// 0.05 threshold is arbitrary but found to -// allow most graphics system variances to pass -// when they should and fail when they should -#define vtkRegressionTestImage(rw) vtkTesting::Test(argc, argv, rw, 0.05) +#define vtkRegressionTestImage(rw) \ + vtkTesting::Test(argc, argv, rw, vtkRegressionTester::ErrorThreshold) #define vtkRegressionTestImageThreshold(rw, t) vtkTesting::Test(argc, argv, rw, t) diff --git a/Testing/Rendering/vtkTestingInteractor.cxx b/Testing/Rendering/vtkTestingInteractor.cxx index 454e15f5a1731b3564525b86303688e8a152863d..46e5701c373e4697dba97fb2df5270cae3cac542 100644 --- a/Testing/Rendering/vtkTestingInteractor.cxx +++ b/Testing/Rendering/vtkTestingInteractor.cxx @@ -1,8 +1,10 @@ // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-License-Identifier: BSD-3-Clause #include "vtkTestingInteractor.h" + #include "vtkMultiProcessController.h" #include "vtkObjectFactory.h" +#include "vtkRegressionTestImage.h" #include "vtkRenderWindow.h" #include "vtkSmartPointer.h" #include "vtkTesting.h" @@ -17,7 +19,7 @@ vtkStandardNewMacro(vtkTestingInteractor); vtkCxxSetSmartPointerMacro(vtkTestingInteractor, Controller, vtkMultiProcessController); int vtkTestingInteractor::TestReturnStatus = -1; -double vtkTestingInteractor::ErrorThreshold = 10.0; +double vtkTestingInteractor::ErrorThreshold = vtkRegressionTester::ErrorThreshold; std::string vtkTestingInteractor::ValidBaseline; std::string vtkTestingInteractor::TempDirectory; std::string vtkTestingInteractor::DataDirectory; diff --git a/Views/Infovis/Testing/Cxx/CMakeLists.txt b/Views/Infovis/Testing/Cxx/CMakeLists.txt index eb97e8b6a30543ecd0afd2a2b21083ac4bf93193..8ed53f377c155e4fc87a44067521726ad446fb58 100644 --- a/Views/Infovis/Testing/Cxx/CMakeLists.txt +++ b/Views/Infovis/Testing/Cxx/CMakeLists.txt @@ -12,7 +12,7 @@ vtk_add_test_cxx(vtkViewsInfovisCxxTests tests TestIconGlyphFilter.cxx TestInteractorStyleTreeMapHover.cxx TestNetworkViews.cxx - TestParallelCoordinatesView.cxx + TestParallelCoordinatesView.cxx,LOOSE_VALID TestRenderView.cxx TestSpanTreeLayoutStrategy.cxx TestTanglegramItem.cxx diff --git a/Views/Infovis/Testing/Data/Baseline/TestParallelCoordinatesView.png.sha512 b/Views/Infovis/Testing/Data/Baseline/TestParallelCoordinatesView.png.sha512 index 4b33fbbfb3d1f6fa9a7313359efd2828dcb803c0..375d2edaf4a4a61f922e279c805d47ba97b6690d 100644 --- a/Views/Infovis/Testing/Data/Baseline/TestParallelCoordinatesView.png.sha512 +++ b/Views/Infovis/Testing/Data/Baseline/TestParallelCoordinatesView.png.sha512 @@ -1 +1 @@ -4cd09236f9ff1dc760e29656151e14b3353bde3afa6c4a2e7a7d117fa600d4c89aa29097b402f48f69940bec699ac0ff951ea7a838c7d1c13274fb226cd8ec28 +92ddb2a953d8c0fb53fba231e40a25dc655b739b0a5256e9df17fb78a04a6cd58e9db66b4dda2c6c4cecf14e78ea9260ed1f2e97471591382dd0768e51a1ecd5 diff --git a/Views/Infovis/vtkParallelCoordinatesRepresentation.cxx b/Views/Infovis/vtkParallelCoordinatesRepresentation.cxx index cdf57af1b4303837372726a46185b4039b39f2fa..b8e403277c5880a645a4a80f4120151652dbd44f 100644 --- a/Views/Infovis/vtkParallelCoordinatesRepresentation.cxx +++ b/Views/Infovis/vtkParallelCoordinatesRepresentation.cxx @@ -788,8 +788,7 @@ int vtkParallelCoordinatesRepresentation::UpdatePlotProperties(vtkStringArray* i this->Axes[i]->SetLabelFactor(0.5); this->Axes[i]->TickVisibilityOff(); this->Axes[i]->SetNumberOfLabels(this->NumberOfAxisLabels); - this->Axes[i]->SetTitlePosition(-.05); - this->Axes[i]->GetTitleTextProperty()->SetJustificationToRight(); + this->Axes[i]->SetTitlePosition(0); this->Axes[i]->GetTitleTextProperty()->ItalicOff(); this->Axes[i]->GetTitleTextProperty()->BoldOff(); this->Axes[i]->GetLabelTextProperty()->ItalicOff();