Orfeo Toolbox  3.16
itkVoronoiDiagram2D.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Insight Segmentation & Registration Toolkit
4  Module: $RCSfile: itkVoronoiDiagram2D.h,v $
5  Language: C++
6  Date: $Date: 2009-04-23 03:53:37 $
7  Version: $Revision: 1.20 $
8 
9  Copyright (c) Insight Software Consortium. All rights reserved.
10  See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
11 
12  This software is distributed WITHOUT ANY WARRANTY; without even
13  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14  PURPOSE. See the above copyright notices for more information.
15 
16 =========================================================================*/
17 #ifndef __itkVoronoiDiagram2D_h
18 #define __itkVoronoiDiagram2D_h
19 
20 #if defined(_MSC_VER)
21 #pragma warning ( disable : 4786 )
22 #endif
23 
24 #include "itkCellInterface.h"
25 #include "itkLineCell.h"
26 #include "itkMesh.h"
28 #include "itkPolygonCell.h"
29 #include <vector>
30 
31 #ifndef NULL
32 #define NULL 0
33 #endif
34 
35 namespace itk
36 {
53 template <typename TCoordType>
55  public Mesh <TCoordType, 2,
56  DefaultDynamicMeshTraits<TCoordType, 2, 2, TCoordType> >
57 {
58 public:
61  typedef Mesh <TCoordType, 2,
66 
68  itkNewMacro(Self);
69 
71  itkTypeMacro(VoronoiDiagram2D, Mesh);
72 
75 
77  itkStaticConstMacro(PointDimension, unsigned int,
78  MeshTraits::PointDimension);
79  itkStaticConstMacro(MaxTopologicalDimension, unsigned int,
80  MeshTraits::MaxTopologicalDimension);
81 
83  typedef typename MeshTraits::PixelType PixelType;
89  typedef typename MeshTraits::PointType PointType;
98  typedef PointLocator<PointIdentifier,itkGetStaticConstMacro(PointDimension),
100  typedef BoundingBox<PointIdentifier,itkGetStaticConstMacro(PointDimension),
109  typedef typename
111  typedef typename
113  typedef typename
115  typedef typename
117  typedef typename
119  typedef typename
121  typedef typename
123  typedef typename
124  PointCellLinksContainer::const_iterator PointCellLinksContainerIterator;
125 
129  typedef typename CellType::CellAutoPointer CellAutoPointer;
131  typedef std::deque<EdgeInfo> EdgeInfoDQ;
132  typedef typename CellType::MultiVisitor CellMultiVisitorType;
133  typedef std::vector<PointType> SeedsType;
134  typedef typename SeedsType::iterator SeedsIterator;
136  typedef typename Edge::SelfAutoPointer EdgeAutoPointer;
137  typedef std::list<PointType> PointList;
138  typedef std::vector<int> INTvector;
139  typedef typename INTvector::iterator NeighborIdIterator;
140  typedef typename std::vector<PointType>::iterator VertexIterator;
141 
143  itkGetConstMacro(NumberOfSeeds,unsigned int);
144 
147  void SetSeeds (int num, SeedsIterator begin);
148 
150  void SetBoundary(PointType vorsize);
151  void SetOrigin(PointType vorsize);
152 
154  NeighborIdIterator NeighborIdsBegin(int seeds);
155  NeighborIdIterator NeighborIdsEnd(int seeds);
156 
158  VertexIterator VertexBegin(void);
159  VertexIterator VertexEnd(void);
160 
162  PointType GetSeed(int SeedID);
163 
165  void GetCellId(CellIdentifier cellId, CellAutoPointer &);
166 
168  void GetPoint(int pId,PointType *answer);
169 
170  class VoronoiEdge{
171  public:
174  int m_LeftID;
176  int m_LineID;
179  };
180 
182  typedef typename std::vector<VoronoiEdge>::iterator VoronoiEdgeIterator;
183 
185  VoronoiEdgeIterator EdgeBegin(void);
186  VoronoiEdgeIterator EdgeEnd(void);
187 
189  EdgeInfo GetSeedsIDAroundEdge(VoronoiEdge *task);
190  /********************************************************/
191 
192  void Reset();
193  void InsertCells();
194 
195  void AddCellNeighbor(EdgeInfo x)
196  {
197  m_CellNeighborsID[x[0]].push_back(x[1]);
198  m_CellNeighborsID[x[1]].push_back(x[0]);
199  }
200  void ClearRegion(int i)
201  { m_VoronoiRegions[i]->ClearPoints();}
202  void VoronoiRegionAddPointId(int id, int x)
203  { m_VoronoiRegions[id]->AddPointId(x);}
204  void BuildEdge(int id)
205  { m_VoronoiRegions[id]->BuildEdges();}
206 
207  void LineListClear(){ m_LineList.clear();}
208  void EdgeListClear(){ m_EdgeList.clear();}
209  void VertexListClear(){ m_VertexList.clear();}
210  int LineListSize(){ return static_cast<int>( m_LineList.size() );}
211  int EdgeListSize(){ return static_cast<int>( m_EdgeList.size() );}
212  int VertexListSize(){ return static_cast<int>( m_VertexList.size() );}
213  void AddLine(EdgeInfo x){ m_LineList.push_back(x);}
214  void AddEdge(VoronoiEdge x){ m_EdgeList.push_back(x);}
215  void AddVert(PointType x){ m_VertexList.push_back(x);}
216  EdgeInfo GetLine(int id){ return m_LineList[id];}
217  VoronoiEdge GetEdge(int id){ return m_EdgeList[id];}
218  PointType GetVertex(int id){ return m_VertexList[id];}
219  EdgeInfo GetEdgeEnd(int id)
220  {
221  EdgeInfo x;
222  x[0]=m_EdgeList[id].m_LeftID;
223  x[1]=m_EdgeList[id].m_RightID;
224  return x;
225  }
226  int GetEdgeLineID(int id){ return m_EdgeList[id].m_LineID; }
227 
228 protected:
230  ~VoronoiDiagram2D();
231  virtual void PrintSelf(std::ostream& os, Indent indent) const;
232 
233 
234 private:
235  VoronoiDiagram2D(const Self&); //purposely not implemented
236  void operator=(const Self&); //purposely not implemented
237 
239  unsigned int m_NumberOfSeeds;
240  std::vector<CellType *> m_VoronoiRegions;
243  std::vector< std::vector<int> > m_CellNeighborsID;
244 
245  std::vector< EdgeInfo > m_LineList;
246  std::vector< PointType > m_VertexList;
247  std::vector< VoronoiEdge > m_EdgeList;
248 
249 }; // end class: VoronoiDiagram2D
250 
251 } // end namespace itk
252 
253 #ifndef ITK_MANUAL_INSTANTIATION
254 #include "itkVoronoiDiagram2D.txx"
255 #endif
256 
257 #endif

Generated at Sun May 19 2013 00:13:50 for Orfeo Toolbox with doxygen 1.8.3.1