Rev 511 | Rev 515 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/* ----------------------------------------------------------------------- *
* This file is part of GEL, www.imm.dtu.dk/GEL
* Copyright (C) the authors (see AUTHORS.txt) and DTU Informatics
*
* Principal authors:
* Christian Thode Larsen (thode2d@gmail.com)
* J. Andreas Baerentzen (jab@imm.dtu.dk)
*
* See LICENSE.txt for licensing information
* ----------------------------------------------------------------------- */
#ifndef __HMESH_CONNECTIVITY_KERNEL_H__
#define __HMESH_CONNECTIVITY_KERNEL_H__
#include <vector>
#include "ItemVector.h"
#include "Items.h"
namespace HMesh
{
class ConnectivityKernel
{
public:
VertexID add_vertex();
FaceID add_face();
HalfEdgeID add_halfedge();
void remove_vertex(VertexID id);
void remove_face(FaceID id);
void remove_halfedge(HalfEdgeID id);
void resize_vertices(IndexType size);
void resize_faces(IndexType size);
void resize_halfedges(IndexType size);
HalfEdgeID next(HalfEdgeID id) const;
HalfEdgeID prev(HalfEdgeID id) const;
HalfEdgeID opp(HalfEdgeID id) const;
HalfEdgeID out(VertexID id) const;
HalfEdgeID last(FaceID id) const;
VertexID vert(HalfEdgeID id) const;
FaceID face(HalfEdgeID id) const;
void set_next(HalfEdgeID id, HalfEdgeID next);
void set_prev(HalfEdgeID id, HalfEdgeID prev);
void set_opp(HalfEdgeID id, HalfEdgeID opp);
void set_out(VertexID id, HalfEdgeID out);
void set_last(FaceID id, HalfEdgeID last);
void set_vert(HalfEdgeID id, VertexID vert);
void set_face(HalfEdgeID id, FaceID face);
IndexType no_vertices(bool active = true) const;
IndexType no_faces(bool active = true) const;
IndexType no_halfedges(bool active = true) const;
bool in_use(VertexID id) const;
bool in_use(FaceID id) const;
bool in_use(HalfEdgeID id) const;
VertexID vertices_next(VertexID id, bool skip = true) const;
HalfEdgeID halfedges_next(HalfEdgeID id, bool skip = true) const;
FaceID faces_next(FaceID id, bool skip = true) const;
VertexID vertices_prev(VertexID id, bool skip = true) const;
HalfEdgeID halfedges_prev(HalfEdgeID id, bool skip = true) const;
FaceID faces_prev(FaceID id, bool skip = true) const;
VertexID vertices_begin(bool skip = true) const;
HalfEdgeID halfedges_begin(bool skip = true) const;
FaceID faces_begin(bool skip = true) const;
VertexID vertices_end() const;
HalfEdgeID halfedges_end() const;
FaceID faces_end() const;
void cleanup();
void clear();
private:
ItemVector<Vertex> vertices;
ItemVector<Face> faces;
ItemVector<HalfEdge> halfedges;
};
inline VertexID ConnectivityKernel::add_vertex()
{
vertices.add(Vertex());
return VertexID(vertices.size() - 1);
}
inline FaceID ConnectivityKernel::add_face()
{
faces.add(Face());
return FaceID(faces.size() - 1);
}
inline HalfEdgeID ConnectivityKernel::add_halfedge()
{
halfedges.add(HalfEdge());
return HalfEdgeID(halfedges.size() - 1);
}
inline void ConnectivityKernel::remove_vertex(VertexID id)
{ vertices.remove(id.idx()); }
inline void ConnectivityKernel::remove_face(FaceID id)
{ faces.remove(id.idx()); }
inline void ConnectivityKernel::remove_halfedge(HalfEdgeID id)
{ halfedges.remove(id.idx()); }
inline void ConnectivityKernel::resize_vertices(IndexType size)
{ vertices.resize(size); }
inline void ConnectivityKernel::resize_faces(IndexType size)
{ faces.resize(size); }
inline void ConnectivityKernel::resize_halfedges(IndexType size)
{ halfedges.resize(size); }
inline HalfEdgeID ConnectivityKernel::next(HalfEdgeID id) const
{ return HalfEdgeID(halfedges[id.idx()].next); }
inline HalfEdgeID ConnectivityKernel::prev(HalfEdgeID id) const
{ return HalfEdgeID(halfedges[id.idx()].prev); }
inline HalfEdgeID ConnectivityKernel::opp(HalfEdgeID id) const
{ return HalfEdgeID(halfedges[id.idx()].opp); }
inline HalfEdgeID ConnectivityKernel::out(VertexID id) const
{ return HalfEdgeID(vertices[id.idx()].out); }
inline HalfEdgeID ConnectivityKernel::last(FaceID id) const
{ return HalfEdgeID(faces[id.idx()].last); }
inline VertexID ConnectivityKernel::vert(HalfEdgeID id) const
{ return VertexID(halfedges[id.idx()].vert); }
inline FaceID ConnectivityKernel::face(HalfEdgeID id) const
{ return FaceID(halfedges[id.idx()].face); }
inline void ConnectivityKernel::set_next(HalfEdgeID id, HalfEdgeID next)
{ halfedges[id.idx()].next = next; }
inline void ConnectivityKernel::set_prev(HalfEdgeID id, HalfEdgeID prev)
{ halfedges[id.idx()].prev = prev; }
inline void ConnectivityKernel::set_opp(HalfEdgeID id, HalfEdgeID opp)
{halfedges[id.idx()].opp = opp; }
inline void ConnectivityKernel::set_out(VertexID id, HalfEdgeID out)
{ vertices[id.idx()].out = out; }
inline void ConnectivityKernel::set_last(FaceID id, HalfEdgeID last)
{ faces[id.idx()].last = last; }
inline void ConnectivityKernel::set_vert(HalfEdgeID id, VertexID vert)
{ halfedges[id.idx()].vert = vert; }
inline void ConnectivityKernel::set_face(HalfEdgeID id, FaceID face)
{ halfedges[id.idx()].face = face; }
inline IndexType ConnectivityKernel::no_vertices(bool active) const
{ return vertices.size(active); }
inline IndexType ConnectivityKernel::no_faces(bool active) const
{ return faces.size(active); }
inline IndexType ConnectivityKernel::no_halfedges(bool active) const
{ return halfedges.size(active); }
inline bool ConnectivityKernel::in_use(VertexID id) const
{ return vertices.in_use(id.idx()); }
inline bool ConnectivityKernel::in_use(FaceID id) const
{ return faces.in_use(id.idx()); }
inline bool ConnectivityKernel::in_use(HalfEdgeID id) const
{ return halfedges.in_use(id.idx()); }
inline VertexID ConnectivityKernel::vertices_next(VertexID id, bool skip) const
{ return vertices.index_next(id.idx(), skip); }
inline HalfEdgeID ConnectivityKernel::halfedges_next(HalfEdgeID id, bool skip) const
{ return halfedges.index_next(id.idx(), skip); }
inline FaceID ConnectivityKernel::faces_next(FaceID id, bool skip) const
{ return faces.index_next(id.idx(), skip); }
inline VertexID ConnectivityKernel::vertices_prev(VertexID id, bool skip) const
{ return vertices.index_prev(id.idx(), skip); }
inline HalfEdgeID ConnectivityKernel::halfedges_prev(HalfEdgeID id, bool skip) const
{ return halfedges.index_prev(id.idx(), skip); }
inline FaceID ConnectivityKernel::faces_prev(FaceID id, bool skip) const
{ return faces.index_prev(id.idx(), skip); }
inline VertexID ConnectivityKernel::vertices_begin(bool skip) const
{ return vertices.index_begin(skip); }
inline HalfEdgeID ConnectivityKernel::halfedges_begin(bool skip) const
{ return halfedges.index_begin(skip); }
inline FaceID ConnectivityKernel::faces_begin(bool skip) const
{ return faces.index_begin(skip); }
inline VertexID ConnectivityKernel::vertices_end() const
{ return vertices.index_end(); }
inline HalfEdgeID ConnectivityKernel::halfedges_end() const
{ return halfedges.index_end(); }
inline FaceID ConnectivityKernel::faces_end() const
{ return faces.index_end(); }
inline void ConnectivityKernel::clear()
{
vertices.clear();
faces.clear();
halfedges.clear();
}
inline void ConnectivityKernel::cleanup()
{
vertices.cleanup();
faces.cleanup();
halfedges.cleanup();
}
}
#endif
Generated by GNU Enscript 1.6.6.