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:
@@ -23,7 +23,7 @@
|
|||||||
#include "simulscene.h"
|
#include "simulscene.h"
|
||||||
#include <QGraphicsSceneWheelEvent>
|
#include <QGraphicsSceneWheelEvent>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QMenu>;
|
#include <QMenu>
|
||||||
|
|
||||||
FieldItem::FieldItem()
|
FieldItem::FieldItem()
|
||||||
: QGraphicsItem() {
|
: QGraphicsItem() {
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ void HomoBFieldWidget::createWidget() {
|
|||||||
QDoubleSpinBox *posYBox = new QDoubleSpinBox;
|
QDoubleSpinBox *posYBox = new QDoubleSpinBox;
|
||||||
posYBox->setRange(-5000, 5000);
|
posYBox->setRange(-5000, 5000);
|
||||||
posYBox->setKeyboardTracking(false);
|
posYBox->setKeyboardTracking(false);
|
||||||
|
posYBox->setStatusTip("Position des Feldes in y-Richtung");
|
||||||
connect(homoBField ,SIGNAL(ScenePosYChanged(double)),posYBox, SLOT(setValue(double)) );
|
connect(homoBField ,SIGNAL(ScenePosYChanged(double)),posYBox, SLOT(setValue(double)) );
|
||||||
connect(posYBox, SIGNAL(valueChanged(double)),homoBField ,SLOT(setScenePosY(double)) );
|
connect(posYBox, SIGNAL(valueChanged(double)),homoBField ,SLOT(setScenePosY(double)) );
|
||||||
|
|
||||||
@@ -83,8 +84,9 @@ void HomoBFieldWidget::createWidget() {
|
|||||||
QGroupBox* geometryBox = new QGroupBox(tr("Geometrie"));
|
QGroupBox* geometryBox = new QGroupBox(tr("Geometrie"));
|
||||||
geometryBox->setLayout(geomGridLayout);
|
geometryBox->setLayout(geomGridLayout);
|
||||||
|
|
||||||
|
QString fieldFluxDensityString = tr("Die Manetische Flussdichte B in Tesla");
|
||||||
QLabel* fieldFluxDensityLabel = new QLabel(tr("Flussdichte(B):"));
|
QLabel* fieldFluxDensityLabel = new QLabel(tr("Flussdichte(B):"));
|
||||||
|
fieldFluxDensityLabel->setStatusTip(fieldFluxDensityString);
|
||||||
|
|
||||||
ExpDoubleSpinBox* fieldFluxDensityBox = new ExpDoubleSpinBox;
|
ExpDoubleSpinBox* fieldFluxDensityBox = new ExpDoubleSpinBox;
|
||||||
fieldFluxDensityBox->setRange(0,1e+200);
|
fieldFluxDensityBox->setRange(0,1e+200);
|
||||||
@@ -92,6 +94,7 @@ void HomoBFieldWidget::createWidget() {
|
|||||||
fieldFluxDensityBox->setDisplayDecimals(3);
|
fieldFluxDensityBox->setDisplayDecimals(3);
|
||||||
fieldFluxDensityBox->setKeyboardTracking(false);
|
fieldFluxDensityBox->setKeyboardTracking(false);
|
||||||
fieldFluxDensityBox->setSuffix(" T");
|
fieldFluxDensityBox->setSuffix(" T");
|
||||||
|
fieldFluxDensityBox->setStatusTip(fieldFluxDensityString);
|
||||||
connect(homoBField ,SIGNAL(fluxDensityChanged(double)),fieldFluxDensityBox, SLOT(setValue(double)) );
|
connect(homoBField ,SIGNAL(fluxDensityChanged(double)),fieldFluxDensityBox, SLOT(setValue(double)) );
|
||||||
connect(fieldFluxDensityBox, SIGNAL(valueChanged(double)),homoBField ,SLOT(setFluxDensity(double)) );
|
connect(fieldFluxDensityBox, SIGNAL(valueChanged(double)),homoBField ,SLOT(setFluxDensity(double)) );
|
||||||
|
|
||||||
|
|||||||
12
src/lsim.cpp
12
src/lsim.cpp
@@ -103,6 +103,16 @@ void lsim::createActions() {
|
|||||||
acts.moveItemUp = new QAction (tr ("rauf"), this);
|
acts.moveItemUp = new QAction (tr ("rauf"), this);
|
||||||
acts.moveItemUp->setStatusTip (tr ("rauf"));
|
acts.moveItemUp->setStatusTip (tr ("rauf"));
|
||||||
connect (acts.moveItemUp, SIGNAL (triggered()), simulscene, SLOT (moveSelectedFieldItemUp()));
|
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
|
//Edit, insert, Modechange
|
||||||
|
|
||||||
acts.itemEditModeAct = new QAction (tr ("Edit"), this);
|
acts.itemEditModeAct = new QAction (tr ("Edit"), this);
|
||||||
@@ -169,8 +179,10 @@ void lsim::createToolBars() {
|
|||||||
editToolBar->addAction(acts.probeChargeItemPlaceAct);
|
editToolBar->addAction(acts.probeChargeItemPlaceAct);
|
||||||
|
|
||||||
upDownToolBar=addToolBar(tr("updown"));
|
upDownToolBar=addToolBar(tr("updown"));
|
||||||
|
upDownToolBar->addAction(acts.moveItemOnBottom);
|
||||||
upDownToolBar->addAction(acts.moveItemDown);
|
upDownToolBar->addAction(acts.moveItemDown);
|
||||||
upDownToolBar->addAction(acts.moveItemUp);
|
upDownToolBar->addAction(acts.moveItemUp);
|
||||||
|
upDownToolBar->addAction(acts.moveItemOnTop);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -89,6 +89,8 @@ class lsim: public QMainWindow {
|
|||||||
|
|
||||||
QAction *moveItemDown;
|
QAction *moveItemDown;
|
||||||
QAction *moveItemUp;
|
QAction *moveItemUp;
|
||||||
|
QAction *moveItemOnTop;
|
||||||
|
QAction *moveItemOnBottom;
|
||||||
|
|
||||||
QAction *itemEditModeAct;
|
QAction *itemEditModeAct;
|
||||||
QAction *insertEFieldItemAct;
|
QAction *insertEFieldItemAct;
|
||||||
|
|||||||
@@ -120,12 +120,14 @@ void SimulScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) {
|
|||||||
case HomoEFieldItemInsert:
|
case HomoEFieldItemInsert:
|
||||||
if (mouseEvent->button() != Qt::LeftButton) break; //benutze nur linke maustaste
|
if (mouseEvent->button() != Qt::LeftButton) break; //benutze nur linke maustaste
|
||||||
currHomoEfieldInsertItem = new HomoEFieldItem(QRectF(mouseEvent->scenePos(),mouseEvent->scenePos()));
|
currHomoEfieldInsertItem = new HomoEFieldItem(QRectF(mouseEvent->scenePos(),mouseEvent->scenePos()));
|
||||||
|
currHomoEfieldInsertItem->setZValue(getHighestZIndexFieldItems() + FieldZStep); //zValue setzen
|
||||||
addItem(currHomoEfieldInsertItem);
|
addItem(currHomoEfieldInsertItem);
|
||||||
QApplication::setOverrideCursor(QCursor(Qt::SizeFDiagCursor));
|
QApplication::setOverrideCursor(QCursor(Qt::SizeFDiagCursor));
|
||||||
break;
|
break;
|
||||||
case HomoBFieldItemInsert:
|
case HomoBFieldItemInsert:
|
||||||
if (mouseEvent->button() != Qt::LeftButton) break; //benutze nur linke maustaste
|
if (mouseEvent->button() != Qt::LeftButton) break; //benutze nur linke maustaste
|
||||||
currHomoBfieldInsertItem = new HomoBFieldItem(QRectF(mouseEvent->scenePos(),mouseEvent->scenePos()));
|
currHomoBfieldInsertItem = new HomoBFieldItem(QRectF(mouseEvent->scenePos(),mouseEvent->scenePos()));
|
||||||
|
currHomoBfieldInsertItem->setZValue(getHighestZIndexFieldItems()+FieldZStep); //zValue setzen
|
||||||
addItem(currHomoBfieldInsertItem);
|
addItem(currHomoBfieldInsertItem);
|
||||||
QApplication::setOverrideCursor(QCursor(Qt::SizeFDiagCursor));
|
QApplication::setOverrideCursor(QCursor(Qt::SizeFDiagCursor));
|
||||||
break;
|
break;
|
||||||
@@ -254,7 +256,6 @@ 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()));
|
||||||
@@ -291,7 +292,6 @@ 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()));
|
||||||
@@ -806,6 +806,9 @@ QList<QGraphicsItem*> SimulScene::getFieldItemsInZOrder() {
|
|||||||
}
|
}
|
||||||
if(!swapNeeded) break;
|
if(!swapNeeded) break;
|
||||||
}
|
}
|
||||||
|
//for (int i=0;i< currItems.count();++i) {
|
||||||
|
// qDebug()<< "sort: " <<currItems[i]->zValue();
|
||||||
|
//}
|
||||||
return currItems;
|
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() {
|
void SimulScene::moveSelectedFieldItemDown() {
|
||||||
if (selectedItems().isEmpty()) return;
|
if (selectedItems().isEmpty()) return;
|
||||||
moveFieldItemDown(selectedItems().first());
|
moveFieldItemDown(selectedItems().first());
|
||||||
@@ -845,3 +892,11 @@ void SimulScene::moveSelectedFieldItemUp() {
|
|||||||
if (selectedItems().isEmpty()) return;
|
if (selectedItems().isEmpty()) return;
|
||||||
moveFieldItemUp(selectedItems().first());
|
moveFieldItemUp(selectedItems().first());
|
||||||
}
|
}
|
||||||
|
void SimulScene::moveSelectedFieldItemOnTop() {
|
||||||
|
if (selectedItems().isEmpty()) return;
|
||||||
|
moveFieldItemOnTop(selectedItems().first());
|
||||||
|
}
|
||||||
|
void SimulScene::moveSelectedFieldItemOnBottom() {
|
||||||
|
if (selectedItems().isEmpty()) return;
|
||||||
|
moveFieldItemOnBottom(selectedItems().first());
|
||||||
|
}
|
||||||
@@ -92,6 +92,10 @@ class SimulScene : public QGraphicsScene {
|
|||||||
void moveSelectedFieldItemDown();
|
void moveSelectedFieldItemDown();
|
||||||
void moveFieldItemUp(QGraphicsItem* fieldItem);
|
void moveFieldItemUp(QGraphicsItem* fieldItem);
|
||||||
void moveSelectedFieldItemUp();
|
void moveSelectedFieldItemUp();
|
||||||
|
void moveFieldItemOnTop(QGraphicsItem* fieldItem);
|
||||||
|
void moveSelectedFieldItemOnTop();
|
||||||
|
void moveFieldItemOnBottom(QGraphicsItem* fieldItem);
|
||||||
|
void moveSelectedFieldItemOnBottom();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void displayResizeRects(bool move = false);
|
void displayResizeRects(bool move = false);
|
||||||
@@ -160,8 +164,8 @@ 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 FieldDefaultZValue = 10.0; //default z-value fuer Felder
|
||||||
static const qreal FieldZStep = 1e-50; //schritt, um den der z-index erhoeht wird
|
static const qreal FieldZStep = 1e-10; //schritt, um den der z-index erhoeht wird
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user