VTK  9.2.6
vtkImageToPolyDataFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkImageToPolyDataFilter.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
86 #ifndef vtkImageToPolyDataFilter_h
87 #define vtkImageToPolyDataFilter_h
88 
89 #include "vtkFiltersHybridModule.h" // For export macro
90 #include "vtkPolyDataAlgorithm.h"
91 
92 #define VTK_STYLE_PIXELIZE 0
93 #define VTK_STYLE_POLYGONALIZE 1
94 #define VTK_STYLE_RUN_LENGTH 2
95 
96 #define VTK_COLOR_MODE_LUT 0
97 #define VTK_COLOR_MODE_LINEAR_256 1
98 
99 class vtkDataArray;
100 class vtkEdgeTable;
101 class vtkIdTypeArray;
102 class vtkIntArray;
103 class vtkScalarsToColors;
104 class vtkStructuredPoints;
105 class vtkTimeStamp;
107 
108 class VTKFILTERSHYBRID_EXPORT vtkImageToPolyDataFilter : public vtkPolyDataAlgorithm
109 {
110 public:
112  void PrintSelf(ostream& os, vtkIndent indent) override;
113 
118 
120 
128  vtkSetClampMacro(OutputStyle, int, VTK_STYLE_PIXELIZE, VTK_STYLE_RUN_LENGTH);
129  vtkGetMacro(OutputStyle, int);
130  void SetOutputStyleToPixelize() { this->SetOutputStyle(VTK_STYLE_PIXELIZE); }
131  void SetOutputStyleToPolygonalize() { this->SetOutputStyle(VTK_STYLE_POLYGONALIZE); }
132  void SetOutputStyleToRunLength() { this->SetOutputStyle(VTK_STYLE_RUN_LENGTH); }
134 
136 
139  vtkSetClampMacro(ColorMode, int, VTK_COLOR_MODE_LUT, VTK_COLOR_MODE_LINEAR_256);
140  vtkGetMacro(ColorMode, int);
141  void SetColorModeToLUT() { this->SetColorMode(VTK_COLOR_MODE_LUT); }
142  void SetColorModeToLinear256() { this->SetColorMode(VTK_COLOR_MODE_LINEAR_256); }
144 
146 
151  vtkGetObjectMacro(LookupTable, vtkScalarsToColors);
153 
155 
159  vtkSetMacro(Smoothing, vtkTypeBool);
160  vtkGetMacro(Smoothing, vtkTypeBool);
161  vtkBooleanMacro(Smoothing, vtkTypeBool);
163 
165 
169  vtkSetClampMacro(NumberOfSmoothingIterations, int, 0, VTK_INT_MAX);
170  vtkGetMacro(NumberOfSmoothingIterations, int);
172 
174 
178  vtkSetMacro(Decimation, vtkTypeBool);
179  vtkGetMacro(Decimation, vtkTypeBool);
180  vtkBooleanMacro(Decimation, vtkTypeBool);
182 
184 
190  vtkSetClampMacro(DecimationError, double, 0.0, VTK_DOUBLE_MAX);
191  vtkGetMacro(DecimationError, double);
193 
195 
200  vtkSetClampMacro(Error, int, 0, VTK_INT_MAX);
201  vtkGetMacro(Error, int);
203 
205 
212  vtkSetClampMacro(SubImageSize, int, 10, VTK_INT_MAX);
213  vtkGetMacro(SubImageSize, int);
215 
216 protected:
219 
222 
229  int Error;
232 
233  virtual void PixelizeImage(vtkUnsignedCharArray* pixels, int dims[3], double origin[3],
234  double spacing[3], vtkPolyData* output);
235  virtual void PolygonalizeImage(vtkUnsignedCharArray* pixels, int dims[3], double origin[3],
236  double spacing[3], vtkPolyData* output);
237  virtual void RunLengthImage(vtkUnsignedCharArray* pixels, int dims[3], double origin[3],
238  double spacing[3], vtkPolyData* output);
239 
240 private:
241  vtkUnsignedCharArray* Table; // color table used to quantize points
242  vtkTimeStamp TableMTime;
243  int* Visited; // traverse & mark connected regions
244  vtkUnsignedCharArray* PolyColors; // the colors of each region -> polygon
245  vtkEdgeTable* EdgeTable; // keep track of intersection points
246  vtkEdgeTable* EdgeUseTable; // keep track of polygons use of edges
247  vtkIntArray* EdgeUses; // the two polygons that use an edge
248  // and point id associated with edge (if any)
249 
250  void BuildTable(unsigned char* inPixels);
251  vtkUnsignedCharArray* QuantizeImage(
252  vtkDataArray* inScalars, int numComp, int type, int dims[3], int ext[4]);
253  int ProcessImage(vtkUnsignedCharArray* pixels, int dims[2]);
254  int BuildEdges(vtkUnsignedCharArray* pixels, int dims[3], double origin[3], double spacing[3],
255  vtkUnsignedCharArray* pointDescr, vtkPolyData* edges);
256  void BuildPolygons(vtkUnsignedCharArray* pointDescr, vtkPolyData* edges, int numPolys,
257  vtkUnsignedCharArray* polyColors);
258  void SmoothEdges(vtkUnsignedCharArray* pointDescr, vtkPolyData* edges);
259  void DecimateEdges(vtkPolyData* edges, vtkUnsignedCharArray* pointDescr, double tol2);
260  void GeneratePolygons(vtkPolyData* edges, int numPolys, vtkPolyData* output,
261  vtkUnsignedCharArray* polyColors, vtkUnsignedCharArray* pointDescr);
262 
263  int GetNeighbors(
264  unsigned char* ptr, int& i, int& j, int dims[3], unsigned char* neighbors[4], int mode);
265 
266  void GetIJ(int id, int& i, int& j, int dims[2]);
267  unsigned char* GetColor(unsigned char* rgb);
268  int IsSameColor(unsigned char* p1, unsigned char* p2);
269 
270 private:
272  void operator=(const vtkImageToPolyDataFilter&) = delete;
273 };
274 
275 #endif
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:165
keep track of edges (edge is pair of integer id's)
Definition: vtkEdgeTable.h:41
dynamic, self-adjusting array of vtkIdType
generate linear primitives (vtkPolyData) from an image
virtual void RunLengthImage(vtkUnsignedCharArray *pixels, int dims[3], double origin[3], double spacing[3], vtkPolyData *output)
void SetColorModeToLinear256()
Specify how to quantize color.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static vtkImageToPolyDataFilter * New()
Instantiate object with initial number of colors 256.
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
void SetOutputStyleToPixelize()
Specify how to create the output.
void SetOutputStyleToPolygonalize()
Specify how to create the output.
void SetColorModeToLUT()
Specify how to quantize color.
virtual void SetLookupTable(vtkScalarsToColors *)
Set/Get the vtkLookupTable to use.
virtual void PixelizeImage(vtkUnsignedCharArray *pixels, int dims[3], double origin[3], double spacing[3], vtkPolyData *output)
~vtkImageToPolyDataFilter() override
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
virtual void PolygonalizeImage(vtkUnsignedCharArray *pixels, int dims[3], double origin[3], double spacing[3], vtkPolyData *output)
void SetOutputStyleToRunLength()
Specify how to create the output.
a simple class to control print indentation
Definition: vtkIndent.h:119
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:155
Superclass for algorithms that produce only polydata as output.
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:200
Superclass for mapping scalar values to colors.
A subclass of ImageData.
record modification and/or execution time
Definition: vtkTimeStamp.h:55
dynamic, self-adjusting array of unsigned char
@ info
Definition: vtkX3D.h:382
@ mode
Definition: vtkX3D.h:253
@ port
Definition: vtkX3D.h:453
@ type
Definition: vtkX3D.h:522
@ spacing
Definition: vtkX3D.h:487
int vtkTypeBool
Definition: vtkABI.h:69
std::pair< boost::graph_traits< vtkGraph * >::edge_iterator, boost::graph_traits< vtkGraph * >::edge_iterator > edges(vtkGraph *g)
#define VTK_COLOR_MODE_LINEAR_256
#define VTK_COLOR_MODE_LUT
#define VTK_STYLE_POLYGONALIZE
#define VTK_STYLE_PIXELIZE
#define VTK_STYLE_RUN_LENGTH
#define VTK_DOUBLE_MAX
Definition: vtkType.h:165
#define VTK_INT_MAX
Definition: vtkType.h:155