Init VolumeRenderingViewer.
This commit is contained in:
172
src/src/Rendering/Viewer/VolumeRenderingViewer.cpp
Normal file
172
src/src/Rendering/Viewer/VolumeRenderingViewer.cpp
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
//
|
||||||
|
// Created by Krad on 2022/8/9.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "VolumeRenderingViewer.h"
|
||||||
|
|
||||||
|
#include <vtkObjectFactory.h>
|
||||||
|
#include <vtkRenderer.h>
|
||||||
|
#include <vtkRenderWindow.h>
|
||||||
|
#include <vtkRenderWindowInteractor.h>
|
||||||
|
#include <vtkInteractorStyleTrackballCamera.h>
|
||||||
|
#include <vtkCamera.h>
|
||||||
|
#include <vtkVolume.h>
|
||||||
|
#include <vtkSmartVolumeMapper.h>
|
||||||
|
|
||||||
|
vtkStandardNewMacro(VolumeRenderingViewer);
|
||||||
|
|
||||||
|
VolumeRenderingViewer::VolumeRenderingViewer()
|
||||||
|
: vtkObject()
|
||||||
|
, RenderWindow(nullptr)
|
||||||
|
, Renderer(nullptr)
|
||||||
|
, VolumeActor(vtkVolume::New())
|
||||||
|
, VolumeMapper(vtkSmartVolumeMapper::New()){
|
||||||
|
this->VolumeActor->SetMapper(this->VolumeMapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
VolumeRenderingViewer::~VolumeRenderingViewer() {
|
||||||
|
if (this->VolumeMapper) {
|
||||||
|
vtkImageData* imageData_nullptr = nullptr;
|
||||||
|
this->VolumeMapper->SetInputData(imageData_nullptr);
|
||||||
|
this->VolumeMapper->Delete();
|
||||||
|
this->VolumeMapper = nullptr;
|
||||||
|
}
|
||||||
|
if (this->VolumeActor) {
|
||||||
|
this->VolumeActor->Delete();
|
||||||
|
this->VolumeActor = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->Renderer) {
|
||||||
|
this->Renderer->Delete();
|
||||||
|
this->Renderer = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->RenderWindow) {
|
||||||
|
this->RenderWindow->Delete();
|
||||||
|
this->RenderWindow = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->Interactor) {
|
||||||
|
this->Interactor->Delete();
|
||||||
|
this->Interactor = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->InteractorStyle) {
|
||||||
|
this->InteractorStyle->Delete();
|
||||||
|
this->InteractorStyle = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeRenderingViewer::InstallPipeline() {
|
||||||
|
if (this->RenderWindow && this->Renderer) {
|
||||||
|
this->RenderWindow->AddRenderer(this->Renderer);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->Interactor) {
|
||||||
|
if (!this->InteractorStyle) {
|
||||||
|
this->InteractorStyle = vtkInteractorStyleTrackballCamera::New();
|
||||||
|
}
|
||||||
|
|
||||||
|
this->Interactor->SetInteractorStyle(this->InteractorStyle);
|
||||||
|
this->Interactor->SetRenderWindow(this->RenderWindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->Renderer && this->VolumeActor) {
|
||||||
|
this->Renderer->AddViewProp(this->VolumeActor);
|
||||||
|
this->Renderer->GetActiveCamera()->SetParallelProjection(1);
|
||||||
|
this->Renderer->SetBackground(0.0, 0.0, 0.0);
|
||||||
|
}
|
||||||
|
//TODO: annotation for orientation
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeRenderingViewer::UnInstallPipeline() {
|
||||||
|
|
||||||
|
if (this->Renderer && this->VolumeActor) {
|
||||||
|
this->Renderer->RemoveViewProp(this->VolumeActor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->RenderWindow && this->Renderer) {
|
||||||
|
this->RenderWindow->RemoveRenderer(this->Renderer);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->Interactor) {
|
||||||
|
this->Interactor->SetInteractorStyle(nullptr);
|
||||||
|
this->Interactor->SetRenderWindow(nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeRenderingViewer::SetupInteractor(vtkRenderWindowInteractor * arg) {
|
||||||
|
if (this->Interactor == arg) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->UnInstallPipeline();
|
||||||
|
|
||||||
|
if (this->Interactor) {
|
||||||
|
this->Interactor->UnRegister(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->Interactor = arg;
|
||||||
|
|
||||||
|
if (this->Interactor) {
|
||||||
|
this->Interactor->Register(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->InstallPipeline();
|
||||||
|
|
||||||
|
if (this->Renderer) {
|
||||||
|
this->Renderer->GetActiveCamera()->ParallelProjectionOn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeRenderingViewer::SetRenderWindow(vtkRenderWindow *arg) {
|
||||||
|
if (this->RenderWindow == arg) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->UnInstallPipeline();
|
||||||
|
|
||||||
|
if (this->RenderWindow) {
|
||||||
|
this->RenderWindow->UnRegister(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->RenderWindow = arg;
|
||||||
|
|
||||||
|
if (this->RenderWindow) {
|
||||||
|
this->RenderWindow->Register(this);
|
||||||
|
}
|
||||||
|
//add legend to render
|
||||||
|
this->InstallPipeline();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeRenderingViewer::SetRenderer(vtkRenderer *arg) {
|
||||||
|
if (this->Renderer == arg) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->UnInstallPipeline();
|
||||||
|
|
||||||
|
if (this->Renderer) {
|
||||||
|
this->Renderer->UnRegister(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->Renderer = arg;
|
||||||
|
|
||||||
|
if (this->Renderer) {
|
||||||
|
this->Renderer->Register(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->InstallPipeline();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeRenderingViewer::Render() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeRenderingViewer::SetInputData(vtkImageData *in) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
vtkImageData *VolumeRenderingViewer::GetInput() {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
95
src/src/Rendering/Viewer/VolumeRenderingViewer.h
Normal file
95
src/src/Rendering/Viewer/VolumeRenderingViewer.h
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
//
|
||||||
|
// Created by Krad on 2022/8/9.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef OMEGAV_VOLUMERENDERINGVIEWER_H
|
||||||
|
#define OMEGAV_VOLUMERENDERINGVIEWER_H
|
||||||
|
|
||||||
|
#include "vtkObject.h"
|
||||||
|
class vtkAlgorithm;
|
||||||
|
|
||||||
|
class vtkImageData;
|
||||||
|
|
||||||
|
class vtkInformation;
|
||||||
|
|
||||||
|
|
||||||
|
class vtkRenderWindow;
|
||||||
|
|
||||||
|
class vtkRenderer;
|
||||||
|
|
||||||
|
class vtkRenderWindowInteractor;
|
||||||
|
|
||||||
|
class vtkInteractorStyle;
|
||||||
|
|
||||||
|
class vtkVolume;
|
||||||
|
|
||||||
|
class vtkSmartVolumeMapper;
|
||||||
|
|
||||||
|
class VolumeRenderingViewer:public vtkObject {
|
||||||
|
|
||||||
|
static VolumeRenderingViewer *New();
|
||||||
|
|
||||||
|
vtkTypeMacro(VolumeRenderingViewer, vtkObject);
|
||||||
|
|
||||||
|
virtual void Render();
|
||||||
|
|
||||||
|
//@{
|
||||||
|
/**
|
||||||
|
* Set/Get the input image to the viewer.
|
||||||
|
*/
|
||||||
|
virtual void SetInputData(vtkImageData *in);
|
||||||
|
|
||||||
|
virtual vtkImageData *GetInput();
|
||||||
|
|
||||||
|
//@{
|
||||||
|
/**
|
||||||
|
* Get the internal render window, renderer, image actor, and
|
||||||
|
* image map instances.
|
||||||
|
*/
|
||||||
|
vtkGetObjectMacro(RenderWindow, vtkRenderWindow);
|
||||||
|
|
||||||
|
vtkGetObjectMacro(Renderer, vtkRenderer);
|
||||||
|
|
||||||
|
//@}
|
||||||
|
|
||||||
|
//@{
|
||||||
|
/**
|
||||||
|
* Set your own renderwindow and renderer
|
||||||
|
*/
|
||||||
|
virtual void SetRenderWindow(vtkRenderWindow *arg);
|
||||||
|
|
||||||
|
virtual void SetRenderer(vtkRenderer *arg);
|
||||||
|
//@}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attach an interactor for the internal render window.
|
||||||
|
*/
|
||||||
|
virtual void SetupInteractor(vtkRenderWindowInteractor *);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
VolumeRenderingViewer();
|
||||||
|
|
||||||
|
~VolumeRenderingViewer() override;
|
||||||
|
|
||||||
|
// vtkAlgorithm *GetInputAlgorithm();
|
||||||
|
//
|
||||||
|
// vtkInformation *GetInputInformation();
|
||||||
|
|
||||||
|
virtual void InstallPipeline();
|
||||||
|
|
||||||
|
virtual void UnInstallPipeline();
|
||||||
|
private:
|
||||||
|
VolumeRenderingViewer(const VolumeRenderingViewer &) = delete;
|
||||||
|
|
||||||
|
void operator=(const VolumeRenderingViewer &) = delete;
|
||||||
|
|
||||||
|
vtkRenderWindow *RenderWindow;
|
||||||
|
vtkRenderer *Renderer;
|
||||||
|
vtkVolume * VolumeActor;
|
||||||
|
vtkSmartVolumeMapper *VolumeMapper;
|
||||||
|
vtkInteractorStyle *InteractorStyle;
|
||||||
|
vtkRenderWindowInteractor *Interactor;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //OMEGAV_VOLUMERENDERINGVIEWER_H
|
||||||
Reference in New Issue
Block a user