commencé l'ui

This commit is contained in:
leo 2022-02-14 17:23:47 +01:00
parent d72d720f22
commit 91f55d2970
Signed by: leo
GPG Key ID: 0DD993BFB2B307DB
10 changed files with 243 additions and 34 deletions

30
Car.py
View File

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

View File

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

4
Map.py
View File

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

67
carInfo.py Normal file
View File

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

56
carInfo.ui Normal file
View File

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>carInfo</class>
<widget class="QWidget" name="carInfo">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>378</width>
<height>472</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="Position">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="Vitesse">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="Index">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="Edge">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="Leader">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

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

View File

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

View File

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

View File

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

View File

@ -2,12 +2,15 @@
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
<width>540</width>
<height>360</height>
</rect>
</property>
<property name="windowTitle">
@ -18,7 +21,33 @@
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="mainPainter" name="mainSurf"/>
<widget class="mainPainter" name="mainSurf">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QToolBox" name="infos">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="currentIndex">
<number>-1</number>
</property>
</widget>
</item>
</layout>
</item>
@ -29,7 +58,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<width>540</width>
<height>27</height>
</rect>
</property>