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
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
96class vtkDataArray;
97class vtkEdgeTable;
98class vtkIdTypeArray;
99class vtkIntArray;
102class vtkTimeStamp;
104
105class VTKFILTERSHYBRID_EXPORT vtkImageToPolyDataFilter : public vtkPolyDataAlgorithm
106{
107public:
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); }
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
213protected:
216
218 int FillInputPortInformation(int port, vtkInformation* info) override;
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
237private:
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],
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
267private:
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.
static vtkImageToPolyDataFilter * New()
Instantiate object with initial number of colors 256.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
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
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