volume_pixel_view.cpp

Go to the documentation of this file.
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     // see to it that the current focus point lies within both datasets
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     //second_volume_dataset_->setFocusPoint(current_focus_point_);
00117     
00118     // lock the datasets so that the dependant views of both datasets get
00119     // updated on changes of any of the two datasets
00120     //if (data_view_mediator_ != 0)
00121     //{
00122     //  data_view_mediator_->lockDatasets(dataset_key_, second_dataset_key_);
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 }

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