1 /*# ---------------------------------------------------------------------
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
5 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
6 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
7 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9 # This software is governed by the CeCILL-B license under French law and
10 # abiding by the rules of distribution of free software. You can use,
11 # modify and/ or redistribute the software under the terms of the CeCILL-B
12 # license as circulated by CEA, CNRS and INRIA at the following URL
13 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
14 # or in the file LICENSE.txt.
16 # As a counterpart to the access to the source code and rights to copy,
17 # modify and redistribute granted by the license, users are provided only
18 # with a limited warranty and the software's author, the holder of the
19 # economic rights, and the successive licensors have only limited
22 # The fact that you are presently reading this means that you have had
23 # knowledge of the CeCILL-B license and that you accept its terms.
24 # ------------------------------------------------------------------------ */
28 * \author Eduardo Davila and Claire Mouton.
29 * \brief Class bbtk::ThresholdImageView.
30 * \date September 2012
33 #include "ColorLayerImageViewManager.h"
37 //=========================================================================
38 //=========================================================================
39 //=========================================================================
40 //=========================================================================
41 ColorLayerImageViewManager::ColorLayerImageViewManager( )
45 _colorLayerImageViewLst.push_back(NULL); // 0
46 _colorLayerImageViewLst.push_back(NULL); // 1
47 _colorLayerImageViewLst.push_back(NULL); // 2
50 //=========================================================================
51 ColorLayerImageViewManager::~ColorLayerImageViewManager()
54 //=========================================================================
56 //----------------------------------------------------------------------------
57 void ColorLayerImageViewManager::ResetRefresh()
59 int i,size =_colorLayerImageViewLst.size();
62 _colorLayerImageViewLst[i]->ResetRefresh();
66 //----------------------------------------------------------------------------
67 void ColorLayerImageViewManager::SetwxVtkBaseView(int id, wxVtkBaseView *baseview)
71 int size =_colorLayerImageViewLst.size();
72 if ( (id>=0) && (id<=size) )
74 if (_colorLayerImageViewLst[id]==NULL)
76 _colorLayerImageViewLst[id] = new ColorLayerImageView();
78 _colorLayerImageViewLst[id]->SetwxVtkBaseView(baseview);
85 wxVtkBaseView* ColorLayerImageViewManager::GetwxVtkBaseView(int id)
87 return _colorLayerImageViewLst[id]->GetwxVtkBaseView();
91 //----------------------------------------------------------------------------
92 void ColorLayerImageViewManager::SetX2(int x2)
94 int i, size=_colorLayerImageViewLst.size();
97 if (_colorLayerImageViewLst[i]!=NULL)
99 _colorLayerImageViewLst[i]->SetX2( x2 );
104 //----------------------------------------------------------------------------
105 void ColorLayerImageViewManager::SetY2(int y2)
107 int i, size=_colorLayerImageViewLst.size();
110 if (_colorLayerImageViewLst[i]!=NULL)
112 _colorLayerImageViewLst[i]->SetY2( y2 );
118 //----------------------------------------------------------------------------
119 void ColorLayerImageViewManager::SetZ2(int z2)
121 int i, size=_colorLayerImageViewLst.size();
124 if (_colorLayerImageViewLst[i]!=NULL)
126 _colorLayerImageViewLst[i]->SetZ2( z2 );
134 //----------------------------------------------------------------------------
135 int ColorLayerImageViewManager::GetX()
138 int i, size=_colorLayerImageViewLst.size();
141 if (_colorLayerImageViewLst[i]!=NULL)
143 result = _colorLayerImageViewLst[i]->GetX();
149 //----------------------------------------------------------------------------
150 int ColorLayerImageViewManager::GetY()
153 int i, size=_colorLayerImageViewLst.size();
156 if (_colorLayerImageViewLst[i]!=NULL)
158 result = _colorLayerImageViewLst[i]->GetY();
166 //----------------------------------------------------------------------------
167 int ColorLayerImageViewManager::GetZ() // virtual
170 int i, size=_colorLayerImageViewLst.size();
173 if (_colorLayerImageViewLst[i]!=NULL)
175 result = _colorLayerImageViewLst[i]->GetZ();
181 //----------------------------------------------------------------------------
182 void ColorLayerImageViewManager::SetBaseColors(std::vector<double> & base_color)
184 int i, size=_colorLayerImageViewLst.size();
187 if (_colorLayerImageViewLst[i]!=NULL)
189 _colorLayerImageViewLst[i]->SetBaseColors( base_color );
194 //----------------------------------------------------------------------------
195 void ColorLayerImageViewManager::SetBaseTransparence(std::vector<double> & base_transparence)
197 int i, size=_colorLayerImageViewLst.size();
200 if (_colorLayerImageViewLst[i]!=NULL)
202 _colorLayerImageViewLst[i]->SetBaseTransparence( base_transparence );
207 //----------------------------------------------------------------------------
208 void ColorLayerImageViewManager::SetRangeForColorBar(std::vector<double> &range)
210 int i, size=_colorLayerImageViewLst.size();
213 if (_colorLayerImageViewLst[i]!=NULL)
215 _colorLayerImageViewLst[i]->SetRangeForColorBar( range );
220 //----------------------------------------------------------------------------
221 void ColorLayerImageViewManager::SetColorBarPosition(std::vector<int> &colorbarposition)
223 int i, size=_colorLayerImageViewLst.size();
226 if (_colorLayerImageViewLst[i]!=NULL)
228 _colorLayerImageViewLst[i]->SetColorBarPosition( colorbarposition );
236 //----------------------------------------------------------------------------
237 double ColorLayerImageViewManager::GetBaseColors(unsigned int index)
240 int i, size=_colorLayerImageViewLst.size();
243 if (_colorLayerImageViewLst[i]!=NULL)
245 result = _colorLayerImageViewLst[i]->GetBaseColors( index );
251 //----------------------------------------------------------------------------
252 void ColorLayerImageViewManager::SetGreyLevelBoundaries(std::vector<double> & grey_level_boundary)
254 int i, size=_colorLayerImageViewLst.size();
257 if (_colorLayerImageViewLst[i]!=NULL)
259 _colorLayerImageViewLst[i]->SetGreyLevelBoundaries( grey_level_boundary );
264 //----------------------------------------------------------------------------
265 double ColorLayerImageViewManager::GetGreyLevelBoundaries(unsigned int index)
268 int i, size=_colorLayerImageViewLst.size();
271 if (_colorLayerImageViewLst[i]!=NULL)
273 result = _colorLayerImageViewLst[i]->GetGreyLevelBoundaries( index );
279 //----------------------------------------------------------------------------
280 void ColorLayerImageViewManager::SetPlainOrGradientColor(bool color_type)
282 int i, size=_colorLayerImageViewLst.size();
285 if (_colorLayerImageViewLst[i]!=NULL)
287 _colorLayerImageViewLst[i]->SetPlainOrGradientColor( color_type );
292 //----------------------------------------------------------------------------
293 int ColorLayerImageViewManager::GetBaseColorNb()
296 int i, size=_colorLayerImageViewLst.size();
299 if (_colorLayerImageViewLst[i]!=NULL)
301 result = _colorLayerImageViewLst[i]->GetBaseColorNb();
307 //----------------------------------------------------------------------------
308 void ColorLayerImageViewManager::Refresh()
310 int i, size=_colorLayerImageViewLst.size();
313 if (_colorLayerImageViewLst[i]!=NULL)
315 _colorLayerImageViewLst[i]->Refresh();
320 //----------------------------------------------------------------------------
321 void ColorLayerImageViewManager::onThreshold()
323 int i, size=_colorLayerImageViewLst.size();
326 if (_colorLayerImageViewLst[i]!=NULL)
328 _colorLayerImageViewLst[i]->onThreshold();
333 //----------------------------------------------------------------------------
334 void ColorLayerImageViewManager::onThresholdChange()
336 int i, size=_colorLayerImageViewLst.size();
339 if (_colorLayerImageViewLst[i]!=NULL)
341 _colorLayerImageViewLst[i]->onThresholdChange();
346 //----------------------------------------------------------------------------
347 void ColorLayerImageViewManager::onThresholdRemove()
349 int i, size=_colorLayerImageViewLst.size();
352 if (_colorLayerImageViewLst[i]!=NULL)
354 _colorLayerImageViewLst[i]->onThresholdRemove();
359 //----------------------------------------------------------------------------
360 void ColorLayerImageViewManager::onThresholdInterpolation(bool interpolation)
362 int i, size=_colorLayerImageViewLst.size();
365 if (_colorLayerImageViewLst[i]!=NULL)
367 _colorLayerImageViewLst[i]->onThresholdInterpolation( interpolation );
372 //----------------------------------------------------------------------------
373 void ColorLayerImageViewManager::SetSliceFixDynamic( bool fixdyn )
375 int i, size=_colorLayerImageViewLst.size();
378 if (_colorLayerImageViewLst[i]!=NULL)
380 _colorLayerImageViewLst[i]->SetSliceFixDynamic( fixdyn );
385 //----------------------------------------------------------------------------
386 void ColorLayerImageViewManager::onThresholdChangeOpacity( int opacity)
388 int i, size=_colorLayerImageViewLst.size();
391 if (_colorLayerImageViewLst[i]!=NULL)
393 _colorLayerImageViewLst[i]->onThresholdChangeOpacity( opacity );
398 //----------------------------------------------------------------------------
399 void ColorLayerImageViewManager::SetImageStep1( vtkImageData* img )
401 int i, size=_colorLayerImageViewLst.size();
404 if (_colorLayerImageViewLst[i]!=NULL)
406 _colorLayerImageViewLst[i]->SetImage( img );
411 //----------------------------------------------------------------------------
412 void ColorLayerImageViewManager::SetImageStep2( vtkImageData* img )
416 // if (_histogramMinMaxLevel!=NULL)
418 // _histogramMinMaxLevel->Configure( img );
420 // _colorLayerImageViewManager->SetImage( img );
421 double spcOriginalLayer[3];
422 int dimensionOriginalLayer[3];
424 int dimensionBase[3];
426 this->GetSpcOriginalLayer(0,spcOriginalLayer);
427 this->GetDimensionOriginalLayer(0,dimensionOriginalLayer);
428 this->GetSpcBase(0,spcBase);
429 this->GetDimensionBase(0,dimensionBase);
430 // if (_sl_SliceImageX!=NULL)
432 // _sl_SliceImageX->SetRange( 0 , dimensionOriginalLayer[0] );
433 // _sl_SliceImageY->SetRange( 0 , dimensionOriginalLayer[1] );
434 // _sl_SliceImageZ->SetRange( 0 , dimensionOriginalLayer[2] );
437 if ( (spcOriginalLayer[0]!=spcBase[0]) ||
438 (spcOriginalLayer[1]!=spcBase[1]) ||
439 (spcOriginalLayer[2]!=spcBase[2]) ||
440 (dimensionOriginalLayer[0]!=dimensionBase[0]) ||
441 (dimensionOriginalLayer[1]!=dimensionBase[1]) ||
442 (dimensionOriginalLayer[2]!=dimensionBase[2])
446 int typeOfTransformation = _fitting_mode;
447 // // In case of the option is set to create a dialog box.
448 // if (_fitting_mode == -1)
450 // bool transformOkDlg;
451 // wxString msg = _T("The image resolution of both images are not compatible. How do you want to tranform it? ");
452 // wxDlgTransformByDimensionBySpacingByPixel dlg;
453 // dlg.GetTransformType(this , spcBase , spcOriginalLayer , dimensionBase ,dimensionOriginalLayer ,msg,typeOfTransformation,transformOkDlg);
454 // // CM Reset the default value (Pixel i.e. 3) if the dialog box returned an inappropriate value.
455 // if (transformOkDlg == false)
457 // typeOfTransformation = 3;
460 // typeOfTransformation = _fitting_mode;
461 // } // _fitting_mode -1
464 if (typeOfTransformation == 1) // Adapt spacing
466 newSpc[0] = spcBase[0] * dimensionBase[0] / dimensionOriginalLayer[0];
467 newSpc[1] = spcBase[1] * dimensionBase[1] / dimensionOriginalLayer[1];
468 newSpc[2] = spcBase[2] * dimensionBase[2] / dimensionOriginalLayer[2];
471 if (typeOfTransformation == 2) // keep spacing of the Layer Image
473 newSpc[0] = spcOriginalLayer[0];
474 newSpc[1] = spcOriginalLayer[1];
475 newSpc[2] = spcOriginalLayer[2];
478 if (typeOfTransformation == 3) // Use the spacing of the Base Image
480 newSpc[0] = spcBase[0];
481 newSpc[1] = spcBase[1];
482 newSpc[2] = spcBase[2];
484 this->SetNewSpacingLayer(newSpc);
486 newSpc[0] = spcOriginalLayer[0];
487 newSpc[1] = spcOriginalLayer[1];
488 newSpc[2] = spcOriginalLayer[2];
489 } // spc !_spcBase dim!__dimBase
490 this->SetNewSpacingLayer(newSpc);
498 this->onThresholdRemove( );
504 //----------------------------------------------------------------------------
505 vtkImageData* ColorLayerImageViewManager::GetImageChangeInformation(int id)
507 if (_colorLayerImageViewLst[id]!=NULL)
509 return _colorLayerImageViewLst[id]->GetImage( );
514 //----------------------------------------------------------------------------
515 vtkLookupTable* ColorLayerImageViewManager::GetLookupTable(int id)
517 if (_colorLayerImageViewLst[id]!=NULL)
519 return _colorLayerImageViewLst[id]->GetThresholdTable( );
524 //----------------------------------------------------------------------------
525 void ColorLayerImageViewManager::GetDimensionBase(int id,int *dim)
527 if (_colorLayerImageViewLst[id]!=NULL)
529 _colorLayerImageViewLst[id]->GetDimensionBase( dim );
533 //----------------------------------------------------------------------------
534 void ColorLayerImageViewManager::GetSpcBase(int id,double *spc)
536 if (_colorLayerImageViewLst[id]!=NULL)
538 _colorLayerImageViewLst[id]->GetSpcBase( spc );
542 //----------------------------------------------------------------------------
543 void ColorLayerImageViewManager::GetDimensionOriginalLayer(int id,int *dim)
545 if (_colorLayerImageViewLst[id]!=NULL)
547 _colorLayerImageViewLst[id]->GetDimensionOriginalLayer( dim );
551 //----------------------------------------------------------------------------
552 void ColorLayerImageViewManager::GetSpcOriginalLayer(int id,double *spc)
554 if (_colorLayerImageViewLst[id]!=NULL)
556 _colorLayerImageViewLst[id]->GetSpcOriginalLayer( spc );
560 //----------------------------------------------------------------------------
561 void ColorLayerImageViewManager::SetNewSpacingLayer(double *spc)
563 int i, size=_colorLayerImageViewLst.size();
566 if (_colorLayerImageViewLst[i]!=NULL)
568 _colorLayerImageViewLst[i]->SetNewSpacingLayer( spc );
573 //----------------------------------------------------------------------------
574 void ColorLayerImageViewManager::SetActive(bool active)
579 //----------------------------------------------------------------------------
580 bool ColorLayerImageViewManager::GetActive()
585 //----------------------------------------------------------------------------
586 void ColorLayerImageViewManager::SetFittingMode( int fitting_mode )
588 _fitting_mode = fitting_mode;
591 //----------------------------------------------------------------------------
592 int ColorLayerImageViewManager::GetFittingMode()
594 return _fitting_mode;