34#ifndef AIMS_TRANSFORMATION_TRANSFORMATION_CHAIN_H
35#define AIMS_TRANSFORMATION_TRANSFORMATION_CHAIN_H
39#include <cartobase/smart/rcptr.h>
47 class FFDChainReductor;
69class TransformationChain3d :
public soma::Transformation3d
72 typedef std::list<carto::const_ref<Transformation3d> > ListType;
73 typedef ListType::iterator iterator;
74 typedef ListType::const_iterator const_iterator;
76 TransformationChain3d();
77 virtual ~TransformationChain3d();
80 void push_back(
const carto::const_ref<Transformation3d>& transformation);
84 void push_front(
const carto::const_ref<Transformation3d>& transformation);
88 iterator begin() {
return _transformations.begin(); }
89 const_iterator begin()
const {
return _transformations.begin(); }
90 iterator end() {
return _transformations.end(); }
91 const_iterator end()
const {
return _transformations.end(); }
93 bool isIdentity() const CARTO_OVERRIDE;
94 bool invertible() const CARTO_OVERRIDE;
95 std::unique_ptr<soma::Transformation> getInverse() const CARTO_OVERRIDE;
96 bool isDirect() const override;
131 carto::const_ref<soma::Transformation3d>
132 simplify(
bool allow_ffd = false ) const;
134 friend class aims::FFDChainReductor;
137 typedef carto::const_ref<soma::Transformation3d> (
138 *FFDChainReductorMethod)( const carto::rc_ptr<TransformationChain3d> & );
140 ListType _transformations;
141 static FFDChainReductorMethod _reductorMethod;
144 Point3dd transformDouble(
double x,
double y,
double z ) const CARTO_OVERRIDE;
145 Point3df transformFloat(
float x,
float y,
float z ) const CARTO_OVERRIDE;
146 Point3dd transformPoint3dd( const Point3dd & pos ) const CARTO_OVERRIDE;
147 Point3df transformPoint3df( const Point3df & dir ) const CARTO_OVERRIDE;
148 void setReferentialsInHeader();
149 static
void registerFFDReductor( FFDChainReductorMethod method );
154 carto::rc_ptr<soma::Transformation3d>
155 operator * ( const carto::rc_ptr<soma::Transformation3d> &
157 const carto::rc_ptr<soma::Transformation3d> &
168 template <>
inline std::string
169 DataTypeCode<aims::TransformationChain3d>::objectType()
171 return "TransformationChain3d";
174 template <>
inline std::string
175 DataTypeCode<aims::TransformationChain3d>::dataType()
180 template <>
inline std::string
181 DataTypeCode<aims::TransformationChain3d>::name()
183 return "TransformationChain3d";
The class for EcatSino data write operation.