Program Listing for File StaticRigidBody.h

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

#ifndef __StaticRigidBody_h__
#define __StaticRigidBody_h__

#include "Common.h"
#include "RigidBodyObject.h"
#include "TriangleMesh.h"

namespace SPH
{
    class StaticRigidBody : public RigidBodyObject
    {
    protected:
        Vector3r m_x;
        Vector3r m_x_world;
        Vector3r m_zero;
        Matrix3r m_R;
        Matrix3r m_R_world;
        TriangleMesh m_geometry;

    public:
        StaticRigidBody() { m_zero = Vector3r::Zero(); }

        virtual bool isDynamic() const { return false; }

        virtual Real const getMass() const { return 0.0; }
        virtual Vector3r const& getPosition() const  { return m_x; }
        virtual void setPosition(const Vector3r &x) { m_x = x; }
        virtual Vector3r getWorldSpacePosition() const { return m_x_world; }
        virtual Vector3r const& getVelocity() const { return m_zero; }
        virtual void setVelocity(const Vector3r &v) {}
        virtual Matrix3r const& getRotation() const { return m_R; }
        virtual void setRotation(const Matrix3r &r) { m_R = r; }
        virtual Matrix3r getWorldSpaceRotation() const { return m_R_world; }
        virtual Vector3r const& getAngularVelocity() const { return m_zero; }
        virtual void setAngularVelocity(const Vector3r &v) {}
        virtual void addForce(const Vector3r &f) {}
        virtual void addTorque(const Vector3r &t) {}

        virtual const std::vector<Vector3r> &getVertices() const { return m_geometry.getVertices(); };
        virtual const std::vector<Vector3r> &getVertexNormals() const { return m_geometry.getVertexNormals(); };
        virtual const std::vector<unsigned int> &getFaces() const { return m_geometry.getFaces(); };

        void setWorldSpacePosition(const Vector3r &x) { m_x_world = x; }
        void setWorldSpaceRotation(const Matrix3r &r) { m_R_world = r; }
        TriangleMesh& getGeometry() { return m_geometry; }
    };
}

#endif