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