Medical Imaging Interaction Toolkit
2024.12.99-d991a09f
Medical Imaging Interaction Toolkit
|
Describes the geometry of a data object consisting of slices. More...
#include <mitkSlicedGeometry3D.h>
Public Types | |
typedef SlicedGeometry3D | Self |
typedef BaseGeometry | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SmartPointer< const Self > | ConstPointer |
![]() | |
typedef BaseGeometry | Self |
typedef itk::Object | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SmartPointer< const Self > | ConstPointer |
typedef GeometryTransformHolder::TransformType | TransformType |
typedef itk::BoundingBox< unsigned long, 3, ScalarType > | BoundingBoxType |
typedef BoundingBoxType::BoundsArrayType | BoundsArrayType |
typedef BoundingBoxType::Pointer | BoundingBoxPointer |
Public Member Functions | |
virtual std::vector< std::string > | GetClassHierarchy () const override |
virtual const char * | GetClassName () const |
Pointer | Clone () const |
virtual mitk::PlaneGeometry * | GetPlaneGeometry (int s) const |
Returns the PlaneGeometry of the slice (s). More... | |
const PlaneGeometry * | GetGeometry2D (int s) |
void | SetGeometry2D (PlaneGeometry *geo, int s) |
void | ChangeImageGeometryConsideringOriginOffset (const bool isAnImageGeometry) override |
When switching from an Image Geometry to a normal Geometry (and the other way around), you have to. More... | |
const mitk::BoundingBox * | GetBoundingBox () const override |
virtual unsigned int | GetSlices () const |
Get the number of slices. More... | |
virtual bool | SetPlaneGeometry (mitk::PlaneGeometry *geometry2D, int s) |
Set PlaneGeometry of slice s. More... | |
virtual bool | IsValidSlice (int s=0) const |
Check whether a slice exists. More... | |
virtual const BaseGeometry * | GetReferenceGeometry () const |
virtual void | SetReferenceGeometry (const BaseGeometry *referenceGeometry) |
bool | HasReferenceGeometry () const |
virtual void | SetSliceNavigationController (mitk::SliceNavigationController *snc) |
Set the SliceNavigationController corresponding to this sliced geometry. More... | |
mitk::SliceNavigationController * | GetSliceNavigationController () |
virtual bool | GetEvenlySpaced () const |
Set/Get whether the SlicedGeometry3D is evenly-spaced (m_EvenlySpaced) More... | |
virtual void | SetEvenlySpaced (bool on=true) |
virtual void | SetDirectionVector (const mitk::Vector3D &directionVector) |
Set/Get the vector between slices for the evenly-spaced case (m_EvenlySpaced==true). More... | |
virtual const mitk::Vector3D & | GetDirectionVector () const |
itk::LightObject::Pointer | InternalClone () const override |
virtual void | InitializeSlicedGeometry (unsigned int slices) |
Tell this instance how many PlaneGeometries it shall manage. Bounding box and the PlaneGeometries must be set additionally by calling the respective methods! More... | |
virtual void | InitializeEvenlySpaced (mitk::PlaneGeometry *geometry2D, unsigned int slices) |
Completely initialize this instance as evenly-spaced with slices parallel to the provided PlaneGeometry that is used as the first slice and for spacing calculation. More... | |
virtual void | InitializeEvenlySpaced (mitk::PlaneGeometry *geometry2D, mitk::ScalarType zSpacing, unsigned int slices) |
Completely initialize this instance as evenly-spaced with slices parallel to the provided PlaneGeometry that is used as the first slice and for spacing calculation (except z-spacing). More... | |
virtual void | InitializePlanes (const mitk::BaseGeometry *geometry3D, mitk::AnatomicalPlane orientation, bool top=true, bool frontside=true, bool rotated=false) |
Completely initialize this instance as evenly-spaced plane slices parallel to a side of the provided BaseGeometry and using its spacing information. More... | |
void | SetImageGeometry (const bool isAnImageGeometry) override |
Define that this BaseGeometry is referring to an Image. More... | |
void | ExecuteOperation (Operation *operation) override |
executes affine operations (translate, rotate, scale) More... | |
![]() | |
Pointer | Clone () const |
const Point3D | GetOrigin () const |
Get the origin, e.g. the upper-left corner of the plane. More... | |
void | SetOrigin (const Point3D &origin) |
Set the origin, i.e. the upper-left corner of the plane. More... | |
const mitk::Vector3D | GetSpacing () const |
Get the spacing (size of a pixel). More... | |
void | SetSpacing (const mitk::Vector3D &aSpacing, bool enforceSetSpacing=false) |
Set the spacing (m_Spacing). More... | |
VnlVector | GetOriginVnl () const |
Get the origin as VnlVector. More... | |
virtual unsigned int | GetFrameOfReferenceID () const |
Get the DICOM FrameOfReferenceID referring to the used world coordinate system. More... | |
virtual void | SetFrameOfReferenceID (unsigned int _arg) |
Set the DICOM FrameOfReferenceID referring to the used world coordinate system. More... | |
virtual unsigned long | GetIndexToWorldTransformLastModified () const |
void | Modified () const override |
Overload of function Modified() to prohibit several calls of Modified() using the ModifiedLock class. More... | |
virtual bool | IsValid () const |
Is this BaseGeometry in a state that is valid? More... | |
void | Initialize () |
Initialize the BaseGeometry. More... | |
void | InitializeGeometry (Self *newGeometry) const |
mitk::AffineTransform3D * | GetIndexToWorldTransform () |
Get the transformation used to convert from index to world coordinates. More... | |
const mitk::AffineTransform3D * | GetIndexToWorldTransform () const |
Get the transformation used to convert from index to world coordinates. More... | |
void | SetIndexToWorldTransform (mitk::AffineTransform3D *transform) |
void | SetIndexToWorldTransformByVtkMatrix (vtkMatrix4x4 *vtkmatrix) |
Convenience method for setting the ITK transform (m_IndexToWorldTransform) via an vtkMatrix4x4.The spacing of the new transform is copied to m_spacing. More... | |
void | SetIndexToWorldTransformWithoutChangingSpacing (mitk::AffineTransform3D *transform) |
void | SetIndexToWorldTransformByVtkMatrixWithoutChangingSpacing (vtkMatrix4x4 *vtkmatrix) |
Convenience method for setting the ITK transform (m_IndexToWorldTransform) via an vtkMatrix4x4. This function keeps the original spacing. More... | |
vtkMatrix4x4 * | GetVtkMatrix () |
const vtkMatrix4x4 * | GetVtkMatrix () const |
vtkLinearTransform * | GetVtkTransform () const |
Get the m_IndexToWorldTransform as a vtkLinearTransform. More... | |
void | SetIdentity () |
Set the transform to identity, the spacing to 1 and origin to 0. More... | |
void | Compose (const TransformType *other, bool pre=false) |
Compose new IndexToWorldTransform with a given transform. More... | |
void | Compose (const vtkMatrix4x4 *vtkmatrix, bool pre=false) |
Compose new IndexToWorldTransform with a given vtkMatrix4x4. More... | |
void | Translate (const Vector3D &vector) |
Translate the origin by a vector. More... | |
void | WorldToIndex (const mitk::Point3D &pt_mm, mitk::Point3D &pt_units) const |
Convert world coordinates (in mm) of a point to (continuous!) index coordinates. More... | |
void | WorldToIndex (const mitk::Vector3D &vec_mm, mitk::Vector3D &vec_units) const |
Convert world coordinates (in mm) of a vector vec_mm to (continuous!) index coordinates. For further information about coordinates types, please see the Geometry documentation. More... | |
template<unsigned int VIndexDimension> | |
void | WorldToIndex (const mitk::Point3D &pt_mm, itk::Index< VIndexDimension > &index) const |
Convert world coordinates (in mm) of a point to (discrete!) index coordinates. This method rounds to integer indices! For further information about coordinates types, please see the Geometry documentation. More... | |
void | IndexToWorld (const mitk::Vector3D &vec_units, mitk::Vector3D &vec_mm) const |
Convert (continuous or discrete) index coordinates of a vector vec_units to world coordinates (in mm) For further information about coordinates types, please see the Geometry documentation. More... | |
void | IndexToWorld (const mitk::Point3D &pt_units, mitk::Point3D &pt_mm) const |
Convert (continuous or discrete) index coordinates of a point to world coordinates (in mm) For further information about coordinates types, please see the Geometry documentation. More... | |
template<unsigned int VIndexDimension> | |
void | IndexToWorld (const itk::Index< VIndexDimension > &index, mitk::Point3D &pt_mm) const |
Convert (discrete) index coordinates of a point to world coordinates (in mm) For further information about coordinates types, please see the Geometry documentation. More... | |
void | IndexToWorld (const mitk::Point3D &atPt3d_units, const mitk::Vector3D &vec_units, mitk::Vector3D &vec_mm) const |
Convert (continuous or discrete) index coordinates of a vector vec_units to world coordinates (in mm) More... | |
void | WorldToIndex (const mitk::Point3D &atPt3d_mm, const mitk::Vector3D &vec_mm, mitk::Vector3D &vec_units) const |
Convert world coordinates (in mm) of a vector vec_mm to (continuous!) index coordinates. More... | |
template<class TCoordRep > | |
void | ItkPhysicalPointToWorld (const itk::Point< TCoordRep, 3 > &itkPhysicalPoint, mitk::Point3D &pt_mm) const |
Deprecated for use with ITK version 3.10 or newer. Convert ITK physical coordinates of a point (in mm, but without a rotation) into MITK world coordinates (in mm) More... | |
template<class TCoordRep > | |
void | WorldToItkPhysicalPoint (const mitk::Point3D &pt_mm, itk::Point< TCoordRep, 3 > &itkPhysicalPoint) const |
Deprecated for use with ITK version 3.10 or newer. Convert world coordinates (in mm) of a point to ITK physical coordinates (in mm, but without a possible rotation) More... | |
virtual const BoundingBoxType * | GetBoundingBox () |
const BoundsArrayType | GetBounds () const |
void | SetBounds (const BoundsArrayType &bounds) |
Set the bounding box (in index/unit coordinates) More... | |
void | SetFloatBounds (const float bounds[6]) |
Set the bounding box (in index/unit coordinates) via a float array. More... | |
void | SetFloatBounds (const double bounds[6]) |
Set the bounding box (in index/unit coordinates) via a double array. More... | |
VnlVector | GetMatrixColumn (unsigned int direction) const |
Get a VnlVector along bounding-box in the specified direction, length is spacing. More... | |
mitk::BoundingBox::Pointer | CalculateBoundingBoxRelativeToTransform (const mitk::AffineTransform3D *transform) const |
Calculates a bounding-box around the geometry relative to a coordinate system defined by a transform. More... | |
ScalarType | GetExtent (unsigned int direction) const |
Set the time bounds (in ms) More... | |
ScalarType | GetExtentInMM (int direction) const |
Get the extent of the bounding-box in the specified direction in mm. More... | |
Vector3D | GetAxisVector (unsigned int direction) const |
Get vector along bounding-box in the specified direction in mm. More... | |
virtual bool | Is2DConvertable () |
Checks, if the given geometry can be converted to 2D without information loss e.g. when a 2D image is saved, the matrix is usually cropped to 2x2, and when you load it back to MITK it will be filled with standard values. This function checks, if information would be lost during this procedure. More... | |
Point3D | GetCenter () const |
Get the center of the bounding-box in mm. More... | |
double | GetDiagonalLength2 () const |
Get the squared length of the diagonal of the bounding-box in mm. More... | |
double | GetDiagonalLength () const |
Get the length of the diagonal of the bounding-box in mm. More... | |
Point3D | GetCornerPoint (int id) const |
Get the position of the corner number id (in world coordinates) More... | |
Point3D | GetCornerPoint (bool xFront=true, bool yFront=true, bool zFront=true) const |
Get the position of a corner (in world coordinates) More... | |
void | SetExtentInMM (int direction, ScalarType extentInMM) |
Set the extent of the bounding-box in the specified direction in mm. More... | |
bool | IsInside (const mitk::Point3D &p) const |
Test whether the point p (world coordinates in mm) is inside the bounding box. More... | |
bool | IsIndexInside (const mitk::Point3D &index) const |
Test whether the point p ((continuous!)index coordinates in units) is inside the bounding box. More... | |
template<unsigned int VIndexDimension> | |
bool | IsIndexInside (const itk::Index< VIndexDimension > &index) const |
Convenience method for working with ITK indices. More... | |
virtual bool | GetImageGeometry () const |
Is this an ImageGeometry? More... | |
virtual void | ImageGeometryOn () |
virtual void | ImageGeometryOff () |
const GeometryTransformHolder * | GetGeometryTransformHolder () const |
void | MapAxesToOrientations (int axes[]) const |
One to one mapping of axes to world orientations. More... | |
![]() | |
itkTypeMacroNoParent (OperationActor) virtual ~OperationActor() | |
Static Public Member Functions | |
static const char * | GetStaticNameOfClass () |
static Pointer | New () |
static double | CalculateSpacing (const mitk::Vector3D &spacing, const mitk::Vector3D &d) |
![]() | |
static const char * | GetStaticNameOfClass () |
Static Public Attributes | |
static const std::string | SLICES |
const static std::string | DIRECTION_VECTOR |
const static std::string | EVENLY_SPACED |
Protected Member Functions | |
SlicedGeometry3D () | |
SlicedGeometry3D (const SlicedGeometry3D &other) | |
~SlicedGeometry3D () override | |
virtual void | ReinitializePlanes (const Point3D ¢er, const Point3D &referencePoint) |
ScalarType | GetLargestExtent (const BaseGeometry *geometry) |
void | PrintSelf (std::ostream &os, itk::Indent indent) const override |
double | CalculateSpacing (const mitk::Vector3D &direction) const |
mitk::Vector3D | AdjustNormal (const mitk::Vector3D &normal) const |
void | PreSetSpacing (const mitk::Vector3D &aSpacing) override |
PreSetSpacing. More... | |
![]() | |
BaseGeometry () | |
BaseGeometry (const BaseGeometry &other) | |
~BaseGeometry () override | |
void | PrintSelf (std::ostream &os, itk::Indent indent) const override |
virtual unsigned int | GetNDimensions () const |
bool | IsBoundingBoxNull () const |
bool | IsIndexToWorldTransformNull () const |
void | SetVtkMatrixDeepCopy (vtkTransform *vtktransform) |
void | _SetSpacing (const mitk::Vector3D &aSpacing, bool enforceSetSpacing=false) |
virtual void | CheckBounds (const BoundsArrayType &) |
CheckBounds. More... | |
virtual void | CheckIndexToWorldTransform (mitk::AffineTransform3D *) |
CheckIndexToWorldTransform. More... | |
Protected Attributes | |
std::vector< PlaneGeometry::Pointer > | m_PlaneGeometries |
bool | m_EvenlySpaced |
mitk::Vector3D | m_DirectionVector |
unsigned int | m_Slices |
const mitk::BaseGeometry * | m_ReferenceGeometry |
mitk::SliceNavigationController * | m_SliceNavigationController |
Additional Inherited Members | |
![]() | |
static const std::string | GetTransformAsString (TransformType *transformType) |
Describes the geometry of a data object consisting of slices.
A PlaneGeometry can be requested for each slice. In the case of evenly-spaced, plane geometries (m_EvenlySpaced==true), only the 2D-geometry of the first slice has to be set (to an instance of PlaneGeometry). The 2D geometries of the other slices are calculated by shifting the first slice in the direction m_DirectionVector by m_Spacing.z * sliceNumber. The m_Spacing member (which is only relevant in the case m_EvenlySpaced==true) describes the size of a voxel (in mm), i.e., m_Spacing.x is the voxel width in the x-direction of the plane. It is derived from the reference geometry of this SlicedGeometry3D, which usually would be the global geometry describing how datasets are to be resliced.
By default, slices are oriented in the direction of one of the main axes (x, y, z). However, by means of rotation, it is possible to realign the slices in any possible direction. In case of an inclined plane, the spacing is derived as a product of the (regular) geometry spacing and the direction vector of the plane.
SlicedGeometry3D and the associated PlaneGeometries have to be initialized in the method GenerateOutputInformation() of BaseProcess (or CopyInformation / UpdateOutputInformation of BaseData, if possible, e.g., by analyzing pic tags in Image) subclasses. See also
Rule: everything is in mm (or ms for temporal information) if not stated otherwise.
Definition at line 62 of file mitkSlicedGeometry3D.h.
typedef itk::SmartPointer<const Self> mitk::SlicedGeometry3D::ConstPointer |
Definition at line 65 of file mitkSlicedGeometry3D.h.
Definition at line 65 of file mitkSlicedGeometry3D.h.
Definition at line 65 of file mitkSlicedGeometry3D.h.
Definition at line 65 of file mitkSlicedGeometry3D.h.
|
protected |
|
protected |
|
overrideprotected |
|
protected |
The extent of the slice stack, i.e. the number of slices, depends on the plane normal. For rotated geometries, the geometry's transform needs to be accounted in this calculation.
|
protected |
Calculate "directed spacing", i.e. the spacing in directions non-orthogonal to the coordinate axes. This is done via the ellipsoid equation.
|
static |
|
overridevirtual |
When switching from an Image Geometry to a normal Geometry (and the other way around), you have to.
Reimplemented from mitk::BaseGeometry.
Pointer mitk::SlicedGeometry3D::Clone | ( | ) | const |
|
overridevirtual |
executes affine operations (translate, rotate, scale)
Reimplemented from mitk::BaseGeometry.
|
override |
|
inlineoverridevirtual |
Reimplemented from mitk::BaseGeometry.
Definition at line 65 of file mitkSlicedGeometry3D.h.
|
virtual |
Reimplemented from mitk::BaseGeometry.
|
virtual |
|
virtual |
Set/Get whether the SlicedGeometry3D is evenly-spaced (m_EvenlySpaced)
If (a) m_EvenlySpaced==true, (b) we don't have a PlaneGeometry stored for the requested slice, and (c) the first slice (s=0) is a PlaneGeometry instance, then we calculate the geometry of the requested as the plane of the first slice shifted by m_Spacing.z * s in the direction of m_DirectionVector.
|
inline |
Definition at line 96 of file mitkSlicedGeometry3D.h.
|
protected |
|
virtual |
Returns the PlaneGeometry of the slice (s).
If (a) m_EvenlySpaced==true, (b) we don't have a PlaneGeometry stored for the requested slice, and (c) the first slice (s=0) is a PlaneGeometry instance, then we calculate the geometry of the requested as the plane of the first slice shifted by m_Spacing[3]*s in the direction of m_DirectionVector.
The PlaneGeometries have to be initialized in the method GenerateOutputInformation() of BaseProcess (or CopyInformation / UpdateOutputInformation of BaseData, if possible, e.g., by analyzing pic tags in Image) subclasses. See also
|
virtual |
mitk::SliceNavigationController* mitk::SlicedGeometry3D::GetSliceNavigationController | ( | ) |
|
virtual |
Get the number of slices.
|
inlinestatic |
Definition at line 65 of file mitkSlicedGeometry3D.h.
bool mitk::SlicedGeometry3D::HasReferenceGeometry | ( | ) | const |
|
virtual |
Completely initialize this instance as evenly-spaced with slices parallel to the provided PlaneGeometry that is used as the first slice and for spacing calculation (except z-spacing).
Initializes the bounding box according to the width/height of the PlaneGeometry and slices. The x-/y-spacing is calculated from the PlaneGeometry.
|
virtual |
Completely initialize this instance as evenly-spaced with slices parallel to the provided PlaneGeometry that is used as the first slice and for spacing calculation.
Initializes the bounding box according to the width/height of the PlaneGeometry and slices. The spacing is calculated from the PlaneGeometry.
Referenced by mitk::Image::InitializeByItk().
|
virtual |
Completely initialize this instance as evenly-spaced plane slices parallel to a side of the provided BaseGeometry and using its spacing information.
Initializes the bounding box according to the width/height of the BaseGeometry and the number of slices according to BaseGeometry::GetExtent(2).
geometry3D | |
orientation | side parallel to which the slices will be oriented |
top | if true, create plane at top, otherwise at bottom (for AnatomicalPlane Axial, for other plane locations respectively) |
frontside | defines the side of the plane (the definition of front/back is somewhat arbitrary) |
rotated | rotates the plane by 180 degree around its normal (the definition of rotated vs not rotated is somewhat arbitrary) |
|
virtual |
Tell this instance how many PlaneGeometries it shall manage. Bounding box and the PlaneGeometries must be set additionally by calling the respective methods!
|
overridevirtual |
Implements mitk::BaseGeometry.
|
virtual |
Check whether a slice exists.
|
static |
Method for creation through the object factory.
|
overrideprotectedvirtual |
PreSetSpacing.
These virtual function allows a different beahiour in subclasses. Do implement them in every subclass of BaseGeometry. If not needed, use {Superclass::PreSetSpacing();};
Reimplemented from mitk::BaseGeometry.
|
overrideprotected |
|
protectedvirtual |
Reinitialize plane stack after rotation. More precisely, the first plane of the stack needs to spatially aligned, in two respects:
|
virtual |
Set/Get the vector between slices for the evenly-spaced case (m_EvenlySpaced==true).
If the direction-vector is (0,0,0) (the default) and the first 2D geometry is a PlaneGeometry, then the direction-vector will be calculated from the plane normal.
|
virtual |
|
inline |
Definition at line 100 of file mitkSlicedGeometry3D.h.
|
overridevirtual |
Define that this BaseGeometry is referring to an Image.
A geometry referring to an Image needs a slightly different definition of the position of the corners (see GetCornerPoint). The position of a voxel is defined by the position of its center. If we would use the origin (position of the (center of) the first voxel) as a corner and display this point, it would seem to be not at the corner but a bit within the image. Even worse for the opposite corner of the image: here the corner would appear outside the image (by half of the voxel diameter). Thus, we have to correct for this and to be able to do that, we need to know that the BaseGeometry is referring to an Image.
Reimplemented from mitk::BaseGeometry.
|
virtual |
Set PlaneGeometry of slice s.
|
virtual |
|
virtual |
Set the SliceNavigationController corresponding to this sliced geometry.
The SNC needs to be informed when the number of slices in the geometry changes, which can occur whenthe slices are re-oriented by rotation.
|
static |
Definition at line 176 of file mitkSlicedGeometry3D.h.
|
static |
Definition at line 177 of file mitkSlicedGeometry3D.h.
|
mutableprotected |
Vector between slices for the evenly-spaced case (m_EvenlySpaced==true). If the direction-vector is (0,0,0) (the default) and the first 2D geometry is a PlaneGeometry, then the direction-vector will be calculated from the plane normal.
Definition at line 305 of file mitkSlicedGeometry3D.h.
|
protected |
If (a) m_EvenlySpaced==true, (b) we don't have a PlaneGeometry stored for the requested slice, and (c) the first slice (s=0) is a PlaneGeometry instance, then we calculate the geometry of the requested as the plane of the first slice shifted by m_Spacing.z*s in the direction of m_DirectionVector.
Definition at line 297 of file mitkSlicedGeometry3D.h.
|
mutableprotected |
Container for the 2D-geometries contained within this SliceGeometry3D.
Definition at line 286 of file mitkSlicedGeometry3D.h.
|
protected |
Underlying BaseGeometry for this SlicedGeometry
Definition at line 311 of file mitkSlicedGeometry3D.h.
|
protected |
SNC correcsponding to this geometry; used to reflect changes in the number of slices due to rotation.
Definition at line 316 of file mitkSlicedGeometry3D.h.
|
protected |
Number of slices this SliceGeometry3D is describing.
Definition at line 308 of file mitkSlicedGeometry3D.h.
|
static |
Definition at line 175 of file mitkSlicedGeometry3D.h.