/*========================================================================= Program: Visualization Toolkit Module: vtkContourTriangulator.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 vtkContourTriangulator * @brief Fill all 2D contours to create polygons * * vtkContourTriangulator will generate triangles to fill all of the 2D * contours in its input. The contours may be concave, and may even * contain holes i.e. a contour may contain an internal contour that * is wound in the opposite direction to indicate that it is a hole. * @warning * The triangulation of is done in O(n) time for simple convex * inputs, but for non-convex inputs the worst-case time is O(n^2*m^2) * where n is the number of points and m is the number of holes. * The best triangulation algorithms, in contrast, are O(n log n). * The resulting triangles may be quite narrow, the algorithm does * not attempt to produce high-quality triangles. * @par Thanks: * Thanks to David Gobbi for contributing this class to VTK. */ #ifndef vtkContourTriangulator_h #define vtkContourTriangulator_h #include "vtkFiltersGeneralModule.h" // For export macro #include "vtkPolyDataAlgorithm.h" class vtkCellArray; class vtkIdList; class VTKFILTERSGENERAL_EXPORT vtkContourTriangulator : public vtkPolyDataAlgorithm { public: static vtkContourTriangulator* New(); vtkTypeMacro(vtkContourTriangulator, vtkPolyDataAlgorithm); void PrintSelf(ostream& os, vtkIndent indent) override; //@{ /** * Check if there was a triangulation failure in the last update. */ vtkGetMacro(TriangulationError, int); //@} //@{ /** * Generate errors when the triangulation fails. * Note that triangulation failures are often minor, because they involve * tiny triangles that are too small to see. */ vtkSetMacro(TriangulationErrorDisplay, vtkTypeBool); vtkBooleanMacro(TriangulationErrorDisplay, vtkTypeBool); vtkGetMacro(TriangulationErrorDisplay, vtkTypeBool); //@} /** * A robust method for triangulating a polygon. * It cleans up the polygon and then applies the ear-cut triangulation. * A zero return value indicates that triangulation failed. */ static int TriangulatePolygon(vtkIdList* polygon, vtkPoints* points, vtkCellArray* triangles); /** * Given some closed contour lines, create a triangle mesh that * fills those lines. The input lines must be single-segment lines, * not polylines. The input lines do not have to be in order. * Only numLines starting from firstLine will be used. */ static int TriangulateContours(vtkPolyData* data, vtkIdType firstLine, vtkIdType numLines, vtkCellArray* outputPolys, const double normal[3]); protected: vtkContourTriangulator(); ~vtkContourTriangulator() override; int RequestData(vtkInformation* request, vtkInformationVector** inputVector, vtkInformationVector* outputVector) override; int TriangulationError; vtkTypeBool TriangulationErrorDisplay; private: vtkContourTriangulator(const vtkContourTriangulator&) = delete; void operator=(const vtkContourTriangulator&) = delete; }; #endif