1 /*=========================================================================
2
3 Program: Visualization Toolkit
4
5 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
6 All rights reserved.
7 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
8
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the above copyright notice for more information.
12
13 =========================================================================*/
14
15 #include "vtkRegressionTestImage.h"
16 #include "vtkTestUtilities.h"
17
18 #include "vtkActor.h"
19 #include "vtkCamera.h"
20 #include "vtkExecutive.h"
21 #include "vtkInformation.h"
22 #include "vtkMolecule.h"
23 #include "vtkMoleculeMapper.h"
24 #include "vtkNew.h"
25 #include "vtkRenderWindow.h"
26 #include "vtkRenderWindowInteractor.h"
27 #include "vtkRenderer.h"
28 #include "vtkStreamingDemandDrivenPipeline.h"
29 #include "vtkVASPAnimationReader.h"
30
TestVASPAnimationReader(int argc,char * argv[])31 int TestVASPAnimationReader(int argc, char* argv[])
32 {
33 if (argc < 2)
34 {
35 std::cerr << "Missing test file argument." << std::endl;
36 return EXIT_FAILURE;
37 }
38
39 std::string fname(argv[1]);
40
41 vtkNew<vtkVASPAnimationReader> reader;
42 reader->SetFileName(fname.c_str());
43
44 reader->UpdateInformation();
45 vtkInformation* outInfo = reader->GetExecutive()->GetOutputInformation(0);
46 double* times = outInfo->Get(vtkStreamingDemandDrivenPipeline::TIME_STEPS());
47 int nTimes = outInfo->Length(vtkStreamingDemandDrivenPipeline::TIME_STEPS());
48 if (nTimes < 8)
49 {
50 std::cerr << "Need at least 8 timesteps, only " << nTimes << " found.\n";
51 return EXIT_FAILURE;
52 }
53
54 // Show different time steps in each renderer:
55 vtkNew<vtkRenderer> rens[4];
56 rens[0]->SetViewport(0.0, 0.5, 0.5, 1.0);
57 rens[1]->SetViewport(0.5, 0.5, 1.0, 1.0);
58 rens[2]->SetViewport(0.0, 0.0, 0.5, 0.5);
59 rens[3]->SetViewport(0.5, 0.0, 1.0, 0.5);
60
61 vtkNew<vtkMoleculeMapper> mappers[4];
62 vtkNew<vtkActor> actors[4];
63 vtkNew<vtkRenderWindow> win;
64 for (size_t i = 0; i < 4; ++i)
65 {
66 // Render different timestamps for each:
67 reader->UpdateTimeStep(times[2 * i]);
68 vtkNew<vtkMolecule> mol;
69 mol->ShallowCopy(reader->GetOutput());
70 mappers[i]->SetInputData(mol);
71
72 // Rendering setup:
73 mappers[i]->UseBallAndStickSettings();
74 mappers[i]->SetAtomicRadiusTypeToCustomArrayRadius();
75 mappers[i]->RenderLatticeOn();
76 actors[i]->SetMapper(mappers[i]);
77 rens[i]->SetBackground(0.0, 0.0, 0.0);
78 rens[i]->AddActor(actors[i]);
79 win->AddRenderer(rens[i]);
80 }
81
82 vtkNew<vtkRenderWindowInteractor> iren;
83 iren->SetRenderWindow(win);
84
85 win->SetSize(450, 450);
86 win->Render();
87
88 for (size_t i = 0; i < 4; ++i)
89 {
90 rens[i]->GetActiveCamera()->Dolly(1.5);
91 rens[i]->ResetCameraClippingRange();
92 }
93 win->Render();
94
95 // Finally render the scene and compare the image to a reference image
96 win->SetMultiSamples(0);
97 win->GetInteractor()->Initialize();
98 win->GetInteractor()->Start();
99
100 return EXIT_SUCCESS;
101 }
102