VTK  9.1.0
vtkClosestPointStrategy.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkClosestPointStrategy.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
32#ifndef vtkClosestPointStrategy_h
33#define vtkClosestPointStrategy_h
34
35#include "vtkCell.h" //inline SelectCell
36#include "vtkCommonDataModelModule.h" // For export macro
37#include "vtkFindCellStrategy.h"
38#include "vtkGenericCell.h" //inline SelectCell
39#include "vtkPointSet.h" //inline SelectCell
40
41#include <set> // For tracking visited cells
42
43class vtkIdList;
45
46class VTKCOMMONDATAMODEL_EXPORT vtkClosestPointStrategy : public vtkFindCellStrategy
47{
48public:
53
55
59 void PrintSelf(ostream& os, vtkIndent indent) override;
61
68 int Initialize(vtkPointSet* ps) override;
69
74 vtkIdType FindCell(double x[3], vtkCell* cell, vtkGenericCell* gencell, vtkIdType cellId,
75 double tol2, int& subId, double pcoords[3], double* weights) override;
76
78
85 vtkGetObjectMacro(PointLocator, vtkAbstractPointLocator);
87
91 vtkCell* SelectCell(vtkPointSet* self, vtkIdType cellId, vtkCell* cell, vtkGenericCell* gencell);
92
93protected:
96
97 std::set<vtkIdType> VisitedCells;
102
104 bool OwnsLocator; // was the locator specified? or taken from associated point set
105
106private:
108 void operator=(const vtkClosestPointStrategy&) = delete;
109};
110
111// Handle cases where starting cell is provided or not
113 vtkPointSet* self, vtkIdType cellId, vtkCell* cell, vtkGenericCell* gencell)
114{
115 if (!cell)
116 {
117 if (gencell)
118 {
119 self->GetCell(cellId, gencell);
120 cell = gencell;
121 }
122 else
123 {
124 cell = self->GetCell(cellId);
125 }
126 }
127 return cell;
128}
129
130#endif
abstract class to quickly locate points in 3-space
abstract class to specify cell behavior
Definition: vtkCell.h:147
implement a specific vtkPointSet::FindCell() strategy based on closest point
vtkIdType FindCell(double x[3], vtkCell *cell, vtkGenericCell *gencell, vtkIdType cellId, double tol2, int &subId, double pcoords[3], double *weights) override
Implement the specific strategy.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods for type information and printing.
static vtkClosestPointStrategy * New()
Construct a vtkFindCellStrategy subclass.
std::set< vtkIdType > VisitedCells
int Initialize(vtkPointSet *ps) override
Provide the necessary initialization method (see superclass for more information).
vtkCell * SelectCell(vtkPointSet *self, vtkIdType cellId, vtkCell *cell, vtkGenericCell *gencell)
Subclasses use this method to select the current cell.
~vtkClosestPointStrategy() override
virtual void SetPointLocator(vtkAbstractPointLocator *)
Set / get an instance of vtkAbstractPointLocator which is used to implement the strategy for FindCell...
vtkAbstractPointLocator * PointLocator
helper class to manage the vtkPointSet::FindCell() METHOD
provides thread-safe access to cells
list of point or cell ids
Definition: vtkIdList.h:140
a simple class to control print indentation
Definition: vtkIndent.h:113
concrete class for storing a set of points
Definition: vtkPointSet.h:106
vtkCell * GetCell(vtkIdType) override
This method always return a vtkEmptyCell, as there is no cell in a vtkPointSet.
Definition: vtkPointSet.h:174
int vtkIdType
Definition: vtkType.h:332