VTK
|
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