jit imports

This commit is contained in:
leo 2022-05-23 21:51:58 +02:00
parent c3d70b4c76
commit c5339f95e9
Signed by: leo
GPG Key ID: 0DD993BFB2B307DB
4 changed files with 112 additions and 87 deletions

13
Car.py
View File

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

View File

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

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