diff --git a/Car.py b/Car.py
index e7c37aa..c0ffd36 100644
--- a/Car.py
+++ b/Car.py
@@ -17,18 +17,33 @@ class Car:
if(inverted):
self.laneShape.reverse()
- print(f"{self.id} : {startEdge.getID()} -> {nextEdge.getID()} via {laneId}")
+ self.infoWidg.setVal("Index",f"{self.index}/{len(self.route)}")
+ self.infoWidg.setVal("Edge",self.route[self.index])
+
+ #print(f"{self.id} : {startEdge.getID()} -> {nextEdge.getID()} via {laneId}")
- def __init__(self,carID,route,parentMap,parentController):
+ def __init__(self,carID,route,parentMap,parentController,infoWidg):
self.id=carID
self.map=parentMap
self.controller=parentController
+ self.infoWidg=infoWidg
self.index=0
self.laneInd=0
self.route=[]
+
+ self.pos=[0,0]
+ self.v=0
+ self.a=10
+ self.b=20
- route=list(map(self.map.getEdge,route))
+ self.infoWidg.setVal("Position",self.pos)
+ self.infoWidg.setVal("Vitesse",self.v)
+ self.infoWidg.setVal("Index",f"{self.index}/{len(route)}")
+ self.rawRoute = route
+
+ def prepareRoute(self):
+ route = list(map(self.map.getEdge,self.rawRoute))
for r,rn in zip(route,route[1:]):
self.route.append(r)
conn=r.getConnections(rn)
@@ -46,16 +61,13 @@ class Car:
self.initPath()
self.pos=list(self.laneShape[0])
- self.v=0
- self.a=10
- self.b=20
def draw(self,painter):
pt = QPointF(*self.pos)
painter.drawEllipse(pt,3,3)
def conduite(self,vmax,leader,dt):
- if(leader==None):
+ if(leader is None):
self.v=vmax
return
else:
@@ -107,3 +119,7 @@ class Car:
self.pos[0]+=(endPos[0]-self.pos[0])*adv
self.pos[1]+=(endPos[1]-self.pos[1])*adv
lgt=0
+
+ self.infoWidg.setVal("Position", self.pos)
+ self.infoWidg.setVal("Vitesse", self.v)
+ self.infoWidg.setVal("Leader", leader if leader is None else leader.id)
diff --git a/CarController.py b/CarController.py
index 91b633d..b98075f 100644
--- a/CarController.py
+++ b/CarController.py
@@ -1,25 +1,37 @@
import sumolib
from Car import Car
+from carInfo import Ui_carInfo
+from PySide6.QtWidgets import QWidget, QLabel
+
+class carInfo(QWidget):
+ def __init__(self):
+ super(carInfo,self).__init__()
+ self.ui = Ui_carInfo()
+ self.ui.setupUi(self)
+
+ def setVal(self,key,val):
+ obj = self.findChild(QLabel,key)
+ if(obj is None):
+ return
+ obj.setText(f"{key} : {val}")
+ obj.update()
class CarController:
def __init__(self,parentMap):
self.map=parentMap
self.cars=[]
- self.path = None
- def setPath(self,path):
- self.path = path
-
- def fromPath(self,path=None):
- if(path == None):
- if(self.path == None):
- return
- else:
- path = self.path
+ def fromPath(self,path):
+ self.cars=[]
for vehicle in sumolib.xml.parse(path,"vehicle"):
route=vehicle.route[0].edges.split()
- self.cars.append(Car(vehicle.id,route,self.map,self))
+ wId=self.infoWidget.addItem(carInfo(), vehicle.id)
+ self.cars.append(Car(vehicle.id,route,self.map,self,self.infoWidget.widget(wId)))
+ def prepareRoute(self):
+ for car in self.cars:
+ car.prepareRoute()
+
def getCarsOnEdge(self,edgeID): # on devrai probablement utiliser une map ici (dict en python?) mais flemme
res=[]
for car in self.cars:
@@ -29,9 +41,15 @@ class CarController:
return res
def update(self):
+ if(self.map.net is None):
+ return
for car in self.cars:
car.update(1.0/60)
def draw(self,painter):
for car in self.cars:
car.draw(painter)
+
+ def setInfoWidget(self, widget):
+ self.infoWidget = widget
+
diff --git a/Map.py b/Map.py
index dac02da..e64b372 100644
--- a/Map.py
+++ b/Map.py
@@ -8,7 +8,7 @@ from PySide6.QtCore import Qt, QPointF
class Map:
def __init__(self,path=None):
- if path!=None:
+ if path is not None:
self.fromPath(path)
self.net = None
@@ -16,7 +16,7 @@ class Map:
self.net = sumolib.net.readNet(path,withInternal=True,withConnections=True)
def isLoaded(self):
- return not (self.net == None)
+ return not (self.net is None)
def safeCall(func):
def inner(*args, **kwargs):
diff --git a/carInfo.py b/carInfo.py
new file mode 100644
index 0000000..652ba5d
--- /dev/null
+++ b/carInfo.py
@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+
+################################################################################
+## Form generated from reading UI file 'carInfo.ui'
+##
+## Created by: Qt User Interface Compiler version 6.2.3
+##
+## WARNING! All changes made in this file will be lost when recompiling UI file!
+################################################################################
+
+from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
+ QMetaObject, QObject, QPoint, QRect,
+ QSize, QTime, QUrl, Qt)
+from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
+ QFont, QFontDatabase, QGradient, QIcon,
+ QImage, QKeySequence, QLinearGradient, QPainter,
+ QPalette, QPixmap, QRadialGradient, QTransform)
+from PySide6.QtWidgets import (QApplication, QLabel, QSizePolicy, QVBoxLayout,
+ QWidget)
+
+class Ui_carInfo(object):
+ def setupUi(self, carInfo):
+ if not carInfo.objectName():
+ carInfo.setObjectName(u"carInfo")
+ carInfo.resize(378, 472)
+ self.verticalLayout = QVBoxLayout(carInfo)
+ self.verticalLayout.setObjectName(u"verticalLayout")
+ self.Position = QLabel(carInfo)
+ self.Position.setObjectName(u"Position")
+
+ self.verticalLayout.addWidget(self.Position)
+
+ self.Vitesse = QLabel(carInfo)
+ self.Vitesse.setObjectName(u"Vitesse")
+
+ self.verticalLayout.addWidget(self.Vitesse)
+
+ self.Index = QLabel(carInfo)
+ self.Index.setObjectName(u"Index")
+
+ self.verticalLayout.addWidget(self.Index)
+
+ self.Edge = QLabel(carInfo)
+ self.Edge.setObjectName(u"Edge")
+
+ self.verticalLayout.addWidget(self.Edge)
+
+ self.Leader = QLabel(carInfo)
+ self.Leader.setObjectName(u"Leader")
+
+ self.verticalLayout.addWidget(self.Leader)
+
+
+ self.retranslateUi(carInfo)
+
+ QMetaObject.connectSlotsByName(carInfo)
+ # setupUi
+
+ def retranslateUi(self, carInfo):
+ carInfo.setWindowTitle(QCoreApplication.translate("carInfo", u"Form", None))
+ self.Position.setText(QCoreApplication.translate("carInfo", u"TextLabel", None))
+ self.Vitesse.setText(QCoreApplication.translate("carInfo", u"TextLabel", None))
+ self.Index.setText(QCoreApplication.translate("carInfo", u"TextLabel", None))
+ self.Edge.setText(QCoreApplication.translate("carInfo", u"TextLabel", None))
+ self.Leader.setText(QCoreApplication.translate("carInfo", u"TextLabel", None))
+ # retranslateUi
+
diff --git a/carInfo.ui b/carInfo.ui
new file mode 100644
index 0000000..dfb9a13
--- /dev/null
+++ b/carInfo.ui
@@ -0,0 +1,56 @@
+
+
+ carInfo
+
+
+
+ 0
+ 0
+ 378
+ 472
+
+
+
+ Form
+
+
+ -
+
+
+ TextLabel
+
+
+
+ -
+
+
+ TextLabel
+
+
+
+ -
+
+
+ TextLabel
+
+
+
+ -
+
+
+ TextLabel
+
+
+
+ -
+
+
+ TextLabel
+
+
+
+
+
+
+
+
diff --git a/main.py b/main.py
index d693cae..65d3183 100644
--- a/main.py
+++ b/main.py
@@ -19,11 +19,10 @@ class MainWindow(QMainWindow):
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
- self.setAttribute(Qt.WA_TranslucentBackground)
- self.setAttribute(Qt.WA_NoSystemBackground, False)
-
self.mainLoop = mainLoop(self)
+ self.mainLoop.addInfosDisplay(self.ui.infos)
+
fileMenu = self.menuBar().addMenu("&File")
openMenu = fileMenu.addMenu("&Open")
diff --git a/mainLoop.py b/mainLoop.py
index 24c6d45..fb95668 100644
--- a/mainLoop.py
+++ b/mainLoop.py
@@ -26,13 +26,15 @@ class mainLoop():
self.map.fromPath(fileName[0])
self.painter.generateTransform()
- self.controller.fromPath()
+ self.controller.prepareRoute()
def openVehicles(self):
fileName = QFileDialog.getOpenFileName(self.parent,"Open Vehicle trip description", "./", "Route File (*.rou.xml)")
if(fileName[0] == ''):
return
- self.controller.setPath(fileName[0])
+ self.controller.fromPath(fileName[0])
if(self.map.isLoaded()):
- self.controller.fromPath()
+ self.controller.prepareRoute()
+ def addInfosDisplay(self, widget):
+ self.controller.setInfoWidget(widget)
diff --git a/mainPainter.py b/mainPainter.py
index 1690918..7957d75 100644
--- a/mainPainter.py
+++ b/mainPainter.py
@@ -19,7 +19,7 @@ class mainPainter(QOpenGLWidget):
def generateTransform(self):
bounds = self.map.getBounds()
- if(bounds == None):
+ if(bounds is None):
return
bounds[0] = list(map(lambda b: b-10,bounds[0]))
bounds[1] = list(map(lambda b: b+10, bounds[1]))
diff --git a/window.py b/window.py
index 2a2d6cc..a15c94b 100644
--- a/window.py
+++ b/window.py
@@ -16,7 +16,8 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QGridLayout, QHBoxLayout, QMainWindow,
- QMenuBar, QSizePolicy, QStatusBar, QWidget)
+ QMenuBar, QSizePolicy, QStatusBar, QToolBox,
+ QWidget)
from mainPainter import mainPainter
@@ -24,7 +25,8 @@ class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
- MainWindow.resize(800, 600)
+ MainWindow.setEnabled(True)
+ MainWindow.resize(540, 360)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.gridLayout = QGridLayout(self.centralwidget)
@@ -33,16 +35,33 @@ class Ui_MainWindow(object):
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.mainSurf = mainPainter(self.centralwidget)
self.mainSurf.setObjectName(u"mainSurf")
+ self.mainSurf.setEnabled(True)
+ sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
+ sizePolicy.setHorizontalStretch(2)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.mainSurf.sizePolicy().hasHeightForWidth())
+ self.mainSurf.setSizePolicy(sizePolicy)
self.horizontalLayout.addWidget(self.mainSurf)
+ self.infos = QToolBox(self.centralwidget)
+ self.infos.setObjectName(u"infos")
+ self.infos.setEnabled(True)
+ sizePolicy1 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
+ sizePolicy1.setHorizontalStretch(1)
+ sizePolicy1.setVerticalStretch(0)
+ sizePolicy1.setHeightForWidth(self.infos.sizePolicy().hasHeightForWidth())
+ self.infos.setSizePolicy(sizePolicy1)
+
+ self.horizontalLayout.addWidget(self.infos)
+
self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar")
- self.menubar.setGeometry(QRect(0, 0, 800, 27))
+ self.menubar.setGeometry(QRect(0, 0, 540, 27))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName(u"statusbar")
@@ -50,6 +69,9 @@ class Ui_MainWindow(object):
self.retranslateUi(MainWindow)
+ self.infos.setCurrentIndex(-1)
+
+
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
diff --git a/window.ui b/window.ui
index d2248e6..f3b6012 100644
--- a/window.ui
+++ b/window.ui
@@ -2,12 +2,15 @@
MainWindow
+
+ true
+
0
0
- 800
- 600
+ 540
+ 360
@@ -18,7 +21,33 @@
-
-
-
+
+
+ true
+
+
+
+ 2
+ 0
+
+
+
+
+ -
+
+
+ true
+
+
+
+ 1
+ 0
+
+
+
+ -1
+
+
@@ -29,7 +58,7 @@
0
0
- 800
+ 540
27