diff --git a/Examples/LaparoscopicCamera/main.cpp b/Examples/LaparoscopicCamera/main.cpp index c45a079c7eb4af9b6d2f8b0f06cdf7485ae35918..7de9b0b82136be444def10b5c1b5afd3b61ba697 100644 --- a/Examples/LaparoscopicCamera/main.cpp +++ b/Examples/LaparoscopicCamera/main.cpp @@ -58,8 +58,8 @@ #include "vtkFloatArray.h" #include "vtkPlotPoints.h" #include "vtkTable.h" -#include "vtkNew.h" #include "vtkAxis.h" +#include "vtkNew.h" #define SPACE_EXPLORER_DEVICE true @@ -330,10 +330,10 @@ int main(int ac, char** av) std::shared_ptr<LaparoscopicCameraCoupler> camController = addCameraController(sdk); // Enable screenshot capture - //camController->enableScreenCapture(); + camController->enableScreenCapture(); std::shared_ptr<VTKViewer> vtkViewer = std::static_pointer_cast<VTKViewer>(viewer); - //vtkViewer->setScreenCaptureData(camController->getScreenCaptureData()); + vtkViewer->setScreenCaptureData(camController->getScreenCaptureData()); // Add a 2D overlay on the 3D scene add2DOverlay(vtkViewer); diff --git a/VTKRendering/VTKViewer.cpp b/VTKRendering/VTKViewer.cpp index 68e94871b349cbf34a75e0e07b90e5a24408968c..4d4e6571619107b63ca5c772439351752f3c80af 100644 --- a/VTKRendering/VTKViewer.cpp +++ b/VTKRendering/VTKViewer.cpp @@ -68,30 +68,31 @@ public: if(timerId == *static_cast<int*>(callData) && !this->viewer->isTerminated()) { + if (this->cameraControllerData != nullptr) { updateCamera(); } - //if (this->screenCaptureData != nullptr) - //{ - // if (this->screenCaptureData->triggerScreenCapture) - // { - // //this->screenCaptureData->windowToImageFilter->Update(); + if (this->screenCaptureData != nullptr) + { + if (this->screenCaptureData->triggerScreenCapture) + { + //this->screenCaptureData->windowToImageFilter->Update(); - // std::string captureName = "screenShot-" - // + std::to_string(this->screenCaptureData->screenShotNumber) - // + ".png"; + std::string captureName = "screenShot-" + + std::to_string(this->screenCaptureData->screenShotNumber) + + ".png"; - // this->screenCaptureData->pngWriter->SetFileName( - // captureName.data()); + this->screenCaptureData->pngWriter->SetFileName( + captureName.data()); - // this->screenCaptureData->pngWriter->Write(); + this->screenCaptureData->pngWriter->Write(); - // this->screenCaptureData->screenShotNumber++; - // this->screenCaptureData->triggerScreenCapture = false; - // } - //} + this->screenCaptureData->screenShotNumber++; + this->screenCaptureData->triggerScreenCapture = false; + } + } this->renderWindow->Render(); } @@ -340,7 +341,7 @@ public: vtkNew<vtkRenderWindow> renderWindow; vtkNew<vtkRenderWindowInteractor> renderWindowInteractor; std::shared_ptr<cameraConfigurationData> cameraControllerData; - //std::shared_ptr<screenShotData> screenCaptureData; + std::shared_ptr<screenShotData> screenCaptureData; }; VTKViewer::VTKViewer() : renderer(Core::make_unique<VTKRenderer> (this)) @@ -382,13 +383,15 @@ void VTKViewer::setCameraControllerData(std::shared_ptr<cameraConfigurationData> renderer->cameraControllerData = camData; } -//void VTKViewer::setScreenCaptureData(std::shared_ptr<screenShotData> data) -//{ -// renderer->screenCaptureData = data; -// -// renderer->screenCaptureData->windowToImageFilter->SetInput( -// this->renderer->getRenderWindow()); -//} +void VTKViewer::setScreenCaptureData(std::shared_ptr<screenShotData> data) +{ + renderer->screenCaptureData = data; + + this->renderer->getRenderWindow()->SetAlphaBitPlanes(1); + + renderer->screenCaptureData->windowToImageFilter->SetInput( + this->renderer->getRenderWindow()); +} void VTKViewer::addChartActor(vtkContextActor* chartActor, vtkContextScene* chartScene) { diff --git a/VTKRendering/VTKViewer.h b/VTKRendering/VTKViewer.h index 3aaab8345ea30935e96870c63e5bc21fa703acd5..c11a6007b1330fd9959b282b91fafeb924fef35c 100644 --- a/VTKRendering/VTKViewer.h +++ b/VTKRendering/VTKViewer.h @@ -95,7 +95,7 @@ public: /// /// \brief Set the data related to screen capture /// - //void setScreenCaptureData(std::shared_ptr<screenShotData> data); + void setScreenCaptureData(std::shared_ptr<screenShotData> data); /// /// \brief Add chart actor to the renderer diff --git a/VirtualTools/LaparoscopicCameraCoupler.cpp b/VirtualTools/LaparoscopicCameraCoupler.cpp index 2e64a6a8fd9eaa64cde030d3231946fe93fbbe1d..cacc76c026f62661277dd9d64e1d3c1100459bc3 100644 --- a/VirtualTools/LaparoscopicCameraCoupler.cpp +++ b/VirtualTools/LaparoscopicCameraCoupler.cpp @@ -155,10 +155,10 @@ void LaparoscopicCameraCoupler::exec() this->terminate(); } - /*if (this->inputDevice->getButton(0)) + if (this->inputDevice->getButton(1)) { - this->screenCaptureData->triggerScreenCapture = true; - }*/ + this->screenCaptureData->triggerScreenCapture = true; + } std::this_thread::sleep_for(poolDelay); } @@ -251,12 +251,12 @@ void LaparoscopicCameraCoupler::setBendingRadius(const double val) bendingRadius = val; } -//std::shared_ptr<screenShotData> LaparoscopicCameraCoupler::getScreenCaptureData() -//{ -// return screenCaptureData; -//} -// -//void LaparoscopicCameraCoupler::enableScreenCapture() -//{ -// this->screenCaptureData = std::make_shared<screenShotData>(); -//} \ No newline at end of file +std::shared_ptr<screenShotData> LaparoscopicCameraCoupler::getScreenCaptureData() +{ + return screenCaptureData; +} + +void LaparoscopicCameraCoupler::enableScreenCapture() +{ + this->screenCaptureData = std::make_shared<screenShotData>(); +} \ No newline at end of file diff --git a/VirtualTools/LaparoscopicCameraCoupler.h b/VirtualTools/LaparoscopicCameraCoupler.h index 850afd0d1e46d415a5ac107fec512818e3e71f10..47dfababdfa9ec2f56e46a924fcadef41b848897 100644 --- a/VirtualTools/LaparoscopicCameraCoupler.h +++ b/VirtualTools/LaparoscopicCameraCoupler.h @@ -37,6 +37,7 @@ #include <vtkCamera.h> #include <vtkWindowToImageFilter.h> #include <vtkPNGWriter.h> +#include "vtkNew.h" class DeviceInterface; @@ -50,34 +51,30 @@ struct cameraConfigurationData ~cameraConfigurationData(){}; }; -//struct screenShotData -//{ -// std::shared_ptr<vtkWindowToImageFilter> windowToImageFilter; -// std::shared_ptr<vtkPNGWriter> pngWriter; -// bool triggerScreenCapture; -// int screenShotNumber; -// -// screenShotData() : triggerScreenCapture(false), screenShotNumber(0) -// { -// windowToImageFilter = std::make_shared<vtkWindowToImageFilter>(); -// -// windowToImageFilter->SetMagnification(1); // set the resolution of the output -// // image -// -// windowToImageFilter->SetInputBufferTypeToRGBA(); // also record the alpha -// // (transparency) channel -// -// windowToImageFilter->ReadFrontBufferOff(); // read from the back buffer -// -// windowToImageFilter->Update(); -// -// pngWriter = std::make_shared<vtkPNGWriter>(); -// -// pngWriter->SetInputConnection(windowToImageFilter->GetOutputPort()); -// }; -// -// ~screenShotData(){}; -//}; +struct screenShotData +{ + vtkNew<vtkWindowToImageFilter> windowToImageFilter; + vtkNew<vtkPNGWriter> pngWriter; + bool triggerScreenCapture; + int screenShotNumber; + + screenShotData() : triggerScreenCapture(false), screenShotNumber(0) + { + windowToImageFilter->SetMagnification(1); // set the resolution of the output + // image + + windowToImageFilter->SetInputBufferTypeToRGB(); // also record the alpha + // (transparency) channel + + windowToImageFilter->ReadFrontBufferOff(); // read from the back buffer + + windowToImageFilter->Update(); + + pngWriter->SetInputConnection(windowToImageFilter->GetOutputPort()); + }; + + ~screenShotData(){}; +}; class LaparoscopicCameraCoupler : public Module { @@ -219,7 +216,7 @@ public: /// /// \brief Get the screen capture related data /// - //std::shared_ptr<screenShotData> getScreenCaptureData(); + std::shared_ptr<screenShotData> getScreenCaptureData(); /// /// \brief Initializes screen capture capability @@ -268,7 +265,7 @@ private: std::shared_ptr<cameraConfigurationData> cameraPosOrientData;//!< camera config data - //std::shared_ptr<screenShotData> screenCaptureData; + std::shared_ptr<screenShotData> screenCaptureData; std::shared_ptr<vtkWindowToImageFilter> windowToImageFilter; };