/*========================================================================= Program: bbtk Module: $RCSfile: bbwxvtkViewer2D.cxx,v $ Language: C++ Date: $Date: 2008/03/03 13:14:27 $ Version: $Revision: 1.1 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ /** * \file * \brief */ #ifdef _USE_WXWIDGETS_ #include "bbwxvtkViewer2D.h" #include "bbwxvtkPackage.h" //#include #include "vtkInteractorStyleImage.h" #include "vtkCamera.h" #include "vtkRenderer.h" namespace bbwxvtk { BBTK_ADD_BLACK_BOX_TO_PACKAGE(wxvtk,Viewer2D); Viewer2DWidget::Viewer2DWidget(Viewer2D* box, wxWindow *parent) : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL), mBox(box) { wxPanel *panel = this; wxvtkrenderwindowinteractor = new wxVTKRenderWindowInteractor(panel,-1); wxvtkrenderwindowinteractor->UseCaptureMouseOn(); wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); sizer -> Add( wxvtkrenderwindowinteractor , 1, wxEXPAND, 0); panel -> SetSizer(sizer); panel -> SetAutoLayout(true); panel -> Layout(); backImageData = NULL; imageViewer = NULL; } //------------------------------------------------------------------------- Viewer2DWidget::~Viewer2DWidget() { delete wxvtkrenderwindowinteractor; // pourquoi pas wxvtkrenderwindowinteractor->Delete(); // JP } //------------------------------------------------------------------------- void Viewer2DWidget::Update() { if (imageViewer==NULL){ imageViewer = vtkImageViewer2::New(); imageViewer->SetupInteractor ( wxvtkrenderwindowinteractor ); } // Viewer2D* mbbtkViewer2D = (Viewer2D*)GetBlackBox(); // imageViewer->SetSliceOrientation(((Viewer2D*)GetBlackBox())->bbGetInputOrientation()); if ( backImageData != mBox->bbGetInputIn() ) { backImageData = mBox->bbGetInputIn(); imageViewer->SetInput( backImageData ); backImageData->Update(); int x1,x2,y1,y2,z1,z2; double spx,spy,spz; backImageData->GetSpacing(spx,spy,spz); backImageData->GetExtent (x1,x2,y1,y2,z1,z2); bbtkMessage("Output",2,"Viewer2D '"<bbGetName()<<"' - Image :"<GetRenderer()->GetActiveCamera(); camera->SetViewUp ( spx*0, -spy*1, spz*0); camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, -spz*10000000); camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0); camera->ComputeViewPlaneNormal(); camera->SetParallelScale( spx*(x2-x1)/2.0 ); // imageViewer->GetRenderer()->ResetCamera(x1,x2,y1,y2,z1,z2); } if (backImageData!=NULL) { int z = mBox->bbGetInputSlice(); int ext[6]; backImageData->GetWholeExtent(ext); if (z=ext[5]) { z=ext[5]-1; } // LG : SetZSlice does not exist anymore in vtk 5 ! #if (VTK_MAJOR_VERSION >= 5) imageViewer->SetSlice( z ); #else imageViewer->SetZSlice( z ); #endif } wxvtkrenderwindowinteractor->Render(); // wxvtkrenderwindowinteractor->Refresh(); // Refresh(); } //-------------------------------------------------------------------------- //------------------------------------------------------------------------- //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- BBTK_USER_BLACK_BOX_IMPLEMENTATION(Viewer2D,bbtk::WxBlackBox); void Viewer2D::Process() { ((Viewer2DWidget*)bbGetOutputWidget())->Update(); bbSetOutputOut( bbGetInputSlice() ); } /** * \brief Create wxWidget . * * */ void Viewer2D::CreateWidget() { bbtkDebugMessageInc("Core",9,"Viewer2D::CreateWidget()"<Update(); bbSetOutputWidget(w); bbtkDebugDecTab("Core",9); } }//namespace bbtk #endif