File: vtkLoopBooleanPolyDataFilter.h

package info (click to toggle)
vtk9 9.5.2%2Bdfsg3-8
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 205,992 kB
  • sloc: cpp: 2,336,570; ansic: 327,116; python: 111,200; yacc: 4,104; java: 3,977; sh: 3,032; xml: 2,771; perl: 2,189; lex: 1,787; makefile: 185; javascript: 165; objc: 153; tcl: 59
file content (139 lines) | stat: -rw-r--r-- 3,905 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
/**
 * @class   vtkLoopBooleanPolyDataFilter
 *
 *
 * Computes the boundary of the union, intersection, or difference
 * volume computed from the volumes defined by two input surfaces. The
 * two surfaces do not need to be manifold, but if they are not,
 * unexpected results may be obtained. The resulting surface is
 * available in the first output of the filter. The second output
 * contains a set of polylines that represent the intersection between
 * the two input surfaces.
 * The filter uses vtkIntersectionPolyDataFilter. Must have information
 * about the cells on mesh that the intersection lines touch. Filter assumes
 * this information is given.
 * The output result will have data about the Original Surface,
 * BoundaryPoints, Boundary Cells,
 * Free Edges, and Bad Triangles
 */
#ifndef vtkLoopBooleanPolyDataFilter_h
#define vtkLoopBooleanPolyDataFilter_h

#include "vtkDataSetAttributes.h"    // Needed for CopyCells() method
#include "vtkFiltersGeneralModule.h" // For export macro
#include "vtkPolyDataAlgorithm.h"

VTK_ABI_NAMESPACE_BEGIN
class vtkIdList;

/*!
 *  \brief Filter to perform boolean operations
 *  \author Adam Updegrove
 */
class VTKFILTERSGENERAL_EXPORT vtkLoopBooleanPolyDataFilter : public vtkPolyDataAlgorithm
{
public:
  /**
   * Construct object that computes the boolean surface.
   */
  static vtkLoopBooleanPolyDataFilter* New();

  vtkTypeMacro(vtkLoopBooleanPolyDataFilter, vtkPolyDataAlgorithm);

  void PrintSelf(ostream& os, vtkIndent indent) override;

  ///@{
  /**
   * Integer describing the number of intersection points and lines
   */
  vtkGetMacro(NumberOfIntersectionPoints, int);
  vtkGetMacro(NumberOfIntersectionLines, int);
  ///@}

  ///@{
  /**
   * ONLY USED IF NO INTERSECTION BETWEEN SURFACES
   * Variable to determine what is output if no intersection occurs.
   * 0 = neither (default), 1 = first, 2 = second, 3 = both
   */
  vtkGetMacro(NoIntersectionOutput, int);
  vtkSetMacro(NoIntersectionOutput, int);
  vtkBooleanMacro(NoIntersectionOutput, int);
  ///@}

  // Union intersection, or difference
  enum OperationType
  {
    VTK_UNION = 0,
    VTK_INTERSECTION,
    VTK_DIFFERENCE
  };
  // Output if no intersection
  enum NoIntersectionOutputType
  {
    VTK_NEITHER = 0,
    VTK_FIRST,
    VTK_SECOND,
    VTK_BOTH,
  };

  ///@{
  /**
   * Set the boolean operation to perform. Defaults to union.
   */
  vtkSetClampMacro(Operation, int, VTK_UNION, VTK_DIFFERENCE);
  vtkGetMacro(Operation, int);
  void SetOperationToUnion() { this->SetOperation(VTK_UNION); }
  void SetOperationToIntersection() { this->SetOperation(VTK_INTERSECTION); }
  void SetOperationToDifference() { this->SetOperation(VTK_DIFFERENCE); }
  ///@}

  ///@{
  /**
   * Check the status of the filter after update. If the status is zero,
   * there was an error in the operation. If status is one, everything
   * went smoothly
   */
  vtkGetMacro(Status, int);
  ///@}

  ///@{
  /**
   * Set the tolerance for geometric tests
   */
  vtkGetMacro(Tolerance, double);
  vtkSetMacro(Tolerance, double);
  ///@}

protected:
  vtkLoopBooleanPolyDataFilter();
  ~vtkLoopBooleanPolyDataFilter() override;

  int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
  int FillInputPortInformation(int, vtkInformation*) override;

private:
  vtkLoopBooleanPolyDataFilter(const vtkLoopBooleanPolyDataFilter&) = delete;
  void operator=(const vtkLoopBooleanPolyDataFilter&) = delete;

  ///@{
  /**
   * Which operation to perform.
   * Can be VTK_UNION, VTK_INTERSECTION, or VTK_DIFFERENCE.
   */
  int Operation;
  int NoIntersectionOutput;
  int NumberOfIntersectionPoints;
  int NumberOfIntersectionLines;
  ///@}

  int Status;
  double Tolerance;

  class Impl;
};

VTK_ABI_NAMESPACE_END
#endif