From ce2c7ac5ec6ab056c2e2df8ae16e81f949ff77f7 Mon Sep 17 00:00:00 2001 From: catdog2 Date: Mon, 17 Nov 2008 15:56:27 +0000 Subject: [PATCH] aenderung der ueberlappung der felder sollte funktionieren git-svn-id: http://svn.lsim.tuxzone.org/trunk@18 4bec179b-ab65-46ed-a5f8-55b8b5c735d0 --- src/fielditem.cpp | 2 +- src/homobfieldwidget.cpp | 5 +++- src/lsim.cpp | 12 ++++++++ src/lsim.h | 2 ++ src/simulscene.cpp | 59 ++++++++++++++++++++++++++++++++++++++-- src/simulscene.h | 8 ++++-- 6 files changed, 82 insertions(+), 6 deletions(-) diff --git a/src/fielditem.cpp b/src/fielditem.cpp index c5edbea..c71b07c 100644 --- a/src/fielditem.cpp +++ b/src/fielditem.cpp @@ -23,7 +23,7 @@ #include "simulscene.h" #include #include -#include ; +#include FieldItem::FieldItem() : QGraphicsItem() { diff --git a/src/homobfieldwidget.cpp b/src/homobfieldwidget.cpp index 2d94534..9aca233 100644 --- a/src/homobfieldwidget.cpp +++ b/src/homobfieldwidget.cpp @@ -63,6 +63,7 @@ void HomoBFieldWidget::createWidget() { QDoubleSpinBox *posYBox = new QDoubleSpinBox; posYBox->setRange(-5000, 5000); posYBox->setKeyboardTracking(false); + posYBox->setStatusTip("Position des Feldes in y-Richtung"); connect(homoBField ,SIGNAL(ScenePosYChanged(double)),posYBox, SLOT(setValue(double)) ); connect(posYBox, SIGNAL(valueChanged(double)),homoBField ,SLOT(setScenePosY(double)) ); @@ -83,8 +84,9 @@ void HomoBFieldWidget::createWidget() { QGroupBox* geometryBox = new QGroupBox(tr("Geometrie")); geometryBox->setLayout(geomGridLayout); - + QString fieldFluxDensityString = tr("Die Manetische Flussdichte B in Tesla"); QLabel* fieldFluxDensityLabel = new QLabel(tr("Flussdichte(B):")); + fieldFluxDensityLabel->setStatusTip(fieldFluxDensityString); ExpDoubleSpinBox* fieldFluxDensityBox = new ExpDoubleSpinBox; fieldFluxDensityBox->setRange(0,1e+200); @@ -92,6 +94,7 @@ void HomoBFieldWidget::createWidget() { fieldFluxDensityBox->setDisplayDecimals(3); fieldFluxDensityBox->setKeyboardTracking(false); fieldFluxDensityBox->setSuffix(" T"); + fieldFluxDensityBox->setStatusTip(fieldFluxDensityString); connect(homoBField ,SIGNAL(fluxDensityChanged(double)),fieldFluxDensityBox, SLOT(setValue(double)) ); connect(fieldFluxDensityBox, SIGNAL(valueChanged(double)),homoBField ,SLOT(setFluxDensity(double)) ); diff --git a/src/lsim.cpp b/src/lsim.cpp index a8fcdfd..4ff103d 100644 --- a/src/lsim.cpp +++ b/src/lsim.cpp @@ -103,6 +103,16 @@ void lsim::createActions() { acts.moveItemUp = new QAction (tr ("rauf"), this); acts.moveItemUp->setStatusTip (tr ("rauf")); connect (acts.moveItemUp, SIGNAL (triggered()), simulscene, SLOT (moveSelectedFieldItemUp())); + + acts.moveItemOnTop = new QAction (tr ("ganz rauf"), this); + acts.moveItemOnTop->setStatusTip (tr ("ganz rauf")); + connect (acts.moveItemOnTop, SIGNAL (triggered()), simulscene, SLOT (moveSelectedFieldItemOnTop())); + + acts.moveItemOnBottom = new QAction (tr ("ganz runter"), this); + acts.moveItemOnBottom->setStatusTip (tr ("ganz runter")); + //acts.moveItemOnBottom->setToolTip( tr ("Nach ganz unten absinken lassen")); + connect (acts.moveItemOnBottom, SIGNAL (triggered()), simulscene, SLOT (moveSelectedFieldItemOnBottom())); + //Edit, insert, Modechange acts.itemEditModeAct = new QAction (tr ("Edit"), this); @@ -169,8 +179,10 @@ void lsim::createToolBars() { editToolBar->addAction(acts.probeChargeItemPlaceAct); upDownToolBar=addToolBar(tr("updown")); + upDownToolBar->addAction(acts.moveItemOnBottom); upDownToolBar->addAction(acts.moveItemDown); upDownToolBar->addAction(acts.moveItemUp); + upDownToolBar->addAction(acts.moveItemOnTop); } diff --git a/src/lsim.h b/src/lsim.h index 4f176a4..082de72 100644 --- a/src/lsim.h +++ b/src/lsim.h @@ -89,6 +89,8 @@ class lsim: public QMainWindow { QAction *moveItemDown; QAction *moveItemUp; + QAction *moveItemOnTop; + QAction *moveItemOnBottom; QAction *itemEditModeAct; QAction *insertEFieldItemAct; diff --git a/src/simulscene.cpp b/src/simulscene.cpp index f078c4e..d077b2b 100644 --- a/src/simulscene.cpp +++ b/src/simulscene.cpp @@ -120,12 +120,14 @@ void SimulScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) { case HomoEFieldItemInsert: if (mouseEvent->button() != Qt::LeftButton) break; //benutze nur linke maustaste currHomoEfieldInsertItem = new HomoEFieldItem(QRectF(mouseEvent->scenePos(),mouseEvent->scenePos())); + currHomoEfieldInsertItem->setZValue(getHighestZIndexFieldItems() + FieldZStep); //zValue setzen addItem(currHomoEfieldInsertItem); QApplication::setOverrideCursor(QCursor(Qt::SizeFDiagCursor)); break; case HomoBFieldItemInsert: if (mouseEvent->button() != Qt::LeftButton) break; //benutze nur linke maustaste currHomoBfieldInsertItem = new HomoBFieldItem(QRectF(mouseEvent->scenePos(),mouseEvent->scenePos())); + currHomoBfieldInsertItem->setZValue(getHighestZIndexFieldItems()+FieldZStep); //zValue setzen addItem(currHomoBfieldInsertItem); QApplication::setOverrideCursor(QCursor(Qt::SizeFDiagCursor)); break; @@ -254,7 +256,6 @@ void SimulScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) { //das neue item auswaehlen clearSelection(); currHomoEfieldInsertItem->setSelected(true); - currHomoEfieldInsertItem->setZValue(getHighestZIndexFieldItems()+FieldZStep); //die resize items aus und einblenden bei rotation connect( currHomoEfieldInsertItem, SIGNAL(rotationChanged()), this, SLOT(displayResizeRects())); @@ -291,7 +292,6 @@ void SimulScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) { //das neue item auswaehlen clearSelection(); currHomoBfieldInsertItem->setSelected(true); - currHomoBfieldInsertItem->setZValue(getHighestZIndexFieldItems()+FieldZStep); //die resize items aus und einblenden bei rotation connect( currHomoBfieldInsertItem, SIGNAL(rotationChanged()), this, SLOT(displayResizeRects())); @@ -806,6 +806,9 @@ QList SimulScene::getFieldItemsInZOrder() { } if(!swapNeeded) break; } + //for (int i=0;i< currItems.count();++i) { + // qDebug()<< "sort: " <zValue(); + //} return currItems; } @@ -837,6 +840,50 @@ void SimulScene::moveFieldItemUp(QGraphicsItem* fieldItem) { } +void SimulScene::moveFieldItemOnTop(QGraphicsItem* fieldItem) { + if (!FieldItem::isFieldItem(fieldItem)) return; + qreal currFieldItemZValue = fieldItem->zValue(); + QList FieldItemsInZOrder = getFieldItemsInZOrder(); + + bool fieldItemHit = false; + for (int i = 0; i< FieldItemsInZOrder.count()-1;++i) {//currItem rauf wandern lassen + if (FieldItemsInZOrder.at(i) == fieldItem) { + fieldItemHit = true; + } + if (fieldItemHit) { + QGraphicsItem* swapper = FieldItemsInZOrder.at(i); + FieldItemsInZOrder[i] = FieldItemsInZOrder.at(i+1); + FieldItemsInZOrder[i+1] = swapper; + } + } + for (int i = 0;isetZValue( (FieldDefaultZValue + i*FieldZStep)); + } + +} + +void SimulScene::moveFieldItemOnBottom(QGraphicsItem* fieldItem) { + if (!FieldItem::isFieldItem(fieldItem)) return; + qreal currFieldItemZValue = fieldItem->zValue(); + QList FieldItemsInZOrder = getFieldItemsInZOrder(); + + bool fieldItemHit = false; + for (int i = FieldItemsInZOrder.count()-1; i>0 ;--i) { //currItem runter wandern lassen + if (FieldItemsInZOrder.at(i) == fieldItem) { + fieldItemHit = true; + } + if (fieldItemHit) { + QGraphicsItem* swapper = FieldItemsInZOrder.at(i); + FieldItemsInZOrder[i] = FieldItemsInZOrder.at(i-1); + FieldItemsInZOrder[i-1] = swapper; + } + } + for (int i = 0;isetZValue( (FieldDefaultZValue + i*FieldZStep)); + } + +} + void SimulScene::moveSelectedFieldItemDown() { if (selectedItems().isEmpty()) return; moveFieldItemDown(selectedItems().first()); @@ -844,4 +891,12 @@ void SimulScene::moveSelectedFieldItemDown() { void SimulScene::moveSelectedFieldItemUp() { if (selectedItems().isEmpty()) return; moveFieldItemUp(selectedItems().first()); +} +void SimulScene::moveSelectedFieldItemOnTop() { + if (selectedItems().isEmpty()) return; + moveFieldItemOnTop(selectedItems().first()); +} +void SimulScene::moveSelectedFieldItemOnBottom() { + if (selectedItems().isEmpty()) return; + moveFieldItemOnBottom(selectedItems().first()); } \ No newline at end of file diff --git a/src/simulscene.h b/src/simulscene.h index 7108e49..4242a57 100644 --- a/src/simulscene.h +++ b/src/simulscene.h @@ -92,6 +92,10 @@ class SimulScene : public QGraphicsScene { void moveSelectedFieldItemDown(); void moveFieldItemUp(QGraphicsItem* fieldItem); void moveSelectedFieldItemUp(); + void moveFieldItemOnTop(QGraphicsItem* fieldItem); + void moveSelectedFieldItemOnTop(); + void moveFieldItemOnBottom(QGraphicsItem* fieldItem); + void moveSelectedFieldItemOnBottom(); private slots: void displayResizeRects(bool move = false); @@ -160,8 +164,8 @@ class SimulScene : public QGraphicsScene { QList calcEFieldList; QList 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 + static const qreal FieldDefaultZValue = 10.0; //default z-value fuer Felder + static const qreal FieldZStep = 1e-10; //schritt, um den der z-index erhoeht wird