Probeladungsplatzierung hinzugefuegt, kleine verbesserungen
git-svn-id: http://svn.lsim.tuxzone.org/trunk@16 4bec179b-ab65-46ed-a5f8-55b8b5c735d0
This commit is contained in:
Binary file not shown.
39
lsim.kdevses
39
lsim.kdevses
@@ -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" />
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
#include "constants.h"
|
||||
|
||||
GraphicsEllipseItem::GraphicsEllipseItem() {
|
||||
setFlag(ItemIsMovable);
|
||||
setFlag(ItemIsSelectable);
|
||||
//setFlag(ItemIsMovable);
|
||||
//setFlag(ItemIsSelectable);
|
||||
setFlag(ItemIsFocusable);
|
||||
//setCacheMode(QGraphicsItem::DeviceCoordinateCache);
|
||||
//startTimer(100);
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
|
||||
GraphicsView::GraphicsView(): QGraphicsView() {
|
||||
setMinimumSize(900,700);
|
||||
//setMinimumSize(900,700);
|
||||
//setDragMode(QGraphicsView::RubberBandDrag);
|
||||
|
||||
|
||||
|
||||
27
src/lsim.cpp
27
src/lsim.cpp
@@ -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"));
|
||||
@@ -113,10 +112,16 @@ void lsim::createActions() {
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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)) );
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user