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();
60 for ( i=0 ; i<size ; i++ )
62 printf("EED ColorLayerImageViewManager::ResetRefresh 1 %p \n", _colorLayerImageViewLst[i] );
63 if ( _colorLayerImageViewLst[i] !=NULL )
65 _colorLayerImageViewLst[i]->ResetRefresh();
67 printf("EED ColorLayerImageViewManager::ResetRefresh 2 \n");
71 //----------------------------------------------------------------------------
72 void ColorLayerImageViewManager::SetwxVtkBaseView(int id, wxVtkBaseView *baseview)
76 int size =_colorLayerImageViewLst.size();
77 if ( (id>=0) && (id<=size) )
79 if (_colorLayerImageViewLst[id]==NULL)
81 _colorLayerImageViewLst[id] = new ColorLayerImageView();
83 _colorLayerImageViewLst[id]->SetwxVtkBaseView(baseview);
90 wxVtkBaseView* ColorLayerImageViewManager::GetwxVtkBaseView(int id)
92 return _colorLayerImageViewLst[id]->GetwxVtkBaseView();
96 //----------------------------------------------------------------------------
97 void ColorLayerImageViewManager::SetX2(int x2)
99 int i, size=_colorLayerImageViewLst.size();
102 if (_colorLayerImageViewLst[i]!=NULL)
104 _colorLayerImageViewLst[i]->SetX2( x2 );
109 //----------------------------------------------------------------------------
110 void ColorLayerImageViewManager::SetY2(int y2)
112 int i, size=_colorLayerImageViewLst.size();
115 if (_colorLayerImageViewLst[i]!=NULL)
117 _colorLayerImageViewLst[i]->SetY2( y2 );
123 //----------------------------------------------------------------------------
124 void ColorLayerImageViewManager::SetZ2(int z2)
126 int i, size=_colorLayerImageViewLst.size();
129 if (_colorLayerImageViewLst[i]!=NULL)
131 _colorLayerImageViewLst[i]->SetZ2( z2 );
139 //----------------------------------------------------------------------------
140 int ColorLayerImageViewManager::GetX()
143 int i, size=_colorLayerImageViewLst.size();
146 if (_colorLayerImageViewLst[i]!=NULL)
148 result = _colorLayerImageViewLst[i]->GetX();
154 //----------------------------------------------------------------------------
155 int ColorLayerImageViewManager::GetY()
158 int i, size=_colorLayerImageViewLst.size();
161 if (_colorLayerImageViewLst[i]!=NULL)
163 result = _colorLayerImageViewLst[i]->GetY();
171 //----------------------------------------------------------------------------
172 int ColorLayerImageViewManager::GetZ() // virtual
175 int i, size=_colorLayerImageViewLst.size();
178 if (_colorLayerImageViewLst[i]!=NULL)
180 result = _colorLayerImageViewLst[i]->GetZ();
186 //----------------------------------------------------------------------------
187 void ColorLayerImageViewManager::SetBaseColors(std::vector<double> & base_color)
189 int i, size=_colorLayerImageViewLst.size();
192 if (_colorLayerImageViewLst[i]!=NULL)
194 _colorLayerImageViewLst[i]->SetBaseColors( base_color );
199 //----------------------------------------------------------------------------
200 void ColorLayerImageViewManager::SetBaseTransparence(std::vector<double> & base_transparence)
202 int i, size=_colorLayerImageViewLst.size();
205 if (_colorLayerImageViewLst[i]!=NULL)
207 _colorLayerImageViewLst[i]->SetBaseTransparence( base_transparence );
212 //----------------------------------------------------------------------------
213 void ColorLayerImageViewManager::SetRangeForColorBar(std::vector<double> &range)
215 int i, size=_colorLayerImageViewLst.size();
218 if (_colorLayerImageViewLst[i]!=NULL)
220 _colorLayerImageViewLst[i]->SetRangeForColorBar( range );
225 //----------------------------------------------------------------------------
226 void ColorLayerImageViewManager::SetColorBarPosition(std::vector<int> &colorbarposition)
228 int i, size=_colorLayerImageViewLst.size();
231 if (_colorLayerImageViewLst[i]!=NULL)
233 _colorLayerImageViewLst[i]->SetColorBarPosition( colorbarposition );
241 //----------------------------------------------------------------------------
242 double ColorLayerImageViewManager::GetBaseColors(unsigned int index)
245 int i, size=_colorLayerImageViewLst.size();
248 if (_colorLayerImageViewLst[i]!=NULL)
250 result = _colorLayerImageViewLst[i]->GetBaseColors( index );
256 //----------------------------------------------------------------------------
257 void ColorLayerImageViewManager::SetGreyLevelBoundaries(std::vector<double> & grey_level_boundary)
259 int i, size=_colorLayerImageViewLst.size();
262 if (_colorLayerImageViewLst[i]!=NULL)
264 _colorLayerImageViewLst[i]->SetGreyLevelBoundaries( grey_level_boundary );
269 //----------------------------------------------------------------------------
270 double ColorLayerImageViewManager::GetGreyLevelBoundaries(unsigned int index)
273 int i, size=_colorLayerImageViewLst.size();
276 if (_colorLayerImageViewLst[i]!=NULL)
278 result = _colorLayerImageViewLst[i]->GetGreyLevelBoundaries( index );
284 //----------------------------------------------------------------------------
285 void ColorLayerImageViewManager::SetPlainOrGradientColor(bool color_type)
287 int i, size=_colorLayerImageViewLst.size();
290 if (_colorLayerImageViewLst[i]!=NULL)
292 _colorLayerImageViewLst[i]->SetPlainOrGradientColor( color_type );
297 //----------------------------------------------------------------------------
298 int ColorLayerImageViewManager::GetBaseColorNb()
301 int i, size=_colorLayerImageViewLst.size();
304 if (_colorLayerImageViewLst[i]!=NULL)
306 result = _colorLayerImageViewLst[i]->GetBaseColorNb();
312 //----------------------------------------------------------------------------
313 void ColorLayerImageViewManager::Refresh()
315 int i, size=_colorLayerImageViewLst.size();
318 if (_colorLayerImageViewLst[i]!=NULL)
320 _colorLayerImageViewLst[i]->Refresh();
325 //----------------------------------------------------------------------------
326 void ColorLayerImageViewManager::onThreshold()
328 int i, size=_colorLayerImageViewLst.size();
331 if (_colorLayerImageViewLst[i]!=NULL)
333 _colorLayerImageViewLst[i]->onThreshold();
338 //----------------------------------------------------------------------------
339 void ColorLayerImageViewManager::onThresholdChange()
341 int i, size=_colorLayerImageViewLst.size();
344 if (_colorLayerImageViewLst[i]!=NULL)
346 _colorLayerImageViewLst[i]->onThresholdChange();
351 //----------------------------------------------------------------------------
352 void ColorLayerImageViewManager::onThresholdRemove()
354 int i, size=_colorLayerImageViewLst.size();
357 if (_colorLayerImageViewLst[i]!=NULL)
359 _colorLayerImageViewLst[i]->onThresholdRemove();
364 //----------------------------------------------------------------------------
365 void ColorLayerImageViewManager::onThresholdInterpolation(bool interpolation)
367 int i, size=_colorLayerImageViewLst.size();
370 if (_colorLayerImageViewLst[i]!=NULL)
372 _colorLayerImageViewLst[i]->onThresholdInterpolation( interpolation );
377 //----------------------------------------------------------------------------
378 void ColorLayerImageViewManager::SetSliceFixDynamic( bool fixdyn )
380 int i, size=_colorLayerImageViewLst.size();
383 if (_colorLayerImageViewLst[i]!=NULL)
385 _colorLayerImageViewLst[i]->SetSliceFixDynamic( fixdyn );
390 //----------------------------------------------------------------------------
391 void ColorLayerImageViewManager::onThresholdChangeOpacity( int opacity)
393 int i, size=_colorLayerImageViewLst.size();
396 if (_colorLayerImageViewLst[i]!=NULL)
398 _colorLayerImageViewLst[i]->onThresholdChangeOpacity( opacity );
403 //----------------------------------------------------------------------------
404 void ColorLayerImageViewManager::SetImageStep1( vtkImageData* img )
406 int i, size=_colorLayerImageViewLst.size();
409 if (_colorLayerImageViewLst[i]!=NULL)
411 _colorLayerImageViewLst[i]->SetImage( img );
416 //----------------------------------------------------------------------------
417 void ColorLayerImageViewManager::SetImageStep2( vtkImageData* img )
421 // if (_histogramMinMaxLevel!=NULL)
423 // _histogramMinMaxLevel->Configure( img );
425 // _colorLayerImageViewManager->SetImage( img );
426 double spcOriginalLayer[3];
427 int dimensionOriginalLayer[3];
429 int dimensionBase[3];
431 this->GetSpcOriginalLayer(0,spcOriginalLayer);
432 this->GetDimensionOriginalLayer(0,dimensionOriginalLayer);
433 this->GetSpcBase(0,spcBase);
434 this->GetDimensionBase(0,dimensionBase);
435 // if (_sl_SliceImageX!=NULL)
437 // _sl_SliceImageX->SetRange( 0 , dimensionOriginalLayer[0] );
438 // _sl_SliceImageY->SetRange( 0 , dimensionOriginalLayer[1] );
439 // _sl_SliceImageZ->SetRange( 0 , dimensionOriginalLayer[2] );
442 if ( (spcOriginalLayer[0]!=spcBase[0]) ||
443 (spcOriginalLayer[1]!=spcBase[1]) ||
444 (spcOriginalLayer[2]!=spcBase[2]) ||
445 (dimensionOriginalLayer[0]!=dimensionBase[0]) ||
446 (dimensionOriginalLayer[1]!=dimensionBase[1]) ||
447 (dimensionOriginalLayer[2]!=dimensionBase[2])
451 int typeOfTransformation = _fitting_mode;
452 // // In case of the option is set to create a dialog box.
453 // if (_fitting_mode == -1)
455 // bool transformOkDlg;
456 // wxString msg = _T("The image resolution of both images are not compatible. How do you want to tranform it? ");
457 // wxDlgTransformByDimensionBySpacingByPixel dlg;
458 // dlg.GetTransformType(this , spcBase , spcOriginalLayer , dimensionBase ,dimensionOriginalLayer ,msg,typeOfTransformation,transformOkDlg);
459 // // CM Reset the default value (Pixel i.e. 3) if the dialog box returned an inappropriate value.
460 // if (transformOkDlg == false)
462 // typeOfTransformation = 3;
465 // typeOfTransformation = _fitting_mode;
466 // } // _fitting_mode -1
469 if (typeOfTransformation == 1) // Adapt spacing
471 newSpc[0] = spcBase[0] * dimensionBase[0] / dimensionOriginalLayer[0];
472 newSpc[1] = spcBase[1] * dimensionBase[1] / dimensionOriginalLayer[1];
473 newSpc[2] = spcBase[2] * dimensionBase[2] / dimensionOriginalLayer[2];
476 if (typeOfTransformation == 2) // keep spacing of the Layer Image
478 newSpc[0] = spcOriginalLayer[0];
479 newSpc[1] = spcOriginalLayer[1];
480 newSpc[2] = spcOriginalLayer[2];
483 if (typeOfTransformation == 3) // Use the spacing of the Base Image
485 newSpc[0] = spcBase[0];
486 newSpc[1] = spcBase[1];
487 newSpc[2] = spcBase[2];
489 this->SetNewSpacingLayer(newSpc);
491 newSpc[0] = spcOriginalLayer[0];
492 newSpc[1] = spcOriginalLayer[1];
493 newSpc[2] = spcOriginalLayer[2];
494 } // spc !_spcBase dim!__dimBase
495 this->SetNewSpacingLayer(newSpc);
503 this->onThresholdRemove( );
509 //----------------------------------------------------------------------------
510 vtkImageData* ColorLayerImageViewManager::GetImageChangeInformation(int id)
512 if (_colorLayerImageViewLst[id]!=NULL)
514 return _colorLayerImageViewLst[id]->GetImage( );
519 //----------------------------------------------------------------------------
520 vtkLookupTable* ColorLayerImageViewManager::GetLookupTable(int id)
522 if (_colorLayerImageViewLst[id]!=NULL)
524 return _colorLayerImageViewLst[id]->GetThresholdTable( );
529 //----------------------------------------------------------------------------
530 void ColorLayerImageViewManager::GetDimensionBase(int id,int *dim)
532 if (_colorLayerImageViewLst[id]!=NULL)
534 _colorLayerImageViewLst[id]->GetDimensionBase( dim );
538 //----------------------------------------------------------------------------
539 void ColorLayerImageViewManager::GetSpcBase(int id,double *spc)
541 if (_colorLayerImageViewLst[id]!=NULL)
543 _colorLayerImageViewLst[id]->GetSpcBase( spc );
547 //----------------------------------------------------------------------------
548 void ColorLayerImageViewManager::GetDimensionOriginalLayer(int id,int *dim)
550 if (_colorLayerImageViewLst[id]!=NULL)
552 _colorLayerImageViewLst[id]->GetDimensionOriginalLayer( dim );
556 //----------------------------------------------------------------------------
557 void ColorLayerImageViewManager::GetSpcOriginalLayer(int id,double *spc)
559 if (_colorLayerImageViewLst[id]!=NULL)
561 _colorLayerImageViewLst[id]->GetSpcOriginalLayer( spc );
565 //----------------------------------------------------------------------------
566 void ColorLayerImageViewManager::SetNewSpacingLayer(double *spc)
568 int i, size=_colorLayerImageViewLst.size();
571 if (_colorLayerImageViewLst[i]!=NULL)
573 _colorLayerImageViewLst[i]->SetNewSpacingLayer( spc );
578 //----------------------------------------------------------------------------
579 void ColorLayerImageViewManager::SetActive(bool active)
584 //----------------------------------------------------------------------------
585 bool ColorLayerImageViewManager::GetActive()
590 //----------------------------------------------------------------------------
591 void ColorLayerImageViewManager::SetFittingMode( int fitting_mode )
593 _fitting_mode = fitting_mode;
596 //----------------------------------------------------------------------------
597 int ColorLayerImageViewManager::GetFittingMode()
599 return _fitting_mode;