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