Program Listing for File TriangleMesh.h

Return to documentation for file (SPlisHSPlasH/TriangleMesh.h)

#ifndef __TriangleMesh_h__
#define __TriangleMesh_h__

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

namespace SPH
{
    class TriangleMesh
    {
    public:
        typedef std::vector<unsigned int> Faces;
        typedef std::vector<Vector3r> Normals;
        typedef std::vector<Vector3r> Vertices;

    protected:
        Vertices m_x0;
        Vertices m_x;
        Faces m_indices;
        Normals m_normals;
        Normals m_vertexNormals;

    public:
        TriangleMesh();
        ~TriangleMesh();

        void release();
        void initMesh(const unsigned int nPoints, const unsigned int nFaces);
        void addFace(const unsigned int * const indices);
        void addFace(const int * const indices);
        void addVertex(const Vector3r &vertex);

        const Faces& getFaces() const { return m_indices; }
        Faces& getFaces(){ return m_indices; }
        const Normals& getFaceNormals() const { return m_normals; }
        Normals& getFaceNormals(){ return m_normals; }
        const Normals& getVertexNormals() const { return m_vertexNormals; }
        Normals& getVertexNormals(){ return m_vertexNormals; }
        const Vertices& getVertices() const { return m_x; }
        Vertices& getVertices() { return m_x; }
        const Vertices& getVertices0() const { return m_x0; }
        Vertices& getVertices0() { return m_x0; }

        unsigned int numVertices() const { return static_cast<unsigned int>(m_x.size()); }
        unsigned int numFaces() const { return (unsigned int)m_indices.size() / 3; }

        void updateMeshTransformation(const Vector3r& x, const Matrix3r& R);
        void updateNormals();
        void updateVertexNormals();
    };

}

#endif