WeldingSpotPerformance/src/uml/creator.py

101 lines
4.2 KiB
Python
Raw Normal View History

from src.uml.request_generator import Request
class UMLCreator:
def __init__(self, request_generator: Request):
self._request_generator = request_generator
def _build_data(self):
real_data = []
ideal_data = []
if not self.theor_mode:
for key, items in self.timings_dict.items():
if key == 'closure': ideal_time = self._ideal_time[0]
elif key == 'compression': ideal_time = self._ideal_time[1]
elif key == 'welding': self.WeldTime
elif key == 'opening': ideal_time = self._ideal_time[2]
for item in items:
real_data.append([item[0]*self.scaler+0.0001, str(key) + '#green'])
real_data.append([item[1]*self.scaler, '{-}'])
ideal_data.append([item[0]*self.scaler+0.0001, str(key) + '#yellow'])
ideal_data.append([(item[0]+ideal_time)*self.scaler, '{-}'])
else:
real_data = []
client_data = [
[0.0 * self.scaler, 'closure'],
[0.165 * self.scaler, '{-}'],
[0.166 * self.scaler, 'compression'],
[0.176 * self.scaler, '{-}'],
[0.180*self.scaler, 'welding'],
[0.200*self.scaler, '{-}'],
[0.210 * self.scaler, 'opening'],
[0.300 * self.scaler, '{-}'],
]
ideal_data = [
[0.0 * self.scaler, 'closure #yellow'],
[self._ideal_time[0] * self.scaler, '{-}'],
[(self._ideal_time[0] + 0.0001) * self.scaler, 'compression #yellow'],
[(self._ideal_time[0] + self._ideal_time[1]) * self.scaler, '{-}'],
[(self._ideal_time[0] + self._ideal_time[1]+ 0.0001) * self.scaler, 'welding #yellow'],
[(self._ideal_time[0] + self._ideal_time[1] + self.WeldTime)*self.scaler, '{-}'],
[(self._ideal_time[0] + self._ideal_time[1] + 0.0001 + self.WeldTime) * self.scaler, 'opening #yellow'],
[(self._ideal_time[0] + self._ideal_time[1] + self._ideal_time[2] + self.WeldTime) * self.scaler, '{-}'],
]
return real_data, client_data, ideal_data, self.bool_dict
def _generate_svg(self, real_data, client_data, ideal_data, bool_data) -> None:
try:
self._request_generator.clear()
if not self.theor_mode:
self._request_generator.addLineStyle('biba', 'red', 2)
for i, [signal, changes] in enumerate(bool_data.items()):
name = 'bool_' + str(i)
times = []
for f in changes:
times.append([str(float(f[0])*self.scaler), f[1]])
self._request_generator.addBinary(name, str(signal), 'biba')
self._request_generator.setTimestamps(name, times)
self._request_generator.addConcise('RD', 'Real data')
self._request_generator.setTimestamps('RD', real_data)
self._request_generator.addConcise('CD', 'Client data')
self._request_generator.setTimestamps('CD', client_data)
self._request_generator.addConcise('ID', 'Ideal data')
self._request_generator.setTimestamps('ID', ideal_data)
self._request_generator.generateSVG()
except Exception as e:
print(f"SVG generate error: {e}")
def update_uml(self,
operator_config: dict,
system_config : dict,
ideal_time: list[float],
bool_dict: dict,
float_dict: dict,
timings_dict: dict,
mode: bool):
self._ideal_time = ideal_time
self.bool_dict = bool_dict
self.float_dict = float_dict
self.timings_dict = timings_dict
self.theor_mode = mode
self.scaler = int(system_config['UML_time_scaler'])
self.WeldTime = operator_config['time_wielding']
real, client, ideal, bool_ = self._build_data()
self._generate_svg(real, client, ideal, bool_)