dev: добавлена строка эффективности + добавлено сохранение UML в директорию

This commit is contained in:
Andrew 2024-11-13 12:35:00 +03:00
parent 7c09dde2d1
commit 1a36aa217b
12 changed files with 64 additions and 17 deletions

Binary file not shown.

View File

@ -7,9 +7,9 @@ from src.gui import Plotter, settingsWindow
class tabWidgetGenerator: class tabWidgetGenerator:
def __init__(self): def __init__(self, directory_to_save):
self.UMLgenerator = Request(server_url='http://www.plantuml.com/plantuml/svg/') self.UMLgenerator = Request(server_url='http://www.plantuml.com/plantuml/svg/')
self.uml_creator = UMLCreator(request_generator=self.UMLgenerator) self.uml_creator = UMLCreator(request_generator=self.UMLgenerator, path_to_save=directory_to_save)
self.operator_params = read_json("params/operator_params.json") self.operator_params = read_json("params/operator_params.json")
self.system_params = read_json("params/system_params.json") self.system_params = read_json("params/system_params.json")
self.operSettings = settingsWindow("params\operator_params.json", 'Operator', self._update) self.operSettings = settingsWindow("params\operator_params.json", 'Operator', self._update)
@ -21,6 +21,7 @@ class tabWidgetGenerator:
self.float_dicts = [] self.float_dicts = []
self.timings_dicts = [] self.timings_dicts = []
self.modes = [] self.modes = []
self.names = []
def get_widget(self, path): def get_widget(self, path):
self.paths.append(path) self.paths.append(path)
@ -35,6 +36,7 @@ class tabWidgetGenerator:
return ideal_time return ideal_time
def _getParsedData(self, path): def _getParsedData(self, path):
self.names.append(path)
parser = DiagramParser(system_config=self.system_params) parser = DiagramParser(system_config=self.system_params)
parser.setData(path) parser.setData(path)
self.bool_dicts.append(parser.getBoolDict()) self.bool_dicts.append(parser.getBoolDict())
@ -66,7 +68,8 @@ class tabWidgetGenerator:
bool_dict=self.bool_dicts[i], bool_dict=self.bool_dicts[i],
float_dict=self.float_dicts[i], float_dict=self.float_dicts[i],
mode = self.modes[i], mode = self.modes[i],
timings_dict=self.timings_dicts[i]) timings_dict=self.timings_dicts[i],
name = self.names[i])
def _show_settings(self): def _show_settings(self):

View File

@ -1,5 +1,6 @@
import pyqtgraph as pg import pyqtgraph as pg
from pyqtgraph.Qt import QtWidgets from pyqtgraph.Qt import QtWidgets
from PyQt5.QtCore import Qt
import numpy as np import numpy as np
from src.gui import qt_settings as qts from src.gui import qt_settings as qts
@ -34,6 +35,7 @@ class Plotter:
self.WeldTime = operator_config['time_wielding'] #[sec] self.WeldTime = operator_config['time_wielding'] #[sec]
self.WeldData = self.opt.calcPhaseGrow(self.idealTime[1]) self.WeldData = self.opt.calcPhaseGrow(self.idealTime[1])
self._updatePlots() self._updatePlots()
def _init_ui(self): def _init_ui(self):
self.widget = QtWidgets.QWidget() self.widget = QtWidgets.QWidget()
@ -47,7 +49,15 @@ class Plotter:
layout.addWidget(self.win) layout.addWidget(self.win)
self.settings_button = QtWidgets.QPushButton("Show settings") self.settings_button = QtWidgets.QPushButton("Show settings")
self.settings_button.setFixedWidth(160) self.settings_button.setFixedWidth(160)
layout.addWidget(self.settings_button) info_layout = QtWidgets.QHBoxLayout()
layout.addLayout(info_layout)
info_layout.addWidget(self.settings_button, alignment = Qt.AlignLeft)
info_layout.setSpacing(20)
self.efficiency = QtWidgets.QLabel()
info_layout.addWidget(self.efficiency, alignment = Qt.AlignRight)
self.p11, self.l11 = self._init_graph('Electrode force, closure', 'Force', 'N', 'Time', 'ms') self.p11, self.l11 = self._init_graph('Electrode force, closure', 'Force', 'N', 'Time', 'ms')
#self.p21, _ = self._init_graph('Electrode force, compression', 'Force', 'N', 'Time', 'ms') #self.p21, _ = self._init_graph('Electrode force, compression', 'Force', 'N', 'Time', 'ms')
@ -90,6 +100,25 @@ class Plotter:
if not self.theor_mode: if not self.theor_mode:
self._plotRealData() self._plotRealData()
self._form_idealdatGraph() self._form_idealdatGraph()
self._calcOurScore()
def _calcOurScore (self):
success = []
start = np.array(self.timings_dict["closure"])[:, 0]
end = np.array(self.timings_dict["opening"])[:, 1]
points_timings = end-start
ideal_time = sum(self.idealTime[:3])+self.WeldTime
for point in points_timings:
success.append(int(ideal_time/point * 100))
if len(success) > 1:
maxS = max(success)
minS = min(success)
average = int(sum(success[:])/len(success))
self.efficiency.setText(f'Efficiency Maximum: {maxS}%, Average: {average}%, Minimum: {minS}%' )
else:
self.efficiency.setText(f'Efficiency Maximum: {success[0]}' )
self.efficiency.setStyleSheet(qts.BigSuccessLabel)
def _form_idealdatGraph(self): def _form_idealdatGraph(self):

View File

@ -233,7 +233,13 @@ QPushButton:disabled {
} }
""" """
BigSuccessLabel = """
QLabel {
color: #ffffff;
font-size: 26px;
font-weight: bold;
font-family: "Segoe UI", sans-serif;
}"""
colors = [ colors = [
'#FF6F61', # яркий коралловый '#FF6F61', # яркий коралловый

View File

@ -53,7 +53,8 @@ class MainWindow(QMainWindow):
self.tabs = QTabWidget() self.tabs = QTabWidget()
self.tabs.setStyleSheet(qts.dark_style) self.tabs.setStyleSheet(qts.dark_style)
self.tabGen = tabWidgetGenerator() self.tabGen = tabWidgetGenerator(directory_to_watch)
self.handle_new_file()
self.setCentralWidget(self.tabs) self.setCentralWidget(self.tabs)
# self.setWindowIcon(QIcon("path_to_icon.png")) # self.setWindowIcon(QIcon("path_to_icon.png"))
@ -70,9 +71,13 @@ class MainWindow(QMainWindow):
self.watcher_thread.start() self.watcher_thread.start()
def handle_new_file(self, file_path): def handle_new_file(self, file_path = None):
time.sleep(0.2) time.sleep(0.2)
file_name = os.path.basename(file_path) if file_path:
file_name = os.path.basename(file_path)
else:
file_path = None
file_name = 'Ideal'
tab_widget = self.tabGen.get_widget(path=file_path) tab_widget = self.tabGen.get_widget(path=file_path)

View File

@ -2,8 +2,9 @@ from src.uml.request_generator import Request
class UMLCreator: class UMLCreator:
def __init__(self, request_generator: Request): def __init__(self, request_generator: Request, path_to_save: str):
self._request_generator = request_generator self._request_generator = request_generator
self.path_to_save = path_to_save
def _build_data(self): def _build_data(self):
@ -77,13 +78,14 @@ class UMLCreator:
self._request_generator.addConcise('RD', 'Real data') self._request_generator.addConcise('RD', 'Real data')
self._request_generator.setTimestamps('RD', real_data) self._request_generator.setTimestamps('RD', real_data)
else: self.name = self.path_to_save + '/Ideal'
self._request_generator.addConcise('CD', 'Client data') self._request_generator.addConcise('CD', 'Client data')
self._request_generator.setTimestamps('CD', client_data) self._request_generator.setTimestamps('CD', client_data)
self._request_generator.addConcise('ID', 'Ideal data') self._request_generator.addConcise('ID', 'Ideal data')
self._request_generator.setTimestamps('ID', ideal_data) self._request_generator.setTimestamps('ID', ideal_data)
try: try:
self._request_generator.generateSVG() self._request_generator.generateSVG(self.name)
except Exception as e: except Exception as e:
print(f"SVG generate error: {e}") print(f"SVG generate error: {e}")
@ -94,13 +96,15 @@ class UMLCreator:
bool_dict: dict, bool_dict: dict,
float_dict: dict, float_dict: dict,
timings_dict: dict, timings_dict: dict,
mode: bool): mode: bool,
name:str):
self._ideal_time = ideal_time self._ideal_time = ideal_time
self.bool_dict = bool_dict self.bool_dict = bool_dict
self.float_dict = float_dict self.float_dict = float_dict
self.timings_dict = timings_dict self.timings_dict = timings_dict
self.theor_mode = mode self.theor_mode = mode
self.name = name
self.scaler = int(system_config['UML_time_scaler']) self.scaler = int(system_config['UML_time_scaler'])
self.WeldTime = operator_config['time_wielding'] self.WeldTime = operator_config['time_wielding']

View File

@ -48,10 +48,10 @@ class Request:
def addLineStyle(self, name, color = 'green', thicknes = 1): def addLineStyle(self, name, color = 'green', thicknes = 1):
self.lineStyles[name] = [f'LineColor {color}', f'LineThickness {thicknes}'] self.lineStyles[name] = [f'LineColor {color}', f'LineThickness {thicknes}']
def generateSVG(self): def generateSVG(self, name):
self._compileUML() self._compileUML(name)
filename = abspath('UML.txt') filename = abspath(f'{name}.txt')
self.server.processes_file(filename, outfile='UML.svg') self.server.processes_file(filename, outfile=f'{name}.svg')
#result = self.server.processes(self.stringUML) #result = self.server.processes(self.stringUML)
#return result #return result
@ -82,7 +82,7 @@ class Request:
def _addVariables(self): def _addVariables(self):
for var in self.variables: self.reqArr.append(str(var)) for var in self.variables: self.reqArr.append(str(var))
def _compileUML(self): def _compileUML(self, name):
self._addHeader() self._addHeader()
self._addVariables() self._addVariables()
@ -92,7 +92,7 @@ class Request:
self._endUML() self._endUML()
self.stringUML = [line + '\n' for line in self.reqArr] self.stringUML = [line + '\n' for line in self.reqArr]
with open('UML.txt', 'w', encoding='utf-8') as file: with open(f'{name}.txt', 'w', encoding='utf-8') as file:
file.writelines(self.stringUML) file.writelines(self.stringUML)