3d/vectorfield.hh
Go to the documentation of this file.
/* -*- mia-c++ -*-
*
* This file is part of MIA - a toolbox for medical image analysis
* Copyright (c) Leipzig, Madrid 1999-2017 Gert Wollny
*
* MIA is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MIA; if not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef mia_3d_3dvectorfield_hh
#define mia_3d_3dvectorfield_hh
#include <mia/3d/valueattributetranslator.hh>
#include <mia/3d/datafield.hh>
NS_MIA_BEGIN
template <typename T>
class EXPORT_3D T3DVectorfield: public T3DDatafield<T>, public CAttributedData
{
public:
T3DVectorfield() {};
T3DVectorfield(const T3DVectorfield<T>& org):
T3DDatafield<T>(org),
CAttributedData(org)
{
}
T3DVectorfield(const C3DBounds& size):
T3DDatafield<T>(size) {};
T3DVectorfield(const CAttributedData& data, const C3DBounds& size) __attribute__((deprecated)):
T3DDatafield<T>(size),
CAttributedData(data)
{
}
T3DVectorfield(const C3DBounds& size, const CAttributedData& data):
T3DDatafield<T>(size),
CAttributedData(data)
{
}
C3DFVector get_voxel_size() const
{
const PAttribute attr = get_attribute("voxel");
if (!attr) {
cvinfo() << "T3DVectorfield<T>::get_voxel_size(): "
"voxel size not defined, default to <1,1,1>\n";
return C3DFVector(1, 1, 1);
}
const CVoxelAttribute *vs = dynamic_cast<const CVoxelAttribute *>(attr.get());
if (!vs) {
cvinfo() << "T3DImage<T>::get_voxel_size(): voxel size wrong type, "
"default to <1,1,1>\n";
return C3DFVector(1, 1, 1);
}
return *vs;
}
void set_voxel_size(const C3DFVector& voxel)
{
set_attribute("voxel", PAttribute(new CVoxelAttribute(voxel)));
}
T get_interpol_val_at(const C3DFVector& p) const;
};
extern template class EXPORT_3D T3DVectorfield<C3DFVector>;
class EXPORT_3D C3DFVectorfield : public T3DVectorfield<C3DFVector>
{
public:
static const char *data_descr;
using T3DVectorfield<C3DFVector>::T3DVectorfield;
void update_as_inverse_of(const C3DFVectorfield& other, float tol, int maxiter);
void update_by_velocity(const C3DFVectorfield& velocity_field, float time_step);
};
extern template class EXPORT_3D T3DVectorfield<C3DDVector>;
typedef std::shared_ptr<C3DFVectorfield > P3DFVectorfield;
typedef T3DVectorfield<C3DDVector> C3DDVectorfield;
EXPORT_3D C3DFVectorfield& operator += (C3DFVectorfield& lhs, const C3DFVectorfield& rhs);
struct C3DLinearVectorfieldInterpolatorImpl;
class EXPORT_3D C3DLinearVectorfieldInterpolator
{
public:
C3DLinearVectorfieldInterpolator(const C3DFVectorfield& field);
~C3DLinearVectorfieldInterpolator();
C3DFVector operator () (const C3DFVector& x) const;
private:
const C3DFVectorfield& m_field;
const size_t m_save_index_range;
const size_t m_field_size_m1;
C3DLinearVectorfieldInterpolatorImpl *impl;
};
NS_MIA_END
#endif
datafield.hh
C3DBounds
T3DVector< unsigned int > C3DBounds
A unsinged int 3D Vector (used for 3D field sizes).
Definition 3d/vector.hh:415
C3DFVector
T3DVector< float > C3DFVector
A float 3D Vector.
Definition 3d/vector.hh:409
PAttribute
std::shared_ptr< CAttribute > PAttribute
define the shared pointer wrapped attribute pointer
Definition attributes.hh:102
C3DFVectorfield
a 3D field of floating point single accuracy 3D vectors
Definition 3d/vectorfield.hh:103
C3DFVectorfield::data_descr
static const char * data_descr
Definition 3d/vectorfield.hh:105
C3DFVectorfield::update_by_velocity
void update_by_velocity(const C3DFVectorfield &velocity_field, float time_step)
C3DFVectorfield::update_as_inverse_of
void update_as_inverse_of(const C3DFVectorfield &other, float tol, int maxiter)
evaluate this vector field as the inverse of another
C3DLinearVectorfieldInterpolator::~C3DLinearVectorfieldInterpolator
~C3DLinearVectorfieldInterpolator()
C3DLinearVectorfieldInterpolator::C3DLinearVectorfieldInterpolator
C3DLinearVectorfieldInterpolator(const C3DFVectorfield &field)
CAttributedData::CAttributedData
CAttributedData()
CAttributedData::set_attribute
void set_attribute(const std::string &key, PAttribute attr)
CAttributedData::get_attribute
const PAttribute get_attribute(const std::string &key) const
T3DDatafield::size
size_type size() const
Definition 3d/datafield.hh:244
T3DDatafield::T3DDatafield
T3DDatafield()
T3DVectorfield
a 3D vector field
Definition 3d/vectorfield.hh:39
T3DVectorfield::T3DVectorfield
T3DVectorfield(const CAttributedData &data, const C3DBounds &size) __attribute__((deprecated))
Definition 3d/vectorfield.hh:52
T3DVectorfield::T3DVectorfield
T3DVectorfield(const C3DBounds &size)
Definition 3d/vectorfield.hh:49
T3DVectorfield::T3DVectorfield
T3DVectorfield(const C3DBounds &size, const CAttributedData &data)
Definition 3d/vectorfield.hh:58
T3DVectorfield::T3DVectorfield
T3DVectorfield(const T3DVectorfield< T > &org)
Definition 3d/vectorfield.hh:42
T3DVectorfield::get_voxel_size
C3DFVector get_voxel_size() const
Definition 3d/vectorfield.hh:64
T3DVectorfield::get_interpol_val_at
T get_interpol_val_at(const C3DFVector &p) const
T3DVectorfield::set_voxel_size
void set_voxel_size(const C3DFVector &voxel)
Definition 3d/vectorfield.hh:85
T3DVectorfield::T3DVectorfield
T3DVectorfield()
Definition 3d/vectorfield.hh:41
EXPORT_3D
#define EXPORT_3D
Definition defines3d.hh:45
NS_MIA_BEGIN
#define NS_MIA_BEGIN
conveniance define to start the mia namespace
Definition defines.hh:33
NS_MIA_END
#define NS_MIA_END
conveniance define to end the mia namespace
Definition defines.hh:36
operator+=
EXPORT_3D C3DFVectorfield & operator+=(C3DFVectorfield &lhs, const C3DFVectorfield &rhs)
C3DDVectorfield
T3DVectorfield< C3DDVector > C3DDVectorfield
a 3D field of floating point double accuracy 3D vectors
Definition 3d/vectorfield.hh:140
CVoxelAttribute
C3DValueAttribute< float > CVoxelAttribute
a 3D floating point vector used for the voxel size attribute
Definition valueattributetranslator.hh:93
P3DFVectorfield
NS_MIA_BEGIN typedef std::shared_ptr< C3DFVectorfield > P3DFVectorfield
pointer type for a 3D vector field
Definition multireg.hh:36
cvinfo
vstream & cvinfo()
informal output that may be of interest to understand problems with a program and are of higher prior...
Definition msgstream.hh:262
valueattributetranslator.hh