1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
/*=========================================================================
*
* Copyright UMC Utrecht and contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
#ifndef elxParameterObject_h
#define elxParameterObject_h
#include "itkObjectFactory.h"
#include "itkDataObject.h"
#include "elxMacro.h"
namespace elastix
{
// TODO: Why does the compiler not see ELASTIXLIB_API declspec in elxMacro.h?
// error: variable has incomplete type 'class ELASTIXLIB_API'
// with class ELASTIXLIB_API ParameterObject : public itk::DataObject
class ParameterObject : public itk::DataObject
{
public:
using Self = ParameterObject;
using Pointer = itk::SmartPointer<Self>;
using ConstPointer = itk::SmartPointer<const Self>;
itkNewMacro(Self);
itkTypeMacro(ParameterObject, itk::DataObject);
using ParameterKeyType = std::string;
using ParameterValueType = std::string;
using ParameterValueVectorType = std::vector<ParameterValueType>;
using ParameterValueVectorIterator = ParameterValueVectorType::iterator;
using ParameterMapType = std::map<ParameterKeyType, ParameterValueVectorType>;
using ParameterMapIterator = ParameterMapType::iterator;
using ParameterMapConstIterator = ParameterMapType::const_iterator;
using ParameterMapVectorType = std::vector<ParameterMapType>;
using ParameterFileNameType = std::string;
using ParameterFileNameVectorType = std::vector<ParameterFileNameType>;
using ParameterFileNameVectorIterator = ParameterFileNameVectorType::iterator;
using ParameterFileNameVectorConstIterator = ParameterFileNameVectorType::const_iterator;
/* Set/Get/Add parameter map or vector of parameter maps. */
// TODO: Use itkSetMacro for ParameterMapVectorType
void
SetParameterMap(const ParameterMapType & parameterMap);
void
SetParameterMap(const unsigned int index, const ParameterMapType & parameterMap);
[[deprecated("Instead of calling this overload, please call SetParameterMaps")]] void
SetParameterMap(const ParameterMapVectorType & parameterMaps);
void
SetParameterMaps(const ParameterMapVectorType & parameterMaps);
void
AddParameterMap(const ParameterMapType & parameterMap);
const ParameterMapType &
GetParameterMap(const unsigned int index) const;
[[deprecated("Instead of calling this member function, please call GetParameterMaps")]] const ParameterMapVectorType &
GetParameterMap() const
{
return m_ParameterMaps;
}
const ParameterMapVectorType &
GetParameterMaps() const
{
return m_ParameterMaps;
}
unsigned int
GetNumberOfParameterMaps() const
{
return static_cast<unsigned int>(m_ParameterMaps.size());
}
void
SetParameter(const unsigned int index, const ParameterKeyType & key, const ParameterValueType & value);
void
SetParameter(const unsigned int index, const ParameterKeyType & key, const ParameterValueVectorType & value);
void
SetParameter(const ParameterKeyType & key, const ParameterValueType & value);
void
SetParameter(const ParameterKeyType & key, const ParameterValueVectorType & value);
const ParameterValueVectorType &
GetParameter(const unsigned int index, const ParameterKeyType & key);
void
RemoveParameter(const unsigned int index, const ParameterKeyType & key);
void
RemoveParameter(const ParameterKeyType & key);
/* Read/Write parameter file or multiple parameter files to/from disk. */
void
ReadParameterFile(const ParameterFileNameType & parameterFileName);
[[deprecated("Instead of calling this overload, please call ReadParameterFiles")]] void
ReadParameterFile(const ParameterFileNameVectorType & parameterFileNameVector);
void
ReadParameterFiles(const ParameterFileNameVectorType & parameterFileNameVector);
void
AddParameterFile(const ParameterFileNameType & parameterFileName);
[[deprecated("Instead of calling this overload, please call WriteParameterFiles")]] void
WriteParameterFile() const;
static void
WriteParameterFile(const ParameterMapType & parameterMap, const ParameterFileNameType & parameterFileName);
void
WriteParameterFile(const ParameterFileNameType & parameterFileName) const;
[[deprecated("Instead of calling this overload, please call WriteParameterFiles")]] void
WriteParameterFile(const ParameterFileNameVectorType & parameterFileNameVector) const;
[[deprecated("Instead of calling this overload, please call WriteParameterFiles")]] static void
WriteParameterFile(const ParameterMapVectorType & parameterMapVector,
const ParameterFileNameVectorType & parameterFileNameVector);
void
WriteParameterFiles() const;
void
WriteParameterFiles(const ParameterFileNameVectorType & parameterFileNameVector) const;
static void
WriteParameterFiles(const ParameterMapVectorType & parameterMapVector,
const ParameterFileNameVectorType & parameterFileNameVector);
/* Get preconfigured parameter maps. */
static const ParameterMapType
GetDefaultParameterMap(const std::string & transformName,
const unsigned int numberOfResolutions = 4u,
const double finalGridSpacingInPhysicalUnits = 10.0);
protected:
void
PrintSelf(std::ostream & os, itk::Indent indent) const override;
private:
ParameterMapVectorType m_ParameterMaps;
};
} // namespace elastix
#endif // elxParameterObject_h
|