X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fwxvtk%2Fsrc%2FbbwxvtkViewer2D.cxx;h=26a1f9fbd222d4c7b4b43e48b29399229aadf092;hb=98e18224b83c6955a804d79d4e7083626ea8afcd;hp=e366505a15fe33dcccd1db67d19d5397b5b1cd95;hpb=ae4497a19b957df306e688ce3f69c3687323668e;p=bbtk.git diff --git a/packages/wxvtk/src/bbwxvtkViewer2D.cxx b/packages/wxvtk/src/bbwxvtkViewer2D.cxx index e366505..26a1f9f 100644 --- a/packages/wxvtk/src/bbwxvtkViewer2D.cxx +++ b/packages/wxvtk/src/bbwxvtkViewer2D.cxx @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbwxvtkViewer2D.cxx,v $ Language: C++ - Date: $Date: 2008/12/03 09:34:41 $ - Version: $Revision: 1.26 $ + Date: $Date: 2008/12/15 13:13:49 $ + Version: $Revision: 1.33 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -21,7 +21,8 @@ */ -#ifdef _USE_WXWIDGETS_ +#ifdef USE_WXWIDGETS +#ifdef USE_VTK #include "bbwxvtkViewer2D.h" @@ -39,13 +40,34 @@ namespace bbwxvtk { - BBTK_ADD_BLACK_BOX_TO_PACKAGE(wxvtk,Viewer2D); + + //-------------------------------------------------------------------------- + class Viewer2DWidget : public wxPanel + { + public: + Viewer2DWidget(Viewer2D* box, wxWindow *parent); + ~Viewer2DWidget(); + void UpdateView(); + vtkRenderer *GetRenderer(); + private: + bool mFirstTime; + Viewer2D *mBox; + wxvtkImageViewer2 *imageViewer; + vtkImageData *backImageData; + vtkImageData *mDefaultImage; + wxVTKRenderWindowInteractor *wxvtkrenderwindowinteractor; + bool mUpdateCamera; + + vtkImplicitPlaneWidget * maPlane1, * maPlane2, * mbPlane1, * mbPlane2; + }; + Viewer2DWidget::Viewer2DWidget(Viewer2D* box, wxWindow *parent) : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL), + mFirstTime(true), mBox(box) { wxPanel *panel = this; @@ -53,13 +75,13 @@ namespace bbwxvtk wxvtkrenderwindowinteractor = new wxVTKRenderWindowInteractor(panel,-1); wxvtkrenderwindowinteractor->UseCaptureMouseOn(); - imageViewer = vtkImageViewer2::New(); + imageViewer = wxvtkImageViewer2::New(); imageViewer->SetSlice( 1 ); imageViewer->SetupInteractor ( wxvtkrenderwindowinteractor ); mDefaultImage = vtkImageData::New(); int dim[3]; - dim[0] = dim[1] = 32 ; + dim[0] = dim[1] = 256 ; dim[2] = 2; mDefaultImage->SetDimensions ( dim ); mDefaultImage->SetSpacing(1,1,1); @@ -74,10 +96,22 @@ namespace bbwxvtk mDefaultImage->SetScalarComponentFromFloat(i,j,k,0,0); for (int i=0;iSetScalarComponentFromFloat(dim[0]-i-1,i,0,0,255); - mDefaultImage->SetScalarComponentFromFloat(i,i,1,0,255); - } + { + /* + mDefaultImage->SetScalarComponentFromFloat(i,0,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,dim[1]-1,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(0,i,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(dim[0]-1,i,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,0,1,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,dim[1]-1,1,0,255); + mDefaultImage->SetScalarComponentFromFloat(0,i,1,0,255); + mDefaultImage->SetScalarComponentFromFloat(dim[0]-1,i,1,0,255); + */ + mDefaultImage->SetScalarComponentFromFloat(i,i,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,dim[1]-i-1,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,i,1,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,dim[1]-i-1,1,0,255); + } backImageData = mDefaultImage; imageViewer->SetInput( backImageData ); @@ -94,7 +128,8 @@ namespace bbwxvtk // wxvtkrenderwindowinteractor->Render(); // imageViewer->GetRenderer()->ResetCameraClippingRange(); - + imageViewer->GetRenderer()->SetBackground(0.1,0.1,0.2); + } //------------------------------------------------------------------------- @@ -127,38 +162,56 @@ namespace bbwxvtk void Viewer2DWidget::UpdateView() { - // std::cout << "Viewer2DWidget::UpdateView() "<bbGetFullName() << std::endl; + // std::cout << "Viewer2DWidget::UpdateView() " << std::endl; // std::cout << "slice="<bbGetInputSlice()<bbGetInputIn() == NULL ) && ( backImageData != mDefaultImage ) ) { + // + // std::cout << "** Viewer2DWidget::UpdateView() : NULL Input (reset)" <bbGetInputIn() != NULL ) && - (backImageData != mBox->bbGetInputIn()) ) + (( mBox->bbGetInputStatus("In") != bbtk::UPTODATE ) || + ( mFirstTime)) + ) + //(backImageData != mBox->bbGetInputIn()) ) { + + // std::cout << "** Viewer2DWidget::UpdateView() : Input changed" <bbGetInputIn(); backImageData->Update(); imageViewer->SetInput( backImageData ); mUpdateCamera = true; - std::cout << "Viewer2DWidget::UpdateView() passe par 2" << std::endl; } if (mUpdateCamera) { + // std::cout << "** Viewer2DWidget::UpdateView() : Update Camera" + // <GetSpacing(spx,spy,spz); backImageData->GetExtent (x1,x2,y1,y2,z1,z2); + double *range = backImageData->GetScalarRange(); + imageViewer->SetColorWindow(range[1] - range[0]); + imageViewer->SetColorLevel(0.5 * (range[1] + range[0])); + + imageViewer->GetRenderer()->ResetCamera(); + double bounds[6]; + imageViewer->GetRenderer()->ComputeVisiblePropBounds(bounds); + imageViewer->GetRenderer()->ResetCameraClippingRange(bounds); + // bbtkMessage("Output",2,"Viewer2D '"<bbGetName()<<"' - Image :"<GetRenderer()->GetActiveCamera(); camera->SetViewUp ( spx*0, -spy*1, spz*0 ); @@ -170,8 +223,17 @@ namespace bbwxvtk // // imageViewer->GetRenderer()->ResetCamera(x1,x2,y1,y2,z1,z2); mUpdateCamera = false; - std::cout << "Viewer2DWidget::UpdateView() passe par 3" << std::endl; - } + // std::cout << "Viewer2DWidget::UpdateView() passe par 3" << std::endl; + imageViewer->SetColorWindow(512); + imageViewer->SetColorLevel(256); + */ + /* + for (int i=0;i<10;i++) + for (int j=0;j<10;j++) + std::cout << mBox->bbGetInputIn()->GetScalarComponentAsFloat(i,j,0,0) + << std::endl; + */ + } // std::cout << "OW = "<< mBox->bbGetWindow() << std::endl; // std::cout << "CW = "<< mBox->bbGetContainingWindow() << std::endl; @@ -179,7 +241,7 @@ namespace bbwxvtk int orientation = mBox->bbGetInputOrientation(); if (orientation<0 || orientation>2) { - bbtkMessage("Output", 2, "Viewer2D : Orientation was not 0< <2 "<bbIsShown() is necessary to be sure that the wxWindow is already @@ -193,9 +255,12 @@ namespace bbwxvtk // std::cout << "slice = "<GetWholeExtent(ext); - - // std::cout << "ext = "<SetSliceOrientation (orientation); - // imageViewer->SetSlice( z ); - - // wxvtkrenderwindowinteractor->Update(); - // wxvtkrenderwindowinteractor->Render(); - // imageViewer->GetRenderer()->ResetCameraClippingRange(); - - //xvtkrenderwindowinteractor->Refresh(); + wxvtkrenderwindowinteractor->Refresh(); wxvtkrenderwindowinteractor->Render(); - imageViewer->GetRenderer()->ResetCameraClippingRange(); - imageViewer->SetSliceOrientation (orientation); - imageViewer->SetSlice( z ); - -std::cout << "Viewer2DWidget::UpdateView() passe par 4" << std::endl; -/* - #if (VTK_MAJOR_VERSION >= 5) - imageViewer->SetSlice( z ); - #else - imageViewer->SetZSlice( z ); - #endif -*/ -// imageViewer->SetSliceOrientation (orientation); -// imageViewer->SetSlice( z ); - - //imageViewer->UpdateDisplayExtent(); - } + bbtkDebugMessage("Output",3,"Viewer2D : slice = "<SetSliceOrientation (orientation); + imageViewer->SetSlice( z ); - -} + } + + + } vtkRenderer * Viewer2DWidget::GetRenderer() @@ -263,30 +307,22 @@ std::cout << "Viewer2DWidget::UpdateView() passe par 4" << std::endl; //-------------------------------------------------------------------------- - - + BBTK_ADD_BLACK_BOX_TO_PACKAGE(wxvtk,Viewer2D); BBTK_BLACK_BOX_IMPLEMENTATION(Viewer2D,bbtk::WxBlackBox); void Viewer2D::Process() { - // LG : Bug on Linux (wxGTK) when initial slice != 0 on first time - // (see wxvtk/bbs/appli/ExampleSimpleSlicer) - // I think there is a problem with rendering before window - // has been reparented ... we have to check this - -std::cout << "Viewer2D::Process() passe par 5" << std::endl; - - Viewer2DWidget* w = (Viewer2DWidget*)bbGetOutputWidget(); - + // std::cout << "Viewer2D::Process" << std::endl; + // std::cout << "In="<UpdateView(); - bbSetOutputRenderer( ((Viewer2DWidget*)bbGetOutputWidget())->GetRenderer() ); - } - bbSetOutputOut( bbGetInputSlice() ); - + { + w->UpdateView(); + } + bbSetOutputOut( bbGetInputSlice() ); + } @@ -295,34 +331,24 @@ std::cout << "Viewer2D::Process() passe par 6" << std::endl; bbSetInputIn(NULL); bbSetInputSlice(0); bbSetOutputWidget(0); - bbSetInputOrientation(0); + bbSetOutputRenderer(0); + bbSetInputOrientation(2); } - /** - * \brief Create wxWidget . - * - * - */ + void Viewer2D::CreateWidget(wxWindow* parent) { - std::cout << "Viewer2D::CreateWidget() passe par 7" << std::endl; - Viewer2DWidget* w = new Viewer2DWidget(this,parent);//bbGetWxParent()); - + Viewer2DWidget* w = new Viewer2DWidget(this,parent); + w->UpdateView(); bbSetOutputWidget(w); + bbSetOutputRenderer( ((Viewer2DWidget*)bbGetOutputWidget())->GetRenderer() ); + } - // This callback is *no more* - // necessary to get actual processing of the view - // when window is shown - void Viewer2D::OnShowWidget() - { - // ((Viewer2DWidget*)bbGetOutputWidget())->Update(); - // ((Viewer2DWidget*)bbGetOutputWidget())->UpdateView(); - } - }//namespace bbtk #endif +#endif