00001
00012
00013
00014 #include "volume_pixel_view.h"
00015 #include "../controller/data_view_mediator.h"
00016 #include "../datasets/volume_pixel_dataset.h"
00017
00018 namespace imedgine
00019 {
00020 VolumePixelView::VolumePixelView(view_type type)
00021 : PixelView(type),
00022 volume_dataset_(),
00023 second_volume_dataset_(),
00024 current_focus_point_(3)
00025 {
00026 }
00027
00028
00029
00030 VolumePixelView::VolumePixelView(VolumePixelView const& src)
00031 : PixelView(src),
00032 volume_dataset_(),
00033 second_volume_dataset_(),
00034 current_focus_point_(3)
00035 {
00036 }
00037
00038
00039
00040 VolumePixelView::~VolumePixelView()
00041 {
00042 }
00043
00044
00045
00046 void VolumePixelView::setDataset(dataset_pointer_type dataset)
00047 throw(NullPointerException, InvalidCastException)
00048 {
00049 if(dataset.get() == 0)
00050 {
00051 throw(NullPointerException("VolumePixelView::setDataset"));
00052 }
00053
00054 VolumePixelDataset* volume_pixel_dataset =
00055 dynamic_cast<VolumePixelDataset*>(dataset.get());
00056
00057 if (volume_pixel_dataset == 0)
00058 {
00059 throw(InvalidCastException("VolumePixelView::setDataset",
00060 "dataset_pointer_type", "VolumePixelDataset*"));
00061 }
00062
00063 volume_pixel_dataset_pointer_type temp_dataset_copy(
00064 dataset, boost::detail::dynamic_cast_tag());
00065 volume_dataset_ = temp_dataset_copy;
00066
00067 current_focus_point_[X_DIMENSION] = volume_dataset_->getFocusPoint()[X_DIMENSION];
00068 current_focus_point_[Y_DIMENSION] = volume_dataset_->getFocusPoint()[Y_DIMENSION];
00069 current_focus_point_[Z_DIMENSION] = volume_dataset_->getFocusPoint()[Z_DIMENSION];
00070
00071 View::setDataset(dataset);
00072 }
00073
00074
00075
00076 void VolumePixelView::setSecondDataset(dataset_pointer_type second_dataset)
00077 throw(NullPointerException, InvalidCastException)
00078 {
00079 if(second_dataset.get() == 0)
00080 {
00081 throw(NullPointerException("VolumePixelView::setDataset"));
00082 }
00083
00084 VolumePixelDataset* second_volume_pixel_dataset =
00085 dynamic_cast<VolumePixelDataset*>(second_dataset.get());
00086
00087 if (second_volume_pixel_dataset == 0)
00088 {
00089 throw(InvalidCastException("VolumePixelView::setDataset",
00090 "dataset_pointer_type", "VolumePixelDataset*"));
00091 }
00092
00093 volume_pixel_dataset_pointer_type temp_dataset_copy(
00094 second_dataset, boost::detail::dynamic_cast_tag());
00095 second_volume_dataset_ = temp_dataset_copy;
00096
00097 bool current_focus_point_changed = false;
00098
00099
00100 if (current_focus_point_[X_DIMENSION] >= second_volume_dataset_->getSize()[X_DIMENSION])
00101 {
00102 current_focus_point_[X_DIMENSION] = second_volume_dataset_->getFocusPoint()[X_DIMENSION];
00103 current_focus_point_changed = true;
00104 }
00105 if (current_focus_point_[Y_DIMENSION] >= second_volume_dataset_->getSize()[Y_DIMENSION])
00106 {
00107 current_focus_point_[Y_DIMENSION] = second_volume_dataset_->getFocusPoint()[Y_DIMENSION];
00108 current_focus_point_changed = true;
00109 }
00110 if (current_focus_point_[Z_DIMENSION] >= second_volume_dataset_->getSize()[Z_DIMENSION])
00111 {
00112 current_focus_point_[Z_DIMENSION] = second_volume_dataset_->getFocusPoint()[Z_DIMENSION];
00113 current_focus_point_changed = true;
00114 }
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 }
00125
00126
00127
00128 void VolumePixelView::unsetSecondDataset()
00129 {
00130 if (second_volume_dataset_.get() != 0)
00131 {
00132 second_volume_dataset_.reset();
00133 updateView();
00134 }
00135 }
00136
00137
00138
00139 dataset_key_type VolumePixelView::getDatasetKey() const
00140 {
00141 if (volume_dataset_.get() != 0)
00142 {
00143 return(volume_dataset_->getDatasetKey());
00144 }
00145 else
00146 {
00147 return(dataset_key_type());
00148 }
00149 }
00150
00151
00152
00153 dataset_key_type VolumePixelView::getSecondDatasetKey() const
00154 {
00155 if (second_volume_dataset_.get() != 0)
00156 {
00157 return(second_volume_dataset_->getDatasetKey());
00158 }
00159 else
00160 {
00161 return(dataset_key_type());
00162 }
00163 }
00164
00165
00166
00167 void VolumePixelView::lockWithDataset(dataset_key_type dataset_key)
00168 {
00169 if (data_view_mediator_ != 0)
00170 {
00171 data_view_mediator_->lockDatasets(
00172 volume_dataset_->getDatasetKey(), dataset_key);
00173 }
00174 }
00175
00176
00177
00178 void VolumePixelView::unlockFromDataset(dataset_key_type dataset_key)
00179 {
00180 if (data_view_mediator_ != 0)
00181 {
00182 data_view_mediator_->unlockDatasets(
00183 volume_dataset_->getDatasetKey(), dataset_key);
00184 }
00185 }
00186
00187
00188
00189 bool VolumePixelView::isLockedWithDataset(dataset_key_type dataset_key)
00190 {
00191 if (data_view_mediator_ != 0)
00192 {
00193 return(data_view_mediator_->areDatasetsLocked(
00194 volume_dataset_->getDatasetKey(), dataset_key));
00195 }
00196
00197 return(false);
00198 }
00199
00200
00201
00202 volume_pixel_dataset_pointer_type VolumePixelView::getVolumeDataset()
00203 {
00204 return(volume_dataset_);
00205 }
00206
00207
00208
00209 dataset_position_type const& VolumePixelView::getCurrentFocusPoint() const
00210 {
00211 return(current_focus_point_);
00212 }
00213
00214
00215
00216 void VolumePixelView::setIntensity(double window, double level)
00217 throw(NullPointerException)
00218 {
00219 if ((volume_dataset_.get() == 0))
00220 {
00221 return;
00222 }
00223
00224 volume_dataset_->setIntensity(window, level);
00225
00226 notifyDataChangedEvent(DATASET_ATTRIBUTE_INTENSITY);
00227 }
00228
00229
00230
00231 double VolumePixelView::getIntensityWindow() const
00232 {
00233 if (volume_dataset_.get() == 0)
00234 {
00235 return(0.0);
00236 }
00237 return(volume_dataset_->getIntensityWindow());
00238 }
00239
00240
00241
00242 double VolumePixelView::getIntensityLevel() const
00243 {
00244 if (volume_dataset_.get() == 0)
00245 {
00246 return(0.0);
00247 }
00248 return(volume_dataset_->getIntensityLevel());
00249 }
00250
00251
00252
00253 void VolumePixelView::setTransformationMatrix(matrix_type const& matrix)
00254 {
00255 if (volume_dataset_.get() == 0)
00256 {
00257 return;
00258 }
00259 volume_dataset_->setTransformationMatrix(matrix);
00260
00261 notifyDataChangedEvent(DATASET_ATTRIBUTE_TRANSFORMATION);
00262 }
00263
00264
00265
00266 matrix_type VolumePixelView::getTransformationMatrix() const
00267 {
00268 if (volume_dataset_.get() == 0)
00269 {
00270 return(matrix_type());
00271 }
00272 return(volume_dataset_->getTransformationMatrix());
00273 }
00274
00275
00276
00277 offset_vector_type VolumePixelView::getOffsetVector() const
00278 {
00279 if (volume_dataset_.get() == 0)
00280 {
00281 return(offset_vector_type());
00282 }
00283 return(volume_dataset_->getOffsetVector());
00284 }
00285
00286
00287
00288 void VolumePixelView::setOffsetVector(offset_vector_type const& offset)
00289 {
00290 if (volume_dataset_.get() == 0)
00291 {
00292 return;
00293 }
00294 volume_dataset_->setOffsetVector(offset);
00295
00296 notifyDataChangedEvent(DATASET_ATTRIBUTE_TRANSLATION);
00297 }
00298
00299
00300
00301 unsigned char VolumePixelView::getNumBytesPerPixel() const
00302 {
00303 if (volume_dataset_.get() == 0)
00304 {
00305 return(0);
00306 }
00307 return(volume_dataset_->getNumBytesPerPixel());
00308 }
00309
00310
00311
00312 double VolumePixelView::getMinPixelValue() const
00313 {
00314 if (volume_dataset_.get() == 0)
00315 {
00316 return(0.0);
00317 }
00318 return(volume_dataset_->getMinPixelValue());
00319 }
00320
00321
00322
00323 double VolumePixelView::getMaxPixelValue() const
00324 {
00325 if (volume_dataset_.get() == 0)
00326 {
00327 return(0.0);
00328 }
00329 return(volume_dataset_->getMaxPixelValue());
00330 }
00331
00332 }