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): if(inverted):
self.laneShape.reverse() 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])
def __init__(self,carID,route,parentMap,parentController): #print(f"{self.id} : {startEdge.getID()} -> {nextEdge.getID()} via {laneId}")
def __init__(self,carID,route,parentMap,parentController,infoWidg):
self.id=carID self.id=carID
self.map=parentMap self.map=parentMap
self.controller=parentController self.controller=parentController
self.infoWidg=infoWidg
self.index=0 self.index=0
self.laneInd=0 self.laneInd=0
self.route=[] self.route=[]
route=list(map(self.map.getEdge,route)) self.pos=[0,0]
self.v=0
self.a=10
self.b=20
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:]): for r,rn in zip(route,route[1:]):
self.route.append(r) self.route.append(r)
conn=r.getConnections(rn) conn=r.getConnections(rn)
@ -46,16 +61,13 @@ class Car:
self.initPath() self.initPath()
self.pos=list(self.laneShape[0]) self.pos=list(self.laneShape[0])
self.v=0
self.a=10
self.b=20
def draw(self,painter): def draw(self,painter):
pt = QPointF(*self.pos) pt = QPointF(*self.pos)
painter.drawEllipse(pt,3,3) painter.drawEllipse(pt,3,3)
def conduite(self,vmax,leader,dt): def conduite(self,vmax,leader,dt):
if(leader==None): if(leader is None):
self.v=vmax self.v=vmax
return return
else: else:
@ -107,3 +119,7 @@ class Car:
self.pos[0]+=(endPos[0]-self.pos[0])*adv self.pos[0]+=(endPos[0]-self.pos[0])*adv
self.pos[1]+=(endPos[1]-self.pos[1])*adv self.pos[1]+=(endPos[1]-self.pos[1])*adv
lgt=0 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,24 +1,36 @@
import sumolib import sumolib
from Car import Car 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: class CarController:
def __init__(self,parentMap): def __init__(self,parentMap):
self.map=parentMap self.map=parentMap
self.cars=[] self.cars=[]
self.path = None
def setPath(self,path): def fromPath(self,path):
self.path = path self.cars=[]
def fromPath(self,path=None):
if(path == None):
if(self.path == None):
return
else:
path = self.path
for vehicle in sumolib.xml.parse(path,"vehicle"): for vehicle in sumolib.xml.parse(path,"vehicle"):
route=vehicle.route[0].edges.split() 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 def getCarsOnEdge(self,edgeID): # on devrai probablement utiliser une map ici (dict en python?) mais flemme
res=[] res=[]
@ -29,9 +41,15 @@ class CarController:
return res return res
def update(self): def update(self):
if(self.map.net is None):
return
for car in self.cars: for car in self.cars:
car.update(1.0/60) car.update(1.0/60)
def draw(self,painter): def draw(self,painter):
for car in self.cars: for car in self.cars:
car.draw(painter) 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: class Map:
def __init__(self,path=None): def __init__(self,path=None):
if path!=None: if path is not None:
self.fromPath(path) self.fromPath(path)
self.net = None self.net = None
@ -16,7 +16,7 @@ class Map:
self.net = sumolib.net.readNet(path,withInternal=True,withConnections=True) self.net = sumolib.net.readNet(path,withInternal=True,withConnections=True)
def isLoaded(self): def isLoaded(self):
return not (self.net == None) return not (self.net is None)
def safeCall(func): def safeCall(func):
def inner(*args, **kwargs): 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 = Ui_MainWindow()
self.ui.setupUi(self) self.ui.setupUi(self)
self.setAttribute(Qt.WA_TranslucentBackground)
self.setAttribute(Qt.WA_NoSystemBackground, False)
self.mainLoop = mainLoop(self) self.mainLoop = mainLoop(self)
self.mainLoop.addInfosDisplay(self.ui.infos)
fileMenu = self.menuBar().addMenu("&File") fileMenu = self.menuBar().addMenu("&File")
openMenu = fileMenu.addMenu("&Open") openMenu = fileMenu.addMenu("&Open")

View File

@ -26,13 +26,15 @@ class mainLoop():
self.map.fromPath(fileName[0]) self.map.fromPath(fileName[0])
self.painter.generateTransform() self.painter.generateTransform()
self.controller.fromPath() self.controller.prepareRoute()
def openVehicles(self): def openVehicles(self):
fileName = QFileDialog.getOpenFileName(self.parent,"Open Vehicle trip description", "./", "Route File (*.rou.xml)") fileName = QFileDialog.getOpenFileName(self.parent,"Open Vehicle trip description", "./", "Route File (*.rou.xml)")
if(fileName[0] == ''): if(fileName[0] == ''):
return return
self.controller.setPath(fileName[0]) self.controller.fromPath(fileName[0])
if(self.map.isLoaded()): 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): def generateTransform(self):
bounds = self.map.getBounds() bounds = self.map.getBounds()
if(bounds == None): if(bounds is None):
return return
bounds[0] = list(map(lambda b: b-10,bounds[0])) bounds[0] = list(map(lambda b: b-10,bounds[0]))
bounds[1] = list(map(lambda b: b+10, bounds[1])) 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, QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform) QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QGridLayout, QHBoxLayout, QMainWindow, from PySide6.QtWidgets import (QApplication, QGridLayout, QHBoxLayout, QMainWindow,
QMenuBar, QSizePolicy, QStatusBar, QWidget) QMenuBar, QSizePolicy, QStatusBar, QToolBox,
QWidget)
from mainPainter import mainPainter from mainPainter import mainPainter
@ -24,7 +25,8 @@ class Ui_MainWindow(object):
def setupUi(self, MainWindow): def setupUi(self, MainWindow):
if not MainWindow.objectName(): if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow") MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(800, 600) MainWindow.setEnabled(True)
MainWindow.resize(540, 360)
self.centralwidget = QWidget(MainWindow) self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget") self.centralwidget.setObjectName(u"centralwidget")
self.gridLayout = QGridLayout(self.centralwidget) self.gridLayout = QGridLayout(self.centralwidget)
@ -33,16 +35,33 @@ class Ui_MainWindow(object):
self.horizontalLayout.setObjectName(u"horizontalLayout") self.horizontalLayout.setObjectName(u"horizontalLayout")
self.mainSurf = mainPainter(self.centralwidget) self.mainSurf = mainPainter(self.centralwidget)
self.mainSurf.setObjectName(u"mainSurf") 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.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) self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget) MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow) self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar") 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) MainWindow.setMenuBar(self.menubar)
self.statusbar = QStatusBar(MainWindow) self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName(u"statusbar") self.statusbar.setObjectName(u"statusbar")
@ -50,6 +69,9 @@ class Ui_MainWindow(object):
self.retranslateUi(MainWindow) self.retranslateUi(MainWindow)
self.infos.setCurrentIndex(-1)
QMetaObject.connectSlotsByName(MainWindow) QMetaObject.connectSlotsByName(MainWindow)
# setupUi # setupUi

View File

@ -2,12 +2,15 @@
<ui version="4.0"> <ui version="4.0">
<class>MainWindow</class> <class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow"> <widget class="QMainWindow" name="MainWindow">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>800</width> <width>540</width>
<height>600</height> <height>360</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -18,7 +21,33 @@
<item row="0" column="0"> <item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <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> </item>
</layout> </layout>
</item> </item>
@ -29,7 +58,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>800</width> <width>540</width>
<height>27</height> <height>27</height>
</rect> </rect>
</property> </property>