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.
198 lines
5.0 KiB
C++
198 lines
5.0 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkResliceCursor.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 vtkResliceCursor
|
|
* @brief Geometry for a reslice cursor
|
|
*
|
|
* This class represents a reslice cursor. It consists of two cross
|
|
* sectional hairs, with an optional thickness. The crosshairs
|
|
* hairs may have a hole in the center. These may be translated or rotated
|
|
* independent of each other in the view. The result is used to reslice
|
|
* the data along these cross sections. This allows the user to perform
|
|
* multi-planar thin or thick reformat of the data on an image view, rather
|
|
* than a 3D view.
|
|
* @sa
|
|
* vtkResliceCursorWidget vtkResliceCursor vtkResliceCursorPolyDataAlgorithm
|
|
* vtkResliceCursorRepresentation vtkResliceCursorThickLineRepresentation
|
|
* vtkResliceCursorActor vtkImagePlaneWidget
|
|
*/
|
|
|
|
#ifndef vtkResliceCursor_h
|
|
#define vtkResliceCursor_h
|
|
|
|
#include "vtkInteractionWidgetsModule.h" // For export macro
|
|
#include "vtkObject.h"
|
|
|
|
class vtkImageData;
|
|
class vtkPolyData;
|
|
class vtkPlane;
|
|
class vtkPlaneCollection;
|
|
|
|
class VTKINTERACTIONWIDGETS_EXPORT vtkResliceCursor : public vtkObject
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkResliceCursor,vtkObject);
|
|
|
|
static vtkResliceCursor *New();
|
|
|
|
//@{
|
|
/**
|
|
* Set the image (3D) that we are slicing
|
|
*/
|
|
virtual void SetImage(vtkImageData * );
|
|
vtkGetObjectMacro( Image, vtkImageData );
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the cente of the reslice cursor.
|
|
*/
|
|
virtual void SetCenter( double, double, double );
|
|
virtual void SetCenter( double center[3] );
|
|
vtkGetVector3Macro( Center, double );
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the thickness of the cursor
|
|
*/
|
|
vtkSetVector3Macro( Thickness, double );
|
|
vtkGetVector3Macro( Thickness, double );
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Enable disable thick mode. Default is to enable it.
|
|
*/
|
|
vtkSetMacro( ThickMode, int );
|
|
vtkGetMacro( ThickMode, int );
|
|
vtkBooleanMacro( ThickMode, int );
|
|
//@}
|
|
|
|
/**
|
|
* Get the 3D PolyData representation
|
|
*/
|
|
virtual vtkPolyData * GetPolyData();
|
|
|
|
/**
|
|
* Get the slab and centerline polydata along an axis
|
|
*/
|
|
virtual vtkPolyData * GetCenterlineAxisPolyData( int axis );
|
|
|
|
/**
|
|
* Printself method.
|
|
*/
|
|
void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
|
|
|
|
/**
|
|
* Get the planes that represent normals along the X, Y and Z. The argument
|
|
* passed to this method must be an integer in the range 0-2 (corresponding
|
|
* to the X, Y and Z axes.
|
|
*/
|
|
virtual vtkPlane * GetPlane( int n );
|
|
|
|
/**
|
|
* Build the polydata
|
|
*/
|
|
virtual void Update();
|
|
|
|
//@{
|
|
/**
|
|
* Get the computed axes directions
|
|
*/
|
|
vtkGetVector3Macro( XAxis, double );
|
|
vtkGetVector3Macro( YAxis, double );
|
|
vtkGetVector3Macro( ZAxis, double );
|
|
vtkSetVector3Macro( XAxis, double );
|
|
vtkSetVector3Macro( YAxis, double );
|
|
vtkSetVector3Macro( ZAxis, double );
|
|
virtual double * GetAxis( int i );
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Show a hole in the center of the cursor, so its easy to see the pixels
|
|
* within the hole. ON by default
|
|
*/
|
|
vtkSetMacro( Hole, int );
|
|
vtkGetMacro( Hole, int );
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the width of the hole in mm
|
|
*/
|
|
vtkSetMacro( HoleWidth, double );
|
|
vtkGetMacro( HoleWidth, double );
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the width of the hole in pixels. If set, this will override the
|
|
* hole with in mm.
|
|
*/
|
|
vtkSetMacro( HoleWidthInPixels, double );
|
|
vtkGetMacro( HoleWidthInPixels, double );
|
|
//@}
|
|
|
|
/**
|
|
* Get the MTime. Check the MTime of the internal planes as well.
|
|
*/
|
|
virtual vtkMTimeType GetMTime();
|
|
|
|
/**
|
|
* Reset the cursor to the default position, ie with the axes, normal
|
|
* to each other and axis aligned and with the cursor pointed at the
|
|
* center of the image.
|
|
*/
|
|
virtual void Reset();
|
|
|
|
protected:
|
|
vtkResliceCursor();
|
|
~vtkResliceCursor();
|
|
|
|
virtual void BuildCursorGeometry();
|
|
virtual void BuildPolyData();
|
|
virtual void BuildCursorTopology();
|
|
virtual void BuildCursorTopologyWithHole();
|
|
virtual void BuildCursorTopologyWithoutHole();
|
|
virtual void BuildCursorGeometryWithoutHole();
|
|
virtual void BuildCursorGeometryWithHole();
|
|
virtual void ComputeAxes();
|
|
|
|
int ThickMode;
|
|
int Hole;
|
|
double HoleWidth;
|
|
double HoleWidthInPixels;
|
|
double Thickness[3];
|
|
double Center[3];
|
|
double XAxis[3];
|
|
double YAxis[3];
|
|
double ZAxis[3];
|
|
vtkImageData *Image;
|
|
vtkPolyData *PolyData;
|
|
|
|
vtkPolyData *CenterlineAxis[3];
|
|
|
|
vtkPlaneCollection * ReslicePlanes;
|
|
vtkTimeStamp PolyDataBuildTime;
|
|
|
|
private:
|
|
vtkResliceCursor(const vtkResliceCursor&) VTK_DELETE_FUNCTION;
|
|
void operator=(const vtkResliceCursor&) VTK_DELETE_FUNCTION;
|
|
};
|
|
|
|
#endif
|