pixel_dataset.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------
00012 //--------------------------------------------------
00013 
00014 #include "pixel_dataset.h"
00015 #include "pixel_metadata.h"
00016 
00017 #include <limits>
00018 
00019 namespace imedgine
00020 {
00021   
00022   //--------------------------------------------------
00023   
00024   bool operator == (matrix_type matrix, identity_matrix_type identity_matrix)
00025   {
00026     if ((matrix.size1() == identity_matrix.size1()) && 
00027          (matrix.size2() == identity_matrix.size2()))
00028     {
00029       matrix_type::const_iterator1 m_iter = matrix.begin1();
00030       identity_matrix_type::const_iterator1 im_iter = identity_matrix.begin1();
00031       for ( ; m_iter != matrix.end1(); ++m_iter, ++im_iter)
00032       {
00033         if (*m_iter != *im_iter)
00034         {
00035           return(false);
00036         }
00037       }
00038       return(true);
00039     }
00040     return(false);
00041   }
00042   
00043   //--------------------------------------------------
00044   
00045   bool operator != (matrix_type matrix, identity_matrix_type identity_matrix)
00046   {
00047     return((matrix == identity_matrix) == false);
00048   }
00049   
00050   
00051   //--------------------------------------------------
00052   
00053   PixelDataset::PixelDataset(dataset_type type, dataset_key_type dataset_key,
00054                              unsigned char num_dimensions, 
00055                              unsigned char num_bytes_per_pixel)
00056   : Dataset(type, dataset_key),
00057     num_dimensions_(num_dimensions),
00058     num_bytes_per_pixel_(num_bytes_per_pixel),
00059     dataset_size_(num_dimensions_),
00060     current_focus_point_(num_dimensions_),
00061     spacings_(num_dimensions_),
00062     min_pixel_value_(0.0),
00063     max_pixel_value_(0.0),
00064     transformation_matrix_(identity_matrix_type(
00065         num_dimensions_, num_dimensions_)),
00066     offset_vector_(num_dimensions_, 0)
00067   {
00068   }
00069   
00070   //--------------------------------------------------
00071   
00072   PixelDataset::PixelDataset(PixelDataset const& src)
00073   : Dataset(src)
00074   {
00075   }
00076   
00077   //--------------------------------------------------
00078   
00079   PixelDataset::~PixelDataset() 
00080   {
00081   }
00082   
00083   //--------------------------------------------------
00084   
00085   metadata_pointer_type PixelDataset::getMetadata() const
00086   {
00087     return(metadata_pointer_type(new PixelMetadata(
00088         num_dimensions_, dataset_size_, spacings_, num_bytes_per_pixel_)));
00089   }
00090   
00091   //--------------------------------------------------
00092   
00093   size_type PixelDataset::getNumElements() const
00094   {
00095     size_type num_elements = 1;
00096     
00097     for (unsigned char dim = 0; dim < num_dimensions_; ++dim)
00098     {
00099       num_elements *= dataset_size_[dim];
00100     }
00101     return(num_elements);
00102   }
00103   
00104   //--------------------------------------------------
00105   
00106   unsigned char PixelDataset::getNumDimensions() const
00107   {
00108     return(num_dimensions_);
00109   }
00110   
00111   //--------------------------------------------------
00112   
00113   unsigned char PixelDataset::getNumBytesPerPixel() const
00114   {
00115     return(num_bytes_per_pixel_);
00116   }
00117     
00118   //--------------------------------------------------
00119   
00120   dataset_position_type const& PixelDataset::getSize() const
00121   {
00122     return(dataset_size_);
00123   }
00124   
00125   //--------------------------------------------------
00126   
00127   void PixelDataset::setFocusPoint(
00128       dataset_position_type const& focus_point)
00129   {
00130     current_focus_point_ = focus_point;
00131   }
00132     
00133   //--------------------------------------------------
00134   
00135   void PixelDataset::setFocusPointAt(unsigned char dimension, index_type index)
00136       throw(IndexOutOfBoundsException)
00137   {
00138     try
00139     {
00140       if (index >= dataset_size_.at(dimension))
00141       {
00142         throw(IndexOutOfBoundsException("PixelDataset::setFocusPointAt"));
00143       }
00144       current_focus_point_.at(dimension) = index; 
00145     }
00146     catch (std::out_of_range const&)
00147     {}
00148   }
00149   
00150   //--------------------------------------------------
00151 
00152   dataset_position_type const& PixelDataset::getFocusPoint() const
00153   {
00154     return(current_focus_point_);
00155   }
00156   
00157   //--------------------------------------------------
00158   
00159   void PixelDataset::setSpacings(std::vector<double> spacings)
00160   {
00161     try
00162     {
00163       for (unsigned char dim_index = 0; dim_index < num_dimensions_; ++dim_index)
00164       {
00165         spacings_.at(dim_index) = spacings.at(dim_index);
00166       }
00167     }
00168     catch (...)
00169     {}
00170   }
00171 
00172   //--------------------------------------------------
00173 
00174   double PixelDataset::getMinPixelValue() const
00175   {
00176     return(min_pixel_value_);
00177   }
00178 
00179   //--------------------------------------------------
00180 
00181   double PixelDataset::getMaxPixelValue() const
00182   {
00183     return(max_pixel_value_);
00184   }
00185   
00186   //----------------------------------------------------
00187     
00188   void PixelDataset::setTransformationMatrix(matrix_type const& matrix)
00189   {
00190     transformation_matrix_ = matrix;
00191   }
00192     
00193  //----------------------------------------------------
00194     
00195   matrix_type const& PixelDataset::getTransformationMatrix() const
00196   {
00197     return(transformation_matrix_);
00198   }
00199     
00200   //----------------------------------------------------
00201     
00202   void PixelDataset::setOffsetVector(offset_vector_type const& offset)
00203   {
00204     offset_vector_ = offset;
00205   }
00206     
00207   //----------------------------------------------------
00208     
00209   offset_vector_type const& PixelDataset::getOffsetVector() const
00210   {
00211     return(offset_vector_);
00212   }
00213   
00214 }

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