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
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
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
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
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
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 }