-
+/*# ---------------------------------------------------------------------
+#
+# 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.
+# ------------------------------------------------------------------------ */
/**
* \file
#include "OpenImageDialog.h"
+//---------------------------------------------------------
+//---------------------------------------------------------
+//---------------------------------------------------------
+
wxDlgTransformByDimensionBySpacingByPixel::wxDlgTransformByDimensionBySpacingByPixel()
{
}
void wxDlgTransformByDimensionBySpacingByPixel::GetTransformType(wxWindow *parent , wxString message,int &typeOfTransformation,bool &dlgWxOK)
{
- wxDialog* dial = new wxDialog (parent,-1,_T("Tools"),wxDefaultPosition, wxSize(590,190));
+ wxDialog* dial = new wxDialog (parent,-1,_T("Tools"),wxDefaultPosition, wxSize(590,190));
wxSizer* buttonsSizer = dial->CreateSeparatedButtonSizer(wxOK|wxCANCEL);
wxBoxSizer *dialSizer = new wxBoxSizer(wxVERTICAL);
dial->ShowModal();
typeOfTransformation = -1;
- dlgWxOK = false;
+ dlgWxOK = false;
if (dial->GetReturnCode() == wxID_OK)
{
- typeOfTransformation = radioOpts->GetSelection();
- dlgWxOK = true;
+ typeOfTransformation = radioOpts->GetSelection() + 1;
+ dlgWxOK = true;
}
}
-//---------------------------------------------------------
+//---------------------------------------------------------
+//---------------------------------------------------------
+//---------------------------------------------------------
/**
ColorLayerImageViewPanel::ColorLayerImageViewPanel(wxWindow* parent, int min, int max, int type)
: wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
{
+ printf("EED ColorLayerImageViewPanel::ColorLayerImageViewPanel start \n");
+
_spcBase[0] = _spcBase[1] = _spcBase[2] = 0;
_dimBase[0] = _dimBase[1] = _dimBase[2] = 0;
- _colorLayerImageView = new ColorLayerImageView();
+ _colorLayerImageView = new ColorLayerImageView();
_btn_ReadImage = new wxButton(this, wxID_ANY, _T("Read Image") );
_thresholdGo = true;
- _cb_ShowHide = new wxCheckBox(this, wxID_ANY, _T("Show/Hide layer") );
+ _cb_ShowHide = new wxCheckBox(this, wxID_ANY, _T("Show/Hide Layer") );
_cb_ShowHide->SetValue(_thresholdGo);
- _cb_SliceFixDinamic = new wxCheckBox(this, wxID_ANY, _T("Slice Fix/Dinamic") );
+ _cb_SliceFixDinamic = new wxCheckBox(this, wxID_ANY, _T("Fixed/Dynamic Slice") );
_cb_SliceFixDinamic->SetValue(true);
_sl_SliceImage = new wxSlider(this, wxID_ANY, 0, 1000, 1000, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
_sl_SliceImage->Enable(false);
- _interpolationCheckBox = new wxCheckBox(this, -1, _T("Image interpolation") );
+ _interpolationCheckBox = new wxCheckBox(this, -1, _T("Image Interpolation") );
_interpolationCheckBox->SetValue(true);
_opacity = new wxSlider(this, wxID_ANY, 6, 1, 10, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
this->SetSizer( sizer );
this->SetAutoLayout( true );
this->Layout();
+
+ //CM Sets the default fitting mode to Pixel mode.
+ _fitting_mode = 3;
+ // EO CM
}
//----------------------------------------------------------------------------
_dimBase[2] = dim[2];
}
+//----------------------------------------------------------------------------
+void ColorLayerImageViewPanel::SetImage(vtkImageData *img)
+{
+ if (img!=NULL)
+ {
+ _colorLayerImageView->SetImage( img );
+
+ double spc[3];
+ img->GetSpacing(spc);
+
+ int dim[3];
+ int ext[6];
+ img->GetWholeExtent(ext);
+ dim[0] = ext[1]-ext[0];
+ dim[1] = ext[3]-ext[2];
+ dim[2] = ext[5]-ext[4];
+ _sl_SliceImage->SetRange( 0 , dim[2] );
+
+ if ( (spc[0]!=_spcBase[0]) || (spc[1]!=_spcBase[1]) || (spc[2]!=_spcBase[2]) ||
+ (dim[0]!=_dimBase[0]) || (spc[1]!=_spcBase[1]) || (spc[2]!=_spcBase[2])
+ )
+ {
+ // CM
+ int typeOfTransformation;
+ // In case of the option is set to create a dialog box.
+ if (_fitting_mode == -1)
+ {
+ bool transformOkDlg;
+ wxString msg = _T("The image resolution of both images are not compatible. Do you want to tranform it? ");
+ wxDlgTransformByDimensionBySpacingByPixel dlg;
+ dlg.GetTransformType(this,msg,typeOfTransformation,transformOkDlg);
+ // CM Reset the default value (Pixel i.e. 3) if the dialog box returned an inappropriate value.
+ if (transformOkDlg == false)
+ typeOfTransformation = 3;
+ }
+ else
+ typeOfTransformation = _fitting_mode;
+ //EO CM
+
+ printf("EED ColorLayerImageViewPanel::onReadImage call dialog spc size,dim...???\n");
+
+ if (typeOfTransformation==1) // make dimensions equals
+ {
+ printf("EED ColorLayerImageViewPanel::onReadImage ...WARNNING.... dif size image spc*dim ofnew image ...???\n");
+ spc[0]=_spcBase[0]*_dimBase[0]/dim[0];
+ spc[1]=_spcBase[1]*_dimBase[1]/dim[1];
+ spc[2] = 1;
+ }
+
+ if (typeOfTransformation==2) // make spacing equals
+ {
+ spc[0] = ( _spcBase[0]/spc[0] ) * _spcOrg[0];
+ spc[1] = ( _spcBase[1]/spc[1] ) * _spcOrg[1];
+ spc[2] = ( _spcBase[2]/spc[2] ) * _spcOrg[2];
+ }
+
+ if (typeOfTransformation==3) // make spacing = 1
+ {
+ spc[0] = 1;
+ spc[1] = 1;
+ spc[2] = 1;
+ }
+
+ img->SetSpacing(spc);
+ } // spc !_spcBase dim!__dimBase
+
+ if (_colorLayerImageView!=NULL)
+ {
+ _colorLayerImageView->onThreshold();
+ _colorLayerImageView->Refresh();
+ }
+
+
+ }
+}
+
+//----------------------------------------------------------------------------
+void ColorLayerImageViewPanel::SetFittingMode(int fitting_mode)
+{
+ // CM Sets the fitting mode if an appropriate value is provided.
+ if (fitting_mode == -1 || fitting_mode == 1 || fitting_mode == 2 || fitting_mode == 3)
+ {
+ _fitting_mode = fitting_mode;
+ }
+ //Otherwise, an exception should be thrown (value 0 is fine, it corresponds to an empty field i.e. the default value is kept).
+ else if (fitting_mode != 0)
+ std::cout << "CM ERROR!!! The fitting mode provided has an inappropriate value. It should be an int between -1 ; 1 ; 2 ; 3, but its value is :" << fitting_mode << ". The default value will be set instead, i.e. Pixel transformation (3)." << std::endl;
+ //EO CM
+}
+
+//----------------------------------------------------------------------------
+int ColorLayerImageViewPanel::GetFittingMode()
+{
+ return _fitting_mode;
+}
+
//----------------------------------------------------------------------------
void ColorLayerImageViewPanel::onReadImage(wxCommandEvent& event)
{
printf("EED ColorLayerImageViewPanel::onReadImage ....WARNING... Read dlg. all images creaImageIO ... ???\n");
creaMaracasVisuKernel::OpenImageDialog diag = creaMaracasVisuKernel::OpenImageDialog();
- _colorLayerImageView->SetImage( diag.getImageData() );
-
- double spc[3];
- diag.getImageData()->GetSpacing(spc);
-
- int dim[3];
- int ext[6];
- diag.getImageData()->GetWholeExtent(ext);
- dim[0] = ext[1]-ext[0];
- dim[1] = ext[3]-ext[2];
- dim[2] = ext[5]-ext[4];
- _sl_SliceImage->SetRange( 0 , dim[2] );
-
- if ( (spc[0]!=_spcBase[0]) || (spc[1]!=_spcBase[1]) || (spc[2]!=_spcBase[2]) ||
- (dim[0]!=_dimBase[0]) || (spc[1]!=_spcBase[1]) || (spc[2]!=_spcBase[2])
- )
- {
-
- bool transformOkDlg;
- int typeOfTransformation;
- wxString msg = _T("The image resolution of both images are not compatible. Do you want to tranform it? ");
- wxDlgTransformByDimensionBySpacingByPixel dlg;
- dlg.GetTransformType(this,msg,typeOfTransformation,transformOkDlg);
-
-printf("EED ColorLayerImageViewPanel::onReadImage call dialog spc size,dim...???\n");
-
- if (typeOfTransformation==0) // make dimensions equals
- {
- printf("EED ColorLayerImageViewPanel::onReadImage ...WARNNING.... dif size image spc*dim ofnew image ...???\n");
- spc[0]=_spcBase[0]*_dimBase[0]/dim[0];
- spc[1]=_spcBase[1]*_dimBase[1]/dim[1];
- spc[2] = 1;
- }
-
- if (typeOfTransformation==1) // make spacing equals
- {
- spc[0] = ( _spcBase[0]/spc[0] ) * _spcOrg[0];
- spc[1] = ( _spcBase[1]/spc[1] ) * _spcOrg[1];
- spc[2] = ( _spcBase[2]/spc[2] ) * _spcOrg[2];
- }
-
- if (typeOfTransformation==2) // make spacing = 1
- {
- spc[0] = 1;
- spc[1] = 1;
- spc[2] = 1;
- }
-
- diag.getImageData()->SetSpacing(spc);
- } // spc !_spcBase dim!__dimBase
-
- if (_colorLayerImageView!=NULL)
- {
- _colorLayerImageView->onThreshold();
- _colorLayerImageView->Refresh();
- }
+ SetImage( diag.getImageData() );
}
//----------------------------------------------------------------------------
if (_colorLayerImageView!=NULL)
{
bool fixdin = _cb_SliceFixDinamic->GetValue();
- _colorLayerImageView->SetSliceFixDinamic( fixdin );
+ _colorLayerImageView->SetSliceFixDynamic( fixdin );
if (fixdin==false)
{
_colorLayerImageView->SetZ2( _sl_SliceImage->GetValue() );