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 //=========================================================================
58 //----------------------------------------------------------------------------
59 void ColorLayerImageViewManager::SetwxVtkBaseView(int id, wxVtkBaseView *baseview)
63 int size =_colorLayerImageViewLst.size();
64 if ( (id>=0) && (id<=size) )
66 if (_colorLayerImageViewLst[id]==NULL)
68 _colorLayerImageViewLst[id] = new ColorLayerImageView();
70 _colorLayerImageViewLst[id]->SetwxVtkBaseView(baseview);
77 wxVtkBaseView* ColorLayerImageViewManager::GetwxVtkBaseView(int id)
79 return _colorLayerImageViewLst[id]->GetwxVtkBaseView();
83 //----------------------------------------------------------------------------
84 void ColorLayerImageViewManager::SetX2(int x2)
86 int i, size=_colorLayerImageViewLst.size();
89 if (_colorLayerImageViewLst[i]!=NULL)
91 _colorLayerImageViewLst[i]->SetX2( x2 );
96 //----------------------------------------------------------------------------
97 void ColorLayerImageViewManager::SetY2(int y2)
99 int i, size=_colorLayerImageViewLst.size();
102 if (_colorLayerImageViewLst[i]!=NULL)
104 _colorLayerImageViewLst[i]->SetY2( y2 );
110 //----------------------------------------------------------------------------
111 void ColorLayerImageViewManager::SetZ2(int z2)
113 int i, size=_colorLayerImageViewLst.size();
116 if (_colorLayerImageViewLst[i]!=NULL)
118 _colorLayerImageViewLst[i]->SetZ2( z2 );
126 //----------------------------------------------------------------------------
127 int ColorLayerImageViewManager::GetX()
130 int i, size=_colorLayerImageViewLst.size();
133 if (_colorLayerImageViewLst[i]!=NULL)
135 result = _colorLayerImageViewLst[i]->GetX();
141 //----------------------------------------------------------------------------
142 int ColorLayerImageViewManager::GetY()
145 int i, size=_colorLayerImageViewLst.size();
148 if (_colorLayerImageViewLst[i]!=NULL)
150 result = _colorLayerImageViewLst[i]->GetY();
158 //----------------------------------------------------------------------------
159 int ColorLayerImageViewManager::GetZ() // virtual
162 int i, size=_colorLayerImageViewLst.size();
165 if (_colorLayerImageViewLst[i]!=NULL)
167 result = _colorLayerImageViewLst[i]->GetZ();
173 //----------------------------------------------------------------------------
174 void ColorLayerImageViewManager::SetBaseColors(std::vector<double> & base_color)
176 int i, size=_colorLayerImageViewLst.size();
179 if (_colorLayerImageViewLst[i]!=NULL)
181 _colorLayerImageViewLst[i]->SetBaseColors( base_color );
186 //----------------------------------------------------------------------------
187 void ColorLayerImageViewManager::SetBaseTransparence(std::vector<double> & base_transparence)
189 int i, size=_colorLayerImageViewLst.size();
192 if (_colorLayerImageViewLst[i]!=NULL)
194 _colorLayerImageViewLst[i]->SetBaseTransparence( base_transparence );
199 //----------------------------------------------------------------------------
200 void ColorLayerImageViewManager::SetRangeForColorBar(std::vector<double> &range)
202 int i, size=_colorLayerImageViewLst.size();
205 if (_colorLayerImageViewLst[i]!=NULL)
207 _colorLayerImageViewLst[i]->SetRangeForColorBar( range );
212 //----------------------------------------------------------------------------
213 void ColorLayerImageViewManager::SetColorBarPosition(std::vector<int> &colorbarposition)
215 int i, size=_colorLayerImageViewLst.size();
218 if (_colorLayerImageViewLst[i]!=NULL)
220 _colorLayerImageViewLst[i]->SetColorBarPosition( colorbarposition );
228 //----------------------------------------------------------------------------
229 double ColorLayerImageViewManager::GetBaseColors(unsigned int index)
232 int i, size=_colorLayerImageViewLst.size();
235 if (_colorLayerImageViewLst[i]!=NULL)
237 result = _colorLayerImageViewLst[i]->GetBaseColors( index );
243 //----------------------------------------------------------------------------
244 void ColorLayerImageViewManager::SetGreyLevelBoundaries(std::vector<double> & grey_level_boundary)
246 int i, size=_colorLayerImageViewLst.size();
249 if (_colorLayerImageViewLst[i]!=NULL)
251 _colorLayerImageViewLst[i]->SetGreyLevelBoundaries( grey_level_boundary );
256 //----------------------------------------------------------------------------
257 double ColorLayerImageViewManager::GetGreyLevelBoundaries(unsigned int index)
260 int i, size=_colorLayerImageViewLst.size();
263 if (_colorLayerImageViewLst[i]!=NULL)
265 result = _colorLayerImageViewLst[i]->GetGreyLevelBoundaries( index );
271 //----------------------------------------------------------------------------
272 void ColorLayerImageViewManager::SetPlainOrGradientColor(bool color_type)
274 int i, size=_colorLayerImageViewLst.size();
277 if (_colorLayerImageViewLst[i]!=NULL)
279 _colorLayerImageViewLst[i]->SetPlainOrGradientColor( color_type );
284 //----------------------------------------------------------------------------
285 int ColorLayerImageViewManager::GetBaseColorNb()
288 int i, size=_colorLayerImageViewLst.size();
291 if (_colorLayerImageViewLst[i]!=NULL)
293 result = _colorLayerImageViewLst[i]->GetBaseColorNb();
299 //----------------------------------------------------------------------------
300 void ColorLayerImageViewManager::Refresh()
302 int i, size=_colorLayerImageViewLst.size();
305 if (_colorLayerImageViewLst[i]!=NULL)
307 _colorLayerImageViewLst[i]->Refresh();
312 //----------------------------------------------------------------------------
313 void ColorLayerImageViewManager::onThreshold()
315 int i, size=_colorLayerImageViewLst.size();
318 if (_colorLayerImageViewLst[i]!=NULL)
320 _colorLayerImageViewLst[i]->onThreshold();
325 //----------------------------------------------------------------------------
326 void ColorLayerImageViewManager::onThresholdChange()
328 int i, size=_colorLayerImageViewLst.size();
331 if (_colorLayerImageViewLst[i]!=NULL)
333 _colorLayerImageViewLst[i]->onThresholdChange();
338 //----------------------------------------------------------------------------
339 void ColorLayerImageViewManager::onThresholdRemove()
341 int i, size=_colorLayerImageViewLst.size();
344 if (_colorLayerImageViewLst[i]!=NULL)
346 _colorLayerImageViewLst[i]->onThresholdRemove();
351 //----------------------------------------------------------------------------
352 void ColorLayerImageViewManager::onThresholdInterpolation(bool interpolation)
354 int i, size=_colorLayerImageViewLst.size();
357 if (_colorLayerImageViewLst[i]!=NULL)
359 _colorLayerImageViewLst[i]->onThresholdInterpolation( interpolation );
364 //----------------------------------------------------------------------------
365 void ColorLayerImageViewManager::SetSliceFixDynamic( bool fixdyn )
367 int i, size=_colorLayerImageViewLst.size();
370 if (_colorLayerImageViewLst[i]!=NULL)
372 _colorLayerImageViewLst[i]->SetSliceFixDynamic( fixdyn );
377 //----------------------------------------------------------------------------
378 void ColorLayerImageViewManager::onThresholdChangeOpacity( int opacity)
380 int i, size=_colorLayerImageViewLst.size();
383 if (_colorLayerImageViewLst[i]!=NULL)
385 _colorLayerImageViewLst[i]->onThresholdChangeOpacity( opacity );
390 //----------------------------------------------------------------------------
391 void ColorLayerImageViewManager::SetImageStep1( vtkImageData* img )
393 int i, size=_colorLayerImageViewLst.size();
396 if (_colorLayerImageViewLst[i]!=NULL)
398 _colorLayerImageViewLst[i]->SetImage( img );
403 //----------------------------------------------------------------------------
404 void ColorLayerImageViewManager::SetImageStep2( vtkImageData* img )
408 // if (_histogramMinMaxLevel!=NULL)
410 // _histogramMinMaxLevel->Configure( img );
412 // _colorLayerImageViewManager->SetImage( img );
413 double spcOriginalLayer[3];
414 int dimensionOriginalLayer[3];
416 int dimensionBase[3];
418 this->GetSpcOriginalLayer(0,spcOriginalLayer);
419 this->GetDimensionOriginalLayer(0,dimensionOriginalLayer);
420 this->GetSpcBase(0,spcBase);
421 this->GetDimensionBase(0,dimensionBase);
422 // if (_sl_SliceImageX!=NULL)
424 // _sl_SliceImageX->SetRange( 0 , dimensionOriginalLayer[0] );
425 // _sl_SliceImageY->SetRange( 0 , dimensionOriginalLayer[1] );
426 // _sl_SliceImageZ->SetRange( 0 , dimensionOriginalLayer[2] );
429 if ( (spcOriginalLayer[0]!=spcBase[0]) ||
430 (spcOriginalLayer[1]!=spcBase[1]) ||
431 (spcOriginalLayer[2]!=spcBase[2]) ||
432 (dimensionOriginalLayer[0]!=dimensionBase[0]) ||
433 (dimensionOriginalLayer[1]!=dimensionBase[1]) ||
434 (dimensionOriginalLayer[2]!=dimensionBase[2])
438 int typeOfTransformation = _fitting_mode;
439 // // In case of the option is set to create a dialog box.
440 // if (_fitting_mode == -1)
442 // bool transformOkDlg;
443 // wxString msg = _T("The image resolution of both images are not compatible. How do you want to tranform it? ");
444 // wxDlgTransformByDimensionBySpacingByPixel dlg;
445 // dlg.GetTransformType(this , spcBase , spcOriginalLayer , dimensionBase ,dimensionOriginalLayer ,msg,typeOfTransformation,transformOkDlg);
446 // // CM Reset the default value (Pixel i.e. 3) if the dialog box returned an inappropriate value.
447 // if (transformOkDlg == false)
449 // typeOfTransformation = 3;
452 // typeOfTransformation = _fitting_mode;
453 // } // _fitting_mode -1
456 if (typeOfTransformation == 1) // Adapt spacing
458 newSpc[0] = spcBase[0] * dimensionBase[0] / dimensionOriginalLayer[0];
459 newSpc[1] = spcBase[1] * dimensionBase[1] / dimensionOriginalLayer[1];
460 newSpc[2] = spcBase[2] * dimensionBase[2] / dimensionOriginalLayer[2];
463 if (typeOfTransformation == 2) // keep spacing of the Layer Image
465 newSpc[0] = spcOriginalLayer[0];
466 newSpc[1] = spcOriginalLayer[1];
467 newSpc[2] = spcOriginalLayer[2];
470 if (typeOfTransformation == 3) // Use the spacing of the Base Image
472 newSpc[0] = spcBase[0];
473 newSpc[1] = spcBase[1];
474 newSpc[2] = spcBase[2];
476 this->SetNewSpacingLayer(newSpc);
478 newSpc[0] = spcOriginalLayer[0];
479 newSpc[1] = spcOriginalLayer[1];
480 newSpc[2] = spcOriginalLayer[2];
481 } // spc !_spcBase dim!__dimBase
482 this->SetNewSpacingLayer(newSpc);
490 this->onThresholdRemove( );
497 //----------------------------------------------------------------------------
498 vtkImageData* ColorLayerImageViewManager::GetImageChangeInformation(int id)
500 if (_colorLayerImageViewLst[id]!=NULL)
502 return _colorLayerImageViewLst[id]->GetImage( );
507 //----------------------------------------------------------------------------
508 vtkLookupTable* ColorLayerImageViewManager::GetLookupTable(int id)
510 if (_colorLayerImageViewLst[id]!=NULL)
512 return _colorLayerImageViewLst[id]->GetThresholdTable( );
517 //----------------------------------------------------------------------------
518 void ColorLayerImageViewManager::GetDimensionBase(int id,int *dim)
520 if (_colorLayerImageViewLst[id]!=NULL)
522 _colorLayerImageViewLst[id]->GetDimensionBase( dim );
526 //----------------------------------------------------------------------------
527 void ColorLayerImageViewManager::GetSpcBase(int id,double *spc)
529 if (_colorLayerImageViewLst[id]!=NULL)
531 _colorLayerImageViewLst[id]->GetSpcBase( spc );
535 //----------------------------------------------------------------------------
536 void ColorLayerImageViewManager::GetDimensionOriginalLayer(int id,int *dim)
538 if (_colorLayerImageViewLst[id]!=NULL)
540 _colorLayerImageViewLst[id]->GetDimensionOriginalLayer( dim );
544 //----------------------------------------------------------------------------
545 void ColorLayerImageViewManager::GetSpcOriginalLayer(int id,double *spc)
547 if (_colorLayerImageViewLst[id]!=NULL)
549 _colorLayerImageViewLst[id]->GetSpcOriginalLayer( spc );
553 //----------------------------------------------------------------------------
554 void ColorLayerImageViewManager::SetNewSpacingLayer(double *spc)
556 int i, size=_colorLayerImageViewLst.size();
559 if (_colorLayerImageViewLst[i]!=NULL)
561 _colorLayerImageViewLst[i]->SetNewSpacingLayer( spc );
566 //----------------------------------------------------------------------------
567 void ColorLayerImageViewManager::SetActive(bool active)
572 //----------------------------------------------------------------------------
573 bool ColorLayerImageViewManager::GetActive()
578 //----------------------------------------------------------------------------
579 void ColorLayerImageViewManager::SetFittingMode( int fitting_mode )
581 _fitting_mode = fitting_mode;
584 //----------------------------------------------------------------------------
585 int ColorLayerImageViewManager::GetFittingMode()
587 return _fitting_mode;