00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00101 #ifndef __vtkImplicitModeller_h
00102 #define __vtkImplicitModeller_h
00103 
00104 #include "vtkDataSetToStructuredPointsFilter.h"
00105 
00106 #define VTK_VOXEL_MODE   0
00107 #define VTK_CELL_MODE    1
00108 
00109 class vtkMultiThreader;
00110 class vtkExtractGeometry;
00111 
00112 class VTK_EXPORT vtkImplicitModeller : public vtkDataSetToStructuredPointsFilter 
00113 {
00114 public:
00115   vtkTypeMacro(vtkImplicitModeller,vtkDataSetToStructuredPointsFilter);
00116   void PrintSelf(ostream& os, vtkIndent indent);
00117 
00121   static vtkImplicitModeller *New();
00122 
00125   float ComputeModelBounds(vtkDataSet *input = NULL);
00126 
00128   vtkGetVectorMacro(SampleDimensions,int,3);
00129   void SetSampleDimensions(int i, int j, int k);
00130   void SetSampleDimensions(int dim[3]);
00131 
00134   vtkSetClampMacro(MaximumDistance,float,0.0,1.0);
00135   vtkGetMacro(MaximumDistance,float);
00136 
00139   vtkSetVector6Macro(ModelBounds,float);
00140   vtkGetVectorMacro(ModelBounds,float,6);
00141 
00146   vtkSetMacro(AdjustBounds,int);
00147   vtkGetMacro(AdjustBounds,int);
00148   vtkBooleanMacro(AdjustBounds,int);
00149   
00153   vtkSetClampMacro(AdjustDistance,float,-1.0,1.0);
00154   vtkGetMacro(AdjustDistance,float);
00155 
00158   vtkSetMacro(Capping,int);
00159   vtkGetMacro(Capping,int);
00160   vtkBooleanMacro(Capping,int);
00161   
00164   vtkSetMacro(CapValue,float);
00165   vtkGetMacro(CapValue,float);
00166 
00172   vtkSetClampMacro(ProcessMode, int, 0, 1);
00173   vtkGetMacro(ProcessMode, int);
00174   void SetProcessModeToPerVoxel() {this->SetProcessMode(VTK_VOXEL_MODE);}
00175   void SetProcessModeToPerCell()  {this->SetProcessMode(VTK_CELL_MODE);}
00176   const char *GetProcessModeAsString(void);
00177 
00180   vtkSetMacro(LocatorMaxLevel,int);
00181   vtkGetMacro(LocatorMaxLevel,int);
00182 
00184   vtkSetMacro( NumberOfThreads, int );
00185   vtkGetMacro( NumberOfThreads, int );
00186 
00191   void StartAppend();
00192 
00198   void Append(vtkDataSet *input);
00199 
00201   void EndAppend();
00202 
00203   virtual void UpdateData(vtkDataObject *output);
00204 
00205 protected:
00206   vtkImplicitModeller();
00207   ~vtkImplicitModeller();
00208   vtkImplicitModeller(const vtkImplicitModeller&) {};
00209   void operator=(const vtkImplicitModeller&) {};
00210 
00211   void Execute();
00212   void ExecuteInformation();
00213   
00214   void Cap(vtkScalars *s);
00215 
00216   vtkMultiThreader *Threader;
00217   int              NumberOfThreads;
00218 
00219   int SampleDimensions[3];
00220   float MaximumDistance;
00221   float ModelBounds[6];
00222   int Capping;
00223   float CapValue;
00224   int DataAppended;
00225   int AdjustBounds;
00226   float AdjustDistance;
00227   int ProcessMode;
00228   int LocatorMaxLevel;
00229 
00230   int BoundsComputed; 
00231   float InternalMaxDistance; 
00232 };
00233 
00234 #endif
00235 
00236