jit imports
This commit is contained in:
parent
c3d70b4c76
commit
c5339f95e9
13
Car.py
13
Car.py
@ -1,14 +1,17 @@
|
||||
import sumolib
|
||||
from math import dist, ceil, sqrt, log, cos, sin, atan2, pi
|
||||
from random import randint, uniform
|
||||
from PySide6.QtGui import QPainter, QColor
|
||||
from PySide6.QtCore import QPointF, Signal, QObject, Qt
|
||||
from itertools import islice
|
||||
import time
|
||||
import globalImport
|
||||
|
||||
class updateSignals(QObject):
|
||||
updateDisp = Signal(tuple)
|
||||
addGraphPt = Signal(tuple)
|
||||
def pysideImports():
|
||||
globalImport("PySide6.QtGui", ["QPainter", "QColor"])
|
||||
globalImport("PySide6.QtCore", ["QPointF", "Signal", "QObject", "Qt"])
|
||||
|
||||
class updateSignals(QObject):
|
||||
updateDisp = Signal(tuple)
|
||||
addGraphPt = Signal(tuple)
|
||||
|
||||
class Car():
|
||||
CLIGNO_NONE = 0
|
||||
|
165
CarController.py
165
CarController.py
@ -1,99 +1,102 @@
|
||||
import sumolib
|
||||
from Car import Car
|
||||
from Flow import Flow
|
||||
from carInfo import Ui_carInfo
|
||||
from varEdit import Ui_varEdit
|
||||
from PySide6.QtWidgets import QWidget, QLabel, QToolBox
|
||||
from PySide6.QtCore import Qt, Slot, Signal, QThread
|
||||
from PySide6.QtCharts import QChart, QSplineSeries, QLineSeries
|
||||
from PySide6.QtGui import QColor
|
||||
from math import ceil, dist
|
||||
import globalImport
|
||||
|
||||
class carInfo(QWidget):
|
||||
def __init__(self,parent):
|
||||
super().__init__()
|
||||
self.ui = Ui_carInfo()
|
||||
self.ui.setupUi(self)
|
||||
self.maxV = 0
|
||||
self.parent = parent
|
||||
self.pointsCount = [0] * 4
|
||||
self.minX = 0
|
||||
def pysideImports():
|
||||
globalImport("carInfo", "Ui_carInfo")
|
||||
globalImport("varEdit", "Ui_varEdit")
|
||||
globalImport("PySide6.QtWidgets", ["QWidget, QLabel, QToolBox"])
|
||||
globalImport("PySide6.QtCore", ["Qt", "Slot", "Signal", "QThread"])
|
||||
globalImport("PySide6.QtCharts", ["QChart", "QSplineSeries", "QLineSeries"])
|
||||
globalImport("PySide6.QtGui", ["QColor"])
|
||||
|
||||
self.chart = self.ui.speedGraph.chart()
|
||||
#self.chart.setAnimationOptions(QChart.AllAnimations)
|
||||
class carInfo(QWidget):
|
||||
def __init__(self,parent):
|
||||
super().__init__()
|
||||
self.ui = Ui_carInfo()
|
||||
self.ui.setupUi(self)
|
||||
self.maxV = 0
|
||||
self.parent = parent
|
||||
self.pointsCount = [0] * 4
|
||||
self.minX = 0
|
||||
|
||||
speedsNames = ["vmax","vsec","Vitesse (m.s^-1)","inter vsec"]
|
||||
self.speedSeries = []
|
||||
for ind,s in enumerate(speedsNames):
|
||||
self.speedSeries.append(QLineSeries())
|
||||
self.speedSeries[ind].setName(s)
|
||||
# self.speedSeries[ind].setPointsVisible()
|
||||
self.chart.addSeries(self.speedSeries[ind])
|
||||
self.chart.createDefaultAxes()
|
||||
|
||||
@Slot(tuple)
|
||||
def addSpeedPoint(self,params):
|
||||
ind=params[0]
|
||||
if self.parent.currentWidget() != self:
|
||||
return
|
||||
t=params[1]
|
||||
val=params[2]
|
||||
if(self.pointsCount[ind] > 200):
|
||||
self.speedSeries[ind].remove(0)
|
||||
self.minX = max(self.minX,self.speedSeries[ind].at(0).x())
|
||||
self.pointsCount[ind] -= 1
|
||||
self.speedSeries[ind].append(t,val)
|
||||
self.pointsCount[ind] += 1
|
||||
self.chart = self.ui.speedGraph.chart()
|
||||
#self.chart.setAnimationOptions(QChart.AllAnimations)
|
||||
|
||||
if self.speedSeries[ind].count()>2:
|
||||
i = self.speedSeries[ind].count()-1
|
||||
pm2 = self.speedSeries[ind].at(i-2)
|
||||
pm1 = self.speedSeries[ind].at(i-1)
|
||||
pm0 = self.speedSeries[ind].at(i)
|
||||
diffL = (pm1.y() - pm2.y())/(pm1.x() - pm2.x())
|
||||
diffR = (pm0.y() - pm1.y())/(pm0.x() - pm1.x())
|
||||
diff2 = diffR - diffL
|
||||
if diff2 == 0:
|
||||
self.speedSeries[ind].remove(i-1)
|
||||
speedsNames = ["vmax","vsec","Vitesse (m.s^-1)","inter vsec"]
|
||||
self.speedSeries = []
|
||||
for ind,s in enumerate(speedsNames):
|
||||
self.speedSeries.append(QLineSeries())
|
||||
self.speedSeries[ind].setName(s)
|
||||
# self.speedSeries[ind].setPointsVisible()
|
||||
self.chart.addSeries(self.speedSeries[ind])
|
||||
self.chart.createDefaultAxes()
|
||||
|
||||
@Slot(tuple)
|
||||
def addSpeedPoint(self,params):
|
||||
ind=params[0]
|
||||
if self.parent.currentWidget() != self:
|
||||
return
|
||||
t=params[1]
|
||||
val=params[2]
|
||||
if(self.pointsCount[ind] > 200):
|
||||
self.speedSeries[ind].remove(0)
|
||||
self.minX = max(self.minX,self.speedSeries[ind].at(0).x())
|
||||
self.pointsCount[ind] -= 1
|
||||
self.speedSeries[ind].append(t,val)
|
||||
self.pointsCount[ind] += 1
|
||||
|
||||
xAxis = self.chart.axes(Qt.Horizontal,self.speedSeries[ind])[0]
|
||||
xAxis.setRange(self.minX,t)
|
||||
if self.speedSeries[ind].count()>2:
|
||||
i = self.speedSeries[ind].count()-1
|
||||
pm2 = self.speedSeries[ind].at(i-2)
|
||||
pm1 = self.speedSeries[ind].at(i-1)
|
||||
pm0 = self.speedSeries[ind].at(i)
|
||||
diffL = (pm1.y() - pm2.y())/(pm1.x() - pm2.x())
|
||||
diffR = (pm0.y() - pm1.y())/(pm0.x() - pm1.x())
|
||||
diff2 = diffR - diffL
|
||||
if diff2 == 0:
|
||||
self.speedSeries[ind].remove(i-1)
|
||||
self.pointsCount[ind] -= 1
|
||||
|
||||
if val>self.maxV:
|
||||
self.maxV = val
|
||||
yAxis = self.chart.axes(Qt.Vertical, self.speedSeries[ind])[0]
|
||||
yAxis.setMax(ceil(val+1))
|
||||
xAxis = self.chart.axes(Qt.Horizontal,self.speedSeries[ind])[0]
|
||||
xAxis.setRange(self.minX,t)
|
||||
|
||||
self.ui.speedGraph.update()
|
||||
|
||||
@Slot(tuple)
|
||||
def setVal(self,params):
|
||||
key = params[0]
|
||||
val = params[1]
|
||||
obj = self.findChild(QLabel,key)
|
||||
if obj is None:
|
||||
return
|
||||
obj.setText(f"{key} : {val}")
|
||||
obj.update()
|
||||
if val>self.maxV:
|
||||
self.maxV = val
|
||||
yAxis = self.chart.axes(Qt.Vertical, self.speedSeries[ind])[0]
|
||||
yAxis.setMax(ceil(val+1))
|
||||
|
||||
class varEdit(QWidget):
|
||||
def __init__(self, parent, carController, varName, value):
|
||||
super().__init__()
|
||||
self.ui = Ui_varEdit()
|
||||
self.ui.setupUi(self)
|
||||
self.ui.speedGraph.update()
|
||||
|
||||
@Slot(tuple)
|
||||
def setVal(self,params):
|
||||
key = params[0]
|
||||
val = params[1]
|
||||
obj = self.findChild(QLabel,key)
|
||||
if obj is None:
|
||||
return
|
||||
obj.setText(f"{key} : {val}")
|
||||
obj.update()
|
||||
|
||||
self.hookName = varName
|
||||
self.ui.name.setText(varName)
|
||||
self.ui.value.setValue(value)
|
||||
class varEdit(QWidget):
|
||||
def __init__(self, parent, carController, varName, value):
|
||||
super().__init__()
|
||||
self.ui = Ui_varEdit()
|
||||
self.ui.setupUi(self)
|
||||
|
||||
self.CC = carController
|
||||
self.hookName = varName
|
||||
self.ui.name.setText(varName)
|
||||
self.ui.value.setValue(value)
|
||||
|
||||
self.ui.value.valueChanged.connect(self.valueChanged)
|
||||
self.CC = carController
|
||||
|
||||
def valueChanged(self):
|
||||
value = self.ui.value.value()
|
||||
self.CC.updateConstant(self.hookName, value)
|
||||
self.ui.value.valueChanged.connect(self.valueChanged)
|
||||
|
||||
def valueChanged(self):
|
||||
value = self.ui.value.value()
|
||||
self.CC.updateConstant(self.hookName, value)
|
||||
|
||||
class CarController:
|
||||
def __init__(self, parentMap):
|
||||
@ -115,7 +118,9 @@ class CarController:
|
||||
|
||||
self.vroomEnable=True
|
||||
|
||||
def addParent(self, mainWindow):
|
||||
def addParent(self, mainWindow):
|
||||
pysideImports()
|
||||
|
||||
self.infoWidget=mainWindow.findChild(QToolBox, "carInfos")
|
||||
|
||||
varWidget = mainWindow.ui.constEdit
|
||||
|
13
Map.py
13
Map.py
@ -3,8 +3,16 @@
|
||||
# mais si on se decide à utiliser notre propre format dans le futur ça facilitera la transition
|
||||
|
||||
import sumolib
|
||||
from PySide6.QtGui import QPainter, QPolygonF
|
||||
from PySide6.QtCore import Qt, QPointF, QThread
|
||||
import globalImport
|
||||
|
||||
imported = False
|
||||
|
||||
def pysideImports():
|
||||
if imported:
|
||||
return
|
||||
globalImport("PySide6.QtGui", ["QPainter", "QPolygonF"])
|
||||
globalImport("PySide6.QtCore", ["Qt", "QPointF", "QThread"])
|
||||
imported = True
|
||||
|
||||
def safeCall(func):
|
||||
def inner(*args, **kwargs):
|
||||
@ -29,6 +37,7 @@ class Map:
|
||||
|
||||
@safeCall
|
||||
def draw(self, painter):
|
||||
pysideImports()
|
||||
for edge in self.net.getEdges():
|
||||
color=Qt.white
|
||||
if(edge.getFunction()=="internal"):
|
||||
|
8
globalImport.py
Normal file
8
globalImport.py
Normal file
@ -0,0 +1,8 @@
|
||||
def globalImport(namespace, childrens=None):
|
||||
if childrens is None:
|
||||
globals()[namespace] = __import__(namespace)
|
||||
elif isinstance(childrens, str):
|
||||
globals()[namespace] = __import__(f"{namespace}.{childrens}")
|
||||
else:
|
||||
for c in childrens:
|
||||
globals()[c] = __import__(f"{namespace}.{c}")
|
Loading…
x
Reference in New Issue
Block a user