00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00035 #ifndef __vtkBSPCuts_h
00036 #define __vtkBSPCuts_h
00037
00038 #include "vtkObject.h"
00039
00040 class vtkKdNode;
00041
00042 class VTK_GRAPHICS_EXPORT vtkBSPCuts : public vtkObject
00043 {
00044 public:
00045 vtkTypeRevisionMacro(vtkBSPCuts, vtkObject);
00046 void PrintSelf(ostream& os, vtkIndent indent);
00047
00048 static vtkBSPCuts *New();
00049
00062 void CreateCuts(double *bounds,
00063 int ncuts, int *dim, double *coord,
00064 int *lower, int *upper,
00065 double *lowerDataCoord, double *upperDataCoord,
00066 int *npoints);
00067
00070 void CreateCuts(vtkKdNode *kd);
00071
00075 vtkKdNode *GetKdNodeTree(){return this->Top;}
00076
00080 vtkGetMacro(NumberOfCuts, int);
00081
00084 int GetArrays(int len, int *dim, double *coord, int *lower, int *upper,
00085 double *lowerDataCoord, double *upperDataCoord, int *npoints);
00086
00087 void PrintTree();
00088 void PrintArrays();
00089
00090 protected:
00091
00092 vtkBSPCuts();
00093 ~vtkBSPCuts();
00094
00095 private:
00096
00097 static void DeleteAllDescendants(vtkKdNode *kd);
00098
00099 static int CountNodes(vtkKdNode *kd);
00100 static void SetMinMaxId(vtkKdNode *kd);
00101 static void _PrintTree(vtkKdNode *kd, int depth);
00102
00103 void BuildTree(vtkKdNode *kd, int idx);
00104 int WriteArray(vtkKdNode *kd, int loc);
00105
00106 void ResetArrays();
00107 void AllocateArrays(int size);
00108
00109 vtkKdNode *Top;
00110
00111
00112
00113 int NumberOfCuts;
00114 int *Dim;
00115 double *Coord;
00116 int *Lower;
00117 int *Upper;
00118
00119
00120
00121 double *LowerDataCoord;
00122 double *UpperDataCoord;
00123 int *Npoints;
00124
00125 double Bounds[6];
00126
00127 vtkBSPCuts(const vtkBSPCuts&);
00128 void operator=(const vtkBSPCuts&);
00129 };
00130
00131 #endif