WTFIT
vtkThreeSkeleton.h
Go to the documentation of this file.
1 #ifndef _VTK_THREESKELETON_H
13 #define _VTK_THREESKELETON_H
14 
15 // wtfit code includes
16 #include <ThreeSkeleton.h>
17 #include <Wrapper.h>
18 #include <vtkZeroSkeleton.h>
19 #include <vtkOneSkeleton.h>
20 
21 // VTK includes -- to adapt
22 #include <vtkDataSet.h>
23 #include <vtkDataSetAlgorithm.h>
24 #include <vtkFiltersCoreModule.h>
25 #include <vtkGenericCell.h>
26 #include <vtkInformation.h>
27 #include <vtkObjectFactory.h>
28 #include <vtkSmartPointer.h>
29 
30 
31 class VTKFILTERSCORE_EXPORT vtkThreeSkeleton
32  : public vtkDataSetAlgorithm, public Wrapper{
33 
34  public:
35 
36  static vtkThreeSkeleton* New();
37 
38  vtkTypeMacro(vtkThreeSkeleton, vtkDataSetAlgorithm);
39 
40  // default wtfit setters
41  vtkSetMacro(debugLevel_, int);
42 
43  void SetThreads(){
44  if(!UseAllCores)
45  threadNumber_ = ThreadNumber;
46  else{
47  threadNumber_ = OsCall::getNumberOfCores();
48  }
49  Modified();
50  }
51 
52  void SetThreadNumber(int threadNumber){
53  ThreadNumber = threadNumber;
54  SetThreads();
55  }
56 
57  void SetUseAllCores(bool onOff){
58  UseAllCores = onOff;
59  SetThreads();
60  }
61  // end of default wtfit setters
62 
87  int buildCellEdges(vtkDataSet *input,
88  vector<vector<int> > &cellEdges,
89  vector<pair<int, int> > *edgeList = NULL,
90  vector<vector<int> > *vertexEdges = NULL,
91  const bool &isTriangulation = false) const;
92 
121  int buildCellNeighbors(vtkDataSet *input,
122  vector<vector<int> > &cellNeighbors,
123  vector<vector<int> > *vertexStars = NULL,
124  vector<vector<int> > *triangleStars = NULL,
125  const bool &isTriangulation = false) const;
126 
154  int buildTriangulationCellNeighbors(vtkPolyData *input,
155  vector<vector<int> > &cellNeighbors,
156  vector<vector<int> > *vertexStars = NULL,
157  vector<vector<int> > *triangleStars = NULL) const{
158 
159  ThreeSkeleton threeSkeleton;
160 
161  threeSkeleton.setWrapper(this);
162 
163  if((triangleStars)&&(!vertexStars)){
164  return threeSkeleton.buildCellNeighborsFromTriangles(
165  input->GetNumberOfPoints(),
166  input->GetNumberOfCells(),
167  input->GetPolys()->GetPointer(),
168  cellNeighbors, triangleStars);
169  }
170  else{
171  return threeSkeleton.buildCellNeighborsFromVertices(
172  input->GetNumberOfPoints(),
173  input->GetNumberOfCells(),
174  input->GetPolys()->GetPointer(),
175  cellNeighbors, vertexStars);
176  }
177  }
178 
206  int buildTriangulationCellNeighbors(vtkUnstructuredGrid *input,
207  vector<vector<int> > &cellNeighbors,
208  vector<vector<int> > *vertexStars = NULL,
209  vector<vector<int> > *triangleStars = NULL) const{
210 
211  ThreeSkeleton threeSkeleton;
212 
213  threeSkeleton.setWrapper(this);
214 
215  if((triangleStars)&&(!vertexStars)){
216  return threeSkeleton.buildCellNeighborsFromTriangles(
217  input->GetNumberOfPoints(),
218  input->GetNumberOfCells(),
219  input->GetCells()->GetPointer(),
220  cellNeighbors, triangleStars);
221  }
222  else{
223  return threeSkeleton.buildCellNeighborsFromVertices(
224  input->GetNumberOfPoints(),
225  input->GetNumberOfCells(),
226  input->GetCells()->GetPointer(),
227  cellNeighbors, vertexStars);
228  }
229  }
230 
231  protected:
232 
234 
235  ~vtkThreeSkeleton();
236 
237  int RequestData(vtkInformation *request,
238  vtkInformationVector **inputVector, vtkInformationVector *outputVector);
239 
240 
241  private:
242 
243  bool UseAllCores;
244  int ThreadNumber;
245 
246  // base code features
247  virtual int doIt(vtkDataSet *input, vtkDataSet *output);
248 
249  bool needsToAbort();
250 
251  int updateProgress(const float &progress);
252 
253 };
254 
255 #endif // _VTK_THREESKELETON_H
virtual bool needsToAbort()=0
void SetThreads()
Definition: vtkThreeSkeleton.h:43
VTK helper that processes the 3-skeleton (tetrahedra) of a data-set.
Definition: vtkThreeSkeleton.h:31
ThreeSkeleton processing package.
Definition: ThreeSkeleton.h:27
void SetThreadNumber(int threadNumber)
Definition: vtkThreeSkeleton.h:52
virtual int updateProgress(const float &progress)=0
int buildCellNeighborsFromVertices(const int &vertexNumber, const int &cellNumber, const long long int *cellArray, vector< vector< int > > &cellNeighbors, vector< vector< int > > *vertexStars=NULL) const
Definition: ThreeSkeleton.cpp:248
Wrapper class to wrap wtfit code.
Definition: Wrapper.h:15
int setWrapper(const Wrapper *wrapper)
Definition: Debug.cpp:76
int buildCellNeighborsFromTriangles(const int &vertexNumber, const int &cellNumber, const long long int *cellArray, vector< vector< int > > &cellNeighbors, vector< vector< int > > *triangleStars=NULL) const
Definition: ThreeSkeleton.cpp:119
static int getNumberOfCores()
Definition: Os.h:127
int buildTriangulationCellNeighbors(vtkPolyData *input, vector< vector< int > > &cellNeighbors, vector< vector< int > > *vertexStars=NULL, vector< vector< int > > *triangleStars=NULL) const
Definition: vtkThreeSkeleton.h:154
int buildTriangulationCellNeighbors(vtkUnstructuredGrid *input, vector< vector< int > > &cellNeighbors, vector< vector< int > > *vertexStars=NULL, vector< vector< int > > *triangleStars=NULL) const
Definition: vtkThreeSkeleton.h:206
void SetUseAllCores(bool onOff)
Definition: vtkThreeSkeleton.h:57