Program: bbtk
Module: $RCSfile: bbwxvtkViewer2D.cxx,v $
Language: C++
- Date: $Date: 2008/04/18 12:59:53 $
- Version: $Revision: 1.3 $
+ Date: $Date: 2008/05/09 10:39:47 $
+ Version: $Revision: 1.4 $
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
+ if (backImageData)
+ {
+ backImageData->UnRegister(NULL);
+ }
+ if (imageViewer)
+ {
+ imageViewer->Delete();
+ }
delete wxvtkrenderwindowinteractor;
-// pourquoi pas wxvtkrenderwindowinteractor->Delete(); // JP
}
//-------------------------------------------------------------------------
void Viewer2DWidget::UpdateView()
{
-
- if (imageViewer==NULL){
- imageViewer = vtkImageViewer2::New();
- imageViewer->SetupInteractor ( wxvtkrenderwindowinteractor );
- }
-
- // Viewer2D* mbbtkViewer2D = (Viewer2D*)GetBlackBox();
-
-
-
- // imageViewer->SetSliceOrientation(((Viewer2D*)GetBlackBox())->bbGetInputOrientation());
-
-
- if ( backImageData != mBox->bbGetInputIn() )
+ std::cout << "Viewer2DWidget::UpdateView()" << std::endl;
+ std::cout << "slice="<<mBox->bbGetInputSlice()<<std::endl;
+ if ( (mBox->bbGetInputIn()!=NULL) &&
+ (backImageData != mBox->bbGetInputIn()) )
{
+ if (imageViewer==NULL)
+ {
+ imageViewer = vtkImageViewer2::New();
+ imageViewer->SetupInteractor ( wxvtkrenderwindowinteractor );
+ }
+
+ if (backImageData) backImageData->UnRegister(NULL);
backImageData = mBox->bbGetInputIn();
+ backImageData->Register(NULL);
imageViewer->SetInput( backImageData );
backImageData->Update();
+
int x1,x2,y1,y2,z1,z2;
double spx,spy,spz;
backImageData->GetSpacing(spx,spy,spz);
// 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 ((backImageData!=NULL)&&(mBox->bbIsShown()))
+ if ((imageViewer!=NULL)&&
+ (backImageData!=NULL)&&
+ (mBox->bbIsShown()))
{
int z = mBox->bbGetInputSlice();
- // std::cout << "slice = "<<z<<std::endl;
+ std::cout << "slice = "<<z<<std::endl;
int ext[6];
backImageData->GetWholeExtent(ext);
- // std::cout << "ext = "<<ext[4]<<" - "<<ext[5]<<std::endl;
+ 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();
void Viewer2D::Process()
{
+ // 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() );
}