Program: bbtk
Module: $RCSfile: bbwxvtkViewer2D.cxx,v $
Language: C++
- Date: $Date: 2008/03/03 13:14:27 $
- Version: $Revision: 1.1 $
+ Date: $Date: 2008/05/14 12:32:26 $
+ Version: $Revision: 1.6 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
Viewer2DWidget::~Viewer2DWidget()
{
+ // delete wxvtkrenderwindowinteractor;
+ // pourquoi pas wxvtkrenderwindowinteractor->Delete(); // JP
+ // LG : because it has been allocated with operator new not method ::New
+ // we want to force its destruction without taking care of vtk ref counting
+ // on the contrary the following vtk objects are deleted with vtk Delete
+ // std::cout << "Viewer2DWidget::~Viewer2DWidget()" << std::endl;
+ if (backImageData)
+ {
+ // backImageData->UnRegister(NULL);
+ }
+ if (imageViewer)
+ {
+ imageViewer->Delete();
+ }
delete wxvtkrenderwindowinteractor;
-// pourquoi pas wxvtkrenderwindowinteractor->Delete(); // JP
+ // std::cout << "Viewer2DWidget::~Viewer2DWidget() OK" << std::endl;
}
//-------------------------------------------------------------------------
- void Viewer2DWidget::Update()
+ void Viewer2DWidget::UpdateView()
{
+ // std::cout << "Viewer2DWidget::UpdateView() "<<mBox->bbGetFullName() << std::endl;
+ // std::cout << "slice="<<mBox->bbGetInputSlice()<<std::endl;
- if (imageViewer==NULL){
- imageViewer = vtkImageViewer2::New();
- imageViewer->SetupInteractor ( wxvtkrenderwindowinteractor );
- }
+ if ( (mBox->bbGetInputIn()!=NULL) &&
+ (backImageData != mBox->bbGetInputIn()) )
+ {
+ if (imageViewer==NULL)
+ {
+ imageViewer = vtkImageViewer2::New();
+ imageViewer->SetupInteractor ( wxvtkrenderwindowinteractor );
+ }
+
+ // std::cout << "V2D b="<<backImageData<<std::endl;
- // Viewer2D* mbbtkViewer2D = (Viewer2D*)GetBlackBox();
+ if (backImageData)
+ {
+ // std::cout << "V2D r1="<<backImageData->GetReferenceCount()<<std::endl;
+ // backImageData->DebugOn();
+ // backImageData->UnRegister(NULL);
+ }
+ backImageData = mBox->bbGetInputIn();
-
- // imageViewer->SetSliceOrientation(((Viewer2D*)GetBlackBox())->bbGetInputOrientation());
-
- if ( backImageData != mBox->bbGetInputIn() )
- {
- backImageData = mBox->bbGetInputIn();
+ // std::cout << "V2D r2="<<backImageData->GetReferenceCount()<<std::endl;
+ // backImageData->DebugOn();
+ // backImageData->PrintSelf(std::cout,0);
+
+ // backImageData->Register(NULL);
imageViewer->SetInput( backImageData );
backImageData->Update();
+
int x1,x2,y1,y2,z1,z2;
double spx,spy,spz;
backImageData->GetSpacing(spx,spy,spz);
// imageViewer->GetRenderer()->ResetCamera(x1,x2,y1,y2,z1,z2);
}
-
- if (backImageData!=NULL)
+ // std::cout << "update"<<std::endl;
+ // std::cout << "OW = "<< mBox->bbGetWindow() << std::endl;
+ // std::cout << "CW = "<< mBox->bbGetContainingWindow() << std::endl;
+ // std::cout << "Sh = "<< mBox->bbIsShown() << std::endl;
+
+ // mBox->bbIsShown() is necessary to be sure that the wxWindow is already
+ // created and displayed.
+ // Else when slice != 0 we get an X Window System error with wxGTK
+ if ((imageViewer!=NULL)&&
+ (backImageData!=NULL)&&
+ (mBox->bbIsShown()))
{
int z = mBox->bbGetInputSlice();
-
+ // std::cout << "slice = "<<z<<std::endl;
int ext[6];
backImageData->GetWholeExtent(ext);
+ // std::cout << "ext = "<<ext[4]<<" - "<<ext[5]<<std::endl;
if (z<ext[4]) { z=ext[4]; }
if (z>=ext[5]) { z=ext[5]-1; }
// LG : SetZSlice does not exist anymore in vtk 5 !
+ /*
+#if (VTK_MAJOR_VERSION >= 5)
+ imageViewer->SetSlice( 0 );
+#else
+ imageViewer->SetZSlice( 0 );
+#endif
+
+
+
+ wxvtkrenderwindowinteractor->Render();
+ */
#if (VTK_MAJOR_VERSION >= 5)
imageViewer->SetSlice( z );
#else
imageViewer->SetZSlice( z );
#endif
+ wxvtkrenderwindowinteractor->Render();
}
+
- wxvtkrenderwindowinteractor->Render();
- // wxvtkrenderwindowinteractor->Refresh();
-
- // Refresh();
+
+ //Refresh();
}
//--------------------------------------------------------------------------
- BBTK_USER_BLACK_BOX_IMPLEMENTATION(Viewer2D,bbtk::WxBlackBox);
+ BBTK_BLACK_BOX_IMPLEMENTATION(Viewer2D,bbtk::WxBlackBox);
void Viewer2D::Process()
{
- ((Viewer2DWidget*)bbGetOutputWidget())->Update();
+ // LG : Bug when initial slice != 0 on first time
+ // (see wxvtk/appli/ExampleSimpleSlicer)
+ // I think there is a problem with rendering before window
+ // has been reparented ... we have to check this
+
+ // ((Viewer2DWidget*)bbGetOutputWidget())->UpdateView();
bbSetOutputOut( bbGetInputSlice() );
}
bbtkDebugMessageInc("Core",9,"Viewer2D::CreateWidget()"<<std::endl);
Viewer2DWidget* w = new Viewer2DWidget(this,bbGetWxParent());
- w->Update();
bbSetOutputWidget(w);
bbtkDebugDecTab("Core",9);
}
+ // This callback is necessary to get actual processing of the view
+ // when window is shown
+ void Viewer2D::bbUserOnShow()
+ {
+ ((Viewer2DWidget*)bbGetOutputWidget())->UpdateView();
+ }
+
+
}//namespace bbtk
#endif