![]() |
Projet d'Informatique 2012
Simulation générique de systèmes physiques simples : vers les machines de Rube Goldberg
|
00001 00005 #ifndef SYSTEME_H 00006 #define SYSTEME_H 00007 00008 #include <iostream> 00009 #include <vector> 00010 #include <memory> 00011 #include "Integrateur.h" 00012 #include "ObjetMobile.h" 00013 #include "ChampForces.h" 00014 #include "ObjetCompose.h" 00015 #include "Obstacle.h" 00016 00022 class Systeme : public QObject 00023 { 00024 Q_OBJECT 00025 00026 public: 00032 Systeme(double const& dt = 0.01, int const& integrateur = int(TypeIntegrateur::Euler)); 00033 00038 Systeme(Systeme const&) = delete; 00039 00044 Systeme& operator=(Systeme const&) = delete; 00045 00049 void evolue(); 00050 00060 friend std::ostream& operator<<(std::ostream& out, Systeme const& a_afficher); 00061 00065 void dessine() const; 00066 00071 std::vector< std::unique_ptr<ObjetMobile> >& objets_mobiles(); 00072 00077 std::vector< std::unique_ptr<Obstacle> >& obstacles(); 00078 00083 std::vector< std::unique_ptr<ChampForces> >& champs(); 00084 00089 double dt() const; 00090 00091 public slots: 00092 00097 void set_dt(double const& new_dt); 00098 00103 void ajoute(ObjetMobile* objet); 00104 00109 void ajoute(Obstacle* obstacle); 00110 00115 void ajoute(ChampForces* champ); 00116 00121 void ajoute(ObjetCompose* objet); 00122 00127 void set_integrateur(int const& index); 00128 00132 void reset(); 00133 00134 private: 00138 std::vector< std::unique_ptr<ObjetMobile> > m_objets_mobiles; 00139 00143 std::vector< std::unique_ptr<Obstacle> > m_obstacles; 00144 00148 std::vector< std::unique_ptr<ChampForces> > m_champs; 00149 00153 std::unique_ptr<Integrateur> m_integrateur; 00154 00155 signals: 00156 00161 void newObjet(ObjetMobile* objet); 00162 00167 void newObstacle(Obstacle* obstacle); 00168 00173 void newChamp(ChampForces* champ); 00174 00175 }; 00176 00177 #endif /* SYSTEME_H */