/*========================================================================= Program: Visualization Toolkit Module: vtkContourLineInterpolator.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 vtkContourLineInterpolator * @brief Defines API for interpolating/modifying nodes from a vtkContourRepresentation * * vtkContourLineInterpolator is an abstract base class for interpolators * that are used by the vtkContourRepresentation class to interpolate * and/or modify nodes in a contour. Subclasses must override the virtual * method \c InterpolateLine. This is used by the contour representation * to give the interpolator a chance to define an interpolation scheme * between nodes. See vtkBezierContourLineInterpolator for a concrete * implementation. Subclasses may also override \c UpdateNode. This provides * a way for the representation to give the interpolator a chance to modify * the nodes, as the user constructs the contours. For instance, a sticky * contour widget may be implemented that moves nodes to nearby regions of * high gradient, to be used in contour-guided segmentation. */ #ifndef vtkContourLineInterpolator_h #define vtkContourLineInterpolator_h #include "vtkInteractionWidgetsModule.h" // For export macro #include "vtkObject.h" class vtkRenderer; class vtkContourRepresentation; class vtkIntArray; class VTKINTERACTIONWIDGETS_EXPORT vtkContourLineInterpolator : public vtkObject { public: //@{ /** * Standard methods for instances of this class. */ vtkTypeMacro(vtkContourLineInterpolator, vtkObject); void PrintSelf(ostream& os, vtkIndent indent) override; //@} /** * Subclasses that wish to interpolate a line segment must implement this. * For instance vtkBezierContourLineInterpolator adds nodes between idx1 * and idx2, that allow the contour to adhere to a bezier curve. */ virtual int InterpolateLine( vtkRenderer* ren, vtkContourRepresentation* rep, int idx1, int idx2) = 0; /** * The interpolator is given a chance to update the node. For instance, the * vtkImageContourLineInterpolator updates the idx'th node in the contour, * so it automatically sticks to edges in the vicinity as the user * constructs the contour. * Returns 0 if the node (world position) is unchanged. */ virtual int UpdateNode( vtkRenderer*, vtkContourRepresentation*, double* vtkNotUsed(node), int vtkNotUsed(idx)); /** * Span of the interpolator. ie. the number of control points its supposed * to interpolate given a node. * The first argument is the current nodeIndex. * ie, you'd be trying to interpolate between nodes "nodeIndex" and * "nodeIndex-1", unless you're closing the contour in which case, you're * trying to interpolate "nodeIndex" and "Node=0". * The node span is returned in a vtkIntArray. The default node span is 1 * (ie. nodeIndices is a 2 tuple (nodeIndex, nodeIndex-1)). However, it * need not always be 1. For instance, cubic spline interpolators, which * have a span of 3 control points, it can be larger. See * vtkBezierContourLineInterpolator for instance. */ virtual void GetSpan(int nodeIndex, vtkIntArray* nodeIndices, vtkContourRepresentation* rep); protected: vtkContourLineInterpolator(); ~vtkContourLineInterpolator() override; private: vtkContourLineInterpolator(const vtkContourLineInterpolator&) = delete; void operator=(const vtkContourLineInterpolator&) = delete; }; #endif