Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

Hybrid/vtkImplicitModeller.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkImplicitModeller.h,v $
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 =========================================================================*/
00077 #ifndef __vtkImplicitModeller_h
00078 #define __vtkImplicitModeller_h
00079 
00080 #include "vtkDataSetToImageFilter.h"
00081 
00082 #define VTK_VOXEL_MODE   0
00083 #define VTK_CELL_MODE    1
00084 
00085 class vtkDataArray;
00086 class vtkExtractGeometry;
00087 class vtkMultiThreader;
00088 
00089 class VTK_HYBRID_EXPORT vtkImplicitModeller : public vtkDataSetToImageFilter 
00090 {
00091 public:
00092   vtkTypeRevisionMacro(vtkImplicitModeller,vtkDataSetToImageFilter);
00093   void PrintSelf(ostream& os, vtkIndent indent);
00094 
00098   static vtkImplicitModeller *New();
00099 
00102   double ComputeModelBounds(vtkDataSet *input = NULL);
00103 
00105 
00106   vtkGetVectorMacro(SampleDimensions,int,3);
00107   void SetSampleDimensions(int i, int j, int k);
00108   void SetSampleDimensions(int dim[3]);
00110 
00112 
00114   vtkSetClampMacro(MaximumDistance,double,0.0,1.0);
00115   vtkGetMacro(MaximumDistance,double);
00117 
00119 
00121   vtkSetVector6Macro(ModelBounds,double);
00122   vtkGetVectorMacro(ModelBounds,double,6);
00124 
00126 
00130   vtkSetMacro(AdjustBounds,int);
00131   vtkGetMacro(AdjustBounds,int);
00132   vtkBooleanMacro(AdjustBounds,int);
00134   
00136 
00139   vtkSetClampMacro(AdjustDistance,double,-1.0,1.0);
00140   vtkGetMacro(AdjustDistance,double);
00142 
00144 
00146   vtkSetMacro(Capping,int);
00147   vtkGetMacro(Capping,int);
00148   vtkBooleanMacro(Capping,int);
00150   
00152 
00154   vtkSetMacro(CapValue,double);
00155   vtkGetMacro(CapValue,double);
00157 
00159 
00164   vtkSetClampMacro(ProcessMode, int, 0, 1);
00165   vtkGetMacro(ProcessMode, int);
00166   void SetProcessModeToPerVoxel() {this->SetProcessMode(VTK_VOXEL_MODE);}
00167   void SetProcessModeToPerCell()  {this->SetProcessMode(VTK_CELL_MODE);}
00168   const char *GetProcessModeAsString(void);
00170 
00172 
00174   vtkSetMacro(LocatorMaxLevel,int);
00175   vtkGetMacro(LocatorMaxLevel,int);
00177 
00179 
00180   vtkSetClampMacro( NumberOfThreads, int, 1, VTK_MAX_THREADS );
00181   vtkGetMacro( NumberOfThreads, int );
00183 
00188   void StartAppend();
00189 
00195   void Append(vtkDataSet *input);
00196 
00198   void EndAppend();
00199 
00200   virtual void UpdateData(vtkDataObject *output);
00201 
00202 protected:
00203   vtkImplicitModeller();
00204   ~vtkImplicitModeller();
00205 
00206   void ExecuteData(vtkDataObject *);
00207   void ExecuteInformation();
00208   
00209   void Cap(vtkDataArray *s);
00210 
00211   vtkMultiThreader *Threader;
00212   int              NumberOfThreads;
00213 
00214   int SampleDimensions[3];
00215   double MaximumDistance;
00216   double ModelBounds[6];
00217   int Capping;
00218   double CapValue;
00219   int DataAppended;
00220   int AdjustBounds;
00221   double AdjustDistance;
00222   int ProcessMode;
00223   int LocatorMaxLevel;
00224 
00225   int BoundsComputed; // flag to limit to one ComputeModelBounds per StartAppend
00226   double InternalMaxDistance; // the max distance computed during that one call
00227 private:
00228   vtkImplicitModeller(const vtkImplicitModeller&);  // Not implemented.
00229   void operator=(const vtkImplicitModeller&);  // Not implemented.
00230 };
00231 
00232 #endif
00233 
00234