/*========================================================================= Program: Visualization Toolkit Module: vtkResliceCursorPolyDataAlgorithm.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 vtkResliceCursorPolyDataAlgorithm * @brief generates a 2D reslice cursor polydata * * vtkResliceCursorPolyDataAlgorithm is a class that generates a 2D * reslice cursor vtkPolyData, suitable for rendering within a * vtkResliceCursorActor. The class takes as input the reslice plane * normal index (an index into the normal plane maintained by the reslice * cursor object) and generates the polydata represeting the other two * reslice axes suitable for rendering on a slice through this plane. * The cursor consists of two intersection axes lines that meet at the * cursor focus. These lines may have a user defined thickness. They * need not be orthogonal to each other. * @sa * vtkResliceCursorActor vtkResliceCursor vtkResliceCursorWidget */ #ifndef vtkResliceCursorPolyDataAlgorithm_h #define vtkResliceCursorPolyDataAlgorithm_h #include "vtkInteractionWidgetsModule.h" // For export macro #include "vtkPolyDataAlgorithm.h" class vtkCutter; class vtkResliceCursor; class vtkPlane; class vtkBox; class vtkClipPolyData; class vtkLinearExtrusionFilter; class VTKINTERACTIONWIDGETS_EXPORT vtkResliceCursorPolyDataAlgorithm : public vtkPolyDataAlgorithm { public: vtkTypeMacro(vtkResliceCursorPolyDataAlgorithm, vtkPolyDataAlgorithm); void PrintSelf(ostream& os, vtkIndent indent) override; static vtkResliceCursorPolyDataAlgorithm* New(); //@{ /** * Which of the 3 axes defines the reslice plane normal ? */ vtkSetMacro(ReslicePlaneNormal, int); vtkGetMacro(ReslicePlaneNormal, int); //@} enum { XAxis = 0, YAxis, ZAxis }; /** * Set the planes that correspond to the reslice axes. */ void SetReslicePlaneNormalToXAxis() { this->SetReslicePlaneNormal(XAxis); } void SetReslicePlaneNormalToYAxis() { this->SetReslicePlaneNormal(YAxis); } void SetReslicePlaneNormalToZAxis() { this->SetReslicePlaneNormal(ZAxis); } //@{ /** * Set the Reslice cursor from which to generate the polydata representation */ virtual void SetResliceCursor(vtkResliceCursor*); vtkGetObjectMacro(ResliceCursor, vtkResliceCursor); //@} //@{ /** * Set/Get the slice bounds, ie the slice of this view on which to display * the reslice cursor. */ vtkSetVector6Macro(SliceBounds, double); vtkGetVector6Macro(SliceBounds, double); //@} //@{ /** * Get either one of the axes that this object produces. Depending on * the mode, one renders either the centerline axes or both the * centerline axes and the slab */ virtual vtkPolyData* GetCenterlineAxis1(); virtual vtkPolyData* GetCenterlineAxis2(); virtual vtkPolyData* GetThickSlabAxis1(); virtual vtkPolyData* GetThickSlabAxis2(); //@} //@{ /** * Get the index of the axes and the planes that they represent */ virtual int GetAxis1(); virtual int GetAxis2(); virtual int GetPlaneAxis1(); virtual int GetPlaneAxis2(); //@} /** * Convenience method that, given one plane, returns the other plane * that this class represents. */ int GetOtherPlaneForAxis(int p); /** * Get the MTime. Check the MTime of the internal ResliceCursor as well, if * one has been set */ vtkMTimeType GetMTime() override; protected: vtkResliceCursorPolyDataAlgorithm(); ~vtkResliceCursorPolyDataAlgorithm() override; int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override; void GetSlabPolyData(int axis, int planeAxis, vtkPolyData* pd); virtual void CutAndClip(vtkPolyData* in, vtkPolyData* out); // Build the reslice slab axis void BuildResliceSlabAxisTopology(); int ReslicePlaneNormal; vtkResliceCursor* ResliceCursor; vtkCutter* Cutter; vtkPlane* SlicePlane; vtkBox* Box; vtkClipPolyData* ClipWithBox; double SliceBounds[6]; bool Extrude; vtkLinearExtrusionFilter* ExtrusionFilter1; vtkLinearExtrusionFilter* ExtrusionFilter2; vtkPolyData* ThickAxes[2]; private: vtkResliceCursorPolyDataAlgorithm(const vtkResliceCursorPolyDataAlgorithm&) = delete; void operator=(const vtkResliceCursorPolyDataAlgorithm&) = delete; }; #endif