187 lines
5.8 KiB
C++
187 lines
5.8 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkImplicitImageRepresentation.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 vtkImplicitImageRepresentation
|
|
* @brief a representation for a vtkImplicitPlaneWidget2 which reslices a volume
|
|
*
|
|
* This class is a specialization of the vtkImplicitPlaneRepresentation. It
|
|
* is specialized to resample volumes across a plane. It is similar to
|
|
* vtkImagePlaneWidget, except the combination of vtkImplicitPlaneWidget2 and
|
|
* vtkImplicitImageRepresentation is a second generation widget design, with
|
|
* a much simpler and intuitive plane manipulation.
|
|
*
|
|
* See the documentation for vtkImplicitPlaneWidget2 and
|
|
* vtkImplicitPlaneRepresentation for usage information. One notable difference
|
|
* is that the methods PlaceImage() are preferred to the superclasses'
|
|
* PlaceWidget() method.
|
|
*
|
|
* @sa
|
|
* vtkImplicitPlaneWidget2 vtkImagePlaneWidget
|
|
*/
|
|
|
|
#ifndef vtkImplicitImageRepresentation_h
|
|
#define vtkImplicitImageRepresentation_h
|
|
|
|
#include "vtkImagePlaneWidget.h" //For enums
|
|
#include "vtkImplicitPlaneRepresentation.h"
|
|
#include "vtkInteractionWidgetsModule.h" // For export macro
|
|
|
|
class vtkActor;
|
|
class vtkImageData;
|
|
class vtkImageMapToColors;
|
|
class vtkImageReslice;
|
|
class vtkLookupTable;
|
|
class vtkMatrix4x4;
|
|
class vtkTexture;
|
|
class vtkTextureMapToPlane;
|
|
|
|
class VTKINTERACTIONWIDGETS_EXPORT vtkImplicitImageRepresentation
|
|
: public vtkImplicitPlaneRepresentation
|
|
{
|
|
public:
|
|
/**
|
|
* Instantiate the class.
|
|
*/
|
|
static vtkImplicitImageRepresentation* New();
|
|
|
|
///@{
|
|
/**
|
|
* Standard methods for the class.
|
|
*/
|
|
vtkTypeMacro(vtkImplicitImageRepresentation, vtkImplicitPlaneRepresentation);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
///@}
|
|
|
|
///@{
|
|
/**
|
|
* Various ways to specify the vtkImageData* input for the
|
|
* vtkImageReslice; and perform PlaceWidget().
|
|
*/
|
|
void PlaceImage(vtkImageData* img);
|
|
void PlaceImage(vtkAlgorithmOutput* aout);
|
|
///@}
|
|
|
|
///@{
|
|
/**
|
|
* Methods to interface with the vtkImplicitPlaneWidget2. Most of the required
|
|
* methods are implemented by this class's superclass.
|
|
*/
|
|
void BuildRepresentation() override;
|
|
///@}
|
|
|
|
///@{
|
|
/**
|
|
* Let the user control the lookup table. NOTE: apply this method BEFORE
|
|
* applying the SetLookupTable method. The default is Off.
|
|
*/
|
|
vtkSetMacro(UserControlledLookupTable, bool);
|
|
vtkGetMacro(UserControlledLookupTable, bool);
|
|
vtkBooleanMacro(UserControlledLookupTable, bool);
|
|
///@}
|
|
|
|
///@{
|
|
/**
|
|
* Set/Get the internal lookuptable (lut) to one defined by the user, or,
|
|
* alternatively, to the lut of another representation or widget. In this way,
|
|
* a set of three orthogonal planes can share the same lut so that
|
|
* window-levelling is performed uniformly among planes. The default
|
|
* internal lut can be re- set/allocated by setting to nullptr.
|
|
*/
|
|
virtual void SetLookupTable(vtkLookupTable*);
|
|
vtkGetObjectMacro(LookupTable, vtkLookupTable);
|
|
///@}
|
|
|
|
///@{
|
|
/**
|
|
* Specify whether to interpolate the texture or not. When off, the
|
|
* reslice interpolation is nearest neighbour regardless of how the
|
|
* interpolation is set through the API. Set before setting the
|
|
* vtkImageData input. Default is On.
|
|
*/
|
|
vtkSetMacro(TextureInterpolate, bool);
|
|
vtkGetMacro(TextureInterpolate, bool);
|
|
vtkBooleanMacro(TextureInterpolate, bool);
|
|
///@}
|
|
|
|
///@{
|
|
/**
|
|
* Set the interpolation to use when texturing the plane.
|
|
*/
|
|
void SetResliceInterpolate(int);
|
|
vtkGetMacro(ResliceInterpolate, int);
|
|
void SetResliceInterpolateToNearestNeighbour()
|
|
{
|
|
this->SetResliceInterpolate(VTK_NEAREST_RESLICE);
|
|
}
|
|
void SetResliceInterpolateToLinear() { this->SetResliceInterpolate(VTK_LINEAR_RESLICE); }
|
|
void SetResliceInterpolateToCubic() { this->SetResliceInterpolate(VTK_CUBIC_RESLICE); }
|
|
///@}
|
|
|
|
///@{
|
|
/**
|
|
* Convenience method to get the vtkImageMapToColors filter used by this
|
|
* widget. The user can properly render other transparent actors in a
|
|
* scene by calling the filter's SetOutputFormatToRGB and
|
|
* PassAlphaToOutputOff.
|
|
*/
|
|
virtual void SetColorMap(vtkImageMapToColors*);
|
|
vtkGetObjectMacro(ColorMap, vtkImageMapToColors);
|
|
///@}
|
|
|
|
/**
|
|
* Convenience method to get the vtkImageReslice filter used by this
|
|
* widget.
|
|
*/
|
|
vtkGetObjectMacro(Reslice, vtkImageReslice);
|
|
|
|
/**
|
|
* This method modifies the texture pipeline in order to generate texture
|
|
* coordinates.
|
|
*/
|
|
void SetCropPlaneToBoundingBox(bool) override;
|
|
|
|
protected:
|
|
vtkImplicitImageRepresentation();
|
|
~vtkImplicitImageRepresentation() override;
|
|
|
|
bool UserControlledLookupTable;
|
|
bool TextureInterpolate;
|
|
int ResliceInterpolate;
|
|
double OriginalWindow;
|
|
double OriginalLevel;
|
|
|
|
// These classes implement the imaging pipeline. Note that we
|
|
// use the superclass plane to draw the image texture.
|
|
vtkImageData* ImageData;
|
|
vtkImageReslice* Reslice;
|
|
vtkMatrix4x4* ResliceAxes;
|
|
vtkImageMapToColors* ColorMap;
|
|
vtkTexture* Texture;
|
|
vtkLookupTable* LookupTable;
|
|
vtkLookupTable* CreateDefaultLookupTable();
|
|
void UpdatePlane();
|
|
void GenerateTexturePlane();
|
|
void CreateDefaultProperties() override;
|
|
|
|
// This enables texture mapping on the cropped plane
|
|
vtkTextureMapToPlane* TextureMapToPlane;
|
|
|
|
private:
|
|
vtkImplicitImageRepresentation(const vtkImplicitImageRepresentation&) = delete;
|
|
void operator=(const vtkImplicitImageRepresentation&) = delete;
|
|
};
|
|
|
|
#endif
|