X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=common%2FvvImage.h;h=cbb0284ce0e925f706032825c7e8888da7744987;hb=8d51bd1cb7e9ca416b46677dcd73ba76d107a587;hp=6ab4c2b4c62c91e54bbdf7205bc2601f69e4bb21;hpb=758de1c14c7f16d924e1a2a575d52cd3e48ec503;p=clitk.git diff --git a/common/vvImage.h b/common/vvImage.h index 6ab4c2b..cbb0284 100644 --- a/common/vvImage.h +++ b/common/vvImage.h @@ -1,69 +1,97 @@ /*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv - Program: vv - Language: C++ - Author : Pierre Seroul (pierre.seroul@gmail.com) + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://www.centreleonberard.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr -Copyright (C) 2008 -Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr -CREATIS-LRMN http://www.creatis.insa-lyon.fr + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, version 3 of the License. + It is distributed under dual licence -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -=========================================================================*/ -#ifndef vvImage_h -#define vvImage_h + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +===========================================================================**/ +#ifndef VVIMAGE_H +#define VVIMAGE_H #include #include #include +#include +#include +#include + +#define VTK_EXCLUDE_STRSTREAM_HEADERS +#include +#include class vtkImageData; +//------------------------------------------------------------------------------ class vvImage : public itk::LightObject { public : - typedef vvImage Self; - typedef itk::SmartPointer Pointer; - itkNewMacro(Self); + typedef vvImage Self; + typedef itk::SmartPointer Pointer; + typedef itk::ProcessObject::Pointer ConverterPointer; + itkNewMacro(Self); + + struct DimensionDispatchBase {}; + template< unsigned int VDimension > + struct DimensionDispatch:public DimensionDispatchBase {}; - void Init(); - void SetImage(std::vector images); - void AddImage(vtkImageData* image); - const std::vector& GetVTKImages() { - return mVtkImages; - } - - int GetNumberOfDimensions() const; - int GetNumberOfSpatialDimensions(); - ///Writes the scalar range to the provided array, which must have room for two doubles - void GetScalarRange(double* range); - unsigned long GetActualMemorySize(); - std::vector GetSpacing(); - std::vector GetOrigin() const; - std::vector GetSize(); - std::string GetScalarTypeAsString(); - int GetNumberOfScalarComponents(); - int GetScalarSize(); - bool IsTimeSequence() { - return mVtkImages.size()>1; - } + void Init(); + void Reset(); + template void AddItkImage(TItkImageType *input); + void AddVtkImage(vtkImageData* input); + const std::vector& GetVTKImages(); + vtkImageData* GetFirstVTKImageData(); + int GetNumberOfDimensions() const; + int GetNumberOfSpatialDimensions(); + void GetScalarRange(double* range); + template void ComputeScalarRangeBase(itk::Image *input); + template void ComputeScalarRange(DimensionDispatchBase, itk::Image *input); + template void ComputeScalarRange(DimensionDispatch< 1 >, itk::Image *input); + unsigned long GetActualMemorySize(); + std::vector GetSpacing(); + std::vector GetOrigin() const; + std::vector GetSize(); + std::vector< std::vector > GetDirection(); + std::string GetScalarTypeAsITKString(); + int GetNumberOfScalarComponents(); + int GetScalarSize(); + bool IsTimeSequence() const; + bool IsScalarTypeInteger(); + bool IsScalarTypeInteger(int t); + const std::vector< vtkSmartPointer >& GetTransform(); + void InitializeTransform(); + void SetTimeSpacing(double s) { mTimeSpacing = s; } + void SetTimeOrigin(double o) { mTimeOrigin = o; } + bool HaveSameSizeAndSpacingThan(vvImage * other); + //META DATA + itk::MetaDataDictionary* GetFirstMetaDataDictionary(); private: - vvImage(); - ~vvImage(); - std::vector mVtkImages; + vvImage(); + ~vvImage(); + + std::vector< ConverterPointer > mItkToVtkConverters; + std::vector< vtkImageData* > mVtkImages; + std::vector< vtkSmartPointer > mTransform; + //META DATA + std::vector< itk::MetaDataDictionary* > mDictionary; + double mTimeOrigin; + double mTimeSpacing; + unsigned int mImageDimension; + double mrange[2]; }; +//------------------------------------------------------------------------------ + +#include "vvImage.txx" #endif