Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MITKSLICEDGEOMETRY3D_H_HEADER_INCLUDED_C1EBD0AD
00020 #define MITKSLICEDGEOMETRY3D_H_HEADER_INCLUDED_C1EBD0AD
00021
00022 #include "mitkGeometry3D.h"
00023 #include "mitkPlaneGeometry.h"
00024
00025 namespace mitk {
00026
00027 class SliceNavigationController;
00028 class NavigationController;
00029
00068 class MITK_CORE_EXPORT SlicedGeometry3D : public mitk::Geometry3D
00069 {
00070 public:
00071 mitkClassMacro(SlicedGeometry3D, Geometry3D);
00072
00074 itkNewMacro(Self);
00075
00083 void UpdateInformation();
00084
00085
00107 virtual mitk::Geometry2D* GetGeometry2D( int s ) const;
00108
00109
00113 virtual bool SetGeometry2D( mitk::Geometry2D *geometry2D, int s );
00114
00115 virtual void SetTimeBounds( const mitk::TimeBounds& timebounds );
00116
00117
00118 virtual const mitk::BoundingBox* GetBoundingBox() const;
00119
00123 itkGetConstMacro( Slices, unsigned int );
00124
00125
00129 virtual bool IsValidSlice( int s = 0 ) const;
00130
00131 virtual void SetReferenceGeometry( Geometry3D *referenceGeometry );
00132
00138 virtual void SetSpacing( const mitk::Vector3D &aSpacing );
00139
00147 virtual void SetSliceNavigationController(
00148 mitk::SliceNavigationController *snc );
00149 mitk::SliceNavigationController *GetSliceNavigationController();
00150
00163 itkGetConstMacro(EvenlySpaced, bool);
00164
00165 virtual void SetEvenlySpaced(bool on = true);
00166
00177 virtual void SetDirectionVector(const mitk::Vector3D& directionVector);
00178 itkGetConstMacro(DirectionVector, const mitk::Vector3D&);
00179
00180 virtual AffineGeometryFrame3D::Pointer Clone() const;
00181
00182 static const std::string SLICES;
00183 const static std::string DIRECTION_VECTOR;
00184 const static std::string EVENLY_SPACED;
00185
00194 virtual void Initialize( unsigned int slices );
00195
00204 virtual void InitializeEvenlySpaced( mitk::Geometry2D *geometry2D,
00205 unsigned int slices, bool flipped=false );
00206
00216 virtual void InitializeEvenlySpaced( mitk::Geometry2D *geometry2D,
00217 mitk::ScalarType zSpacing, unsigned int slices, bool flipped=false );
00218
00237 virtual void InitializePlanes( const mitk::Geometry3D *geometry3D,
00238 mitk::PlaneGeometry::PlaneOrientation planeorientation, bool top=true,
00239 bool frontside=true, bool rotated=false );
00240
00241
00242 virtual void SetImageGeometry(const bool isAnImageGeometry);
00243
00244 virtual void ExecuteOperation(Operation* operation);
00245
00246
00247 protected:
00248 SlicedGeometry3D();
00249
00250 virtual ~SlicedGeometry3D();
00251
00252
00266 virtual void ReinitializePlanes( const Point3D ¢er,
00267 const Point3D &referencePoint );
00268
00269
00270 ScalarType GetLargestExtent( const Geometry3D *geometry );
00271
00272
00273 virtual void InitializeGeometry(Self * newGeometry) const;
00274
00275 void PrintSelf(std::ostream& os, itk::Indent indent) const;
00276
00281 double CalculateSpacing( const mitk::Vector3D &direction ) const;
00282
00283
00288 mitk::Vector3D AdjustNormal( const mitk::Vector3D &normal ) const;
00289
00290
00294 mutable std::vector<Geometry2D::Pointer> m_Geometry2Ds;
00295
00296
00306 bool m_EvenlySpaced;
00307
00314 mutable mitk::Vector3D m_DirectionVector;
00315
00317 unsigned int m_Slices;
00318
00320 mitk::Geometry3D *m_ReferenceGeometry;
00321
00324
00325 mitk::SliceNavigationController *m_SliceNavigationController;
00326 };
00327
00328 }
00329
00330 #endif