forked from Kitware/VTK
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathvtkBSPCuts.h
140 lines (104 loc) · 4.74 KB
/
vtkBSPCuts.h
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
/*=========================================================================
Program: Visualization Toolkit
Module: vtkBSPCuts.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.
=========================================================================*/
/*----------------------------------------------------------------------------
Copyright (c) Sandia Corporation
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
----------------------------------------------------------------------------*/
// .NAME vtkBSPCuts - This class represents an axis-aligned Binary Spatial
// Partitioning of a 3D space.
//
// .SECTION Description
// This class converts between the vtkKdTree
// representation of a tree of vtkKdNodes (used by vtkDistributedDataFilter)
// and a compact array representation that might be provided by a
// graph partitioning library like Zoltan. Such a representation
// could be used in message passing.
//
// .SECTION See Also
// vtkKdTree vtkKdNode vtkDistributedDataFilter
#ifndef __vtkBSPCuts_h
#define __vtkBSPCuts_h
#include "vtkObject.h"
class vtkKdNode;
class VTK_FILTERING_EXPORT vtkBSPCuts : public vtkObject
{
public:
vtkTypeMacro(vtkBSPCuts, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
static vtkBSPCuts *New();
// Description:
// Initialize the cuts with arrays of information. This type of
// information would be obtained from a graph partitioning software
// package like Zoltan.
//
// bounds - the bounds (xmin, xmax, ymin, ymax, zmin, zmax) of the
// space being partitioned
// ncuts - the number cuts, also the size of the following arrays
// dim - the dimension along which the cut is made (x/y/z - 0/1/2)
// coord - the location of the cut along the axis
// lower - array index for the lower region bounded by the cut
// upper - array index for the upper region bounded by the cut
// lowerDataCoord - optional upper bound of the data in the lower region
// upperDataCoord - optional lower bound of the data in the upper region
// npoints - optional number of points in the spatial region
void CreateCuts(double *bounds,
int ncuts, int *dim, double *coord,
int *lower, int *upper,
double *lowerDataCoord, double *upperDataCoord,
int *npoints);
// Description:
// Initialize the cuts from a tree of vtkKdNode's
void CreateCuts(vtkKdNode *kd);
// Description:
// Return a tree of vtkKdNode's representing the cuts specified
// in this object. This is our copy, don't delete it.
vtkKdNode *GetKdNodeTree(){return this->Top;}
// Description:
// Get the number of cuts in the partitioning, which also the size of
// the arrays in the array representation of the partitioning.
vtkGetMacro(NumberOfCuts, int);
// Description:
// Get the arrays representing the cuts in the partitioning.
int GetArrays(int len, int *dim, double *coord, int *lower, int *upper,
double *lowerDataCoord, double *upperDataCoord, int *npoints);
// Description:
// Compare these cuts with those of the other tree. Returns true if
// the two trees are the same.
int Equals(vtkBSPCuts *other, double tolerance = 0.0);
void PrintTree();
void PrintArrays();
protected:
vtkBSPCuts();
~vtkBSPCuts();
static void DeleteAllDescendants(vtkKdNode *kd);
static int CountNodes(vtkKdNode *kd);
static void SetMinMaxId(vtkKdNode *kd);
static void _PrintTree(vtkKdNode *kd, int depth);
void BuildTree(vtkKdNode *kd, int idx);
int WriteArray(vtkKdNode *kd, int loc);
void ResetArrays();
void AllocateArrays(int size);
vtkKdNode *Top;
// required cut information
int NumberOfCuts;// number of cuts, also length of each array
int *Dim; // dimension (x/y/z - 0/1/2) where cut occurs
double *Coord; // location of cut along axis
int *Lower; // location in arrays of left (lower) child info
int *Upper; // location in arrays of right (lower) child info
// optional cut information
double *LowerDataCoord; // coordinate of uppermost data in lower half
double *UpperDataCoord; // coordinate of lowermost data in upper half
int *Npoints; // number of data values in partition
double Bounds[6];
vtkBSPCuts(const vtkBSPCuts&); // Not implemented
void operator=(const vtkBSPCuts&); // Not implemented
};
#endif