Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkIsoDoseLevelCollections.cpp
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 #include <algorithm>
14 
16 #include "mitkExceptionMacro.h"
17 
18 namespace mitk
19 {
21 class EqualDoseFunctor
22 {
23 public:
24  typedef IsoDoseLevel::DoseValueType DoseValueType;
25 
26  explicit EqualDoseFunctor(const DoseValueType& refValue) : m_refValue(refValue)
27  {}
28 
29  bool operator () (const IsoDoseLevel* level)
30  {
31  return level->GetDoseValue() == m_refValue;
32  }
33 
34 protected:
35  DoseValueType m_refValue;
36 };
37 
39 bool lesserIsoDoseLevel(const IsoDoseLevel* first, const IsoDoseLevel* second)
40 {
41  return first->GetDoseValue() < second->GetDoseValue();
42 }
43 }
44 
46  : itk::Object()
47 {
48  if (&other != this)
49  {
50  this->m_IsoLevels = other.m_IsoLevels;
51  }
52 }
53 
55 {
56  if (index < this->m_IsoLevels.size())
57  {
58  return *(this->m_IsoLevels[index].GetPointer());
59  }
60  else
61  {
62  mitkThrow() << "Try to access non existing dose iso level.";
63  }
64 }
65 
67 {
68  auto pos = std::find_if(this->m_IsoLevels.begin(), this->m_IsoLevels.end(), EqualDoseFunctor(value));
69 
70  if (pos != this->m_IsoLevels.end())
71  {
72  return *(pos->GetPointer());
73  }
74  else
75  {
76  mitkThrow() << "Try to access non existing dose iso level.";
77  }
78 }
79 
81 {
82  if (!level)
83  {
84  mitkThrow() << "Cannot set iso level. Passed null pointer.";
85  }
86 
87  this->DeleteIsoDoseLevel(level->GetDoseValue());
88 
89  this->m_IsoLevels.push_back(level->Clone());
90 
91  std::sort(this->m_IsoLevels.begin(), this->m_IsoLevels.end(),lesserIsoDoseLevel);
92 }
93 
95 {
96  return index < this->m_IsoLevels.size();
97 }
98 
99 
101 {
102  auto pos = std::find_if(this->m_IsoLevels.begin(), this->m_IsoLevels.end(), EqualDoseFunctor(value));
103  return pos != this->m_IsoLevels.end();
104 }
105 
107 {
108  auto pos = std::find_if(this->m_IsoLevels.begin(), this->m_IsoLevels.end(), EqualDoseFunctor(value));
109 
110  if (pos != this->m_IsoLevels.end())
111  {
112  this->m_IsoLevels.erase(pos);
113  }
114 }
115 
117 {
118  if (DoseLevelExists(index))
119  {
120  this->m_IsoLevels.erase(this->m_IsoLevels.begin()+index);
121  }
122 }
123 
125 {
126  return ConstIterator(this->m_IsoLevels.begin());
127 }
128 
130 {
131  return ConstIterator(this->m_IsoLevels.end());
132 }
133 
135 {
136  return this->m_IsoLevels.size();
137 }
138 
140 {
141  this->m_IsoLevels.clear();
142 }
Stores values needed for the representation/visualization of dose iso levels.
void SetIsoDoseLevel(const IsoDoseLevel *)
bool lesserIsoDoseLevel(const IsoDoseLevel *first, const IsoDoseLevel *second)
virtual DoseValueType GetDoseValue() const
DataCollection - Class to facilitate loading/accessing structured data.
bool DoseLevelExists(IsoLevelIndexType) const
const IsoDoseLevel & GetIsoDoseLevel(IsoLevelIndexType) const
Stores values needed for the representation/visualization of dose iso levels.
#define mitkThrow()
IsoDoseLevel::DoseValueType DoseValueType
DoseValueRel DoseValueType
ConstIterator Begin(void) const
ConstIterator End(void) const
IsoLevelIndexType Size(void) const