iMSTK
Interactive Medical Simulation Toolkit
imstkVTKScreenCaptureUtility.cpp
1 /*
2 ** This file is part of the Interactive Medical Simulation Toolkit (iMSTK)
3 ** iMSTK is distributed under the Apache License, Version 2.0.
4 ** See accompanying NOTICE for details.
5 */
6 
7 #include "imstkVTKScreenCaptureUtility.h"
8 #include "imstkLogger.h"
9 
10 #include <vtkPNGWriter.h>
11 #include <vtkRenderWindow.h>
12 #include <vtkWindowToImageFilter.h>
13 
14 namespace imstk
15 {
16 VTKScreenCaptureUtility::VTKScreenCaptureUtility(vtkRenderWindow* const rw, const std::string prefix /*= "Screenshot-"*/) :
17  ScreenCaptureUtility(prefix),
18  m_windowToImageFilter(vtkSmartPointer<vtkWindowToImageFilter>::New()),
19  m_pngWriter(vtkSmartPointer<vtkPNGWriter>::New())
20 {
21  if (rw != nullptr)
22  {
23  m_renderWindow = rw;
24  }
25 }
26 
27 std::string
28 VTKScreenCaptureUtility::saveScreenShot(const std::string& captureName)
29 {
30  if (m_renderWindow == nullptr)
31  {
32  LOG(WARNING) << "Render window has not been set yet! ";
33  return "";
34  }
35 
36  if (m_windowToImageFilter->GetInput() == nullptr)
37  {
38  m_windowToImageFilter->SetInput(m_renderWindow);
39 
40  m_windowToImageFilter->SetScale(1);
41  m_windowToImageFilter->SetInputBufferTypeToRGB();
42  m_windowToImageFilter->ReadFrontBufferOff();
43  m_windowToImageFilter->Update();
44 
45  m_pngWriter->SetInputConnection(m_windowToImageFilter->GetOutputPort());
46  }
47 
48  m_windowToImageFilter->Modified();
49 
50  std::string filename = captureName + ".png";
51 
52  m_pngWriter->SetFileName(filename.data());
53  m_pngWriter->Write();
54 
55  LOG(INFO) << "Screen shot " << m_screenShotNumber << " saved as " << captureName << "\n";
56 
57  return filename;
58 }
59 } // namespace imstk
Compound Geometry.
std::string saveScreenShot()
Saves a screenshot with a name of <prefix><screenshotNumber>.<implementationImageType> the <Implement...