VTK  9.1.0
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 =========================================================================*/
83 #ifndef vtkImageToPolyDataFilter_h
84 #define vtkImageToPolyDataFilter_h
85 
86 #include "vtkFiltersHybridModule.h" // For export macro
87 #include "vtkPolyDataAlgorithm.h"
88 
89 #define VTK_STYLE_PIXELIZE 0
90 #define VTK_STYLE_POLYGONALIZE 1
91 #define VTK_STYLE_RUN_LENGTH 2
92 
93 #define VTK_COLOR_MODE_LUT 0
94 #define VTK_COLOR_MODE_LINEAR_256 1
95 
96 class vtkDataArray;
97 class vtkEdgeTable;
98 class vtkIdTypeArray;
99 class vtkIntArray;
100 class vtkScalarsToColors;
101 class vtkStructuredPoints;
102 class vtkTimeStamp;
104 
105 class VTKFILTERSHYBRID_EXPORT vtkImageToPolyDataFilter : public vtkPolyDataAlgorithm
106 {
107 public:
109  void PrintSelf(ostream& os, vtkIndent indent) override;
110 
115 
117 
125  vtkSetClampMacro(OutputStyle, int, VTK_STYLE_PIXELIZE, VTK_STYLE_RUN_LENGTH);
126  vtkGetMacro(OutputStyle, int);
127  void SetOutputStyleToPixelize() { this->SetOutputStyle(VTK_STYLE_PIXELIZE); }
128  void SetOutputStyleToPolygonalize() { this->SetOutputStyle(VTK_STYLE_POLYGONALIZE); }
129  void SetOutputStyleToRunLength() { this->SetOutputStyle(VTK_STYLE_RUN_LENGTH); }
131 
133 
136  vtkSetClampMacro(ColorMode, int, VTK_COLOR_MODE_LUT, VTK_COLOR_MODE_LINEAR_256);
137  vtkGetMacro(ColorMode, int);
138  void SetColorModeToLUT() { this->SetColorMode(VTK_COLOR_MODE_LUT); }
139  void SetColorModeToLinear256() { this->SetColorMode(VTK_COLOR_MODE_LINEAR_256); }
141 
143 
148  vtkGetObjectMacro(LookupTable, vtkScalarsToColors);
150 
152 
156  vtkSetMacro(Smoothing, vtkTypeBool);
157  vtkGetMacro(Smoothing, vtkTypeBool);
158  vtkBooleanMacro(Smoothing, vtkTypeBool);
160 
162 
166  vtkSetClampMacro(NumberOfSmoothingIterations, int, 0, VTK_INT_MAX);
167  vtkGetMacro(NumberOfSmoothingIterations, int);
169 
171 
175  vtkSetMacro(Decimation, vtkTypeBool);
176  vtkGetMacro(Decimation, vtkTypeBool);
177  vtkBooleanMacro(Decimation, vtkTypeBool);
179 
181 
187  vtkSetClampMacro(DecimationError, double, 0.0, VTK_DOUBLE_MAX);
188  vtkGetMacro(DecimationError, double);
190 
192 
197  vtkSetClampMacro(Error, int, 0, VTK_INT_MAX);
198  vtkGetMacro(Error, int);
200 
202 
209  vtkSetClampMacro(SubImageSize, int, 10, VTK_INT_MAX);
210  vtkGetMacro(SubImageSize, int);
212 
213 protected:
216 
219 
226  int Error;
229 
230  virtual void PixelizeImage(vtkUnsignedCharArray* pixels, int dims[3], double origin[3],
231  double spacing[3], vtkPolyData* output);
232  virtual void PolygonalizeImage(vtkUnsignedCharArray* pixels, int dims[3], double origin[3],
233  double spacing[3], vtkPolyData* output);
234  virtual void RunLengthImage(vtkUnsignedCharArray* pixels, int dims[3], double origin[3],
235  double spacing[3], vtkPolyData* output);
236 
237 private:
238  vtkUnsignedCharArray* Table; // color table used to quantize points
239  vtkTimeStamp TableMTime;
240  int* Visited; // traverse & mark connected regions
241  vtkUnsignedCharArray* PolyColors; // the colors of each region -> polygon
242  vtkEdgeTable* EdgeTable; // keep track of intersection points
243  vtkEdgeTable* EdgeUseTable; // keep track of polygons use of edges
244  vtkIntArray* EdgeUses; // the two polygons that use an edge
245  // and point id associated with edge (if any)
246 
247  void BuildTable(unsigned char* inPixels);
248  vtkUnsignedCharArray* QuantizeImage(
249  vtkDataArray* inScalars, int numComp, int type, int dims[3], int ext[4]);
250  int ProcessImage(vtkUnsignedCharArray* pixels, int dims[2]);
251  int BuildEdges(vtkUnsignedCharArray* pixels, int dims[3], double origin[3], double spacing[3],
252  vtkUnsignedCharArray* pointDescr, vtkPolyData* edges);
253  void BuildPolygons(vtkUnsignedCharArray* pointDescr, vtkPolyData* edges, int numPolys,
254  vtkUnsignedCharArray* polyColors);
255  void SmoothEdges(vtkUnsignedCharArray* pointDescr, vtkPolyData* edges);
256  void DecimateEdges(vtkPolyData* edges, vtkUnsignedCharArray* pointDescr, double tol2);
257  void GeneratePolygons(vtkPolyData* edges, int numPolys, vtkPolyData* output,
258  vtkUnsignedCharArray* polyColors, vtkUnsignedCharArray* pointDescr);
259 
260  int GetNeighbors(
261  unsigned char* ptr, int& i, int& j, int dims[3], unsigned char* neighbors[4], int mode);
262 
263  void GetIJ(int id, int& i, int& j, int dims[2]);
264  unsigned char* GetColor(unsigned char* rgb);
265  int IsSameColor(unsigned char* p1, unsigned char* p2);
266 
267 private:
269  void operator=(const vtkImageToPolyDataFilter&) = delete;
270 };
271 
272 #endif
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:159
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:113
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:149
Superclass for algorithms that produce only polydata as output.
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
Superclass for mapping scalar values to colors.
A subclass of ImageData.
record modification and/or execution time
Definition: vtkTimeStamp.h:52
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