/*========================================================================= Program: Visualization Toolkit Module: vtkFastMarchingGeodesicPath.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. =========================================================================*/ /*========================================================================= Copyright (c) 2013 Karthik Krishnan. Contributed to the VisualizationToolkit by the author under the terms of the Visualization Toolkit copyright =========================================================================*/ // .NAME vtkFastMarchingGeodesicDistance - Computes geodesic path using gradient descent of a distance function // .SECTION Description // This class computes geodesic paths between a destination and one or more // sources on the mesh. To compute the path, a geodesic distance map to one // or more seeds on the mesh is computed using fast marching. Subsequently, // the geodesic path joining the path's starting point to its closest // source point is computed via gradient descent on the distance map. // // .SECTION Parameters //
1) Maximum path length: A maximum path length may optionally be set. If // set, gradient descent can terminate prematurely, without reaching a source // vertex. //
2) Interpolation: The path traced by gradient descent traverses on the // mesh between vertices. The "InterpolationOrder" can be used to constrain // traversal along the mesh vertices by setting it to 0. The computed path // points lie on the edges of the mesh in case of first order interpolation, // while in the case of zeroth order interpolation, they lie on the vertices. // // .SECTION Outputs // The filter returns as output a polydata containing the geodesic path. // The closest point ids on the mesh to the path are contained in // ZerothOrderPathPointIds. The list FirstOrderPathPointIds contains the // bounding vertices of the path. These are organized in pairs, each of which // represents an edge on the mesh, through which the path points pass. The path // length may be queried via GetGeodesicLength. // // .SECTION See also // vtkFastMarchingGeodesicDistance // // .SECTION References // 1. Peyre, Cohen, "Geodesic Methods for Shape and Surface Processing" [2008] // 2. Peyre, Cohen, "Geodesic Computations for Fast and Accurate Surface // Remeshing and Parameterization", Progress in Nonlinear Differential // Equations and Their Applications, 2005. #ifndef vtkFastMarchingGeodesicPath_h #define vtkFastMarchingGeodesicPath_h #include "vtkGeodesicPath.h" class vtkIdList; class vtkPoints; class vtkFastMarchingGeodesicDistance; class VTK_EXPORT vtkFastMarchingGeodesicPath : public vtkGeodesicPath { public: static vtkFastMarchingGeodesicPath *New(); // Description: // Standard methids for printing and determining type information. vtkTypeMacro(vtkFastMarchingGeodesicPath,vtkGeodesicPath); void PrintSelf(ostream& os, vtkIndent indent); // Description: // The instance of the geodesic filter. vtkGetObjectMacro( Geodesic, vtkFastMarchingGeodesicDistance ); // Description: // Interpolation order of the path traced through the surface mesh. A zeroth // order path passes through vertices of the mesh. A first order path passes // in between vertices. Each point in the first order path is guarenteed to // lie on an edge. Default is first order. vtkSetClampMacro( InterpolationOrder, int, 0, 1 ); vtkGetMacro( InterpolationOrder, int ); // Description: // Get the point ids corresponding to the path points. These are point ids // on the input mesh. // - The Zeroth order point ids contain the ids of vertices on the mesh // closest to the path. These correspond exactly to the path points if the // InterpolationOrder is 0. // - The first order path point ids are ids of the edge. There are twice as // many as the number of points in the path, organized in pairs comprising // the point ids of the edge. These ids are populated only when the // InterpolationOrder is 1. vtkGetObjectMacro( ZerothOrderPathPointIds, vtkIdList ); vtkGetObjectMacro( FirstOrderPathPointIds, vtkIdList ); // Description: // A maximum path length may be specified, in which case, the gradient based // back-tracking from 'Begin' to 'seeds' may stop prematurely once it // exceeds the specified length. The default is infinite. vtkSetMacro( MaximumPathPoints, float ); vtkGetMacro( MaximumPathPoints, float ); // Description: // Add termination point ids. These are troughs towards which the // path will traverse and at which it terminates. virtual void SetSeeds( vtkIdList * ); virtual vtkIdList *GetSeeds(); // Description: // The point id from which the path begins vtkSetMacro( BeginPointId, vtkIdType ); vtkGetMacro( BeginPointId, vtkIdType ); // Description: // Get the length of the traced path vtkGetMacro( GeodesicLength, double ); protected: vtkFastMarchingGeodesicPath(); ~vtkFastMarchingGeodesicPath(); virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); // Do the fast marching and gradient backtracking virtual void ComputePath(vtkPolyData *); float MaximumPathPoints; double GeodesicLength; int InterpolationOrder; vtkIdList *ZerothOrderPathPointIds; vtkIdList *FirstOrderPathPointIds; vtkIdType BeginPointId; vtkFastMarchingGeodesicDistance *Geodesic; private: vtkFastMarchingGeodesicPath(const vtkFastMarchingGeodesicPath&); // Not implemented. void operator=(const vtkFastMarchingGeodesicPath&); // Not implemented. }; #endif