00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00027 #ifndef __vtkHyperOctreeFractalSource_h
00028 #define __vtkHyperOctreeFractalSource_h
00029 
00030 #include "vtkHyperOctreeAlgorithm.h"
00031 
00032 class vtkImplicitFunction;
00033 
00034 class VTK_GRAPHICS_EXPORT vtkHyperOctreeFractalSource : public vtkHyperOctreeAlgorithm
00035 {
00036 public:
00037   vtkTypeMacro(vtkHyperOctreeFractalSource,vtkHyperOctreeAlgorithm);
00038   void PrintSelf(ostream& os, vtkIndent indent);
00039   
00040   static vtkHyperOctreeFractalSource *New();
00041 
00044   int GetMaximumLevel();
00045   
00050   void SetMaximumLevel(int levels);
00051   
00053 
00055   void SetMinimumLevel(int level);
00056   int GetMinimumLevel();
00058   
00059   
00060   
00061   
00063 
00066   void SetProjectionAxes(int x, int y, int z);
00067   void SetProjectionAxes(int a[3]) {this->SetProjectionAxes(a[0],a[1],a[2]);}
00068   vtkGetVector3Macro(ProjectionAxes, int);
00070 
00072 
00074   vtkSetVector4Macro(OriginCX, double);
00075   vtkGetVector4Macro(OriginCX, double);
00077 
00079 
00082   vtkSetVector4Macro(SizeCX, double);
00083   vtkGetVector4Macro(SizeCX, double);
00085 
00087 
00088   vtkSetClampMacro(MaximumNumberOfIterations, unsigned short, 1, 255);
00089   vtkGetMacro(MaximumNumberOfIterations, unsigned char);
00091   
00093 
00094   vtkSetClampMacro(Dimension, int, 2, 3);
00095   vtkGetMacro(Dimension, int);
00097   
00099 
00102   vtkSetMacro(SpanThreshold, double);
00103   vtkGetMacro(SpanThreshold, double);
00105   
00106 protected:
00107   vtkHyperOctreeFractalSource();
00108   ~vtkHyperOctreeFractalSource();
00109   
00110   int RequestInformation (vtkInformation * vtkNotUsed(request),
00111                           vtkInformationVector ** vtkNotUsed( inputVector ),
00112                           vtkInformationVector *outputVector);
00113   
00114   virtual int RequestData(vtkInformation *, vtkInformationVector **, 
00115                           vtkInformationVector *);
00116 
00117   void Subdivide(vtkHyperOctreeCursor *cursor,
00118                  int level, vtkHyperOctree *output,
00119                  double* origin, double* size,
00120                  float* cornerVals);
00121   
00122   int MaximumLevel;
00123   int MinimumLevel;
00124   int Dimension;
00125   
00126   int ProjectionAxes[3];
00127 
00128   unsigned char MaximumNumberOfIterations;
00129   
00130   
00131   double OriginCX[4];
00132 
00133   
00134   
00135   double SizeCX[4];
00136 
00137   float EvaluateWorldPoint(double p[3]);
00138   float EvaluateSet(double p[4]);
00139   
00140   double Origin[3];
00141   double Size[3];
00142   
00143   double SpanThreshold;
00144   
00145 private:
00146   vtkHyperOctreeFractalSource(const vtkHyperOctreeFractalSource&);  
00147   void operator=(const vtkHyperOctreeFractalSource&);  
00148 };
00149 
00150 #endif