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
|
/*=========================================================================
*
* 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);
itkOverrideGetNameOfClassMacro(ParameterObject);
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);
void
SetParameterMaps(const ParameterMapVectorType & parameterMaps);
void
AddParameterMap(const ParameterMapType & parameterMap);
const ParameterMapType &
GetParameterMap(const unsigned int index) const;
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) const;
bool
HasParameter(const unsigned int index, const ParameterKeyType & key) const;
bool
HasParameter(const ParameterKeyType & key) const;
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);
void
ReadParameterFiles(const ParameterFileNameVectorType & parameterFileNameVector);
void
AddParameterFile(const ParameterFileNameType & parameterFileName);
static void
WriteParameterFile(const ParameterMapType & parameterMap, const ParameterFileNameType & parameterFileName);
void
WriteParameterFile(const ParameterFileNameType & parameterFileName) const;
void
WriteParameterFiles() const;
void
WriteParameterFiles(const ParameterFileNameVectorType & parameterFileNameVector) const;
static void
WriteParameterFiles(const ParameterMapVectorType & parameterMapVector,
const ParameterFileNameVectorType & parameterFileNameVector);
/* Get preconfigured parameter maps. */
static 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:
ParameterMapType &
GetMutableParameterMap(const unsigned int index);
ParameterMapVectorType m_ParameterMaps;
};
} // namespace elastix
#endif // elxParameterObject_h
|