anfaengliche z-index vertauschung
git-svn-id: http://svn.lsim.tuxzone.org/trunk@17 4bec179b-ab65-46ed-a5f8-55b8b5c735d0
This commit is contained in:
@@ -20,13 +20,16 @@
|
|||||||
#include "fielditem.h"
|
#include "fielditem.h"
|
||||||
#include "homoefielditem.h"
|
#include "homoefielditem.h"
|
||||||
#include "homobfielditem.h"
|
#include "homobfielditem.h"
|
||||||
|
#include "simulscene.h"
|
||||||
#include <QGraphicsSceneWheelEvent>
|
#include <QGraphicsSceneWheelEvent>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QMenu>;
|
||||||
|
|
||||||
FieldItem::FieldItem()
|
FieldItem::FieldItem()
|
||||||
: QGraphicsItem() {
|
: QGraphicsItem() {
|
||||||
myRotation = 0;
|
myRotation = 0;
|
||||||
myScenePos = QPointF(0,0);
|
myScenePos = QPointF(0,0);
|
||||||
|
mySimulScene = dynamic_cast<SimulScene*> (scene());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -131,11 +134,13 @@ void FieldItem::wheelEvent(QGraphicsSceneWheelEvent * event) {
|
|||||||
setRotation(getRotation()+( (event->delta()/abs(event->delta()))*5 ));
|
setRotation(getRotation()+( (event->delta()/abs(event->delta()))*5 ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void FieldItem::contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn FieldItem::getRotation()
|
\fn FieldItem::getRotation()
|
||||||
*/
|
*/
|
||||||
int FieldItem::getRotation()
|
int FieldItem::getRotation() {
|
||||||
{
|
|
||||||
return myRotation;
|
return myRotation;
|
||||||
}
|
}
|
||||||
@@ -29,6 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
class QPointF;
|
class QPointF;
|
||||||
class QGraphicsSceneWheelEvent;
|
class QGraphicsSceneWheelEvent;
|
||||||
|
class SimulScene;
|
||||||
class FieldItem :public QObject, public QGraphicsItem {
|
class FieldItem :public QObject, public QGraphicsItem {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
@@ -57,10 +58,11 @@ class FieldItem :public QObject, public QGraphicsItem {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void wheelEvent(QGraphicsSceneWheelEvent * event);
|
virtual void wheelEvent(QGraphicsSceneWheelEvent * event);
|
||||||
|
virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event );
|
||||||
QPointF myScenePos;
|
QPointF myScenePos;
|
||||||
int myRotation;
|
int myRotation;
|
||||||
QRectF sizeRect;
|
QRectF sizeRect;
|
||||||
|
SimulScene* mySimulScene;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual void handleSceneChange(const QList<QRectF> & region);
|
virtual void handleSceneChange(const QList<QRectF> & region);
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#include "homobfieldwidget.h"
|
#include "homobfieldwidget.h"
|
||||||
#include "homobfielditem.h"
|
#include "homobfielditem.h"
|
||||||
|
#include "simulscene.h"
|
||||||
#include "expdoublespinbox.h"
|
#include "expdoublespinbox.h"
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
@@ -27,6 +28,7 @@
|
|||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QRadioButton>
|
#include <QRadioButton>
|
||||||
#include <QButtonGroup>
|
#include <QButtonGroup>
|
||||||
|
#include <QPushButton>
|
||||||
HomoBFieldWidget::HomoBFieldWidget(QWidget* parent, Qt::WindowFlags f, HomoBFieldItem* bField):QWidget(parent, f) {
|
HomoBFieldWidget::HomoBFieldWidget(QWidget* parent, Qt::WindowFlags f, HomoBFieldItem* bField):QWidget(parent, f) {
|
||||||
|
|
||||||
homoBField = bField;
|
homoBField = bField;
|
||||||
@@ -108,6 +110,7 @@ void HomoBFieldWidget::createWidget() {
|
|||||||
connect(homoBField ,SIGNAL(directionChanged(bool)),intoPlaneButton, SLOT(setChecked(bool)) );
|
connect(homoBField ,SIGNAL(directionChanged(bool)),intoPlaneButton, SLOT(setChecked(bool)) );
|
||||||
connect(intoPlaneButton, SIGNAL(toggled(bool)),homoBField ,SLOT(setIsDirectionIntoPlane(bool)) );
|
connect(intoPlaneButton, SIGNAL(toggled(bool)),homoBField ,SLOT(setIsDirectionIntoPlane(bool)) );
|
||||||
|
|
||||||
|
|
||||||
QButtonGroup* directionGroup = new QButtonGroup();
|
QButtonGroup* directionGroup = new QButtonGroup();
|
||||||
directionGroup->addButton(intoPlaneButton);
|
directionGroup->addButton(intoPlaneButton);
|
||||||
directionGroup->addButton(outOfPlaneButton);
|
directionGroup->addButton(outOfPlaneButton);
|
||||||
@@ -120,14 +123,16 @@ void HomoBFieldWidget::createWidget() {
|
|||||||
QGroupBox* fieldDirectionBox = new QGroupBox(tr("Feldrichtung"));
|
QGroupBox* fieldDirectionBox = new QGroupBox(tr("Feldrichtung"));
|
||||||
fieldDirectionBox->setLayout(directionGridLayout);
|
fieldDirectionBox->setLayout(directionGridLayout);
|
||||||
|
|
||||||
|
//SimulScene* theScene = dynamic_cast<SimulScene*>(homoBField->scene());
|
||||||
|
//qDebug()<<theScene;
|
||||||
|
//QPushButton* downButton = new QPushButton("down");
|
||||||
|
//connect( downButton,SIGNAL(clicked()),theScene, SLOT(moveSelectedFieldItemDown()) );
|
||||||
|
|
||||||
QVBoxLayout * mainLayout = new QVBoxLayout(this);
|
QVBoxLayout * mainLayout = new QVBoxLayout(this);
|
||||||
mainLayout -> addWidget(geometryBox);
|
mainLayout -> addWidget(geometryBox);
|
||||||
mainLayout -> addWidget(fieldDirectionBox);
|
mainLayout -> addWidget(fieldDirectionBox);
|
||||||
mainLayout -> addWidget(fieldConstantsBox);
|
mainLayout -> addWidget(fieldConstantsBox);
|
||||||
|
//mainLayout -> addWidget(downButton);
|
||||||
mainLayout -> addStretch();
|
mainLayout -> addStretch();
|
||||||
|
|
||||||
QWidget::setTabOrder (posXBox, posYBox);
|
QWidget::setTabOrder (posXBox, posYBox);
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ HomoEFieldItem::HomoEFieldItem(QRectF sizeRect)
|
|||||||
setOuterPenWidth (2);
|
setOuterPenWidth (2);
|
||||||
//rotateslot(66);
|
//rotateslot(66);
|
||||||
|
|
||||||
|
//QGraphicsRectItem * testItem = new QGraphicsRectItem(QRectF(-10,-10,6,6), this);
|
||||||
|
//testItem->setBrush(Qt::SolidPattern);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
28
src/lsim.cpp
28
src/lsim.cpp
@@ -33,6 +33,7 @@
|
|||||||
#include <QStringListModel>
|
#include <QStringListModel>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QGridLayout>
|
#include <QGridLayout>
|
||||||
|
#include <QListWidget>
|
||||||
#include "expdoublespinbox.h"
|
#include "expdoublespinbox.h"
|
||||||
#include "homoefieldwidget.h"
|
#include "homoefieldwidget.h"
|
||||||
|
|
||||||
@@ -95,6 +96,13 @@ void lsim::createActions() {
|
|||||||
acts.exitAct->setStatusTip (tr ("Die Anwendung beenden"));
|
acts.exitAct->setStatusTip (tr ("Die Anwendung beenden"));
|
||||||
connect (acts.exitAct, SIGNAL (triggered()), qApp, SLOT (quit()));
|
connect (acts.exitAct, SIGNAL (triggered()), qApp, SLOT (quit()));
|
||||||
|
|
||||||
|
acts.moveItemDown = new QAction (tr ("runter"), this);
|
||||||
|
acts.moveItemDown->setStatusTip (tr ("runter"));
|
||||||
|
connect (acts.moveItemDown, SIGNAL (triggered()), simulscene, SLOT (moveSelectedFieldItemDown()));
|
||||||
|
|
||||||
|
acts.moveItemUp = new QAction (tr ("rauf"), this);
|
||||||
|
acts.moveItemUp->setStatusTip (tr ("rauf"));
|
||||||
|
connect (acts.moveItemUp, SIGNAL (triggered()), simulscene, SLOT (moveSelectedFieldItemUp()));
|
||||||
//Edit, insert, Modechange
|
//Edit, insert, Modechange
|
||||||
|
|
||||||
acts.itemEditModeAct = new QAction (tr ("Edit"), this);
|
acts.itemEditModeAct = new QAction (tr ("Edit"), this);
|
||||||
@@ -153,13 +161,17 @@ void lsim::createToolBars() {
|
|||||||
fileToolBar->addAction(acts.timerStart);
|
fileToolBar->addAction(acts.timerStart);
|
||||||
fileToolBar->addAction(acts.timerStop);
|
fileToolBar->addAction(acts.timerStop);
|
||||||
|
|
||||||
|
|
||||||
editToolBar = addToolBar (tr ("Edit"));
|
editToolBar = addToolBar (tr ("Edit"));
|
||||||
|
|
||||||
editToolBar->addAction(acts.itemEditModeAct);
|
editToolBar->addAction(acts.itemEditModeAct);
|
||||||
editToolBar->addAction(acts.insertEFieldItemAct);
|
editToolBar->addAction(acts.insertEFieldItemAct);
|
||||||
editToolBar->addAction(acts.insertBFieldItemAct);
|
editToolBar->addAction(acts.insertBFieldItemAct);
|
||||||
editToolBar->addAction(acts.probeChargeItemPlaceAct);
|
editToolBar->addAction(acts.probeChargeItemPlaceAct);
|
||||||
|
|
||||||
|
upDownToolBar=addToolBar(tr("updown"));
|
||||||
|
upDownToolBar->addAction(acts.moveItemDown);
|
||||||
|
upDownToolBar->addAction(acts.moveItemUp);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void lsim::createStatusBar() {
|
void lsim::createStatusBar() {
|
||||||
@@ -253,6 +265,7 @@ void lsim::createDocks() {
|
|||||||
sceneDock = new QDockWidget(tr("Allgemeines"), this);
|
sceneDock = new QDockWidget(tr("Allgemeines"), this);
|
||||||
sceneDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea);
|
sceneDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea);
|
||||||
sceneDock->setWidget((allgWidget));
|
sceneDock->setWidget((allgWidget));
|
||||||
|
//sceneDock->setFeatures(QDockWidget::NoDockWidgetFeatures);
|
||||||
addDockWidget(Qt::LeftDockWidgetArea, sceneDock);
|
addDockWidget(Qt::LeftDockWidgetArea, sceneDock);
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
@@ -261,6 +274,7 @@ void lsim::createDocks() {
|
|||||||
fieldItemEditDock = new QDockWidget(tr("Feldeinstellungen"), this);
|
fieldItemEditDock = new QDockWidget(tr("Feldeinstellungen"), this);
|
||||||
fieldItemEditDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea);
|
fieldItemEditDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea);
|
||||||
fieldItemEditDock->setWidget(new QWidget);
|
fieldItemEditDock->setWidget(new QWidget);
|
||||||
|
//fieldItemEditDock->setFeatures(QDockWidget::NoDockWidgetFeatures);
|
||||||
addDockWidget(Qt::LeftDockWidgetArea, fieldItemEditDock);
|
addDockWidget(Qt::LeftDockWidgetArea, fieldItemEditDock);
|
||||||
connect (simulscene, SIGNAL(selectionChanged ()) , this, SLOT(updateDockFieldWidget()));
|
connect (simulscene, SIGNAL(selectionChanged ()) , this, SLOT(updateDockFieldWidget()));
|
||||||
updateDockFieldWidget();
|
updateDockFieldWidget();
|
||||||
@@ -268,6 +282,7 @@ void lsim::createDocks() {
|
|||||||
|
|
||||||
probeItemDock = new QDockWidget(tr("Probleladung"), this);
|
probeItemDock = new QDockWidget(tr("Probleladung"), this);
|
||||||
probeItemDock->setWidget(simulscene->getProbeDockWidget());
|
probeItemDock->setWidget(simulscene->getProbeDockWidget());
|
||||||
|
//probeItemDock->setFeatures(QDockWidget::NoDockWidgetFeatures);
|
||||||
addDockWidget(Qt::LeftDockWidgetArea, probeItemDock);
|
addDockWidget(Qt::LeftDockWidgetArea, probeItemDock);
|
||||||
|
|
||||||
|
|
||||||
@@ -316,17 +331,11 @@ lsim::~lsim() {
|
|||||||
\fn lsim::updateDockFieldWidget()
|
\fn lsim::updateDockFieldWidget()
|
||||||
*/
|
*/
|
||||||
void lsim::updateDockFieldWidget() {
|
void lsim::updateDockFieldWidget() {
|
||||||
QStringListModel *model = new QStringListModel();
|
|
||||||
QStringList list;
|
|
||||||
list << "a" << "b" << "c";
|
|
||||||
model->setStringList(list);
|
|
||||||
QListView * lview = new QListView;
|
|
||||||
lview->setModel(model);
|
|
||||||
|
|
||||||
QLabel* currLabel = new QLabel(tr("Bitte ein Feld ausw\344hlen"));
|
QLabel* currLabel = new QLabel(tr("Bitte ein Feld ausw\344hlen"));
|
||||||
currLabel->setWordWrap(true);
|
currLabel->setWordWrap(true);
|
||||||
currLabel->setAlignment(Qt::AlignCenter);
|
currLabel->setAlignment(Qt::AlignCenter);
|
||||||
QWidget *currDockWidget =currLabel;
|
QWidget *currDockWidget =simulscene->getFieldListWidget();
|
||||||
if(simulscene->selectedItems().count() == 1) {
|
if(simulscene->selectedItems().count() == 1) {
|
||||||
QGraphicsItem *currItem = simulscene->selectedItems().first();
|
QGraphicsItem *currItem = simulscene->selectedItems().first();
|
||||||
if (FieldItem::isFieldItem(currItem)) {
|
if (FieldItem::isFieldItem(currItem)) {
|
||||||
@@ -346,3 +355,6 @@ void lsim::startTimer() {
|
|||||||
if( qApp->focusWidget() !=0) qApp->focusWidget()->clearFocus();
|
if( qApp->focusWidget() !=0) qApp->focusWidget()->clearFocus();
|
||||||
simulscene->startTimer();
|
simulscene->startTimer();
|
||||||
}
|
}
|
||||||
|
void lsim::handleDockLocationChange() {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -56,6 +56,7 @@ class lsim: public QMainWindow {
|
|||||||
void updateDockFieldWidget();
|
void updateDockFieldWidget();
|
||||||
void startCalculation();
|
void startCalculation();
|
||||||
void startTimer();
|
void startTimer();
|
||||||
|
void handleDockLocationChange();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void createActions();
|
void createActions();
|
||||||
@@ -74,6 +75,7 @@ class lsim: public QMainWindow {
|
|||||||
|
|
||||||
QToolBar *fileToolBar;
|
QToolBar *fileToolBar;
|
||||||
QToolBar *editToolBar;
|
QToolBar *editToolBar;
|
||||||
|
QToolBar *upDownToolBar;
|
||||||
|
|
||||||
struct Actions {
|
struct Actions {
|
||||||
QAction *aboutAct;
|
QAction *aboutAct;
|
||||||
@@ -85,6 +87,9 @@ class lsim: public QMainWindow {
|
|||||||
QAction *timerStart;
|
QAction *timerStart;
|
||||||
QAction *timerStop;
|
QAction *timerStop;
|
||||||
|
|
||||||
|
QAction *moveItemDown;
|
||||||
|
QAction *moveItemUp;
|
||||||
|
|
||||||
QAction *itemEditModeAct;
|
QAction *itemEditModeAct;
|
||||||
QAction *insertEFieldItemAct;
|
QAction *insertEFieldItemAct;
|
||||||
QAction *insertBFieldItemAct;
|
QAction *insertBFieldItemAct;
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
#include <QGraphicsItemGroup>
|
#include <QGraphicsItemGroup>
|
||||||
#include <QPainterPath>
|
#include <QPainterPath>
|
||||||
#include <QGraphicsPathItem>
|
#include <QGraphicsPathItem>
|
||||||
|
#include <QListWidget>
|
||||||
|
|
||||||
|
|
||||||
SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
|
SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
|
||||||
@@ -44,6 +45,8 @@ SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
|
|||||||
//setMeterPerPx(1/1000.0);
|
//setMeterPerPx(1/1000.0);
|
||||||
setMeterPerPx(0.01);
|
setMeterPerPx(0.01);
|
||||||
|
|
||||||
|
fieldListWidget = new QListWidget();
|
||||||
|
|
||||||
currHomoEfieldInsertItem = 0;
|
currHomoEfieldInsertItem = 0;
|
||||||
currHomoEfieldEditItem = 0;
|
currHomoEfieldEditItem = 0;
|
||||||
currHomoBfieldInsertItem = 0;
|
currHomoBfieldInsertItem = 0;
|
||||||
@@ -100,6 +103,7 @@ SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
|
|||||||
ani->setItem(ellipse1);
|
ani->setItem(ellipse1);
|
||||||
ani->setTimeLine(timer);
|
ani->setTimeLine(timer);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimulScene::startTimer() {
|
void SimulScene::startTimer() {
|
||||||
@@ -127,6 +131,7 @@ void SimulScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) {
|
|||||||
break;
|
break;
|
||||||
case ProbeChargeItemPlace:
|
case ProbeChargeItemPlace:
|
||||||
if (mouseEvent->button() != Qt::LeftButton) break; //benutze nur linke maustaste
|
if (mouseEvent->button() != Qt::LeftButton) break; //benutze nur linke maustaste
|
||||||
|
clearSelection();
|
||||||
ChargePlacementInProgress = true;
|
ChargePlacementInProgress = true;
|
||||||
ellipse1->setPos(mouseEvent->scenePos());
|
ellipse1->setPos(mouseEvent->scenePos());
|
||||||
break;
|
break;
|
||||||
@@ -249,6 +254,7 @@ void SimulScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) {
|
|||||||
//das neue item auswaehlen
|
//das neue item auswaehlen
|
||||||
clearSelection();
|
clearSelection();
|
||||||
currHomoEfieldInsertItem->setSelected(true);
|
currHomoEfieldInsertItem->setSelected(true);
|
||||||
|
currHomoEfieldInsertItem->setZValue(getHighestZIndexFieldItems()+FieldZStep);
|
||||||
|
|
||||||
//die resize items aus und einblenden bei rotation
|
//die resize items aus und einblenden bei rotation
|
||||||
connect( currHomoEfieldInsertItem, SIGNAL(rotationChanged()), this, SLOT(displayResizeRects()));
|
connect( currHomoEfieldInsertItem, SIGNAL(rotationChanged()), this, SLOT(displayResizeRects()));
|
||||||
@@ -285,6 +291,7 @@ void SimulScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) {
|
|||||||
//das neue item auswaehlen
|
//das neue item auswaehlen
|
||||||
clearSelection();
|
clearSelection();
|
||||||
currHomoBfieldInsertItem->setSelected(true);
|
currHomoBfieldInsertItem->setSelected(true);
|
||||||
|
currHomoBfieldInsertItem->setZValue(getHighestZIndexFieldItems()+FieldZStep);
|
||||||
|
|
||||||
//die resize items aus und einblenden bei rotation
|
//die resize items aus und einblenden bei rotation
|
||||||
connect( currHomoBfieldInsertItem, SIGNAL(rotationChanged()), this, SLOT(displayResizeRects()));
|
connect( currHomoBfieldInsertItem, SIGNAL(rotationChanged()), this, SLOT(displayResizeRects()));
|
||||||
@@ -496,6 +503,22 @@ qreal SimulScene::getHighestZIndexVisible() {
|
|||||||
}
|
}
|
||||||
return highestZValue;
|
return highestZValue;
|
||||||
}
|
}
|
||||||
|
qreal SimulScene::getHighestZIndexFieldItems() {
|
||||||
|
bool highestZValueSet = false;
|
||||||
|
qreal highestZValue = FieldDefaultZValue; //default value
|
||||||
|
for (int i = 0; i < items().count() ; ++i ) {
|
||||||
|
if (FieldItem::isFieldItem(items().at(i))) {
|
||||||
|
if (!highestZValueSet) {
|
||||||
|
highestZValue = items().at(i)->zValue();
|
||||||
|
highestZValueSet = true;
|
||||||
|
}
|
||||||
|
else if (highestZValue < items().at(i)->zValue()) {
|
||||||
|
highestZValue = items().at(i)->zValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return highestZValue;
|
||||||
|
}
|
||||||
|
|
||||||
void SimulScene::deleteSelectedFieldItems() {
|
void SimulScene::deleteSelectedFieldItems() {
|
||||||
QList<QGraphicsItem *> currSelectedItems = selectedItems();
|
QList<QGraphicsItem *> currSelectedItems = selectedItems();
|
||||||
@@ -620,6 +643,7 @@ void SimulScene::startCalculation() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//berechnung starten
|
//berechnung starten
|
||||||
ellipse1->calculateProbePath(ellipse1->pos());
|
ellipse1->calculateProbePath(ellipse1->pos());
|
||||||
|
|
||||||
@@ -657,50 +681,10 @@ void SimulScene::setSteps(int steps) {
|
|||||||
|
|
||||||
double SimulScene::getPowerAt(QPointF point, double charge, double speedX, double speedY, char xy) {
|
double SimulScene::getPowerAt(QPointF point, double charge, double speedX, double speedY, char xy) {
|
||||||
double dPower = 0;
|
double dPower = 0;
|
||||||
/*for(int i = 0; i < items(point).size(); ++i) {
|
|
||||||
//HomoEFieldItems Abarbeiten
|
|
||||||
if (qgraphicsitem_cast<HomoEFieldItem*> (items(point).at(i)) != 0) {
|
|
||||||
HomoEFieldItem* myHomoEFieldItem = qgraphicsitem_cast<HomoEFieldItem*> (items(point).at(i));
|
|
||||||
double power = (myHomoEFieldItem->getFieldPower() * charge);
|
|
||||||
double degAngle = myHomoEFieldItem->getRotation();
|
|
||||||
double radAngle = degAngle/180.0*PI;
|
|
||||||
|
|
||||||
if(xy == 'x') {
|
|
||||||
if (degAngle != 180.0) dPower += power * -sin(radAngle);
|
|
||||||
}
|
|
||||||
if(xy == 'y') {
|
|
||||||
if (degAngle != 90.0 && degAngle != 270.0) dPower += power * cos(radAngle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//HomoBFieldItems Abarbeiten
|
|
||||||
if (qgraphicsitem_cast<HomoBFieldItem*> (items(point).at(i)) != 0) {
|
|
||||||
HomoBFieldItem* myHomoBFieldItem = qgraphicsitem_cast<HomoBFieldItem*>(items(point).at(i));
|
|
||||||
double absSpeed = sqrt(speedX * speedX + speedY * speedY); // Geschwindigkeit im Betrag |v|=sqrt(vx^2+vy^2)
|
|
||||||
double absLorentzPower = (charge * absSpeed * myHomoBFieldItem->getFluxDensity() ); //Kraft im Betrag: |F| = q*v*B
|
|
||||||
double speedRadAngle = atan2(speedY,speedX); //Winkel des Geschwindigkeitsvekors zur x-Achse im Bogenmass
|
|
||||||
|
|
||||||
double PowerRadAngle; //Winkel des Lorentzkraftvektors zur x-Achse im Bogenmass
|
|
||||||
if (myHomoBFieldItem->getIsDirectionIntoPlane()) {
|
|
||||||
PowerRadAngle = speedRadAngle + PI/2.0;
|
|
||||||
} else {
|
|
||||||
PowerRadAngle = speedRadAngle - PI/2.0;
|
|
||||||
}
|
|
||||||
//qDebug()<< PowerRadAngle;
|
|
||||||
|
|
||||||
if (xy == 'x') {
|
|
||||||
dPower += absLorentzPower * cos(PowerRadAngle);
|
|
||||||
}
|
|
||||||
if (xy == 'y') {
|
|
||||||
dPower += absLorentzPower * sin(PowerRadAngle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
for (int i=0; i<calcEFieldList.size(); ++i) {
|
for (int i=0; i<calcEFieldList.size(); ++i) {
|
||||||
//HomoEFieldItems Abarbeiten
|
//HomoEFieldItems Abarbeiten
|
||||||
HomoEFieldItem* myHomoEFieldItem = calcEFieldList[i];
|
HomoEFieldItem* myHomoEFieldItem = calcEFieldList.at(i);
|
||||||
if (myHomoEFieldItem->contains(myHomoEFieldItem->mapFromScene(point))) {
|
if (myHomoEFieldItem->contains(myHomoEFieldItem->mapFromScene(point))) {
|
||||||
|
|
||||||
double power = (myHomoEFieldItem->getFieldPower() * charge);
|
double power = (myHomoEFieldItem->getFieldPower() * charge);
|
||||||
double degAngle = myHomoEFieldItem->getRotation();
|
double degAngle = myHomoEFieldItem->getRotation();
|
||||||
double radAngle = degAngle/180.0*PI;
|
double radAngle = degAngle/180.0*PI;
|
||||||
@@ -713,9 +697,10 @@ double SimulScene::getPowerAt(QPointF point, double charge, double speedX, doubl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i<calcBFieldList.size(); ++i) {
|
for (int i=0; i<calcBFieldList.size(); ++i) {
|
||||||
//HomoBFieldItems Abarbeiten
|
//HomoBFieldItems Abarbeiten
|
||||||
HomoBFieldItem* myHomoBFieldItem = calcBFieldList[i];
|
HomoBFieldItem* myHomoBFieldItem = calcBFieldList.at(i);
|
||||||
if (myHomoBFieldItem->contains(myHomoBFieldItem->mapFromScene(point))) {
|
if (myHomoBFieldItem->contains(myHomoBFieldItem->mapFromScene(point))) {
|
||||||
double absSpeed = sqrt(speedX * speedX + speedY * speedY); // Geschwindigkeit im Betrag |v|=sqrt(vx^2+vy^2)
|
double absSpeed = sqrt(speedX * speedX + speedY * speedY); // Geschwindigkeit im Betrag |v|=sqrt(vx^2+vy^2)
|
||||||
double absLorentzPower = (charge * absSpeed * myHomoBFieldItem->getFluxDensity() ); //Kraft im Betrag: |F| = q*v*B
|
double absLorentzPower = (charge * absSpeed * myHomoBFieldItem->getFluxDensity() ); //Kraft im Betrag: |F| = q*v*B
|
||||||
@@ -780,3 +765,83 @@ void SimulScene::setTimeLineDuration(int duration) {
|
|||||||
int SimulScene::getTimeLineDuration() {
|
int SimulScene::getTimeLineDuration() {
|
||||||
return timer->duration();
|
return timer->duration();
|
||||||
}
|
}
|
||||||
|
QListWidget* SimulScene::getFieldListWidget() {
|
||||||
|
return fieldListWidget;
|
||||||
|
}
|
||||||
|
QList<QGraphicsItem*> SimulScene::getItemsInZOrder() {
|
||||||
|
QList<QGraphicsItem*> currItems = items();
|
||||||
|
|
||||||
|
bool swapNeeded;
|
||||||
|
for (int i=0;i< currItems.count();++i) {
|
||||||
|
swapNeeded=false;
|
||||||
|
for (int j=0; j< currItems.count() -i -1; ++j){
|
||||||
|
if(currItems[j]->zValue() > currItems[j+1]->zValue()) {
|
||||||
|
QGraphicsItem* swapper = currItems[j];
|
||||||
|
currItems[j]= currItems[j+1];
|
||||||
|
currItems[j+1] = swapper;
|
||||||
|
swapNeeded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!swapNeeded) break;
|
||||||
|
}
|
||||||
|
return currItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QGraphicsItem*> SimulScene::getFieldItemsInZOrder() {
|
||||||
|
QList<QGraphicsItem*> currItems;
|
||||||
|
for (int i = 0; i< items().size();++i) {
|
||||||
|
if(FieldItem::isFieldItem(items().at(i))) currItems.append(items().at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool swapNeeded;
|
||||||
|
for (int i=0;i< currItems.count();++i) {
|
||||||
|
swapNeeded=false;
|
||||||
|
for (int j=0; j< currItems.count() -i -1; ++j){
|
||||||
|
if(currItems[j]->zValue() > currItems[j+1]->zValue()) {
|
||||||
|
QGraphicsItem* swapper = currItems[j];
|
||||||
|
currItems[j]= currItems[j+1];
|
||||||
|
currItems[j+1] = swapper;
|
||||||
|
swapNeeded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!swapNeeded) break;
|
||||||
|
}
|
||||||
|
return currItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SimulScene::moveFieldItemDown(QGraphicsItem* fieldItem) {
|
||||||
|
if (!FieldItem::isFieldItem(fieldItem)) return;
|
||||||
|
qreal currFieldItemZValue = fieldItem->zValue();
|
||||||
|
QList<QGraphicsItem*> FieldItemsInZOrder = getFieldItemsInZOrder();
|
||||||
|
for (int i = 1; i< FieldItemsInZOrder.count();++i) {
|
||||||
|
if (FieldItemsInZOrder.at(i) == fieldItem) {
|
||||||
|
fieldItem->setZValue(FieldItemsInZOrder.at(i-1)->zValue());
|
||||||
|
FieldItemsInZOrder.at(i-1)->setZValue(currFieldItemZValue);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SimulScene::moveFieldItemUp(QGraphicsItem* fieldItem) {
|
||||||
|
if (!FieldItem::isFieldItem(fieldItem)) return;
|
||||||
|
qreal currFieldItemZValue = fieldItem->zValue();
|
||||||
|
QList<QGraphicsItem*> FieldItemsInZOrder = getFieldItemsInZOrder();
|
||||||
|
for (int i = 0; i< FieldItemsInZOrder.count()-1;++i) {
|
||||||
|
if (FieldItemsInZOrder.at(i) == fieldItem) {
|
||||||
|
fieldItem->setZValue(FieldItemsInZOrder.at(i+1)->zValue());
|
||||||
|
FieldItemsInZOrder.at(i+1)->setZValue(currFieldItemZValue);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SimulScene::moveSelectedFieldItemDown() {
|
||||||
|
if (selectedItems().isEmpty()) return;
|
||||||
|
moveFieldItemDown(selectedItems().first());
|
||||||
|
}
|
||||||
|
void SimulScene::moveSelectedFieldItemUp() {
|
||||||
|
if (selectedItems().isEmpty()) return;
|
||||||
|
moveFieldItemUp(selectedItems().first());
|
||||||
|
}
|
||||||
@@ -31,6 +31,8 @@ class GraphicsEllipseItem;
|
|||||||
class QGraphicsItemAnimation;
|
class QGraphicsItemAnimation;
|
||||||
class QGraphicsPathItem;
|
class QGraphicsPathItem;
|
||||||
class QPainterPath;
|
class QPainterPath;
|
||||||
|
class QListWidget;
|
||||||
|
class FieldItem;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@author Peter Dahlberg <pdahlberg@gmail.com>
|
@author Peter Dahlberg <pdahlberg@gmail.com>
|
||||||
@@ -46,7 +48,8 @@ class SimulScene : public QGraphicsScene {
|
|||||||
};
|
};
|
||||||
enum ItemType {ResizeRectItem};
|
enum ItemType {ResizeRectItem};
|
||||||
SimulScene ( QObject* parent = 0);
|
SimulScene ( QObject* parent = 0);
|
||||||
qreal getHighestZIndexVisible(); //hoechsten z-index der sichtbaren items ausgeben
|
qreal getHighestZIndexVisible(); //hoechsten z-index der sichtbaren items
|
||||||
|
qreal getHighestZIndexFieldItems(); //hoechsten z-index der Felder ausgeben
|
||||||
|
|
||||||
~SimulScene();
|
~SimulScene();
|
||||||
double getTimePerStep();
|
double getTimePerStep();
|
||||||
@@ -66,6 +69,9 @@ class SimulScene : public QGraphicsScene {
|
|||||||
|
|
||||||
bool isFlightPathVisible();
|
bool isFlightPathVisible();
|
||||||
int getTimeLineDuration();
|
int getTimeLineDuration();
|
||||||
|
QListWidget* getFieldListWidget();
|
||||||
|
QList<QGraphicsItem*> getItemsInZOrder();
|
||||||
|
QList<QGraphicsItem*> getFieldItemsInZOrder();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setSceneMode(SceneMode mode);
|
void setSceneMode(SceneMode mode);
|
||||||
@@ -82,7 +88,10 @@ class SimulScene : public QGraphicsScene {
|
|||||||
void setFlightPathVisible(bool visible = true);
|
void setFlightPathVisible(bool visible = true);
|
||||||
void setTimeLineDuration(int duration);
|
void setTimeLineDuration(int duration);
|
||||||
|
|
||||||
|
void moveFieldItemDown(QGraphicsItem* fieldItem);
|
||||||
|
void moveSelectedFieldItemDown();
|
||||||
|
void moveFieldItemUp(QGraphicsItem* fieldItem);
|
||||||
|
void moveSelectedFieldItemUp();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void displayResizeRects(bool move = false);
|
void displayResizeRects(bool move = false);
|
||||||
@@ -122,6 +131,7 @@ class SimulScene : public QGraphicsScene {
|
|||||||
QGraphicsItemAnimation *ani;
|
QGraphicsItemAnimation *ani;
|
||||||
|
|
||||||
QGraphicsPathItem *pathItem1;
|
QGraphicsPathItem *pathItem1;
|
||||||
|
QListWidget* fieldListWidget;
|
||||||
|
|
||||||
|
|
||||||
//rechtecke zur groesenaenderung
|
//rechtecke zur groesenaenderung
|
||||||
@@ -150,6 +160,10 @@ class SimulScene : public QGraphicsScene {
|
|||||||
QList<HomoEFieldItem*> calcEFieldList;
|
QList<HomoEFieldItem*> calcEFieldList;
|
||||||
QList<HomoBFieldItem*> calcBFieldList;
|
QList<HomoBFieldItem*> calcBFieldList;
|
||||||
|
|
||||||
|
static const qreal FieldDefaultZValue = 10; //default z-value fuer Felder
|
||||||
|
static const qreal FieldZStep = 1e-50; //schritt, um den der z-index erhoeht wird
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
|
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
|
||||||
|
|||||||
Reference in New Issue
Block a user