14 #ifndef OSGUTIL_EDGECOLLECTOR
15 #define OSGUTIL_EDGECOLLECTOR 1
25 #include <osg/Geometry>
26 #include <osg/ref_ptr>
28 #include <osgUtil/Export>
35 template<
class T,
class U>
45 if (lhs==rhs)
return false;
46 if (!lhs)
return true;
47 if (!rhs)
return false;
56 T& non_const_t =
const_cast<T&
>(t);
81 typedef std::vector<osg::ref_ptr<Edge> >
EdgeList;
84 typedef std::vector< osg::ref_ptr<Point> >
PointList;
91 Point(): _protected(false), _index(0) {}
100 void clear() { _triangles.clear(); }
102 bool operator < (
const Point& rhs)
const {
return _vertex < rhs.
_vertex; }
104 bool isBoundaryPoint()
const;
120 bool operator < (
const Edge& rhs)
const;
122 bool operator == (
const Edge& rhs)
const;
124 bool operator != (
const Edge& rhs)
const;
132 bool isAdjacentToBoundary()
const {
return isBoundaryEdge() || _p1->isBoundaryPoint() || _p2->isBoundaryPoint(); }
145 bool operator < (
const Triangle& rhs)
const;
152 {
return (_e1->isBoundaryEdge() || _e2->isBoundaryEdge() || _e3->isBoundaryEdge()); }
174 bool isClosed() {
return (_edgeList.back()->endConnected(*_edgeList.front().get())); }
183 Triangle* addTriangle(
unsigned int p1,
unsigned int p2,
unsigned int p3);
189 Point* addPoint(Triangle* triangle,
Point* point);
191 void getBoundaryEdgeList(EdgeList & el);
192 bool extractBoundaryEdgeloop(EdgeList & el, Edgeloop & edgeloop);
193 bool extractBoundaryEdgeloopList(EdgeList & el, EdgeloopList & edgeloopList);
195 void getEdgeloopIndexList(IndexArrayList & ial);
210 #endif // ** OSGUTIL_EDGECOLLECTOR ** //
std::map< osg::ref_ptr< Triangle >, unsigned int, dereference_less > TriangleMap
bool endConnected(const Edge &rhs) const
float distance(const osg::Vec3 &vertex) const
osg::ref_ptr< Point > _op2
bool dereference_check_less(const T &lhs, const T &rhs)
unsigned int getNumOfTriangles()
PointList _originalPointList
osg::ref_ptr< Point > _p3
osg::ref_ptr< Point > _op3
std::vector< osg::ref_ptr< Point > > PointList
bool isAdjacentToBoundary() const
osg::ref_ptr< Point > _p2
osg::ref_ptr< Point > _op1
std::vector< osg::ref_ptr< Edge > > EdgeList
bool beginConnected(const Edge &rhs) const
std::list< osg::ref_ptr< Triangle > > TriangleList
osg::Geometry * getGeometry()
std::set< osg::ref_ptr< Edge >, dereference_less > EdgeSet
bool isBoundaryTriangle() const
osg::ref_ptr< Point > _op1
std::list< osg::ref_ptr< Edgeloop > > EdgeloopList
osg::ref_ptr< Point > _p1
bool isBoundaryEdge() const
A plane class. It can be used to represent an infinite plane.
std::vector< osg::ref_ptr< Edge > > EdgeList
std::list< osg::ref_ptr< osg::UIntArray > > IndexArrayList
osg::ref_ptr< Point > _p2
void operator()(const T &t)
osg::ref_ptr< Point > _p1
osg::Geometry * _geometry
Point * addPoint(Triangle *triangle, unsigned int p1)
bool operator()(const T &lhs, const U &rhs) const
void addTriangle(Triangle *triangle)
std::set< osg::ref_ptr< Point >, dereference_less > PointSet
std::set< osg::ref_ptr< Triangle > > TriangleSet
Shader generator framework.
osg::ref_ptr< Point > _op2