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.

210 lines
5.1 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkResliceImageViewer.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 vtkResliceImageViewer
* @brief Display an image along with a reslice cursor
*
* This class is similar to vtkImageViewer2. It displays the image along with
* a two cross hairs for reslicing. The cross hairs may be interactively
* manipulated and are typically used to reslice two other views of
* vtkResliceImageViewer. See QtVTKRenderWindows for an example. The reslice
* cursor is used to perform thin or thick MPR through data. The class can
* also default to the behaviour of vtkImageViewer2 if the Reslice mode is
* set to RESLICE_AXIS_ALIGNED.
* @sa
* vtkResliceCursor vtkResliceCursorWidget vtkResliceCursorRepresentation
*/
#ifndef vtkResliceImageViewer_h
#define vtkResliceImageViewer_h
#include "vtkImageViewer2.h"
#include "vtkInteractionImageModule.h" // For export macro
class vtkResliceCursorWidget;
class vtkResliceCursor;
class vtkScalarsToColors;
class vtkBoundedPlanePointPlacer;
class vtkResliceImageViewerMeasurements;
class vtkResliceImageViewerScrollCallback;
class vtkPlane;
class VTKINTERACTIONIMAGE_EXPORT vtkResliceImageViewer : public vtkImageViewer2
{
public:
//@{
/**
* Standard VTK methods.
*/
static vtkResliceImageViewer* New();
vtkTypeMacro(vtkResliceImageViewer, vtkImageViewer2);
void PrintSelf(ostream& os, vtkIndent indent) override;
//@}
/**
* Render the resulting image.
*/
void Render() override;
//@{
/**
* Set/Get the input image to the viewer.
*/
void SetInputData(vtkImageData* in) override;
void SetInputConnection(vtkAlgorithmOutput* input) override;
//@}
//@{
/**
* Set window and level for mapping pixels to colors.
*/
void SetColorWindow(double s) override;
void SetColorLevel(double s) override;
//@}
//@{
/**
* Get the internal render window, renderer, image actor, and
* image map instances.
*/
vtkGetObjectMacro(ResliceCursorWidget, vtkResliceCursorWidget);
//@}
/**
* Set/get the slice orientation
*/
enum
{
RESLICE_AXIS_ALIGNED = 0,
RESLICE_OBLIQUE = 1
};
vtkGetMacro(ResliceMode, int);
virtual void SetResliceMode(int resliceMode);
virtual void SetResliceModeToAxisAligned()
{
this->SetResliceMode(vtkResliceImageViewer::RESLICE_AXIS_ALIGNED);
}
virtual void SetResliceModeToOblique()
{
this->SetResliceMode(vtkResliceImageViewer::RESLICE_OBLIQUE);
}
//@{
/**
* Set/Get the reslice cursor.
*/
vtkResliceCursor* GetResliceCursor();
void SetResliceCursor(vtkResliceCursor* rc);
//@}
//@{
/**
* Set the lookup table
*/
virtual void SetLookupTable(vtkScalarsToColors*);
vtkScalarsToColors* GetLookupTable();
//@}
//@{
/**
* Switch to / from thick mode
*/
virtual void SetThickMode(int);
virtual int GetThickMode();
//@}
/**
* Reset all views back to initial state
*/
virtual void Reset();
//@{
/**
* Get the point placer.
*/
vtkGetObjectMacro(PointPlacer, vtkBoundedPlanePointPlacer);
//@}
//@{
/**
* Get the measurements manager
*/
vtkGetObjectMacro(Measurements, vtkResliceImageViewerMeasurements);
//@}
//@{
/**
* Get the render window interactor
*/
vtkGetObjectMacro(Interactor, vtkRenderWindowInteractor);
//@}
//@{
/**
* Scroll slices on the mouse wheel ? In the case of MPR
* view, it moves one "normalized spacing" in the direction of the normal to
* the resliced plane, provided the new center will continue to lie within
* the volume.
*/
vtkSetMacro(SliceScrollOnMouseWheel, vtkTypeBool);
vtkGetMacro(SliceScrollOnMouseWheel, vtkTypeBool);
vtkBooleanMacro(SliceScrollOnMouseWheel, vtkTypeBool);
//@}
/**
* Increment/Decrement slice by 'n' slices
*/
virtual void IncrementSlice(int n);
enum
{
SliceChangedEvent = 1001
};
protected:
vtkResliceImageViewer();
~vtkResliceImageViewer() override;
void InstallPipeline() override;
void UnInstallPipeline() override;
void UpdateOrientation() override;
void UpdateDisplayExtent() override;
virtual void UpdatePointPlacer();
//@{
/**
* Convenience methods to get the reslice plane and the normalized
* spacing between slices in reslice mode.
*/
vtkPlane* GetReslicePlane();
double GetInterSliceSpacingInResliceMode();
//@}
vtkResliceCursorWidget* ResliceCursorWidget;
vtkBoundedPlanePointPlacer* PointPlacer;
int ResliceMode;
vtkResliceImageViewerMeasurements* Measurements;
vtkTypeBool SliceScrollOnMouseWheel;
vtkResliceImageViewerScrollCallback* ScrollCallback;
private:
vtkResliceImageViewer(const vtkResliceImageViewer&) = delete;
void operator=(const vtkResliceImageViewer&) = delete;
};
#endif