meta_volume_pixel_data_viewer.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------
00012 //---------------------------------------------------
00013 
00014 #include <iostream>
00015 #include <limits>
00016 
00017 #include "meta_volume_pixel_data_viewer.h"
00018 #include "meta_volume_pixel_view.h"
00019 
00020 namespace imedgine 
00021 {
00022   MetaVolumePixelDataViewer::MetaVolumePixelDataViewer(
00023       MetaVolumePixelView* meta_view, QWidget* parent)
00024   : DatasetConfigurationWidgetBase(),
00025     meta_view_(meta_view)
00026   {
00027     setupUi(this);
00028     initializeConfigurationVisibility();
00029     initializeVisibleRegionConfiguration();
00030     initializeAffineTransformationConfiguration();
00031     initializeConnections();
00032 
00033   }
00034   
00035   //---------------------------------------------------
00036   
00037   MetaVolumePixelDataViewer::~MetaVolumePixelDataViewer()
00038   {
00039 #ifdef DEBUG 
00040     std::cout << "Deleting MetaVolumePixelDataViewer" << std::endl;
00041 #endif
00042   }
00043   
00044   //---------------------------------------------------
00045   
00046   void MetaVolumePixelDataViewer::setIntensityInGui(unsigned int window, int level)
00047   {
00048     custom_level_slider_->setValue(level);
00049     custom_window_slider_->setValue(window);
00050   }
00051 
00052   //---------------------------------------------------
00053   
00054   void MetaVolumePixelDataViewer::setAffineTransformationMatrixInGui(matrix_type transformation_matrix)
00055   {
00056     QString temp_string;
00057 
00058     row_zero_col_zero_edit_box_->setText(temp_string.number(transformation_matrix(0,0)));
00059     row_zero_col_one_edit_box_->setText(temp_string.number(transformation_matrix(0,1)));
00060     row_zero_col_two_edit_box_->setText(temp_string.number(transformation_matrix(0,2)));
00061 
00062     row_one_col_zero_edit_box_->setText(temp_string.number(transformation_matrix(1,0)));
00063     row_one_col_one_edit_box_->setText(temp_string.number(transformation_matrix(1,1)));
00064     row_one_col_two_edit_box_->setText(temp_string.number(transformation_matrix(1,2)));
00065 
00066     row_two_col_zero_edit_box_->setText(temp_string.number(transformation_matrix(2,0)));
00067     row_two_col_one_edit_box_->setText(temp_string.number(transformation_matrix(2,1)));
00068     row_two_col_two_edit_box_->setText(temp_string.number(transformation_matrix(2,2)));
00069 
00070   }
00071 
00072   //---------------------------------------------------
00073 
00074   void MetaVolumePixelDataViewer::setOffsetVectorInGui(offset_vector_type offset_vector)
00075   {
00076     QString temp_string;
00077 
00078     offset_row_zero_edit_box_->setText(temp_string.number(offset_vector.at(0)));
00079     offset_row_one_edit_box_->setText(temp_string.number(offset_vector.at(1)));
00080     offset_row_two_edit_box_->setText(temp_string.number(offset_vector.at(2)));
00081   }
00082   
00083   //--------------------------------------------------
00084 
00085   void MetaVolumePixelDataViewer::intensityWindowChanged(int new_intensity_window)
00086   {
00087     meta_view_->setIntensity(static_cast<double>(new_intensity_window), 
00088                              meta_view_->getIntensityLevel());
00089   }
00090     
00091   //--------------------------------------------------
00092     
00093   void MetaVolumePixelDataViewer::intensityLevelChanged(int new_intensity_level)
00094   {
00095     meta_view_->setIntensity(meta_view_->getIntensityWindow(), 
00096                              static_cast<double>(new_intensity_level));
00097   } 
00098     
00099   //--------------------------------------------------
00100     
00101   void MetaVolumePixelDataViewer::focusPointXDimensionChanged(index_type new_x_position)
00102   {
00103     meta_view_->setFocusPointXDimension(new_x_position);
00104   }
00105     
00106   //--------------------------------------------------
00107     
00108   void MetaVolumePixelDataViewer::focusPointYDimensionChanged(index_type new_y_position)
00109   {
00110     meta_view_->setFocusPointYDimension(new_y_position);
00111   }
00112     
00113   //--------------------------------------------------
00114     
00115   void MetaVolumePixelDataViewer::focusPointZDimensionChanged(index_type new_z_position)
00116   {
00117     meta_view_->setFocusPointZDimension(new_z_position);
00118   }
00119 
00120   //--------------------------------------------------
00121 
00122   void MetaVolumePixelDataViewer::affineTransformationMatrixChanged()
00123   {
00124     matrix_type temp_matrix (3, 3);
00125 
00126     temp_matrix(0,0) = (row_zero_col_zero_edit_box_->text()).toDouble();
00127     temp_matrix(0,1) = (row_zero_col_one_edit_box_->text()).toDouble();
00128     temp_matrix(0,2) = (row_zero_col_two_edit_box_->text()).toDouble();
00129 
00130     temp_matrix(1,0) = (row_one_col_zero_edit_box_->text()).toDouble();
00131     temp_matrix(1,1) = (row_one_col_one_edit_box_->text()).toDouble();
00132     temp_matrix(1,2) = (row_one_col_two_edit_box_->text()).toDouble();
00133 
00134     temp_matrix(2,0) = (row_two_col_zero_edit_box_->text()).toDouble();
00135     temp_matrix(2,1) = (row_two_col_one_edit_box_->text()).toDouble();
00136     temp_matrix(2,2) = (row_two_col_two_edit_box_->text()).toDouble();
00137 
00138     meta_view_->setTransformationMatrix( temp_matrix );
00139 
00140     offset_vector_type temp_vector(3);
00141 
00142     temp_vector.at(0) = (offset_row_zero_edit_box_->text()).toDouble();
00143     temp_vector.at(1) = (offset_row_one_edit_box_->text()).toDouble();
00144     temp_vector.at(2) = (offset_row_two_edit_box_->text()).toDouble();
00145 
00146     meta_view_->setOffsetVector( temp_vector );
00147   }
00148 
00149   //--------------------------------------------------
00150 
00151   void MetaVolumePixelDataViewer::resetAffineTransformationMatrix()
00152   {
00153     matrix_type temp_matrix (identity_matrix_type(3, 3));
00154     meta_view_->setTransformationMatrix( temp_matrix );
00155 
00156     offset_vector_type temp_vector(3, 0);
00157     meta_view_->setOffsetVector( temp_vector );
00158   }
00159 
00160   //--------------------------------------------------
00161   void MetaVolumePixelDataViewer::initializeConfigurationVisibility()
00162   {
00163     window_level_push_button_->setIcon(QIcon(":icons/list-add.png"));
00164     affine_transformation_push_button_->setIcon(QIcon(":icons/list-add.png"));
00165 
00166     window_level_frame_->hide();
00167     affine_transformation_frame_->hide();
00168   }
00169 
00170   //--------------------------------------------------
00171 
00172   void MetaVolumePixelDataViewer::initializeVisibleRegionConfiguration()
00173   {
00174     
00175     //TODO: make this a little more intelligent
00176     custom_level_slider_->setTickInterval(10);
00177     custom_window_slider_->setTickInterval(10);
00178 
00179     unsigned char num_bytes_per_pixel = meta_view_->getNumBytesPerPixel();
00180 
00181     //TODO: Decide wheter true or else or both
00182 
00183     int minimum_level=0;
00184     int maximum_level=0;
00185 
00186     if(true)
00187     {
00188       minimum_level=static_cast<int>(meta_view_->getMinPixelValue());
00189       maximum_level=static_cast<int>(meta_view_->getMaxPixelValue());
00190     }
00191     else
00192     {
00193       switch(num_bytes_per_pixel)
00194       {
00195         case 1:
00196         {
00197           maximum_level = std::numeric_limits<one_byte_pixel_type>::max();
00198           minimum_level = std::numeric_limits<one_byte_pixel_type>::min();
00199           break;
00200         }
00201         case 2:
00202         {
00203   
00204           maximum_level = std::numeric_limits<two_byte_pixel_type>::max();
00205           minimum_level = std::numeric_limits<two_byte_pixel_type>::min();
00206           break;
00207         }
00208         default:
00209         {
00210             // TODO: NotImplementedException
00211   
00212         }
00213       }
00214     }
00215 
00216     int minimum_window = 1;
00217     int maximum_window = maximum_level-minimum_level;
00218 
00219     custom_level_slider_->setMaximum(maximum_level);
00220     custom_level_slider_->setMinimum(minimum_level);
00221 
00222     custom_level_spin_box_->setMaximum(maximum_level);
00223     custom_level_spin_box_->setMinimum(minimum_level);
00224 
00225     custom_window_slider_->setMaximum(maximum_window);
00226     custom_window_slider_->setMinimum(minimum_window);
00227 
00228     custom_window_spin_box_->setMaximum(maximum_window);
00229     custom_window_spin_box_->setMinimum(minimum_window);
00230 
00231     custom_level_slider_->setValue(static_cast<int>(meta_view_->getIntensityLevel()));
00232     custom_window_slider_->setValue(static_cast<int>(meta_view_->getIntensityWindow()));
00233 
00234     default_values_push_button_->setIcon(QIcon(":icons/list-add.png"));
00235 
00236     custom_radio_button_->hide();
00237     heart_radio_button_->hide();
00238     lung_radio_button_->hide();
00239     bones_radio_button_->hide();
00240 
00241   }
00242 
00243   //--------------------------------------------------
00244 
00245   void MetaVolumePixelDataViewer::visibleRegionShowLess()
00246   {
00247     if(custom_radio_button_->isVisible())
00248     {
00249       default_values_push_button_->setIcon(QIcon(":icons/list-add.png"));
00250       custom_radio_button_->hide();
00251       heart_radio_button_->hide();
00252       lung_radio_button_->hide();
00253       bones_radio_button_->hide();
00254     }
00255     else
00256     {
00257       default_values_push_button_->setIcon(QIcon(":icons/list-remove.png"));
00258       custom_radio_button_->show();
00259       heart_radio_button_->show();
00260       lung_radio_button_->show();
00261       bones_radio_button_->show();
00262     }
00263   }
00264 
00265   //--------------------------------------------------
00266 
00267   void MetaVolumePixelDataViewer::initializeAffineTransformationConfiguration()
00268   {
00269     QString temp_string;
00270 
00271     //TODO: who deletes this?
00272     QDoubleValidator* validator =
00273       new QDoubleValidator( -1000.0, 1000.0, 3, row_zero_col_zero_edit_box_);
00274 
00275     row_zero_col_zero_edit_box_->setValidator(validator);
00276     row_zero_col_one_edit_box_->setValidator(validator);
00277     row_zero_col_two_edit_box_->setValidator(validator);
00278 
00279     row_one_col_zero_edit_box_->setValidator(validator);
00280     row_one_col_one_edit_box_->setValidator(validator);
00281     row_one_col_two_edit_box_->setValidator(validator);
00282 
00283     row_two_col_zero_edit_box_->setValidator(validator);
00284     row_two_col_one_edit_box_->setValidator(validator);
00285     row_two_col_two_edit_box_->setValidator(validator);
00286 
00287     offset_row_zero_edit_box_->setValidator(validator);
00288     offset_row_one_edit_box_->setValidator(validator);
00289     offset_row_two_edit_box_->setValidator(validator);
00290 
00291     setAffineTransformationMatrixInGui(meta_view_->getTransformationMatrix());
00292 
00293     setOffsetVectorInGui(meta_view_->getOffsetVector());
00294   }
00295 
00296   //--------------------------------------------------
00297 
00298   void MetaVolumePixelDataViewer::initializeConnections()
00299   {
00300     connect(custom_level_slider_, SIGNAL(valueChanged(int)),
00301       this, SLOT(intensityLevelChanged(int)));
00302     // TODO: int vs unsigned int
00303     connect(custom_window_slider_, SIGNAL(valueChanged(int)),
00304       this, SLOT(intensityWindowChanged(int)));
00305     connect(default_values_push_button_, SIGNAL(pressed()),
00306       this, SLOT(visibleRegionShowLess()));
00307 
00308     connect(apply_affine_transformation_push_button_, SIGNAL(pressed()),
00309       this, SLOT(affineTransformationMatrixChanged()));
00310     connect(reset_affine_transformation_push_button_, SIGNAL(pressed()),
00311       this, SLOT(resetAffineTransformationMatrix()));
00312 
00313     connect(window_level_push_button_, SIGNAL(pressed()),
00314       this, SLOT(toggleWindowLevelVisibility()));
00315 
00316     connect(affine_transformation_push_button_, SIGNAL(pressed()),
00317       this, SLOT(toggleAffineTransformationVisibility()));
00318 
00319   }
00320 
00321   //--------------------------------------------------
00322 
00323   void MetaVolumePixelDataViewer::toggleWindowLevelVisibility()
00324   {
00325     if(window_level_frame_->isVisible())
00326     {
00327       window_level_frame_->hide();
00328       window_level_push_button_->setIcon(QIcon(":icons/list-add.png"));
00329     }
00330     else
00331     {
00332       window_level_frame_->show();
00333       window_level_push_button_->setIcon(QIcon(":icons/list-remove.png"));
00334     }
00335   }
00336 
00337   //--------------------------------------------------
00338 
00339   void MetaVolumePixelDataViewer::toggleAffineTransformationVisibility()
00340   {
00341     if(affine_transformation_frame_->isVisible())
00342     {
00343       affine_transformation_frame_->hide();
00344       affine_transformation_push_button_->setIcon(QIcon(":icons/list-add.png"));
00345     }
00346     else
00347     {
00348       affine_transformation_frame_->show();
00349       affine_transformation_push_button_->setIcon(QIcon(":icons/list-remove.png"));
00350     }
00351   }
00352 
00353 
00354 
00355   
00356 }

Generated on Sun Aug 13 18:19:41 2006 for iMEDgine by  doxygen 1.4.6