35 #ifndef AIMS_MESH_GRAPH_H
36 #define AIMS_MESH_GRAPH_H
52 template <
typename TMeshVertexNode >
62 template <
typename TAttribute >
75 typedef typename FaceCollection::iterator
FaceIndex;
90 TAttribute
const &
attribute()
const {
return _attribute; }
97 TAttribute _attribute;
115 template <
typename TVertexNode,
typename TFaceNode,
116 typename TVertexCollection,
typename TFaceCollection,
117 typename TNeighborCollection >
124 TVertexCollection
const & vertices,
125 TFaceCollection
const & faceIndices,
126 std::vector<std::list<std::size_t> >
const & invertedFaceIndices,
127 TNeighborCollection
const & neighbors,
128 std::list<TVertexNode> & graph_vertices,
129 std::list<TFaceNode> & graph_faces
135 std::vector<typename std::list<TVertexNode>::iterator> _index_vertex;
136 std::vector<typename std::list<TFaceNode>::iterator> _index_face;
144 template <
typename TMesh >
155 : _mesh(
mesh ?
mesh :
carto::rc_ptr<TMesh>( new TMesh ) ) {}
162 template <
typename TVertexNode,
typename TFaceNode >
165 const std::list<TVertexNode> & graph_vertices,
166 const std::list<TFaceNode> & graph_faces
170 _mesh->vertex().resize( graph_vertices.size() );
172 for (
typename std::list<TVertexNode>::const_iterator i = graph_vertices.begin(); i != graph_vertices.end(); ++i)
174 _mesh->vertex()[c] = i->pos();
175 _index_vertex.insert(std::make_pair(
static_cast<const void*
>(&*i),c));
181 _mesh->polygon().resize( graph_faces.size() );
182 for (
typename std::list<TFaceNode>::const_iterator i = graph_faces.begin(); i != graph_faces.end(); ++i)
184 for (
int j = 0; j < 3; ++j)
185 _mesh->polygon()[c][j] = _index_vertex[
static_cast<const void*
>(&*(i->face[j]))];
189 _mesh->normal().clear();
199 template <
typename TIndexCollection >
201 std::vector<std::list<std::size_t> >
205 typename TIndexCollection::value_type mx = 0;
206 for (std::size_t i = 0; i < c.size(); ++i)
207 for (std::size_t j = 0; j < c[i].size(); ++j)
211 std::vector<std::list<std::size_t> > res(mx+1);
214 for (std::size_t i = 0; i < c.size(); ++i)
215 for (std::size_t j = 0; j < c[i].size(); ++j)
216 res[c[i][j]].push_back(i);
221 template <
typename TFaceCollection >
223 typename TFaceCollection::value_type::value_type> > >
225 std::size_t nVertices );
233 template <
typename TVerticesIn,
typename TFacesIn,
typename TNeighbors,
234 typename TVertexNode,
typename TFaceNode >
238 const TVerticesIn & verticesIn,
239 const TFacesIn & facesIn,
240 const TNeighbors & neighc,
241 std::list<TVertexNode> & verticesOut,
242 std::list<TFaceNode> & facesOut
245 std::vector<std::list<std::size_t> > faceIndices
249 l2g( verticesIn, facesIn, faceIndices, neighc, verticesOut, facesOut );
253 template <
typename TVerticesIn,
typename TFacesIn,
typename TVertexNode,
258 const TVerticesIn & verticesIn,
259 const TFacesIn & facesIn,
260 std::list<TVertexNode> & verticesOut,
261 std::list<TFaceNode> & facesOut
265 typename TFacesIn::value_type::value_type > > > neighc
carto::rc_ptr< TMesh > & mesh()
VertexIndexMap & index_vertex()
std::map< const void *, std::size_t > VertexIndexMap
Graph2ListMeshConvertor(carto::rc_ptr< TMesh > mesh=carto::rc_ptr< TMesh >(0))
Converts a AimsSurface mesh into a (vertexList, faceList) mesh graph.
Mesh described as a graph, with nodes and edges.
std::list< VertexIndex > VertexIndexCollection
MeshFaceNode< Self > Face
VertexCollection::iterator VertexIndex
TAttribute const & attribute() const
MeshVertexNode< TAttribute > Self
FaceIndexCollection const & faces() const
std::list< Self > VertexCollection
VertexIndexCollection const & neighbors() const
AimsVector< float, 3 > Vertex
Vertex const & pos() const
FaceCollection::iterator FaceIndex
FaceIndexCollection & faces()
std::list< Face > FaceCollection
std::list< FaceIndex > FaceIndexCollection
VertexIndexCollection & neighbors()
float max(float x, float y)
void list2graph_mesh_conversion(const TVerticesIn &verticesIn, const TFacesIn &facesIn, const TNeighbors &neighc, std::list< TVertexNode > &verticesOut, std::list< TFaceNode > &facesOut)
MeshFaceNode< MeshGraphVertex > MeshGraphFace
std::list< MeshGraphFace > MeshGraphFaces
MeshVertexNode< uint > MeshGraphVertex
carto::rc_ptr< std::vector< std::vector< typename TFaceCollection::value_type::value_type > > > circular_neighborhoods(TFaceCollection const &faces, std::size_t nVertices)
std::vector< std::list< std::size_t > > invertIndices(const std::vector< TIndexCollection > &c)
std::list< MeshGraphVertex > MeshGraphVertices
Mesh described as a graph, with nodes and edges.
AimsVector< typename std::list< TMeshVertexNode >::iterator, 3 > face