From aa9a70cd8b3d2349baeb3e7814727f19cdfe52bd Mon Sep 17 00:00:00 2001 From: catdog2 Date: Sat, 22 Nov 2008 16:45:09 +0000 Subject: [PATCH] stopper fertig git-svn-id: http://svn.lsim.tuxzone.org/trunk@21 4bec179b-ab65-46ed-a5f8-55b8b5c735d0 --- src/graphicsellipseitem.cpp | 1 + src/simulscene.cpp | 16 ++++++++++++++++ src/simulscene.h | 2 ++ src/stopperitem.cpp | 2 +- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/graphicsellipseitem.cpp b/src/graphicsellipseitem.cpp index 2d448ac..7972223 100644 --- a/src/graphicsellipseitem.cpp +++ b/src/graphicsellipseitem.cpp @@ -129,6 +129,7 @@ void GraphicsEllipseItem::calculateProbePath(QPointF startPoint) { speedListY->append(newspeedY); if (i%path_entry_step == 0 || i==steps) flightPath.lineTo(newPoint); + if (myScene->stopsHere(currProbePath->at(i-1),newPoint)) break; } qDebug()<< difftime(time(0),start_time); diff --git a/src/simulscene.cpp b/src/simulscene.cpp index fb7672e..1042123 100644 --- a/src/simulscene.cpp +++ b/src/simulscene.cpp @@ -755,6 +755,7 @@ void SimulScene::startCalculation() { //Feld Item Listen erzeugen (viel schneller, als jedes mal items(point) durchlaufen) calcEFieldList.clear(); calcBFieldList.clear(); + calcStopperList.clear(); for(int i = 0; i < items().size(); ++i) { //HomoEFieldItems Abarbeiten if (qgraphicsitem_cast (items().at(i)) != 0) { @@ -764,6 +765,10 @@ void SimulScene::startCalculation() { if (qgraphicsitem_cast (items().at(i)) != 0) { calcBFieldList << qgraphicsitem_cast(items().at(i)); } + //StopperItems Abarbeiten + if (qgraphicsitem_cast (items().at(i)) != 0) { + calcStopperList << qgraphicsitem_cast(items().at(i)); + } } @@ -850,6 +855,17 @@ double SimulScene::getPowerAt(QPointF point, double charge, double speedX, doubl } +bool SimulScene::stopsHere(const QPointF &p1, const QPointF &p2) { + QPainterPath myPath(p1); + myPath.lineTo(p2); + + for (int i = 0; i< calcStopperList.count(); ++i) { + QPainterPath itemPath = calcStopperList.at(i)->mapFromScene(myPath); + if (calcStopperList.at(i)->collidesWithPath(itemPath/*,Qt::IntersectsItemShape*/)) return true; + } + return false; +} + double SimulScene::getMeterPerPx() const { return meterPerPx; } diff --git a/src/simulscene.h b/src/simulscene.h index 5472899..a850bd9 100644 --- a/src/simulscene.h +++ b/src/simulscene.h @@ -67,6 +67,7 @@ class SimulScene : public QGraphicsScene { \param xy rückgabe in x oder y-Richtung */ double getPowerAt(QPointF point, double charge, double speedX, double speedY, char xy); + bool stopsHere(const QPointF &p1,const QPointF &p2); QWidget* getProbeDockWidget() const; @@ -171,6 +172,7 @@ class SimulScene : public QGraphicsScene { QList calcEFieldList; QList calcBFieldList; + QList calcStopperList; 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 diff --git a/src/stopperitem.cpp b/src/stopperitem.cpp index 347c7c1..52cc061 100644 --- a/src/stopperitem.cpp +++ b/src/stopperitem.cpp @@ -29,7 +29,7 @@ StopperItem::StopperItem(QPointF start, QPointF end): FieldItem() { setLine(QLineF(start,end)); stopperWidget = new StopperWidget(0,0,this); - setOuterPenWidth (2); + setOuterPenWidth (0); setFlag(ItemIsMovable); setFlag(ItemIsSelectable); setFlag(ItemIsFocusable);