commencé l'ui
This commit is contained in:
parent
d72d720f22
commit
91f55d2970
30
Car.py
30
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)
|
||||
|
@ -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
4
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):
|
||||
|
67
carInfo.py
Normal file
67
carInfo.py
Normal 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
56
carInfo.ui
Normal 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>
|
5
main.py
5
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")
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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]))
|
||||
|
28
window.py
28
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
|
||||
|
||||
|
37
window.ui
37
window.ui
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user