File: vtkBoxClipDataSet.h

package info (click to toggle)
vtk 5.0.2-4
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 51,080 kB
  • ctags: 67,442
  • sloc: cpp: 522,627; ansic: 221,292; tcl: 43,377; python: 14,072; perl: 3,102; java: 1,436; yacc: 1,033; sh: 469; lex: 248; makefile: 181; asm: 154
file content (239 lines) | stat: -rw-r--r-- 10,912 bytes parent folder | download | duplicates (2)
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    $RCSfile: vtkBoxClipDataSet.h,v $

  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) Sandia Corporation
 See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
----------------------------------------------------------------------------*/

// .NAME vtkBoxClipDataSet - clip an unstructured grid
// 
// .SECTION Description
// Clipping means that is actually 'cuts' through the cells of the dataset,
// returning tetrahedral cells inside of the box.
// The output of this filter is an unstructured grid.
//
// This filter can be configured to compute a second output. The
// second output is the part of the cell that is clipped away. Set the
// GenerateClippedData boolean on if you wish to access this output data.
//
// The vtkBoxClipDataSet will triangulate all types of 3D cells (i.e, create tetrahedra).
// This is necessary to preserve compatibility across face neighbors.
//
// To use this filter,you can decide if you will be clipping with a box or a hexahedral box.
// 1) Set orientation 
//    if(SetOrientation(0)): box (parallel with coordinate axis)
//       SetBoxClip(xmin,xmax,ymin,ymax,zmin,zmax)  
//    if(SetOrientation(1)): hexahedral box (Default)
//       SetBoxClip(n[0],o[0],n[1],o[1],n[2],o[2],n[3],o[3],n[4],o[4],n[5],o[5])  
//       PlaneNormal[] normal of each plane
//       PlanePoint[] point on the plane 
// 2) Apply the GenerateClipScalarsOn() 
// 3) Execute clipping  Update();

#ifndef __vtkBoxClipDataSet_h
#define __vtkBoxClipDataSet_h

#include "vtkUnstructuredGridAlgorithm.h"

class vtkGenericCell;            
class vtkCell3D;                     
class vtkDataArray;                    
class vtkCellArray;                   
class vtkPointData;                   
class vtkCellData;                    
class vtkPoints;                      
class vtkIdList;                    
class vtkPointLocator;

class VTK_GRAPHICS_EXPORT vtkBoxClipDataSet : public vtkUnstructuredGridAlgorithm
{
public:
  vtkTypeRevisionMacro(vtkBoxClipDataSet,vtkUnstructuredGridAlgorithm);
  void PrintSelf(ostream& os, vtkIndent indent);

  // Description:
  // Constructor of the clipping box.
  static vtkBoxClipDataSet *New();

  // Description
  // Specify the Box with which to perform the clipping. 
  // If the box is not parallel to axis, you need to especify  
  // normal vector of each plane and a point on the plane. 
  void SetBoxClip(double xmin, double xmax,
                  double ymin, double ymax,
                  double zmin, double zmax);
  void SetBoxClip(const double *n0, const double *o0,
                  const double *n1, const double *o1,
                  const double *n2, const double *o2,
                  const double *n3, const double *o3,
                  const double *n4, const double *o4,
                  const double *n5, const double *o5);
  

  // Description:
  // If this flag is enabled, then the output scalar values will be 
  // interpolated, and not the input scalar data.
  vtkSetMacro(GenerateClipScalars,int);
  vtkGetMacro(GenerateClipScalars,int);
  vtkBooleanMacro(GenerateClipScalars,int);

  // Description:
  // Control whether a second output is generated. The second output
  // contains the polygonal data that's been clipped away.
  vtkSetMacro(GenerateClippedOutput,int);
  vtkGetMacro(GenerateClippedOutput,int);
  vtkBooleanMacro(GenerateClippedOutput,int);

  // Description:
  // Set the tolerance for merging clip intersection points that are near
  // the vertices of cells. This tolerance is used to prevent the generation
  // of degenerate primitives. Note that only 3D cells actually use this
  // instance variable.
  //vtkSetClampMacro(MergeTolerance,double,0.0001,0.25);
  //vtkGetMacro(MergeTolerance,double);
  
  // Description:
  // Return the Clipped output.
  vtkUnstructuredGrid *GetClippedOutput();
  virtual int GetNumberOfOutputs();

  // Description:
  // Specify a spatial locator for merging points. By default, an
  // instance of vtkMergePoints is used.
  void SetLocator(vtkPointLocator *locator);
  vtkGetObjectMacro(Locator,vtkPointLocator);

  // Description:
  // Create default locator. Used to create one when none is specified. The 
  // locator is used to merge coincident points.
  void CreateDefaultLocator();

  // Description:
  // Return the mtime also considering the locator.
  unsigned long GetMTime();

  vtkGetMacro(Orientation,unsigned int);
  vtkSetMacro(Orientation,unsigned int);
  
  void MinEdgeF(const unsigned int *id_v, const vtkIdType *cellIds,
                unsigned int *edgF );
  void PyramidToTetra(const vtkIdType *pyramId, const vtkIdType *cellIds,
                      vtkCellArray *newCellArray);
  void WedgeToTetra(const vtkIdType *wedgeId, const vtkIdType *cellIds,
                    vtkCellArray *newCellArray);
  void CellGrid(vtkIdType typeobj, vtkIdType npts, const vtkIdType *cellIds,
                vtkCellArray *newCellArray);
  void CreateTetra(vtkIdType npts, const vtkIdType *cellIds,
                   vtkCellArray *newCellArray);
  void ClipBox(vtkPoints *newPoints,vtkGenericCell *cell, 
               vtkPointLocator *locator, vtkCellArray *tets,vtkPointData *inPD, 
               vtkPointData *outPD,vtkCellData *inCD,vtkIdType cellId,
               vtkCellData *outCD);
  void ClipHexahedron(vtkPoints *newPoints, vtkGenericCell *cell,
                      vtkPointLocator *locator, vtkCellArray *tets,
                      vtkPointData *inPD, vtkPointData *outPD,
                      vtkCellData *inCD, vtkIdType cellId, vtkCellData *outCD);
  void ClipBoxInOut(vtkPoints *newPoints, vtkGenericCell *cell, 
                    vtkPointLocator *locator, vtkCellArray **tets,
                    vtkPointData *inPD, vtkPointData *outPD,
                    vtkCellData *inCD, vtkIdType cellId, vtkCellData **outCD);
  void ClipHexahedronInOut(vtkPoints *newPoints,vtkGenericCell *cell,
                           vtkPointLocator *locator, vtkCellArray **tets,
                           vtkPointData *inPD, vtkPointData *outPD,
                           vtkCellData *inCD, vtkIdType cellId, 
                           vtkCellData **outCD);

  void ClipBox2D(vtkPoints *newPoints, vtkGenericCell *cell, 
                 vtkPointLocator *locator, vtkCellArray *tets, 
                 vtkPointData *inPD, vtkPointData *outPD, vtkCellData *inCD,
                 vtkIdType cellId, vtkCellData *outCD);
  void ClipBoxInOut2D(vtkPoints *newPoints,vtkGenericCell *cell, 
                      vtkPointLocator *locator, vtkCellArray **tets,
                      vtkPointData *inPD, vtkPointData *outPD, 
                      vtkCellData *inCD, vtkIdType cellId, vtkCellData **outCD);
  void ClipHexahedron2D(vtkPoints *newPoints,vtkGenericCell *cell,
                        vtkPointLocator *locator, vtkCellArray *tets,
                        vtkPointData *inPD, vtkPointData *outPD,
                        vtkCellData *inCD, vtkIdType cellId,
                        vtkCellData *outCD);
  void ClipHexahedronInOut2D(vtkPoints *newPoints, vtkGenericCell *cell,
                             vtkPointLocator *locator, vtkCellArray **tets,
                             vtkPointData *inPD, vtkPointData *outPD,
                             vtkCellData *inCD,vtkIdType cellId,
                             vtkCellData **outCD);

  void ClipBox1D(vtkPoints *newPoints, vtkGenericCell *cell,
                 vtkPointLocator *locator, vtkCellArray *lines,
                 vtkPointData *inPD, vtkPointData *outPD, vtkCellData *inCD,
                 vtkIdType cellId, vtkCellData *outCD);
  void ClipBoxInOut1D(vtkPoints *newPoints, vtkGenericCell *cell, 
                      vtkPointLocator *locator, vtkCellArray **lines,
                      vtkPointData *inPD, vtkPointData *outPD, 
                      vtkCellData *inCD, vtkIdType cellId, vtkCellData **outCD);
  void ClipHexahedron1D(vtkPoints *newPoints, vtkGenericCell *cell,
                        vtkPointLocator *locator, vtkCellArray *lines,
                        vtkPointData *inPD, vtkPointData *outPD,
                        vtkCellData *inCD, vtkIdType cellId,
                        vtkCellData *outCD);
  void ClipHexahedronInOut1D(vtkPoints *newPoints, vtkGenericCell *cell, 
                             vtkPointLocator *locator, vtkCellArray **lines,
                             vtkPointData *inPD, vtkPointData *outPD, 
                             vtkCellData *inCD, vtkIdType cellId,
                             vtkCellData **outCD);

  void ClipBox0D(vtkGenericCell *cell,
                 vtkPointLocator *locator, vtkCellArray *verts,
                 vtkPointData *inPD, vtkPointData *outPD, vtkCellData *inCD,
                 vtkIdType cellId, vtkCellData *outCD);
  void ClipBoxInOut0D(vtkGenericCell *cell,
                      vtkPointLocator *locator, vtkCellArray **verts,
                      vtkPointData *inPD, vtkPointData *outPD,
                      vtkCellData *inCD,
                      vtkIdType cellId, vtkCellData **outCD);
  void ClipHexahedron0D(vtkGenericCell *cell,
                        vtkPointLocator *locator, vtkCellArray *verts,
                        vtkPointData *inPD, vtkPointData *outPD,
                        vtkCellData *inCD,
                        vtkIdType cellId, vtkCellData *outCD);
  void ClipHexahedronInOut0D(vtkGenericCell *cell,
                             vtkPointLocator *locator, vtkCellArray **verts,
                             vtkPointData *inPD, vtkPointData *outPD,
                             vtkCellData *inCD,
                             vtkIdType cellId, vtkCellData **outCD);
protected:
  vtkBoxClipDataSet();
  ~vtkBoxClipDataSet();

  virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
  virtual int FillInputPortInformation(int port, vtkInformation *info);
  
  vtkPointLocator *Locator;
  int GenerateClipScalars;

  int GenerateClippedOutput;

  //double MergeTolerance;

  double BoundBoxClip[3][2];
  unsigned int Orientation;
  double PlaneNormal[6][3]; //normal of each plane
  double PlanePoint[6][3]; //point on the plane 

private:
  vtkBoxClipDataSet(const vtkBoxClipDataSet&);  // Not implemented.
  void operator=(const vtkBoxClipDataSet&);  // Not implemented.
};

#endif