summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2011-05-03 13:50:04 +0000
committerJakob Odersky <jodersky@gmail.com>2011-05-03 13:50:04 +0000
commit3d88d4979cc26e34acbeab6c6f2275295fcb0d9b (patch)
tree47d5cd9c42c43ebfd8a021b46a984d6b18b2a64d /src/gui
parent2ade21c3d97189d26f9dc18e2e805a0b05a4eaaf (diff)
downloadvhc-3d88d4979cc26e34acbeab6c6f2275295fcb0d9b.tar.gz
vhc-3d88d4979cc26e34acbeab6c6f2275295fcb0d9b.tar.bz2
vhc-3d88d4979cc26e34acbeab6c6f2275295fcb0d9b.zip
Repare bug dans la fermeture de l'accelerateur. Ajout d'un test de performance de l'accelerateur.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/Main.cc23
-rw-r--r--src/gui/ParticleRenderer.cc21
-rw-r--r--src/gui/ParticleRenderer.h10
-rw-r--r--src/gui/Stage.cc27
-rw-r--r--src/gui/Stage.h11
-rw-r--r--src/gui/gui.pro5
-rw-r--r--src/gui/util.h6
7 files changed, 81 insertions, 22 deletions
diff --git a/src/gui/Main.cc b/src/gui/Main.cc
index 79242ca..3925f61 100644
--- a/src/gui/Main.cc
+++ b/src/gui/Main.cc
@@ -23,7 +23,7 @@
using namespace std;
using namespace vhc;
-std::vector< Particle > createParticles(const Vector3D& position, int n, double mass = constants::ELECTRON_MASS, double charge = constants::E, double energy = 1E9 * constants::E, Vector3D direction = Vector3D::i) {
+std::vector< Particle > createParticles(const Vector3D& position, int n, double mass = constants::PROTON_MASS, double charge = constants::E, double energy = 2E9 * constants::E, Vector3D direction = -Vector3D::j) {
std::vector< Particle > v;
double r = 0.1;
@@ -105,11 +105,28 @@ Une particule :
acc->add(e7);
acc->add(e8);
+ acc->close();
+
+ //proton
Particle p1 = Particle(Vector3D(3.00, 0, 0), constants::PROTON_MASS, constants::E, 2 * constants::GeV, -Vector3D::j);
Particle p2 = Particle(Vector3D(2.99, 0, 0), constants::PROTON_MASS, constants::E, 2 * constants::GeV, -Vector3D::j);
acc->add(p1);
acc->add(p2);
- acc->close();
+
+ //anti-proton
+ Particle ap1 = Particle(Vector3D(3.00, 0, 0), constants::PROTON_MASS, -constants::E, 2 * constants::GeV, Vector3D::j);
+ Particle ap2 = Particle(Vector3D(2.99, 0, 0), constants::PROTON_MASS, -constants::E, 2 * constants::GeV, Vector3D::j);
+ acc->add(ap1);
+ acc->add(ap2);
+
+
+
+ /*std::vector< Particle > ps = createParticles(e1.getEntryPosition(), 1000);
+
+ for (int i = 0; i < ps.size(); ++i) {
+ acc->add(ps[i]);
+ }*/
+
return acc;
}
@@ -201,8 +218,6 @@ int main(int argc, char *argv[])
vhc::Stage window;
Accelerator* acc = standard();
- cout << (*acc) << endl;
- cout.flush();
window.accelerator = acc;
window.setWindowTitle("Virtual Hadron Collider");
diff --git a/src/gui/ParticleRenderer.cc b/src/gui/ParticleRenderer.cc
index 3c8fe86..05f1b63 100644
--- a/src/gui/ParticleRenderer.cc
+++ b/src/gui/ParticleRenderer.cc
@@ -9,9 +9,11 @@
#include "ParticleRenderer.h"
#include "util.h"
+using namespace vhc::util;
+
namespace vhc {
-ParticleRenderer::ParticleRenderer() {
+ParticleRenderer::ParticleRenderer(): _drawSpheres(false) {
}
@@ -22,11 +24,20 @@ ParticleRenderer::~ParticleRenderer() {
void ParticleRenderer::render(const Particle& particle) const {
glPushMatrix();
glTranslated(particle.getPosition().getX(), particle.getPosition().getY(), particle.getPosition().getZ());
- glBegin(GL_POINTS);
- //glVertex3d(0, 0, 0);
- util::sphere(0.01);
- glEnd();
+
+ if (_drawSpheres) {
+ glBegin(GL_POINTS);
+ glVertex3d(0, 0, 0);
+ glEnd();
+ }
+ else {
+ util::sphere(0.01);
+ }
glPopMatrix();
}
+void ParticleRenderer::drawSpheres(bool value) {
+ _drawSpheres = value;
+}
+
}
diff --git a/src/gui/ParticleRenderer.h b/src/gui/ParticleRenderer.h
index c1c71b0..ffa6707 100644
--- a/src/gui/ParticleRenderer.h
+++ b/src/gui/ParticleRenderer.h
@@ -10,14 +10,24 @@
#include "Renderer.h"
#include "Particle.h"
+#include "util.h"
namespace vhc {
class ParticleRenderer: public Renderer<Particle> {
+
+private:
+ bool _drawSpheres;
+
public:
+
ParticleRenderer();
virtual ~ParticleRenderer();
void render(const Particle& particle) const;
+
+ void drawSpheres(bool value);
+
+
};
}
diff --git a/src/gui/Stage.cc b/src/gui/Stage.cc
index 13c3411..b3f054a 100644
--- a/src/gui/Stage.cc
+++ b/src/gui/Stage.cc
@@ -25,7 +25,7 @@ Stage::Stage(QWidget* parent):
displayMode(FILL),
keys(0),
frameTime(0),
- h(1E-12),
+ h(1E-11),
paused(true) {
timer = new QTimer(this);
@@ -58,16 +58,31 @@ void Stage::resizeGL (int width, int height) {
glMatrixMode (GL_MODELVIEW);
}
+void Stage::displayText(QString text[], int size) {
+ for (int i = 0; i < size; ++i) {
+ renderText(0, (i + 1) * 12, text[i]);
+ }
+}
+
void Stage::paintGL() {
//time.start();
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
camera.setView();
- renderText(0,12,QString("fps: ") + QString::number(1E3 / frameTime));
- renderText(0,24,QString("camera coordinates: ") + camera.getPosition().toString().c_str());
- renderText(0,36,QString("heading: ") + QString::number(camera.getHeading()));
- renderText(0,48,QString("pitch: ") + QString::number(camera.getPitch()));
+ QString text[] = {
+ QString("-----simulation-----"),
+ QString("fps: ") + QString::number(1E3 / frameTime),
+ QString("status: ") + (paused ? QString("paused") : QString("running")),
+ QString("-----camera-----"),
+ QString("coordinates: ") + camera.getPosition().toString().c_str(),
+ 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())
+ };
+ displayText(text, 10);
//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();
@@ -128,7 +143,7 @@ void Stage::paintGL() {
camera.move(mv);
}
- if (!paused) for (int i = 0; i < 100; ++i) accelerator->step(h);
+ if (!paused) accelerator->step(h);
glColor3d(1,1,0);
util::crosshair();
diff --git a/src/gui/Stage.h b/src/gui/Stage.h
index 445ce63..7eba62a 100644
--- a/src/gui/Stage.h
+++ b/src/gui/Stage.h
@@ -16,16 +16,11 @@
#include "ParticleRenderer.h"
#include "Element.h"
#include "Accelerator.h"
+#include "util.h"
namespace vhc {
-enum DisplayMode {
- FILL = 0,
- WIREFRAME = 1,
- POINTS = 2
-};
-
class Stage: public QGLWidget {
Q_OBJECT
@@ -40,6 +35,8 @@ public:
protected:
+ void displayText(QString text[], int size);
+
void initializeGL();
void resizeGL (int width, int height);
void paintGL();
@@ -64,7 +61,7 @@ private:
ElementRenderer elementRenderer;
ParticleRenderer particleRenderer;
- DisplayMode displayMode;
+ util::DisplayMode displayMode;
int keys;
QPoint center;
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index 3b68f40..0a73f23 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -9,6 +9,11 @@ INCLUDEPATH += $(SRCDIR)/main/
LIBS += -L$(BINDIR)/main -lvhc
QT += opengl
+#CONFIG += DEBUG
+#QMAKE_CXXFLAGS_DEBUG += -pg
+#QMAKE_LFLAGS_DEBUG += -pg
+
+
# Input
HEADERS += Camera.h ElementRenderer.h util.h Stage.h ParticleRenderer.h Renderer.h
SOURCES += Camera.cc ElementRenderer.cc util.cc Stage.cc ParticleRenderer.cc Main.cc
diff --git a/src/gui/util.h b/src/gui/util.h
index 866ef96..9cfded6 100644
--- a/src/gui/util.h
+++ b/src/gui/util.h
@@ -13,6 +13,12 @@ namespace vhc {
/** Contient des fonctions utilitaires. */
namespace util {
+enum DisplayMode {
+ FILL = 0,
+ WIREFRAME = 1,
+ POINTS = 2
+};
+
/** Dessine un tore autour de l'origine, sur le plan xy.
* @param R rayon du tore
* @param r rayon du "cylindre" du tore