diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/BeamRenderer.cc | 54 | ||||
-rw-r--r-- | src/gui/BeamRenderer.h | 37 | ||||
-rw-r--r-- | src/gui/EnergyBeamRenderer.cc | 23 | ||||
-rw-r--r-- | src/gui/EnergyBeamRenderer.h | 25 | ||||
-rw-r--r-- | src/gui/KeyManager.cc | 2 | ||||
-rw-r--r-- | src/gui/Main.cc | 7 | ||||
-rw-r--r-- | src/gui/Renderer.h | 12 | ||||
-rw-r--r-- | src/gui/Stage.cc | 22 | ||||
-rw-r--r-- | src/gui/Stage.h | 6 | ||||
-rw-r--r-- | src/gui/gui.pro | 4 |
10 files changed, 163 insertions, 29 deletions
diff --git a/src/gui/BeamRenderer.cc b/src/gui/BeamRenderer.cc new file mode 100644 index 0000000..c3aab57 --- /dev/null +++ b/src/gui/BeamRenderer.cc @@ -0,0 +1,54 @@ +/* + * BeamRenderer.cc + * + * Created on: May 27, 2011 + * Author: jakob + */ + +#include <QtOpenGL> +#include "BeamRenderer.h" +#include "util.h" + +namespace vhc { + +BeamRenderer::BeamRenderer() { + // TODO Auto-generated constructor stub + +} + +BeamRenderer::~BeamRenderer() { + // TODO Auto-generated destructor stub +} + +void BeamRenderer::render(const Beam& beam) const { + const Beam::ParticleCollection& particles = beam.getParticles(); + + if (_spheres) { + for (Beam::ParticleCollection::const_iterator i = particles.begin(); i != particles.end(); ++i) { + double pos[] = {(**i).getPosition().getX(), (**i).getPosition().getY(), (**i).getPosition().getZ()}; + glPushMatrix(); + glTranslated(pos[0], pos[1], pos[2]); + util::sphere(0.01); + glPopMatrix(); + } + } else { + glBegin(GL_POINTS); + for (Beam::ParticleCollection::const_iterator i = particles.begin(); i != particles.end(); ++i) { + double pos[] = {(**i).getPosition().getX(), (**i).getPosition().getY(), (**i).getPosition().getZ()}; + glVertex3dv(pos); + } + glEnd(); + + } + +} + +void BeamRenderer::setSpheresEnabled(bool value) { + _spheres = value; +} + +bool BeamRenderer::getSpheresEnabled() const { + return _spheres; +} + +} diff --git a/src/gui/BeamRenderer.h b/src/gui/BeamRenderer.h new file mode 100644 index 0000000..f1ca98d --- /dev/null +++ b/src/gui/BeamRenderer.h @@ -0,0 +1,37 @@ +/* + * BeamRenderer.h + * + * Created on: May 27, 2011 + * Author: jakob + */ + +#ifndef BEAMRENDERER_H_ +#define BEAMRENDERER_H_ + +#include "Renderer.h" +#include "Beam.h" + +namespace vhc { + +/** Dessinateur standard de faisceaux. */ +class BeamRenderer: public Renderer<Beam> { +private: + bool _spheres; + +public: + BeamRenderer(); + virtual ~BeamRenderer(); + + /** Dessine un faisceau. */ + virtual void render(const Beam& beam) const; + + /** Change le mode de dessin des particules en spheres ou points. */ + void setSpheresEnabled(bool value); + + /** Retourne vrai si on dessine des spheres. */ + bool getSpheresEnabled() const; +}; + +} + +#endif /* BEAMRENDERER_H_ */ diff --git a/src/gui/EnergyBeamRenderer.cc b/src/gui/EnergyBeamRenderer.cc new file mode 100644 index 0000000..697af31 --- /dev/null +++ b/src/gui/EnergyBeamRenderer.cc @@ -0,0 +1,23 @@ +/* + * EnergyBeamRenderer.cc + * + * Created on: May 29, 2011 + * Author: jakob + */ + +#include "EnergyBeamRenderer.h" + +namespace vhc { + +EnergyBeamRenderer::EnergyBeamRenderer() { + +} + +EnergyBeamRenderer::~EnergyBeamRenderer() { +} + +void EnergyBeamRenderer::render(const Beam& beam) const { + +} + +} diff --git a/src/gui/EnergyBeamRenderer.h b/src/gui/EnergyBeamRenderer.h new file mode 100644 index 0000000..7c04e9a --- /dev/null +++ b/src/gui/EnergyBeamRenderer.h @@ -0,0 +1,25 @@ +/* + * EnergyBeamRenderer.h + * + * Created on: May 29, 2011 + * Author: jakob + */ + +#ifndef ENERGYBEAMRENDERER_H_ +#define ENERGYBEAMRENDERER_H_ + +#include "BeamRenderer.h" + +namespace vhc { + +class EnergyBeamRenderer: BeamRenderer { +public: + EnergyBeamRenderer(); + virtual ~EnergyBeamRenderer(); + + virtual void render(const Beam& beam) const; +}; + +} + +#endif /* ENERGYBEAMRENDERER_H_ */ diff --git a/src/gui/KeyManager.cc b/src/gui/KeyManager.cc index c7ccca0..1637bc2 100644 --- a/src/gui/KeyManager.cc +++ b/src/gui/KeyManager.cc @@ -43,7 +43,7 @@ void KeyManager::press(int key) { stage.setRunning(!stage.isRunning()); break; case Qt::Key_QuoteLeft: - stage.getParticleRenderer().enableDrawSpheres(!stage.getParticleRenderer().isDrawSpheresEnabled()); + stage.getBeamRenderer().setSpheresEnabled(! stage.getBeamRenderer().getSpheresEnabled()); break; default: break; diff --git a/src/gui/Main.cc b/src/gui/Main.cc index b3964d1..e89c378 100644 --- a/src/gui/Main.cc +++ b/src/gui/Main.cc @@ -24,6 +24,7 @@ #include "CircularBeam.h" #include "Bunch.h" #include "events.h" +#include "SAPInteractor.h" using namespace std; using namespace vhc; @@ -130,7 +131,7 @@ Une particule : Dipole e6 = Dipole(Vector3D(-3, 2, 0), Vector3D(-2, 3, 0), 0.1, 1, Vector3D(0, 0, B)); Element** e7 = FODO(e6.getExitPosition(), Vector3D(2, 3, 0), 0.1, 1.0, b); Dipole e8 = Dipole(Vector3D(2, 3, 0), Vector3D(3, 2, 0), 0.1, 1, Vector3D(0, 0, B)); - Accelerator* acc = new Accelerator(); + Accelerator* acc = new Accelerator(new SAPInteractor); //acc->add(e1); for (int i = 0; i < 4; ++i) acc->add(e1[i][0]); acc->add(e2); @@ -168,8 +169,8 @@ Une particule : Foo* foo = new Foo; Bunch& bch = (Bunch&) acc->add(Bunch(ap1, 5, 1, stdDev, length, emittance, A_12, A_22)); - bch.Publisher<ParticleAddedEvent>::subscribe(foo); - bch.Publisher<ParticleRemovedEvent>::subscribe(foo); + //bch.Publisher<ParticleAddedEvent>::subscribe(foo); + //bch.Publisher<ParticleRemovedEvent>::subscribe(foo); acc->close(); diff --git a/src/gui/Renderer.h b/src/gui/Renderer.h index 6be4373..f2141ec 100644 --- a/src/gui/Renderer.h +++ b/src/gui/Renderer.h @@ -11,24 +11,16 @@ namespace vhc { template <typename T> +/** Classe de base pour tout dessinateur. Un dessinateur peut dessiner un objet de son type. */ class Renderer { public: + Renderer() {}; virtual ~Renderer() {}; - /** Methode qui doit etre appelee avant de dessiner une collection d'objets par <code>render</code>. - * Cette methode gere des <code>glBegin()</code> en arriere-plan. */ - //virtual void begin() = 0; - /** Dessine un objet. */ virtual void render(const T& item) const = 0; - //template <typename Container> - //virtual void render(std::forward_iterator) const; - - /** Methode qui doit etre appelee avant de dessiner une collection d'objets par <code>render</code>. - * Cette methode gere des <code>glBegin()</code> en arriere-plan. */ - //virtual void end() = 0; }; } diff --git a/src/gui/Stage.cc b/src/gui/Stage.cc index 4c0328d..41c36a0 100644 --- a/src/gui/Stage.cc +++ b/src/gui/Stage.cc @@ -22,7 +22,7 @@ Stage::Stage(QWidget* parent): keyManager(*this), accelerator(NULL), elementRenderer(), - particleRenderer(), + beamRenderer(), displayMode(FILL), frameTime(0), h(1E-12), @@ -79,11 +79,11 @@ void Stage::paintGL() { QString("heading: ") + QString::number(camera.getHeading()), QString("pitch: ") + QString::number(camera.getPitch()), QString("-----accelerator-----"), - QString("Elements: ") + QString::number(accelerator->getElements().size()), - QString("Particles: ") + QString::number(accelerator->getParticles().size()), - QString("") + accelerator->getParticles().front()->toString().c_str() + QString("Elements: ") + QString::number(accelerator->getElements().size()) + //QString("Particles: ") + QString::number(accelerator->getParticles().size()), + //QString("") + accelerator->getParticles().front()->toString().c_str() }; - displayText(text, 11); + displayText(text, 9); //renderText(0,60,QString("") + accelerator->getParticle(0)->getElement()->magneticFieldAt(accelerator->getParticle(0)->getPosition()).toString().c_str()); //renderText(0,72,QString("") + accelerator->getParticle(0)->toString().c_str()); axes(); @@ -127,9 +127,10 @@ void Stage::paintGL() { glColor3d(0, 0, 1); - Accelerator::ParticleCollection particles = accelerator->getParticles(); - for (Accelerator::ParticleCollection::const_iterator i = particles.begin(); i != particles.end(); ++i) { - particleRenderer.render(**i); + const Accelerator::BeamCollection& beams = accelerator->getBeams(); + + for (Accelerator::BeamCollection::const_iterator i = beams.begin(); i != beams.end(); ++i) { + beamRenderer.render(**i); } } @@ -194,8 +195,9 @@ ElementRenderer& Stage::getElementRenderer(){ return elementRenderer; } -ParticleRenderer& Stage::getParticleRenderer() {; - return particleRenderer; + +BeamRenderer& Stage::getBeamRenderer() {; + return beamRenderer; } } diff --git a/src/gui/Stage.h b/src/gui/Stage.h index b3afdb9..cb46b7d 100644 --- a/src/gui/Stage.h +++ b/src/gui/Stage.h @@ -14,7 +14,7 @@ #include "Camera.h" #include "KeyManager.h" #include "ElementRenderer.h" -#include "ParticleRenderer.h" +#include "BeamRenderer.h" #include "Element.h" #include "Accelerator.h" #include "util.h" @@ -40,7 +40,7 @@ public: void setRunning(bool value); ElementRenderer& getElementRenderer(); - ParticleRenderer& getParticleRenderer(); + BeamRenderer& getBeamRenderer(); //TODO !!! temporary @@ -67,7 +67,7 @@ private: //graphics Camera camera; ElementRenderer elementRenderer; - ParticleRenderer particleRenderer; + BeamRenderer beamRenderer; QPoint center; util::DisplayMode displayMode; diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 03b954b..a0c883d 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -15,5 +15,5 @@ QT += opengl # Input -HEADERS += Camera.h ElementRenderer.h util.h KeyManager.h Stage.h ParticleRenderer.h Renderer.h -SOURCES += Camera.cc ElementRenderer.cc util.cc KeyManager.cc Stage.cc ParticleRenderer.cc Main.cc +HEADERS += Camera.h ElementRenderer.h util.h KeyManager.h Stage.h BeamRenderer.h Renderer.h +SOURCES += Camera.cc ElementRenderer.cc util.cc KeyManager.cc Stage.cc BeamRenderer.cc Main.cc |