Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound 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   Language:  C++
00006 
00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even 
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00013      PURPOSE.  See the above copyright notice for more information.
00014 
00015 =========================================================================*/
00094 #ifndef __vtkImplicitModeller_h
00095 #define __vtkImplicitModeller_h
00096 
00097 #include "vtkDataSetToImageFilter.h"
00098 
00099 #define VTK_VOXEL_MODE   0
00100 #define VTK_CELL_MODE    1
00101 
00102 class vtkDataArray;
00103 class vtkExtractGeometry;
00104 class vtkMultiThreader;
00105 
00106 class VTK_HYBRID_EXPORT vtkImplicitModeller : public vtkDataSetToImageFilter 
00107 {
00108 public:
00109   vtkTypeRevisionMacro(vtkImplicitModeller,vtkDataSetToImageFilter);
00110   void PrintSelf(ostream& os, vtkIndent indent);
00111 
00115   static vtkImplicitModeller *New();
00116 
00119   float ComputeModelBounds(vtkDataSet *input = NULL);
00120 
00122 
00123   vtkGetVectorMacro(SampleDimensions,int,3);
00124   void SetSampleDimensions(int i, int j, int k);
00125   void SetSampleDimensions(int dim[3]);
00127 
00129 
00131   vtkSetClampMacro(MaximumDistance,float,0.0,1.0);
00132   vtkGetMacro(MaximumDistance,float);
00134 
00136 
00138   vtkSetVector6Macro(ModelBounds,float);
00139   vtkGetVectorMacro(ModelBounds,float,6);
00141 
00143 
00147   vtkSetMacro(AdjustBounds,int);
00148   vtkGetMacro(AdjustBounds,int);
00149   vtkBooleanMacro(AdjustBounds,int);
00151   
00153 
00156   vtkSetClampMacro(AdjustDistance,float,-1.0,1.0);
00157   vtkGetMacro(AdjustDistance,float);
00159 
00161 
00163   vtkSetMacro(Capping,int);
00164   vtkGetMacro(Capping,int);
00165   vtkBooleanMacro(Capping,int);
00167   
00169 
00171   vtkSetMacro(CapValue,float);
00172   vtkGetMacro(CapValue,float);
00174 
00176 
00181   vtkSetClampMacro(ProcessMode, int, 0, 1);
00182   vtkGetMacro(ProcessMode, int);
00183   void SetProcessModeToPerVoxel() {this->SetProcessMode(VTK_VOXEL_MODE);}
00184   void SetProcessModeToPerCell()  {this->SetProcessMode(VTK_CELL_MODE);}
00185   const char *GetProcessModeAsString(void);
00187 
00189 
00191   vtkSetMacro(LocatorMaxLevel,int);
00192   vtkGetMacro(LocatorMaxLevel,int);
00194 
00196 
00197   vtkSetClampMacro( NumberOfThreads, int, 1, VTK_MAX_THREADS );
00198   vtkGetMacro( NumberOfThreads, int );
00200 
00205   void StartAppend();
00206 
00212   void Append(vtkDataSet *input);
00213 
00215   void EndAppend();
00216 
00217   virtual void UpdateData(vtkDataObject *output);
00218 
00219 protected:
00220   vtkImplicitModeller();
00221   ~vtkImplicitModeller();
00222 
00223   void ExecuteData(vtkDataObject *);
00224   void ExecuteInformation();
00225   
00226   void Cap(vtkDataArray *s);
00227 
00228   vtkMultiThreader *Threader;
00229   int              NumberOfThreads;
00230 
00231   int SampleDimensions[3];
00232   float MaximumDistance;
00233   float ModelBounds[6];
00234   int Capping;
00235   float CapValue;
00236   int DataAppended;
00237   int AdjustBounds;
00238   float AdjustDistance;
00239   int ProcessMode;
00240   int LocatorMaxLevel;
00241 
00242   int BoundsComputed; // flag to limit to one ComputeModelBounds per StartAppend
00243   float InternalMaxDistance; // the max distance computed during that one call
00244 private:
00245   vtkImplicitModeller(const vtkImplicitModeller&);  // Not implemented.
00246   void operator=(const vtkImplicitModeller&);  // Not implemented.
00247 };
00248 
00249 #endif
00250 
00251