Medical Imaging Interaction Toolkit  2026.06.00
Medical Imaging Interaction Toolkit
mitkTimeHelper.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef mitkTimeHelper_h
14 #define mitkTimeHelper_h
15 
16 #include <mitkTimeGeometry.h>
17 
18 namespace mitk
19 {
29  template <class TOutputRegion, class TInputRegion>
30  void GenerateTimeInInputRegion(const mitk::TimeGeometry *outputTimeGeometry,
31  const TOutputRegion &outputRegion,
32  const mitk::TimeGeometry *inputTimeGeometry,
33  TInputRegion &inputRegion)
34  {
35  assert(outputTimeGeometry != nullptr);
36  assert(inputTimeGeometry != nullptr);
37 
38  // convert the start-index-time of output in start-index-time of input via millisecond-time
39  mitk::TimePointType timeInMS = outputTimeGeometry->TimeStepToTimePoint(outputRegion.GetIndex(3));
40  mitk::TimeStepType timestep = inputTimeGeometry->TimePointToTimeStep(timeInMS);
41  if ((timeInMS > itk::NumericTraits<mitk::ScalarType>::NonpositiveMin()) &&
42  (inputTimeGeometry->IsValidTimeStep(timestep)))
43  inputRegion.SetIndex(3, timestep);
44  else
45  inputRegion.SetIndex(3, 0);
46  // convert the end-index-time of output in end-index-time of input via millisecond-time
47  timeInMS = outputTimeGeometry->TimeStepToTimePoint(outputRegion.GetIndex(3) + outputRegion.GetSize(3) - 1);
48  timestep = inputTimeGeometry->TimePointToTimeStep(timeInMS);
49  if ((timeInMS > itk::NumericTraits<mitk::ScalarType>::NonpositiveMin()) &&
50  (outputTimeGeometry->IsValidTimeStep(timestep)))
51  inputRegion.SetSize(3, timestep - inputRegion.GetIndex(3) + 1);
52  else
53  inputRegion.SetSize(3, 1);
54  }
55 
63  template <class TOutputData, class TInputData>
64  void GenerateTimeInInputRegion(const TOutputData *output, TInputData *input)
65  {
66  assert(output != nullptr);
67  assert(input != nullptr);
68 
69  const typename TOutputData::RegionType &outputRegion = output->GetRequestedRegion();
70  typename TInputData::RegionType inputRegion;
71 
72  if (outputRegion.GetSize(3) < 1)
73  {
74  typename TInputData::RegionType::SizeType inputsize;
75  inputsize.Fill(0);
76  inputRegion.SetSize(inputsize);
77  input->SetRequestedRegion(&inputRegion);
78  }
79 
80  // convert the start-index-time of output in start-index-time of input via millisecond-time
81  inputRegion = input->GetRequestedRegion();
82  GenerateTimeInInputRegion(output->GetTimeGeometry(), outputRegion, input->GetTimeGeometry(), inputRegion);
83  input->SetRequestedRegion(&inputRegion);
84  }
85 
86 } // end namespace mitk
87 
88 #endif
virtual TimeStepType TimePointToTimeStep(TimePointType timePoint) const =0
Converts a time point to the corresponding time step.
virtual TimePointType TimeStepToTimePoint(TimeStepType timeStep) const =0
Converts a time step to a time point.
virtual bool IsValidTimeStep(TimeStepType timeStep) const =0
Test for the given time step if a geometry is available.
Find image slices visible on a given plane.
void GenerateTimeInInputRegion(const mitk::TimeGeometry *outputTimeGeometry, const TOutputRegion &outputRegion, const mitk::TimeGeometry *inputTimeGeometry, TInputRegion &inputRegion)
Convert the start- and end-index-time of output-region in start- and end-index-time of input-region v...
std::size_t TimeStepType
Type for time step indices (non-negative integers starting from 0).
mitk::ScalarType TimePointType
Type for time point values in milliseconds (ms).