comac_desk_app/ThirdpartyLibs/Libs/windows-x86_64/vtk/include/vtkImplicitImageRepresentat...

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