#include "wxVtkPageView.h" #include "vtkViewImage2DWithTracer.h" #include "vtkViewImage2D.h" #include "vtkViewImage3D.h" #include "vtkViewImage.h" #include "vtkView.h" #include "wxVTKRenderWindowInteractor.h" #include #include #include #include #include wxVtkPageView::wxVtkPageView (wxWindow* parent, int id, const wxPoint& pos, const wxSize& size, long styl, const wxString& title) : wxPanel (parent, id, pos, size, styl, title) { long style = wxWANTS_CHARS | wxNO_FULL_REPAINT_ON_RESIZE; // | wxSUNKEN_BORDER; m_ViewInteractor1 = new wxVTKRenderWindowInteractor (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style, wxT("")); m_ViewInteractor2 = new wxVTKRenderWindowInteractor (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style, wxT("")); m_ViewInteractor3 = new wxVTKRenderWindowInteractor (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style, wxT("")); m_ViewInteractor4 = new wxVTKRenderWindowInteractor (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style, wxT("")); m_View1 = vtkViewImage2DWithTracer::New(); m_View2 = vtkViewImage2DWithTracer::New(); m_View3 = vtkViewImage2DWithTracer::New(); m_View4 = vtkViewImage3D::New(); vtkRenderer* rend1 = vtkRenderer::New(); vtkRenderer* rend2 = vtkRenderer::New(); vtkRenderer* rend3 = vtkRenderer::New(); vtkRenderer* rend4 = vtkRenderer::New(); m_View1->SetRenderWindow (m_ViewInteractor1->GetRenderWindow()); m_View2->SetRenderWindow (m_ViewInteractor2->GetRenderWindow()); m_View3->SetRenderWindow (m_ViewInteractor3->GetRenderWindow()); m_View4->SetRenderWindow (m_ViewInteractor4->GetRenderWindow()); m_View1->SetRenderer (rend1); m_View2->SetRenderer (rend2); m_View3->SetRenderer (rend3); m_View4->SetRenderer (rend4); rend1->Delete(); rend2->Delete(); rend3->Delete(); rend4->Delete(); this->SetProperties(); this->DoLayout(); } wxVtkPageView::~wxVtkPageView() { /* m_View1->RemoveAllViewToObserve(); m_View2->RemoveAllViewToObserve(); m_View3->RemoveAllViewToObserve(); m_View4->RemoveAllViewToObserve(); */ m_View1->Detach(); m_View2->Detach(); m_View3->Detach(); m_View4->Detach(); m_ViewInteractor1->Delete(); m_ViewInteractor2->Delete(); m_ViewInteractor3->Delete(); m_ViewInteractor4->Delete(); m_View1->Delete(); m_View2->Delete(); m_View3->Delete(); m_View4->Delete(); } BEGIN_EVENT_TABLE(wxVtkPageView, wxPanel) //EVT_PAINT(wxVtkPageView::OnPaintEvent) END_EVENT_TABLE() /* void wxVtkPageView::OnPaintEvent(wxPaintEvent& event) { } */ void wxVtkPageView::SetProperties() { m_View1->SetBackgroundColor (0.0,0.0,0.0); m_View2->SetBackgroundColor (0.0,0.0,0.0); m_View3->SetBackgroundColor (0.0,0.0,0.0); m_View1->SetInteractionStyle (vtkViewImage2D::SELECT_INTERACTION); m_View2->SetInteractionStyle (vtkViewImage2D::SELECT_INTERACTION); m_View3->SetInteractionStyle (vtkViewImage2D::SELECT_INTERACTION); m_View1->SetOrientation( vtkViewImage::AXIAL_ID); m_View2->SetOrientation( vtkViewImage::CORONAL_ID); m_View3->SetOrientation( vtkViewImage::SAGITTAL_ID); m_View1->ScalarBarVisibilityOn(); m_View2->ScalarBarVisibilityOn(); m_View3->ScalarBarVisibilityOn(); m_View4->ScalarBarVisibilityOn(); double textcolor[3]={0.0,0.0,0.0}; m_View4->SetTextColor (textcolor); m_View4->SetRenderingModeToPlanar(); m_View1->AddChild (m_View2); m_View1->AddChild (m_View4); m_View2->AddChild (m_View3); m_View3->AddChild (m_View1); } void wxVtkPageView::DoLayout() { wxFlexGridSizer* sizerViews = new wxFlexGridSizer (2,2,0,0); //wxGridSizer* sizerViews = new wxGridSizer (2,2,0,0); sizerViews->AddGrowableCol (0,1); sizerViews->AddGrowableCol (1,1); sizerViews->AddGrowableRow (0,1); sizerViews->AddGrowableRow (1,1); sizerViews->Add (m_ViewInteractor1, 1, wxALL|wxEXPAND,0); sizerViews->Add (m_ViewInteractor2, 1, wxALL|wxEXPAND,0); sizerViews->Add (m_ViewInteractor3, 1, wxALL|wxEXPAND,0); sizerViews->Add (m_ViewInteractor4, 1, wxALL|wxEXPAND,0); this->SetSizer(sizerViews); this->Fit(); this->SetAutoLayout (true); this->Layout(); } void wxVtkPageView::SetInput(vtkImageData* image, const bool& reset) { m_View1->SetImage(image); m_View2->SetImage(image); m_View3->SetImage(image); //typedef itk::Image ImageType; typedef itk::Image ImageType; typedef itk::Image LightImageType; itk::VTKImageToImageFilter::Pointer vtktoitk = itk::VTKImageToImageFilter::New(); vtktoitk->SetInput (image); itk::RescaleIntensityImageFilter::Pointer rescaler= itk::RescaleIntensityImageFilter::New(); rescaler->SetOutputMinimum ( 0 ); rescaler->SetOutputMaximum ( 65535 ); rescaler->SetInput ( vtktoitk->GetOutput() ); try { rescaler->Update(); } catch (itk::ExceptionObject &e) { std::cerr << e; return; } itk::ImageToVTKImageFilter::Pointer myConverter = itk::ImageToVTKImageFilter::New(); myConverter->SetInput( rescaler->GetOutput() ); myConverter->Update(); vtkImageData* input2 = vtkImageData::New(); input2->DeepCopy ( myConverter->GetOutput() ); m_View4->SetShift ( rescaler->GetShift() ); m_View4->SetScale ( rescaler->GetScale() ); m_View4->SetImage(input2); if( reset ) { m_View1->SyncResetPosition(); m_View1->SyncResetWindowLevel(); } input2->Delete(); } vtkImageData* wxVtkPageView::GetInput() const { return m_View1->GetImage(); } void wxVtkPageView::OnFullScreen (unsigned int id) { switch (id) { case vtkViewImage::AXIAL_ID : m_ViewInteractor1->Show (true); m_ViewInteractor2->Show (false); m_ViewInteractor3->Show (false); m_ViewInteractor4->Show (false); break; case vtkViewImage::CORONAL_ID : m_ViewInteractor1->Show (false); m_ViewInteractor2->Show (true); m_ViewInteractor3->Show (false); m_ViewInteractor4->Show (false); break; case vtkViewImage::SAGITTAL_ID : m_ViewInteractor1->Show (false); m_ViewInteractor2->Show (false); m_ViewInteractor3->Show (true); m_ViewInteractor4->Show (false); break; case vtkViewImage::NB_PLAN_IDS : m_ViewInteractor1->Show (false); m_ViewInteractor2->Show (false); m_ViewInteractor3->Show (false); m_ViewInteractor4->Show (true); break; default : break; } this->Layout(); } void wxVtkPageView::NoFullScreen (void) { m_ViewInteractor1->Show (true); m_ViewInteractor2->Show (true); m_ViewInteractor3->Show (true); m_ViewInteractor4->Show (true); this->Layout(); } void wxVtkPageView::SetInteractionStyle (int i) { m_View1->SetInteractionStyle (i); m_View2->SetInteractionStyle (i); m_View3->SetInteractionStyle (i); } void wxVtkPageView::SetInteractionStyleToSelector() { m_View1->SetInteractionStyle (vtkViewImage2D::SELECT_INTERACTION); m_View2->SetInteractionStyle (vtkViewImage2D::SELECT_INTERACTION); m_View3->SetInteractionStyle (vtkViewImage2D::SELECT_INTERACTION); } void wxVtkPageView::SetInteractionStyleToWindowLevel() { m_View1->SetInteractionStyle (vtkViewImage2D::WINDOW_LEVEL_INTERACTION); m_View2->SetInteractionStyle (vtkViewImage2D::WINDOW_LEVEL_INTERACTION); m_View3->SetInteractionStyle (vtkViewImage2D::WINDOW_LEVEL_INTERACTION); } void wxVtkPageView::SetInteractionStyleToZoom() { m_View1->SetInteractionStyle (vtkViewImage2D::ZOOM_INTERACTION); m_View2->SetInteractionStyle (vtkViewImage2D::ZOOM_INTERACTION); m_View3->SetInteractionStyle (vtkViewImage2D::ZOOM_INTERACTION); } void wxVtkPageView::SetInteractionStyleToFullPage() { m_View1->SetInteractionStyle (vtkViewImage2D::FULL_PAGE_INTERACTION); m_View2->SetInteractionStyle (vtkViewImage2D::FULL_PAGE_INTERACTION); m_View3->SetInteractionStyle (vtkViewImage2D::FULL_PAGE_INTERACTION); } void wxVtkPageView::SetRenderingModeToMPR() { m_View4->SetRenderingModeToPlanar(); } void wxVtkPageView::SetRenderingModeToVR() { m_View4->SetRenderingModeToVR(); } void wxVtkPageView::SetLookupTable (vtkLookupTable* lut) { if( !lut ) { return; } m_View1->SyncSetLookupTable (lut); } void wxVtkPageView::Render() { m_View1->Render(); m_View2->Render(); m_View3->Render(); m_View4->Render(); } wxVTKRenderWindowInteractor* wxVtkPageView::GetDisplayedView (void) const { if (m_ViewInteractor1->IsShown() && m_ViewInteractor2->IsShown() && m_ViewInteractor3->IsShown() && m_ViewInteractor4->IsShown()) return NULL; if (m_ViewInteractor1->IsShown()) return m_ViewInteractor1; if (m_ViewInteractor2->IsShown()) return m_ViewInteractor2; if (m_ViewInteractor3->IsShown()) return m_ViewInteractor3; if (m_ViewInteractor4->IsShown()) return m_ViewInteractor4; return NULL; }