/*========================================================================= Program: Visualization Toolkit Module: vtkLassoStencilSource.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 vtkLassoStencilSource * @brief Create a stencil from a contour * * vtkLassoStencilSource will create an image stencil from a * set of points that define a contour. Its output can be * used with vtkImageStecil or other vtk classes that apply * a stencil to an image. * @sa * vtkROIStencilSource vtkPolyDataToImageStencil * @par Thanks: * Thanks to David Gobbi for contributing this class to VTK. */ #ifndef vtkLassoStencilSource_h #define vtkLassoStencilSource_h #include "vtkImageStencilSource.h" #include "vtkImagingStencilModule.h" // For export macro class vtkPoints; class vtkSpline; class vtkLSSPointMap; class VTKIMAGINGSTENCIL_EXPORT vtkLassoStencilSource : public vtkImageStencilSource { public: static vtkLassoStencilSource* New(); vtkTypeMacro(vtkLassoStencilSource, vtkImageStencilSource); void PrintSelf(ostream& os, vtkIndent indent) override; enum { POLYGON = 0, SPLINE = 1 }; //@{ /** * The shape to use, default is "Polygon". The spline is a * cardinal spline. Bezier splines are not yet supported. */ vtkGetMacro(Shape, int); vtkSetClampMacro(Shape, int, POLYGON, SPLINE); void SetShapeToPolygon() { this->SetShape(POLYGON); } void SetShapeToSpline() { this->SetShape(SPLINE); } virtual const char* GetShapeAsString(); //@} //@{ /** * The points that make up the lassoo. The loop does not * have to be closed, the last point will automatically be * connected to the first point by a straight line segment. */ virtual void SetPoints(vtkPoints* points); vtkGetObjectMacro(Points, vtkPoints); //@} //@{ /** * The slice orientation. The default is 2, which is XY. * Other values are 0, which is YZ, and 1, which is XZ. */ vtkGetMacro(SliceOrientation, int); vtkSetClampMacro(SliceOrientation, int, 0, 2); //@} //@{ /** * The points for a particular slice. This will override the * points that were set by calling SetPoints() for the slice. * To clear the setting, call SetSlicePoints(slice, nullptr). */ virtual void SetSlicePoints(int i, vtkPoints* points); virtual vtkPoints* GetSlicePoints(int i); //@} /** * Remove points from all slices. */ virtual void RemoveAllSlicePoints(); /** * Overload GetMTime() to include the timestamp on the points. */ vtkMTimeType GetMTime() override; protected: vtkLassoStencilSource(); ~vtkLassoStencilSource() override; int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override; int Shape; int SliceOrientation; vtkPoints* Points; vtkSpline* SplineX; vtkSpline* SplineY; vtkLSSPointMap* PointMap; private: vtkLassoStencilSource(const vtkLassoStencilSource&) = delete; void operator=(const vtkLassoStencilSource&) = delete; }; #endif