diff options
author | Jakob Odersky <jodersky@gmail.com> | 2011-05-03 13:50:04 +0000 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2011-05-03 13:50:04 +0000 |
commit | 3d88d4979cc26e34acbeab6c6f2275295fcb0d9b (patch) | |
tree | 47d5cd9c42c43ebfd8a021b46a984d6b18b2a64d /src/gui | |
parent | 2ade21c3d97189d26f9dc18e2e805a0b05a4eaaf (diff) | |
download | vhc-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.cc | 23 | ||||
-rw-r--r-- | src/gui/ParticleRenderer.cc | 21 | ||||
-rw-r--r-- | src/gui/ParticleRenderer.h | 10 | ||||
-rw-r--r-- | src/gui/Stage.cc | 27 | ||||
-rw-r--r-- | src/gui/Stage.h | 11 | ||||
-rw-r--r-- | src/gui/gui.pro | 5 | ||||
-rw-r--r-- | src/gui/util.h | 6 |
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 |