aenderung der ueberlappung der felder sollte funktionieren

git-svn-id: http://svn.lsim.tuxzone.org/trunk@18 4bec179b-ab65-46ed-a5f8-55b8b5c735d0
This commit is contained in:
catdog2
2008-11-17 15:56:27 +00:00
parent 7c332f2358
commit ce2c7ac5ec
6 changed files with 82 additions and 6 deletions

View File

@@ -23,7 +23,7 @@
#include "simulscene.h"
#include <QGraphicsSceneWheelEvent>
#include <QDebug>
#include <QMenu>;
#include <QMenu>
FieldItem::FieldItem()
: QGraphicsItem() {

View File

@@ -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)) );

View File

@@ -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);
}

View File

@@ -89,6 +89,8 @@ class lsim: public QMainWindow {
QAction *moveItemDown;
QAction *moveItemUp;
QAction *moveItemOnTop;
QAction *moveItemOnBottom;
QAction *itemEditModeAct;
QAction *insertEFieldItemAct;

View File

@@ -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<QGraphicsItem*> SimulScene::getFieldItemsInZOrder() {
}
if(!swapNeeded) break;
}
//for (int i=0;i< currItems.count();++i) {
// qDebug()<< "sort: " <<currItems[i]->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<QGraphicsItem*> 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;i<FieldItemsInZOrder.count();++i) { //z-index fuer neue reihenfolge setzen
FieldItemsInZOrder[i]->setZValue( (FieldDefaultZValue + i*FieldZStep));
}
}
void SimulScene::moveFieldItemOnBottom(QGraphicsItem* fieldItem) {
if (!FieldItem::isFieldItem(fieldItem)) return;
qreal currFieldItemZValue = fieldItem->zValue();
QList<QGraphicsItem*> 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;i<FieldItemsInZOrder.count();++i) { //z-index fuer neue reihenfolge setzen
FieldItemsInZOrder[i]->setZValue( (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());
}

View File

@@ -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<HomoEFieldItem*> calcEFieldList;
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
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