From 2d68aafc9f50d746ba1351c8c767a34e65abfc0f Mon Sep 17 00:00:00 2001
From: Jaswant Panchumarti <jaswant.panchumarti@kitware.com>
Date: Tue, 3 Dec 2024 17:54:00 -0500
Subject: [PATCH] Add unit test for vtkAxesActor in webgpu

- This unit test exercises rendering actors that
  embed other actors.
---
 Rendering/WebGPU/Testing/Cxx/CMakeLists.txt   |  1 +
 .../WebGPU/Testing/Cxx/TestAxesActor.cxx      | 65 +++++++++++++++++++
 .../Data/Baseline/TestAxesActor.png.sha512    |  1 +
 3 files changed, 67 insertions(+)
 create mode 100644 Rendering/WebGPU/Testing/Cxx/TestAxesActor.cxx
 create mode 100644 Rendering/WebGPU/Testing/Data/Baseline/TestAxesActor.png.sha512

diff --git a/Rendering/WebGPU/Testing/Cxx/CMakeLists.txt b/Rendering/WebGPU/Testing/Cxx/CMakeLists.txt
index ad809bfeaf2..378ba559e96 100644
--- a/Rendering/WebGPU/Testing/Cxx/CMakeLists.txt
+++ b/Rendering/WebGPU/Testing/Cxx/CMakeLists.txt
@@ -14,6 +14,7 @@ endif ()
 # (vtk/vtk#19322): Add baselines for these unit tests
 vtk_add_test_cxx(vtkRenderingWebGPUCxxTests tests
   TestActorFaceCullingProperty.cxx,NO_DATA
+  TestAxesActor.cxx,NO_DATA
   TestCellScalarMappedColors.cxx,NO_DATA
   TestCompositePolyDataMapper.cxx,NO_DATA
   TestComputeDoublePipelineRenderBuffer.cxx,NO_DATA
diff --git a/Rendering/WebGPU/Testing/Cxx/TestAxesActor.cxx b/Rendering/WebGPU/Testing/Cxx/TestAxesActor.cxx
new file mode 100644
index 00000000000..8467ec41c30
--- /dev/null
+++ b/Rendering/WebGPU/Testing/Cxx/TestAxesActor.cxx
@@ -0,0 +1,65 @@
+// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+// SPDX-License-Identifier: BSD-3-Clause
+
+#include "vtkActor.h"
+#include "vtkAxesActor.h"
+#include "vtkCamera.h"
+#include "vtkConeSource.h"
+#include "vtkNew.h"
+#include "vtkOrientationMarkerWidget.h"
+#include "vtkPolyDataMapper.h"
+#include "vtkProperty.h"
+#include "vtkRegressionTestImage.h"
+#include "vtkRenderWindow.h"
+#include "vtkRenderWindowInteractor.h"
+#include "vtkRenderer.h"
+
+//------------------------------------------------------------------------------
+int TestAxesActor(int argc, char* argv[])
+{
+  vtkNew<vtkRenderer> renderer;
+  renderer->SetBackground(0.1, 0.1, 0.1);
+
+  vtkNew<vtkRenderWindow> renderWindow;
+  renderWindow->SetSize(800, 800);
+  renderWindow->AddRenderer(renderer);
+
+  vtkNew<vtkRenderWindowInteractor> iren;
+  iren->SetRenderWindow(renderWindow);
+
+  vtkNew<vtkConeSource> cone;
+  // map elevation output to graphics primitives.
+  vtkNew<vtkPolyDataMapper> mapper;
+  // mapper->SetLookupTable(lut);
+  mapper->SetInputConnection(cone->GetOutputPort());
+  vtkNew<vtkActor> actor;
+  actor->SetMapper(mapper);
+  renderer->AddActor(actor);
+
+  vtkNew<vtkAxesActor> axes;
+  axes->SetShaftTypeToCylinder();
+  axes->SetNormalizedTipLength(0.4, 0.4, 0.4);
+  // FIXME: the vtkCaptionActor2D does not render text with webgpu. An override for
+  // vtkPolyDataMapper2D must be implemented in webgpu.
+  // https://gitlab.kitware.com/vtk/vtk/-/issues/19551
+  axes->SetAxisLabels(false);
+  vtkNew<vtkOrientationMarkerWidget> om;
+  om->SetOrientationMarker(axes);
+  om->SetInteractor(iren);
+  om->EnabledOn();
+  om->InteractiveOn();
+
+  renderer->ResetCamera();
+  renderer->GetActiveCamera()->Azimuth(45);
+  renderer->GetActiveCamera()->Elevation(45);
+  renderer->GetActiveCamera()->OrthogonalizeViewUp();
+  renderWindow->Render();
+
+  int retVal = vtkRegressionTestImageThreshold(renderWindow, 0.05);
+  if (retVal == vtkRegressionTester::DO_INTERACTOR)
+  {
+    iren->Start();
+  }
+
+  return !retVal;
+}
diff --git a/Rendering/WebGPU/Testing/Data/Baseline/TestAxesActor.png.sha512 b/Rendering/WebGPU/Testing/Data/Baseline/TestAxesActor.png.sha512
new file mode 100644
index 00000000000..27b819d0c37
--- /dev/null
+++ b/Rendering/WebGPU/Testing/Data/Baseline/TestAxesActor.png.sha512
@@ -0,0 +1 @@
+886465c51a5139ff595b17bbde3a13fd90fe355aaeeae771ac075a97e6ffc424787870464929ead886dc9beac5a9361a5f49644112c5b10bafd076a0e82a4432
-- 
GitLab