vtf-logo

IndexedEdgePolyhedron.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00008 #if !defined(__geom_IndexedEdgePolyhedron_h__)
00009 #define __geom_IndexedEdgePolyhedron_h__
00010 
00011 // If we are debugging the whole geom package.
00012 #if defined(DEBUG_geom) && !defined(DEBUG_IndexedEdgePolyhedron)
00013 #define DEBUG_IndexedEdgePolyhedron
00014 #endif
00015 
00016 #include "../kernel/BBox.h"
00017 
00018 #include <vector>
00019 
00020 BEGIN_NAMESPACE_GEOM
00021 
00023 
00030 template<typename T = double>
00031 class IndexedEdgePolyhedron {
00032   //
00033   // Public types.
00034   //
00035 
00036 public:
00037 
00039   typedef T Number;
00041   typedef int SizeType;
00043   typedef ads::FixedArray<3,Number> Point;
00045   typedef ads::FixedArray<2,int> IndexedEdge;
00046 
00047   //
00048   // Private types.
00049   //
00050 
00051 private:
00052 
00054   typedef std::vector<Point> VertexContainer;
00055 
00057   typedef std::vector<IndexedEdge> EdgeContainer;
00058 
00059   //
00060   // More public types.
00061   //
00062 
00063 public:
00064 
00066   typedef typename VertexContainer::const_iterator VertexConstIterator;
00068   typedef typename VertexContainer::iterator VertexIterator;
00070   typedef typename EdgeContainer::const_iterator EdgeConstIterator;
00072   typedef typename EdgeContainer::iterator EdgeIterator;
00073 
00074   // 
00075   // Data
00076   //
00077 
00078 private:
00079 
00081   VertexContainer _vertices;
00082 
00084   EdgeContainer _edges;
00085   
00086 public:
00087 
00088   //--------------------------------------------------------------------------
00090   // @{
00091 
00093   IndexedEdgePolyhedron() :
00094     _vertices(),
00095     _edges() 
00096   {}
00097   
00099   IndexedEdgePolyhedron(const IndexedEdgePolyhedron& other) : 
00100     _vertices(other._vertices),
00101     _edges(other._edges) 
00102   {}
00103 
00105   IndexedEdgePolyhedron& 
00106   operator=(const IndexedEdgePolyhedron& other);
00107   
00109   ~IndexedEdgePolyhedron()
00110   {}
00111 
00113   //--------------------------------------------------------------------------
00115   // @{
00116 
00118   void 
00119   computeBBox(BBox<3,Number>* bb) const;
00120 
00122   //--------------------------------------------------------------------------
00124   // @{
00125 
00127   SizeType
00128   getVerticesSize() const {
00129     return SizeType(_vertices.size());
00130   }
00131 
00133   SizeType
00134   getEdgesSize() const {
00135     return SizeType(_edges.size());
00136   }
00137 
00139   const Point& 
00140   getVertex(const int n) const { 
00141     return _vertices[n]; 
00142   }
00143 
00145   const IndexedEdge& 
00146   getEdge(const int n) const { 
00147     return _edges[n];
00148   }
00149 
00151   const Point&
00152   getEdgeSource(const int n) const {
00153     return _vertices[_edges[n][0]];
00154   }
00155 
00157   const Point&
00158   getEdgeTarget(const int n) const {
00159     return _vertices[_edges[n][1]];
00160   }
00161 
00163   //--------------------------------------------------------------------------
00165   // @{
00166 
00167   // Return the beginning of the vertices.
00168   VertexIterator
00169   getVerticesBeginning() {
00170     return _vertices.begin();
00171   }
00172 
00173   // Return the end of the vertices.
00174   VertexIterator
00175   getVerticesEnd() {
00176     return _vertices.end();
00177   }
00178 
00179   // Return the beginning of the indexed edges.
00180   EdgeIterator
00181   getEdgesBeginning() {
00182     return _edges.begin();
00183   }
00184 
00185   // Return the end of the indexed edges.
00186   EdgeIterator
00187   getEdgesEnd() {
00188     return _edges.end();
00189   }
00190 
00191   // CONTINUE REMOVE
00192 #if 0
00194   std::vector<Point>& 
00195   vertices() { 
00196     return _vertices; 
00197   }
00198 
00200   std::vector<IndexedEdge>& 
00201   edges() { 
00202     return _edges; 
00203   }
00204 #endif
00205 
00207   void
00208   insertVertex(const Point& x) {
00209     _vertices.push_back(x);
00210   }
00211 
00213   void 
00214   insertEdge(const int i, const int j) {
00215 #ifdef DEBUG_IndexedEdgePolyhedron
00216     assert(0 <= i && i < getVerticesSize() && 
00217            0 <= j && j < getVerticesSize());
00218 #endif
00219     _edges.push_back(IndexedEdge(i, j));
00220   }
00221 
00223   void
00224   clear() {
00225     _vertices.clear();
00226     _edges.clear();
00227   }
00228 
00230   //--------------------------------------------------------------------------
00232 
00233   bool
00234   isEqualTo(const IndexedEdgePolyhedron& x) const {
00235     return _vertices == x._vertices && _edges == x._edges; 
00236   }
00237 
00239 
00240 };
00241 
00242 
00243 //-----------------------------------------------------------------------------
00244 // Equality Operators
00245 //-----------------------------------------------------------------------------
00246 
00247 
00249 
00250 template<typename T>
00251 inline
00252 bool 
00253 operator==(const IndexedEdgePolyhedron<T>& a, 
00254            const IndexedEdgePolyhedron<T>& b) { 
00255   return a.isEqualTo(b);
00256 }
00257 
00259 
00260 template<typename T>
00261 inline
00262 bool 
00263 operator!=(const IndexedEdgePolyhedron<T>& a, 
00264            const IndexedEdgePolyhedron<T>& b) { 
00265   return !(a == b);
00266 }
00267 
00268 END_NAMESPACE_GEOM
00269 
00270 #define __geom_IndexedEdgePolyhedron_ipp__
00271 #include "IndexedEdgePolyhedron.ipp"
00272 #undef __geom_IndexedEdgePolyhedron_ipp__
00273 
00274 #endif

Generated on Fri Aug 24 12:55:53 2007 for Computational Geometry Package by  doxygen 1.4.7