00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
#ifndef OPENCAL_MASSSPRINGSYSTEM_H
00012
#define OPENCAL_MASSSPRINGSYSTEM_H
00013
00014
00015
#include <OpenCAL/global.h>
00016
#include <OpenCAL/PhysicsSystem.h>
00017
#include <OpenCAL/TriangleMesh.h>
00018
00019
namespace OpenCAL
00020 {
00021
00022
class PointMass;
00023
class Spring;
00024
00025
00032 class OPENCAL_API MassSpringSystem:
public PhysicsSystem
00033 {
00034
protected:
00035
00036
TriangleMesh m_surface;
00037
00038
public:
00039
00040 MassSpringSystem(
System *parent);
00041
virtual ~MassSpringSystem();
00042
00043
00044
PointMass *getPoint(
unsigned int i) {
return (
PointMass *) m_objects[i]; }
00045
const PointMass *getPoint(
unsigned int i)
const {
return (
const PointMass *) m_objects[i]; }
00046
Spring *getSpring(
unsigned int i) {
return (
Spring *) m_actors[i]; }
00047
const Spring *getSpring(
unsigned int i)
const {
return (
const Spring *) m_actors[i]; }
00048
const TriangleMesh &getSurface()
const {
return m_surface; }
00049
TriangleMesh *getSurfaceP() {
return &m_surface; }
00050
00051
00052
void setMass(
float mass);
00053
void setMassEach(
float mass);
00054
void setStiffness(
float stiffness);
00055
void setDamping(
float damping);
00056
00057
00058
virtual void step(
float deltaSeconds);
00059
00060
00061
virtual void initialize();
00062
virtual void render();
00063
virtual void renderPicking();
00064
00065
00066
00067
00068
00069
00070
protected:
00071
00072
void integrate(
float deltaSeconds);
00073 };
00074 }
00075
00076
#endif // OPENCAL_MASSSPRINGSYSTEM_H