tahoma2d/toonz/sources/include/tcg/vertex.h

80 lines
2.2 KiB
C
Raw Normal View History

2016-05-17 03:04:11 +12:00
#pragma once
2016-03-19 06:57:51 +13:00
#ifndef TCG_VERTEX_H
#define TCG_VERTEX_H
// tcg includes
#include "list.h"
#include "point.h"
2016-06-15 18:43:10 +12:00
namespace tcg {
2016-03-19 06:57:51 +13:00
template <typename V>
struct vertex_traits {
2016-06-15 18:43:10 +12:00
typedef typename V::point_type point_type;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
typedef typename V::edges_const_iterator edges_const_iterator;
typedef typename V::edges_iterator edges_iterator;
2016-03-19 06:57:51 +13:00
};
//----------------------------------------------------------------------
template <typename Point>
2016-06-15 18:43:10 +12:00
class Vertex {
2016-03-19 06:57:51 +13:00
protected:
2016-06-15 18:43:10 +12:00
Point m_p;
int m_index;
tcg::list<int> m_edgeList;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
typedef Point point_type;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
typedef tcg::list<int>::const_iterator edges_const_iterator;
typedef tcg::list<int>::iterator edges_iterator;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
Vertex() : m_index(-1) {}
Vertex(const point_type &p) : m_p(p), m_index(-1) {}
~Vertex() {}
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void setIndex(int idx) { m_index = idx; }
int getIndex() const { return m_index; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
const tcg::list<int> &edges() const { return m_edgeList; }
tcg::list<int> &edges() { return m_edgeList; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
int edgesCount() const { return int(m_edgeList.size()); }
int edge(int e) const { return int(m_edgeList[e]); }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void addEdge(int e) { m_edgeList.push_back(e); }
edges_iterator eraseEdge(edges_iterator it) { return m_edgeList.erase(it); }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
edges_const_iterator edgesBegin() const { return m_edgeList.begin(); }
edges_const_iterator edgesEnd() const { return m_edgeList.end(); }
edges_iterator edgesBegin() { return m_edgeList.begin(); }
edges_iterator edgesEnd() { return m_edgeList.end(); }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void setP(const point_type &p) { m_p = p; }
const point_type &P() const { return m_p; }
point_type &P() { return m_p; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
bool operator==(const Vertex &v) const { return (m_p == v.m_p); }
bool operator!=(const Vertex &v) const { return (m_p != v.m_p); }
2016-03-19 06:57:51 +13:00
};
//----------------------------------------------------------------------
template <typename P>
struct point_traits<Vertex<P>> {
2016-06-15 18:43:10 +12:00
typedef Vertex<P> point_type;
typedef typename point_traits<P>::value_type value_type;
typedef typename point_traits<P>::float_type float_type;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
static inline value_type x(const point_type &p) { return p.P().x; }
static inline value_type y(const point_type &p) { return p.P().y; }
2016-03-19 06:57:51 +13:00
};
2016-06-15 18:43:10 +12:00
} // namespace tcg
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
#endif // TCG_VERTEX_H