+/*
+# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+# pour la Santé)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+# Previous Authors : Laurent Guigues, Jean-Pierre Roux
+# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+#
+# This software is governed by the CeCILL-B license under French law and
+# abiding by the rules of distribution of free software. You can use,
+# modify and/ or redistribute the software under the terms of the CeCILL-B
+# license as circulated by CEA, CNRS and INRIA at the following URL
+# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+# or in the file LICENSE.txt.
+#
+# As a counterpart to the access to the source code and rights to copy,
+# modify and redistribute granted by the license, users are provided only
+# with a limited warranty and the software's author, the holder of the
+# economic rights, and the successive licensors have only limited
+# liability.
+#
+# The fact that you are presently reading this means that you have had
+# knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------
+*/
#include <creaImageIOWxViewer.h>
-#include <creaImageIOSystem.h>
+
#include <fstream>
#include <vtkCamera.h>
#include <vtkRenderer.h>
#include <vtkImageData.h>
-#include <creawxVTKRenderWindowInteractor.h>
#include <creaMessageManager.h>
#include <stdio.h>
#include <time.h>
//=====================================================================
+ class wxThreadEED3
+ {
+ public:
+ void Delete() { printf("EED wxThreadEED3::Delete() \n"); }
+ int Run() { printf("EED wxThreadEED3::Run() \n"); return 0;}
+ void Pause() { printf("EED wxThreadEED3::Pause() \n"); }
+ void Create() { printf("EED wxThreadEED3::Create() \n"); }
+ bool IsAlive() { printf("EED wxThreadEED3::IsAlive() \n"); return false; }
+ bool TestDestroy() { printf("EED wxThreadEED3::TestDestroy() \n"); return false; }
+ int GetCurrentId() { printf("EED wxThreadEED3::GetCurrentId() \n"); return -999; }
+ };
+
+
//=====================================================================
+//EED 2018-08-20
+// class WxViewerPlayer: public wxThreadEED3
class WxViewerPlayer: public wxThread
{
public:
size)
{
wxMutexLocker lock(mMutex);
- GimmickDebugMessage(6,"WxViewer::WxViewer"
- <<std::endl);
+ GimmickDebugMessage(6,"WxViewer::WxViewer" <<std::endl);
- mNeedRefresh = false;
+ mNeedRefresh = false;
mLastImageShown = NULL;
// previewer
- mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1);
+ mInteractor = new crea::wxVTKRenderWindowInteractor(this,-1);
mInteractor->UseCaptureMouseOn();
mViewer = vtkImageViewer2::New();
mViewer->SetupInteractor ( mInteractor );
- mCurrent = 0;
- mPlayer = 0;
+ mCurrent = 0;
+ mPlayer = NULL;
// Grid to place checkbox and slider
mflexSizer = new wxFlexGridSizer(1,2,1,1);
WxViewer::~WxViewer()
{
wxMutexLocker lock(mMutex);
- GimmickDebugMessage(6,"WxViewer::~WxViewer"
- <<std::endl);
+ GimmickDebugMessage(6,"WxViewer::~WxViewer"<<std::endl);
// TO DO : desallocate cleanly
if(mPlayer)
{
GimmickDebugMessage(6,"WxViewer::SetImageVector"<<std::endl);
imagePointers=pointers;
- mslide->SetMax(pointers.size());
+ mslide->SetMax((int)pointers.size());
+ mslide->SetMin(1);
// Refresh don't work, TO MODIFY
mslide->Refresh();
mslide->ClearTicks();
void WxViewer::ShowNextImage()
{
-
-
- mMutex.Unlock();
+ mMutex.Unlock();
wxMutexLocker lock(mMutex);
-
GimmickMessage(2,"WxViewer::ShowNextImage() "
<<mCurrent+1<<"/"
mNeedRefresh = true;
mLastImageShown = currIm;
}
- mCurrent++;
- }
- else
- {
+ mCurrent++;
+ } else {
mCurrent = 0;
//ImagePointerHolder* iph=imagePointers[mCurrent];
boost::shared_ptr<ImagePointerHolder> iph = imagePointers[mCurrent];
mLastImageShown = currIm;
}
mCurrent++;
- }
- }
+ } // if mCurrent
+ } // if imagePointers
}
//================================================================
<<std::endl);
if (im==0) return;
+//EED 2017-01-01 Migration VTK7
+#if VTK_MAJOR_VERSION <= 5
mViewer->SetInput(im);
+#else
+ mViewer->SetInputData(im);
+#endif
mViewer->SetSlice( 0 );
int x1,x2,y1,y2,z1,z2;
double spx,spy,spz;
+//EED 2017-01-01 Migration VTK7
+#if VTK_MAJOR_VERSION <= 5
im->Update();
+#else
+ // ...
+#endif
+
//std::cout << "in WxViewer::ShowImage PrintSelf() =";
//im->PrintSelf(std::cout, vtkIndent(2));
im->GetSpacing(spx,spy,spz);
//im->GetExtent (x1,x2,y1,y2,z1,z2); // JPR
+
+
+//EED 2017-01-01 Migration VTK7
+#if VTK_MAJOR_VERSION <= 5
im->GetWholeExtent (x1,x2,y1,y2,z1,z2);
+#else
+ im->GetExtent (x1,x2,y1,y2,z1,z2);
+#endif
+
+
/*
std::cout << "in WxViewer::ShowImage GetWholeExtent ext =";
std::cout << " [x1]=" << x1;
mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
mViewer->GetRenderer()->ResetCamera();
+
+ //EED 21 mars 2012 FLIP problem ..PLOP..
+ vtkCamera *camera =mViewer->GetRenderer()->GetActiveCamera();
+ camera->SetViewUp ( 0 , -1 , 0 );
+ camera->SetPosition ((x1+x2)/2 , (y1+y2)/2 , -10000);
+ camera->SetFocalPoint ((x1+x2)/2 , (y1+y2)/2 , 0 );
+ camera->SetParallelScale( (x2-x1)/3.0 );
+
+
double bounds[6];
mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
//================================================================
bool WxViewer::RefreshIfNecessary()
{
- if (mNeedRefresh)
- {
- GimmickDebugMessage(10,"WxViewer : Refreshing"<<std::endl);
-
- mInteractor->Render();
- mNeedRefresh = false;
- return true;
- }
+ if (mNeedRefresh==true)
+ {
+ GimmickDebugMessage(10,"WxViewer : Refreshing"<<std::endl);
+ mInteractor->Render();
+ mNeedRefresh = false;
+ return true;
+ }
return false;
}
//================================================================
void WxViewer::StopPlayer()
{
wxMutexLocker lock(mMutex);
- if (mPlayer==0 ) return;
+ if (mPlayer==NULL ) return;
mPlayer->Delete();
- mPlayer=0;
+ mPlayer=NULL;
mMutex.Unlock();
}
//================================================================
if(mcheck->IsChecked())
{
// wxMutexLocker lock(mMutex);
- if (mPlayer != 0) return;
+ if (mPlayer != NULL) return;
mPlayer = new WxViewerPlayer(this);
mPlayer->Create();
mPlayer->Run();
- }
- else
- {
+ } else {
ShowNextImage();
- }
+ } // if
}
//================================================================
{
mPlayer->Pause();
mPlayer->Delete();
- mPlayer = 0;
+ mPlayer = NULL;
}
StartPlayer();
}
void WxViewer::OnSlide(wxCommandEvent &Event)
{
- mCurrent = mslide->GetValue();
+ mCurrent = mslide->GetValue() -1;
StartPlayer();
}
//================================================================