00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00033 #ifndef __vtkBSPIntersections_h
00034 #define __vtkBSPIntersections_h
00035
00036 #include "vtkObject.h"
00037
00038 class vtkTimeStamp;
00039 class vtkCell;
00040 class vtkKdNode;
00041 class vtkBSPCuts;
00042
00043 class VTK_FILTERING_EXPORT vtkBSPIntersections : public vtkObject
00044 {
00045 public:
00046 vtkTypeMacro(vtkBSPIntersections, vtkObject);
00047 void PrintSelf(ostream& os, vtkIndent indent);
00048
00049 static vtkBSPIntersections *New();
00050
00053 void SetCuts(vtkBSPCuts *cuts);
00054 vtkGetObjectMacro(Cuts, vtkBSPCuts);
00055
00059 int GetBounds(double *bounds);
00060
00063 int GetNumberOfRegions();
00064
00068 int GetRegionBounds(int regionID, double bounds[6]);
00069
00073 int GetRegionDataBounds(int regionID, double bounds[6]);
00074
00076
00078 int IntersectsBox(int regionId, double *x);
00079 int IntersectsBox(int regionId, double xmin, double xmax,
00080 double ymin, double ymax,
00081 double zmin, double zmax);
00083
00085
00087 int IntersectsBox(int *ids, int len, double *x);
00088 int IntersectsBox(int *ids, int len, double x0, double x1,
00089 double y0, double y1, double z0, double z1);
00091
00093
00095 int IntersectsSphere2(int regionId,
00096 double x, double y, double z, double rSquared);
00098
00100
00103 int IntersectsSphere2(int *ids, int len,
00104 double x, double y, double z, double rSquared);
00106
00111 int IntersectsCell(int regionId, vtkCell *cell, int cellRegion=-1);
00112
00117 int IntersectsCell(int *ids, int len, vtkCell *cell, int cellRegion=-1);
00118
00126 vtkGetMacro(ComputeIntersectionsUsingDataBounds, int);
00127 void SetComputeIntersectionsUsingDataBounds(int c);
00128 void ComputeIntersectionsUsingDataBoundsOn();
00129 void ComputeIntersectionsUsingDataBoundsOff();
00130
00131 protected:
00132
00133 vtkBSPIntersections();
00134 ~vtkBSPIntersections();
00135
00136 vtkGetMacro(RegionListBuildTime, unsigned long);
00137
00138 int BuildRegionList();
00139
00140 vtkKdNode **GetRegionList(){return this->RegionList;}
00141
00142 double CellBoundsCache[6];
00143
00144
00145 enum {
00146 XDIM = 0,
00147 YDIM = 1,
00148 ZDIM = 2
00149 };
00150
00151
00152 private:
00153
00154 static int NumberOfLeafNodes(vtkKdNode *kd);
00155 static void SetIDRanges(vtkKdNode *kd, int &min, int &max);
00156
00157 int SelfRegister(vtkKdNode *kd);
00158
00159 static void SetCellBounds(vtkCell *cell, double *bounds);
00160
00161 int _IntersectsBox(vtkKdNode *node, int *ids, int len,
00162 double x0, double x1,
00163 double y0, double y1,
00164 double z0, double z1);
00165
00166 int _IntersectsSphere2(vtkKdNode *node, int *ids, int len,
00167 double x, double y, double z, double rSquared);
00168
00169 int _IntersectsCell(vtkKdNode *node, int *ids, int len,
00170 vtkCell *cell, int cellRegion=-1);
00171
00172 vtkBSPCuts *Cuts;
00173
00174 int NumberOfRegions;
00175 vtkKdNode **RegionList;
00176
00177 vtkTimeStamp RegionListBuildTime;
00178
00179 int ComputeIntersectionsUsingDataBounds;
00180
00181 vtkBSPIntersections(const vtkBSPIntersections&);
00182 void operator=(const vtkBSPIntersections&);
00183 };
00184 #endif