VTK  9.2.6
vtkIntersectionCounter.h
Go to the documentation of this file.
1
18
19#ifndef vtkIntersectionCounter_h
20#define vtkIntersectionCounter_h
21
22#include "vtkCommonDataModelModule.h" // For export macro
23#include "vtkSystemIncludes.h"
24#include <algorithm> // for sorting
25#include <vector> // for implementation
26
27// class VTKCOMMONDATAMODEL_EXPORT vtkIntersectionCounter
28
30{
31public:
33
38 : Tolerance(0.0001)
39 {
40 }
41 vtkIntersectionCounter(double tol, double length)
42 {
43 this->Tolerance = (length > 0.0 ? (tol / length) : 0.0);
44 }
45
46
50 void SetTolerance(double tol) { this->Tolerance = (tol < 0.0 ? 0.0001 : tol); }
51 double GetTolerance() { return this->Tolerance; }
52
56 void AddIntersection(double t) { IntsArray.push_back(t); }
57
61 void Reset() { IntsArray.clear(); }
62
69 {
70 int size = static_cast<int>(IntsArray.size());
71
72 // Fast check for trivial cases
73 if (size <= 1)
74 {
75 return size; // 0 or 1
76 }
77
78 // Need to work harder: sort and then count the intersections
79 std::sort(IntsArray.begin(), IntsArray.end());
80
81 // If here, there is at least one intersection, and two inserted
82 // intersection points
83 int numInts = 1;
84 std::vector<double>::iterator i0 = IntsArray.begin();
85 std::vector<double>::iterator i1 = i0 + 1;
86
87 // Now march through sorted array counting "separated" intersections
88 while (i1 != IntsArray.end())
89 {
90 if ((*i1 - *i0) > this->Tolerance)
91 {
92 numInts++;
93 i0 = i1;
94 }
95 i1++;
96 }
97
98 return numInts;
99 }
100
101protected:
102 double Tolerance;
103 std::vector<double> IntsArray;
104
105}; // vtkIntersectionCounter
106
107#endif
108// VTK-HeaderTest-Exclude: vtkIntersectionCounter.h
void AddIntersection(double t)
Add an intersection given by parametric coordinate t.
void Reset()
Reset the intersection process.
vtkIntersectionCounter(double tol, double length)
This tolerance must be converted to parametric space.
std::vector< double > IntsArray
vtkIntersectionCounter()
This tolerance must be converted to parametric space.
int CountIntersections()
Returns number of intersections (even number of intersections, outside or odd number of intersections...
void SetTolerance(double tol)
Set/Get the intersection tolerance.