TemporalHDFReader
Repository source: TemporalHDFReader
Description¶
That example uses a feature of vtk_hdf5 that is only available in VTK 9.3. See this blog post for more information.
Other languages
See (Python), (PythonicAPI)
Question
If you have a question about this example, please use the VTK Discourse Forum
Code¶
TemporalHDFReader.cxx
#include <vtkCallbackCommand.h>
#include <vtkColorSeries.h>
#include <vtkCommand.h>
#include <vtkColorTransferFunction.h>
#include <vtkHDFReader.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkLookupTable.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkObject.h>
#include <vtkObjectBase.h>
#include <vtkPointData.h>
#include <vtkPolyData.h>
#include <vtkCompositePolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <cstdlib>
#include <iostream>
namespace {
vtkLookupTable* GetCTF();
void Animate(vtkObject* caller, unsigned long /*eid*/, void* clientdata,
void* /*calldata*/);
} // namespace
int main(int ac, char* av[])
{
if (ac != 2)
{
std::cout << "Usage: " << av[0]
<< " filename.vtkhdf eg. warping_spheres.vtkhdf" << std::endl;
return EXIT_FAILURE;
}
vtkNew<vtkNamedColors> colors;
// Read the dataset.
vtkNew<vtkHDFReader> reader;
reader->SetFileName(av[1]);
reader->Update();
std::cout << "Number of steps: " << reader->GetNumberOfSteps() << endl;
// Render the dataset.
vtkNew<vtkCompositePolyDataMapper> mapper;
mapper->SetInputConnection(reader->GetOutputPort());
mapper->SetLookupTable(GetCTF());
mapper->SetScalarModeToUsePointFieldData();
mapper->SelectColorArray("SpatioTemporalHarmonics");
vtkNew<vtkActor> actor;
actor->SetMapper(mapper);
vtkNew<vtkRenderer> renderer;
renderer->SetBackground(colors->GetColor3d("AntiqueWhite").GetData());
renderer->UseHiddenLineRemovalOn();
renderer->AddActor(actor);
vtkNew<vtkRenderWindow> renWin;
renWin->AddRenderer(renderer);
renWin->SetWindowName("TemporalHDFReader");
renWin->SetSize(1024, 512);
renWin->Render();
// Add the interactor.
vtkNew<vtkRenderWindowInteractor> iren;
iren->SetRenderWindow(renWin);
// Add the animation callback.
vtkNew<vtkCallbackCommand> command;
command->SetCallback(Animate);
command->SetClientData(reader);
// You must initialize the vtkRenderWindowInteractor
// before adding the observer and setting the repeating timer.
iren->Initialize();
iren->AddObserver(vtkCommand::TimerEvent, command);
iren->CreateRepeatingTimer(50);
vtkNew<vtkInteractorStyleTrackballCamera> istyle;
iren->SetInteractorStyle(istyle);
iren->Start();
return EXIT_SUCCESS;
}
namespace {
vtkLookupTable* GetCTF()
{
vtkNew<vtkColorSeries> series;
series->SetColorScheme(vtkColorSeries::WARM);
return series->CreateLookupTable(vtkColorSeries::ORDINAL);
}
void Animate(vtkObject* caller, unsigned long /*eid*/, void* clientdata,
void* /*calldata*/)
{
vtkRenderWindowInteractor* interactor =
vtkRenderWindowInteractor::SafeDownCast(caller);
vtkHDFReader* reader =
vtkHDFReader::SafeDownCast(static_cast<vtkObjectBase*>(clientdata));
reader->SetStep((reader->GetStep() == reader->GetNumberOfSteps() - 1)
? 0
: reader->GetStep() + 1);
std::cout << "Current step: " << reader->GetStep() << std::endl;
reader->Update();
interactor->Render();
}
} // namespace
CMakeLists.txt¶
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
project(TemporalHDFReader)
find_package(VTK COMPONENTS
CommonColor
CommonCore
CommonDataModel
IOHDF
InteractionStyle
RenderingContextOpenGL2
RenderingCore
RenderingFreeType
RenderingGL2PSOpenGL2
RenderingOpenGL2
)
if (NOT VTK_FOUND)
message(FATAL_ERROR "TemporalHDFReader: Unable to find the VTK build folder.")
endif()
# Prevent a "command line is too long" failure in Windows.
set(CMAKE_NINJA_FORCE_RESPONSE_FILE "ON" CACHE BOOL "Force Ninja to use response files.")
add_executable(TemporalHDFReader MACOSX_BUNDLE TemporalHDFReader.cxx )
target_link_libraries(TemporalHDFReader PRIVATE ${VTK_LIBRARIES}
)
# vtk_module_autoinit is needed
vtk_module_autoinit(
TARGETS TemporalHDFReader
MODULES ${VTK_LIBRARIES}
)
Download and Build TemporalHDFReader¶
Click here to download TemporalHDFReader and its CMakeLists.txt file. Once the tarball TemporalHDFReader.tar has been downloaded and extracted,
cd TemporalHDFReader/build
If VTK is installed:
cmake ..
If VTK is not installed but compiled on your system, you will need to specify the path to your VTK build:
cmake -DVTK_DIR:PATH=/home/me/vtk_build ..
Build the project:
make
and run it:
./TemporalHDFReader
WINDOWS USERS
Be sure to add the VTK bin directory to your path. This will resolve the VTK dll's at run time.
