00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00070
#ifndef __vtkImageToPolyDataFilter_h
00071
#define __vtkImageToPolyDataFilter_h
00072
00073
#include "vtkStructuredPointsToPolyDataFilter.h"
00074
00075 #define VTK_STYLE_PIXELIZE 0
00076 #define VTK_STYLE_POLYGONALIZE 1
00077 #define VTK_STYLE_RUN_LENGTH 2
00078
00079 #define VTK_COLOR_MODE_LUT 0
00080 #define VTK_COLOR_MODE_LINEAR_256 1
00081
00082
class vtkAppendPolyData;
00083
class vtkDataArray;
00084
class vtkEdgeTable;
00085
class vtkIdTypeArray;
00086
class vtkIntArray;
00087
class vtkScalarsToColors;
00088
class vtkStructuredPoints;
00089
class vtkTimeStamp;
00090
class vtkUnsignedCharArray;
00091
00092 class VTK_HYBRID_EXPORT vtkImageToPolyDataFilter :
public vtkStructuredPointsToPolyDataFilter
00093 {
00094
public:
00095 vtkTypeRevisionMacro(vtkImageToPolyDataFilter,
vtkStructuredPointsToPolyDataFilter);
00096
void PrintSelf(ostream& os,
vtkIndent indent);
00097
00099
static vtkImageToPolyDataFilter*
New();
00100
00102
00108 vtkSetClampMacro(OutputStyle,
int,VTK_STYLE_PIXELIZE,VTK_STYLE_RUN_LENGTH);
00109 vtkGetMacro(OutputStyle,
int);
00110 void SetOutputStyleToPixelize()
00111 {this->SetOutputStyle(
VTK_STYLE_PIXELIZE);};
00112 void SetOutputStyleToPolygonalize()
00113 {this->SetOutputStyle(
VTK_STYLE_POLYGONALIZE);};
00114 void SetOutputStyleToRunLength()
00115 {this->SetOutputStyle(
VTK_STYLE_RUN_LENGTH);};
00117
00119
00120 vtkSetClampMacro(ColorMode,
int,VTK_COLOR_MODE_LUT,VTK_COLOR_MODE_LINEAR_256);
00121 vtkGetMacro(ColorMode,
int);
00122 void SetColorModeToLUT()
00123 {this->SetColorMode(
VTK_COLOR_MODE_LUT);};
00124 void SetColorModeToLinear256()
00125 {this->SetColorMode(
VTK_COLOR_MODE_LINEAR_256);};
00127
00129
00131
virtual void SetLookupTable(
vtkScalarsToColors*);
00132 vtkGetObjectMacro(LookupTable,
vtkScalarsToColors);
00134
00136
00138 vtkSetMacro(Smoothing,
int);
00139 vtkGetMacro(Smoothing,
int);
00140 vtkBooleanMacro(Smoothing,
int);
00142
00144
00146 vtkSetClampMacro(NumberOfSmoothingIterations,
int,0,VTK_LARGE_INTEGER);
00147 vtkGetMacro(NumberOfSmoothingIterations,
int);
00149
00151
00153 vtkSetMacro(Decimation,
int);
00154 vtkGetMacro(Decimation,
int);
00155 vtkBooleanMacro(Decimation,
int);
00157
00159
00160 vtkSetClampMacro(DecimationError,
float,0.0,VTK_LARGE_FLOAT);
00161 vtkGetMacro(DecimationError,
float);
00163
00165
00168 vtkSetClampMacro(Error,
int,0,VTK_LARGE_INTEGER);
00169 vtkGetMacro(Error,
int);
00171
00173
00178 vtkSetClampMacro(SubImageSize,
int,10,VTK_LARGE_INTEGER);
00179 vtkGetMacro(SubImageSize,
int);
00181
00182
protected:
00183 vtkImageToPolyDataFilter();
00184 ~vtkImageToPolyDataFilter();
00185
00186
void Execute();
00187
00188 int OutputStyle;
00189 int ColorMode;
00190 int Smoothing;
00191 int NumberOfSmoothingIterations;
00192 int Decimation;
00193 float DecimationError;
00194 int Error;
00195 int SubImageSize;
00196 vtkScalarsToColors *LookupTable;
00197
00198
virtual void PixelizeImage(
vtkUnsignedCharArray *pixels,
int dims[3],
00199
float origin[3],
float spacing[3],
00200
vtkPolyData *output);
00201
virtual void PolygonalizeImage(
vtkUnsignedCharArray *pixels,
int dims[3],
00202
float origin[3],
float spacing[3],
00203
vtkPolyData *output);
00204
virtual void RunLengthImage(
vtkUnsignedCharArray *pixels,
int dims[3],
00205
float origin[3],
float spacing[3],
00206
vtkPolyData *output);
00207
private:
00208
vtkUnsignedCharArray *Table;
00209
vtkTimeStamp TableMTime;
00210
int *Visited;
00211
vtkUnsignedCharArray *PolyColors;
00212
vtkEdgeTable *EdgeTable;
00213
vtkEdgeTable *EdgeUseTable;
00214
vtkIntArray *EdgeUses;
00215
00216
00217
vtkAppendPolyData *Append;
00218
00219
void BuildTable(
unsigned char *inPixels);
00220
vtkUnsignedCharArray *QuantizeImage(
vtkDataArray *inScalars,
int numComp,
00221
int type,
int dims[3],
int ext[4]);
00222
int ProcessImage(
vtkUnsignedCharArray *pixels,
int dims[2]);
00223
int BuildEdges(
vtkUnsignedCharArray *pixels,
int dims[3],
float origin[3],
00224
float spacing[3],
vtkUnsignedCharArray *pointDescr,
00225
vtkPolyData *edges);
00226
void BuildPolygons(
vtkUnsignedCharArray *pointDescr,
vtkPolyData *edges,
00227
int numPolys,
vtkUnsignedCharArray *polyColors);
00228
void SmoothEdges(
vtkUnsignedCharArray *pointDescr,
vtkPolyData *edges);
00229
void DecimateEdges(
vtkPolyData *edges,
vtkUnsignedCharArray *pointDescr,
00230
float tol2);
00231
void GeneratePolygons(
vtkPolyData *edges,
int numPolys,
vtkPolyData *output,
00232
vtkUnsignedCharArray *polyColors,
00233
vtkUnsignedCharArray *pointDescr);
00234
00235
int GetNeighbors(
unsigned char *ptr,
int &i,
int &j,
int dims[3],
00236
unsigned char *neighbors[4],
int mode);
00237
00238
void GetIJ(
int id,
int &i,
int &j,
int dims[3]);
00239
unsigned char *GetColor(
unsigned char *rgb);
00240
int IsSameColor(
unsigned char *p1,
unsigned char *p2);
00241
00242
private:
00243 vtkImageToPolyDataFilter(
const vtkImageToPolyDataFilter&);
00244
void operator=(
const vtkImageToPolyDataFilter&);
00245 };
00246
00247
#endif
00248