attach a widget (not working well yet)
This commit is contained in:
@@ -23,162 +23,137 @@
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <vtkSmartPointer.h>
|
||||
#include <vtkRendererCollection.h>
|
||||
#include <vtkRenderWindowInteractor.h>
|
||||
#include <vtkRendererCollection.h>
|
||||
#include <vtkSmartPointer.h>
|
||||
|
||||
#include <vtkTextProperty.h>
|
||||
#include <vtkAxesActor.h>
|
||||
#include <vtkCamera.h>
|
||||
#include <vtkInteractorStyleTrackballCamera.h>
|
||||
#include <vtkObjectFactory.h>
|
||||
#include <vtkTextProperty.h>
|
||||
|
||||
#include "uLibVtkViewer.h"
|
||||
|
||||
// Custom interactor style: disables spin/inertia so the scene only
|
||||
// rotates while the mouse is actively being moved with the button held.
|
||||
class vtkInteractorStyleNoSpin : public vtkInteractorStyleTrackballCamera
|
||||
{
|
||||
class vtkInteractorStyleNoSpin : public vtkInteractorStyleTrackballCamera {
|
||||
public:
|
||||
static vtkInteractorStyleNoSpin *New();
|
||||
vtkTypeMacro(vtkInteractorStyleNoSpin, vtkInteractorStyleTrackballCamera);
|
||||
static vtkInteractorStyleNoSpin *New();
|
||||
vtkTypeMacro(vtkInteractorStyleNoSpin, vtkInteractorStyleTrackballCamera);
|
||||
|
||||
// Override: when the left button is released, immediately stop any
|
||||
// ongoing motion (rotation/spin) so no momentum is carried over.
|
||||
void OnLeftButtonUp() override
|
||||
{
|
||||
this->StopState();
|
||||
vtkInteractorStyleTrackballCamera::OnLeftButtonUp();
|
||||
}
|
||||
// Override: when the left button is released, immediately stop any
|
||||
// ongoing motion (rotation/spin) so no momentum is carried over.
|
||||
void OnLeftButtonUp() override {
|
||||
this->StopState();
|
||||
vtkInteractorStyleTrackballCamera::OnLeftButtonUp();
|
||||
}
|
||||
};
|
||||
vtkStandardNewMacro(vtkInteractorStyleNoSpin);
|
||||
|
||||
namespace uLib {
|
||||
namespace Vtk {
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///// VTK VIEWER //////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
Viewer::Viewer() :
|
||||
m_RenderWindow(vtkRenderWindow::New()),
|
||||
m_Renderer(vtkRenderer::New()),
|
||||
m_Annotation(vtkCornerAnnotation::New()),
|
||||
m_Marker(vtkOrientationMarkerWidget::New())
|
||||
{
|
||||
InstallPipe();
|
||||
Viewer::Viewer()
|
||||
: m_RenderWindow(vtkRenderWindow::New()), m_Renderer(vtkRenderer::New()),
|
||||
m_Annotation(vtkCornerAnnotation::New()),
|
||||
m_Marker(vtkOrientationMarkerWidget::New()) {
|
||||
InstallPipe();
|
||||
}
|
||||
|
||||
Viewer::~Viewer()
|
||||
{
|
||||
UninstallPipe();
|
||||
Viewer::~Viewer() {
|
||||
UninstallPipe();
|
||||
|
||||
m_Annotation->Delete();
|
||||
m_Marker->Delete();
|
||||
m_Renderer->Delete();
|
||||
m_RenderWindow->Delete();
|
||||
m_Annotation->Delete();
|
||||
m_Marker->Delete();
|
||||
m_Renderer->Delete();
|
||||
m_RenderWindow->Delete();
|
||||
}
|
||||
|
||||
void Viewer::InstallPipe()
|
||||
{
|
||||
m_RenderWindow->AddRenderer(m_Renderer);
|
||||
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
|
||||
vtkSmartPointer<vtkRenderWindowInteractor>::New();
|
||||
renderWindowInteractor->SetRenderWindow(m_RenderWindow);
|
||||
void Viewer::InstallPipe() {
|
||||
m_RenderWindow->AddRenderer(m_Renderer);
|
||||
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
|
||||
vtkSmartPointer<vtkRenderWindowInteractor>::New();
|
||||
renderWindowInteractor->SetRenderWindow(m_RenderWindow);
|
||||
|
||||
// Use a custom style with no spin/inertia
|
||||
vtkSmartPointer<vtkInteractorStyleNoSpin> style =
|
||||
vtkSmartPointer<vtkInteractorStyleNoSpin>::New();
|
||||
renderWindowInteractor->SetInteractorStyle(style);
|
||||
// Use a custom style with no spin/inertia
|
||||
vtkSmartPointer<vtkInteractorStyleNoSpin> style =
|
||||
vtkSmartPointer<vtkInteractorStyleNoSpin>::New();
|
||||
renderWindowInteractor->SetInteractorStyle(style);
|
||||
|
||||
// annotation //
|
||||
m_Annotation->GetTextProperty()->SetColor(1,1,1);
|
||||
m_Annotation->GetTextProperty()->SetFontFamilyToArial();
|
||||
m_Annotation->GetTextProperty()->SetOpacity(0.5);
|
||||
m_Annotation->SetMaximumFontSize(10);
|
||||
m_Annotation->SetText(0,"uLib VTK Viewer - OpenCMT all right reserved.");
|
||||
m_Renderer->AddViewProp(m_Annotation);
|
||||
// annotation //
|
||||
m_Annotation->GetTextProperty()->SetColor(1, 1, 1);
|
||||
m_Annotation->GetTextProperty()->SetFontFamilyToArial();
|
||||
m_Annotation->GetTextProperty()->SetOpacity(0.5);
|
||||
m_Annotation->SetMaximumFontSize(10);
|
||||
m_Annotation->SetText(0, "uLib VTK Viewer - OpenCMT all right reserved.");
|
||||
m_Renderer->AddViewProp(m_Annotation);
|
||||
|
||||
// orientation marker //
|
||||
vtkSmartPointer<vtkAxesActor> axes =
|
||||
vtkSmartPointer<vtkAxesActor>::New();
|
||||
m_Marker->SetInteractor(renderWindowInteractor);
|
||||
m_Marker->SetOrientationMarker(axes);
|
||||
m_Marker->SetViewport(0.0,0.0,0.2,0.2);
|
||||
m_Marker->SetEnabled(true);
|
||||
m_Marker->InteractiveOff();
|
||||
// orientation marker //
|
||||
vtkSmartPointer<vtkAxesActor> axes = vtkSmartPointer<vtkAxesActor>::New();
|
||||
m_Marker->SetInteractor(renderWindowInteractor);
|
||||
m_Marker->SetOrientationMarker(axes);
|
||||
m_Marker->SetViewport(0.0, 0.0, 0.2, 0.2);
|
||||
m_Marker->SetEnabled(true);
|
||||
m_Marker->InteractiveOff();
|
||||
|
||||
// Must be rendered here in Vtk-6.0 or seg-fault //
|
||||
m_RenderWindow->Render();
|
||||
// Must be rendered here in Vtk-6.0 or seg-fault //
|
||||
m_RenderWindow->Render();
|
||||
}
|
||||
|
||||
void Viewer::UninstallPipe()
|
||||
{
|
||||
m_Renderer->RemoveAllViewProps();
|
||||
m_Renderer->Clear();
|
||||
void Viewer::UninstallPipe() {
|
||||
m_Renderer->RemoveAllViewProps();
|
||||
m_Renderer->Clear();
|
||||
}
|
||||
|
||||
void Viewer::addProp(vtkProp *prop)
|
||||
{
|
||||
m_Renderer->AddActor(prop);
|
||||
m_Renderer->Render();
|
||||
void Viewer::addProp(vtkProp *prop) {
|
||||
m_Renderer->AddActor(prop);
|
||||
m_Renderer->Render();
|
||||
}
|
||||
|
||||
void Viewer::RemoveProp(vtkProp *prop)
|
||||
{
|
||||
m_Renderer->RemoveViewProp(prop);
|
||||
m_Renderer->Render();
|
||||
void Viewer::RemoveProp(vtkProp *prop) {
|
||||
m_Renderer->RemoveViewProp(prop);
|
||||
m_Renderer->Render();
|
||||
}
|
||||
|
||||
void Viewer::AddPuppet(Puppet &prop)
|
||||
{
|
||||
prop.ConnectRenderer(m_Renderer);
|
||||
m_Renderer->Render();
|
||||
void Viewer::AddPuppet(Puppet &prop) {
|
||||
prop.ConnectRenderer(m_Renderer);
|
||||
prop.ConnectInteractor(this->GetInteractor());
|
||||
m_Renderer->Render();
|
||||
}
|
||||
|
||||
void Viewer::RemovePuppet(Puppet &prop)
|
||||
{
|
||||
prop.DisconnectRenderer(m_Renderer);
|
||||
m_Renderer->Render();
|
||||
void Viewer::RemovePuppet(Puppet &prop) {
|
||||
prop.DisconnectRenderer(m_Renderer);
|
||||
m_Renderer->Render();
|
||||
}
|
||||
|
||||
void Viewer::Start()
|
||||
{
|
||||
m_RenderWindow->GetInteractor()->Start();
|
||||
void Viewer::Start() { m_RenderWindow->GetInteractor()->Start(); }
|
||||
|
||||
vtkCornerAnnotation *Viewer::GetAnnotation() { return m_Annotation; }
|
||||
|
||||
vtkRenderer *Viewer::GetRenderer() { return m_Renderer; }
|
||||
|
||||
vtkRenderWindowInteractor *Viewer::GetInteractor() {
|
||||
return m_RenderWindow->GetInteractor();
|
||||
}
|
||||
|
||||
vtkCornerAnnotation *Viewer::GetAnnotation()
|
||||
{
|
||||
return m_Annotation;
|
||||
void Viewer::Reset() {
|
||||
this->ZoomAuto();
|
||||
m_Renderer->Render();
|
||||
}
|
||||
|
||||
vtkRenderer *Viewer::GetRenderer()
|
||||
{
|
||||
return m_Renderer;
|
||||
void Viewer::ZoomAuto() {
|
||||
m_Renderer->ResetCameraClippingRange();
|
||||
m_Renderer->ResetCamera();
|
||||
}
|
||||
|
||||
vtkRenderWindowInteractor *Viewer::GetInteractor()
|
||||
{
|
||||
return m_RenderWindow->GetInteractor();
|
||||
}
|
||||
|
||||
void Viewer::Reset()
|
||||
{
|
||||
m_Renderer->ResetCameraClippingRange();
|
||||
m_Renderer->ResetCamera();
|
||||
m_Renderer->Render();
|
||||
}
|
||||
|
||||
|
||||
} // vtk
|
||||
} // uLib
|
||||
|
||||
} // namespace Vtk
|
||||
} // namespace uLib
|
||||
|
||||
Reference in New Issue
Block a user