fixed errors
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <cstdlib>
|
||||
#include <vtkRenderWindowInteractor.h>
|
||||
#include <vtkRendererCollection.h>
|
||||
#include <vtkSmartPointer.h>
|
||||
@@ -69,22 +70,33 @@ namespace Vtk {
|
||||
|
||||
struct ViewerData {
|
||||
vtkRenderWindow *m_RenderWindow;
|
||||
vtkSmartPointer<vtkRenderWindowInteractor> m_Interactor;
|
||||
vtkSmartPointer<vtkButtonWidget> m_GridButton;
|
||||
|
||||
ViewerData() : m_RenderWindow(vtkRenderWindow::New()) {}
|
||||
~ViewerData() { m_RenderWindow->Delete(); }
|
||||
~ViewerData() {
|
||||
if (m_Interactor) {
|
||||
m_Interactor->SetRenderWindow(nullptr);
|
||||
}
|
||||
m_RenderWindow->Delete();
|
||||
}
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///// VTK VIEWER //////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Viewer::Viewer()
|
||||
: Viewport(), d(new ViewerData()) {
|
||||
: Viewport(), dv(new ViewerData()) {
|
||||
InstallPipe();
|
||||
}
|
||||
|
||||
Viewer::~Viewer() {
|
||||
this->DisableHandler();
|
||||
if (dv->m_GridButton) {
|
||||
dv->m_GridButton->Off();
|
||||
dv->m_GridButton->SetInteractor(nullptr);
|
||||
dv->m_GridButton = nullptr;
|
||||
}
|
||||
if (this->GetRenderWindow()) {
|
||||
this->GetRenderWindow()->RemoveAllObservers();
|
||||
}
|
||||
@@ -92,37 +104,44 @@ Viewer::~Viewer() {
|
||||
this->GetInteractor()->RemoveAllObservers();
|
||||
}
|
||||
UninstallPipe();
|
||||
delete d;
|
||||
delete dv;
|
||||
}
|
||||
|
||||
void Viewer::InstallPipe() {
|
||||
d->m_RenderWindow->AddRenderer(this->GetRenderer());
|
||||
d->m_RenderWindow->SetSize(600,600);
|
||||
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
|
||||
vtkSmartPointer<vtkRenderWindowInteractor>::New();
|
||||
renderWindowInteractor->SetRenderWindow(d->m_RenderWindow);
|
||||
dv->m_RenderWindow->AddRenderer(this->GetRenderer());
|
||||
dv->m_RenderWindow->SetSize(600,600);
|
||||
if (std::getenv("CTEST_PROJECT_NAME")) {
|
||||
dv->m_RenderWindow->SetOffScreenRendering(1);
|
||||
}
|
||||
|
||||
dv->m_Interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
|
||||
dv->m_Interactor->SetRenderWindow(dv->m_RenderWindow);
|
||||
|
||||
// Common setup
|
||||
Viewport::SetupPipeline(renderWindowInteractor);
|
||||
Viewport::SetupPipeline(dv->m_Interactor);
|
||||
|
||||
// Setup native grid button
|
||||
SetupGridButton();
|
||||
if (!std::getenv("CTEST_PROJECT_NAME")) {
|
||||
SetupGridButton();
|
||||
}
|
||||
|
||||
// BUT we want to override the style with our custom NoSpin version
|
||||
vtkSmartPointer<vtkInteractorStyleNoSpin> style =
|
||||
vtkSmartPointer<vtkInteractorStyleNoSpin>::New();
|
||||
renderWindowInteractor->SetInteractorStyle(style);
|
||||
dv->m_Interactor->SetInteractorStyle(style);
|
||||
|
||||
// Must be rendered here in Vtk-6.0 or seg-fault //
|
||||
d->m_RenderWindow->Render();
|
||||
if (!std::getenv("CTEST_PROJECT_NAME")) {
|
||||
dv->m_RenderWindow->Render();
|
||||
}
|
||||
}
|
||||
|
||||
void Viewer::UninstallPipe() {
|
||||
}
|
||||
|
||||
void Viewer::Render() {
|
||||
if (d->m_RenderWindow)
|
||||
d->m_RenderWindow->Render();
|
||||
if (dv->m_RenderWindow)
|
||||
dv->m_RenderWindow->Render();
|
||||
}
|
||||
|
||||
vtkCameraOrientationWidget *
|
||||
@@ -137,7 +156,7 @@ Viewer::MakeCameraOrientationWidget(vtkRenderWindowInteractor *interactor,
|
||||
}
|
||||
|
||||
void Viewer::SetupGridButton() {
|
||||
if (!d->m_RenderWindow || !d->m_RenderWindow->GetInteractor()) return;
|
||||
if (!dv->m_RenderWindow || !dv->m_RenderWindow->GetInteractor()) return;
|
||||
|
||||
// Create procedural textures for the button using canvas
|
||||
vtkNew<vtkImageCanvasSource2D> canvas;
|
||||
@@ -170,9 +189,9 @@ void Viewer::SetupGridButton() {
|
||||
rep->SetButtonTexture(0, imgOff);
|
||||
rep->SetButtonTexture(1, imgOn);
|
||||
|
||||
d->m_GridButton = vtkSmartPointer<vtkButtonWidget>::New();
|
||||
d->m_GridButton->SetInteractor(d->m_RenderWindow->GetInteractor());
|
||||
d->m_GridButton->SetRepresentation(rep);
|
||||
dv->m_GridButton = vtkSmartPointer<vtkButtonWidget>::New();
|
||||
dv->m_GridButton->SetInteractor(dv->m_RenderWindow->GetInteractor());
|
||||
dv->m_GridButton->SetRepresentation(rep);
|
||||
|
||||
// Position it initially
|
||||
UpdateGridButtonPosition();
|
||||
@@ -184,7 +203,7 @@ void Viewer::SetupGridButton() {
|
||||
auto* v = static_cast<Viewer*>(clientdata);
|
||||
v->UpdateGridButtonPosition();
|
||||
});
|
||||
d->m_RenderWindow->AddObserver(vtkCommand::ModifiedEvent, resizeCallback);
|
||||
dv->m_RenderWindow->AddObserver(vtkCommand::ModifiedEvent, resizeCallback);
|
||||
|
||||
// Callback for state change
|
||||
vtkNew<vtkCallbackCommand> stateCallback;
|
||||
@@ -196,19 +215,19 @@ void Viewer::SetupGridButton() {
|
||||
v->SetGridVisible(r->GetState() == 1);
|
||||
});
|
||||
|
||||
d->m_GridButton->AddObserver(vtkCommand::StateChangedEvent, stateCallback);
|
||||
d->m_GridButton->On();
|
||||
dv->m_GridButton->AddObserver(vtkCommand::StateChangedEvent, stateCallback);
|
||||
dv->m_GridButton->On();
|
||||
|
||||
// Set initial state
|
||||
rep->SetState(GetGridVisible() ? 1 : 0);
|
||||
}
|
||||
|
||||
void Viewer::UpdateGridButtonPosition() {
|
||||
if (!d->m_GridButton || !d->m_RenderWindow) return;
|
||||
auto* rep = vtkTexturedButtonRepresentation2D::SafeDownCast(d->m_GridButton->GetRepresentation());
|
||||
if (!dv->m_GridButton || !dv->m_RenderWindow) return;
|
||||
auto* rep = vtkTexturedButtonRepresentation2D::SafeDownCast(dv->m_GridButton->GetRepresentation());
|
||||
if (!rep) return;
|
||||
|
||||
int *sz = d->m_RenderWindow->GetSize();
|
||||
int *sz = dv->m_RenderWindow->GetSize();
|
||||
if (sz[0] == 0 || sz[1] == 0) return; // Window not yet sized or hidden
|
||||
|
||||
int margin_rigth = 23;
|
||||
@@ -219,12 +238,15 @@ void Viewer::UpdateGridButtonPosition() {
|
||||
rep->PlaceWidget(bds);
|
||||
}
|
||||
|
||||
void Viewer::Start() { d->m_RenderWindow->GetInteractor()->Start(); }
|
||||
void Viewer::Start() {
|
||||
if (std::getenv("CTEST_PROJECT_NAME")) return;
|
||||
dv->m_RenderWindow->GetInteractor()->Start();
|
||||
}
|
||||
|
||||
vtkRenderWindow *Viewer::GetRenderWindow() { return d->m_RenderWindow; }
|
||||
vtkRenderWindow *Viewer::GetRenderWindow() { return dv->m_RenderWindow; }
|
||||
|
||||
vtkRenderWindowInteractor *Viewer::GetInteractor() {
|
||||
return d->m_RenderWindow->GetInteractor();
|
||||
return dv->m_RenderWindow->GetInteractor();
|
||||
}
|
||||
|
||||
} // namespace Vtk
|
||||
|
||||
Reference in New Issue
Block a user