Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "mitkImageTimeSelector.h"
00020 #include <itkSmartPointerForwardReference.txx>
00021
00022
00023 mitk::ImageTimeSelector::ImageTimeSelector() : m_TimeNr(0), m_ChannelNr(0)
00024 {
00025 }
00026
00027
00028 mitk::ImageTimeSelector::~ImageTimeSelector()
00029 {
00030 }
00031
00032 void mitk::ImageTimeSelector::GenerateOutputInformation()
00033 {
00034 Image::ConstPointer input = this->GetInput();
00035 Image::Pointer output = this->GetOutput();
00036
00037 itkDebugMacro(<<"GenerateOutputInformation()");
00038
00039 int dim=(input->GetDimension()<3?input->GetDimension():3);
00040 output->Initialize(input->GetPixelType(), dim, input->GetDimensions());
00041
00042 if( (unsigned int) m_TimeNr >= input->GetDimension(3) )
00043 {
00044 m_TimeNr = input->GetDimension(3)-1;
00045 }
00046
00047
00048 output->SetGeometry(dynamic_cast<Geometry3D*>(input->GetSlicedGeometry(m_TimeNr)->Clone().GetPointer()));
00049 output->SetPropertyList(input->GetPropertyList()->Clone());
00050 }
00051
00052 void mitk::ImageTimeSelector::GenerateData()
00053 {
00054 const Image::RegionType& requestedRegion = this->GetOutput()->GetRequestedRegion();
00055
00056
00057 if(requestedRegion.GetSize(2)>1)
00058 this->SetVolumeItem( this->GetVolumeData(m_TimeNr, m_ChannelNr), 0 );
00059 else
00060
00061 this->SetSliceItem( this->GetSliceData(requestedRegion.GetIndex(2), m_TimeNr, m_ChannelNr), requestedRegion.GetIndex(2), 0 );
00062 }
00063
00064 void mitk::ImageTimeSelector::GenerateInputRequestedRegion()
00065 {
00066 Superclass::GenerateInputRequestedRegion();
00067
00068 ImageToImageFilter::InputImagePointer input =
00069 const_cast< mitk::ImageToImageFilter::InputImageType * > ( this->GetInput() );
00070 Image::Pointer output = this->GetOutput();
00071
00072 Image::RegionType requestedRegion;
00073 requestedRegion = output->GetRequestedRegion();
00074 requestedRegion.SetIndex(3, m_TimeNr);
00075 requestedRegion.SetIndex(4, m_ChannelNr);
00076 requestedRegion.SetSize(3, 1);
00077 requestedRegion.SetSize(4, 1);
00078
00079 input->SetRequestedRegion( & requestedRegion );
00080 }