Probeladungsplatzierung hinzugefuegt, kleine verbesserungen

git-svn-id: http://svn.lsim.tuxzone.org/trunk@16 4bec179b-ab65-46ed-a5f8-55b8b5c735d0
This commit is contained in:
catdog2
2008-11-15 13:55:29 +00:00
parent 3dc80bdeb0
commit 12fd597883
9 changed files with 84 additions and 26 deletions

Binary file not shown.

View File

@@ -1,25 +1,40 @@
<?xml version = '1.0' encoding = 'UTF-8'?>
<!DOCTYPE KDevPrjSession>
<KDevPrjSession>
<DocsAndViews NumberOfDocuments="6" >
<DocsAndViews NumberOfDocuments="11" >
<Doc0 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/simulscene.h" >
<View0 Encoding="" line="90" Type="Source" />
<View0 Encoding="" line="62" Type="Source" />
</Doc0>
<Doc1 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/simulscene.cpp" >
<View0 Encoding="" line="691" Type="Source" />
<View0 Encoding="" line="44" Type="Source" />
</Doc1>
<Doc2 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/graphicsellipseitem.h" >
<View0 Encoding="" line="22" Type="Source" />
<Doc2 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/fielditem.h" >
<View0 Encoding="" line="45" Type="Source" />
</Doc2>
<Doc3 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/graphicsellipseitem.cpp" >
<View0 Encoding="" line="205" Type="Source" />
<Doc3 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homobfielditem.h" >
<View0 Encoding="" line="29" Type="Source" />
</Doc3>
<Doc4 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homobfielditem.cpp" >
<View0 Encoding="" line="57" Type="Source" />
<Doc4 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homobfieldwidget.h" >
<View0 Encoding="" line="32" Type="Source" />
</Doc4>
<Doc5 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/lsim.cpp" >
<View0 Encoding="" line="58" Type="Source" />
<Doc5 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/lsim.h" >
<View0 Encoding="" line="81" Type="Source" />
</Doc5>
<Doc6 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homobfieldwidget.cpp" >
<View0 Encoding="" line="97" Type="Source" />
</Doc6>
<Doc7 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/lsim.cpp" >
<View0 Encoding="" line="171" Type="Source" />
</Doc7>
<Doc8 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homoefielditem.h" >
<View0 Encoding="" line="62" Type="Source" />
</Doc8>
<Doc9 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homoefielditem.cpp" >
<View0 Encoding="" line="30" Type="Source" />
</Doc9>
<Doc10 NumberOfViews="1" URL="file:///mnt/sdb1/c%2B%2B/lsim/src/homobfielditem.cpp" >
<View0 Encoding="" line="36" Type="Source" />
</Doc10>
</DocsAndViews>
<pluginList>
<kdevdebugger>
@@ -38,7 +53,7 @@
<bookmarks/>
</kdevbookmarks>
<kdevvalgrind>
<executable path="" params="" />
<executable path="/mnt/sdb1/c++/lsim/src/../bin/lsim" params="" />
<valgrind path="/usr/bin/valgrind" params=" --tool=memcheck --leak-check=yes" />
<calltree path="/usr/bin/valgrind" params="--tool=callgrind" />
<kcachegrind path="/usr/bin/kcachegrind" />

View File

@@ -30,8 +30,8 @@
#include "constants.h"
GraphicsEllipseItem::GraphicsEllipseItem() {
setFlag(ItemIsMovable);
setFlag(ItemIsSelectable);
//setFlag(ItemIsMovable);
//setFlag(ItemIsSelectable);
setFlag(ItemIsFocusable);
//setCacheMode(QGraphicsItem::DeviceCoordinateCache);
//startTimer(100);

View File

@@ -23,7 +23,7 @@
GraphicsView::GraphicsView(): QGraphicsView() {
setMinimumSize(900,700);
//setMinimumSize(900,700);
//setDragMode(QGraphicsView::RubberBandDrag);

View File

@@ -40,7 +40,6 @@
lsim::lsim() {
gview = new GraphicsView();
setCentralWidget (gview);
createScene();
createActions();
simulscene->setSceneMode(SimulScene::FieldItemEdit);
@@ -82,11 +81,11 @@ void lsim::createActions() {
acts.calculate = new QAction (tr ("Berechnen"), this);
acts.calculate->setStatusTip (tr ("Flugbahn berechnen"));
connect (acts.calculate, SIGNAL (triggered()), simulscene, SLOT (startCalculation()));
connect (acts.calculate, SIGNAL (triggered()), this, SLOT (startCalculation()));
acts.timerStart = new QAction (tr ("Timer Start"), this);
acts.timerStart->setStatusTip (tr ("Timer starten"));
connect (acts.timerStart, SIGNAL (triggered()), simulscene, SLOT (startTimer()));
connect (acts.timerStart, SIGNAL (triggered()), this, SLOT (startTimer()));
acts.timerStop = new QAction (tr ("Timer Stop"), this);
acts.timerStop->setStatusTip (tr ("Timer stoppen"));
@@ -112,11 +111,17 @@ void lsim::createActions() {
acts.insertBFieldItemAct->setStatusTip (tr ("B-Feld Einfuegen"));
acts.insertBFieldItemAct->setCheckable(true);
acts.insertBFieldItemAct->setData(QVariant(SimulScene::HomoBFieldItemInsert));
acts.probeChargeItemPlaceAct = new QAction (tr ("Ladung setzen"), this);
acts.probeChargeItemPlaceAct->setStatusTip (tr ("Probeladung neu platzieren"));
acts.probeChargeItemPlaceAct->setCheckable(true);
acts.probeChargeItemPlaceAct->setData(QVariant(SimulScene::ProbeChargeItemPlace));
modeChangeActGroup = new QActionGroup(this);
modeChangeActGroup->addAction(acts.itemEditModeAct);
modeChangeActGroup->addAction(acts.insertEFieldItemAct);
modeChangeActGroup->addAction(acts.insertBFieldItemAct);
modeChangeActGroup->addAction(acts.probeChargeItemPlaceAct);
connect (modeChangeActGroup, SIGNAL (triggered(QAction*)), this, SLOT (actModeSwitcher(QAction*)));
connect (simulscene, SIGNAL(sceneModeChanged(int)) , this, SLOT(setSceneMode(int)));
@@ -154,6 +159,7 @@ void lsim::createToolBars() {
editToolBar->addAction(acts.itemEditModeAct);
editToolBar->addAction(acts.insertEFieldItemAct);
editToolBar->addAction(acts.insertBFieldItemAct);
editToolBar->addAction(acts.probeChargeItemPlaceAct);
}
void lsim::createStatusBar() {
@@ -206,7 +212,7 @@ void lsim::createDocks() {
//timer laenge Box
QSpinBox *timer_box = new QSpinBox;
timer_box->setRange(1, 1e+10);
timer_box->setRange(1.0, 1e+10);
timer_box->setKeyboardTracking(false);
timer_box->setValue(simulscene->getTimeLineDuration());
timer_box->setSuffix(" ms");
@@ -273,9 +279,7 @@ void lsim::createDocks() {
}
void lsim::actModeSwitcher(QAction *action) {
if (action->data().toInt() == SimulScene::FieldItemEdit) simulscene->setSceneMode(SimulScene::FieldItemEdit);
if (action->data().toInt() == SimulScene::HomoEFieldItemInsert) simulscene->setSceneMode(SimulScene::HomoEFieldItemInsert);
if (action->data().toInt() == SimulScene::HomoBFieldItemInsert) simulscene->setSceneMode(SimulScene::HomoBFieldItemInsert);
simulscene->setSceneMode((SimulScene::SceneMode)action->data().toInt());
}
void lsim::setSceneMode(int mode) {
@@ -333,3 +337,12 @@ void lsim::updateDockFieldWidget() {
fieldItemEditDock->setWidget(currDockWidget);
}
void lsim::startCalculation() {
if( qApp->focusWidget() !=0) qApp->focusWidget()->clearFocus();
simulscene->startCalculation();
}
void lsim::startTimer() {
if( qApp->focusWidget() !=0) qApp->focusWidget()->clearFocus();
simulscene->startTimer();
}

View File

@@ -54,6 +54,8 @@ class lsim: public QMainWindow {
void actModeSwitcher(QAction *action);
void setSceneMode(int mode);
void updateDockFieldWidget();
void startCalculation();
void startTimer();
private:
void createActions();
@@ -86,6 +88,7 @@ class lsim: public QMainWindow {
QAction *itemEditModeAct;
QAction *insertEFieldItemAct;
QAction *insertBFieldItemAct;
QAction *probeChargeItemPlaceAct;
};
Actions acts;

View File

@@ -48,6 +48,7 @@ void ProbeChargeWidget::createWidget()
startSpeedYBox->setDecimals(50);
startSpeedYBox->setDisplayDecimals(3);
startSpeedYBox->setRange(-3e+8, 3e+8);
startSpeedYBox->setSuffix(" m/s");
startSpeedYBox->setKeyboardTracking(false);
connect(startSpeedYBox, SIGNAL(valueChanged(double)), ellipseItem, SLOT(setStartSpeedY(double)) );
connect(ellipseItem, SIGNAL(startSpeedYChanged(double)), startSpeedYBox, SLOT(setValue(double)) );
@@ -56,6 +57,7 @@ void ProbeChargeWidget::createWidget()
startSpeedXBox->setDecimals(50);
startSpeedXBox->setDisplayDecimals(3);
startSpeedXBox->setRange(-3e+8, 3e+8);
startSpeedXBox->setSuffix(" m/s");
startSpeedXBox->setKeyboardTracking(false);
connect(startSpeedXBox, SIGNAL(valueChanged(double)), ellipseItem, SLOT(setStartSpeedX(double)) );
connect(ellipseItem, SIGNAL(startSpeedXChanged(double)), startSpeedXBox, SLOT(setValue(double)) );

View File

@@ -48,6 +48,7 @@ SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
currHomoEfieldEditItem = 0;
currHomoBfieldInsertItem = 0;
currHomoBfieldEditItem = 0;
ChargePlacementInProgress = false;
createResizeRects();
@@ -124,6 +125,11 @@ void SimulScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) {
addItem(currHomoBfieldInsertItem);
QApplication::setOverrideCursor(QCursor(Qt::SizeFDiagCursor));
break;
case ProbeChargeItemPlace:
if (mouseEvent->button() != Qt::LeftButton) break; //benutze nur linke maustaste
ChargePlacementInProgress = true;
ellipse1->setPos(mouseEvent->scenePos());
break;
default:
if (itemAt(mouseEvent->scenePos())->data(0) == ResizeRectItem && mouseEvent->button()==Qt::LeftButton) {
pressedResizeItem = itemAt(mouseEvent->scenePos());
@@ -206,6 +212,11 @@ void SimulScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) {
//if(mouseEvent->scenePos() != mouseEvent->lastScenePos()) displayResizeRects(true);
}
else if (ChargePlacementInProgress) {
if (myMode == ProbeChargeItemPlace) {
ellipse1->setPos(mouseEvent->scenePos());
}
}
else {
QGraphicsScene::mouseMoveEvent(mouseEvent);
if (mouseEvent->buttons() == Qt::LeftButton)
@@ -295,6 +306,10 @@ void SimulScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) {
update();
QApplication::restoreOverrideCursor();
}
else if (ChargePlacementInProgress) {
ChargePlacementInProgress = false;
setSceneMode(FieldItemEdit);
}
pressedResizeItem = 0;
currHomoEfieldInsertItem = 0;
currHomoBfieldInsertItem = 0;
@@ -585,6 +600,10 @@ void SimulScene::setTimePerStep(double time) {
\fn SimulScene::startCalculation()
*/
void SimulScene::startCalculation() {
//evtl laufenden timer stoppen
stopTimer();
//leeren Pfad setezen
pathItem1->setPath(QPainterPath());
//Feld Item Listen erzeugen (viel schneller, als jedes mal items(point) durchlaufen)
@@ -611,7 +630,6 @@ void SimulScene::startCalculation() {
int currSteps = ellipse1->getCurrProbePath()->count();
int entry_step = ceil(currSteps/2500.0); //jeder entry_step(te) step wird eingetragen
for (int i=0; i<currSteps; ++i) {
if (i%entry_step == 0 || i==currSteps) {
ani->setPosAt(i/(double)currSteps, ellipse1->getCurrProbePath()->at(i) );
}
@@ -705,9 +723,9 @@ double SimulScene::getPowerAt(QPointF point, double charge, double speedX, doubl
double PowerRadAngle; //Winkel des Lorentzkraftvektors zur x-Achse im Bogenmass
if (myHomoBFieldItem->getIsDirectionIntoPlane()) {
PowerRadAngle = speedRadAngle + PI/2.0;
} else {
PowerRadAngle = speedRadAngle - PI/2.0;
} else {
PowerRadAngle = speedRadAngle + PI/2.0;
}
//qDebug()<< PowerRadAngle;

View File

@@ -38,7 +38,12 @@ class QPainterPath;
class SimulScene : public QGraphicsScene {
Q_OBJECT
public:
enum SceneMode {HomoEFieldItemInsert, FieldItemEdit, HomoBFieldItemInsert };
enum SceneMode {
HomoEFieldItemInsert,
FieldItemEdit,
HomoBFieldItemInsert,
ProbeChargeItemPlace
};
enum ItemType {ResizeRectItem};
SimulScene ( QObject* parent = 0);
qreal getHighestZIndexVisible(); //hoechsten z-index der sichtbaren items ausgeben
@@ -109,6 +114,8 @@ class SimulScene : public QGraphicsScene {
HomoBFieldItem *currHomoBfieldInsertItem; //Aktuell erstelltes Item
HomoBFieldItem *currHomoBfieldEditItem;
bool ChargePlacementInProgress; //ladung wird gerade platziert
QGraphicsItem *pressedResizeItem;
GraphicsEllipseItem *ellipse1;