Program Listing for File IndexedTetMesh.h

Return to documentation for file (Utils/IndexedTetMesh.h)

#ifndef __INDEXEDTETMESH_H__
#define __INDEXEDTETMESH_H__

#include <vector>
#include <array>
#include "Common/Common.h"

namespace Utilities
{
    class IndexedTetMesh
    {
    public:
        struct Edge
        {
            std::array<unsigned int, 2> m_vert;
        };

        struct Face
        {
            // edge indices
            std::array<unsigned int, 3> m_edges;
            // tet indices
            std::array<unsigned int, 2> m_tets;
        };

        struct Tet
        {
            std::array<unsigned int, 6> m_edges;
            std::array<unsigned int, 4> m_faces;
        };

    public:
        typedef std::vector<unsigned int> Tets;
        typedef std::vector<unsigned int> Faces;
        typedef std::vector<Tet> TetData;
        typedef std::vector<Face> FaceData;
        typedef std::vector<Edge> Edges;
        typedef std::vector<std::vector<unsigned int>> VerticesTets;
        typedef std::vector<std::vector<unsigned int>> VerticesFaces;
        typedef std::vector<std::vector<unsigned int>> VerticesEdges;

    protected:
        unsigned int m_numPoints;
        Tets m_tetIndices;
        Faces m_faceIndices;
        Edges m_edges;
        FaceData m_faces;
        TetData m_tets;
        VerticesTets m_verticesTets;
        VerticesFaces m_verticesFaces;
        VerticesEdges m_verticesEdges;

    public:
        IndexedTetMesh();
        ~IndexedTetMesh();

        void release();
        void initMesh(const unsigned int nPoints, const unsigned int nEdges, const unsigned int nFaces, const unsigned int nTets);
        void addTet(const unsigned int * const indices);
        void addTet(const int * const indices);

        const Faces& getFaces() const {return m_faceIndices;}
        Faces& getFaces(){return m_faceIndices;}
        const Tets& getTets() const {return m_tetIndices;}
        Tets& getTets(){return m_tetIndices;}
        Edges& getEdges() {return m_edges;}
        const Edges& getEdges() const {return m_edges;}
        const FaceData& getFaceData() const {return m_faces;}
        const TetData& getTetData() const {return m_tets;}
        const VerticesTets& getVertexTets() const {return m_verticesTets;}
        const VerticesFaces& getVertexFaces() const {return m_verticesFaces;}
        const VerticesEdges& getVertexEdges() const {return m_verticesEdges;}


        unsigned int numVertices() const { return m_numPoints; }
        unsigned int numFaces() const { return (unsigned int)m_faceIndices.size() / 3; }
        unsigned int numTets() const { return (unsigned int)m_tetIndices.size() / 4; }
        unsigned int numEdges() const { return (unsigned int)m_edges.size(); }

        void buildNeighbors();
    };
}

#endif