vtk-m2/vtkm/rendering/testing/RenderTest.h
2023-05-30 09:49:29 -06:00

136 lines
4.4 KiB
C++

//============================================================================
// Copyright (c) Kitware, Inc.
// All rights reserved.
// See LICENSE.txt for details.
//
// This software is distributed WITHOUT ANY WARRANTY; without even
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the above copyright notice for more information.
//============================================================================
#ifndef vtk_m_rendering_testing_RenderTest_h
#define vtk_m_rendering_testing_RenderTest_h
// Because the testing directory is reserved for test executables and not
// libraries, the vtkm_rendering_testing module has to put this file in
// vtkm/rendering/testlib instead of vtkm/rendering/testing where you normally
// would expect it.
#include <vtkm/rendering/testlib/vtkm_rendering_testing_export.h>
#include <vtkm/Bounds.h>
#include <vtkm/cont/DeviceAdapterTag.h>
#include <vtkm/cont/testing/MakeTestDataSet.h>
#include <vtkm/rendering/Actor.h>
#include <vtkm/rendering/Camera.h>
#include <vtkm/rendering/Canvas.h>
#include <vtkm/rendering/Color.h>
#include <vtkm/rendering/GlyphType.h>
#include <vtkm/rendering/Mapper.h>
#include <vtkm/rendering/Scene.h>
#include <vtkm/rendering/TextAnnotationScreen.h>
#include <vtkm/rendering/View1D.h>
#include <vtkm/rendering/View2D.h>
#include <vtkm/rendering/View3D.h>
#include <vtkm/rendering/testing/Testing.h>
#include <memory>
namespace vtkm
{
namespace rendering
{
namespace testing
{
enum struct CanvasType
{
RayTracer
};
enum struct MapperType
{
RayTracer,
Connectivity,
Cylinder,
Point,
Quad,
Volume,
Wireframer,
GlyphScalar,
GlyphVector
};
struct RenderTestOptions
{
// Options for comparing images (i.e. test_equal_images)
vtkm::IdComponent AverageRadius = 0;
vtkm::IdComponent PixelShiftRadius = 0;
vtkm::FloatDefault AllowedPixelErrorRatio = 0.00025f;
vtkm::FloatDefault Threshold = 0.05f;
// Options that set up rendering
CanvasType Canvas = CanvasType::RayTracer;
vtkm::IdComponent ViewDimension = 3;
MapperType Mapper = MapperType::RayTracer;
vtkm::Id CanvasWidth = 512;
vtkm::Id CanvasHeight = 512;
bool EnableAnnotations = true;
vtkm::Float64 DataViewPadding = 0;
vtkm::rendering::Color Foreground = vtkm::rendering::Color::black;
vtkm::rendering::Color Background = vtkm::rendering::Color::white;
// By default, scalar values will be mapped by this ColorTable to make colors.
vtkm::cont::ColorTable ColorTable;
// If you want constant colors (per DataSet or field or partition), then you can
// set this vector to the colors you want to use. If one color is specified, it
// will be used for everything. If multiple colors are specified, each will be
// used for a different DataSet/field/partition.
std::vector<vtkm::rendering::Color> Colors;
// For 3D rendering
vtkm::Float32 CameraAzimuth = 45.0f;
vtkm::Float32 CameraElevation = 45.0f;
// For 2D/1D rendering
vtkm::Range ClippingRange = { 1, 100 };
vtkm::Bounds Viewport = { { -0.7, 0.7 }, { -0.7, 0.7 }, { 0.0, 0.0 } };
// For 1D rendering
bool LogX = false;
bool LogY = false;
std::string Title;
vtkm::Float32 TitleScale = 0.075f;
vtkm::Vec2f_32 TitlePosition = { -0.11f, 0.92f };
vtkm::Float32 TitleAngle = 0;
// Usually when calling RenderTest, you are not specifically testing rendering.
// Rather, you are testing something else and using render to check the results.
// Regardless of what device you are using for testing, you probably want to
// use the best available device for rendering.
bool AllowAnyDevice = true;
// Special options for some glyph and glyph-like mappers
vtkm::rendering::GlyphType GlyphType = vtkm::rendering::GlyphType::Cube;
bool UseVariableRadius = false;
vtkm::Float32 Radius = -1.0f;
vtkm::Float32 RadiusDelta = 0.5f;
bool RenderCells = false;
};
VTKM_RENDERING_TESTING_EXPORT
void RenderTest(const vtkm::cont::DataSet& dataSet,
const std::string& fieldName,
const std::string& outputFile,
const RenderTestOptions& options = RenderTestOptions{});
VTKM_RENDERING_TESTING_EXPORT
void RenderTest(const std::vector<std::pair<vtkm::cont::DataSet, std::string>>& dataSetsFields,
const std::string& outputFile,
const RenderTestOptions& options = RenderTestOptions{});
} // namespace vtkm::rendering::testing
} // namespace vtkm::rendering
} // namespace vtkm
#endif //vtk_m_rendering_testing_RenderTest_h