VTK
dox/Graphics/vtkHyperOctreeFractalSource.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkHyperOctreeFractalSource.h
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
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   //========== Mandelbrot parameters ==========
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   // Complex constant/initial-value at origin.
00131   double OriginCX[4];
00132 
00133   // A temporary vector that is computed as needed.
00134   // It is used to return a vector.
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&);  // Not implemented.
00147   void operator=(const vtkHyperOctreeFractalSource&);  // Not implemented.
00148 };
00149 
00150 #endif