From ff9355914421d9749e99ced2112a643890968e27 Mon Sep 17 00:00:00 2001 From: catdog2 Date: Sun, 7 Dec 2008 22:11:41 +0000 Subject: [PATCH] ein paar kleinere verbesserungen git-svn-id: http://svn.lsim.tuxzone.org/trunk@28 4bec179b-ab65-46ed-a5f8-55b8b5c735d0 --- lsim.kdevelop | 2 +- lsim.kdevelop.pcs | Bin 155733 -> 161394 bytes lsim.kdevses | 26 +++++++++++++++------ src/graphicsellipseitem.cpp | 10 ++++++-- src/graphicsellipseitem.h | 3 ++- src/lsim.cpp | 44 ++++++++++++++++++++++++++---------- src/lsim.h | 4 ++++ src/simulscene.cpp | 21 ++++++++++++++++- src/simulscene.h | 9 +++++++- 9 files changed, 94 insertions(+), 25 deletions(-) diff --git a/lsim.kdevelop b/lsim.kdevelop index ee263e1..c8982a4 100644 --- a/lsim.kdevelop +++ b/lsim.kdevelop @@ -161,7 +161,7 @@ /mnt/sdb1/c++/lsim - + diff --git a/lsim.kdevelop.pcs b/lsim.kdevelop.pcs index 288faa4d7f4eee0fe65911f9bc4062836cbf50ff..b46d0d2111a8179554b3ebbdc00dab1b953e5b87 100644 GIT binary patch delta 8794 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 HU~%w27Fv{W diff --git a/lsim.kdevses b/lsim.kdevses index b768951..df05c45 100644 --- a/lsim.kdevses +++ b/lsim.kdevses @@ -1,24 +1,24 @@ - + - + - + - + - + - + - + @@ -35,6 +35,18 @@ + + + + + + + + + + + + diff --git a/src/graphicsellipseitem.cpp b/src/graphicsellipseitem.cpp index 829d610..5970f2e 100644 --- a/src/graphicsellipseitem.cpp +++ b/src/graphicsellipseitem.cpp @@ -102,7 +102,7 @@ void GraphicsEllipseItem::calculateProbePath(QPointF startPoint) { currProbePath->append(startPoint); speedListX->append(startSpeedX); speedListY->append(startSpeedY); - realSimulTime =0; + realSimulTime = 0; //startpunkt in den Pfad setzen flightPath = QPainterPath(startPoint); @@ -145,7 +145,7 @@ void GraphicsEllipseItem::calculateProbePath(QPointF startPoint) { currProbePath->append(newPoint); speedListX->append(newspeedX); speedListY->append(newspeedY); - + realSimulTime += timePerStep; if (i%path_entry_step == 0 || i==steps) flightPath.lineTo(newPoint); @@ -252,3 +252,9 @@ void GraphicsEllipseItem::setFlightPath ( const QPainterPath& theValue ) { if (flightPath==theValue) return; flightPath = theValue; } + + +double GraphicsEllipseItem::getRealSimulTime() const { + return realSimulTime; +} + diff --git a/src/graphicsellipseitem.h b/src/graphicsellipseitem.h index 10e048f..3692482 100644 --- a/src/graphicsellipseitem.h +++ b/src/graphicsellipseitem.h @@ -50,6 +50,7 @@ class GraphicsEllipseItem : public QObject , public QGraphicsEllipseItem { double getMasse(double speed = 0); QPainterPath getFlightPath() const; + double getRealSimulTime() const; protected: @@ -63,7 +64,7 @@ class GraphicsEllipseItem : public QObject , public QGraphicsEllipseItem { ///Liste Der Geschwindigkeitsanteile in y-richtung QList *speedListY; ///Gesamtzeilt der der Simulation - double *realSimulTime; + double realSimulTime; ///Masse der Probeladung in kg double masse; ///Ladung der Probleadung in As diff --git a/src/lsim.cpp b/src/lsim.cpp index 622e38f..829b099 100644 --- a/src/lsim.cpp +++ b/src/lsim.cpp @@ -49,6 +49,7 @@ lsim::lsim() { createStatusBar(); createDocks(); setMode(EditMode); + connect(simulscene, SIGNAL(timeLineDurationChanged(int)),this, SLOT(timeLineDurationChangeWrapperToSec(int))); } void lsim::closeEvent (QCloseEvent *event) { @@ -233,17 +234,17 @@ void lsim::createMenus() { void lsim::createToolBars() { windowModeBar = new QToolBar(tr("Modus")); - windowModeBar->setIconSize(QSize(22,22)); + windowModeBar->setIconSize(QSize(24,24)); windowModeBar->addAction(acts.editModeAct); windowModeBar->addAction(acts.simulationModeAct); timerControlBar = new QToolBar (tr ("Timer")); - timerControlBar->setIconSize(QSize(22,22)); + timerControlBar->setIconSize(QSize(24,24)); timerControlBar->addAction(acts.timerPause); timerControlBar->addAction(acts.timerStop); sceneModeBar = new QToolBar (tr ("Edit")); - sceneModeBar->setIconSize(QSize(22,22)); + sceneModeBar->setIconSize(QSize(24,24)); sceneModeBar->addAction(acts.itemEditModeAct); sceneModeBar->addAction(acts.insertEFieldItemAct); sceneModeBar->addAction(acts.insertBFieldItemAct); @@ -251,14 +252,13 @@ void lsim::createToolBars() { sceneModeBar->addAction(acts.probeChargeItemPlaceAct); upDownBar = new QToolBar(tr("Feldanordnungsreihenfolge")); - upDownBar->setIconSize(QSize(20,20)); + upDownBar->setIconSize(QSize(21,21)); upDownBar->addAction(acts.moveItemOnBottom); upDownBar->addAction(acts.moveItemDown); upDownBar->addAction(acts.moveItemUp); upDownBar->addAction(acts.moveItemOnTop); addToolBar(windowModeBar); - } void lsim::initWindowMode(WindowMode newMode) { @@ -395,19 +395,27 @@ void lsim::createDocks() { connect(simulscene, SIGNAL(flightPathVisibilityChanged(bool)),flight_path_box, SLOT(setChecked(bool))); //timer laenge Box - QSpinBox *timer_box = new QSpinBox; + QDoubleSpinBox *timer_box = new QDoubleSpinBox; timer_box->setRange(1.0, 1e+10); - timer_box->setKeyboardTracking(false); - timer_box->setValue(simulscene->getTimeLineDuration()); - timer_box->setSuffix(" ms"); - connect(timer_box, SIGNAL(valueChanged(int)),simulscene, SLOT(setTimeLineDuration(int))); + timer_box->setDecimals(3); + //timer_box->setKeyboardTracking(false); + timer_box->setValue(simulscene->getTimeLineDuration()/1000.0); + timer_box->setSuffix(" s"); + connect(timer_box, SIGNAL(valueChanged(double)),this, SLOT(timeLineDurationSetWrapperToMsec(double))); + connect(timer_box, SIGNAL(valueChanged(double)),acts.timerStop, SLOT(trigger())); //connect(timer_box, SIGNAL(valueChanged(int)),simulscene, SLOT(stopTimer())); - connect(simulscene, SIGNAL(timeLineDurationChanged(int)),timer_box, SLOT(setValue(int))); + connect(this, SIGNAL(timeLineDurationChangedSec(double)),timer_box, SLOT(setValue(double))); + + //Echte simulationsdauer + QLabel *real_simul_time_shower = new QLabel(tr("keine Daten")); + real_simul_time_shower->setTextInteractionFlags(Qt::TextSelectableByMouse); + connect(simulscene, SIGNAL(realSimulTimeChanged(QString)),real_simul_time_shower, SLOT(setText(QString))); //description labels QLabel *flight_path_label = new QLabel(tr("Flugbahn anzeigen:")); QLabel *timer_label = new QLabel(tr("L\344nge der Animation:")); + QLabel *real_simul_time_label = new QLabel(tr("\"Reale\" Simulationsdauer:")); //grid layout QGridLayout *simulOptGridLayout = new QGridLayout; @@ -415,6 +423,8 @@ void lsim::createDocks() { simulOptGridLayout->addWidget(flight_path_box,3,1); simulOptGridLayout->addWidget(timer_label,4,0,Qt::AlignRight); simulOptGridLayout->addWidget(timer_box,4,1); + simulOptGridLayout->addWidget(real_simul_time_label,5,0,Qt::AlignRight); + simulOptGridLayout->addWidget(real_simul_time_shower,5,1); QGroupBox *simulOptGroupBox = new QGroupBox(tr("Allgemeines")); simulOptGroupBox->setLayout(simulOptGridLayout); @@ -456,6 +466,14 @@ void lsim::createDocks() { } +void lsim::timeLineDurationChangeWrapperToSec(int length) { + emit timeLineDurationChangedSec((double)length/1000.0); +} + +void lsim::timeLineDurationSetWrapperToMsec(double length) { + simulscene->setTimeLineDuration(int(length*1000)); +} + void lsim::actModeSwitcher(QAction *action) { simulscene->setSceneMode((SimulScene::SceneMode)action->data().toInt()); } @@ -525,11 +543,13 @@ void lsim::startCalculation() { if (simulscene->getMeterPerPx() == 0) { QMessageBox::critical (this,tr("B\366ser Fehler!"),tr("Die Wegl\344nge pro Pixel darf nicht 0 sein!")); + setMode(EditMode); return; } if (simulscene->getProbeChargeItem()->getMasse(0) == 0) { QMessageBox::critical (this,tr("B\366ser Fehler!"),tr("Die Masse der Probeladung darf nicht 0 sein!")); + setMode(EditMode); return; } @@ -542,7 +562,7 @@ void lsim::startCalculation() { statusBar()->clearMessage(); } void lsim::startTimer() { - if( qApp->focusWidget() !=0) qApp->focusWidget()->clearFocus(); + clearAnyFocus(); simulscene->startTimer(); } void lsim::handleDockLocationChange() { diff --git a/src/lsim.h b/src/lsim.h index 5c34280..1df402f 100644 --- a/src/lsim.h +++ b/src/lsim.h @@ -70,6 +70,9 @@ class lsim: public QMainWindow { void clearAnyFocus(); void resetAll(); + void timeLineDurationChangeWrapperToSec(int length); + void timeLineDurationSetWrapperToMsec(double length); + private: void createActions(); void createMenus(); @@ -134,6 +137,7 @@ class lsim: public QMainWindow { WindowMode myMode; signals: void windowModeChanged(WindowMode mode); + void timeLineDurationChangedSec(double duration); }; #endif diff --git a/src/simulscene.cpp b/src/simulscene.cpp index 12ce1ef..84fe65e 100644 --- a/src/simulscene.cpp +++ b/src/simulscene.cpp @@ -39,7 +39,6 @@ #include - SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) { fieldListWidget = new QListWidget(); @@ -109,6 +108,7 @@ void SimulScene::setupVars() { setSteps(300000); //setMeterPerPx(1/1000.0); setMeterPerPx(0.01); + setPxPerSec(90.0); timer->setFrameRange(0,100); timer->setUpdateInterval(30); @@ -810,6 +810,16 @@ void SimulScene::startCalculation() { ani->setPosAt(i/(double)currSteps, ellipse1->getCurrProbePath()->at(i) ); } } + + //aenderungen bestimmter Werte bekanntgeben + QString realSimulTimeString(QLocale().toString(ellipse1->getRealSimulTime(),'g')); + realSimulTimeString.append(" s"); + emit realSimulTimeChanged(realSimulTimeString); + + //brauchbare Animationsdauer bestimmen + setTimeLineDuration(ellipse1->getFlightPath().length()/getPxPerSec() * 1000.0); + + } @@ -894,6 +904,9 @@ double SimulScene::getMeterPerPx() const { return meterPerPx; } +double SimulScene::getPxPerSec() const { + return pxPerSec; +} void SimulScene::setMeterPerPx ( double theValue ) { if (theValue == meterPerPx) return; @@ -901,6 +914,12 @@ void SimulScene::setMeterPerPx ( double theValue ) { emit meterPerPxChanged(theValue); } +void SimulScene::setPxPerSec ( double theValue ) { + if (theValue == pxPerSec) return; + pxPerSec = theValue; + emit pxPerSecChanged(theValue); +} + /*! \fn SimulScene::getProbeDockWidget() const diff --git a/src/simulscene.h b/src/simulscene.h index 5273a17..bf94972 100644 --- a/src/simulscene.h +++ b/src/simulscene.h @@ -56,6 +56,8 @@ class SimulScene : public QGraphicsScene { ~SimulScene(); double getTimePerStep(); + double getMeterPerPx() const; + double getPxPerSec() const; int getSteps(); //! gibt die Wirkende Kraft zurück (in Newton) @@ -94,7 +96,7 @@ class SimulScene : public QGraphicsScene { void setSteps(int steps); void setMeterPerPx ( double theValue ); - double getMeterPerPx() const; + void setPxPerSec ( double theValue ); void setFlightPathVisible(bool visible = true); void setTimeLineDuration(int duration); @@ -118,9 +120,11 @@ class SimulScene : public QGraphicsScene { void stepsChanged(int steps); void timePerStepChanged(double timePerStep); void meterPerPxChanged(double meterPerPx); + void pxPerSecChanged(double pxps); void flightPathVisibilityChanged(bool visible); void timeLineDurationChanged(int duration); void timeLineInRunningState(bool yesno = false); + void realSimulTimeChanged(QString theString); private: QTimeLine *timer; @@ -132,6 +136,9 @@ class SimulScene : public QGraphicsScene { int steps; ///ein Pixel entspricht so viel meter double meterPerPx; + ///Animationsgescheindigkeit in px/s (durchschnittlich) + double pxPerSec; + HomoEFieldItem *currHomoEfieldInsertItem; //Aktuell erstelltes Item HomoEFieldItem *currHomoEfieldEditItem;