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++
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
|