You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
217 lines
6.2 KiB
C++
217 lines
6.2 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkImageSliceMapper.h
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkImageSliceMapper
|
|
* @brief map a slice of a vtkImageData to the screen
|
|
*
|
|
* vtkImageSliceMapper is a mapper that will draw a 2D image, or a slice
|
|
* of a 3D image. For 3D images, the slice may be oriented in the X, Y,
|
|
* or Z direction. This mapper works via 2D textures with accelerated
|
|
* zoom and pan operations.
|
|
* @par Thanks:
|
|
* Thanks to David Gobbi at the Seaman Family MR Centre and Dept. of Clinical
|
|
* Neurosciences, Foothills Medical Centre, Calgary, for providing this class.
|
|
* @sa
|
|
* vtkImageSlice vtkImageProperty vtkImageResliceMapper
|
|
*/
|
|
|
|
#ifndef vtkImageSliceMapper_h
|
|
#define vtkImageSliceMapper_h
|
|
|
|
#include "vtkImageMapper3D.h"
|
|
#include "vtkRenderingCoreModule.h" // For export macro
|
|
|
|
class vtkCamera;
|
|
class vtkPoints;
|
|
|
|
class VTKRENDERINGCORE_EXPORT vtkImageSliceMapper : public vtkImageMapper3D
|
|
{
|
|
public:
|
|
static vtkImageSliceMapper* New();
|
|
vtkTypeMacro(vtkImageSliceMapper, vtkImageMapper3D);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
//@{
|
|
/**
|
|
* The slice to display, if there are multiple slices.
|
|
*/
|
|
virtual void SetSliceNumber(int slice);
|
|
virtual int GetSliceNumber();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Use GetSliceNumberMinValue() and GetSliceNumberMaxValue()
|
|
* to get the range of allowed slices. These methods call
|
|
* UpdateInformation as a side-effect.
|
|
*/
|
|
virtual int GetSliceNumberMinValue();
|
|
virtual int GetSliceNumberMaxValue();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the orientation of the slices to display. The default
|
|
* orientation is 2, which is K. Not the orientaiton here
|
|
* is in index space. Not physical or world.
|
|
*/
|
|
vtkSetClampMacro(Orientation, int, 0, 2);
|
|
vtkGetMacro(Orientation, int);
|
|
void SetOrientationToI() { this->SetOrientation(0); }
|
|
void SetOrientationToJ() { this->SetOrientation(1); }
|
|
void SetOrientationToK() { this->SetOrientation(2); }
|
|
// old methods
|
|
void SetOrientationToX() { this->SetOrientation(0); }
|
|
void SetOrientationToY() { this->SetOrientation(1); }
|
|
void SetOrientationToZ() { this->SetOrientation(2); }
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Use the specified CroppingRegion. The default is to display
|
|
* the full slice.
|
|
*/
|
|
vtkSetMacro(Cropping, vtkTypeBool);
|
|
vtkBooleanMacro(Cropping, vtkTypeBool);
|
|
vtkGetMacro(Cropping, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the display extent. This is ignored unless Cropping
|
|
* is set.
|
|
*/
|
|
vtkSetVector6Macro(CroppingRegion, int);
|
|
vtkGetVector6Macro(CroppingRegion, int);
|
|
//@}
|
|
|
|
/**
|
|
* This should only be called by the renderer.
|
|
*/
|
|
void Render(vtkRenderer* renderer, vtkImageSlice* prop) override;
|
|
|
|
/**
|
|
* Release any graphics resources that are being consumed by
|
|
* this mapper. The parameter window is used to determine
|
|
* which graphic resources to release.
|
|
*/
|
|
void ReleaseGraphicsResources(vtkWindow*) override;
|
|
|
|
/**
|
|
* Get the mtime for the mapper.
|
|
*/
|
|
vtkMTimeType GetMTime() override;
|
|
|
|
//@{
|
|
/**
|
|
* The bounding box (array of six doubles) of data expressed as
|
|
* (xmin,xmax, ymin,ymax, zmin,zmax).
|
|
*/
|
|
double* GetBounds() override;
|
|
void GetBounds(double bounds[6]) override { this->vtkAbstractMapper3D::GetBounds(bounds); }
|
|
//@}
|
|
|
|
// return the bounds in index space
|
|
void GetIndexBounds(double extent[6]) override;
|
|
|
|
/**
|
|
* Get the plane as a homogeneous 4-vector that gives the plane
|
|
* equation coefficients. It is computed from the Orientation
|
|
* and SliceNumber, the propMatrix is unused and can be zero.
|
|
*/
|
|
void GetSlicePlaneInDataCoords(vtkMatrix4x4* propMatrix, double plane[4]) override;
|
|
|
|
/**
|
|
* Handle requests from the pipeline executive.
|
|
*/
|
|
vtkTypeBool ProcessRequest(
|
|
vtkInformation* request, vtkInformationVector** inInfo, vtkInformationVector* outInfo) override;
|
|
|
|
protected:
|
|
vtkImageSliceMapper();
|
|
~vtkImageSliceMapper() override;
|
|
|
|
/**
|
|
* Set points that describe a polygon on which the slice will
|
|
* be rendered.
|
|
*/
|
|
void SetPoints(vtkPoints* points);
|
|
vtkPoints* GetPoints() { return this->Points; }
|
|
|
|
/**
|
|
* Force linear interpolation. Internal method, for when this
|
|
* mapper is used as a helper class.
|
|
*/
|
|
void SetExactPixelMatch(int v) { this->ExactPixelMatch = (v != 0); }
|
|
|
|
/**
|
|
* Pass color data. Internal method, for when this mapper is
|
|
* used as a helper class.
|
|
*/
|
|
void SetPassColorData(int v) { this->PassColorData = (v != 0); }
|
|
|
|
//@{
|
|
/**
|
|
* Set the display extent. Internal method, for when this mapper
|
|
* is used as a helper class.
|
|
*/
|
|
void SetDisplayExtent(const int extent[6])
|
|
{
|
|
this->DisplayExtent[0] = extent[0];
|
|
this->DisplayExtent[1] = extent[1];
|
|
this->DisplayExtent[2] = extent[2];
|
|
this->DisplayExtent[3] = extent[3];
|
|
this->DisplayExtent[4] = extent[4];
|
|
this->DisplayExtent[5] = extent[5];
|
|
}
|
|
//@}
|
|
|
|
/**
|
|
* Get the camera orientation as a simple integer [0,1,2,3,4,5]
|
|
* that indicates one of the six major directions. The integers
|
|
* 0,1,2 are x,y,z and 3,4,5 are -x,-y,-z.
|
|
*/
|
|
int GetOrientationFromCamera(double const* propMatrix, vtkCamera* camera);
|
|
|
|
/**
|
|
* Get the current slice as the one closest to the focal point.
|
|
*/
|
|
int GetSliceFromCamera(double const* propMatrix, vtkCamera* camera);
|
|
|
|
/**
|
|
* Get the dimension indices according to the orientation.
|
|
*/
|
|
static void GetDimensionIndices(int orientation, int& xdim, int& ydim);
|
|
|
|
int SliceNumber;
|
|
int SliceNumberMinValue;
|
|
int SliceNumberMaxValue;
|
|
int Orientation;
|
|
vtkTypeBool Cropping;
|
|
int CroppingRegion[6];
|
|
int DisplayExtent[6];
|
|
int ExactPixelMatch;
|
|
int PassColorData;
|
|
vtkPoints* Points;
|
|
|
|
private:
|
|
vtkImageSliceMapper(const vtkImageSliceMapper&) = delete;
|
|
void operator=(const vtkImageSliceMapper&) = delete;
|
|
|
|
friend class vtkImageResliceMapper;
|
|
};
|
|
|
|
#endif
|