summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/BeamRenderer.cc54
-rw-r--r--src/gui/BeamRenderer.h37
-rw-r--r--src/gui/EnergyBeamRenderer.cc23
-rw-r--r--src/gui/EnergyBeamRenderer.h25
-rw-r--r--src/gui/KeyManager.cc2
-rw-r--r--src/gui/Main.cc7
-rw-r--r--src/gui/Renderer.h12
-rw-r--r--src/gui/Stage.cc22
-rw-r--r--src/gui/Stage.h6
-rw-r--r--src/gui/gui.pro4
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