diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e231dc6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +saved_frames/ +archive +__pycache__ +.~lock* +*.log diff --git a/.~lock.Messungen des Einzelteile.ods# b/.~lock.Messungen des Einzelteile.ods# deleted file mode 100644 index 82b0e94..0000000 --- a/.~lock.Messungen des Einzelteile.ods# +++ /dev/null @@ -1 +0,0 @@ -,clemens,cps-aio-001,01.07.2024 13:17,file:///home/clemens/.config/libreoffice/4; \ No newline at end of file diff --git a/CameraStream.py b/CameraStream.py new file mode 100644 index 0000000..274fbaf --- /dev/null +++ b/CameraStream.py @@ -0,0 +1,149 @@ +import cv2 +import os +from datetime import datetime +from ultralytics import YOLO + +class YOLOv8CameraStream: + def __init__(self, model_path: str, camera_source=0, confidence_threshold=0.5, save_threshold=0.9, + log_file="detections.log", logging_level="high"): + self.model = YOLO(model_path) + self.camera_source = camera_source + self.confidence_threshold = confidence_threshold + self.default_confidence_threshold = confidence_threshold + self.save_threshold = save_threshold + self.default_save_threshold = save_threshold + self.log_file = log_file + self.logging_level = logging_level + self.cap = cv2.VideoCapture(camera_source) + + # Create directories for saved frames and archived logs if they don't exist + os.makedirs("saved_frames", exist_ok=True) + os.makedirs("archive", exist_ok=True) + + # Initialize display settings + self.show_thresholds = True + + def log_detection(self, label, confidence): + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + self.check_log_size() # Check log size before logging + with open(self.log_file, "a") as log: + log.write(f"{timestamp} - Detected: {label} with confidence {confidence:.2f}\n") + + def check_log_size(self): + """Checks the size of the log file and archives it if it exceeds 5 MB.""" + if os.path.exists(self.log_file) and os.path.getsize(self.log_file) > 5 * 1024 * 1024: # 5 MB + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + archived_log_file = f"archive/{self.log_file}_{timestamp}.log" + os.rename(self.log_file, archived_log_file) # Rename the old log file + print(f"Archived old log file to {archived_log_file}") + # Create a new log file + open(self.log_file, 'w').close() # Create an empty log file + + def save_frame(self, frame, label): + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + filename = f"saved_frames/{label}_{timestamp}.jpg" + cv2.imwrite(filename, frame) + print(f"Frame saved: {filename}") + + def get_color_for_confidence(self, confidence): + if confidence > 0.75: + return (0, 255, 0) + elif confidence > 0.5: + return (0, 255, 255) + else: + return (0, 0, 255) + + def process_frame(self, frame): + results = self.model.predict(frame) + for result in results: + for box in result.boxes: + confidence = float(box.conf.item()) + if self.logging_level == "high" and confidence < self.save_threshold: + continue + + if confidence > self.confidence_threshold: + x1, y1, x2, y2 = map(int, box.xyxy[0]) + class_id = int(box.cls.item()) + label = f"{result.names[class_id]} {confidence:.2f}" + color = self.get_color_for_confidence(confidence) + cv2.rectangle(frame, (x1, y1), (x2, y2), color, 2) + cv2.putText(frame, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2) + + self.log_detection(result.names[class_id], confidence) + + if confidence > self.save_threshold: + self.save_frame(frame, result.names[class_id]) + + if self.show_thresholds: + self.display_thresholds(frame) + self.display_keyboard_options(frame) + + return frame + + def display_thresholds(self, frame): + text = f"Confidence Threshold: {self.confidence_threshold:.2f} | Save Threshold: {self.save_threshold:.2f}" + cv2.putText(frame, text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 2) + + def display_keyboard_options(self, frame): + options = [ + "Keyboard Controls:", + "'c' - Increase Confidence Threshold | 'v' - Decrease Confidence Threshold", + "'s' - Increase Save Threshold | 'x' - Decrease Save Threshold", + "'t' - Toggle Threshold Display | 'r' - Reset Thresholds to Default", + "'q' - Quit" + ] + for i, option in enumerate(options): + cv2.putText(frame, option, (10, 50 + i * 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1) + + def adjust_thresholds(self): + print("\nPress 'c' to increase confidence threshold, 'v' to decrease it.") + print("Press 's' to increase save threshold, 'x' to decrease it.") + print("Press 't' to toggle threshold display, 'r' to reset thresholds to default.") + print("Press 'q' to quit the program.\n") + + def start(self): + if not self.cap.isOpened(): + print("Error: Could not open video source.") + return + + self.adjust_thresholds() + + while True: + ret, frame = self.cap.read() + if not ret: + print("Error: Failed to capture frame.") + break + + processed_frame = self.process_frame(frame) + cv2.imshow("YOLOv8 Camera Stream", processed_frame) + + key = cv2.waitKey(1) & 0xFF + if key == ord('q'): + break + elif key == ord('c'): + self.confidence_threshold = min(self.confidence_threshold + 0.05, 1.0) + print(f"Confidence threshold increased to {self.confidence_threshold:.2f}") + elif key == ord('v'): + self.confidence_threshold = max(self.confidence_threshold - 0.05, 0.0) + print(f"Confidence threshold decreased to {self.confidence_threshold:.2f}") + elif key == ord('s'): + self.save_threshold = min(self.save_threshold + 0.05, 1.0) + print(f"Save threshold increased to {self.save_threshold:.2f}") + elif key == ord('x'): + self.save_threshold = max(self.save_threshold - 0.05, 0.0) + print(f"Save threshold decreased to {self.save_threshold:.2f}") + elif key == ord('t'): + self.show_thresholds = not self.show_thresholds + print(f"Threshold display toggled to {'on' if self.show_thresholds else 'off'}") + elif key == ord('r'): + self.confidence_threshold = self.default_confidence_threshold + self.save_threshold = self.default_save_threshold + print("Thresholds reset to default values.") + + self.cap.release() + cv2.destroyAllWindows() + +# Run the object detection stream +if __name__ == "__main__": + yolo_stream = YOLOv8CameraStream(model_path="models/yolov8m_seg_e300.pt", logging_level="high") + yolo_stream.start() diff --git a/GUI_16_10_staticWorkflow_Multithreading.py b/GUI_16_10_staticWorkflow_Multithreading.py index 699ba65..776caf1 100644 --- a/GUI_16_10_staticWorkflow_Multithreading.py +++ b/GUI_16_10_staticWorkflow_Multithreading.py @@ -24,14 +24,23 @@ import time import threading +# db_config = { +# 'user': 'dbUser', +# 'password': 'dbPassword', +# 'host': '127.0.0.1', # 'host': 'localhost', +# 'database': 'projectGeislinger', +# 'port': 3306 # Standard port for MariaDB +# } + db_config = { 'user': 'dbUser', 'password': 'dbPassword', - 'host': 'localhost', + 'host': '127.0.0.1', # 'host': 'localhost', 'database': 'projectGeislinger', 'port': 3306 # Standard port for MariaDB } + # Establishing the connection conn = mariadb.connect(**db_config) # Create a cursor to execute queries diff --git a/GUI_26_09_staticWorkflow_Multithreading.py b/GUI_26_09_staticWorkflow_Multithreading.py index 9dc102f..462b7f3 100644 --- a/GUI_26_09_staticWorkflow_Multithreading.py +++ b/GUI_26_09_staticWorkflow_Multithreading.py @@ -27,7 +27,7 @@ import threading db_config = { 'user': 'dbUser', 'password': 'dbPassword', - 'host': 'localhost', + 'host': '127.0.0.1', # 'host': 'localhost', 'database': 'projectGeislinger', 'port': 3306 # Standard port for MariaDB } diff --git a/bjoerntest10.py b/bjoerntest10.py new file mode 100644 index 0000000..b54e5a9 --- /dev/null +++ b/bjoerntest10.py @@ -0,0 +1,1117 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'test.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +########## beim Static workflow funktionieren die Threads ab dem zweiten nicht mehr + +#from PyQt5 import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QProgressBar +from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5.QtWidgets import QApplication, QComboBox +from PyQt5.QtCore import QTimer, QThread, pyqtSignal, QObject, Qt +from PyQt5.QtGui import QColor + +import serial +import binascii +import math +import mariadb +import time +import threading + +from CameraStream import YOLOv8CameraStream # Import the YOLOv8CameraStream class +import cv2 + +import os + +import sainsmartrelay + +# db_config = { +# 'user': 'dbUser', +# 'password': 'dbPassword', +# 'host': '127.0.0.1', # 'host': 'localhost', +# 'database': 'projectGeislinger', +# 'port': 3306 # Standard port for MariaDB +# } + +db_config = { + 'user': 'dbUser', + 'password': 'dbPassword', + 'host': '127.0.0.1', # 'host': 'localhost', + 'database': 'projectGeislinger', + 'port': 3306 # Standard port for MariaDB +} + + +# Establishing the connection +conn = mariadb.connect(**db_config) +# Create a cursor to execute queries +cursor = conn.cursor() + +# Configuration of the serial port +try: + ser = serial.Serial('/dev/serial/by-path/pci-0000:00:14.0-usbv2-0:3:1.0-port0', 9600) + print("Serial port connected successfully.") +except serial.SerialException: + ser = None + print("Warning: Serial port not found. Continuing without serial connection. Only working for demo-purposes.") +#ser = serial.Serial('/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0', 9600) #dadurch garantiert immer die gleiche Schnittstelle verwendet +# und nicht die Schnittstelle, welche die Bezeichnung ttyUSB0 verwendet (welche sich ändern könnte) +# um die ID der USB-Schnittstelle heraus zu finden im Terminal folgendes eingeben: ls -l /dev/serial/by-id/ + + +waageEingeschwungen = False + + +def wahrscheinlichkeitsDichte(x,mue, var): + # in der Funktion wird der Wahrscheinlichkeitsdichtenwert der Variable x für eine bestimmte Normalverteilung berechnet + standardabweichung = var**0.5 + + result = 1/(standardabweichung * (2*math.pi)**0.5 ) * math.exp(-0.5 * ((x-mue)/standardabweichung)**2) + + return result + +def calcWahrscheinlichkeitFromDichte(x,mue, var): + # in der Funktion wird die Wahrscheinlichkeit via der Wahrscheinlichkeitsdichte berechnet, indem das Verhältnis aus der dem Bauteil zugehörigen Wahrscheinlichkeitsdichte zu der maximalen Wahrscheinlichkeitsdichte berechnet wird + p1 = wahrscheinlichkeitsDichte(x,mue, var) + p_max = wahrscheinlichkeitsDichte(mue,mue, var) + + return p1/p_max + + + +#class Worker(QThread): +class Worker(QObject): + #progress = pyqtSignal(int) + objectDetectionStartSignal = pyqtSignal(str) + objectDetectionFinishedSignal = pyqtSignal(int, object) + + checkWaageStartSignal = pyqtSignal(int, int, str) + checkWaageUpdateSignal = pyqtSignal(int, int) + checkWaageFinishedSignal = pyqtSignal(int) + + waageStoppedSignal = pyqtSignal(int) + stopLoopSignal = pyqtSignal(bool) #das Signal wird verwendet um direkt den stopLoop-Wert zu ändern (also kein Funktionsaufruf) + + stopLoop = False + btTypeIsSet = False + correctBtNr = False + + + def __init__(self): + super(Worker, self).__init__() + stopLoop = False + + + def getDataOfArticleType(self, allArticles, articleType): + # die Funktion geht die Liste mit allen Artikeln durch und gibt jenen Eintrag, welcher mit dem "articleType" übereinstimmt zurück + for i in allArticles: + if i[1] == articleType: + return i + + return -1 + + def waageNichtEingeschwungenOutput(self): + print("Die Waage ist noch nicht eingeschwungen - Ergebnisse sind dadurch noch fehlerhaft.") + + def readWaage(self): + # in folgender Funktion wird die Waage ausgelesen + + #print("connection is open: ", ser.is_open) #Debuggingausgabe + #print("port to which it is connected: ", ser.portstr) #Debuggingausgabe + + + if ser.is_open == False: + ser.open() + + + #an die Waage den Befehl senden, dass sie ausgelesen werden soll + ser.write(b'getWeight\n') + #ser.write(b'tare\n') + serialString = ser.readline().decode('utf-8').rstrip() #Auslesen des Serial-Strings/der Messung der Waage + + # wenn am Ende des Strings kg steht, dann ist die Waage eingeschwungen - das wird hiermit überprüft + lenString = len(serialString)-1 + if serialString[lenString] == "g" and serialString[lenString-1] == "k": + #print("ist eingeschwungen") #Debuggingausgabe + waageEingeschwungen = True + else: + print("die Waage ist noch nicht eingeschwungen") + waageEingeschwungen = False + + #aus dem String werden alle Zeichen, welche nicht zur Darstellung der Zahl benötigt werden entfernt + intString = "" + for i in serialString: + if i=="-" or i=="0" or i=="." or i=="1" or i=="2" or i=="3" or i=="4" or i=="5" or i=="6" or i=="7" or i=="8" or i=="9": + intString = intString + i + print("Wert, welcher von der Waage ausgelesen wurde: " + intString + "kg") + ## Waage auslesen - ENDE + + ser.close() + #print("connection is open: ", ser.is_open) #Debuggingausgabe + + return waageEingeschwungen, intString + + def objectTypeDetectionThread(self, auftragsnummer): + # in dieser Funktion wird der Typ des Bauteils automatisch erkannt + + #print("objectTypeDetectionThread - Running in thread:", threading.current_thread().name) #Debuggausgabe + + # Parameterdefinition + propDensVect = [] + + self.btTypeIsSet = False + + while(self.btTypeIsSet == False and self.stopLoop == False): + + # Auslesen der Waage + waageEingeschwungen, intString = self.readWaage() + if waageEingeschwungen == False: + self.waageNichtEingeschwungenOutput() + else: + + # Datenbankabfrage + sql_query = "SELECT Auftraege.id, EinzelteilID, Auftragsnummer, Anzahl, Einzelteile.id, Bezeichnung, CAST(projectGeislinger.Einzelteile.GewichtMittelwert AS CHAR), CAST(projectGeislinger.Einzelteile.GewichtVarianz AS CHAR) FROM projectGeislinger.Auftraege, projectGeislinger.Einzelteile where projectGeislinger.Auftraege.EinzelteilID = projectGeislinger.Einzelteile.id AND projectGeislinger.Auftraege.Auftragsnummer = " + auftragsnummer + cursor.execute(sql_query) + auftragEinzelteilDaten = cursor.fetchall() + + ''' + # Display data #Debugausgabe + print("Ausgabe der Auftragsdetails des obigen Auftrags, inklusive Einzelteildetails:") + for row in auftragEinzelteilDaten: + print(row) + ''' + + # in der Folge werden alle Wahrscheinlichkeitsdichten der Auftragsbauteile berechnet und in dem Vektor gesammelt + for row in auftragEinzelteilDaten: + propDensVect.append([wahrscheinlichkeitsDichte(float(intString),float(row[6]), float(row[7])), row[1], row[5]]) + + # Jenen Eintrag des propDensVect raussuchen, welcher die größte Wahrscheinlichkeitsdichte beinhaltet + maxpropDens = 0 + einzelteilID = 0 + rowData = None + for row in propDensVect: + if row[0] > maxpropDens: + maxpropDens = row[0] + einzelteilID = row[1] + rowData = row + + # überprüfen, ob das aufliegende Bauteil in der Auftragstabelle vorhanden ist + if(einzelteilID == 0): + print("Es wurde kein Bauteil aus der Auftragsliste (Tabelle) erkannt.") + else: + print("Bei dem Bauteil" , einzelteilID , "wurde die höchste Wahrscheinlichkeitsdichte berechnet.") + + # Wahrscheinlichkeit berechnen, dass das angegebene Bauteil auch wirklich diesem entspricht + prop = 0 + for row in auftragEinzelteilDaten: + if row[1] == einzelteilID: + prop = calcWahrscheinlichkeitFromDichte(float(intString),float(row[6]), float(row[7])) + break + print("Die Wahrscheinlichkeit, dass es das Bauteil ist, beträgt: ", prop) + + # den Bool auf true setzen, damit die Schleife beendet wird - dieser wird auf True gesetzt, wenn ein Bauteiltyp erkannt wird + self.btTypeIsSet = True + + if(self.stopLoop == False): + # ein Signal zurück an den MainThreat senden, mit den Infos/Ergebnissen, der Typenbestimmung + self.objectDetectionFinishedSignal.emit(einzelteilID, rowData) + else: + self.waageStoppedSignal.emit(einzelteilID) + + def checkWaageThread(self, einzelteilID, teileZuViel, auftragsnummer): + + self.correctBtNr = False + prevAnzahl = 0 + anzahl = 0 + einzelteilID = einzelteilID + + while (self.correctBtNr == False and self.stopLoop == False): + + #überprüfen, ob die Waage eingeschwungen ist (und damit korrekte Ergebnisse liefert) + waageEingeschwungen, intString = self.readWaage() + if waageEingeschwungen == False: + self.waageNichtEingeschwungenOutput() + else: + + # Datenbankabfrage - holen der Auftrags- und Bauteilinfos + sql_query = "SELECT Auftraege.id, EinzelteilID, Auftragsnummer, Anzahl, Einzelteile.id, Bezeichnung, CAST(projectGeislinger.Einzelteile.GewichtMittelwert AS CHAR), CAST(projectGeislinger.Einzelteile.GewichtVarianz AS CHAR) FROM projectGeislinger.Auftraege, projectGeislinger.Einzelteile where projectGeislinger.Auftraege.EinzelteilID = projectGeislinger.Einzelteile.id AND projectGeislinger.Auftraege.Auftragsnummer = " + auftragsnummer + cursor.execute(sql_query) + auftragDaten = cursor.fetchall() + + ''' + # Display data - zum Debuggen + print("Ausgabe der Auftragsdetails:") + print("id|EinzelteilID|Auftragsnummer|Anzahl") + for row in auftragDaten: + print(row) + ''' + + #auslesen, wie viele Bauteile des Types laut Auftrag vorhanden sein sollen + anzBauteile_soll = 0 + idVorhanden = False + + for row in auftragDaten: + if row[1] == einzelteilID: + anzBauteile_soll = row[3] + idVorhanden = True + + if(idVorhanden == False): + print("Die gewählte Pos.Nr ist nicht in der Auftragsliste (Tabelle) vorhanden.") + return + + # Berechnen der Wahrscheinlichkeitsdichten - der Betrag aller Wahrscheinlichkeitsdichten werden im propDensVect gespeichert + propDensVect = [] + articleData = self.getDataOfArticleType(auftragDaten, einzelteilID) + for i in range(1,anzBauteile_soll+teileZuViel+1): + # Mathematische Sätze, auf welchen die Berechnung basiert: + # seien X1,..., Xn unabhängige Zufallsvariablen die N(mue_i, sigma_i^2) verteilt sind, dann ist X = X1+...+Xn - N(mue, sigma^2) verteilt mit mue=mue1+...+mue_n, sigma^2 = sigma_1^2+...+sigma_n^2 + mueGes = float(articleData[6])*i # Berechnen des äquivalenten Mittelwert + varGes = float(articleData[7])*i # Berechnen der äquivalenten Varianz + propDensVect.append([wahrscheinlichkeitsDichte(float(intString),mueGes, varGes), i]) + + # durch den propDensVect iterieren und jenen Eintrag mit der höchsten Wahrscheinlichkeitsdichte raussuchen + maxpropDens = 0 + for row in propDensVect: + if row[0] > maxpropDens: + maxpropDens = row[0] + anzahl = row[1] + + # damit nur etwas gemacht wird (zb ein Updatesignal an den Hauptthread zurücksenden), wenn sich die berechnete Anzahl ändert + if prevAnzahl != anzahl: + prevAnzahl = anzahl + + # Die Wahrscheinlichkeit berechnen, dass das obige Ergebnis auch dem Bauteil entspricht + if anzahl > 0: + for row in auftragDaten: + if row[1] == einzelteilID: + prop = calcWahrscheinlichkeitFromDichte(float(intString),float(row[6])*anzahl, float(row[7])*anzahl) + break + print("Die Wahrscheinlichkeit, dass es das Bauteil ist, beträgt: ", prop) + + # wenn genug Bauteile vorhanden sind, dann soll die Schleife beendet werden + if (anzahl == anzBauteile_soll): + self.correctBtNr = True + + # Konsolenausgabe + if maxpropDens > 0: + print("Bei der Anzahl" , anzahl , "des Bauteiltypes", einzelteilID, ",wurde die höchste Wahrscheinlichkeitsdichte berechnet.") + self.checkWaageUpdateSignal.emit(einzelteilID, anzahl) + + else: + print("Von der ausgewählten Bauteiltype liegt die berechnete Wahrscheinlichkeit bei 0, dass zwischen 0 und", anzBauteile_soll+teileZuViel, "Bauteilen auf der Waage liegen.") + print("Falls die korrekte Anzhl an Bauteilen auf der Waage liegt, könnte der Fehler in einer falschen Kalibrierung der Waage liegen (TARE).") + + if(self.stopLoop == False): + self.checkWaageFinishedSignal.emit(einzelteilID) + else: + self.waageStoppedSignal.emit(einzelteilID) + + + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + self.auftragsnummer = "" + self.teileZuViel = 100 # Anzahl an Bauteilen, welche zu viel drinnen sein können - der Parameter kann selbst gesetzt werden ##### + self.correctBtNr = False + self.btTypeIsSet = False + + + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1400, 675) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.btn1 = QtWidgets.QPushButton(self.centralwidget) + self.btn1.setGeometry(QtCore.QRect(700, 45, 111, 25)) + self.btn1.setObjectName("btn1") + # Tabelle zur Darstellung der Auftragsdetails + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.centralwidget) + self.AuftragsdetailsTable.setGeometry(QtCore.QRect(10, 100, 661, 400)) + self.AuftragsdetailsTable.setObjectName("AuftragsdetailsTable") + self.AuftragsdetailsTable.setColumnCount(7) + self.AuftragsdetailsTable.setRowCount(0) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(5, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(6, item) + + # Tabelle zur Darstellung der Arbeitsschritte + self.ArbeitsschrittTable = QtWidgets.QTableWidget(self.centralwidget) + self.ArbeitsschrittTable.setGeometry(QtCore.QRect(1000, 50, 395, 400)) + self.ArbeitsschrittTable.setObjectName("AuftragsdetailsTable") + self.ArbeitsschrittTable.setColumnCount(2) + self.ArbeitsschrittTable.setRowCount(4) + self.ArbeitsschrittTable.setColumnWidth(0, 100) + self.ArbeitsschrittTable.setColumnWidth(1, 280) + self.ArbeitsschrittTable.setRowHeight(0, 80) + self.ArbeitsschrittTable.setRowHeight(1, 180) + self.ArbeitsschrittTable.setRowHeight(2, 50) + self.ArbeitsschrittTable.setRowHeight(3, 50) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.ArbeitsschrittTable.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.ArbeitsschrittTable.setHorizontalHeaderItem(1, item) + + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setGeometry(QtCore.QRect(500, 20, 121, 17)) + self.label.setObjectName("label") + self.textEdit = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit.setGeometry(QtCore.QRect(450, 40, 221, 31)) + self.textEdit.setObjectName("textEdit") + self.bauteilTypBtn = QtWidgets.QPushButton(self.centralwidget) + self.bauteilTypBtn.setGeometry(QtCore.QRect(700, 100, 161, 25)) + self.bauteilTypBtn.setObjectName("bauteilTypBtn") + self.checkWaageBtn = QtWidgets.QPushButton(self.centralwidget) + self.checkWaageBtn.setGeometry(QtCore.QRect(700, 150, 161, 25)) + self.checkWaageBtn.setObjectName("checkWaageBtn") + self.stopLoopBtn = QtWidgets.QPushButton(self.centralwidget) + self.stopLoopBtn.setGeometry(QtCore.QRect(700, 350, 161, 25)) + self.stopLoopBtn.setObjectName("stopLoopBtn") + self.waageTareBtn = QtWidgets.QPushButton(self.centralwidget) + self.waageTareBtn.setGeometry(QtCore.QRect(700, 400, 161, 25)) + self.waageTareBtn.setObjectName("waageTareBtn") + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.centralwidget) + self.bauteiltypTextbox.setGeometry(QtCore.QRect(700, 290, 221, 31)) + self.bauteiltypTextbox.setObjectName("bauteiltypTextbox") + self.BezeichnungLabel = QtWidgets.QLabel(self.centralwidget) + self.BezeichnungLabel.setGeometry(QtCore.QRect(700, 270, 181, 20)) + self.BezeichnungLabel.setObjectName("BezeichnungLabel") + self.PosNrLabel = QtWidgets.QLabel(self.centralwidget) + self.PosNrLabel.setGeometry(QtCore.QRect(700, 200, 67, 17)) + self.PosNrLabel.setObjectName("PosNrLabel") + self.PosNrTxtFeld = QtWidgets.QTextEdit(self.centralwidget) + self.PosNrTxtFeld.setGeometry(QtCore.QRect(700, 220, 191, 31)) + self.PosNrTxtFeld.setObjectName("PosNrTxtFeld") + self.teileZuVielLabel = QtWidgets.QLabel(self.centralwidget) + self.teileZuVielLabel.setGeometry(QtCore.QRect(1000, 560, 350, 17)) + self.teileZuVielLabel.setObjectName("teileZuVielLabel") + self.teileZuVielTxtFeld = QtWidgets.QTextEdit(self.centralwidget) + self.teileZuVielTxtFeld.setGeometry(QtCore.QRect(1000, 580, 191, 31)) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1090, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + self.checkBox = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox.setGeometry(QtCore.QRect(1000, 480, 151, 23)) + self.checkBox.setObjectName("checkBox") + self.checkBoxAutoTare = QtWidgets.QCheckBox(self.centralwidget) + self.checkBoxAutoTare.setGeometry(QtCore.QRect(1000, 520, 180, 23)) + self.checkBoxAutoTare.setObjectName("checkBoxAutoTare") + + # button and checkbox for camera workflow + graphicsview widget + self.camWorkFlowcheckBox = QtWidgets.QCheckBox(self.centralwidget) + self.camWorkFlowcheckBox.setGeometry(QtCore.QRect(700, int(1080/2), 151, 23)) + self.camWorkFlowcheckBox.setObjectName("camWorkFlowcheckBox") + self.modelComboBox = QtWidgets.QComboBox(self.centralwidget) + self.modelComboBox.setGeometry(QtCore.QRect(700, int(1080/2)+50, 161, 25)) + self.modelComboBox.setObjectName("modelComboBox") + self.startCamBtn = QtWidgets.QPushButton(self.centralwidget) + self.startCamBtn.setGeometry(QtCore.QRect(700, int(1080/2)+100, 161, 25)) #int(1080/2)+100 + self.startCamBtn.setObjectName("startCamBtn") + self.stopCamBtn = QtWidgets.QPushButton(self.centralwidget) + self.stopCamBtn.setGeometry(QtCore.QRect(700, int(1080/2)+150, 161, 25)) + self.stopCamBtn.setObjectName("stopCamBtn") + self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget) + self.graphicsView.setGeometry(QtCore.QRect(10, int(1080/2), 661, int(480*1.05))) # position and size of camera frame # int(640*1.05) + self.graphicsView.setObjectName("graphicsView") + + # relay control + self.startSpotlightBtn = QtWidgets.QPushButton(self.centralwidget) + self.startSpotlightBtn.setGeometry(QtCore.QRect(700+200, int(1080/2)+100, 161, 25)) #int(1080/2)+100 + self.startSpotlightBtn.setObjectName("startSpotlightBtn") + self.stopSpotlightBtn = QtWidgets.QPushButton(self.centralwidget) + self.stopSpotlightBtn.setGeometry(QtCore.QRect(700+200, int(1080/2)+150, 161, 25)) + self.stopSpotlightBtn.setObjectName("stopSpotlightBtn") + + #self.myTestLambda = lambda: self.worker.checkWaageStartSignal.emit(einzelteilID, self.teileZuViel, self.auftragsnummer) + + ''' + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setVerticalHeaderItem(0,item) + ''' + + # Maximize the window on startup + MainWindow.showMaximized() + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btn1.setText(_translate("MainWindow", "load Auftrag")) + self.btn1.clicked.connect(self.auftragsBtnClicked) + + # Tabelle zur Darstellung der Auftragsdetails + item = self.AuftragsdetailsTable.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Pos.-Nr")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "Matnr mit hoechster Version")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(2) + item.setText(_translate("MainWindow", "Bezeichnung + Werkstoff")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(3) + item.setText(_translate("MainWindow", "Soll-Menge")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(4) + item.setText(_translate("MainWindow", "Ist-Menge")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(5) + item.setText(_translate("MainWindow", "Lgort")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(6) + item.setText(_translate("MainWindow", "set Farbe")) + + # Tabelle zur Darstellung der Arbeitsschritte + item = self.ArbeitsschrittTable.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Arbeitsschritt")) + item = self.ArbeitsschrittTable.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "ToDo:")) + + # Befüllen der Arbeisschritttabelle mit Text + #item = self.ArbeitsschrittTable. + # Ein neues QTableWidgetItem erstellen und den Text setzen + item = QtWidgets.QTableWidgetItem("Auftrag laden") + self.ArbeitsschrittTable.setItem(0, 0, item) + item = QtWidgets.QTableWidgetItem("--> Auftragsnummer eingeben \n--> \"load Auftrag\" Buttonclick") + self.ArbeitsschrittTable.setItem(0, 1, item) + item = QtWidgets.QTableWidgetItem("Bauteiltyp erkennen") + self.ArbeitsschrittTable.setItem(1, 0, item) + item = QtWidgets.QTableWidgetItem("visuell: \n--> ein Bauteil in die Kamera halten\n\nWaage: \n--> ein Bauteil auf die Waage legen\n--> \"Bauteiltyp erkennen\" Buttonclick\n\nmanuell:\n--> Bauteiltypen auswählen\n-->\"ckeck Waage\" Button click") + self.ArbeitsschrittTable.setItem(1, 1, item) + item = QtWidgets.QTableWidgetItem("Bauteilanzahl erkennen") + self.ArbeitsschrittTable.setItem(2, 0, item) + item = QtWidgets.QTableWidgetItem("--> Bauteile auflegen") + self.ArbeitsschrittTable.setItem(2, 1, item) + item = QtWidgets.QTableWidgetItem("Prozess beendet") + self.ArbeitsschrittTable.setItem(3, 0, item) + self.ArbeitsschrittTable.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers) + + #self.ArbeitsschrittTable.item(0,0).setText("test") + + #einzelteilID = int(self.AuftragsdetailsTable.item(i,0).text()) + #self.PosNrTxtFeld.setText(str(self.AuftragsdetailsTable.item(i,0).text())) + #self.bauteiltypTextbox.setText(str(self.AuftragsdetailsTable.item(i,2).text())) + + self.label.setText(_translate("MainWindow", "Auftragsnummer:")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltyp erkennen")) + self.bauteilTypBtn.clicked.connect(self.objectTypeDetection) + self.AuftragsdetailsTable.cellClicked.connect(self.onTableCellClick) + #self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers) + #item = self.AuftragsdetailsTable.verticalHeaderItem(0) + #item.setText(_translate("MainWindow", "test")) + self.BezeichnungLabel.setText(_translate("MainWindow", "Bezeichnung")) + self.PosNrLabel.setText(_translate("MainWindow", "Pos.-Nr:")) + self.teileZuVielLabel.setText(_translate("MainWindow", "Zu prüfende Teileanzahl über Auftragsanzahl:")) + self.teileZuVielTxtFeld.setText(str(self.teileZuViel)) + self.checkWaageBtn.setText(_translate("MainWindow", "check Waage")) + self.checkWaageBtn.clicked.connect(self.checkWaage) + self.stopLoopBtn.setText(_translate("MainWindow", "stop loop")) + self.stopLoopBtn.clicked.connect(self.stopLoopClicked) + self.waageTareBtn.setText(_translate("MainWindow", "Waage tarieren")) + self.waageTareBtn.clicked.connect(self.onTareClick) + self.checkBox.setText(_translate("MainWindow", "static workflow")) + self.checkBox.clicked.connect(self.onCheckboxCheck) + self.checkBoxAutoTare.setText(_translate("MainWindow", "automatisches Tarieren")) + self.checkBoxAutoTare.clicked.connect(self.autoTareCheck) + + self.setRowColor(self.ArbeitsschrittTable, 0,255,165,0) # zum setzen der ersten Spalte der Arbeitsschrittetabelle auf orange + self.checkBoxAutoTare.setCheckState(Qt.Checked) + self.checkBox.setCheckState(Qt.Unchecked) + + # new camera workflow + self.startCamBtn.setText(_translate("MainWindow", "Start Camera")) + # self.startCamBtn.clicked.connect(self.startCamBtnClicked) + self.stopCamBtn.setText(_translate("MainWindow", "Stop Camera")) + self.camWorkFlowcheckBox.setText(_translate("MainWindow", "Camera Workflow")) + # self.camWorkFlowcheckBox.clicked.connect(self.onCheckboxCheck) + self.modelComboBox + + # relay control + self.startSpotlightBtn.setText(_translate("MainWindow", "Turn on light")) + self.stopSpotlightBtn.setText(_translate("MainWindow", "Turn off light")) + + + + def mousePressEvent(self, event): + print("Das MainWindow wurde angeklickt.") + self.setFocus() + super().mousePressEvent(event) + + + def onTareClick(self): + #Tarieren der Waage + if ser.is_open == False: + ser.open() + ser.write(b'tare\n') + ser.close() + + + def onCheckboxCheck(self): + if self.checkBox.isChecked() == True: + print("static workflow activated") + else: + print("static workflow deactivated") + + def autoTareCheck(self): + if self.checkBoxAutoTare.isChecked() == True: + print("automatisches Tarieren ist aktiviert") + else: + print("automatisches Tarieren ist deaktiviert") + + def getRowNr(self, posNr): + for i in range(0,self.AuftragsdetailsTable.rowCount()): + if(self.AuftragsdetailsTable.item(i,0).text() == str(posNr)): + return i +# brauche ich hier vermutlich nicht mehr - ist in den Worker Thread kopiert worden + def waageNichtEingeschwungenOutput(self): + print("Die Waage ist noch nicht eingeschwungen - Ergebnisse sind dadurch noch fehlerhaft.") + + def onTableCellClick(self): + self.PosNrTxtFeld.setText(self.AuftragsdetailsTable.item(self.AuftragsdetailsTable.currentRow(),0).text()) + self.bauteiltypTextbox.setText(self.AuftragsdetailsTable.item(self.AuftragsdetailsTable.currentRow(),2).text()) + + def setAuftragsnummer(self): + self.auftragsnummer = self.textEdit.toPlainText() + if(not self.auftragsnummer): + self.auftragsnummer = "" + self.textEdit.setText("") + + def checkAuftragsnummerEmpty(self): + if self.auftragsnummer == "": + print("Das Auftragsnummernfeld ist leer.") + return True + else: + return False + + def checkPosNrEmpty(self): + if self.PosNrTxtFeld.toPlainText() == "": + return True + else: + return False + + +# eventuell benötigt man die Funktion hier nicht mehr, da sie zu den Threads kopiert wurde + def getDataOfArticleType(self, allArticles, articleType): + # die Funktion geht die Liste mit allen Artikeln durch und gibt jenen Eintrag, welcher mit dem "articleType" übereinstimmt zurück + for i in allArticles: + if i[1] == articleType: + return i + return -1 + + def updateGUI(self): + self.PosNrLabel.repaint() #GUI aktualisieren + QApplication.processEvents() #GUI aktualisieren + + + def setRowColor(self, tableObject, rowID,r,g,b): + for col in range(tableObject.columnCount()-1): + tableObject.item(rowID, col).setBackground(QtGui.QColor(r,g,b)) + ''' + die alte Version der Programmierung + tableObject.item(rowID, 0).setBackground(QtGui.QColor(r,g,b)) + tableObject.item(rowID, 1).setBackground(QtGui.QColor(r,g,b)) + tableObject.item(rowID, 2).setBackground(QtGui.QColor(r,g,b)) + tableObject.item(rowID, 3).setBackground(QtGui.QColor(r,g,b)) + tableObject.item(rowID, 4).setBackground(QtGui.QColor(r,g,b)) + tableObject.item(rowID, 5).setBackground(QtGui.QColor(r,g,b)) + ''' + +#wird hier vermutlich nicht mehr benötigt - wurde in die Workerklasse kopiert + def readWaage(self): + # in folgender Funktion wird die Waage ausgelesen + + #print("connection is open: ", ser.is_open) #Debuggingausgabe + #print("port to which it is connected: ", ser.portstr) #Debuggingausgabe + self.checkPosNrEmpty() + + if ser.is_open == False: + ser.open() + + + #an die Waage den Befehl senden, dass sie ausgelesen werden soll + ser.write(b'getWeight\n') + #ser.write(b'tare\n') + serialString = ser.readline().decode('utf-8').rstrip() #Auslesen des Serial-Strings/der Messung der Waage + + # wenn am Ende des Strings kg steht, dann ist die Waage eingeschwungen - das wird hiermit überprüft + lenString = len(serialString)-1 + if serialString[lenString] == "g" and serialString[lenString-1] == "k": + #print("ist eingeschwungen") #Debuggingausgabe + waageEingeschwungen = True + else: + print("die Waage ist noch nicht eingeschwungen") + waageEingeschwungen = False + + #aus dem String werden alle Zeichen, welche nicht zur Darstellung der Zahl benötigt werden entfernt + intString = "" + for i in serialString: + if i=="-" or i=="0" or i=="." or i=="1" or i=="2" or i=="3" or i=="4" or i=="5" or i=="6" or i=="7" or i=="8" or i=="9": + intString = intString + i + print("Wert, welcher von der Waage ausgelesen wurde: " + intString + "kg") + ## Waage auslesen - ENDE + + ser.close() + #print("connection is open: ", ser.is_open) #Debuggingausgabe + + return waageEingeschwungen, intString + + def auftragsBtnClicked(self): + databaseQueryWorking = False #wird für die Überprüfung, ob die Datenbankabfrage fehlerhaft ist, verwendet + auftragEinzelteilDaten = [] + + self.setAuftragsnummer() + if(not self.checkAuftragsnummerEmpty()): + + sql_query = "SELECT Auftraege.id, EinzelteilID, Auftragsnummer, Anzahl, Einzelteile.id, Bezeichnung, CAST(projectGeislinger.Einzelteile.GewichtMittelwert AS CHAR), CAST(projectGeislinger.Einzelteile.GewichtVarianz AS CHAR) FROM projectGeislinger.Auftraege, projectGeislinger.Einzelteile where projectGeislinger.Auftraege.EinzelteilID = projectGeislinger.Einzelteile.id AND projectGeislinger.Auftraege.Auftragsnummer = " + self.auftragsnummer + try: + cursor.execute(sql_query) + # Fetch results + auftragEinzelteilDaten = cursor.fetchall() + databaseQueryWorking = True + except: + print("Fehler in der Datenbankabfrage.") + + + + if databaseQueryWorking==True and len(auftragEinzelteilDaten)>0: + ''' + # Display data + print("Ausgabe der Auftragsdetails des obigen Auftrags, inklusive Einzelteildetails:") + for row in auftragEinzelteilDaten: + if str(row[2]) == self.auftragsnummer: + print("passt") + print(row) + ''' + + ### die Auftragsdaten in die Tabelle laden + self.AuftragsdetailsTable.setRowCount(len(auftragEinzelteilDaten)) + self.item = QtWidgets.QTableWidgetItem() + counter = 0 + for row in auftragEinzelteilDaten: + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 0, self.item) + self.item.setText(str(row[1])) + self.item.setFlags(self.item.flags() & ~QtCore.Qt.ItemIsEditable) + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 1, self.item) + self.item.setFlags(self.item.flags() & ~QtCore.Qt.ItemIsEditable) + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 2, self.item) + self.item.setText(str(row[5])) + self.item.setFlags(self.item.flags() & ~QtCore.Qt.ItemIsEditable) + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 3, self.item) + self.item.setText(str(row[3])) + self.item.setFlags(self.item.flags() & ~QtCore.Qt.ItemIsEditable) + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 4, self.item) + self.item.setText(str("0")) + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 5, self.item) + self.item.setFlags(self.item.flags() & ~QtCore.Qt.ItemIsEditable) + + # Dropdown für Farben in die 6. Spalte einfügen + #self.item = QtWidgets.QTableWidgetItem() + #self.AuftragsdetailsTable.setItem(counter, 6, self.item) + combo = QComboBox() + combo.addItems(["Farbe", "Weiß", "Orange", "Grün"]) + combo.currentIndexChanged.connect(lambda index, rowId =counter: self.change_row_color(rowId, index)) + self.AuftragsdetailsTable.setCellWidget(counter, 6, combo) + counter = counter +1 + + self.setRowColor(self.ArbeitsschrittTable, 0,0,255,0) #zum setzen der ersten Zeile der Auftragstabelle auf grün + self.setRowColor(self.ArbeitsschrittTable, 1,255,165,0) #zum setzen der zweiten Zeile der Auftragstabelle auf orange + self.setRowColor(self.ArbeitsschrittTable, 2,255,255,255) #zum setzen der dritten Zeile der Auftragstabelle auf weiß + self.setRowColor(self.ArbeitsschrittTable, 3,255,255,255) #zum setzen der vierten Zeile der Auftragstabelle auf weiß + + # setzen der beiden Felder auf einen leeren String, um Fehler zu Vermeiden, wenn ein neuer Auftrag geladen wird + self.bauteiltypTextbox.setText("") + self.PosNrTxtFeld.setText("") + + + elif(databaseQueryWorking==True and len(auftragEinzelteilDaten)==0): + print("Es wurde in der Datenbank kein Auftrag mit dieser Auftragsnummer gefunden.") + + def change_row_color(self, row, color_index): + if(color_index == 1): + self.setRowColor(self.AuftragsdetailsTable, row,255,255,255) + if(color_index == 2): + self.setRowColor(self.AuftragsdetailsTable, row,255,165,0) + if(color_index == 3): + self.setRowColor(self.AuftragsdetailsTable, row,0,255,0) + + def stopLoopClicked(self): + # damit wird beim Klick auf den Stopbutton der stopLoop-boolWert in der Workerklasse auf true gesetzt -> der Stop des Threads wird initiiert + if hasattr(self, 'objectDetectionWorker'): + self.objectDetectionWorker.stopLoopSignal.emit(True) + + if hasattr(self, 'checkWaageWorker'): + self.checkWaageWorker.stopLoopSignal.emit(True) + + def checkFinished(self): + #die Funktion geht alle Zeilen der Auftragsliste durch und schaut, ob die richtige Anzahl an Teilen vorhanden sind + for i in range(0,self.AuftragsdetailsTable.rowCount()): + if self.AuftragsdetailsTable.item(i,3).text() != self.AuftragsdetailsTable.item(i,4).text(): + return False + return True + + + def checkWaage(self): + #print("Running in thread:", threading.current_thread().name) # Debuggingausgabe + QApplication.processEvents() + + # die Loopvariable des Workers auf False setzten, damit die Schleife durchgelaufen wird (diese wird zum Abbruch der Schleife benötigt -> siehe stopLoop) + #self.checkWaageWorker.stopLoopSignal.emit(False) + + # überprüfen, ob der Auftrag geladen wurde + if(self.AuftragsdetailsTable.item(0,0) == None): + print("Der Auftrag muss zuerst geladen werden.") + return + + # überprüfen, ob ein Bauteiltyp gesetzt wurde + if(self.checkPosNrEmpty()==True and self.checkBox.isChecked() == False): + print("Das Pos.-Nr.-Feld ist leer.") + return + + # den GUI Wert von Textfeld TeileZuViel in die Variable schreiben + self.teileZuViel = int(float(self.teileZuVielTxtFeld.toPlainText())) + self.teileZuVielTxtFeld.setText(str(self.teileZuViel)) + + einzelteilID = -1 # Initialisieren der Variable mit einem Defaultwert, welcher nie eingenommen werden können sollte + if (self.checkBox.isChecked() == False): + #übernehmen der BauteilID aus dem Feld Pos.-Nr - wenn der Workflow dynamisch gewählt wurde + einzelteilID = int(self.PosNrTxtFeld.toPlainText()) + else: + # wenn der Workflow statisch gesetzt wurde, dann soll das erste Item aus der Auftragsliste geladen werden, von welchem noch nicht genug Bauteile auf der Waage liegen + for i in range(0,self.AuftragsdetailsTable.rowCount()): + if self.AuftragsdetailsTable.item(i,3).text() != self.AuftragsdetailsTable.item(i,4).text(): + einzelteilID = int(self.AuftragsdetailsTable.item(i,0).text()) + self.PosNrTxtFeld.setText(str(self.AuftragsdetailsTable.item(i,0).text())) + self.bauteiltypTextbox.setText(str(self.AuftragsdetailsTable.item(i,2).text())) + break + + if einzelteilID == -1: + # den Thread beenden + self.checkWaageThread.quit() + self.checkWaageThread.wait() + try: + self.checkWaageThread.started.disconnect() # Trenne das Signal, damit es beim nächsten Start keine Konflikte gibt + print("Der Thread wurde beendet.") + except: + print("Disconnecting the thread did not work.") + return + + + #zum setzen den Farbe der gesamten Reihe auf Orange + self.setRowColor(self.AuftragsdetailsTable, self.getRowNr(einzelteilID),255,165,0) + self.setRowColor(self.ArbeitsschrittTable, 1,0,255,0) # zum setzen der zweiten Spalte der Arbeitsschrittetabelle auf grün + self.setRowColor(self.ArbeitsschrittTable, 2,255,165,0) # zum setzen der dritten Spalte der Arbeitsschrittetabelle auf orange + + # den Thread starten, welcher die Bauteilanzahl überprüft + self.checkWaageWorker = Worker() + self.checkWaageThread = QThread() + + self.checkWaageWorker.moveToThread(self.checkWaageThread) + + self.checkWaageWorker.checkWaageStartSignal.connect(self.checkWaageWorker.checkWaageThread) + self.checkWaageWorker.checkWaageUpdateSignal.connect(self.checkWaageUpdate) + self.checkWaageWorker.checkWaageFinishedSignal.connect(self.checkWaageFinished) + self.checkWaageWorker.waageStoppedSignal.connect(self.threadStopped) + self.checkWaageWorker.stopLoopSignal.connect(lambda status: setattr(self.checkWaageWorker, 'stopLoop', status)) #wird fürs aktive Stoppen des Threads benötigt + + self.checkWaageThread.started.connect(lambda: self.checkWaageWorker.checkWaageStartSignal.emit(einzelteilID, self.teileZuViel, self.auftragsnummer)) + self.checkWaageThread.start() + + def checkWaageUpdate(self, einzelteilID, anzahl): + # die Funktion updated die (vom Thread) berechnete Bauteilanzahl in der GUI + self.AuftragsdetailsTable.item(self.getRowNr(einzelteilID), 4).setText(str(anzahl)) # in die Tabelle die Anzahl an berechneten Bauteilen reinschreiben + + def checkWaageFinished(self, einzelteilID): + self.setRowColor(self.AuftragsdetailsTable, self.getRowNr(einzelteilID),0,255,0) #zum setzen den Farbe der gesamten Reihe auf Grün + + if self.checkFinished(): # wenn alle Bauteile auf der Waage liegen, soll folgender Code ausgeführt werden + self.setRowColor(self.ArbeitsschrittTable, 2,0,255,0) # zum setzen der zweiten Spalte der Arbeitsschrittetabelle auf orange + self.setRowColor(self.ArbeitsschrittTable, 3,0,255,0) # zum setzen der dritten Spalte der Arbeitsschrittetabelle auf weiß + else: # wenn noch nicht alle Bauteile des Auftrags auf der Waage liegen, soll folgernder Code ausgeführt werden + self.setRowColor(self.ArbeitsschrittTable, 1,255,165,0) # zum setzen der zweiten Spalte der Arbeitsschrittetabelle auf orange + self.setRowColor(self.ArbeitsschrittTable, 2,255,255,255) # zum setzen der dritten Spalte der Arbeitsschrittetabelle auf weiß + if self.checkBoxAutoTare.isChecked(): + self.onTareClick() + + # den Thread beenden + self.checkWaageThread.quit() + self.checkWaageThread.wait() + + # auch wenn die Länge der Liste überschritten wurde + # wenn der statische Workflow aktiviert ist, dann soll die checkwaage-funktion erneut aufgerufen werden + if(self.checkBox.isChecked() == True): + self.checkWaage() + + # GUI updaten + #self.updateGUI() + + def objectTypeDetection(self): + # in dieser Funktion wird der Typ des Bauteils automatisch erkannt + + # wenn der statische Workflow ausgewählt wurde, dann soll die checkWaage Funktion aufgerufen werden, auch wenn die detectBauteiltyp-Funkion aufgerufen wurde + if self.checkBox.isChecked() == True: + self.checkWaage() + return + + ''' + if(self.checkPosNrEmpty()==True): + print("Das Pos.-Nr.-Feld ist leer.") + return + ''' + + # die Loopvariable des Workers auf False setzten, damit die Schleife durchgelaufen wird (diese wird zum Abbruch der Schleife benötigt -> siehe stopLoop) + #self.objectDetectionWorker.stopLoopSignal.emit(False) + + # überprüfen, ob der Auftrag in die Tabelle geladen wurde + if(self.AuftragsdetailsTable.item(0,0) == None): + print("Der Auftrag muss zuerst geladen werden.") + return + + # speichert den Wert, welcher im Textfeld steht in Variablen im Code + self.setAuftragsnummer() + + # starten des Threats, welcher den Bauteiltyp zurück gibt + self.objectDetectionWorker = Worker() + self.objectDetectionThread = QThread() + + self.objectDetectionWorker.moveToThread(self.objectDetectionThread) + + self.objectDetectionWorker.objectDetectionStartSignal.connect(self.objectDetectionWorker.objectTypeDetectionThread) + self.objectDetectionWorker.objectDetectionFinishedSignal.connect(self.objectTypeDetectionFinished) + self.objectDetectionWorker.waageStoppedSignal.connect(self.threadStopped) + self.objectDetectionWorker.stopLoopSignal.connect(lambda status: setattr(self.objectDetectionWorker, 'stopLoop', status)) #wird fürs aktive Stoppen des Threads benötigt + + self.objectDetectionThread.started.connect(lambda: self.objectDetectionWorker.objectDetectionStartSignal.emit(self.auftragsnummer)) + self.objectDetectionThread.start() + + def objectTypeDetectionFinished(self, einzelteilID, rowData): + # wenn der Typ des Objektes erkannt wurde, dann soll die Funktion aufgerufen werden + + # Schreiben der Bauteiltype und Pos.-Nr in die jeweiligen Felder + self.PosNrTxtFeld.setText(str(rowData[1])) + self.bauteiltypTextbox.setText(rowData[2]) + + # setzt den Boolean, um aus der Schleife raus zu gehen + self.btTypeIsSet = True + + #zum setzen den Farbe der gesamten Reihe auf Orange + self.setRowColor(self.AuftragsdetailsTable, self.getRowNr(einzelteilID),255,165,0) + + # den Thread beenden + self.objectDetectionThread.quit() + self.objectDetectionThread.wait() + + ''' + try: + self.objectDetectionThread.started.disconnect() # Trenne das Signal, damit es beim nächsten Start keine Konflikte gibt + except: + print(f"Error while disconnecting: {e}") + print("Disconnecting the thread did not work.") + ''' + + # wenn der Bauteiltyp erkannt wurde, dann soll die GUI aktualisiert werden und anschließend die CheckWaage-Funktion aufgerufen werden + self.updateGUI() + self.checkWaage() + + def threadStopped(self, einzelteilID): + # wenn kein Bauteil erkannt wurde, dann ist die EinzenteilID = 0 + if self.checkFinished() == False: + if(einzelteilID > 0): + self.setRowColor(self.AuftragsdetailsTable, self.getRowNr(einzelteilID),255,255,255) #zum setzen den Farbe der gesamten Reihe auf Weiß + self.setRowColor(self.ArbeitsschrittTable, 2,255,255,255) + self.setRowColor(self.ArbeitsschrittTable, 1,255,165,0) + + # den Thread beenden + if hasattr(self, 'objectDetectionThread'): + self.objectDetectionThread.quit() + self.objectDetectionThread.wait() + print("Der ObjektDetection-Thread wurde beendet.") + + if hasattr(self, 'checkWaageThread'): + self.checkWaageThread.quit() + self.checkWaageThread.wait() + print("Der CheckWaage-Thread wurde beendet.") + + +# new class for Camera Object detection with YOLOv8 +class CameraStreamApp(QtWidgets.QMainWindow): + def __init__(self, ui): + super().__init__() + self.ui = ui + self.yolo_stream = None # Initialize YOLOv8CameraStream as None + self.timer = QtCore.QTimer(self) + self.timer.timeout.connect(self.update_frame) + + # Populate the model dropdown menu + self.populate_model_dropdown() + + self.ui.startCamBtn.clicked.connect(self.start_camera) # start camera if button LoadAuftrag is clicked + self.ui.stopCamBtn.clicked.connect(self.stop_camera) # start camera if button LoadAuftrag is clicked + self.scene = QtWidgets.QGraphicsScene(self) + self.ui.graphicsView.setScene(self.scene) + + def populate_model_dropdown(self): + """Populate the dropdown menu with model files from the models directory.""" + models_dir = "models" + model_files = [f for f in os.listdir(models_dir) if f.endswith(".pt")] + self.ui.modelComboBox.clear() + self.ui.modelComboBox.addItems(model_files) + + def start_camera(self): + # Start the YOLOv8 camera stream (only if not already started) + if self.yolo_stream is None: + self.yolo_stream = YOLOv8CameraStream(model_path="models/yolov8m_seg_e300.pt", logging_level="high") + # self.yolo_stream.start() # Start the YOLOv8 stream + self.timer.start(30) # Start the timer to update the frame every 30ms (about 33 FPS) + + def stop_camera(self): + # Stop the camera stream and processing + if self.yolo_stream is not None: + self.timer.stop() # Stop the timer + self.yolo_stream.cap.release() # Release the camera resource + self.yolo_stream = None # Reset the YOLOv8 stream object + self.scene.clear() # Clear the displayed frame from the graphicsView + print("Camera stream stopped and resources released.") + + def update_frame(self): + # Update the frame from YOLOv8 stream + if self.yolo_stream: + ret, frame = self.yolo_stream.cap.read() # Capture frame from YOLOv8 stream + + if ret: + # new part including processing via yolo model + processed_frame = self.yolo_stream.process_frame(frame) + + # Convert the frame from BGR (OpenCV format) to RGB + # frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + frame = cv2.cvtColor(processed_frame, cv2.COLOR_BGR2RGB) # might change nomenclature later? + + # Convert the frame to QImage + h, w, ch = frame.shape + bytes_per_line = ch * w + qt_image = QtGui.QImage(frame.data, w, h, bytes_per_line, QtGui.QImage.Format_RGB888) + + # Add the QImage to a QPixmap + pixmap = QtGui.QPixmap.fromImage(qt_image) + + # Get the size of the graphicsView and scale the pixmap to fit + view_size = self.ui.graphicsView.size() + scaled_pixmap = pixmap.scaled(view_size, QtCore.Qt.KeepAspectRatio) + + # Update the scene with the scaled pixmap + self.scene.clear() + self.scene.addPixmap(scaled_pixmap) + + def closeEvent(self, event): + # Release the camera when the application is closed + if self.yolo_stream is not None: + self.yolo_stream.cap.release() + event.accept() + +# new class for relay control +class RelayControl(QtWidgets.QMainWindow): + def __init__(self, ui): + super().__init__() + self.ui = ui + + self.ui.startSpotlightBtn.clicked.connect(self.spot_on) + self.ui.stopSpotlightBtn.clicked.connect(self.spot_off) + self.r = sainsmartrelay.SainsmartRelay() + + def spot_on(self): + print("Turn on light clicked") + self.r.turn_on(1) + + def spot_off(self): + print("Turn off light clicked") + self.r.turn_off(1) + + def red_on(self): + print("Red light is on") + self.r.turn_on(2) + + def red_off(self): + print("Red light is off") + self.r.turn_off(2) + + def yellow_on(self): + print("Yellow light is on") + self.r.turn_on(3) + + def yellow_off(self): + print("Yellow light is off") + self.r.turn_off(3) + + def green_on(self): + print("Green light is on") + self.r.turn_on(4) + + def green_off(self): + print("Green light is off") + self.r.turn_off(4) + +if __name__ == "__main__": + import sys + app = QtWidgets.QApplication(sys.argv) + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + + # Initialize the CameraStreamApp with the UI + camera_app = CameraStreamApp(ui) + # initialize relay app + relay_app = RelayControl(ui) + + MainWindow.show() + sys.exit(app.exec_()) \ No newline at end of file diff --git a/bjoerntest2.py b/bjoerntest2.py new file mode 100644 index 0000000..e7c38dc --- /dev/null +++ b/bjoerntest2.py @@ -0,0 +1,222 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'testbjoern2.ui' +# +# Created by: PyQt5 UI code generator 5.15.11 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1090, 675) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.btn1 = QtWidgets.QPushButton(self.centralwidget) + self.btn1.setGeometry(QtCore.QRect(900, 80, 111, 25)) + self.btn1.setObjectName("btn1") + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.centralwidget) + self.AuftragsdetailsTable.setGeometry(QtCore.QRect(10, 10, 661, 192)) + self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.AuftragsdetailsTable.setObjectName("AuftragsdetailsTable") + self.AuftragsdetailsTable.setColumnCount(5) + self.AuftragsdetailsTable.setRowCount(1) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(0, 0, item) + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setGeometry(QtCore.QRect(900, 20, 121, 17)) + self.label.setObjectName("label") + self.textEdit = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit.setGeometry(QtCore.QRect(860, 40, 221, 31)) + self.textEdit.setObjectName("textEdit") + self.bauteilTypBtn = QtWidgets.QPushButton(self.centralwidget) + self.bauteilTypBtn.setGeometry(QtCore.QRect(60, 340, 161, 25)) + self.bauteilTypBtn.setObjectName("bauteilTypBtn") + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.centralwidget) + self.bauteiltypTextbox.setGeometry(QtCore.QRect(230, 340, 221, 31)) + self.bauteiltypTextbox.setObjectName("bauteiltypTextbox") + self.label_3 = QtWidgets.QLabel(self.centralwidget) + self.label_3.setGeometry(QtCore.QRect(250, 320, 181, 20)) + self.label_3.setObjectName("label_3") + self.label_4 = QtWidgets.QLabel(self.centralwidget) + self.label_4.setGeometry(QtCore.QRect(520, 320, 67, 17)) + self.label_4.setObjectName("label_4") + self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit_3.setGeometry(QtCore.QRect(460, 340, 191, 31)) + self.textEdit_3.setObjectName("textEdit_3") + self.checkBox = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox.setGeometry(QtCore.QRect(70, 410, 151, 23)) + self.checkBox.setChecked(False) + self.checkBox.setObjectName("checkBox") + self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget) + self.graphicsView.setGeometry(QtCore.QRect(800, 280, 256, 192)) + self.graphicsView.setObjectName("graphicsView") + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1090, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btn1.setText(_translate("MainWindow", "load Auftrag")) + item = self.AuftragsdetailsTable.verticalHeaderItem(0) + item.setText(_translate("MainWindow", "T1")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Pos.-Nr")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "Matnr mit hoechster Version")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(2) + item.setText(_translate("MainWindow", "Bezeichnung + Werkstoff")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(3) + item.setText(_translate("MainWindow", "Menge")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(4) + item.setText(_translate("MainWindow", "Lgort")) + __sortingEnabled = self.AuftragsdetailsTable.isSortingEnabled() + self.AuftragsdetailsTable.setSortingEnabled(False) + item = self.AuftragsdetailsTable.item(0, 0) + item.setText(_translate("MainWindow", "I1")) + self.AuftragsdetailsTable.setSortingEnabled(__sortingEnabled) + self.label.setText(_translate("MainWindow", "Auftragsnummer:")) + self.textEdit.setHtml(_translate("MainWindow", "\n" +"\n" +"


")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltype erkennen")) + self.bauteiltypTextbox.setHtml(_translate("MainWindow", "\n" +"\n" +"


")) + self.label_3.setText(_translate("MainWindow", "Bezeichnung")) + self.label_4.setText(_translate("MainWindow", "Pos.-Nr:")) + self.checkBox.setText(_translate("MainWindow", "Bauteiltype locked")) + + + +import sys +import cv2 +#from PyQt5 import QtCore, QtWidgets, QtGui + +class CameraStreamApp(QtWidgets.QMainWindow): + def __init__(self): + super().__init__() + self.initUI() + + # OpenCV video capture (0 for the default camera) + self.cap = None # Initialize capture as None (stream starts on button click) + + # Timer for updating the frame + self.timer = QtCore.QTimer(self) + self.timer.timeout.connect(self.update_frame) + + def initUI(self): + self.setWindowTitle("Camera Stream") + + # Create a QGraphicsView widget + self.graphicsView = QtWidgets.QGraphicsView(self) + self.graphicsView.setGeometry(QtCore.QRect(50, 50, 640, 480)) + self.graphicsView.setObjectName("graphicsView") + + # Create a QGraphicsScene to hold the frame + self.scene = QtWidgets.QGraphicsScene() + self.graphicsView.setScene(self.scene) + + # Create a button to start the camera stream + self.startButton = QtWidgets.QPushButton('Start Camera', self) + self.startButton.setGeometry(QtCore.QRect(50, 550, 120, 40)) # Position the button below the view + self.startButton.clicked.connect(self.start_camera) + + # Show the main window + self.setGeometry(100, 100, 800, 600) + self.show() + + def start_camera(self): + # Start OpenCV video capture (only if not already started) + if self.cap is None: + self.cap = cv2.VideoCapture(0) + if not self.cap.isOpened(): + print("Error: Unable to open the camera.") + return + self.timer.start(30) # Start the timer to update the frame every 30ms (about 33 FPS) + + def update_frame(self): + if self.cap: + ret, frame = self.cap.read() # Capture frame from the camera + if ret: + # Convert the frame from BGR (OpenCV format) to RGB + frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + + # Convert the frame to QImage + h, w, ch = frame.shape + bytes_per_line = ch * w + qt_image = QtGui.QImage(frame.data, w, h, bytes_per_line, QtGui.QImage.Format_RGB888) + + # Add the QImage to a QPixmap + pixmap = QtGui.QPixmap.fromImage(qt_image) + + # Update the scene with the new pixmap + self.scene.clear() + self.scene.addPixmap(pixmap) + + def closeEvent(self, event): + # Release the camera when the application is closed + if self.cap is not None: + self.cap.release() + event.accept() + + +if __name__ == "__main__": + import sys + app = QtWidgets.QApplication(sys.argv) + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + MainWindow.show() + sys.exit(app.exec_()) diff --git a/bjoerntest3.py b/bjoerntest3.py new file mode 100644 index 0000000..14b0b6f --- /dev/null +++ b/bjoerntest3.py @@ -0,0 +1,181 @@ +from PyQt5 import QtCore, QtGui, QtWidgets +import cv2 +import sys + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1090, 675) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.btn1 = QtWidgets.QPushButton(self.centralwidget) + self.btn1.setGeometry(QtCore.QRect(900, 80, 111, 25)) + self.btn1.setObjectName("btn1") + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.centralwidget) + self.AuftragsdetailsTable.setGeometry(QtCore.QRect(10, 10, 661, 192)) + self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.AuftragsdetailsTable.setObjectName("AuftragsdetailsTable") + self.AuftragsdetailsTable.setColumnCount(5) + self.AuftragsdetailsTable.setRowCount(1) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(0, 0, item) + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setGeometry(QtCore.QRect(900, 20, 121, 17)) + self.label.setObjectName("label") + self.textEdit = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit.setGeometry(QtCore.QRect(860, 40, 221, 31)) + self.textEdit.setObjectName("textEdit") + self.bauteilTypBtn = QtWidgets.QPushButton(self.centralwidget) + self.bauteilTypBtn.setGeometry(QtCore.QRect(60, 340, 161, 25)) + self.bauteilTypBtn.setObjectName("bauteilTypBtn") + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.centralwidget) + self.bauteiltypTextbox.setGeometry(QtCore.QRect(230, 340, 221, 31)) + self.bauteiltypTextbox.setObjectName("bauteiltypTextbox") + self.label_3 = QtWidgets.QLabel(self.centralwidget) + self.label_3.setGeometry(QtCore.QRect(250, 320, 181, 20)) + self.label_3.setObjectName("label_3") + self.label_4 = QtWidgets.QLabel(self.centralwidget) + self.label_4.setGeometry(QtCore.QRect(520, 320, 67, 17)) + self.label_4.setObjectName("label_4") + self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit_3.setGeometry(QtCore.QRect(460, 340, 191, 31)) + self.textEdit_3.setObjectName("textEdit_3") + self.checkBox = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox.setGeometry(QtCore.QRect(70, 410, 151, 23)) + self.checkBox.setChecked(False) + self.checkBox.setObjectName("checkBox") + self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget) + self.graphicsView.setGeometry(QtCore.QRect(800, 280, 256, 192)) + self.graphicsView.setObjectName("graphicsView") + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1090, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btn1.setText(_translate("MainWindow", "load Auftrag")) + self.label.setText(_translate("MainWindow", "Auftragsnummer:")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltype erkennen")) + self.label_3.setText(_translate("MainWindow", "Bezeichnung")) + self.label_4.setText(_translate("MainWindow", "Pos.-Nr:")) + self.checkBox.setText(_translate("MainWindow", "Bauteiltype locked")) + + +class CameraStreamApp(QtWidgets.QMainWindow): + def __init__(self, ui): + super().__init__() + self.ui = ui + self.cap = None # Initialize capture as None (stream starts on button click) + + # Timer for updating the frame + self.timer = QtCore.QTimer(self) + self.timer.timeout.connect(self.update_frame) + + # Set up the camera stream button + self.ui.btn1.clicked.connect(self.start_camera) + + # Set up the graphics view and scene + self.scene = QtWidgets.QGraphicsScene(self) + self.ui.graphicsView.setScene(self.scene) + + def start_camera(self): + # Start OpenCV video capture (only if not already started) + if self.cap is None: + self.cap = cv2.VideoCapture(0) + if not self.cap.isOpened(): + print("Error: Unable to open the camera.") + return + self.timer.start(30) # Start the timer to update the frame every 30ms (about 33 FPS) + + # def update_frame(self): + # if self.cap: + # ret, frame = self.cap.read() # Capture frame from the camera + # if ret: + # # Convert the frame from BGR (OpenCV format) to RGB + # frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + + # # Convert the frame to QImage + # h, w, ch = frame.shape + # bytes_per_line = ch * w + # qt_image = QtGui.QImage(frame.data, w, h, bytes_per_line, QtGui.QImage.Format_RGB888) + + # # Add the QImage to a QPixmap + # pixmap = QtGui.QPixmap.fromImage(qt_image) + + # # Update the scene with the new pixmap + # self.scene.clear() + # self.scene.addPixmap(pixmap) + + def update_frame(self): + if self.cap: + ret, frame = self.cap.read() # Capture frame from the camera + if ret: + # Convert the frame from BGR (OpenCV format) to RGB + frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + + # Convert the frame to QImage + h, w, ch = frame.shape + bytes_per_line = ch * w + qt_image = QtGui.QImage(frame.data, w, h, bytes_per_line, QtGui.QImage.Format_RGB888) + + # Add the QImage to a QPixmap + pixmap = QtGui.QPixmap.fromImage(qt_image) + + # Get the size of the graphicsView and scale the pixmap to fit + view_size = self.ui.graphicsView.size() + scaled_pixmap = pixmap.scaled(view_size, QtCore.Qt.KeepAspectRatio) + + # Update the scene with the scaled pixmap + self.scene.clear() + self.scene.addPixmap(scaled_pixmap) + + def closeEvent(self, event): + # Release the camera when the application is closed + if self.cap is not None: + self.cap.release() + event.accept() + + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + + # Initialize the CameraStreamApp with the UI + camera_app = CameraStreamApp(ui) + + MainWindow.show() + sys.exit(app.exec_()) diff --git a/bjoerntest4.py b/bjoerntest4.py new file mode 100644 index 0000000..b4fa25c --- /dev/null +++ b/bjoerntest4.py @@ -0,0 +1,154 @@ +from PyQt5 import QtCore, QtGui, QtWidgets +import cv2 +import sys +from CameraStream import YOLOv8CameraStream # Import the YOLOv8CameraStream class + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1090, 675) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.btn1 = QtWidgets.QPushButton(self.centralwidget) + self.btn1.setGeometry(QtCore.QRect(900, 80, 111, 25)) + self.btn1.setObjectName("btn1") + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.centralwidget) + self.AuftragsdetailsTable.setGeometry(QtCore.QRect(10, 10, 661, 192)) + self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.AuftragsdetailsTable.setObjectName("AuftragsdetailsTable") + self.AuftragsdetailsTable.setColumnCount(5) + self.AuftragsdetailsTable.setRowCount(1) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(0, 0, item) + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setGeometry(QtCore.QRect(900, 20, 121, 17)) + self.label.setObjectName("label") + self.textEdit = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit.setGeometry(QtCore.QRect(860, 40, 221, 31)) + self.textEdit.setObjectName("textEdit") + self.bauteilTypBtn = QtWidgets.QPushButton(self.centralwidget) + self.bauteilTypBtn.setGeometry(QtCore.QRect(60, 340, 161, 25)) + self.bauteilTypBtn.setObjectName("bauteilTypBtn") + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.centralwidget) + self.bauteiltypTextbox.setGeometry(QtCore.QRect(230, 340, 221, 31)) + self.bauteiltypTextbox.setObjectName("bauteiltypTextbox") + self.label_3 = QtWidgets.QLabel(self.centralwidget) + self.label_3.setGeometry(QtCore.QRect(250, 320, 181, 20)) + self.label_3.setObjectName("label_3") + self.label_4 = QtWidgets.QLabel(self.centralwidget) + self.label_4.setGeometry(QtCore.QRect(520, 320, 67, 17)) + self.label_4.setObjectName("label_4") + self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit_3.setGeometry(QtCore.QRect(460, 340, 191, 31)) + self.textEdit_3.setObjectName("textEdit_3") + self.checkBox = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox.setGeometry(QtCore.QRect(70, 410, 151, 23)) + self.checkBox.setChecked(False) + self.checkBox.setObjectName("checkBox") + self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget) + self.graphicsView.setGeometry(QtCore.QRect(800, 280, 256, 192)) + self.graphicsView.setObjectName("graphicsView") + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1090, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btn1.setText(_translate("MainWindow", "load Auftrag")) + self.label.setText(_translate("MainWindow", "Auftragsnummer:")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltype erkennen")) + self.label_3.setText(_translate("MainWindow", "Bezeichnung")) + self.label_4.setText(_translate("MainWindow", "Pos.-Nr:")) + self.checkBox.setText(_translate("MainWindow", "Bauteiltype locked")) + +class CameraStreamApp(QtWidgets.QMainWindow): + def __init__(self, ui): + super().__init__() + self.ui = ui + self.yolo_stream = None # Initialize YOLOv8CameraStream as None + self.timer = QtCore.QTimer(self) + self.timer.timeout.connect(self.update_frame) + self.ui.btn1.clicked.connect(self.start_camera) # start camera if button LoadAuftrag is clicked + self.scene = QtWidgets.QGraphicsScene(self) + self.ui.graphicsView.setScene(self.scene) + + def start_camera(self): + # Start the YOLOv8 camera stream (only if not already started) + if self.yolo_stream is None: + self.yolo_stream = YOLOv8CameraStream(model_path="models/yolov8m_seg_e300.pt", logging_level="high") + # self.yolo_stream.start() # Start the YOLOv8 stream + self.timer.start(30) # Start the timer to update the frame every 30ms (about 33 FPS) + + def update_frame(self): + # Update the frame from YOLOv8 stream + if self.yolo_stream: + ret, frame = self.yolo_stream.cap.read() # Capture frame from YOLOv8 stream + if ret: + # Convert the frame from BGR (OpenCV format) to RGB + frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + + # Convert the frame to QImage + h, w, ch = frame.shape + bytes_per_line = ch * w + qt_image = QtGui.QImage(frame.data, w, h, bytes_per_line, QtGui.QImage.Format_RGB888) + + # Add the QImage to a QPixmap + pixmap = QtGui.QPixmap.fromImage(qt_image) + + # Get the size of the graphicsView and scale the pixmap to fit + view_size = self.ui.graphicsView.size() + scaled_pixmap = pixmap.scaled(view_size, QtCore.Qt.KeepAspectRatio) + + # Update the scene with the scaled pixmap + self.scene.clear() + self.scene.addPixmap(scaled_pixmap) + + def closeEvent(self, event): + # Release the camera when the application is closed + if self.yolo_stream is not None: + self.yolo_stream.cap.release() + event.accept() + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + + # Initialize the CameraStreamApp with the UI + camera_app = CameraStreamApp(ui) + + MainWindow.show() + sys.exit(app.exec_()) diff --git a/bjoerntest5.py b/bjoerntest5.py new file mode 100644 index 0000000..9603fe8 --- /dev/null +++ b/bjoerntest5.py @@ -0,0 +1,159 @@ +from PyQt5 import QtCore, QtGui, QtWidgets +import cv2 +import sys +from CameraStream import YOLOv8CameraStream # Import the YOLOv8CameraStream class + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1090, 675) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.btn1 = QtWidgets.QPushButton(self.centralwidget) + self.btn1.setGeometry(QtCore.QRect(900, 80, 111, 25)) + self.btn1.setObjectName("btn1") + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.centralwidget) + self.AuftragsdetailsTable.setGeometry(QtCore.QRect(10, 10, 661, 192)) + self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.AuftragsdetailsTable.setObjectName("AuftragsdetailsTable") + self.AuftragsdetailsTable.setColumnCount(5) + self.AuftragsdetailsTable.setRowCount(1) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(0, 0, item) + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setGeometry(QtCore.QRect(900, 20, 121, 17)) + self.label.setObjectName("label") + self.textEdit = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit.setGeometry(QtCore.QRect(860, 40, 221, 31)) + self.textEdit.setObjectName("textEdit") + self.bauteilTypBtn = QtWidgets.QPushButton(self.centralwidget) + self.bauteilTypBtn.setGeometry(QtCore.QRect(60, 340, 161, 25)) + self.bauteilTypBtn.setObjectName("bauteilTypBtn") + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.centralwidget) + self.bauteiltypTextbox.setGeometry(QtCore.QRect(230, 340, 221, 31)) + self.bauteiltypTextbox.setObjectName("bauteiltypTextbox") + self.label_3 = QtWidgets.QLabel(self.centralwidget) + self.label_3.setGeometry(QtCore.QRect(250, 320, 181, 20)) + self.label_3.setObjectName("label_3") + self.label_4 = QtWidgets.QLabel(self.centralwidget) + self.label_4.setGeometry(QtCore.QRect(520, 320, 67, 17)) + self.label_4.setObjectName("label_4") + self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit_3.setGeometry(QtCore.QRect(460, 340, 191, 31)) + self.textEdit_3.setObjectName("textEdit_3") + self.checkBox = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox.setGeometry(QtCore.QRect(70, 410, 151, 23)) + self.checkBox.setChecked(False) + self.checkBox.setObjectName("checkBox") + self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget) + self.graphicsView.setGeometry(QtCore.QRect(800, 280, 256, 192)) + self.graphicsView.setObjectName("graphicsView") + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1090, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btn1.setText(_translate("MainWindow", "load Auftrag")) + self.label.setText(_translate("MainWindow", "Auftragsnummer:")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltype erkennen")) + self.label_3.setText(_translate("MainWindow", "Bezeichnung")) + self.label_4.setText(_translate("MainWindow", "Pos.-Nr:")) + self.checkBox.setText(_translate("MainWindow", "Bauteiltype locked")) + +class CameraStreamApp(QtWidgets.QMainWindow): + def __init__(self, ui): + super().__init__() + self.ui = ui + self.yolo_stream = None # Initialize YOLOv8CameraStream as None + self.timer = QtCore.QTimer(self) + self.timer.timeout.connect(self.update_frame) + self.ui.btn1.clicked.connect(self.start_camera) # start camera if button LoadAuftrag is clicked + self.scene = QtWidgets.QGraphicsScene(self) + self.ui.graphicsView.setScene(self.scene) + + def start_camera(self): + # Start the YOLOv8 camera stream (only if not already started) + if self.yolo_stream is None: + self.yolo_stream = YOLOv8CameraStream(model_path="models/yolov8m_seg_e300.pt", logging_level="high") + # self.yolo_stream.start() # Start the YOLOv8 stream + self.timer.start(30) # Start the timer to update the frame every 30ms (about 33 FPS) + + def update_frame(self): + # Update the frame from YOLOv8 stream + if self.yolo_stream: + ret, frame = self.yolo_stream.cap.read() # Capture frame from YOLOv8 stream + + if ret: + # new part including processing via yolo model + processed_frame = self.yolo_stream.process_frame(frame) + + # Convert the frame from BGR (OpenCV format) to RGB + # frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + frame = cv2.cvtColor(processed_frame, cv2.COLOR_BGR2RGB) # might change nomenclature later? + + # Convert the frame to QImage + h, w, ch = frame.shape + bytes_per_line = ch * w + qt_image = QtGui.QImage(frame.data, w, h, bytes_per_line, QtGui.QImage.Format_RGB888) + + # Add the QImage to a QPixmap + pixmap = QtGui.QPixmap.fromImage(qt_image) + + # Get the size of the graphicsView and scale the pixmap to fit + view_size = self.ui.graphicsView.size() + scaled_pixmap = pixmap.scaled(view_size, QtCore.Qt.KeepAspectRatio) + + # Update the scene with the scaled pixmap + self.scene.clear() + self.scene.addPixmap(scaled_pixmap) + + def closeEvent(self, event): + # Release the camera when the application is closed + if self.yolo_stream is not None: + self.yolo_stream.cap.release() + event.accept() + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + + # Initialize the CameraStreamApp with the UI + camera_app = CameraStreamApp(ui) + + MainWindow.show() + sys.exit(app.exec_()) diff --git a/bjoerntest6.py b/bjoerntest6.py new file mode 100644 index 0000000..645fde0 --- /dev/null +++ b/bjoerntest6.py @@ -0,0 +1,138 @@ +from PyQt5 import QtCore, QtGui, QtWidgets +import cv2 +import sys +from CameraStream import YOLOv8CameraStream # Import the YOLOv8CameraStream class + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1090, 675) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + + # Create a vertical layout + self.layout = QtWidgets.QVBoxLayout(self.centralwidget) + + # Add your widgets to the layout + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.centralwidget) + self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.AuftragsdetailsTable.setColumnCount(5) + self.AuftragsdetailsTable.setRowCount(1) + self.layout.addWidget(self.AuftragsdetailsTable) + + self.label = QtWidgets.QLabel(self.centralwidget) + self.layout.addWidget(self.label) + + self.textEdit = QtWidgets.QTextEdit(self.centralwidget) + self.layout.addWidget(self.textEdit) + + self.bauteilTypBtn = QtWidgets.QPushButton(self.centralwidget) + self.layout.addWidget(self.bauteilTypBtn) + + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.centralwidget) + self.layout.addWidget(self.bauteiltypTextbox) + + self.label_3 = QtWidgets.QLabel(self.centralwidget) + self.layout.addWidget(self.label_3) + + self.label_4 = QtWidgets.QLabel(self.centralwidget) + self.layout.addWidget(self.label_4) + + self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget) + self.layout.addWidget(self.textEdit_3) + + self.checkBox = QtWidgets.QCheckBox(self.centralwidget) + self.layout.addWidget(self.checkBox) + + # Create the QGraphicsView + self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget) + self.layout.addWidget(self.graphicsView) + + # Add a button to the layout + self.btn1 = QtWidgets.QPushButton(self.centralwidget) + self.layout.addWidget(self.btn1) + + # Set the layout for the central widget + self.centralwidget.setLayout(self.layout) + + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btn1.setText(_translate("MainWindow", "load Auftrag")) + self.label.setText(_translate("MainWindow", "Auftragsnummer:")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltype erkennen")) + self.label_3.setText(_translate("MainWindow", "Bezeichnung")) + self.label_4.setText(_translate("MainWindow", "Pos.-Nr:")) + self.checkBox.setText(_translate("MainWindow", "Bauteiltype locked")) + +class CameraStreamApp(QtWidgets.QMainWindow): + def __init__(self, ui): + super().__init__() + self.ui = ui + self.yolo_stream = None # Initialize YOLOv8CameraStream as None + self.timer = QtCore.QTimer(self) + self.timer.timeout.connect(self.update_frame) + self.ui.btn1.clicked.connect(self.start_camera) # start camera if button LoadAuftrag is clicked + self.scene = QtWidgets.QGraphicsScene(self) + self.ui.graphicsView.setScene(self.scene) + + def start_camera(self): + # Start the YOLOv8 camera stream (only if not already started) + if self.yolo_stream is None: + self.yolo_stream = YOLOv8CameraStream(model_path="models/yolov8m_seg_e300.pt", logging_level="high") + self.timer.start(30) # Start the timer to update the frame every 30ms (about 33 FPS) + + def update_frame(self): + # Update the frame from YOLOv8 stream + if self.yolo_stream: + ret, frame = self.yolo_stream.cap.read() # Capture frame from YOLOv8 stream + + if ret: + # Process frame via YOLO model + processed_frame = self.yolo_stream.process_frame(frame) + + # Convert the frame from BGR (OpenCV format) to RGB + frame = cv2.cvtColor(processed_frame, cv2.COLOR_BGR2RGB) + + # Convert the frame to QImage + h, w, ch = frame.shape + bytes_per_line = ch * w + qt_image = QtGui.QImage(frame.data, w, h, bytes_per_line, QtGui.QImage.Format_RGB888) + + # Add the QImage to a QPixmap + pixmap = QtGui.QPixmap.fromImage(qt_image) + + # Get the size of the graphicsView and scale the pixmap to fit + view_size = self.ui.graphicsView.size() + scaled_pixmap = pixmap.scaled(view_size, QtCore.Qt.KeepAspectRatio) + + # Update the scene with the scaled pixmap + self.scene.clear() + self.scene.addPixmap(scaled_pixmap) + + def closeEvent(self, event): + # Release the camera when the application is closed + if self.yolo_stream is not None: + self.yolo_stream.cap.release() + event.accept() + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + + # Initialize the CameraStreamApp with the UI + camera_app = CameraStreamApp(ui) + + MainWindow.show() + sys.exit(app.exec_()) diff --git a/bjoerntest7.py b/bjoerntest7.py new file mode 100644 index 0000000..e4e27fa --- /dev/null +++ b/bjoerntest7.py @@ -0,0 +1,142 @@ +from PyQt5 import QtCore, QtGui, QtWidgets +import cv2 +import sys +from CameraStream import YOLOv8CameraStream # Import the YOLOv8CameraStream class + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1090, 675) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + + # Create a horizontal layout for the main window + self.layout = QtWidgets.QHBoxLayout(self.centralwidget) + + # Left Column (Can be empty or have some widgets) + self.left_column = QtWidgets.QWidget(self.centralwidget) + self.left_layout = QtWidgets.QVBoxLayout(self.left_column) + + # You can add more widgets to the left column here if needed + self.label = QtWidgets.QLabel("Left Column (Empty)", self.left_column) + self.left_layout.addWidget(self.label) + + # Add left column widget to the main layout + self.layout.addWidget(self.left_column) + + # Right Column + self.right_column = QtWidgets.QWidget(self.centralwidget) + self.right_layout = QtWidgets.QVBoxLayout(self.right_column) + + # Add your widgets to the right layout + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.right_column) + self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.AuftragsdetailsTable.setColumnCount(5) + self.AuftragsdetailsTable.setRowCount(1) + self.right_layout.addWidget(self.AuftragsdetailsTable) + + self.textEdit = QtWidgets.QTextEdit(self.right_column) + self.right_layout.addWidget(self.textEdit) + + self.bauteilTypBtn = QtWidgets.QPushButton("Bauteiltype erkennen", self.right_column) + self.right_layout.addWidget(self.bauteilTypBtn) + + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.right_column) + self.right_layout.addWidget(self.bauteiltypTextbox) + + self.label_3 = QtWidgets.QLabel("Bezeichnung", self.right_column) + self.right_layout.addWidget(self.label_3) + + self.label_4 = QtWidgets.QLabel("Pos.-Nr:", self.right_column) + self.right_layout.addWidget(self.label_4) + + self.textEdit_3 = QtWidgets.QTextEdit(self.right_column) + self.right_layout.addWidget(self.textEdit_3) + + self.checkBox = QtWidgets.QCheckBox("Bauteiltype locked", self.right_column) + self.right_layout.addWidget(self.checkBox) + + # Create the QGraphicsView + self.graphicsView = QtWidgets.QGraphicsView(self.right_column) + self.right_layout.addWidget(self.graphicsView) + + # Add right column widget to the main layout + self.layout.addWidget(self.right_column) + + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltype erkennen")) + # Add more translations as needed + +class CameraStreamApp(QtWidgets.QMainWindow): + def __init__(self, ui): + super().__init__() + self.ui = ui + self.yolo_stream = None # Initialize YOLOv8CameraStream as None + self.timer = QtCore.QTimer(self) + self.timer.timeout.connect(self.update_frame) + self.ui.bauteilTypBtn.clicked.connect(self.start_camera) # Connect the button to start the camera + self.scene = QtWidgets.QGraphicsScene(self) + self.ui.graphicsView.setScene(self.scene) + + def start_camera(self): + # Start the YOLOv8 camera stream (only if not already started) + if self.yolo_stream is None: + self.yolo_stream = YOLOv8CameraStream(model_path="models/yolov8m_seg_e300.pt", logging_level="high") + self.timer.start(30) # Start the timer to update the frame every 30ms (about 33 FPS) + + def update_frame(self): + # Update the frame from YOLOv8 stream + if self.yolo_stream: + ret, frame = self.yolo_stream.cap.read() # Capture frame from YOLOv8 stream + + if ret: + # Process frame via YOLO model + processed_frame = self.yolo_stream.process_frame(frame) + + # Convert the frame from BGR (OpenCV format) to RGB + frame = cv2.cvtColor(processed_frame, cv2.COLOR_BGR2RGB) + + # Convert the frame to QImage + h, w, ch = frame.shape + bytes_per_line = ch * w + qt_image = QtGui.QImage(frame.data, w, h, bytes_per_line, QtGui.QImage.Format_RGB888) + + # Add the QImage to a QPixmap + pixmap = QtGui.QPixmap.fromImage(qt_image) + + # Get the size of the graphicsView and scale the pixmap to fit + view_size = self.ui.graphicsView.size() + scaled_pixmap = pixmap.scaled(view_size, QtCore.Qt.KeepAspectRatio) + + # Update the scene with the scaled pixmap + self.scene.clear() + self.scene.addPixmap(scaled_pixmap) + + def closeEvent(self, event): + # Release the camera when the application is closed + if self.yolo_stream is not None: + self.yolo_stream.cap.release() + event.accept() + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + + # Initialize the CameraStreamApp with the UI + camera_app = CameraStreamApp(ui) + + MainWindow.show() + sys.exit(app.exec_()) diff --git a/bjoerntest8.py b/bjoerntest8.py new file mode 100644 index 0000000..249c756 --- /dev/null +++ b/bjoerntest8.py @@ -0,0 +1,159 @@ +from PyQt5 import QtCore, QtGui, QtWidgets +import cv2 +import sys +from CameraStream import YOLOv8CameraStream # Import the YOLOv8CameraStream class + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1090, 675) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.btn1 = QtWidgets.QPushButton(self.centralwidget) + self.btn1.setGeometry(QtCore.QRect(900, 80, 111, 25)) + self.btn1.setObjectName("btn1") + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.centralwidget) + self.AuftragsdetailsTable.setGeometry(QtCore.QRect(10, 10, 661, 192)) + self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.AuftragsdetailsTable.setObjectName("AuftragsdetailsTable") + self.AuftragsdetailsTable.setColumnCount(5) + self.AuftragsdetailsTable.setRowCount(1) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(0, 0, item) + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setGeometry(QtCore.QRect(900, 20, 121, 17)) + self.label.setObjectName("label") + self.textEdit = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit.setGeometry(QtCore.QRect(860, 40, 221, 31)) + self.textEdit.setObjectName("textEdit") + self.bauteilTypBtn = QtWidgets.QPushButton(self.centralwidget) + self.bauteilTypBtn.setGeometry(QtCore.QRect(60, 340, 161, 25)) + self.bauteilTypBtn.setObjectName("bauteilTypBtn") + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.centralwidget) + self.bauteiltypTextbox.setGeometry(QtCore.QRect(230, 340, 221, 31)) + self.bauteiltypTextbox.setObjectName("bauteiltypTextbox") + self.label_3 = QtWidgets.QLabel(self.centralwidget) + self.label_3.setGeometry(QtCore.QRect(250, 320, 181, 20)) + self.label_3.setObjectName("label_3") + self.label_4 = QtWidgets.QLabel(self.centralwidget) + self.label_4.setGeometry(QtCore.QRect(520, 320, 67, 17)) + self.label_4.setObjectName("label_4") + self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit_3.setGeometry(QtCore.QRect(460, 340, 191, 31)) + self.textEdit_3.setObjectName("textEdit_3") + self.checkBox = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox.setGeometry(QtCore.QRect(70, 410, 151, 23)) + self.checkBox.setChecked(False) + self.checkBox.setObjectName("checkBox") + self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget) + self.graphicsView.setGeometry(QtCore.QRect(1100, 20, int(640*1.2), int(480*1.2))) # position and size of camera frame + self.graphicsView.setObjectName("graphicsView") + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1090, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btn1.setText(_translate("MainWindow", "load Auftrag")) + self.label.setText(_translate("MainWindow", "Auftragsnummer:")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltype erkennen")) + self.label_3.setText(_translate("MainWindow", "Bezeichnung")) + self.label_4.setText(_translate("MainWindow", "Pos.-Nr:")) + self.checkBox.setText(_translate("MainWindow", "Bauteiltype locked")) + +class CameraStreamApp(QtWidgets.QMainWindow): + def __init__(self, ui): + super().__init__() + self.ui = ui + self.yolo_stream = None # Initialize YOLOv8CameraStream as None + self.timer = QtCore.QTimer(self) + self.timer.timeout.connect(self.update_frame) + self.ui.btn1.clicked.connect(self.start_camera) # start camera if button LoadAuftrag is clicked + self.scene = QtWidgets.QGraphicsScene(self) + self.ui.graphicsView.setScene(self.scene) + + def start_camera(self): + # Start the YOLOv8 camera stream (only if not already started) + if self.yolo_stream is None: + self.yolo_stream = YOLOv8CameraStream(model_path="models/yolov8m_seg_e300.pt", logging_level="high") + # self.yolo_stream.start() # Start the YOLOv8 stream + self.timer.start(30) # Start the timer to update the frame every 30ms (about 33 FPS) + + def update_frame(self): + # Update the frame from YOLOv8 stream + if self.yolo_stream: + ret, frame = self.yolo_stream.cap.read() # Capture frame from YOLOv8 stream + + if ret: + # new part including processing via yolo model + processed_frame = self.yolo_stream.process_frame(frame) + + # Convert the frame from BGR (OpenCV format) to RGB + # frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + frame = cv2.cvtColor(processed_frame, cv2.COLOR_BGR2RGB) # might change nomenclature later? + + # Convert the frame to QImage + h, w, ch = frame.shape + bytes_per_line = ch * w + qt_image = QtGui.QImage(frame.data, w, h, bytes_per_line, QtGui.QImage.Format_RGB888) + + # Add the QImage to a QPixmap + pixmap = QtGui.QPixmap.fromImage(qt_image) + + # Get the size of the graphicsView and scale the pixmap to fit + view_size = self.ui.graphicsView.size() + scaled_pixmap = pixmap.scaled(view_size, QtCore.Qt.KeepAspectRatio) + + # Update the scene with the scaled pixmap + self.scene.clear() + self.scene.addPixmap(scaled_pixmap) + + def closeEvent(self, event): + # Release the camera when the application is closed + if self.yolo_stream is not None: + self.yolo_stream.cap.release() + event.accept() + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + + # Initialize the CameraStreamApp with the UI + camera_app = CameraStreamApp(ui) + + MainWindow.show() + sys.exit(app.exec_()) diff --git a/bjoerntest9.py b/bjoerntest9.py new file mode 100644 index 0000000..3fb7269 --- /dev/null +++ b/bjoerntest9.py @@ -0,0 +1,910 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'test.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +########## beim Static workflow funktionieren die Threads ab dem zweiten nicht mehr + +#from PyQt5 import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QProgressBar +from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5.QtWidgets import QApplication, QComboBox +from PyQt5.QtCore import QTimer, QThread, pyqtSignal, QObject +from PyQt5.QtGui import QColor + +import serial +import binascii +import math +import mariadb +import time +import threading + +from CameraStream import YOLOv8CameraStream # Import the YOLOv8CameraStream class +import cv2 + + +db_config = { + 'user': 'dbUser', + 'password': 'dbPassword', + 'host': '127.0.0.1', # 'host': 'localhost', + 'database': 'projectGeislinger', + 'port': 3306 # Standard port for MariaDB +} + +# Establishing the connection +conn = mariadb.connect(**db_config) +# Create a cursor to execute queries +cursor = conn.cursor() + +# # Konfiguration der seriellen Schnittstelle +# ser = serial.Serial('/dev/ttyUSB0', 9600) + +# Configuration of the serial port +try: + ser = serial.Serial('/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0', 9600) + print("Serial port connected successfully.") +except serial.SerialException: + ser = None + print("Warning: Serial port not found. Continuing without serial connection. Only working for demo-purposes.") + +waageEingeschwungen = False + + +def wahrscheinlichkeitsDichte(x,mue, var): + # in der Funktion wird der Wahrscheinlichkeitsdichtenwert der Variable x für eine bestimmte Normalverteilung berechnet + standardabweichung = var**0.5 + + result = 1/(standardabweichung * (2*math.pi)**0.5 ) * math.exp(-0.5 * ((x-mue)/standardabweichung)**2) + + return result + +def calcWahrscheinlichkeitFromDichte(x,mue, var): + # in der Funktion wird die Wahrscheinlichkeit via der Wahrscheinlichkeitsdichte berechnet, indem das Verhältnis aus der dem Bauteil zugehörigen Wahrscheinlichkeitsdichte zu der maximalen Wahrscheinlichkeitsdichte berechnet wird + p1 = wahrscheinlichkeitsDichte(x,mue, var) + p_max = wahrscheinlichkeitsDichte(mue,mue, var) + + return p1/p_max + + + +#class Worker(QThread): +class Worker(QObject): + #progress = pyqtSignal(int) + objectDetectionStartSignal = pyqtSignal(str) + objectDetectionFinishedSignal = pyqtSignal(int, object) + + checkWaageStartSignal = pyqtSignal(int, int, str) + checkWaageUpdateSignal = pyqtSignal(int, int) + checkWaageFinishedSignal = pyqtSignal(int) + + waageStoppedSignal = pyqtSignal(int) + stopLoopSignal = pyqtSignal(bool) #das Signal wird verwendet um direkt den stopLoop-Wert zu ändern (also kein Funktionsaufruf) + + stopLoop = False + btTypeIsSet = False + correctBtNr = False + + + def __init__(self): + super(Worker, self).__init__() + stopLoop = False + + + def getDataOfArticleType(self, allArticles, articleType): + # die Funktion geht die Liste mit allen Artikeln durch und gibt jenen Eintrag, welcher mit dem "articleType" übereinstimmt zurück + for i in allArticles: + if i[1] == articleType: + return i + + return -1 + + def waageNichtEingeschwungenOutput(self): + print("Die Waage ist noch nicht eingeschwungen - Ergebnisse sind dadurch noch fehlerhaft.") + + def readWaage(self): + # in folgender Funktion wird die Waage ausgelesen + + #print("connection is open: ", ser.is_open) #Debuggingausgabe + #print("port to which it is connected: ", ser.portstr) #Debuggingausgabe + + + if ser.is_open == False: + ser.open() + + + #an die Waage den Befehl senden, dass sie ausgelesen werden soll + ser.write(b'getWeight\n') + #ser.write(b'tare\n') + serialString = ser.readline().decode('utf-8').rstrip() #Auslesen des Serial-Strings/der Messung der Waage + + # wenn am Ende des Strings kg steht, dann ist die Waage eingeschwungen - das wird hiermit überprüft + lenString = len(serialString)-1 + if serialString[lenString] == "g" and serialString[lenString-1] == "k": + #print("ist eingeschwungen") #Debuggingausgabe + waageEingeschwungen = True + else: + print("die Waage ist noch nicht eingeschwungen") + waageEingeschwungen = False + + #aus dem String werden alle Zeichen, welche nicht zur Darstellung der Zahl benötigt werden entfernt + intString = "" + for i in serialString: + if i=="-" or i=="0" or i=="." or i=="1" or i=="2" or i=="3" or i=="4" or i=="5" or i=="6" or i=="7" or i=="8" or i=="9": + intString = intString + i + print("Wert, welcher von der Waage ausgelesen wurde: " + intString + "kg") + ## Waage auslesen - ENDE + + ser.close() + #print("connection is open: ", ser.is_open) #Debuggingausgabe + + return waageEingeschwungen, intString + + def objectTypeDetectionThread(self, auftragsnummer): + # in dieser Funktion wird der Typ des Bauteils automatisch erkannt + + #print("objectTypeDetectionThread - Running in thread:", threading.current_thread().name) #Debuggausgabe + + # Parameterdefinition + propDensVect = [] + + self.btTypeIsSet = False + + while(self.btTypeIsSet == False and self.stopLoop == False): + + # Auslesen der Waage + waageEingeschwungen, intString = self.readWaage() + if waageEingeschwungen == False: + self.waageNichtEingeschwungenOutput() + else: + + # Datenbankabfrage + sql_query = "SELECT Auftraege.id, EinzelteilID, Auftragsnummer, Anzahl, Einzelteile.id, Bezeichnung, CAST(projectGeislinger.Einzelteile.GewichtMittelwert AS CHAR), CAST(projectGeislinger.Einzelteile.GewichtVarianz AS CHAR) FROM projectGeislinger.Auftraege, projectGeislinger.Einzelteile where projectGeislinger.Auftraege.EinzelteilID = projectGeislinger.Einzelteile.id AND projectGeislinger.Auftraege.Auftragsnummer = " + auftragsnummer + cursor.execute(sql_query) + auftragEinzelteilDaten = cursor.fetchall() + + ''' + # Display data #Debugausgabe + print("Ausgabe der Auftragsdetails des obigen Auftrags, inklusive Einzelteildetails:") + for row in auftragEinzelteilDaten: + print(row) + ''' + + # in der Folge werden alle Wahrscheinlichkeitsdichten der Auftragsbauteile berechnet und in dem Vektor gesammelt + for row in auftragEinzelteilDaten: + propDensVect.append([wahrscheinlichkeitsDichte(float(intString),float(row[6]), float(row[7])), row[1], row[5]]) + + # Jenen Eintrag des propDensVect raussuchen, welcher die größte Wahrscheinlichkeitsdichte beinhaltet + maxpropDens = 0 + einzelteilID = 0 + rowData = None + for row in propDensVect: + if row[0] > maxpropDens: + maxpropDens = row[0] + einzelteilID = row[1] + rowData = row + + # überprüfen, ob das aufliegende Bauteil in der Auftragstabelle vorhanden ist + if(einzelteilID == 0): + print("Es wurde kein Bauteil aus der Auftragsliste (Tabelle) erkannt.") + else: + print("Bei dem Bauteil" , einzelteilID , "wurde die höchste Wahrscheinlichkeitsdichte berechnet.") + + # Wahrscheinlichkeit berechnen, dass das angegebene Bauteil auch wirklich diesem entspricht + prop = 0 + for row in auftragEinzelteilDaten: + if row[1] == einzelteilID: + prop = calcWahrscheinlichkeitFromDichte(float(intString),float(row[6]), float(row[7])) + break + print("Die Wahrscheinlichkeit, dass es das Bauteil ist, beträgt: ", prop) + + # den Bool auf true setzen, damit die Schleife beendet wird - dieser wird auf True gesetzt, wenn ein Bauteiltyp erkannt wird + self.btTypeIsSet = True + + if(self.stopLoop == False): + # ein Signal zurück an den MainThreat senden, mit den Infos/Ergebnissen, der Typenbestimmung + self.objectDetectionFinishedSignal.emit(einzelteilID, rowData) + else: + self.waageStoppedSignal.emit(einzelteilID) + + def checkWaageThread(self, einzelteilID, teileZuViel, auftragsnummer): + + self.correctBtNr = False + prevAnzahl = 0 + anzahl = 0 + einzelteilID = einzelteilID + + while (self.correctBtNr == False and self.stopLoop == False): + + #überprüfen, ob die Waage eingeschwungen ist (und damit korrekte Ergebnisse liefert) + waageEingeschwungen, intString = self.readWaage() + if waageEingeschwungen == False: + self.waageNichtEingeschwungenOutput() + else: + + # Datenbankabfrage - holen der Auftrags- und Bauteilinfos + sql_query = "SELECT Auftraege.id, EinzelteilID, Auftragsnummer, Anzahl, Einzelteile.id, Bezeichnung, CAST(projectGeislinger.Einzelteile.GewichtMittelwert AS CHAR), CAST(projectGeislinger.Einzelteile.GewichtVarianz AS CHAR) FROM projectGeislinger.Auftraege, projectGeislinger.Einzelteile where projectGeislinger.Auftraege.EinzelteilID = projectGeislinger.Einzelteile.id AND projectGeislinger.Auftraege.Auftragsnummer = " + auftragsnummer + cursor.execute(sql_query) + auftragDaten = cursor.fetchall() + + ''' + # Display data - zum Debuggen + print("Ausgabe der Auftragsdetails:") + print("id|EinzelteilID|Auftragsnummer|Anzahl") + for row in auftragDaten: + print(row) + ''' + + #auslesen, wie viele Bauteile des Types laut Auftrag vorhanden sein sollen + anzBauteile_soll = 0 + idVorhanden = False + + for row in auftragDaten: + if row[1] == einzelteilID: + anzBauteile_soll = row[3] + idVorhanden = True + + if(idVorhanden == False): + print("Die gewählte Pos.Nr ist nicht in der Auftragsliste (Tabelle) vorhanden.") + return + + # Berechnen der Wahrscheinlichkeitsdichten - der Betrag aller Wahrscheinlichkeitsdichten werden im propDensVect gespeichert + propDensVect = [] + articleData = self.getDataOfArticleType(auftragDaten, einzelteilID) + for i in range(1,anzBauteile_soll+teileZuViel+1): + # Mathematische Sätze, auf welchen die Berechnung basiert: + # seien X1,..., Xn unabhängige Zufallsvariablen die N(mue_i, sigma_i^2) verteilt sind, dann ist X = X1+...+Xn - N(mue, sigma^2) verteilt mit mue=mue1+...+mue_n, sigma^2 = sigma_1^2+...+sigma_n^2 + mueGes = float(articleData[6])*i # Berechnen des äquivalenten Mittelwert + varGes = float(articleData[7])*i # Berechnen der äquivalenten Varianz + propDensVect.append([wahrscheinlichkeitsDichte(float(intString),mueGes, varGes), i]) + + # durch den propDensVect iterieren und jenen Eintrag mit der höchsten Wahrscheinlichkeitsdichte raussuchen + maxpropDens = 0 + for row in propDensVect: + if row[0] > maxpropDens: + maxpropDens = row[0] + anzahl = row[1] + + # damit nur etwas gemacht wird (zb ein Updatesignal an den Hauptthread zurücksenden), wenn sich die berechnete Anzahl ändert + if prevAnzahl != anzahl: + prevAnzahl = anzahl + + # Die Wahrscheinlichkeit berechnen, dass das obige Ergebnis auch dem Bauteil entspricht + if anzahl > 0: + for row in auftragDaten: + if row[1] == einzelteilID: + prop = calcWahrscheinlichkeitFromDichte(float(intString),float(row[6])*anzahl, float(row[7])*anzahl) + break + print("Die Wahrscheinlichkeit, dass es das Bauteil ist, beträgt: ", prop) + + # wenn genug Bauteile vorhanden sind, dann soll die Schleife beendet werden + if (anzahl == anzBauteile_soll): + self.correctBtNr = True + + # Konsolenausgabe + if maxpropDens > 0: + print("Bei der Anzahl" , anzahl , "des Bauteiltypes", einzelteilID, ",wurde die höchste Wahrscheinlichkeitsdichte berechnet.") + self.checkWaageUpdateSignal.emit(einzelteilID, anzahl) + + else: + print("Von der ausgewählten Bauteiltype liegt die berechnete Wahrscheinlichkeit bei 0, dass zwischen 0 und", anzBauteile_soll+teileZuViel, "Bauteilen auf der Waage liegen.") + print("Falls die korrekte Anzhl an Bauteilen auf der Waage liegt, könnte der Fehler in einer falschen Kalibrierung der Waage liegen (TARE).") + + if(self.stopLoop == False): + self.checkWaageFinishedSignal.emit(einzelteilID) + else: + self.waageStoppedSignal.emit(einzelteilID) + + + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + self.auftragsnummer = "" + self.teileZuViel = 0 # Anzahl an Bauteilen, welche zu viel drinnen sein können - der Parameter kann selbst gesetzt werden ##### + self.correctBtNr = False + self.btTypeIsSet = False + + + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1090, 675) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.btn1 = QtWidgets.QPushButton(self.centralwidget) + self.btn1.setGeometry(QtCore.QRect(700, 45, 111, 25)) + self.btn1.setObjectName("btn1") + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.centralwidget) + self.AuftragsdetailsTable.setGeometry(QtCore.QRect(10, 300, 661, 192)) + self.AuftragsdetailsTable.setObjectName("AuftragsdetailsTable") + self.AuftragsdetailsTable.setColumnCount(7) + self.AuftragsdetailsTable.setRowCount(0) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(5, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(6, item) + + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setGeometry(QtCore.QRect(500, 20, 121, 17)) + self.label.setObjectName("label") + self.textEdit = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit.setGeometry(QtCore.QRect(450, 40, 221, 31)) + self.textEdit.setObjectName("textEdit") + self.bauteilTypBtn = QtWidgets.QPushButton(self.centralwidget) + self.bauteilTypBtn.setGeometry(QtCore.QRect(700, 150, 161, 25)) + self.bauteilTypBtn.setObjectName("bauteilTypBtn") + self.checkWaageBtn = QtWidgets.QPushButton(self.centralwidget) + self.checkWaageBtn.setGeometry(QtCore.QRect(700, 460, 161, 25)) + self.checkWaageBtn.setObjectName("checkWaageBtn") + self.stopLoopBtn = QtWidgets.QPushButton(self.centralwidget) + self.stopLoopBtn.setGeometry(QtCore.QRect(700, 500, 161, 25)) + self.stopLoopBtn.setObjectName("stopLoopBtn") + self.waageTareBtn = QtWidgets.QPushButton(self.centralwidget) + self.waageTareBtn.setGeometry(QtCore.QRect(700, 100, 161, 25)) + self.waageTareBtn.setObjectName("waageTareBtn") + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.centralwidget) + self.bauteiltypTextbox.setGeometry(QtCore.QRect(700, 290, 221, 31)) + self.bauteiltypTextbox.setObjectName("bauteiltypTextbox") + self.BezeichnungLabel = QtWidgets.QLabel(self.centralwidget) + self.BezeichnungLabel.setGeometry(QtCore.QRect(700, 270, 181, 20)) + self.BezeichnungLabel.setObjectName("BezeichnungLabel") + self.PosNrLabel = QtWidgets.QLabel(self.centralwidget) + self.PosNrLabel.setGeometry(QtCore.QRect(700, 200, 67, 17)) + self.PosNrLabel.setObjectName("PosNrLabel") + self.PosNrTxtFeld = QtWidgets.QTextEdit(self.centralwidget) + self.PosNrTxtFeld.setGeometry(QtCore.QRect(700, 220, 191, 31)) + self.BezeichnungLabel.setObjectName("BezeichnungLabel") + self.teileZuVielLabel = QtWidgets.QLabel(self.centralwidget) + self.teileZuVielLabel.setGeometry(QtCore.QRect(700, 350, 350, 17)) + self.teileZuVielLabel.setObjectName("teileZuVielLabel") + self.teileZuVielTxtFeld = QtWidgets.QTextEdit(self.centralwidget) + self.teileZuVielTxtFeld.setGeometry(QtCore.QRect(700, 370, 191, 31)) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1090, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + self.checkBox = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox.setGeometry(QtCore.QRect(700, 10, 151, 23)) + self.checkBox.setObjectName("checkBox") + + # button and checkbox for camera workflow + graphicsview widget + self.startCamBtn = QtWidgets.QPushButton(self.centralwidget) + self.startCamBtn.setGeometry(QtCore.QRect(900, 45, 161, 25)) + self.startCamBtn.setObjectName("startCamBtn") + self.stopCamBtn = QtWidgets.QPushButton(self.centralwidget) + self.stopCamBtn.setGeometry(QtCore.QRect(900, 45+25, 161, 25)) + self.stopCamBtn.setObjectName("stopCamBtn") + self.camWorkFlowcheckBox = QtWidgets.QCheckBox(self.centralwidget) + self.camWorkFlowcheckBox.setGeometry(QtCore.QRect(900, 10, 151, 23)) + self.camWorkFlowcheckBox.setObjectName("camWorkFlowcheckBox") + self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget) + self.graphicsView.setGeometry(QtCore.QRect(1100, 20, int(640*1.2), int(480*1.2))) # position and size of camera frame + self.graphicsView.setObjectName("graphicsView") + + #self.myTestLambda = lambda: self.worker.checkWaageStartSignal.emit(einzelteilID, self.teileZuViel, self.auftragsnummer) + + ''' + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setVerticalHeaderItem(0,item) + ''' + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btn1.setText(_translate("MainWindow", "load Auftrag")) + self.btn1.clicked.connect(self.auftragsBtnClicked) + item = self.AuftragsdetailsTable.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Pos.-Nr")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "Matnr mit hoechster Version")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(2) + item.setText(_translate("MainWindow", "Bezeichnung + Werkstoff")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(3) + item.setText(_translate("MainWindow", "Soll-Menge")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(4) + item.setText(_translate("MainWindow", "Ist-Menge")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(5) + item.setText(_translate("MainWindow", "Lgort")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(6) + item.setText(_translate("MainWindow", "set Farbe")) + + self.label.setText(_translate("MainWindow", "Auftragsnummer:")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltyp erkennen")) + self.bauteilTypBtn.clicked.connect(self.objectTypeDetection) + self.AuftragsdetailsTable.cellClicked.connect(self.onTableCellClick) + #self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers) + #item = self.AuftragsdetailsTable.verticalHeaderItem(0) + #item.setText(_translate("MainWindow", "test")) + self.BezeichnungLabel.setText(_translate("MainWindow", "Bezeichnung")) + self.PosNrLabel.setText(_translate("MainWindow", "Pos.-Nr:")) + self.teileZuVielLabel.setText(_translate("MainWindow", "Zu prüfende Teileanzahl über Auftragsanzahl:")) + self.teileZuVielTxtFeld.setText(str(self.teileZuViel)) + self.checkWaageBtn.setText(_translate("MainWindow", "check Waage")) + self.checkWaageBtn.clicked.connect(self.checkWaage) + self.stopLoopBtn.setText(_translate("MainWindow", "stop loop")) + self.stopLoopBtn.clicked.connect(self.stopLoopClicked) + self.waageTareBtn.setText(_translate("MainWindow", "Waage tarieren")) + self.waageTareBtn.clicked.connect(self.onTareClick) + self.checkBox.setText(_translate("MainWindow", "static workflow")) + self.checkBox.clicked.connect(self.onCheckboxCheck) + + # new camera workflow + self.startCamBtn.setText(_translate("MainWindow", "Start Camera")) + # self.startCamBtn.clicked.connect(self.startCamBtnClicked) + self.stopCamBtn.setText(_translate("MainWindow", "Stop Camera")) + self.camWorkFlowcheckBox.setText(_translate("MainWindow", "Camera Workflow")) + # self.camWorkFlowcheckBox.clicked.connect(self.onCheckboxCheck) + + def onTareClick(self): + #Tarieren der Waage + if ser.is_open == False: + ser.open() + ser.write(b'tare\n') + ser.close() + + + def onCheckboxCheck(self): + if self.checkBox.isChecked() == True: + print("static workflow activated") + else: + print("static workflow deactivated") + + def getRowNr(self, posNr): + for i in range(0,self.AuftragsdetailsTable.rowCount()): + if(self.AuftragsdetailsTable.item(i,0).text() == str(posNr)): + return i +# brauche ich hier vermutlich nicht mehr - ist in den Worker Thread kopiert worden + def waageNichtEingeschwungenOutput(self): + print("Die Waage ist noch nicht eingeschwungen - Ergebnisse sind dadurch noch fehlerhaft.") + + def onTableCellClick(self): + self.PosNrTxtFeld.setText(self.AuftragsdetailsTable.item(self.AuftragsdetailsTable.currentRow(),0).text()) + self.bauteiltypTextbox.setText(self.AuftragsdetailsTable.item(self.AuftragsdetailsTable.currentRow(),2).text()) + + def setAuftragsnummer(self): + self.auftragsnummer = self.textEdit.toPlainText() + if(not self.auftragsnummer): + self.auftragsnummer = "" + self.textEdit.setText("") + + def checkAuftragsnummerEmpty(self): + if self.auftragsnummer == "": + print("Das Auftragsnummernfeld ist leer.") + return True + else: + return False + + def checkPosNrEmpty(self): + if self.PosNrTxtFeld.toPlainText() == "": + return True + else: + return False + + +# eventuell benötigt man die Funktion hier nicht mehr, da sie zu den Threads kopiert wurde + def getDataOfArticleType(self, allArticles, articleType): + # die Funktion geht die Liste mit allen Artikeln durch und gibt jenen Eintrag, welcher mit dem "articleType" übereinstimmt zurück + for i in allArticles: + if i[1] == articleType: + return i + return -1 + + def updateGUI(self): + self.PosNrLabel.repaint() #GUI aktualisieren + QApplication.processEvents() #GUI aktualisieren + + def setRowColor(self, rowID,r,g,b): + self.AuftragsdetailsTable.item(rowID, 0).setBackground(QtGui.QColor(r,g,b)) + self.AuftragsdetailsTable.item(rowID, 1).setBackground(QtGui.QColor(r,g,b)) + self.AuftragsdetailsTable.item(rowID, 2).setBackground(QtGui.QColor(r,g,b)) + self.AuftragsdetailsTable.item(rowID, 3).setBackground(QtGui.QColor(r,g,b)) + self.AuftragsdetailsTable.item(rowID, 4).setBackground(QtGui.QColor(r,g,b)) + self.AuftragsdetailsTable.item(rowID, 5).setBackground(QtGui.QColor(r,g,b)) + +#wird hier vermutlich nicht mehr benötigt - wurde in die Workerklasse kopiert + def readWaage(self): + # in folgender Funktion wird die Waage ausgelesen + + #print("connection is open: ", ser.is_open) #Debuggingausgabe + #print("port to which it is connected: ", ser.portstr) #Debuggingausgabe + self.checkPosNrEmpty() + + if ser.is_open == False: + ser.open() + + + #an die Waage den Befehl senden, dass sie ausgelesen werden soll + ser.write(b'getWeight\n') + #ser.write(b'tare\n') + serialString = ser.readline().decode('utf-8').rstrip() #Auslesen des Serial-Strings/der Messung der Waage + + # wenn am Ende des Strings kg steht, dann ist die Waage eingeschwungen - das wird hiermit überprüft + lenString = len(serialString)-1 + if serialString[lenString] == "g" and serialString[lenString-1] == "k": + #print("ist eingeschwungen") #Debuggingausgabe + waageEingeschwungen = True + else: + print("die Waage ist noch nicht eingeschwungen") + waageEingeschwungen = False + + #aus dem String werden alle Zeichen, welche nicht zur Darstellung der Zahl benötigt werden entfernt + intString = "" + for i in serialString: + if i=="-" or i=="0" or i=="." or i=="1" or i=="2" or i=="3" or i=="4" or i=="5" or i=="6" or i=="7" or i=="8" or i=="9": + intString = intString + i + print("Wert, welcher von der Waage ausgelesen wurde: " + intString + "kg") + ## Waage auslesen - ENDE + + ser.close() + #print("connection is open: ", ser.is_open) #Debuggingausgabe + + return waageEingeschwungen, intString + + def auftragsBtnClicked(self): + databaseQueryWorking = False #wird für die Überprüfung, ob die Datenbankabfrage fehlerhaft ist, verwendet + auftragEinzelteilDaten = [] + + self.setAuftragsnummer() + if(not self.checkAuftragsnummerEmpty()): + + sql_query = "SELECT Auftraege.id, EinzelteilID, Auftragsnummer, Anzahl, Einzelteile.id, Bezeichnung, CAST(projectGeislinger.Einzelteile.GewichtMittelwert AS CHAR), CAST(projectGeislinger.Einzelteile.GewichtVarianz AS CHAR) FROM projectGeislinger.Auftraege, projectGeislinger.Einzelteile where projectGeislinger.Auftraege.EinzelteilID = projectGeislinger.Einzelteile.id AND projectGeislinger.Auftraege.Auftragsnummer = " + self.auftragsnummer + try: + cursor.execute(sql_query) + # Fetch results + auftragEinzelteilDaten = cursor.fetchall() + databaseQueryWorking = True + except: + print("Fehler in der Datenbankabfrage.") + + + + if databaseQueryWorking==True and len(auftragEinzelteilDaten)>0: + ''' + # Display data + print("Ausgabe der Auftragsdetails des obigen Auftrags, inklusive Einzelteildetails:") + for row in auftragEinzelteilDaten: + if str(row[2]) == self.auftragsnummer: + print("passt") + print(row) + ''' + + ### die Auftragsdaten in die Tabelle laden + self.AuftragsdetailsTable.setRowCount(len(auftragEinzelteilDaten)) + self.item = QtWidgets.QTableWidgetItem() + counter = 0 + for row in auftragEinzelteilDaten: + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 0, self.item) + self.item.setText(str(row[1])) + self.item.setFlags(self.item.flags() & ~QtCore.Qt.ItemIsEditable) + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 1, self.item) + self.item.setFlags(self.item.flags() & ~QtCore.Qt.ItemIsEditable) + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 2, self.item) + self.item.setText(str(row[5])) + self.item.setFlags(self.item.flags() & ~QtCore.Qt.ItemIsEditable) + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 3, self.item) + self.item.setText(str(row[3])) + self.item.setFlags(self.item.flags() & ~QtCore.Qt.ItemIsEditable) + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 4, self.item) + self.item.setText(str("0")) + self.item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(counter, 5, self.item) + self.item.setFlags(self.item.flags() & ~QtCore.Qt.ItemIsEditable) + + # Dropdown für Farben in die 6. Spalte einfügen + #self.item = QtWidgets.QTableWidgetItem() + #self.AuftragsdetailsTable.setItem(counter, 6, self.item) + combo = QComboBox() + combo.addItems(["Farbe", "Weiß", "Orange", "Grün"]) + combo.currentIndexChanged.connect(lambda index, rowId =counter: self.change_row_color(rowId, index)) + self.AuftragsdetailsTable.setCellWidget(counter, 6, combo) + counter = counter +1 + + elif(databaseQueryWorking==True and len(auftragEinzelteilDaten)==0): + print("Es wurde in der Datenbank kein Auftrag mit dieser Auftragsnummer gefunden.") + + def change_row_color(self, row, color_index): + if(color_index == 1): + self.setRowColor(row,255,255,255) + if(color_index == 2): + self.setRowColor(row,255,165,0) + if(color_index == 3): + self.setRowColor(row,0,255,0) + + + + + def stopLoopClicked(self): + # damit wird beim Klick auf den Stopbutton der stopLoop-boolWert in der Workerklasse auf true gesetzt -> der Stop des Threads wird initiiert + if hasattr(self, 'objectDetectionWorker'): + self.objectDetectionWorker.stopLoopSignal.emit(True) + + if hasattr(self, 'checkWaageWorker'): + self.checkWaageWorker.stopLoopSignal.emit(True) + + def checkWaage(self): + #print("Running in thread:", threading.current_thread().name) # Debuggingausgabe + QApplication.processEvents() + + # die Loopvariable des Workers auf False setzten, damit die Schleife durchgelaufen wird (diese wird zum Abbruch der Schleife benötigt -> siehe stopLoop) + #self.checkWaageWorker.stopLoopSignal.emit(False) + + # überprüfen, ob der Auftrag geladen wurde + if(self.AuftragsdetailsTable.item(0,0) == None): + print("Der Auftrag muss zuerst geladen werden.") + return + + # überprüfen, ob ein Bauteiltyp gesetzt wurde + if(self.checkPosNrEmpty()==True and self.checkBox.isChecked() == False): + print("Das Pos.-Nr.-Feld ist leer.") + return + + # den GUI Wert von Textfeld TeileZuViel in die Variable schreiben + self.teileZuViel = int(float(self.teileZuVielTxtFeld.toPlainText())) + self.teileZuVielTxtFeld.setText(str(self.teileZuViel)) + + einzelteilID = -1 # Initialisieren der Variable mit einem Defaultwert, welcher nie eingenommen werden können sollte + if (self.checkBox.isChecked() == False): + #übernehmen der BauteilID aus dem Feld Pos.-Nr - wenn der Workflow dynamisch gewählt wurde + einzelteilID = int(self.PosNrTxtFeld.toPlainText()) + else: + # wenn der Workflow statisch gesetzt wurde, dann soll das erste Item aus der Auftragsliste geladen werden, von welchem noch nicht genug Bauteile auf der Waage liegen + for i in range(0,self.AuftragsdetailsTable.rowCount()): + if self.AuftragsdetailsTable.item(i,3).text() != self.AuftragsdetailsTable.item(i,4).text(): + einzelteilID = int(self.AuftragsdetailsTable.item(i,0).text()) + self.PosNrTxtFeld.setText(str(self.AuftragsdetailsTable.item(i,0).text())) + self.bauteiltypTextbox.setText(str(self.AuftragsdetailsTable.item(i,2).text())) + break + + if einzelteilID == -1: + # den Thread beenden + self.checkWaageThread.quit() + self.checkWaageThread.wait() + try: + self.checkWaageThread.started.disconnect() # Trenne das Signal, damit es beim nächsten Start keine Konflikte gibt + print("Der Thread wurde beendet.") + except: + print("Disconnecting the thread did not work.") + return + + + #zum setzen den Farbe der gesamten Reihe auf Orange + self.setRowColor(self.getRowNr(einzelteilID),255,165,0) + + # den Thread starten, welcher die Bauteilanzahl überprüft + self.checkWaageWorker = Worker() + self.checkWaageThread = QThread() + + self.checkWaageWorker.moveToThread(self.checkWaageThread) + + self.checkWaageWorker.checkWaageStartSignal.connect(self.checkWaageWorker.checkWaageThread) + self.checkWaageWorker.checkWaageUpdateSignal.connect(self.checkWaageUpdate) + self.checkWaageWorker.checkWaageFinishedSignal.connect(self.checkWaageFinished) + self.checkWaageWorker.waageStoppedSignal.connect(self.threadStopped) + self.checkWaageWorker.stopLoopSignal.connect(lambda status: setattr(self.checkWaageWorker, 'stopLoop', status)) #wird fürs aktive Stoppen des Threads benötigt + + self.checkWaageThread.started.connect(lambda: self.checkWaageWorker.checkWaageStartSignal.emit(einzelteilID, self.teileZuViel, self.auftragsnummer)) + self.checkWaageThread.start() + + def checkWaageUpdate(self, einzelteilID, anzahl): + # die Funktion updated die (vom Thread) berechnete Bauteilanzahl in der GUI + self.AuftragsdetailsTable.item(self.getRowNr(einzelteilID), 4).setText(str(anzahl)) # in die Tabelle die Anzahl an berechneten Bauteilen reinschreiben + + def checkWaageFinished(self, einzelteilID): + self.setRowColor(self.getRowNr(einzelteilID),0,255,0) #zum setzen den Farbe der gesamten Reihe auf Grün + + # den Thread beenden + self.checkWaageThread.quit() + self.checkWaageThread.wait() + + # auch wenn die Länge der Liste überschritten wurde + # wenn der statische Workflow aktiviert ist, dann soll die checkwaage-funktion erneut aufgerufen werden + if(self.checkBox.isChecked() == True): + self.checkWaage() + + # GUI updaten + #self.updateGUI() + + def objectTypeDetection(self): + # in dieser Funktion wird der Typ des Bauteils automatisch erkannt + + # wenn der statische Workflow ausgewählt wurde, dann soll die checkWaage Funktion aufgerufen werden, auch wenn die detectBauteiltyp-Funkion aufgerufen wurde + if self.checkBox.isChecked() == True: + self.checkWaage() + return + + ''' + if(self.checkPosNrEmpty()==True): + print("Das Pos.-Nr.-Feld ist leer.") + return + ''' + + # die Loopvariable des Workers auf False setzten, damit die Schleife durchgelaufen wird (diese wird zum Abbruch der Schleife benötigt -> siehe stopLoop) + #self.objectDetectionWorker.stopLoopSignal.emit(False) + + # überprüfen, ob der Auftrag in die Tabelle geladen wurde + if(self.AuftragsdetailsTable.item(0,0) == None): + print("Der Auftrag muss zuerst geladen werden.") + return + + # speichert den Wert, welcher im Textfeld steht in Variablen im Code + self.setAuftragsnummer() + + # starten des Threats, welcher den Bauteiltyp zurück gibt + self.objectDetectionWorker = Worker() + self.objectDetectionThread = QThread() + + self.objectDetectionWorker.moveToThread(self.objectDetectionThread) + + self.objectDetectionWorker.objectDetectionStartSignal.connect(self.objectDetectionWorker.objectTypeDetectionThread) + self.objectDetectionWorker.objectDetectionFinishedSignal.connect(self.objectTypeDetectionFinished) + self.objectDetectionWorker.waageStoppedSignal.connect(self.threadStopped) + self.objectDetectionWorker.stopLoopSignal.connect(lambda status: setattr(self.objectDetectionWorker, 'stopLoop', status)) #wird fürs aktive Stoppen des Threads benötigt + + self.objectDetectionThread.started.connect(lambda: self.objectDetectionWorker.objectDetectionStartSignal.emit(self.auftragsnummer)) + self.objectDetectionThread.start() + + def objectTypeDetectionFinished(self, einzelteilID, rowData): + # wenn der Typ des Objektes erkannt wurde, dann soll die Funktion aufgerufen werden + + # Schreiben der Bauteiltype und Pos.-Nr in die jeweiligen Felder + self.PosNrTxtFeld.setText(str(rowData[1])) + self.bauteiltypTextbox.setText(rowData[2]) + + # setzt den Boolean, um aus der Schleife raus zu gehen + self.btTypeIsSet = True + + #zum setzen den Farbe der gesamten Reihe auf Orange + self.setRowColor(self.getRowNr(einzelteilID),255,165,0) + + # den Thread beenden + self.objectDetectionThread.quit() + self.objectDetectionThread.wait() + + ''' + try: + self.objectDetectionThread.started.disconnect() # Trenne das Signal, damit es beim nächsten Start keine Konflikte gibt + except: + print(f"Error while disconnecting: {e}") + print("Disconnecting the thread did not work.") + ''' + + # wenn der Bauteiltyp erkannt wurde, dann soll die GUI aktualisiert werden und anschließend die CheckWaage-Funktion aufgerufen werden + self.updateGUI() + self.checkWaage() + + def threadStopped(self, einzelteilID): + # wenn kein Bauteil erkannt wurde, dann ist die EinzenteilID = 0 + if(einzelteilID > 0): + self.setRowColor(self.getRowNr(einzelteilID),255,255,255) #zum setzen den Farbe der gesamten Reihe auf Weiß + + # den Thread beenden + if hasattr(self, 'objectDetectionThread'): + self.objectDetectionThread.quit() + self.objectDetectionThread.wait() + print("Der ObjektDetection-Thread wurde beendet.") + + if hasattr(self, 'checkWaageThread'): + self.checkWaageThread.quit() + self.checkWaageThread.wait() + print("Der CheckWaage-Thread wurde beendet.") + +# new class for Camera Object detection with YOLOv8 +class CameraStreamApp(QtWidgets.QMainWindow): + def __init__(self, ui): + super().__init__() + self.ui = ui + self.yolo_stream = None # Initialize YOLOv8CameraStream as None + self.timer = QtCore.QTimer(self) + self.timer.timeout.connect(self.update_frame) + self.ui.startCamBtn.clicked.connect(self.start_camera) # start camera if button LoadAuftrag is clicked + self.scene = QtWidgets.QGraphicsScene(self) + self.ui.graphicsView.setScene(self.scene) + + def start_camera(self): + # Start the YOLOv8 camera stream (only if not already started) + if self.yolo_stream is None: + self.yolo_stream = YOLOv8CameraStream(model_path="models/yolov8m_seg_e300.pt", logging_level="high") + # self.yolo_stream.start() # Start the YOLOv8 stream + self.timer.start(30) # Start the timer to update the frame every 30ms (about 33 FPS) + + def update_frame(self): + # Update the frame from YOLOv8 stream + if self.yolo_stream: + ret, frame = self.yolo_stream.cap.read() # Capture frame from YOLOv8 stream + + if ret: + # new part including processing via yolo model + processed_frame = self.yolo_stream.process_frame(frame) + + # Convert the frame from BGR (OpenCV format) to RGB + # frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + frame = cv2.cvtColor(processed_frame, cv2.COLOR_BGR2RGB) # might change nomenclature later? + + # Convert the frame to QImage + h, w, ch = frame.shape + bytes_per_line = ch * w + qt_image = QtGui.QImage(frame.data, w, h, bytes_per_line, QtGui.QImage.Format_RGB888) + + # Add the QImage to a QPixmap + pixmap = QtGui.QPixmap.fromImage(qt_image) + + # Get the size of the graphicsView and scale the pixmap to fit + view_size = self.ui.graphicsView.size() + scaled_pixmap = pixmap.scaled(view_size, QtCore.Qt.KeepAspectRatio) + + # Update the scene with the scaled pixmap + self.scene.clear() + self.scene.addPixmap(scaled_pixmap) + + def closeEvent(self, event): + # Release the camera when the application is closed + if self.yolo_stream is not None: + self.yolo_stream.cap.release() + event.accept() + + + +if __name__ == "__main__": + import sys + app = QtWidgets.QApplication(sys.argv) + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + + # Initialize the CameraStreamApp with the UI + camera_app = CameraStreamApp(ui) + + MainWindow.show() + sys.exit(app.exec_()) + + + + + diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..8898dfc --- /dev/null +++ b/compose.yml @@ -0,0 +1,24 @@ +# Use root/example as user/password credentials +version: '3.1' + +services: + + db: + image: mariadb + restart: always + environment: + MARIADB_ROOT_PASSWORD: example + MARIADB_USER: dbUser + MARIADB_PASSWORD: dbPassword + MARIADB_DATABASE: projectGeislinger + ports: + - 3306:3306 + # network_mode: host + # volumes: + # - /tmp/mysql.sock:/tmp/mysql.sock + + adminer: + image: adminer + restart: always + ports: + - 8082:8080 diff --git a/environment.yaml b/environment.yaml new file mode 100644 index 0000000..1d562d3 --- /dev/null +++ b/environment.yaml @@ -0,0 +1,17 @@ +name: geislinger +channels: + - conda-forge + - nvidia + - pytorch +dependencies: + - pip=24.2 + - python=3.11 + - ultralytics=8 + - mariadb + - pytorch + - torchvision + - torchaudio + - pytorch-cuda=11.8 + - opencv + - pyqt + - pyserial \ No newline at end of file diff --git a/mariadb-test.py b/mariadb-test.py new file mode 100644 index 0000000..5171a04 --- /dev/null +++ b/mariadb-test.py @@ -0,0 +1,47 @@ +import mariadb +import sys + +# # Database connection parameters +# host = "127.0.0.1" # host = "localhost" # or the IP of the machine if accessed remotely +# port = 3306 +# user = "root" +# password = "my-secret-pw" # Update with your password +# database = "mydatabase" # Replace with your actual database name + +db_config = { + 'user': 'dbUser', + 'password': 'dbPassword', + 'host': '127.0.0.1', # 'host': 'localhost', + 'database': 'projectGeislinger', + 'port': 3306 # Standard port for MariaDB +} + +try: + # Establish a connection + # conn = mariadb.connect( + # user=user, + # password=password, + # host=host, + # port=port, + # database=database + # ) + + conn = mariadb.connect(**db_config) + + print("Connection successful!") + + # Create a cursor object + cur = conn.cursor() + + # Example query + cur.execute("SELECT VERSION()") + result = cur.fetchone() + print(f"MariaDB version: {result[0]}") + +except mariadb.Error as e: + print(f"Error connecting to MariaDB: {e}") + sys.exit(1) + +finally: + if conn: + conn.close() diff --git a/models/best_8n.pt b/models/best_8n.pt new file mode 100644 index 0000000..feb8582 Binary files /dev/null and b/models/best_8n.pt differ diff --git a/models/yolov10n_e300.pt b/models/yolov10n_e300.pt new file mode 100644 index 0000000..1d966f4 Binary files /dev/null and b/models/yolov10n_e300.pt differ diff --git a/models/yolov10n_e300_openvino_model/best.bin b/models/yolov10n_e300_openvino_model/best.bin new file mode 100644 index 0000000..43a2d3c Binary files /dev/null and b/models/yolov10n_e300_openvino_model/best.bin differ diff --git a/models/yolov10n_e300_openvino_model/best.xml b/models/yolov10n_e300_openvino_model/best.xml new file mode 100644 index 0000000..99288f5 --- /dev/null +++ b/models/yolov10n_e300_openvino_model/best.xml @@ -0,0 +1,10826 @@ + + + + + + + + 1 + 3 + 640 + 640 + + + + + + + + 1 + 2 + 8400 + + + + + + + + 16 + 3 + 3 + 3 + + + + + + + + 1 + 3 + 640 + 640 + + + 16 + 3 + 3 + 3 + + + + + 1 + 16 + 320 + 320 + + + + + + + + 1 + 16 + 1 + 1 + + + + + + + + 1 + 16 + 320 + 320 + + + 1 + 16 + 1 + 1 + + + + + 1 + 16 + 320 + 320 + + + + + + + 1 + 16 + 320 + 320 + + + + + 1 + 16 + 320 + 320 + + + + + + + + 32 + 16 + 3 + 3 + + + + + + + + 1 + 16 + 320 + 320 + + + 32 + 16 + 3 + 3 + + + + + 1 + 32 + 160 + 160 + + + + + + + + 1 + 32 + 1 + 1 + + + + + + + + 1 + 32 + 160 + 160 + + + 1 + 32 + 1 + 1 + + + + + 1 + 32 + 160 + 160 + + + + + + + 1 + 32 + 160 + 160 + + + + + 1 + 32 + 160 + 160 + + + + + + + + 32 + 32 + 1 + 1 + + + + + + + + 1 + 32 + 160 + 160 + + + 32 + 32 + 1 + 1 + + + + + 1 + 32 + 160 + 160 + + + + + + + + 1 + 32 + 1 + 1 + + + + + + + + 1 + 32 + 160 + 160 + + + 1 + 32 + 1 + 1 + + + + + 1 + 32 + 160 + 160 + + + + + + + 1 + 32 + 160 + 160 + + + + + 1 + 32 + 160 + 160 + + + + + + + + + + + + + + 2 + + + + + + + 1 + 32 + 160 + 160 + + + + 2 + + + + + 1 + 16 + 160 + 160 + + + 1 + 16 + 160 + 160 + + + + + + + + 16 + 16 + 3 + 3 + + + + + + + + 1 + 16 + 160 + 160 + + + 16 + 16 + 3 + 3 + + + + + 1 + 16 + 160 + 160 + + + + + + + + 1 + 16 + 1 + 1 + + + + + + + + 1 + 16 + 160 + 160 + + + 1 + 16 + 1 + 1 + + + + + 1 + 16 + 160 + 160 + + + + + + + 1 + 16 + 160 + 160 + + + + + 1 + 16 + 160 + 160 + + + + + + + + 16 + 16 + 3 + 3 + + + + + + + + 1 + 16 + 160 + 160 + + + 16 + 16 + 3 + 3 + + + + + 1 + 16 + 160 + 160 + + + + + + + + 1 + 16 + 1 + 1 + + + + + + + + 1 + 16 + 160 + 160 + + + 1 + 16 + 1 + 1 + + + + + 1 + 16 + 160 + 160 + + + + + + + 1 + 16 + 160 + 160 + + + + + 1 + 16 + 160 + 160 + + + + + + + + 1 + 16 + 160 + 160 + + + 1 + 16 + 160 + 160 + + + + + 1 + 16 + 160 + 160 + + + + + + + + 1 + 16 + 160 + 160 + + + 1 + 16 + 160 + 160 + + + 1 + 16 + 160 + 160 + + + + + 1 + 48 + 160 + 160 + + + + + + + + 32 + 48 + 1 + 1 + + + + + + + + 1 + 48 + 160 + 160 + + + 32 + 48 + 1 + 1 + + + + + 1 + 32 + 160 + 160 + + + + + + + + 1 + 32 + 1 + 1 + + + + + + + + 1 + 32 + 160 + 160 + + + 1 + 32 + 1 + 1 + + + + + 1 + 32 + 160 + 160 + + + + + + + 1 + 32 + 160 + 160 + + + + + 1 + 32 + 160 + 160 + + + + + + + + 64 + 32 + 3 + 3 + + + + + + + + 1 + 32 + 160 + 160 + + + 64 + 32 + 3 + 3 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + 1 + 64 + 80 + 80 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 64 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 64 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + 1 + 64 + 80 + 80 + + + + + 1 + 64 + 80 + 80 + + + + + + + + + + + + + + 2 + + + + + + + 1 + 64 + 80 + 80 + + + + 2 + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 80 + 80 + + + + + + + + 32 + 32 + 3 + 3 + + + + + + + + 1 + 32 + 80 + 80 + + + 32 + 32 + 3 + 3 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 1 + 32 + 1 + 1 + + + + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 1 + 1 + + + + + 1 + 32 + 80 + 80 + + + + + + + 1 + 32 + 80 + 80 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 32 + 32 + 3 + 3 + + + + + + + + 1 + 32 + 80 + 80 + + + 32 + 32 + 3 + 3 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 1 + 32 + 1 + 1 + + + + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 1 + 1 + + + + + 1 + 32 + 80 + 80 + + + + + + + 1 + 32 + 80 + 80 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 80 + 80 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 32 + 32 + 3 + 3 + + + + + + + + 1 + 32 + 80 + 80 + + + 32 + 32 + 3 + 3 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 1 + 32 + 1 + 1 + + + + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 1 + 1 + + + + + 1 + 32 + 80 + 80 + + + + + + + 1 + 32 + 80 + 80 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 32 + 32 + 3 + 3 + + + + + + + + 1 + 32 + 80 + 80 + + + 32 + 32 + 3 + 3 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 1 + 32 + 1 + 1 + + + + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 1 + 1 + + + + + 1 + 32 + 80 + 80 + + + + + + + 1 + 32 + 80 + 80 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 80 + 80 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 80 + 80 + + + + + 1 + 128 + 80 + 80 + + + + + + + + 64 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 80 + 80 + + + 64 + 128 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + 1 + 64 + 80 + 80 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 128 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 128 + 64 + 1 + 1 + + + + + 1 + 128 + 80 + 80 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 80 + 80 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 80 + 80 + + + + + + + 1 + 128 + 80 + 80 + + + + + 1 + 128 + 80 + 80 + + + + + + + + 128 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 128 + 80 + 80 + + + 128 + 1 + 1 + 3 + 3 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 128 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 128 + 128 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + 1 + 128 + 40 + 40 + + + + + 1 + 128 + 40 + 40 + + + + + + + + + + + + + + 2 + + + + + + + 1 + 128 + 40 + 40 + + + + 2 + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + + + 1 + 256 + 40 + 40 + + + + + + + + 128 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 40 + 40 + + + 128 + 256 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + 1 + 128 + 40 + 40 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 256 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 256 + 128 + 1 + 1 + + + + + 1 + 256 + 40 + 40 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 40 + 40 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 40 + 40 + + + + + + + 1 + 256 + 40 + 40 + + + + + 1 + 256 + 40 + 40 + + + + + + + + 256 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 256 + 40 + 40 + + + 256 + 1 + 1 + 3 + 3 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 256 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 256 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + 1 + 256 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + + + + + + + 2 + + + + + + + 1 + 256 + 20 + 20 + + + + 2 + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + + + + 128 + 128 + 3 + 3 + + + + + + + + 1 + 128 + 20 + 20 + + + 128 + 128 + 3 + 3 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 128 + 128 + 3 + 3 + + + + + + + + 1 + 128 + 20 + 20 + + + 128 + 128 + 3 + 3 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + 1 + 384 + 20 + 20 + + + + + + + + 256 + 384 + 1 + 1 + + + + + + + + 1 + 384 + 20 + 20 + + + 256 + 384 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + 1 + 256 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 128 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 128 + 256 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + 1 + 512 + 20 + 20 + + + + + + + + 256 + 512 + 1 + 1 + + + + + + + + 1 + 512 + 20 + 20 + + + 256 + 512 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + 1 + 256 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 256 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 256 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + 1 + 256 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + + + + + + + 2 + + + + + + + 1 + 256 + 20 + 20 + + + + 2 + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + + + + 256 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 256 + 128 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 4 + + + + + + + + 1 + 256 + 20 + 20 + + + 4 + + + + + 1 + 2 + 128 + 400 + + + + + + + + + + + + + + 3 + + + + + + + 1 + 2 + 128 + 400 + + + + 3 + + + + + 1 + 2 + 32 + 400 + + + 1 + 2 + 32 + 400 + + + 1 + 2 + 64 + 400 + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 2 + 32 + 400 + + + 1 + 1 + 1 + 1 + + + + + 1 + 2 + 32 + 400 + + + + + + + + 1 + 2 + 32 + 400 + + + 1 + 2 + 32 + 400 + + + + + 1 + 2 + 400 + 400 + + + + + + + + 1 + 2 + 400 + 400 + + + + + 1 + 2 + 400 + 400 + + + + + + + + 1 + 2 + 64 + 400 + + + 1 + 2 + 400 + 400 + + + + + 1 + 2 + 64 + 400 + + + + + + + + 1 + 128 + 20 + 20 + + + + + 4 + + + + + + + + 1 + 2 + 64 + 400 + + + 4 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 2 + 64 + 400 + + + 4 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 128 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 128 + 20 + 20 + + + 128 + 1 + 1 + 3 + 3 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 128 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 128 + 128 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 256 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 256 + 128 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + 1 + 256 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 128 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 128 + 256 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 256 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 256 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + 1 + 256 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 2 + + + + + + + + 2 + + + + + + + + 1 + 256 + 20 + 20 + + + 2 + + + 2 + + + + + 1 + 256 + 40 + 40 + + + + + + + + 1 + 256 + 40 + 40 + + + 1 + 128 + 40 + 40 + + + + + 1 + 384 + 40 + 40 + + + + + + + + 128 + 384 + 1 + 1 + + + + + + + + 1 + 384 + 40 + 40 + + + 128 + 384 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + 1 + 128 + 40 + 40 + + + + + 1 + 128 + 40 + 40 + + + + + + + + + + + + + + 2 + + + + + + + 1 + 128 + 40 + 40 + + + + 2 + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + + + 1 + 192 + 40 + 40 + + + + + + + + 128 + 192 + 1 + 1 + + + + + + + + 1 + 192 + 40 + 40 + + + 128 + 192 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + 1 + 128 + 40 + 40 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 2 + + + + + + + + 2 + + + + + + + + 1 + 128 + 40 + 40 + + + 2 + + + 2 + + + + + 1 + 128 + 80 + 80 + + + + + + + + 1 + 128 + 80 + 80 + + + 1 + 64 + 80 + 80 + + + + + 1 + 192 + 80 + 80 + + + + + + + + 64 + 192 + 1 + 1 + + + + + + + + 1 + 192 + 80 + 80 + + + 64 + 192 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + 1 + 64 + 80 + 80 + + + + + 1 + 64 + 80 + 80 + + + + + + + + + + + + + + 2 + + + + + + + 1 + 64 + 80 + 80 + + + + 2 + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 80 + 80 + + + + + + + + 32 + 32 + 3 + 3 + + + + + + + + 1 + 32 + 80 + 80 + + + 32 + 32 + 3 + 3 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 1 + 32 + 1 + 1 + + + + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 1 + 1 + + + + + 1 + 32 + 80 + 80 + + + + + + + 1 + 32 + 80 + 80 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 32 + 32 + 3 + 3 + + + + + + + + 1 + 32 + 80 + 80 + + + 32 + 32 + 3 + 3 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 1 + 32 + 1 + 1 + + + + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 1 + 1 + + + + + 1 + 32 + 80 + 80 + + + + + + + 1 + 32 + 80 + 80 + + + + + 1 + 32 + 80 + 80 + + + + + + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 80 + 80 + + + 1 + 32 + 80 + 80 + + + + + 1 + 96 + 80 + 80 + + + + + + + + 64 + 96 + 1 + 1 + + + + + + + + 1 + 96 + 80 + 80 + + + 64 + 96 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + 1 + 64 + 80 + 80 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 80 + 80 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + 1 + 64 + 80 + 80 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 80 + 80 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + 1 + 64 + 80 + 80 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 64 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 64 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 64 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 64 + 80 + 80 + + + 64 + 1 + 1 + 3 + 3 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + 1 + 64 + 80 + 80 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 64 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 64 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + 1 + 64 + 80 + 80 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 64 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 64 + 80 + 80 + + + 64 + 1 + 1 + 3 + 3 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + 1 + 64 + 80 + 80 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 64 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 64 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 80 + 80 + + + + + + + 1 + 64 + 80 + 80 + + + + + 1 + 64 + 80 + 80 + + + + + + + + 20 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 80 + 80 + + + 20 + 64 + 1 + 1 + + + + + 1 + 20 + 80 + 80 + + + + + + + + 1 + 20 + 1 + 1 + + + + + + + + 1 + 20 + 80 + 80 + + + 1 + 20 + 1 + 1 + + + + + 1 + 20 + 80 + 80 + + + + + + + + 1 + 64 + 80 + 80 + + + 1 + 20 + 80 + 80 + + + + + 1 + 84 + 80 + 80 + + + + + + + + 3 + + + + + + + + 1 + 84 + 80 + 80 + + + 3 + + + + + 1 + 84 + 6400 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 80 + 80 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 128 + 40 + 40 + + + + + 1 + 192 + 40 + 40 + + + + + + + + 128 + 192 + 1 + 1 + + + + + + + + 1 + 192 + 40 + 40 + + + 128 + 192 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + 1 + 128 + 40 + 40 + + + + + 1 + 128 + 40 + 40 + + + + + + + + + + + + + + 2 + + + + + + + 1 + 128 + 40 + 40 + + + + 2 + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 40 + 40 + + + + + 1 + 192 + 40 + 40 + + + + + + + + 128 + 192 + 1 + 1 + + + + + + + + 1 + 192 + 40 + 40 + + + 128 + 192 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + 1 + 128 + 40 + 40 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 64 + 128 + 3 + 3 + + + + + + + + 1 + 128 + 40 + 40 + + + 64 + 128 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 128 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 128 + 40 + 40 + + + 128 + 1 + 1 + 3 + 3 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + 1 + 128 + 40 + 40 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 64 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 64 + 128 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 1 + 1 + 3 + 3 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 64 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 64 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 40 + 40 + + + + + + + 1 + 64 + 40 + 40 + + + + + 1 + 64 + 40 + 40 + + + + + + + + 20 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 40 + 40 + + + 20 + 64 + 1 + 1 + + + + + 1 + 20 + 40 + 40 + + + + + + + + 1 + 20 + 1 + 1 + + + + + + + + 1 + 20 + 40 + 40 + + + 1 + 20 + 1 + 1 + + + + + 1 + 20 + 40 + 40 + + + + + + + + 1 + 64 + 40 + 40 + + + 1 + 20 + 40 + 40 + + + + + 1 + 84 + 40 + 40 + + + + + + + + 3 + + + + + + + + 1 + 84 + 40 + 40 + + + 3 + + + + + 1 + 84 + 1600 + + + + + + + + 128 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 128 + 128 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 40 + 40 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 40 + 40 + + + + + + + 1 + 128 + 40 + 40 + + + + + 1 + 128 + 40 + 40 + + + + + + + + 128 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 128 + 40 + 40 + + + 128 + 1 + 1 + 3 + 3 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 256 + 20 + 20 + + + + + 1 + 384 + 20 + 20 + + + + + + + + 256 + 384 + 1 + 1 + + + + + + + + 1 + 384 + 20 + 20 + + + 256 + 384 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + 1 + 256 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + + + + + + + 2 + + + + + + + 1 + 256 + 20 + 20 + + + + 2 + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + + + + 128 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 128 + 20 + 20 + + + 128 + 1 + 1 + 3 + 3 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 256 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 256 + 128 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + 1 + 256 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 256 + 1 + 1 + 7 + 7 + + + + + + + + 1 + 256 + 20 + 20 + + + 256 + 1 + 1 + 7 + 7 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + 1 + 256 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 128 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 128 + 256 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 128 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 128 + 20 + 20 + + + 128 + 1 + 1 + 3 + 3 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 1 + 1 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 1 + 1 + + + + + 1 + 128 + 20 + 20 + + + + + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + 1 + 128 + 20 + 20 + + + + + + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + 1 + 128 + 20 + 20 + + + + + 1 + 384 + 20 + 20 + + + + + + + + 256 + 384 + 1 + 1 + + + + + + + + 1 + 384 + 20 + 20 + + + 256 + 384 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + 1 + 256 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 64 + 256 + 3 + 3 + + + + + + + + 1 + 256 + 20 + 20 + + + 64 + 256 + 3 + 3 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 20 + 20 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 20 + 20 + + + + + + + 1 + 64 + 20 + 20 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 64 + 64 + 3 + 3 + + + + + + + + 1 + 64 + 20 + 20 + + + 64 + 64 + 3 + 3 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 20 + 20 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 20 + 20 + + + + + + + 1 + 64 + 20 + 20 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 64 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 20 + 20 + + + 64 + 64 + 1 + 1 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 20 + 20 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 256 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 256 + 20 + 20 + + + 256 + 1 + 1 + 3 + 3 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 1 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 1 + 256 + 1 + 1 + + + + + 1 + 256 + 20 + 20 + + + + + + + 1 + 256 + 20 + 20 + + + + + 1 + 256 + 20 + 20 + + + + + + + + 64 + 256 + 1 + 1 + + + + + + + + 1 + 256 + 20 + 20 + + + 64 + 256 + 1 + 1 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 20 + 20 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 20 + 20 + + + + + + + 1 + 64 + 20 + 20 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 64 + 1 + 1 + 3 + 3 + + + + + + + + 1 + 64 + 20 + 20 + + + 64 + 1 + 1 + 3 + 3 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 20 + 20 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 20 + 20 + + + + + + + 1 + 64 + 20 + 20 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 64 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 20 + 20 + + + 64 + 64 + 1 + 1 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 1 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 20 + 20 + + + 1 + 64 + 1 + 1 + + + + + 1 + 64 + 20 + 20 + + + + + + + 1 + 64 + 20 + 20 + + + + + 1 + 64 + 20 + 20 + + + + + + + + 20 + 64 + 1 + 1 + + + + + + + + 1 + 64 + 20 + 20 + + + 20 + 64 + 1 + 1 + + + + + 1 + 20 + 20 + 20 + + + + + + + + 1 + 20 + 1 + 1 + + + + + + + + 1 + 20 + 20 + 20 + + + 1 + 20 + 1 + 1 + + + + + 1 + 20 + 20 + 20 + + + + + + + + 1 + 64 + 20 + 20 + + + 1 + 20 + 20 + 20 + + + + + 1 + 84 + 20 + 20 + + + + + + + + 3 + + + + + + + + 1 + 84 + 20 + 20 + + + 3 + + + + + 1 + 84 + 400 + + + + + + + + 1 + 84 + 6400 + + + 1 + 84 + 1600 + + + 1 + 84 + 400 + + + + + 1 + 84 + 8400 + + + + + + + + + + + + + + 2 + + + + + + + 1 + 84 + 8400 + + + + 2 + + + + + 1 + 64 + 8400 + + + 1 + 20 + 8400 + + + + + + + + 4 + + + + + + + + 1 + 64 + 8400 + + + 4 + + + + + 1 + 4 + 16 + 8400 + + + + + + + + 4 + + + + + + + 1 + 4 + 16 + 8400 + + + 4 + + + + + 1 + 16 + 4 + 8400 + + + + + + + + 1 + 16 + 4 + 8400 + + + + + 1 + 16 + 4 + 8400 + + + + + + + + 1 + 16 + 1 + 1 + + + + + + + + 1 + 16 + 4 + 8400 + + + 1 + 16 + 1 + 1 + + + + + 1 + 1 + 4 + 8400 + + + + + + + + 3 + + + + + + + + 1 + 1 + 4 + 8400 + + + 3 + + + + + 1 + 4 + 8400 + + + + + + + + 1 + 4 + 8400 + + + + + 3 + + + + + + + + 1 + + + + + + + + 3 + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + 1 + + + + + + + + 1 + + + + + 1 + + + + + + + + + 1 + + + + + 1 + + + + + + + + 1 + + + + + + + + 1 + + + 1 + + + + + 2 + + + + + + + 1 + 4 + 8400 + + + + 2 + + + + + 1 + 2 + 8400 + + + 1 + 2 + 8400 + + + + + + + + 1 + 2 + 8400 + + + 1 + 2 + 8400 + + + + + 1 + 2 + 8400 + + + + + + + + 1 + 2 + 8400 + + + 1 + 2 + 8400 + + + + + 1 + 2 + 8400 + + + + + + + + 1 + 2 + 8400 + + + 1 + 2 + 8400 + + + + + 1 + 4 + 8400 + + + + + + + + 1 + 1 + 8400 + + + + + + + + 1 + 4 + 8400 + + + 1 + 1 + 8400 + + + + + 1 + 4 + 8400 + + + + + + + 1 + 20 + 8400 + + + + + 1 + 20 + 8400 + + + + + + + + 1 + 4 + 8400 + + + 1 + 20 + 8400 + + + + + 1 + 24 + 8400 + + + + + + + + 3 + + + + + + + 1 + 24 + 8400 + + + 3 + + + + + 1 + 8400 + 24 + + + + + + + + + + + + + + 2 + + + + + + + 1 + 8400 + 24 + + + + 2 + + + + + 1 + 8400 + 4 + + + 1 + 8400 + 20 + + + + + + + + 1 + + + + + + + + 1 + 8400 + 20 + + + 1 + + + + + 1 + 8400 + + + + + + + + + + + + + + 1 + 8400 + + + + + + 1 + 300 + + + 1 + 300 + + + + + + + 1 + 300 + + + + + + 1 + 300 + 1 + + + + + + + + 3 + + + + + + + 1 + 300 + 1 + + + 3 + + + + + 1 + 300 + 4 + + + + + + + + 1 + 300 + 4 + + + + + 1 + 300 + 4 + + + + + + + + 1 + 8400 + 4 + + + 1 + 300 + 4 + + + + + 1 + 300 + 4 + + + + + + + + 1 + 300 + 4 + + + + + 3 + + + + + + + + 1 + + + + + + + + 1 + + + + + + + + 1 + + + + + + + + 1 + + + + + + + 3 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + 2 + + + + + + + + + + + + + + 2 + + + + + + 1 + + + + + + + + 1 + + + + + + + + 1 + + + 1 + + + + + 2 + + + + + + + + 1 + 300 + 4 + + + 2 + + + + + 300 + 4 + + + + + + + + 3 + + + + + + + 1 + 300 + 1 + + + 3 + + + + + 1 + 300 + 20 + + + + + + + + 1 + 300 + 20 + + + + + 1 + 300 + 20 + + + + + + + + 1 + 8400 + 20 + + + 1 + 300 + 20 + + + + + 1 + 300 + 20 + + + + + + + + 2 + + + + + + + + 1 + 300 + 20 + + + 2 + + + + + 1 + 6000 + + + + + + + + 1 + 6000 + + + + + + 1 + 300 + + + 1 + 300 + + + + + + + + 1 + 1 + + + + + + + + 1 + 300 + + + 1 + 1 + + + + + 1 + 300 + + + + + + + 1 + 300 + + + + + 1 + 300 + + + + + + + + 1 + 300 + + + + + 1 + 300 + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + 4 + + + 1 + + + + + + 1 + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + 1 + + + + + 1 + + + + + + + 1 + + + + + + 1 + 1 + + + + + + + + 1 + 1 + + + + + 1 + 1 + + + + + + + + 1 + 1 + + + + + + + + 1 + 1 + + + 1 + 1 + + + + + 1 + 1 + + + + + + + + 1 + 300 + + + 1 + 1 + + + + + 1 + 300 + + + + + + + + + + + + + + 300 + 4 + + + 1 + 300 + + + + + + 1 + 300 + 4 + + + + + + + + 2 + + + + + + + + 1 + 300 + 4 + + + 2 + + + + + 300 + 4 + + + + + + + + 3 + + + + + + + + 300 + 4 + + + 3 + + + + + 1 + 300 + 4 + + + + + + + + + + + + + 1 + 300 + + + + + + 1 + 300 + 1 + + + + + + + + 1 + 1 + + + + + + + + 1 + 300 + + + 1 + 1 + + + + + 1 + 300 + + + + + + + 1 + 300 + + + + + + 1 + 300 + 1 + + + + + + + + 1 + 300 + 1 + + + + + 1 + 300 + 1 + + + + + + + + 1 + 300 + 4 + + + 1 + 300 + 1 + + + 1 + 300 + 1 + + + + + 1 + 300 + 6 + + + + + + + 1 + 300 + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/models/yolov10n_e300_openvino_model/metadata.yaml b/models/yolov10n_e300_openvino_model/metadata.yaml new file mode 100644 index 0000000..c2ac264 --- /dev/null +++ b/models/yolov10n_e300_openvino_model/metadata.yaml @@ -0,0 +1,33 @@ +description: Ultralytics YOLOv10n model trained on rf_version2/geisi2-4/data.yaml +author: Ultralytics +date: '2024-09-24T13:16:48.802051' +version: 8.2.100 +license: AGPL-3.0 License (https://ultralytics.com/license) +docs: https://docs.ultralytics.com +stride: 32 +task: detect +batch: 1 +imgsz: +- 640 +- 640 +names: + 0: box + 1: hand + 2: oring_100_b + 3: oring_40_b + 4: oring_d105 + 5: oring_d300_b + 6: oring_l1150 + 7: oring_l380_b + 8: oring_l500 + 9: oring_l600 + 10: oring_l650_b + 11: ring_40mm + 12: ring_45mm + 13: ring_58mm + 14: schraube_sk_m10x25 + 15: schraube_sk_m10x30 + 16: schraube_sk_m10x45 + 17: schraube_sk_m12x20 + 18: schraube_sk_m12x50 + 19: table diff --git a/models/yolov8m_seg_e300.pt b/models/yolov8m_seg_e300.pt new file mode 100644 index 0000000..d5351b3 Binary files /dev/null and b/models/yolov8m_seg_e300.pt differ diff --git a/models/yolov8n.pt b/models/yolov8n.pt new file mode 100644 index 0000000..0db4ca4 Binary files /dev/null and b/models/yolov8n.pt differ diff --git a/sainsmartrelay.py b/sainsmartrelay.py new file mode 100644 index 0000000..2a930d8 --- /dev/null +++ b/sainsmartrelay.py @@ -0,0 +1,53 @@ +import subprocess + +class SainsmartRelay: + def __init__(self, executable="sainsmartrelay"): + self.executable = executable + + def _run_command(self, args): + try: + result = subprocess.run( + [self.executable] + args, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + check=True + ) + return result.stdout.strip() + except subprocess.CalledProcessError as e: + print(f"Error: {e.stderr.strip()}") + return None + + def turn_on(self, relays): + """Turn on specified relays.""" + relays_str = ','.join(map(str, relays)) if isinstance(relays, (list, tuple)) else str(relays) + return self._run_command(["--on", relays_str]) + + def turn_off(self, relays): + """Turn off specified relays.""" + relays_str = ','.join(map(str, relays)) if isinstance(relays, (list, tuple)) else str(relays) + return self._run_command(["--off", relays_str]) + + def get_status(self, relays="all"): + """Get the status of specified relays.""" + return self._run_command(["--status", str(relays)]) + + def find_all_devices(self): + """Find all connected FTDI devices.""" + return self._run_command(["--findall"]) + +# Example usage: +if __name__ == "__main__": + relay = SainsmartRelay() + + # Turn on relay 1 + print(relay.turn_on(1)) + + # Turn off all relays + print(relay.turn_off("all")) + + # Get the status of all relays + print(relay.get_status()) + + # Find all FTDI devices + print(relay.find_all_devices()) diff --git a/saved_frames/hand_20241025_105036.jpg b/saved_frames/hand_20241025_105036.jpg new file mode 100644 index 0000000..bfd43ef Binary files /dev/null and b/saved_frames/hand_20241025_105036.jpg differ diff --git a/saved_frames/hand_20241025_105916.jpg b/saved_frames/hand_20241025_105916.jpg new file mode 100644 index 0000000..006733c Binary files /dev/null and b/saved_frames/hand_20241025_105916.jpg differ diff --git a/saved_frames/hand_20241025_105917.jpg b/saved_frames/hand_20241025_105917.jpg new file mode 100644 index 0000000..0874518 Binary files /dev/null and b/saved_frames/hand_20241025_105917.jpg differ diff --git a/saved_frames/hand_20241025_105918.jpg b/saved_frames/hand_20241025_105918.jpg new file mode 100644 index 0000000..8053a19 Binary files /dev/null and b/saved_frames/hand_20241025_105918.jpg differ diff --git a/saved_frames/hand_20241025_105919.jpg b/saved_frames/hand_20241025_105919.jpg new file mode 100644 index 0000000..0d1d516 Binary files /dev/null and b/saved_frames/hand_20241025_105919.jpg differ diff --git a/saved_frames/hand_20241025_105920.jpg b/saved_frames/hand_20241025_105920.jpg new file mode 100644 index 0000000..c7e8dc7 Binary files /dev/null and b/saved_frames/hand_20241025_105920.jpg differ diff --git a/saved_frames/hand_20241025_105921.jpg b/saved_frames/hand_20241025_105921.jpg new file mode 100644 index 0000000..3625894 Binary files /dev/null and b/saved_frames/hand_20241025_105921.jpg differ diff --git a/saved_frames/hand_20241025_110016.jpg b/saved_frames/hand_20241025_110016.jpg new file mode 100644 index 0000000..df9ec14 Binary files /dev/null and b/saved_frames/hand_20241025_110016.jpg differ diff --git a/saved_frames/hand_20241025_110017.jpg b/saved_frames/hand_20241025_110017.jpg new file mode 100644 index 0000000..867b261 Binary files /dev/null and b/saved_frames/hand_20241025_110017.jpg differ diff --git a/saved_frames/hand_20241025_110018.jpg b/saved_frames/hand_20241025_110018.jpg new file mode 100644 index 0000000..e8bada3 Binary files /dev/null and b/saved_frames/hand_20241025_110018.jpg differ diff --git a/saved_frames/hand_20241025_110021.jpg b/saved_frames/hand_20241025_110021.jpg new file mode 100644 index 0000000..17f67a9 Binary files /dev/null and b/saved_frames/hand_20241025_110021.jpg differ diff --git a/saved_frames/hand_20241025_110028.jpg b/saved_frames/hand_20241025_110028.jpg new file mode 100644 index 0000000..42b53cc Binary files /dev/null and b/saved_frames/hand_20241025_110028.jpg differ diff --git a/saved_frames/hand_20241025_110031.jpg b/saved_frames/hand_20241025_110031.jpg new file mode 100644 index 0000000..7c5736c Binary files /dev/null and b/saved_frames/hand_20241025_110031.jpg differ diff --git a/saved_frames/hand_20241025_110032.jpg b/saved_frames/hand_20241025_110032.jpg new file mode 100644 index 0000000..bc5c6a2 Binary files /dev/null and b/saved_frames/hand_20241025_110032.jpg differ diff --git a/saved_frames/hand_20241025_114821.jpg b/saved_frames/hand_20241025_114821.jpg new file mode 100644 index 0000000..6758f42 Binary files /dev/null and b/saved_frames/hand_20241025_114821.jpg differ diff --git a/saved_frames/hand_20241025_114826.jpg b/saved_frames/hand_20241025_114826.jpg new file mode 100644 index 0000000..128bf45 Binary files /dev/null and b/saved_frames/hand_20241025_114826.jpg differ diff --git a/saved_frames/hand_20241025_114827.jpg b/saved_frames/hand_20241025_114827.jpg new file mode 100644 index 0000000..a9192a5 Binary files /dev/null and b/saved_frames/hand_20241025_114827.jpg differ diff --git a/saved_frames/hand_20241025_120810.jpg b/saved_frames/hand_20241025_120810.jpg new file mode 100644 index 0000000..c92a8ef Binary files /dev/null and b/saved_frames/hand_20241025_120810.jpg differ diff --git a/saved_frames/hand_20241025_120811.jpg b/saved_frames/hand_20241025_120811.jpg new file mode 100644 index 0000000..92f767c Binary files /dev/null and b/saved_frames/hand_20241025_120811.jpg differ diff --git a/saved_frames/hand_20241025_120813.jpg b/saved_frames/hand_20241025_120813.jpg new file mode 100644 index 0000000..915bc66 Binary files /dev/null and b/saved_frames/hand_20241025_120813.jpg differ diff --git a/saved_frames/hand_20241025_121052.jpg b/saved_frames/hand_20241025_121052.jpg new file mode 100644 index 0000000..1c52200 Binary files /dev/null and b/saved_frames/hand_20241025_121052.jpg differ diff --git a/saved_frames/hand_20241028_081631.jpg b/saved_frames/hand_20241028_081631.jpg new file mode 100644 index 0000000..217c759 Binary files /dev/null and b/saved_frames/hand_20241028_081631.jpg differ diff --git a/saved_frames/hand_20241028_090057.jpg b/saved_frames/hand_20241028_090057.jpg new file mode 100644 index 0000000..7e63002 Binary files /dev/null and b/saved_frames/hand_20241028_090057.jpg differ diff --git a/saved_frames/hand_20241028_090058.jpg b/saved_frames/hand_20241028_090058.jpg new file mode 100644 index 0000000..2df34ee Binary files /dev/null and b/saved_frames/hand_20241028_090058.jpg differ diff --git a/saved_frames/hand_20241028_095023.jpg b/saved_frames/hand_20241028_095023.jpg new file mode 100644 index 0000000..cd4e74c Binary files /dev/null and b/saved_frames/hand_20241028_095023.jpg differ diff --git a/saved_frames/hand_20241028_095024.jpg b/saved_frames/hand_20241028_095024.jpg new file mode 100644 index 0000000..60b4a13 Binary files /dev/null and b/saved_frames/hand_20241028_095024.jpg differ diff --git a/saved_frames/hand_20241028_095025.jpg b/saved_frames/hand_20241028_095025.jpg new file mode 100644 index 0000000..684fcb4 Binary files /dev/null and b/saved_frames/hand_20241028_095025.jpg differ diff --git a/saved_frames/hand_20241028_095026.jpg b/saved_frames/hand_20241028_095026.jpg new file mode 100644 index 0000000..a549477 Binary files /dev/null and b/saved_frames/hand_20241028_095026.jpg differ diff --git a/saved_frames/hand_20241028_095027.jpg b/saved_frames/hand_20241028_095027.jpg new file mode 100644 index 0000000..9ec6b47 Binary files /dev/null and b/saved_frames/hand_20241028_095027.jpg differ diff --git a/saved_frames/hand_20241028_095028.jpg b/saved_frames/hand_20241028_095028.jpg new file mode 100644 index 0000000..602af33 Binary files /dev/null and b/saved_frames/hand_20241028_095028.jpg differ diff --git a/saved_frames/hand_20241028_095029.jpg b/saved_frames/hand_20241028_095029.jpg new file mode 100644 index 0000000..0f79999 Binary files /dev/null and b/saved_frames/hand_20241028_095029.jpg differ diff --git a/saved_frames/hand_20241028_095030.jpg b/saved_frames/hand_20241028_095030.jpg new file mode 100644 index 0000000..48f8a7d Binary files /dev/null and b/saved_frames/hand_20241028_095030.jpg differ diff --git a/saved_frames/hand_20241028_095031.jpg b/saved_frames/hand_20241028_095031.jpg new file mode 100644 index 0000000..0dfe8b5 Binary files /dev/null and b/saved_frames/hand_20241028_095031.jpg differ diff --git a/saved_frames/oring_d300_b_20241028_095016.jpg b/saved_frames/oring_d300_b_20241028_095016.jpg new file mode 100644 index 0000000..a15991b Binary files /dev/null and b/saved_frames/oring_d300_b_20241028_095016.jpg differ diff --git a/saved_frames/ring_58mm_20241025_114822.jpg b/saved_frames/ring_58mm_20241025_114822.jpg new file mode 100644 index 0000000..429f7e2 Binary files /dev/null and b/saved_frames/ring_58mm_20241025_114822.jpg differ diff --git a/saved_frames/ring_58mm_20241025_114823.jpg b/saved_frames/ring_58mm_20241025_114823.jpg new file mode 100644 index 0000000..a2d526d Binary files /dev/null and b/saved_frames/ring_58mm_20241025_114823.jpg differ diff --git a/saved_frames/ring_58mm_20241025_114824.jpg b/saved_frames/ring_58mm_20241025_114824.jpg new file mode 100644 index 0000000..1af5a41 Binary files /dev/null and b/saved_frames/ring_58mm_20241025_114824.jpg differ diff --git a/saved_frames/ring_58mm_20241025_114825.jpg b/saved_frames/ring_58mm_20241025_114825.jpg new file mode 100644 index 0000000..719b657 Binary files /dev/null and b/saved_frames/ring_58mm_20241025_114825.jpg differ diff --git a/saved_frames/schraube_sk_m10x45_20241025_110317.jpg b/saved_frames/schraube_sk_m10x45_20241025_110317.jpg new file mode 100644 index 0000000..b3dc37d Binary files /dev/null and b/saved_frames/schraube_sk_m10x45_20241025_110317.jpg differ diff --git a/test.ui b/test.ui new file mode 100644 index 0000000..fb22795 --- /dev/null +++ b/test.ui @@ -0,0 +1,230 @@ + + + MainWindow + + + + 0 + 0 + 1090 + 675 + + + + MainWindow + + + + + + 900 + 80 + 111 + 25 + + + + load Auftrag + + + + + + 10 + 10 + 661 + 192 + + + + QAbstractItemView::NoEditTriggers + + + + T1 + + + + + Pos.-Nr + + + + 8 + + + + + + Matnr mit hoechster Version + + + + 8 + + + + + + Bezeichnung + Werkstoff + + + + 8 + + + + + + Menge + + + + 8 + + + + + + Lgort + + + + 8 + + + + + + I1 + + + + + + + 900 + 20 + 121 + 17 + + + + Auftragsnummer: + + + + + + 860 + 40 + 221 + 31 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + 450 + 350 + 161 + 25 + + + + Bauteiltype erkennen + + + + + + 620 + 350 + 221 + 31 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + 640 + 330 + 181 + 20 + + + + Bezeichnung + + + + + + 910 + 330 + 67 + 17 + + + + Pos.-Nr: + + + + + + 850 + 350 + 191 + 31 + + + + + + + 460 + 420 + 151 + 23 + + + + Bauteiltype locked + + + false + + + + + + + 0 + 0 + 1090 + 22 + + + + + + + + diff --git a/test2.ui.py b/test2.ui.py new file mode 100644 index 0000000..21a878b --- /dev/null +++ b/test2.ui.py @@ -0,0 +1,274 @@ + + + MainWindow + + + + 0 + 0 + 1374 + 725 + + + + MainWindow + + + + true + + + + + 30 + 200 + 591 + 371 + + + + false + + + QAbstractItemView::NoEditTriggers + + + + T1 + + + + + Pos.-Nr + + + + 8 + + + + + + Matnr mit hoechster Version + + + + 8 + + + + + + Bezeichnung + Werkstoff + + + + 8 + + + + + + Menge + + + + 8 + + + + + + Lgort + + + + 8 + + + + + + I1 + + + + + + + 9 + 9 + 611 + 151 + + + + Bauteile + + + + + 170 + 30 + 221 + 71 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 31 + 34 + 269 + 76 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p></body></html> + + + + + + 31 + 11 + 73 + 17 + + + + Bezeichnung + + + + + + + 420 + 40 + 171 + 71 + + + + + + + Pos.-Nr: + + + + + + + + + + + + 20 + 40 + 161 + 81 + + + + + + + Bauteiltype erkennen + + + false + + + false + + + false + + + false + + + + + + + Bauteiltype locked + + + false + + + + + + + + + + 640 + 20 + 351 + 571 + + + + + + + Auftrag + + + + + 10 + 32 + 331 + 481 + + + + + + + Auftragsnummer: + + + + + + + load Auftrag + + + + + + + + + + + + + + + + + + diff --git a/test_ui.py b/test_ui.py new file mode 100644 index 0000000..7866ec7 --- /dev/null +++ b/test_ui.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/bjoern/git/GeislingerProject/test.ui' +# +# Created by: PyQt5 UI code generator 5.15.11 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1090, 675) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.btn1 = QtWidgets.QPushButton(self.centralwidget) + self.btn1.setGeometry(QtCore.QRect(900, 80, 111, 25)) + self.btn1.setObjectName("btn1") + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.centralwidget) + self.AuftragsdetailsTable.setGeometry(QtCore.QRect(10, 10, 661, 192)) + self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.AuftragsdetailsTable.setObjectName("AuftragsdetailsTable") + self.AuftragsdetailsTable.setColumnCount(5) + self.AuftragsdetailsTable.setRowCount(1) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(0, 0, item) + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setGeometry(QtCore.QRect(900, 20, 121, 17)) + self.label.setObjectName("label") + self.textEdit = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit.setGeometry(QtCore.QRect(860, 40, 221, 31)) + self.textEdit.setObjectName("textEdit") + self.bauteilTypBtn = QtWidgets.QPushButton(self.centralwidget) + self.bauteilTypBtn.setGeometry(QtCore.QRect(450, 350, 161, 25)) + self.bauteilTypBtn.setObjectName("bauteilTypBtn") + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.centralwidget) + self.bauteiltypTextbox.setGeometry(QtCore.QRect(620, 350, 221, 31)) + self.bauteiltypTextbox.setObjectName("bauteiltypTextbox") + self.label_3 = QtWidgets.QLabel(self.centralwidget) + self.label_3.setGeometry(QtCore.QRect(640, 330, 181, 20)) + self.label_3.setObjectName("label_3") + self.label_4 = QtWidgets.QLabel(self.centralwidget) + self.label_4.setGeometry(QtCore.QRect(910, 330, 67, 17)) + self.label_4.setObjectName("label_4") + self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit_3.setGeometry(QtCore.QRect(850, 350, 191, 31)) + self.textEdit_3.setObjectName("textEdit_3") + self.checkBox = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox.setGeometry(QtCore.QRect(460, 420, 151, 23)) + self.checkBox.setChecked(False) + self.checkBox.setObjectName("checkBox") + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1090, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btn1.setText(_translate("MainWindow", "load Auftrag")) + item = self.AuftragsdetailsTable.verticalHeaderItem(0) + item.setText(_translate("MainWindow", "T1")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Pos.-Nr")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "Matnr mit hoechster Version")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(2) + item.setText(_translate("MainWindow", "Bezeichnung + Werkstoff")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(3) + item.setText(_translate("MainWindow", "Menge")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(4) + item.setText(_translate("MainWindow", "Lgort")) + __sortingEnabled = self.AuftragsdetailsTable.isSortingEnabled() + self.AuftragsdetailsTable.setSortingEnabled(False) + item = self.AuftragsdetailsTable.item(0, 0) + item.setText(_translate("MainWindow", "I1")) + self.AuftragsdetailsTable.setSortingEnabled(__sortingEnabled) + self.label.setText(_translate("MainWindow", "Auftragsnummer:")) + self.textEdit.setHtml(_translate("MainWindow", "\n" +"\n" +"


")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltype erkennen")) + self.bauteiltypTextbox.setHtml(_translate("MainWindow", "\n" +"\n" +"


")) + self.label_3.setText(_translate("MainWindow", "Bezeichnung")) + self.label_4.setText(_translate("MainWindow", "Pos.-Nr:")) + self.checkBox.setText(_translate("MainWindow", "Bauteiltype locked")) diff --git a/testbjoern.py b/testbjoern.py new file mode 100644 index 0000000..38fb692 --- /dev/null +++ b/testbjoern.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'test2.ui.py' +# +# Created by: PyQt5 UI code generator 5.15.11 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets +import signal + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1374, 725) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setEnabled(True) + self.centralwidget.setObjectName("centralwidget") + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.centralwidget) + self.AuftragsdetailsTable.setGeometry(QtCore.QRect(30, 200, 591, 371)) + self.AuftragsdetailsTable.setAutoFillBackground(False) + self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.AuftragsdetailsTable.setObjectName("AuftragsdetailsTable") + self.AuftragsdetailsTable.setColumnCount(5) + self.AuftragsdetailsTable.setRowCount(1) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(0, 0, item) + self.groupBox = QtWidgets.QGroupBox(self.centralwidget) + self.groupBox.setGeometry(QtCore.QRect(9, 9, 611, 151)) + self.groupBox.setObjectName("groupBox") + self.frame = QtWidgets.QFrame(self.groupBox) + self.frame.setGeometry(QtCore.QRect(170, 30, 221, 71)) + self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame.setObjectName("frame") + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.frame) + self.bauteiltypTextbox.setGeometry(QtCore.QRect(31, 34, 269, 76)) + self.bauteiltypTextbox.setObjectName("bauteiltypTextbox") + self.label_3 = QtWidgets.QLabel(self.frame) + self.label_3.setGeometry(QtCore.QRect(31, 11, 73, 17)) + self.label_3.setObjectName("label_3") + self.widget = QtWidgets.QWidget(self.groupBox) + self.widget.setGeometry(QtCore.QRect(420, 40, 171, 71)) + self.widget.setObjectName("widget") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget) + self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.label_4 = QtWidgets.QLabel(self.widget) + self.label_4.setObjectName("label_4") + self.verticalLayout_2.addWidget(self.label_4) + self.textEdit_3 = QtWidgets.QTextEdit(self.widget) + self.textEdit_3.setObjectName("textEdit_3") + self.verticalLayout_2.addWidget(self.textEdit_3) + self.widget1 = QtWidgets.QWidget(self.groupBox) + self.widget1.setGeometry(QtCore.QRect(20, 40, 161, 81)) + self.widget1.setObjectName("widget1") + self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget1) + self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.bauteilTypBtn = QtWidgets.QPushButton(self.widget1) + self.bauteilTypBtn.setCheckable(False) + self.bauteilTypBtn.setAutoDefault(False) + self.bauteilTypBtn.setDefault(False) + self.bauteilTypBtn.setFlat(False) + self.bauteilTypBtn.setObjectName("bauteilTypBtn") + self.verticalLayout_3.addWidget(self.bauteilTypBtn) + self.checkBox = QtWidgets.QCheckBox(self.widget1) + self.checkBox.setChecked(False) + self.checkBox.setObjectName("checkBox") + self.verticalLayout_3.addWidget(self.checkBox) + self.widget2 = QtWidgets.QWidget(self.centralwidget) + self.widget2.setGeometry(QtCore.QRect(640, 20, 351, 571)) + self.widget2.setObjectName("widget2") + self.verticalLayout = QtWidgets.QVBoxLayout(self.widget2) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setObjectName("verticalLayout") + self.groupBox_2 = QtWidgets.QGroupBox(self.widget2) + self.groupBox_2.setObjectName("groupBox_2") + self.widget3 = QtWidgets.QWidget(self.groupBox_2) + self.widget3.setGeometry(QtCore.QRect(10, 32, 331, 481)) + self.widget3.setObjectName("widget3") + self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.widget3) + self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_4.setObjectName("verticalLayout_4") + self.label = QtWidgets.QLabel(self.widget3) + self.label.setObjectName("label") + self.verticalLayout_4.addWidget(self.label) + self.btn1 = QtWidgets.QPushButton(self.widget3) + self.btn1.setObjectName("btn1") + self.verticalLayout_4.addWidget(self.btn1) + self.graphicsView = QtWidgets.QGraphicsView(self.widget3) + self.graphicsView.setObjectName("graphicsView") + self.verticalLayout_4.addWidget(self.graphicsView) + self.verticalLayout.addWidget(self.groupBox_2) + MainWindow.setCentralWidget(self.centralwidget) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + item = self.AuftragsdetailsTable.verticalHeaderItem(0) + item.setText(_translate("MainWindow", "T1")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Pos.-Nr")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "Matnr mit hoechster Version")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(2) + item.setText(_translate("MainWindow", "Bezeichnung + Werkstoff")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(3) + item.setText(_translate("MainWindow", "Menge")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(4) + item.setText(_translate("MainWindow", "Lgort")) + __sortingEnabled = self.AuftragsdetailsTable.isSortingEnabled() + self.AuftragsdetailsTable.setSortingEnabled(False) + item = self.AuftragsdetailsTable.item(0, 0) + item.setText(_translate("MainWindow", "I1")) + self.AuftragsdetailsTable.setSortingEnabled(__sortingEnabled) + self.groupBox.setTitle(_translate("MainWindow", "Bauteile")) + self.bauteiltypTextbox.setHtml(_translate("MainWindow", "\n" +"\n" +"


")) + self.label_3.setText(_translate("MainWindow", "Bezeichnung")) + self.label_4.setText(_translate("MainWindow", "Pos.-Nr:")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltype erkennen")) + self.checkBox.setText(_translate("MainWindow", "Bauteiltype locked")) + self.groupBox_2.setTitle(_translate("MainWindow", "Auftrag")) + self.label.setText(_translate("MainWindow", "Auftragsnummer:")) + self.btn1.setText(_translate("MainWindow", "load Auftrag")) + +def signal_handler(sig, frame): + QtWidgets.QApplication.quit() + +if __name__ == "__main__": + import sys + app = QtWidgets.QApplication(sys.argv) + + # Handle Ctrl+C (SIGINT) to close the application + signal.signal(signal.SIGINT, signal_handler) + + # Create a timer that runs in the background to process signals + timer = QtCore.QTimer() + timer.start(100) # Timer set to trigger every 100 ms + timer.timeout.connect(lambda: None) # No-op to keep the event loop running + + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + MainWindow.show() + sys.exit(app.exec_()) diff --git a/testbjoern2.ui b/testbjoern2.ui new file mode 100644 index 0000000..40da592 --- /dev/null +++ b/testbjoern2.ui @@ -0,0 +1,246 @@ + + + MainWindow + + + + 0 + 0 + 1090 + 675 + + + + MainWindow + + + + + + 900 + 80 + 111 + 25 + + + + load Auftrag + + + + + + 10 + 10 + 661 + 192 + + + + QAbstractItemView::NoEditTriggers + + + + T1 + + + + + Pos.-Nr + + + + 8 + + + + + + Matnr mit hoechster Version + + + + 8 + + + + + + Bezeichnung + Werkstoff + + + + 8 + + + + + + Menge + + + + 8 + + + + + + Lgort + + + + 8 + + + + + + I1 + + + + + + + 900 + 20 + 121 + 17 + + + + Auftragsnummer: + + + + + + 860 + 40 + 221 + 31 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p></body></html> + + + + + + 60 + 340 + 161 + 25 + + + + Bauteiltype erkennen + + + + + + 230 + 340 + 221 + 31 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p></body></html> + + + + + + 250 + 320 + 181 + 20 + + + + Bezeichnung + + + + + + 520 + 320 + 67 + 17 + + + + Pos.-Nr: + + + + + + 460 + 340 + 191 + 31 + + + + + + + 70 + 410 + 151 + 23 + + + + Bauteiltype locked + + + false + + + + + + 800 + 280 + 256 + 192 + + + + + + + + 0 + 0 + 1090 + 22 + + + + + + + + diff --git a/testbjoern2_ui.py b/testbjoern2_ui.py new file mode 100644 index 0000000..014d94f --- /dev/null +++ b/testbjoern2_ui.py @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/bjoern/git/GeislingerProject/testbjoern2.ui' +# +# Created by: PyQt5 UI code generator 5.15.11 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1090, 675) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.btn1 = QtWidgets.QPushButton(self.centralwidget) + self.btn1.setGeometry(QtCore.QRect(900, 80, 111, 25)) + self.btn1.setObjectName("btn1") + self.AuftragsdetailsTable = QtWidgets.QTableWidget(self.centralwidget) + self.AuftragsdetailsTable.setGeometry(QtCore.QRect(10, 10, 661, 192)) + self.AuftragsdetailsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.AuftragsdetailsTable.setObjectName("AuftragsdetailsTable") + self.AuftragsdetailsTable.setColumnCount(5) + self.AuftragsdetailsTable.setRowCount(1) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setPointSize(8) + item.setFont(font) + self.AuftragsdetailsTable.setHorizontalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + self.AuftragsdetailsTable.setItem(0, 0, item) + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setGeometry(QtCore.QRect(900, 20, 121, 17)) + self.label.setObjectName("label") + self.textEdit = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit.setGeometry(QtCore.QRect(860, 40, 221, 31)) + self.textEdit.setObjectName("textEdit") + self.bauteilTypBtn = QtWidgets.QPushButton(self.centralwidget) + self.bauteilTypBtn.setGeometry(QtCore.QRect(60, 340, 161, 25)) + self.bauteilTypBtn.setObjectName("bauteilTypBtn") + self.bauteiltypTextbox = QtWidgets.QTextEdit(self.centralwidget) + self.bauteiltypTextbox.setGeometry(QtCore.QRect(230, 340, 221, 31)) + self.bauteiltypTextbox.setObjectName("bauteiltypTextbox") + self.label_3 = QtWidgets.QLabel(self.centralwidget) + self.label_3.setGeometry(QtCore.QRect(250, 320, 181, 20)) + self.label_3.setObjectName("label_3") + self.label_4 = QtWidgets.QLabel(self.centralwidget) + self.label_4.setGeometry(QtCore.QRect(520, 320, 67, 17)) + self.label_4.setObjectName("label_4") + self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit_3.setGeometry(QtCore.QRect(460, 340, 191, 31)) + self.textEdit_3.setObjectName("textEdit_3") + self.checkBox = QtWidgets.QCheckBox(self.centralwidget) + self.checkBox.setGeometry(QtCore.QRect(70, 410, 151, 23)) + self.checkBox.setChecked(False) + self.checkBox.setObjectName("checkBox") + self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget) + self.graphicsView.setGeometry(QtCore.QRect(800, 280, 256, 192)) + self.graphicsView.setObjectName("graphicsView") + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1090, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btn1.setText(_translate("MainWindow", "load Auftrag")) + item = self.AuftragsdetailsTable.verticalHeaderItem(0) + item.setText(_translate("MainWindow", "T1")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Pos.-Nr")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "Matnr mit hoechster Version")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(2) + item.setText(_translate("MainWindow", "Bezeichnung + Werkstoff")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(3) + item.setText(_translate("MainWindow", "Menge")) + item = self.AuftragsdetailsTable.horizontalHeaderItem(4) + item.setText(_translate("MainWindow", "Lgort")) + __sortingEnabled = self.AuftragsdetailsTable.isSortingEnabled() + self.AuftragsdetailsTable.setSortingEnabled(False) + item = self.AuftragsdetailsTable.item(0, 0) + item.setText(_translate("MainWindow", "I1")) + self.AuftragsdetailsTable.setSortingEnabled(__sortingEnabled) + self.label.setText(_translate("MainWindow", "Auftragsnummer:")) + self.textEdit.setHtml(_translate("MainWindow", "\n" +"\n" +"


")) + self.bauteilTypBtn.setText(_translate("MainWindow", "Bauteiltype erkennen")) + self.bauteiltypTextbox.setHtml(_translate("MainWindow", "\n" +"\n" +"


")) + self.label_3.setText(_translate("MainWindow", "Bezeichnung")) + self.label_4.setText(_translate("MainWindow", "Pos.-Nr:")) + self.checkBox.setText(_translate("MainWindow", "Bauteiltype locked")) diff --git a/untitled/.gitignore b/untitled/.gitignore new file mode 100644 index 0000000..4a0b530 --- /dev/null +++ b/untitled/.gitignore @@ -0,0 +1,74 @@ +# This file is used to ignore files which are generated +# ---------------------------------------------------------------------------- + +*~ +*.autosave +*.a +*.core +*.moc +*.o +*.obj +*.orig +*.rej +*.so +*.so.* +*_pch.h.cpp +*_resource.rc +*.qm +.#* +*.*# +core +!core/ +tags +.DS_Store +.directory +*.debug +Makefile* +*.prl +*.app +moc_*.cpp +ui_*.h +qrc_*.cpp +Thumbs.db +*.res +*.rc +/.qmake.cache +/.qmake.stash + +# qtcreator generated files +*.pro.user* +CMakeLists.txt.user* + +# xemacs temporary files +*.flc + +# Vim temporary files +.*.swp + +# Visual Studio generated files +*.ib_pdb_index +*.idb +*.ilk +*.pdb +*.sln +*.suo +*.vcproj +*vcproj.*.*.user +*.ncb +*.sdf +*.opensdf +*.vcxproj +*vcxproj.* + +# MinGW generated files +*.Debug +*.Release + +# Python byte code +*.pyc + +# Binaries +# -------- +*.dll +*.exe + diff --git a/untitled/build/Desktop-Debug/.qmake.stash b/untitled/build/Desktop-Debug/.qmake.stash new file mode 100644 index 0000000..a741931 --- /dev/null +++ b/untitled/build/Desktop-Debug/.qmake.stash @@ -0,0 +1,23 @@ +QMAKE_CXX.QT_COMPILER_STDCXX = 201703L +QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 13 +QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 2 +QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0 +QMAKE_CXX.COMPILER_MACROS = \ + QT_COMPILER_STDCXX \ + QMAKE_GCC_MAJOR_VERSION \ + QMAKE_GCC_MINOR_VERSION \ + QMAKE_GCC_PATCH_VERSION +QMAKE_CXX.INCDIRS = \ + /usr/include/c++/13 \ + /usr/include/x86_64-linux-gnu/c++/13 \ + /usr/include/c++/13/backward \ + /usr/lib/gcc/x86_64-linux-gnu/13/include \ + /usr/local/include \ + /usr/include/x86_64-linux-gnu \ + /usr/include +QMAKE_CXX.LIBDIRS = \ + /usr/lib/gcc/x86_64-linux-gnu/13 \ + /usr/lib/x86_64-linux-gnu \ + /usr/lib \ + /lib/x86_64-linux-gnu \ + /lib diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/FILE.h.79AEFC497861DFC5.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/FILE.h.79AEFC497861DFC5.idx new file mode 100644 index 0000000..9d496f7 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/FILE.h.79AEFC497861DFC5.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QApplication.A474B06CEF58703F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QApplication.A474B06CEF58703F.idx new file mode 100644 index 0000000..c6b0f6c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QApplication.A474B06CEF58703F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QLocale.01F1E8743C4251DF.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QLocale.01F1E8743C4251DF.idx new file mode 100644 index 0000000..f43a73a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QLocale.01F1E8743C4251DF.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QMainWindow.78DB6FD40CBCC891.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QMainWindow.78DB6FD40CBCC891.idx new file mode 100644 index 0000000..fcadecd Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QMainWindow.78DB6FD40CBCC891.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QTranslator.BF3534267250AC30.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QTranslator.BF3534267250AC30.idx new file mode 100644 index 0000000..cc15856 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/QTranslator.BF3534267250AC30.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__FILE.h.3324F85E382E036A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__FILE.h.3324F85E382E036A.idx new file mode 100644 index 0000000..892b411 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__FILE.h.3324F85E382E036A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__fpos64_t.h.23C43F442076149A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__fpos64_t.h.23C43F442076149A.idx new file mode 100644 index 0000000..2c2dfba Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__fpos64_t.h.23C43F442076149A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__fpos_t.h.ECFBE9EEDAAB6648.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__fpos_t.h.ECFBE9EEDAAB6648.idx new file mode 100644 index 0000000..799b102 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__fpos_t.h.ECFBE9EEDAAB6648.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__locale_t.h.40EA38A2DCA58618.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__locale_t.h.40EA38A2DCA58618.idx new file mode 100644 index 0000000..80ca39b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__locale_t.h.40EA38A2DCA58618.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__mbstate_t.h.6C32CF66236653D7.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__mbstate_t.h.6C32CF66236653D7.idx new file mode 100644 index 0000000..f46650e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__mbstate_t.h.6C32CF66236653D7.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__sigset_t.h.72131E8056C7E284.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__sigset_t.h.72131E8056C7E284.idx new file mode 100644 index 0000000..5048503 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__sigset_t.h.72131E8056C7E284.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___gnuc_va_list.h.957EE2B4DB6A5247.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___gnuc_va_list.h.957EE2B4DB6A5247.idx new file mode 100644 index 0000000..422cc8f Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___gnuc_va_list.h.957EE2B4DB6A5247.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___va_copy.h.11ED534E7AF4A856.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___va_copy.h.11ED534E7AF4A856.idx new file mode 100644 index 0000000..223304d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___va_copy.h.11ED534E7AF4A856.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_arg.h.C38675C0D160CE4C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_arg.h.C38675C0D160CE4C.idx new file mode 100644 index 0000000..4c057f1 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_arg.h.C38675C0D160CE4C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_copy.h.5812F997B3F780A9.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_copy.h.5812F997B3F780A9.idx new file mode 100644 index 0000000..bee0079 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_copy.h.5812F997B3F780A9.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_list.h.A20C0FFDA235CCCC.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_list.h.A20C0FFDA235CCCC.idx new file mode 100644 index 0000000..3f10a76 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_list.h.A20C0FFDA235CCCC.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_max_align_t.h.9A696B9ACA5AF69C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_max_align_t.h.9A696B9ACA5AF69C.idx new file mode 100644 index 0000000..17f9e8d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_max_align_t.h.9A696B9ACA5AF69C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_null.h.46DACB2AE1FCBB57.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_null.h.46DACB2AE1FCBB57.idx new file mode 100644 index 0000000..78cfd33 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_null.h.46DACB2AE1FCBB57.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_nullptr_t.h.BB76DF7F0265238C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_nullptr_t.h.BB76DF7F0265238C.idx new file mode 100644 index 0000000..7f1e60d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_nullptr_t.h.BB76DF7F0265238C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_offsetof.h.F032B8137362A473.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_offsetof.h.F032B8137362A473.idx new file mode 100644 index 0000000..345432b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_offsetof.h.F032B8137362A473.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_ptrdiff_t.h.244B2A4B8AE5E0B4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_ptrdiff_t.h.244B2A4B8AE5E0B4.idx new file mode 100644 index 0000000..114645e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_ptrdiff_t.h.244B2A4B8AE5E0B4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_size_t.h.747ED4A2DA41774B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_size_t.h.747ED4A2DA41774B.idx new file mode 100644 index 0000000..949c5e6 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_size_t.h.747ED4A2DA41774B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_wchar_t.h.E89E65F6312D18C8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_wchar_t.h.E89E65F6312D18C8.idx new file mode 100644 index 0000000..eca5437 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/__stddef_wchar_t.h.E89E65F6312D18C8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/algorithm.4283CE8E04B88D2A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/algorithm.4283CE8E04B88D2A.idx new file mode 100644 index 0000000..09c7a80 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/algorithm.4283CE8E04B88D2A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/algorithmfwd.h.B52ADC7A074104CF.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/algorithmfwd.h.B52ADC7A074104CF.idx new file mode 100644 index 0000000..a5ed3db Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/algorithmfwd.h.B52ADC7A074104CF.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/align.h.80C2512B8F842646.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/align.h.80C2512B8F842646.idx new file mode 100644 index 0000000..c51d02a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/align.h.80C2512B8F842646.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/aligned_buffer.h.A18F22CAB29234EA.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/aligned_buffer.h.A18F22CAB29234EA.idx new file mode 100644 index 0000000..cb7b880 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/aligned_buffer.h.A18F22CAB29234EA.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.5CF5F0A69C036EAA.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.5CF5F0A69C036EAA.idx new file mode 100644 index 0000000..74daa95 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.5CF5F0A69C036EAA.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.72E7C35C664767C1.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.72E7C35C664767C1.idx new file mode 100644 index 0000000..c39f157 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.72E7C35C664767C1.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx new file mode 100644 index 0000000..2d5f581 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/allocated_ptr.h.8214ECF4C56E78C2.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/allocated_ptr.h.8214ECF4C56E78C2.idx new file mode 100644 index 0000000..c14842a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/allocated_ptr.h.8214ECF4C56E78C2.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/allocator.h.D31E7B8BEFD5AE94.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/allocator.h.D31E7B8BEFD5AE94.idx new file mode 100644 index 0000000..dc4a45e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/allocator.h.D31E7B8BEFD5AE94.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/array.184FFFD3B962987A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/array.184FFFD3B962987A.idx new file mode 100644 index 0000000..318f265 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/array.184FFFD3B962987A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/assert.h.9895EEC17E1D2A2B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/assert.h.9895EEC17E1D2A2B.idx new file mode 100644 index 0000000..a25d70b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/assert.h.9895EEC17E1D2A2B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/assertions.h.266799074BAB8854.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/assertions.h.266799074BAB8854.idx new file mode 100644 index 0000000..a22b002 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/assertions.h.266799074BAB8854.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic.46821F82D327FD81.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic.46821F82D327FD81.idx new file mode 100644 index 0000000..e395f47 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic.46821F82D327FD81.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_base.h.9272BFEE4EE55D68.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_base.h.9272BFEE4EE55D68.idx new file mode 100644 index 0000000..06a8a70 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_base.h.9272BFEE4EE55D68.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_lockfree_defines.h.2A0580E3C1CF977D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_lockfree_defines.h.2A0580E3C1CF977D.idx new file mode 100644 index 0000000..898545e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_lockfree_defines.h.2A0580E3C1CF977D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_wide_counter.h.397D66B6BECC0AA2.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_wide_counter.h.397D66B6BECC0AA2.idx new file mode 100644 index 0000000..ea46575 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_wide_counter.h.397D66B6BECC0AA2.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_word.h.0B7FB187C2532DE8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_word.h.0B7FB187C2532DE8.idx new file mode 100644 index 0000000..f25658a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomic_word.h.0B7FB187C2532DE8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomicity.h.D4655A6FAF2C5588.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomicity.h.D4655A6FAF2C5588.idx new file mode 100644 index 0000000..da09b46 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/atomicity.h.D4655A6FAF2C5588.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/auto_ptr.h.D1AF7143391B211D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/auto_ptr.h.D1AF7143391B211D.idx new file mode 100644 index 0000000..268879c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/auto_ptr.h.D1AF7143391B211D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/basic_string.h.636F8FA9AD80474A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/basic_string.h.636F8FA9AD80474A.idx new file mode 100644 index 0000000..159e054 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/basic_string.h.636F8FA9AD80474A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/basic_string.tcc.2D0C76EB3099AFF8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/basic_string.tcc.2D0C76EB3099AFF8.idx new file mode 100644 index 0000000..e5ff0a0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/basic_string.tcc.2D0C76EB3099AFF8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/binders.h.C589B2454DC21565.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/binders.h.C589B2454DC21565.idx new file mode 100644 index 0000000..8aa56c7 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/binders.h.C589B2454DC21565.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/bit.E77EA5629EB3D467.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/bit.E77EA5629EB3D467.idx new file mode 100644 index 0000000..d4c0990 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/bit.E77EA5629EB3D467.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/byteswap.h.E57FF553A16DFAFC.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/byteswap.h.E57FF553A16DFAFC.idx new file mode 100644 index 0000000..3fd541f Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/byteswap.h.E57FF553A16DFAFC.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/c++allocator.h.20AC450864A96F4F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/c++allocator.h.20AC450864A96F4F.idx new file mode 100644 index 0000000..8e4373a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/c++allocator.h.20AC450864A96F4F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/c++config.h.BF2F33665D7EB4A5.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/c++config.h.BF2F33665D7EB4A5.idx new file mode 100644 index 0000000..7615cde Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/c++config.h.BF2F33665D7EB4A5.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/c++locale.h.53918663E9B050A1.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/c++locale.h.53918663E9B050A1.idx new file mode 100644 index 0000000..c700618 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/c++locale.h.53918663E9B050A1.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cctype.7A2E5B928BCF3845.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cctype.7A2E5B928BCF3845.idx new file mode 100644 index 0000000..8e21cb5 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cctype.7A2E5B928BCF3845.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cdefs.h.E4D450DF98C1338F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cdefs.h.E4D450DF98C1338F.idx new file mode 100644 index 0000000..748f2cc Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cdefs.h.E4D450DF98C1338F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cerrno.B65C14291DEB12F2.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cerrno.B65C14291DEB12F2.idx new file mode 100644 index 0000000..894a1dc Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cerrno.B65C14291DEB12F2.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/char_traits.h.263114DAEE0F7CAC.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/char_traits.h.263114DAEE0F7CAC.idx new file mode 100644 index 0000000..a411a5c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/char_traits.h.263114DAEE0F7CAC.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/charconv.h.45DC5854263DB0A4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/charconv.h.45DC5854263DB0A4.idx new file mode 100644 index 0000000..90e50f3 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/charconv.h.45DC5854263DB0A4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/chrono.F95978433952CB73.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/chrono.F95978433952CB73.idx new file mode 100644 index 0000000..20d8636 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/chrono.F95978433952CB73.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/chrono.h.E832445DA3CBDA93.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/chrono.h.E832445DA3CBDA93.idx new file mode 100644 index 0000000..478326e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/chrono.h.E832445DA3CBDA93.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/clocale.8BFEF3D6DA37B94B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/clocale.8BFEF3D6DA37B94B.idx new file mode 100644 index 0000000..0ddc981 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/clocale.8BFEF3D6DA37B94B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/clock_t.h.65AFE5BA7329BCD4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/clock_t.h.65AFE5BA7329BCD4.idx new file mode 100644 index 0000000..8c93363 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/clock_t.h.65AFE5BA7329BCD4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/clockid_t.h.5545878511E5BAF1.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/clockid_t.h.5545878511E5BAF1.idx new file mode 100644 index 0000000..7f0ebde Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/clockid_t.h.5545878511E5BAF1.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/compare.EDA7854AE5DA59D4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/compare.EDA7854AE5DA59D4.idx new file mode 100644 index 0000000..68074f8 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/compare.EDA7854AE5DA59D4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/concept_check.h.39429B249CB86886.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/concept_check.h.39429B249CB86886.idx new file mode 100644 index 0000000..bfd55dc Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/concept_check.h.39429B249CB86886.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/concurrence.h.368FF763D62F871B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/concurrence.h.368FF763D62F871B.idx new file mode 100644 index 0000000..dcafa82 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/concurrence.h.368FF763D62F871B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cookie_io_functions_t.h.5A08066DC7F05542.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cookie_io_functions_t.h.5A08066DC7F05542.idx new file mode 100644 index 0000000..54cae7c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cookie_io_functions_t.h.5A08066DC7F05542.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cpp_type_traits.h.D80F5D0FD57269EA.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cpp_type_traits.h.D80F5D0FD57269EA.idx new file mode 100644 index 0000000..7334605 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cpp_type_traits.h.D80F5D0FD57269EA.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cpu-set.h.B40F3E2869BE4FF9.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cpu-set.h.B40F3E2869BE4FF9.idx new file mode 100644 index 0000000..6dbe681 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cpu-set.h.B40F3E2869BE4FF9.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cpu_defines.h.4E18A129B41E38AC.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cpu_defines.h.4E18A129B41E38AC.idx new file mode 100644 index 0000000..700f1d2 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cpu_defines.h.4E18A129B41E38AC.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstddef.06546D6D9FEED08D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstddef.06546D6D9FEED08D.idx new file mode 100644 index 0000000..cd269f0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstddef.06546D6D9FEED08D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstdint.91EF72212746155E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstdint.91EF72212746155E.idx new file mode 100644 index 0000000..d0f7501 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstdint.91EF72212746155E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstdio.E3D7014BBC7C7170.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstdio.E3D7014BBC7C7170.idx new file mode 100644 index 0000000..b0d2d69 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstdio.E3D7014BBC7C7170.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstdlib.73317090CF3984CF.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstdlib.73317090CF3984CF.idx new file mode 100644 index 0000000..ad5a625 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cstdlib.73317090CF3984CF.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ctime.FD7CD791ADF7455F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ctime.FD7CD791ADF7455F.idx new file mode 100644 index 0000000..f9b6e22 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ctime.FD7CD791ADF7455F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ctype.h.B268CEA0CECCFC59.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ctype.h.B268CEA0CECCFC59.idx new file mode 100644 index 0000000..c15c43d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ctype.h.B268CEA0CECCFC59.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cwchar.415F3E4D1314A235.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cwchar.415F3E4D1314A235.idx new file mode 100644 index 0000000..74d94a8 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cwchar.415F3E4D1314A235.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_forced.h.260618EE85312CAA.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_forced.h.260618EE85312CAA.idx new file mode 100644 index 0000000..9c04d3e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_forced.h.260618EE85312CAA.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_init_exception.h.CA78BEA70589FE17.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_init_exception.h.CA78BEA70589FE17.idx new file mode 100644 index 0000000..5f55095 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_init_exception.h.CA78BEA70589FE17.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/debug.h.E107AF16C7F0CBAA.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/debug.h.E107AF16C7F0CBAA.idx new file mode 100644 index 0000000..261cf7e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/debug.h.E107AF16C7F0CBAA.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/enable_special_members.h.D0E1B0D83298787A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/enable_special_members.h.D0E1B0D83298787A.idx new file mode 100644 index 0000000..7d00b63 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/enable_special_members.h.D0E1B0D83298787A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/endian.h.1FC6A4D6D2846204.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/endian.h.1FC6A4D6D2846204.idx new file mode 100644 index 0000000..6351802 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/endian.h.1FC6A4D6D2846204.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/endian.h.20F8E286A486EE09.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/endian.h.20F8E286A486EE09.idx new file mode 100644 index 0000000..0ddeaa8 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/endian.h.20F8E286A486EE09.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/endianness.h.F2D2CC6251A4EAFA.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/endianness.h.F2D2CC6251A4EAFA.idx new file mode 100644 index 0000000..8b68010 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/endianness.h.F2D2CC6251A4EAFA.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/erase_if.h.52AC17D898D2345C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/erase_if.h.52AC17D898D2345C.idx new file mode 100644 index 0000000..bed83fb Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/erase_if.h.52AC17D898D2345C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno-base.h.23FC55A99C73A727.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno-base.h.23FC55A99C73A727.idx new file mode 100644 index 0000000..06e3d50 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno-base.h.23FC55A99C73A727.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.063064A523A47758.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.063064A523A47758.idx new file mode 100644 index 0000000..d6f1b50 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.063064A523A47758.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.10013861918E601A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.10013861918E601A.idx new file mode 100644 index 0000000..bc7b404 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.10013861918E601A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.19BCCCD58DA5623E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.19BCCCD58DA5623E.idx new file mode 100644 index 0000000..610ef91 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.19BCCCD58DA5623E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.33F6986A3C61A3BF.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.33F6986A3C61A3BF.idx new file mode 100644 index 0000000..37312f7 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.33F6986A3C61A3BF.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.3F8ECD84FB880B64.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.3F8ECD84FB880B64.idx new file mode 100644 index 0000000..5f43f38 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/errno.h.3F8ECD84FB880B64.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/error_constants.h.FAB62781508B6283.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/error_constants.h.FAB62781508B6283.idx new file mode 100644 index 0000000..d8343de Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/error_constants.h.FAB62781508B6283.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/error_t.h.58D3895A591B592D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/error_t.h.58D3895A591B592D.idx new file mode 100644 index 0000000..d1ac19e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/error_t.h.58D3895A591B592D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception.9BD9E09A0A7198C6.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception.9BD9E09A0A7198C6.idx new file mode 100644 index 0000000..7d089dc Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception.9BD9E09A0A7198C6.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception.h.60232BC787A23EFB.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception.h.60232BC787A23EFB.idx new file mode 100644 index 0000000..df37c47 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception.h.60232BC787A23EFB.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception_defines.h.E3E83F3521CDDF95.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception_defines.h.E3E83F3521CDDF95.idx new file mode 100644 index 0000000..35f81b4 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception_defines.h.E3E83F3521CDDF95.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception_ptr.h.A3D4E42C18D066BB.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception_ptr.h.A3D4E42C18D066BB.idx new file mode 100644 index 0000000..27ce461 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/exception_ptr.h.A3D4E42C18D066BB.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/execution_defs.h.EA0BF88CD36110B9.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/execution_defs.h.EA0BF88CD36110B9.idx new file mode 100644 index 0000000..a4612c2 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/execution_defs.h.EA0BF88CD36110B9.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/features-time64.h.BFBA8D3CA0316037.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/features-time64.h.BFBA8D3CA0316037.idx new file mode 100644 index 0000000..bee52f7 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/features-time64.h.BFBA8D3CA0316037.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/features.h.5A4ED7C80201A723.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/features.h.5A4ED7C80201A723.idx new file mode 100644 index 0000000..85d9c52 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/features.h.5A4ED7C80201A723.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/floatn-common.h.0FE8C4DDCB84E088.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/floatn-common.h.0FE8C4DDCB84E088.idx new file mode 100644 index 0000000..0afe620 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/floatn-common.h.0FE8C4DDCB84E088.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/floatn.h.DA21C738CC1B6ABF.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/floatn.h.DA21C738CC1B6ABF.idx new file mode 100644 index 0000000..78afe87 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/floatn.h.DA21C738CC1B6ABF.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/functexcept.h.206192DEF17B89F8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/functexcept.h.206192DEF17B89F8.idx new file mode 100644 index 0000000..8cee638 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/functexcept.h.206192DEF17B89F8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/functional.1ABC5CEB1A730878.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/functional.1ABC5CEB1A730878.idx new file mode 100644 index 0000000..6ed34af Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/functional.1ABC5CEB1A730878.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/functional_hash.h.1DDE07C659671E5C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/functional_hash.h.1DDE07C659671E5C.idx new file mode 100644 index 0000000..905ff36 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/functional_hash.h.1DDE07C659671E5C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/glue_algorithm_defs.h.400B86BACA15F86C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/glue_algorithm_defs.h.400B86BACA15F86C.idx new file mode 100644 index 0000000..00111a0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/glue_algorithm_defs.h.400B86BACA15F86C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/glue_memory_defs.h.29B5F90E12B4C61C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/glue_memory_defs.h.29B5F90E12B4C61C.idx new file mode 100644 index 0000000..3a074a6 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/glue_memory_defs.h.29B5F90E12B4C61C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/glue_numeric_defs.h.6191E3EBAF802F7C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/glue_numeric_defs.h.6191E3EBAF802F7C.idx new file mode 100644 index 0000000..b86069c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/glue_numeric_defs.h.6191E3EBAF802F7C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/gthr-default.h.7F136A8E758182CE.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/gthr-default.h.7F136A8E758182CE.idx new file mode 100644 index 0000000..380d122 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/gthr-default.h.7F136A8E758182CE.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/gthr.h.70C66586E0E99D6D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/gthr.h.70C66586E0E99D6D.idx new file mode 100644 index 0000000..c670e95 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/gthr.h.70C66586E0E99D6D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/hash_bytes.h.878C140FA90D5822.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/hash_bytes.h.878C140FA90D5822.idx new file mode 100644 index 0000000..a05481a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/hash_bytes.h.878C140FA90D5822.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/hashtable.h.44D7678B598CA27C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/hashtable.h.44D7678B598CA27C.idx new file mode 100644 index 0000000..a40ffe3 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/hashtable.h.44D7678B598CA27C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/hashtable_policy.h.02AE91A05F6E02C7.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/hashtable_policy.h.02AE91A05F6E02C7.idx new file mode 100644 index 0000000..8a928ad Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/hashtable_policy.h.02AE91A05F6E02C7.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/initializer_list.AFC06A41CFC1543D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/initializer_list.AFC06A41CFC1543D.idx new file mode 100644 index 0000000..7759100 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/initializer_list.AFC06A41CFC1543D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/invoke.h.2B1ACA2407CB05E3.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/invoke.h.2B1ACA2407CB05E3.idx new file mode 100644 index 0000000..fbd09b3 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/invoke.h.2B1ACA2407CB05E3.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ios_base.h.0442D829AE4A2428.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ios_base.h.0442D829AE4A2428.idx new file mode 100644 index 0000000..48eae73 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ios_base.h.0442D829AE4A2428.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/iosfwd.163CBDA627BDB3A3.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/iosfwd.163CBDA627BDB3A3.idx new file mode 100644 index 0000000..db99012 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/iosfwd.163CBDA627BDB3A3.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/iterator.1BD365EA5EDE5210.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/iterator.1BD365EA5EDE5210.idx new file mode 100644 index 0000000..8d1442a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/iterator.1BD365EA5EDE5210.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/libc-header-start.h.E88219B53B0B0BF5.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/libc-header-start.h.E88219B53B0B0BF5.idx new file mode 100644 index 0000000..a1d897e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/libc-header-start.h.E88219B53B0B0BF5.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.507F66A5F268FCAA.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.507F66A5F268FCAA.idx new file mode 100644 index 0000000..b8bfda4 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.507F66A5F268FCAA.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1DFE7D0FE6434B13.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1DFE7D0FE6434B13.idx new file mode 100644 index 0000000..ab0fc2d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1DFE7D0FE6434B13.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1E7D7771EC751FFB.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1E7D7771EC751FFB.idx new file mode 100644 index 0000000..9c2538f Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1E7D7771EC751FFB.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.h.C293B8934AC926BB.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.h.C293B8934AC926BB.idx new file mode 100644 index 0000000..2839b1a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/limits.h.C293B8934AC926BB.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/list.7909E1D6E2B739A0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/list.7909E1D6E2B739A0.idx new file mode 100644 index 0000000..f8d6b49 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/list.7909E1D6E2B739A0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/list.tcc.FF41A54BBD49B033.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/list.tcc.FF41A54BBD49B033.idx new file mode 100644 index 0000000..69af85b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/list.tcc.FF41A54BBD49B033.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/local_lim.h.2CFD657F256B117E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/local_lim.h.2CFD657F256B117E.idx new file mode 100644 index 0000000..a608ffd Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/local_lim.h.2CFD657F256B117E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale.h.E3C63D05A4E78516.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale.h.E3C63D05A4E78516.idx new file mode 100644 index 0000000..68d4145 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale.h.E3C63D05A4E78516.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale.h.F1B51844858762D2.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale.h.F1B51844858762D2.idx new file mode 100644 index 0000000..98c08c3 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale.h.F1B51844858762D2.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.h.03600D2B458E75FA.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.h.03600D2B458E75FA.idx new file mode 100644 index 0000000..0b1fbb0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.h.03600D2B458E75FA.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.tcc.69A59E265193CBC8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.tcc.69A59E265193CBC8.idx new file mode 100644 index 0000000..dda8c1a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.tcc.69A59E265193CBC8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale_t.h.557516A6B361170F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale_t.h.557516A6B361170F.idx new file mode 100644 index 0000000..2fb7c4b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/locale_t.h.557516A6B361170F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/localefwd.h.8D507D2D246F7EFC.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/localefwd.h.8D507D2D246F7EFC.idx new file mode 100644 index 0000000..241d412 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/localefwd.h.8D507D2D246F7EFC.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/long-double.h.ACD735A1862B6BF8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/long-double.h.ACD735A1862B6BF8.idx new file mode 100644 index 0000000..df07314 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/long-double.h.ACD735A1862B6BF8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/main.cpp.2D227B92B66939DB.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/main.cpp.2D227B92B66939DB.idx new file mode 100644 index 0000000..9ad5c25 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/main.cpp.2D227B92B66939DB.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.cpp.5DBE48AB22A3742A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.cpp.5DBE48AB22A3742A.idx new file mode 100644 index 0000000..bce5988 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.cpp.5DBE48AB22A3742A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.h.2DEFA841ACD26463.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.h.2DEFA841ACD26463.idx new file mode 100644 index 0000000..119b2a7 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.h.2DEFA841ACD26463.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/map.67F74A10898EA76A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/map.67F74A10898EA76A.idx new file mode 100644 index 0000000..706e7fa Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/map.67F74A10898EA76A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/mbstate_t.h.F9237FB65FF84D5A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/mbstate_t.h.F9237FB65FF84D5A.idx new file mode 100644 index 0000000..436c554 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/mbstate_t.h.F9237FB65FF84D5A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/memory.DEB7D2B4EBB93631.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/memory.DEB7D2B4EBB93631.idx new file mode 100644 index 0000000..5d40b25 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/memory.DEB7D2B4EBB93631.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/memory_resource.h.8CBC2A2935956F47.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/memory_resource.h.8CBC2A2935956F47.idx new file mode 100644 index 0000000..0c69ce3 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/memory_resource.h.8CBC2A2935956F47.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/memoryfwd.h.8339F1696DAE3C08.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/memoryfwd.h.8339F1696DAE3C08.idx new file mode 100644 index 0000000..f73b428 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/memoryfwd.h.8339F1696DAE3C08.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/move.h.82CE505FF4CFACB8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/move.h.82CE505FF4CFACB8.idx new file mode 100644 index 0000000..95de148 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/move.h.82CE505FF4CFACB8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/nested_exception.h.5EE3E7707B4F93EB.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/nested_exception.h.5EE3E7707B4F93EB.idx new file mode 100644 index 0000000..606ae6d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/nested_exception.h.5EE3E7707B4F93EB.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/new.41D56A2D69E57DED.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/new.41D56A2D69E57DED.idx new file mode 100644 index 0000000..ae0de57 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/new.41D56A2D69E57DED.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/new_allocator.h.FD7B7B64B2A2207B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/new_allocator.h.FD7B7B64B2A2207B.idx new file mode 100644 index 0000000..e3b79db Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/new_allocator.h.FD7B7B64B2A2207B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/node_handle.h.F46F9F3F43861006.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/node_handle.h.F46F9F3F43861006.idx new file mode 100644 index 0000000..6702e10 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/node_handle.h.F46F9F3F43861006.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/numeric.F93D8B803F42F31D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/numeric.F93D8B803F42F31D.idx new file mode 100644 index 0000000..a8d1ebb Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/numeric.F93D8B803F42F31D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/numeric_traits.h.8FEF7D9B8E9913D8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/numeric_traits.h.8FEF7D9B8E9913D8.idx new file mode 100644 index 0000000..4bb72e1 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/numeric_traits.h.8FEF7D9B8E9913D8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/os_defines.h.5BE086DD68F6A410.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/os_defines.h.5BE086DD68F6A410.idx new file mode 100644 index 0000000..784c8c2 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/os_defines.h.5BE086DD68F6A410.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ostream_insert.h.D2F22116BE7D73E6.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ostream_insert.h.D2F22116BE7D73E6.idx new file mode 100644 index 0000000..0575c1a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ostream_insert.h.D2F22116BE7D73E6.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/parse_numbers.h.EC5583E0556FCEF1.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/parse_numbers.h.EC5583E0556FCEF1.idx new file mode 100644 index 0000000..884cf7d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/parse_numbers.h.EC5583E0556FCEF1.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/posix1_lim.h.D94E4687FC9359FF.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/posix1_lim.h.D94E4687FC9359FF.idx new file mode 100644 index 0000000..6312e36 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/posix1_lim.h.D94E4687FC9359FF.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/posix2_lim.h.430DA38A1F301F29.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/posix2_lim.h.430DA38A1F301F29.idx new file mode 100644 index 0000000..dccb77d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/posix2_lim.h.430DA38A1F301F29.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/postypes.h.BE1513ED32E6A399.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/postypes.h.BE1513ED32E6A399.idx new file mode 100644 index 0000000..573a900 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/postypes.h.BE1513ED32E6A399.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/predefined_ops.h.B15CDC54361DCC11.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/predefined_ops.h.B15CDC54361DCC11.idx new file mode 100644 index 0000000..40d189b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/predefined_ops.h.B15CDC54361DCC11.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pstl_config.h.78EC065511725BA3.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pstl_config.h.78EC065511725BA3.idx new file mode 100644 index 0000000..3ad6e78 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pstl_config.h.78EC065511725BA3.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthread.h.022320E0CE01A46D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthread.h.022320E0CE01A46D.idx new file mode 100644 index 0000000..5e88da1 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthread.h.022320E0CE01A46D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthread_stack_min-dynamic.h.6F432801F0DF58B7.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthread_stack_min-dynamic.h.6F432801F0DF58B7.idx new file mode 100644 index 0000000..c1b51a2 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthread_stack_min-dynamic.h.6F432801F0DF58B7.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes-arch.h.9E138C411BE448A0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes-arch.h.9E138C411BE448A0.idx new file mode 100644 index 0000000..976528f Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes-arch.h.9E138C411BE448A0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes.h.BAA8217B62BB6E86.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes.h.BAA8217B62BB6E86.idx new file mode 100644 index 0000000..77a5037 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes.h.BAA8217B62BB6E86.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ptr_traits.h.BC3863E4C7FECDA0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ptr_traits.h.BC3863E4C7FECDA0.idx new file mode 100644 index 0000000..e1cffa1 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ptr_traits.h.BC3863E4C7FECDA0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qalgorithms.h.FD2ECFF5676E6790.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qalgorithms.h.FD2ECFF5676E6790.idx new file mode 100644 index 0000000..c422245 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qalgorithms.h.FD2ECFF5676E6790.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qapplication.h.A93E4553FB9CB7A2.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qapplication.h.A93E4553FB9CB7A2.idx new file mode 100644 index 0000000..9b41d07 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qapplication.h.A93E4553FB9CB7A2.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qarraydata.h.59BE31F3BBA8ED3E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qarraydata.h.59BE31F3BBA8ED3E.idx new file mode 100644 index 0000000..469e2ad Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qarraydata.h.59BE31F3BBA8ED3E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qatomic.h.F27F4B16AB53D9F8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qatomic.h.F27F4B16AB53D9F8.idx new file mode 100644 index 0000000..a5d4c43 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qatomic.h.F27F4B16AB53D9F8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qatomic_cxx11.h.69F2114361242273.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qatomic_cxx11.h.69F2114361242273.idx new file mode 100644 index 0000000..d8fd807 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qatomic_cxx11.h.69F2114361242273.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbasicatomic.h.A2BFD15B643C1404.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbasicatomic.h.A2BFD15B643C1404.idx new file mode 100644 index 0000000..60b74bf Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbasicatomic.h.A2BFD15B643C1404.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbrush.h.D44E532BF6C7C41E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbrush.h.D44E532BF6C7C41E.idx new file mode 100644 index 0000000..bd6da89 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbrush.h.D44E532BF6C7C41E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbytearray.h.3E258E5BF8C780EA.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbytearray.h.3E258E5BF8C780EA.idx new file mode 100644 index 0000000..80d1dcb Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbytearray.h.3E258E5BF8C780EA.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbytearraylist.h.E2E8090DE1F836AD.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbytearraylist.h.E2E8090DE1F836AD.idx new file mode 100644 index 0000000..cf5c782 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qbytearraylist.h.E2E8090DE1F836AD.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qchar.h.AA0A3CD3BD472DA0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qchar.h.AA0A3CD3BD472DA0.idx new file mode 100644 index 0000000..e29b8d8 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qchar.h.AA0A3CD3BD472DA0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcolor.h.5684E01578882E86.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcolor.h.5684E01578882E86.idx new file mode 100644 index 0000000..83ee86e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcolor.h.5684E01578882E86.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcompilerdetection.h.7273FAC81D36B620.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcompilerdetection.h.7273FAC81D36B620.idx new file mode 100644 index 0000000..51df47d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcompilerdetection.h.7273FAC81D36B620.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qconfig.h.F68B1AFB5E4EF498.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qconfig.h.F68B1AFB5E4EF498.idx new file mode 100644 index 0000000..9d0b8b0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qconfig.h.F68B1AFB5E4EF498.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcontainerfwd.h.A8D45E2A7296D1C8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcontainerfwd.h.A8D45E2A7296D1C8.idx new file mode 100644 index 0000000..89a72f5 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcontainerfwd.h.A8D45E2A7296D1C8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcontainertools_impl.h.7644E4C51B877567.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcontainertools_impl.h.7644E4C51B877567.idx new file mode 100644 index 0000000..d90c63e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcontainertools_impl.h.7644E4C51B877567.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication.h.0A5B8B7796FFF62E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication.h.0A5B8B7796FFF62E.idx new file mode 100644 index 0000000..f9749f5 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication.h.0A5B8B7796FFF62E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcoreevent.h.F3CEEB53B346C550.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcoreevent.h.F3CEEB53B346C550.idx new file mode 100644 index 0000000..6178589 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcoreevent.h.F3CEEB53B346C550.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcursor.h.69E8ABF61EB150EC.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcursor.h.69E8ABF61EB150EC.idx new file mode 100644 index 0000000..da76d56 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qcursor.h.69E8ABF61EB150EC.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qdatastream.h.911D7CBB33217000.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qdatastream.h.911D7CBB33217000.idx new file mode 100644 index 0000000..ed2993a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qdatastream.h.911D7CBB33217000.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qeventloop.h.634AE2F88E9E40CC.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qeventloop.h.634AE2F88E9E40CC.idx new file mode 100644 index 0000000..0917c4d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qeventloop.h.634AE2F88E9E40CC.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qflags.h.759D8986082A8255.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qflags.h.759D8986082A8255.idx new file mode 100644 index 0000000..fbdd605 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qflags.h.759D8986082A8255.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qfont.h.A1BC5EA710C0475E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qfont.h.A1BC5EA710C0475E.idx new file mode 100644 index 0000000..b979b8d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qfont.h.A1BC5EA710C0475E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qfontinfo.h.2B115D24EC8E4A62.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qfontinfo.h.2B115D24EC8E4A62.idx new file mode 100644 index 0000000..d6883a9 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qfontinfo.h.2B115D24EC8E4A62.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qfontmetrics.h.1E754D652EDBD45C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qfontmetrics.h.1E754D652EDBD45C.idx new file mode 100644 index 0000000..de5eb60 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qfontmetrics.h.1E754D652EDBD45C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qgenericatomic.h.D2595E9059CE3E6F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qgenericatomic.h.D2595E9059CE3E6F.idx new file mode 100644 index 0000000..7fbcfe5 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qgenericatomic.h.D2595E9059CE3E6F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qglobal.h.80C5986D0C867ACE.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qglobal.h.80C5986D0C867ACE.idx new file mode 100644 index 0000000..f8ba586 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qglobal.h.80C5986D0C867ACE.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qglobalstatic.h.B90F9758F0EF15A9.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qglobalstatic.h.B90F9758F0EF15A9.idx new file mode 100644 index 0000000..3c66b5b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qglobalstatic.h.B90F9758F0EF15A9.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qguiapplication.h.B71C26C78EAD409D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qguiapplication.h.B71C26C78EAD409D.idx new file mode 100644 index 0000000..98911be Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qguiapplication.h.B71C26C78EAD409D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qhash.h.C345BB5A3DCF91DD.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qhash.h.C345BB5A3DCF91DD.idx new file mode 100644 index 0000000..6c7f8c1 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qhash.h.C345BB5A3DCF91DD.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qhashfunctions.h.7524BE336D4E70AF.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qhashfunctions.h.7524BE336D4E70AF.idx new file mode 100644 index 0000000..28cf550 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qhashfunctions.h.7524BE336D4E70AF.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qicon.h.F590370864B9ACC9.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qicon.h.F590370864B9ACC9.idx new file mode 100644 index 0000000..bb9acfd Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qicon.h.F590370864B9ACC9.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qimage.h.B98B60217EC4C94F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qimage.h.B98B60217EC4C94F.idx new file mode 100644 index 0000000..3ccdca0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qimage.h.B98B60217EC4C94F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qinputmethod.h.62638013DB836F5C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qinputmethod.h.62638013DB836F5C.idx new file mode 100644 index 0000000..1900169 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qinputmethod.h.62638013DB836F5C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qiodevice.h.86919C8F00908C87.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qiodevice.h.86919C8F00908C87.idx new file mode 100644 index 0000000..ddc1726 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qiodevice.h.86919C8F00908C87.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qiterator.h.A52C38FD59FD21C6.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qiterator.h.A52C38FD59FD21C6.idx new file mode 100644 index 0000000..7b1fbc5 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qiterator.h.A52C38FD59FD21C6.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qkeysequence.h.EC0D1C6B79C0D9AF.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qkeysequence.h.EC0D1C6B79C0D9AF.idx new file mode 100644 index 0000000..e9ad6c6 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qkeysequence.h.EC0D1C6B79C0D9AF.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qline.h.08A4D350D9C9644B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qline.h.08A4D350D9C9644B.idx new file mode 100644 index 0000000..4c90a42 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qline.h.08A4D350D9C9644B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qlist.h.A54757BEE4315CE6.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qlist.h.A54757BEE4315CE6.idx new file mode 100644 index 0000000..16f1bff Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qlist.h.A54757BEE4315CE6.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qlocale.h.7E7DB33F1A299A16.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qlocale.h.7E7DB33F1A299A16.idx new file mode 100644 index 0000000..5d9bb2c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qlocale.h.7E7DB33F1A299A16.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qlogging.h.88C32C1FE85F3443.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qlogging.h.88C32C1FE85F3443.idx new file mode 100644 index 0000000..548a1a6 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qlogging.h.88C32C1FE85F3443.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmainwindow.h.2825B14DFE1FF1B4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmainwindow.h.2825B14DFE1FF1B4.idx new file mode 100644 index 0000000..9d01a19 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmainwindow.h.2825B14DFE1FF1B4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmap.h.8CA468BD1FBCE665.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmap.h.8CA468BD1FBCE665.idx new file mode 100644 index 0000000..eee87bf Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmap.h.8CA468BD1FBCE665.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmargins.h.C0D077F7860E1277.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmargins.h.C0D077F7860E1277.idx new file mode 100644 index 0000000..7820ca5 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmargins.h.C0D077F7860E1277.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmatrix.h.00820805EF576E4B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmatrix.h.00820805EF576E4B.idx new file mode 100644 index 0000000..8e064b2 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmatrix.h.00820805EF576E4B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmetatype.h.541E34D6E6760512.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmetatype.h.541E34D6E6760512.idx new file mode 100644 index 0000000..6411576 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qmetatype.h.541E34D6E6760512.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qnamespace.h.EC3FC28536503AF1.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qnamespace.h.EC3FC28536503AF1.idx new file mode 100644 index 0000000..579d201 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qnamespace.h.EC3FC28536503AF1.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qnumeric.h.A66D4612F55B13BE.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qnumeric.h.A66D4612F55B13BE.idx new file mode 100644 index 0000000..37d79a4 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qnumeric.h.A66D4612F55B13BE.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobject.h.8D479A7B3FDCD700.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobject.h.8D479A7B3FDCD700.idx new file mode 100644 index 0000000..3e717bb Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobject.h.8D479A7B3FDCD700.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobject_impl.h.310F998ABFD21C29.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobject_impl.h.310F998ABFD21C29.idx new file mode 100644 index 0000000..766d3c0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobject_impl.h.310F998ABFD21C29.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.598B10433A0B063A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.598B10433A0B063A.idx new file mode 100644 index 0000000..5121f8e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.598B10433A0B063A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.A64CF055117FDFF7.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.A64CF055117FDFF7.idx new file mode 100644 index 0000000..143f314 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.A64CF055117FDFF7.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs_impl.h.7990AFD078F8EA35.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs_impl.h.7990AFD078F8EA35.idx new file mode 100644 index 0000000..1c5aa0a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs_impl.h.7990AFD078F8EA35.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpaintdevice.h.4748152C3010F1F9.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpaintdevice.h.4748152C3010F1F9.idx new file mode 100644 index 0000000..02502e0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpaintdevice.h.4748152C3010F1F9.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpair.h.9DEE0C3D7A14D2D0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpair.h.9DEE0C3D7A14D2D0.idx new file mode 100644 index 0000000..5ed0b47 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpair.h.9DEE0C3D7A14D2D0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpalette.h.4842B06684DDBDAE.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpalette.h.4842B06684DDBDAE.idx new file mode 100644 index 0000000..3f6a7c1 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpalette.h.4842B06684DDBDAE.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpixelformat.h.620C90AEA27BFC2A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpixelformat.h.620C90AEA27BFC2A.idx new file mode 100644 index 0000000..b391194 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpixelformat.h.620C90AEA27BFC2A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpixmap.h.D73E0EAB31C7D791.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpixmap.h.D73E0EAB31C7D791.idx new file mode 100644 index 0000000..b3f4fcd Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpixmap.h.D73E0EAB31C7D791.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpoint.h.A7DD7B4CA031A3A7.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpoint.h.A7DD7B4CA031A3A7.idx new file mode 100644 index 0000000..a674219 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpoint.h.A7DD7B4CA031A3A7.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpolygon.h.4000A0F75B81224E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpolygon.h.4000A0F75B81224E.idx new file mode 100644 index 0000000..37d807d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qpolygon.h.4000A0F75B81224E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qprocessordetection.h.F5198DD5442AFC6E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qprocessordetection.h.F5198DD5442AFC6E.idx new file mode 100644 index 0000000..d564584 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qprocessordetection.h.F5198DD5442AFC6E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrect.h.F6CF1537A0B18D4C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrect.h.F6CF1537A0B18D4C.idx new file mode 100644 index 0000000..d38d234 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrect.h.F6CF1537A0B18D4C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrefcount.h.6BCA9FE7BAF3DF25.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrefcount.h.6BCA9FE7BAF3DF25.idx new file mode 100644 index 0000000..7784970 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrefcount.h.6BCA9FE7BAF3DF25.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qregexp.h.8088EF7E18743A13.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qregexp.h.8088EF7E18743A13.idx new file mode 100644 index 0000000..035b12b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qregexp.h.8088EF7E18743A13.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qregion.h.56C430EE51273A95.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qregion.h.56C430EE51273A95.idx new file mode 100644 index 0000000..4a676c5 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qregion.h.56C430EE51273A95.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrgb.h.2B6D1755758FF0DF.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrgb.h.2B6D1755758FF0DF.idx new file mode 100644 index 0000000..f9f4d23 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrgb.h.2B6D1755758FF0DF.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrgba64.h.A8C3238E8B988F3B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrgba64.h.A8C3238E8B988F3B.idx new file mode 100644 index 0000000..94c5dcf Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qrgba64.h.A8C3238E8B988F3B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qscopedpointer.h.447CA7EB36AE21C6.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qscopedpointer.h.447CA7EB36AE21C6.idx new file mode 100644 index 0000000..d766713 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qscopedpointer.h.447CA7EB36AE21C6.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qshareddata.h.1613C0F5A4F18669.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qshareddata.h.1613C0F5A4F18669.idx new file mode 100644 index 0000000..e09cb28 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qshareddata.h.1613C0F5A4F18669.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer.h.9FB2460B773F76C5.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer.h.9FB2460B773F76C5.idx new file mode 100644 index 0000000..8345b43 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer.h.9FB2460B773F76C5.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer_impl.h.901DC4E517036607.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer_impl.h.901DC4E517036607.idx new file mode 100644 index 0000000..90441af Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer_impl.h.901DC4E517036607.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsize.h.BEC23C243EFEF7A4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsize.h.BEC23C243EFEF7A4.idx new file mode 100644 index 0000000..2127909 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsize.h.BEC23C243EFEF7A4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsizepolicy.h.118596B94F6E5633.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsizepolicy.h.118596B94F6E5633.idx new file mode 100644 index 0000000..e12a254 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsizepolicy.h.118596B94F6E5633.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstring.h.D18E3F7143B0C176.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstring.h.D18E3F7143B0C176.idx new file mode 100644 index 0000000..38bf730 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstring.h.D18E3F7143B0C176.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringalgorithms.h.BCB989669B8CD32D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringalgorithms.h.BCB989669B8CD32D.idx new file mode 100644 index 0000000..87928e6 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringalgorithms.h.BCB989669B8CD32D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringlist.h.B03A2F9985D050E5.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringlist.h.B03A2F9985D050E5.idx new file mode 100644 index 0000000..58a863e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringlist.h.B03A2F9985D050E5.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringliteral.h.0A066A3902B9CE30.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringliteral.h.0A066A3902B9CE30.idx new file mode 100644 index 0000000..87b83c8 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringliteral.h.0A066A3902B9CE30.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringmatcher.h.7D870B6147C84076.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringmatcher.h.7D870B6147C84076.idx new file mode 100644 index 0000000..d26fd1c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringmatcher.h.7D870B6147C84076.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringview.h.A67B8B8FF41BFF55.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringview.h.A67B8B8FF41BFF55.idx new file mode 100644 index 0000000..d6965e0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qstringview.h.A67B8B8FF41BFF55.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsysinfo.h.8EF4D5AF4D751B51.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsysinfo.h.8EF4D5AF4D751B51.idx new file mode 100644 index 0000000..3cfff0c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsysinfo.h.8EF4D5AF4D751B51.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsystemdetection.h.8329D2CD97522D7C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsystemdetection.h.8329D2CD97522D7C.idx new file mode 100644 index 0000000..eb60234 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qsystemdetection.h.8329D2CD97522D7C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtabwidget.h.C4E9E0C72F6941B1.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtabwidget.h.C4E9E0C72F6941B1.idx new file mode 100644 index 0000000..c74fb86 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtabwidget.h.C4E9E0C72F6941B1.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtcore-config.h.0C11AA7F7C9F0EA4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtcore-config.h.0C11AA7F7C9F0EA4.idx new file mode 100644 index 0000000..36eec6c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtcore-config.h.0C11AA7F7C9F0EA4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtgui-config.h.0898F0E1544AC047.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtgui-config.h.0898F0E1544AC047.idx new file mode 100644 index 0000000..c30a855 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtgui-config.h.0898F0E1544AC047.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtguiglobal.h.80A0DFCC7763ABCB.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtguiglobal.h.80A0DFCC7763ABCB.idx new file mode 100644 index 0000000..360788a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtguiglobal.h.80A0DFCC7763ABCB.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtransform.h.97E922D9DE075E31.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtransform.h.97E922D9DE075E31.idx new file mode 100644 index 0000000..8a2ec72 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtransform.h.97E922D9DE075E31.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtranslator.h.E43F40A38E0AFDC4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtranslator.h.E43F40A38E0AFDC4.idx new file mode 100644 index 0000000..b6b8bb8 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtranslator.h.E43F40A38E0AFDC4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtwidgets-config.h.3C31FF7C5B82440C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtwidgets-config.h.3C31FF7C5B82440C.idx new file mode 100644 index 0000000..e237400 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtwidgets-config.h.3C31FF7C5B82440C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsglobal.h.0D7FCF3A707EDF44.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsglobal.h.0D7FCF3A707EDF44.idx new file mode 100644 index 0000000..0cfe638 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsglobal.h.0D7FCF3A707EDF44.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtypeinfo.h.5160790443A251D4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtypeinfo.h.5160790443A251D4.idx new file mode 100644 index 0000000..5cd6017 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qtypeinfo.h.5160790443A251D4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qvariant.h.4C476E0F61671237.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qvariant.h.4C476E0F61671237.idx new file mode 100644 index 0000000..8d80472 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qvariant.h.4C476E0F61671237.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qvarlengtharray.h.7FE8B531C3A3B76F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qvarlengtharray.h.7FE8B531C3A3B76F.idx new file mode 100644 index 0000000..f649dbd Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qvarlengtharray.h.7FE8B531C3A3B76F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qvector.h.D123A02691F2B7AD.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qvector.h.D123A02691F2B7AD.idx new file mode 100644 index 0000000..67b3084 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qvector.h.D123A02691F2B7AD.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qversiontagging.h.3C43080618F516BF.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qversiontagging.h.3C43080618F516BF.idx new file mode 100644 index 0000000..e6eef91 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qversiontagging.h.3C43080618F516BF.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qwidget.h.5A43191B86718350.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qwidget.h.5A43191B86718350.idx new file mode 100644 index 0000000..0caf566 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qwidget.h.5A43191B86718350.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qwindowdefs.h.434E87C4F63B3C91.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qwindowdefs.h.434E87C4F63B3C91.idx new file mode 100644 index 0000000..5e11b6d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/qwindowdefs.h.434E87C4F63B3C91.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/range_access.h.F2D342D0170A00E0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/range_access.h.F2D342D0170A00E0.idx new file mode 100644 index 0000000..44b27ae Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/range_access.h.F2D342D0170A00E0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ratio.637BCEE78C1EAF1F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ratio.637BCEE78C1EAF1F.idx new file mode 100644 index 0000000..f6bc45d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/ratio.637BCEE78C1EAF1F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/refwrap.h.F7E25ED78261BCB2.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/refwrap.h.F7E25ED78261BCB2.idx new file mode 100644 index 0000000..2364fb9 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/refwrap.h.F7E25ED78261BCB2.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/requires_hosted.h.26268E021F0ECE3C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/requires_hosted.h.26268E021F0ECE3C.idx new file mode 100644 index 0000000..abca3eb Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/requires_hosted.h.26268E021F0ECE3C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/sched.h.A585A48500495348.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/sched.h.A585A48500495348.idx new file mode 100644 index 0000000..33bcae0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/sched.h.A585A48500495348.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/sched.h.E8530EF262253892.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/sched.h.E8530EF262253892.idx new file mode 100644 index 0000000..1928bbe Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/sched.h.E8530EF262253892.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/select.h.BA57472D13519767.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/select.h.BA57472D13519767.idx new file mode 100644 index 0000000..43d71b0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/select.h.BA57472D13519767.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/select.h.E19325D0BE3592A0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/select.h.E19325D0BE3592A0.idx new file mode 100644 index 0000000..269c2db Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/select.h.E19325D0BE3592A0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/setjmp.h.71DEFB3DCC800794.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/setjmp.h.71DEFB3DCC800794.idx new file mode 100644 index 0000000..0c012ea Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/setjmp.h.71DEFB3DCC800794.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr.h.58B2A3F1F22B1E10.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr.h.58B2A3F1F22B1E10.idx new file mode 100644 index 0000000..ad11036 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr.h.58B2A3F1F22B1E10.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_atomic.h.D4122DD7C624F18E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_atomic.h.D4122DD7C624F18E.idx new file mode 100644 index 0000000..32164d5 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_atomic.h.D4122DD7C624F18E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_base.h.BE69034022EA8FA4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_base.h.BE69034022EA8FA4.idx new file mode 100644 index 0000000..ded6a35 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_base.h.BE69034022EA8FA4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/sigset_t.h.32273C537A103809.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/sigset_t.h.32273C537A103809.idx new file mode 100644 index 0000000..261f145 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/sigset_t.h.32273C537A103809.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/single_threaded.h.918E7314A6EC8DC0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/single_threaded.h.918E7314A6EC8DC0.idx new file mode 100644 index 0000000..56f4651 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/single_threaded.h.918E7314A6EC8DC0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/std_abs.h.B5BC80B73AA8AA04.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/std_abs.h.B5BC80B73AA8AA04.idx new file mode 100644 index 0000000..7156559 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/std_abs.h.B5BC80B73AA8AA04.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/std_function.h.1DBFFD209E231917.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/std_function.h.1DBFFD209E231917.idx new file mode 100644 index 0000000..3f3641b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/std_function.h.1DBFFD209E231917.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdarg.h.32EA7B95DAFCCF99.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdarg.h.32EA7B95DAFCCF99.idx new file mode 100644 index 0000000..8d9fd72 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdarg.h.32EA7B95DAFCCF99.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdc-predef.h.9EA93D70716BF84B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdc-predef.h.9EA93D70716BF84B.idx new file mode 100644 index 0000000..30de0be Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdc-predef.h.9EA93D70716BF84B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stddef.h.B10142B5B6E10391.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stddef.h.B10142B5B6E10391.idx new file mode 100644 index 0000000..5f48782 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stddef.h.B10142B5B6E10391.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdexcept.FC9481857B4FA9B4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdexcept.FC9481857B4FA9B4.idx new file mode 100644 index 0000000..7d24b76 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdexcept.FC9481857B4FA9B4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint-intn.h.EE0939E700184847.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint-intn.h.EE0939E700184847.idx new file mode 100644 index 0000000..242bbed Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint-intn.h.EE0939E700184847.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint-least.h.A0CB5BC401DAC650.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint-least.h.A0CB5BC401DAC650.idx new file mode 100644 index 0000000..8e71d66 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint-least.h.A0CB5BC401DAC650.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint-uintn.h.B3EA113168048B57.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint-uintn.h.B3EA113168048B57.idx new file mode 100644 index 0000000..2029c24 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint-uintn.h.B3EA113168048B57.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.08597F86630FDE5E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.08597F86630FDE5E.idx new file mode 100644 index 0000000..0bed224 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.08597F86630FDE5E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.22B451C129B23D79.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.22B451C129B23D79.idx new file mode 100644 index 0000000..d9cfbe4 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.22B451C129B23D79.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx new file mode 100644 index 0000000..671fc1e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdio_lim.h.09E79B5FC5C8DF86.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdio_lim.h.09E79B5FC5C8DF86.idx new file mode 100644 index 0000000..a1140d2 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdio_lim.h.09E79B5FC5C8DF86.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdlib-float.h.126E8959FAE2A511.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdlib-float.h.126E8959FAE2A511.idx new file mode 100644 index 0000000..e1df232 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdlib-float.h.126E8959FAE2A511.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.42D90B865E21AB50.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.42D90B865E21AB50.idx new file mode 100644 index 0000000..bf6b0f1 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.42D90B865E21AB50.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.61AA7B9EED10C430.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.61AA7B9EED10C430.idx new file mode 100644 index 0000000..c00952b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.61AA7B9EED10C430.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_algo.h.336B2A99E112B831.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_algo.h.336B2A99E112B831.idx new file mode 100644 index 0000000..2f2d499 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_algo.h.336B2A99E112B831.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_algobase.h.555E5AB59D1CE434.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_algobase.h.555E5AB59D1CE434.idx new file mode 100644 index 0000000..61034c4 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_algobase.h.555E5AB59D1CE434.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_bvector.h.8AE3CEBB0EAAE7AC.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_bvector.h.8AE3CEBB0EAAE7AC.idx new file mode 100644 index 0000000..05d0f35 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_bvector.h.8AE3CEBB0EAAE7AC.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_construct.h.675F3C756D2CDDFB.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_construct.h.675F3C756D2CDDFB.idx new file mode 100644 index 0000000..c9910ec Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_construct.h.675F3C756D2CDDFB.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_function.h.4312324AADC9200E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_function.h.4312324AADC9200E.idx new file mode 100644 index 0000000..1a377bb Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_function.h.4312324AADC9200E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_heap.h.A0022ED15B79087D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_heap.h.A0022ED15B79087D.idx new file mode 100644 index 0000000..1234551 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_heap.h.A0022ED15B79087D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator.h.70D88ADB523A155E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator.h.70D88ADB523A155E.idx new file mode 100644 index 0000000..90a7dd3 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator.h.70D88ADB523A155E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_funcs.h.0D39D2E36115557E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_funcs.h.0D39D2E36115557E.idx new file mode 100644 index 0000000..ba2ef37 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_funcs.h.0D39D2E36115557E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_types.h.1C2D9B2B05C1363B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_types.h.1C2D9B2B05C1363B.idx new file mode 100644 index 0000000..acae06b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_types.h.1C2D9B2B05C1363B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_list.h.063E636C37F12734.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_list.h.063E636C37F12734.idx new file mode 100644 index 0000000..c1045ac Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_list.h.063E636C37F12734.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_map.h.EC07165BB825159E.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_map.h.EC07165BB825159E.idx new file mode 100644 index 0000000..a3f6ee8 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_map.h.EC07165BB825159E.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_multimap.h.5B0E5766E75F4152.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_multimap.h.5B0E5766E75F4152.idx new file mode 100644 index 0000000..22fda43 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_multimap.h.5B0E5766E75F4152.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_numeric.h.936BC0F7F7FAE23C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_numeric.h.936BC0F7F7FAE23C.idx new file mode 100644 index 0000000..3a05359 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_numeric.h.936BC0F7F7FAE23C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_pair.h.33E007C18AD1880F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_pair.h.33E007C18AD1880F.idx new file mode 100644 index 0000000..4611b65 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_pair.h.33E007C18AD1880F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_raw_storage_iter.h.E907E48D11449F0C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_raw_storage_iter.h.E907E48D11449F0C.idx new file mode 100644 index 0000000..81c6bad Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_raw_storage_iter.h.E907E48D11449F0C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_relops.h.8CD880CC32BA3E47.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_relops.h.8CD880CC32BA3E47.idx new file mode 100644 index 0000000..2e6b9f6 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_relops.h.8CD880CC32BA3E47.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_tempbuf.h.1CFD178B11157DBE.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_tempbuf.h.1CFD178B11157DBE.idx new file mode 100644 index 0000000..449c352 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_tempbuf.h.1CFD178B11157DBE.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_tree.h.C190197022C6FA1F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_tree.h.C190197022C6FA1F.idx new file mode 100644 index 0000000..2cad7b0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_tree.h.C190197022C6FA1F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_uninitialized.h.54EDC68402026771.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_uninitialized.h.54EDC68402026771.idx new file mode 100644 index 0000000..efa0781 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_uninitialized.h.54EDC68402026771.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_vector.h.5BE0DC1E083D4239.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_vector.h.5BE0DC1E083D4239.idx new file mode 100644 index 0000000..c9543d8 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stl_vector.h.5BE0DC1E083D4239.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stream_iterator.h.61B56BA0B3239EDE.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stream_iterator.h.61B56BA0B3239EDE.idx new file mode 100644 index 0000000..ed6db6c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stream_iterator.h.61B56BA0B3239EDE.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/streambuf.7FD2D3A2B827E078.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/streambuf.7FD2D3A2B827E078.idx new file mode 100644 index 0000000..3fa2d26 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/streambuf.7FD2D3A2B827E078.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/streambuf.tcc.FB7963A391C77967.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/streambuf.tcc.FB7963A391C77967.idx new file mode 100644 index 0000000..c7a4b37 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/streambuf.tcc.FB7963A391C77967.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/streambuf_iterator.h.2D64BA51BC9EC9AD.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/streambuf_iterator.h.2D64BA51BC9EC9AD.idx new file mode 100644 index 0000000..83f7a1b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/streambuf_iterator.h.2D64BA51BC9EC9AD.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string.7B4FE7410F5C09C9.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string.7B4FE7410F5C09C9.idx new file mode 100644 index 0000000..b1e5e8c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string.7B4FE7410F5C09C9.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string.h.979B97B48AB27554.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string.h.979B97B48AB27554.idx new file mode 100644 index 0000000..68cfd0c Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string.h.979B97B48AB27554.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string_conversions.h.FEDA0A74BBD67E42.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string_conversions.h.FEDA0A74BBD67E42.idx new file mode 100644 index 0000000..103daa5 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string_conversions.h.FEDA0A74BBD67E42.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string_view.808DF2D0BB7723EB.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string_view.808DF2D0BB7723EB.idx new file mode 100644 index 0000000..744aabd Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string_view.808DF2D0BB7723EB.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string_view.tcc.3D79C5B861AFBD05.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string_view.tcc.3D79C5B861AFBD05.idx new file mode 100644 index 0000000..29f0428 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/string_view.tcc.3D79C5B861AFBD05.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stringfwd.h.557FE983BB1E2646.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stringfwd.h.557FE983BB1E2646.idx new file mode 100644 index 0000000..742e33f Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stringfwd.h.557FE983BB1E2646.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/strings.h.9EB46A34EB89BB5D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/strings.h.9EB46A34EB89BB5D.idx new file mode 100644 index 0000000..8c2a66d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/strings.h.9EB46A34EB89BB5D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_FILE.h.2B6C435DE91D3DF8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_FILE.h.2B6C435DE91D3DF8.idx new file mode 100644 index 0000000..748d8ff Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_FILE.h.2B6C435DE91D3DF8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct___jmp_buf_tag.h.C41AC0386D4A06C8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct___jmp_buf_tag.h.C41AC0386D4A06C8.idx new file mode 100644 index 0000000..c5191c0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct___jmp_buf_tag.h.C41AC0386D4A06C8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_itimerspec.h.7F2AA6FE7224B30F.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_itimerspec.h.7F2AA6FE7224B30F.idx new file mode 100644 index 0000000..1c8422d Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_itimerspec.h.7F2AA6FE7224B30F.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_mutex.h.A62EF32C01DB3505.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_mutex.h.A62EF32C01DB3505.idx new file mode 100644 index 0000000..c78433a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_mutex.h.A62EF32C01DB3505.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_rwlock.h.76DF445C3AA414C9.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_rwlock.h.76DF445C3AA414C9.idx new file mode 100644 index 0000000..6d3c2f6 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_rwlock.h.76DF445C3AA414C9.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_sched_param.h.B3F662015F7067C8.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_sched_param.h.B3F662015F7067C8.idx new file mode 100644 index 0000000..d1dd9c0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_sched_param.h.B3F662015F7067C8.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_timespec.h.0E09B6677A8D6A08.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_timespec.h.0E09B6677A8D6A08.idx new file mode 100644 index 0000000..88d168f Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_timespec.h.0E09B6677A8D6A08.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_timeval.h.4A17C4CCB9EE5883.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_timeval.h.4A17C4CCB9EE5883.idx new file mode 100644 index 0000000..c439849 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_timeval.h.4A17C4CCB9EE5883.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_tm.h.472DDF26D5924DB0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_tm.h.472DDF26D5924DB0.idx new file mode 100644 index 0000000..bf1eef3 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/struct_tm.h.472DDF26D5924DB0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stubs-64.h.C743FD695F310B00.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stubs-64.h.C743FD695F310B00.idx new file mode 100644 index 0000000..143de8f Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stubs-64.h.C743FD695F310B00.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stubs.h.07D09A29AEBA877C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stubs.h.07D09A29AEBA877C.idx new file mode 100644 index 0000000..ca6ae11 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/stubs.h.07D09A29AEBA877C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/system_error.8A12E1E8FFB1D44A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/system_error.8A12E1E8FFB1D44A.idx new file mode 100644 index 0000000..7afe64a Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/system_error.8A12E1E8FFB1D44A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/thread-shared-types.h.D988ADBA7666A8DD.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/thread-shared-types.h.D988ADBA7666A8DD.idx new file mode 100644 index 0000000..2f14b99 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/thread-shared-types.h.D988ADBA7666A8DD.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time.h.E3714B647728C2FE.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time.h.E3714B647728C2FE.idx new file mode 100644 index 0000000..69b1b1b Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time.h.E3714B647728C2FE.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time.h.EDC06F0AFB6EC7EC.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time.h.EDC06F0AFB6EC7EC.idx new file mode 100644 index 0000000..3e7dc08 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time.h.EDC06F0AFB6EC7EC.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time64.h.1807D6F5124100A2.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time64.h.1807D6F5124100A2.idx new file mode 100644 index 0000000..00b9e17 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time64.h.1807D6F5124100A2.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time_t.h.CAA645D29A7A0EF9.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time_t.h.CAA645D29A7A0EF9.idx new file mode 100644 index 0000000..5a04bd0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/time_t.h.CAA645D29A7A0EF9.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/timer_t.h.3EFB88CBA2B5B801.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/timer_t.h.3EFB88CBA2B5B801.idx new file mode 100644 index 0000000..5de8fe7 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/timer_t.h.3EFB88CBA2B5B801.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/timesize.h.44719E86E09400E4.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/timesize.h.44719E86E09400E4.idx new file mode 100644 index 0000000..7205ec2 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/timesize.h.44719E86E09400E4.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/timex.h.F2D36E17192C32F0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/timex.h.F2D36E17192C32F0.idx new file mode 100644 index 0000000..7f6c68f Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/timex.h.F2D36E17192C32F0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/tuple.778CE823941F84F0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/tuple.778CE823941F84F0.idx new file mode 100644 index 0000000..076ea1e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/tuple.778CE823941F84F0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/type_traits.DE435E04D8184E0C.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/type_traits.DE435E04D8184E0C.idx new file mode 100644 index 0000000..3849d36 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/type_traits.DE435E04D8184E0C.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/type_traits.h.833B6807C34CC271.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/type_traits.h.833B6807C34CC271.idx new file mode 100644 index 0000000..46a22cb Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/type_traits.h.833B6807C34CC271.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/typeinfo.0065C4A406A05D71.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/typeinfo.0065C4A406A05D71.idx new file mode 100644 index 0000000..ab8a385 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/typeinfo.0065C4A406A05D71.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5A59583DBE28918.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5A59583DBE28918.idx new file mode 100644 index 0000000..1761d10 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5A59583DBE28918.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5E7FE6DA0F78AF5.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5E7FE6DA0F78AF5.idx new file mode 100644 index 0000000..2ea54c9 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5E7FE6DA0F78AF5.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/typesizes.h.A6E116B64E63B90B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/typesizes.h.A6E116B64E63B90B.idx new file mode 100644 index 0000000..a21e087 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/typesizes.h.A6E116B64E63B90B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uintn-identity.h.CB86545C6FF94BB3.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uintn-identity.h.CB86545C6FF94BB3.idx new file mode 100644 index 0000000..7e840c3 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uintn-identity.h.CB86545C6FF94BB3.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uio_lim.h.DF584C6AE54BEA07.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uio_lim.h.DF584C6AE54BEA07.idx new file mode 100644 index 0000000..032d3bf Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uio_lim.h.DF584C6AE54BEA07.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uniform_int_dist.h.C54B19F2B43B693B.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uniform_int_dist.h.C54B19F2B43B693B.idx new file mode 100644 index 0000000..d73262e Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uniform_int_dist.h.C54B19F2B43B693B.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/unique_ptr.h.A3AB02F93B77F5A0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/unique_ptr.h.A3AB02F93B77F5A0.idx new file mode 100644 index 0000000..0a55f05 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/unique_ptr.h.A3AB02F93B77F5A0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.CA82C61ED27DA8D6.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.CA82C61ED27DA8D6.idx new file mode 100644 index 0000000..5f901e6 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.CA82C61ED27DA8D6.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.h.917859E405C5B5EA.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.h.917859E405C5B5EA.idx new file mode 100644 index 0000000..9a99891 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.h.917859E405C5B5EA.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uses_allocator.h.258C17386C08195D.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uses_allocator.h.258C17386C08195D.idx new file mode 100644 index 0000000..42459c0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uses_allocator.h.258C17386C08195D.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uses_allocator_args.h.DD2424DE20F3F1C7.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uses_allocator_args.h.DD2424DE20F3F1C7.idx new file mode 100644 index 0000000..1835ff6 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/uses_allocator_args.h.DD2424DE20F3F1C7.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/utility.5D04E6A553B4780A.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/utility.5D04E6A553B4780A.idx new file mode 100644 index 0000000..1e92279 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/utility.5D04E6A553B4780A.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/utility.h.15845B2F303871C2.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/utility.h.15845B2F303871C2.idx new file mode 100644 index 0000000..ca928f8 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/utility.h.15845B2F303871C2.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/variant.0361674085D4F5FD.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/variant.0361674085D4F5FD.idx new file mode 100644 index 0000000..5e6bcdd Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/variant.0361674085D4F5FD.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/vector.04C1B55C46383484.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/vector.04C1B55C46383484.idx new file mode 100644 index 0000000..f003bd9 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/vector.04C1B55C46383484.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/vector.tcc.9925CCCCF876B8E0.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/vector.tcc.9925CCCCF876B8E0.idx new file mode 100644 index 0000000..e61b076 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/vector.tcc.9925CCCCF876B8E0.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/waitflags.h.8046C5530CD87302.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/waitflags.h.8046C5530CD87302.idx new file mode 100644 index 0000000..bb37595 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/waitflags.h.8046C5530CD87302.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/waitstatus.h.D7C4F06852D51050.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/waitstatus.h.D7C4F06852D51050.idx new file mode 100644 index 0000000..86c09ac Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/waitstatus.h.D7C4F06852D51050.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.27C0562D93BBAA12.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.27C0562D93BBAA12.idx new file mode 100644 index 0000000..85f48dd Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.27C0562D93BBAA12.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.83BD995621576773.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.83BD995621576773.idx new file mode 100644 index 0000000..6215da3 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.83BD995621576773.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wint_t.h.DAC5928CF0BA7895.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wint_t.h.DAC5928CF0BA7895.idx new file mode 100644 index 0000000..c0eb7f0 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wint_t.h.DAC5928CF0BA7895.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wordsize.h.23D8030BEC81E6F1.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wordsize.h.23D8030BEC81E6F1.idx new file mode 100644 index 0000000..7adf2a5 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/wordsize.h.23D8030BEC81E6F1.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/xopen_lim.h.E4E4BC8C11167D14.idx b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/xopen_lim.h.E4E4BC8C11167D14.idx new file mode 100644 index 0000000..f5114a6 Binary files /dev/null and b/untitled/build/Desktop-Debug/.qtc_clangd/.cache/clangd/index/xopen_lim.h.E4E4BC8C11167D14.idx differ diff --git a/untitled/build/Desktop-Debug/.qtc_clangd/compile_commands.json b/untitled/build/Desktop-Debug/.qtc_clangd/compile_commands.json new file mode 100644 index 0000000..f112847 --- /dev/null +++ b/untitled/build/Desktop-Debug/.qtc_clangd/compile_commands.json @@ -0,0 +1 @@ +[{"arguments":["clang","-Wno-documentation-unknown-command","-Wno-unknown-warning-option","-Wno-unknown-pragmas","-nostdinc","-nostdinc++","-pipe","-g","-std=gnu++1z","-Wall","-Wextra","-D_REENTRANT","-fPIC","-fsyntax-only","-m64","--target=x86_64-linux-gnu","-DQT_QML_DEBUG","-DQT_WIDGETS_LIB","-DQT_GUI_LIB","-DQT_CORE_LIB","-DQ_CREATOR_RUN","-DQT_ANNOTATE_FUNCTION(x)=__attribute__((annotate(#x)))","-I/usr/share/qtcreator/cplusplus/wrappedQtHeaders","-I/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore","-I/home/bjoern/git/GeislingerProject/untitled","-I/usr/include/x86_64-linux-gnu/qt5","-I/usr/include/x86_64-linux-gnu/qt5/QtWidgets","-I/usr/include/x86_64-linux-gnu/qt5/QtGui","-I/usr/include/x86_64-linux-gnu/qt5/QtCore","-I/home/bjoern/git/GeislingerProject/untitled/build/Desktop-Debug","-I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++","-isystem","/usr/include/c++/13","-isystem","/usr/include/x86_64-linux-gnu/c++/13","-isystem","/usr/include/c++/13/backward","-isystem","/usr/local/include","-isystem","/usr/lib/llvm-18/lib/clang/18/include","-isystem","/usr/include/x86_64-linux-gnu","-isystem","/usr/include","-fmessage-length=0","-fdiagnostics-show-note-include-stack","-fretain-comments-from-system-headers","-fmacro-backtrace-limit=0","-ferror-limit=1000","-x","c++","/home/bjoern/git/GeislingerProject/untitled/main.cpp"],"directory":"/home/bjoern/git/GeislingerProject/untitled/build/Desktop-Debug/.qtc_clangd","file":"/home/bjoern/git/GeislingerProject/untitled/main.cpp"},{"arguments":["clang","-Wno-documentation-unknown-command","-Wno-unknown-warning-option","-Wno-unknown-pragmas","-nostdinc","-nostdinc++","-pipe","-g","-std=gnu++1z","-Wall","-Wextra","-D_REENTRANT","-fPIC","-fsyntax-only","-m64","--target=x86_64-linux-gnu","-DQT_QML_DEBUG","-DQT_WIDGETS_LIB","-DQT_GUI_LIB","-DQT_CORE_LIB","-DQ_CREATOR_RUN","-DQT_ANNOTATE_FUNCTION(x)=__attribute__((annotate(#x)))","-I/usr/share/qtcreator/cplusplus/wrappedQtHeaders","-I/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore","-I/home/bjoern/git/GeislingerProject/untitled","-I/usr/include/x86_64-linux-gnu/qt5","-I/usr/include/x86_64-linux-gnu/qt5/QtWidgets","-I/usr/include/x86_64-linux-gnu/qt5/QtGui","-I/usr/include/x86_64-linux-gnu/qt5/QtCore","-I/home/bjoern/git/GeislingerProject/untitled/build/Desktop-Debug","-I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++","-isystem","/usr/include/c++/13","-isystem","/usr/include/x86_64-linux-gnu/c++/13","-isystem","/usr/include/c++/13/backward","-isystem","/usr/local/include","-isystem","/usr/lib/llvm-18/lib/clang/18/include","-isystem","/usr/include/x86_64-linux-gnu","-isystem","/usr/include","-fmessage-length=0","-fdiagnostics-show-note-include-stack","-fretain-comments-from-system-headers","-fmacro-backtrace-limit=0","-ferror-limit=1000","-x","c++","/home/bjoern/git/GeislingerProject/untitled/mainwindow.cpp"],"directory":"/home/bjoern/git/GeislingerProject/untitled/build/Desktop-Debug/.qtc_clangd","file":"/home/bjoern/git/GeislingerProject/untitled/mainwindow.cpp"},{"arguments":["clang","-Wno-documentation-unknown-command","-Wno-unknown-warning-option","-Wno-unknown-pragmas","-nostdinc","-nostdinc++","-pipe","-g","-std=gnu++1z","-Wall","-Wextra","-D_REENTRANT","-fPIC","-fsyntax-only","-m64","--target=x86_64-linux-gnu","-DQT_QML_DEBUG","-DQT_WIDGETS_LIB","-DQT_GUI_LIB","-DQT_CORE_LIB","-DQ_CREATOR_RUN","-DQT_ANNOTATE_FUNCTION(x)=__attribute__((annotate(#x)))","-I/usr/share/qtcreator/cplusplus/wrappedQtHeaders","-I/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore","-I/home/bjoern/git/GeislingerProject/untitled","-I/usr/include/x86_64-linux-gnu/qt5","-I/usr/include/x86_64-linux-gnu/qt5/QtWidgets","-I/usr/include/x86_64-linux-gnu/qt5/QtGui","-I/usr/include/x86_64-linux-gnu/qt5/QtCore","-I/home/bjoern/git/GeislingerProject/untitled/build/Desktop-Debug","-I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++","-isystem","/usr/include/c++/13","-isystem","/usr/include/x86_64-linux-gnu/c++/13","-isystem","/usr/include/c++/13/backward","-isystem","/usr/local/include","-isystem","/usr/lib/llvm-18/lib/clang/18/include","-isystem","/usr/include/x86_64-linux-gnu","-isystem","/usr/include","-fmessage-length=0","-fdiagnostics-show-note-include-stack","-fretain-comments-from-system-headers","-fmacro-backtrace-limit=0","-ferror-limit=1000","-x","c++-header","/home/bjoern/git/GeislingerProject/untitled/mainwindow.h"],"directory":"/home/bjoern/git/GeislingerProject/untitled/build/Desktop-Debug/.qtc_clangd","file":"/home/bjoern/git/GeislingerProject/untitled/mainwindow.h"},{"arguments":["clang","-Wno-documentation-unknown-command","-Wno-unknown-warning-option","-Wno-unknown-pragmas","-nostdinc","-nostdinc++","-pipe","-g","-std=gnu++1z","-Wall","-Wextra","-D_REENTRANT","-fPIC","-fsyntax-only","-m64","--target=x86_64-linux-gnu","-DQT_QML_DEBUG","-DQT_WIDGETS_LIB","-DQT_GUI_LIB","-DQT_CORE_LIB","-DQ_CREATOR_RUN","-DQT_ANNOTATE_FUNCTION(x)=__attribute__((annotate(#x)))","-I/usr/share/qtcreator/cplusplus/wrappedQtHeaders","-I/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore","-I/home/bjoern/git/GeislingerProject/untitled","-I/usr/include/x86_64-linux-gnu/qt5","-I/usr/include/x86_64-linux-gnu/qt5/QtWidgets","-I/usr/include/x86_64-linux-gnu/qt5/QtGui","-I/usr/include/x86_64-linux-gnu/qt5/QtCore","-I/home/bjoern/git/GeislingerProject/untitled/build/Desktop-Debug","-I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++","-isystem","/usr/include/c++/13","-isystem","/usr/include/x86_64-linux-gnu/c++/13","-isystem","/usr/include/c++/13/backward","-isystem","/usr/local/include","-isystem","/usr/lib/llvm-18/lib/clang/18/include","-isystem","/usr/include/x86_64-linux-gnu","-isystem","/usr/include","-fmessage-length=0","-fdiagnostics-show-note-include-stack","-fretain-comments-from-system-headers","-fmacro-backtrace-limit=0","-ferror-limit=1000","-x","c++-header","/home/bjoern/git/GeislingerProject/untitled/build/Desktop-Debug/ui_mainwindow.h"],"directory":"/home/bjoern/git/GeislingerProject/untitled/build/Desktop-Debug/.qtc_clangd","file":"/home/bjoern/git/GeislingerProject/untitled/build/Desktop-Debug/ui_mainwindow.h"}] \ No newline at end of file diff --git a/untitled/build/Desktop-Debug/qmake_qmake_qm_files.qrc b/untitled/build/Desktop-Debug/qmake_qmake_qm_files.qrc new file mode 100644 index 0000000..bbbcbde --- /dev/null +++ b/untitled/build/Desktop-Debug/qmake_qmake_qm_files.qrc @@ -0,0 +1,5 @@ + + +/home/bjoern/git/GeislingerProject/untitled/build/Desktop-Debug/.qm/untitled_en_US.qm + + diff --git a/untitled/main.cpp b/untitled/main.cpp new file mode 100644 index 0000000..59aa77d --- /dev/null +++ b/untitled/main.cpp @@ -0,0 +1,23 @@ +#include "mainwindow.h" + +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + QTranslator translator; + const QStringList uiLanguages = QLocale::system().uiLanguages(); + for (const QString &locale : uiLanguages) { + const QString baseName = "untitled_" + QLocale(locale).name(); + if (translator.load(":/i18n/" + baseName)) { + a.installTranslator(&translator); + break; + } + } + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/untitled/mainwindow.cpp b/untitled/mainwindow.cpp new file mode 100644 index 0000000..2740a6e --- /dev/null +++ b/untitled/mainwindow.cpp @@ -0,0 +1,14 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git a/untitled/mainwindow.h b/untitled/mainwindow.h new file mode 100644 index 0000000..f7a3da3 --- /dev/null +++ b/untitled/mainwindow.h @@ -0,0 +1,23 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +QT_BEGIN_NAMESPACE +namespace Ui { +class MainWindow; +} +QT_END_NAMESPACE + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private: + Ui::MainWindow *ui; +}; +#endif // MAINWINDOW_H diff --git a/untitled/mainwindow.ui b/untitled/mainwindow.ui new file mode 100644 index 0000000..8fe2c68 --- /dev/null +++ b/untitled/mainwindow.ui @@ -0,0 +1,61 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + 250 + 100 + 401 + 371 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 210 + 180 + 80 + 25 + + + + PushButton + + + + + + + + 0 + 0 + 800 + 22 + + + + + + + + diff --git a/untitled/mainwindow_ui.py b/untitled/mainwindow_ui.py new file mode 100644 index 0000000..cc95a87 --- /dev/null +++ b/untitled/mainwindow_ui.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/bjoern/git/GeislingerProject/untitled/mainwindow.ui' +# +# Created by: PyQt5 UI code generator 5.15.11 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(800, 600) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.frame = QtWidgets.QFrame(self.centralwidget) + self.frame.setGeometry(QtCore.QRect(250, 100, 401, 371)) + self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame.setObjectName("frame") + self.pushButton = QtWidgets.QPushButton(self.frame) + self.pushButton.setGeometry(QtCore.QRect(210, 180, 80, 25)) + self.pushButton.setObjectName("pushButton") + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.pushButton.setText(_translate("MainWindow", "PushButton")) diff --git a/untitled/untitled.pro b/untitled/untitled.pro new file mode 100644 index 0000000..8d58fe5 --- /dev/null +++ b/untitled/untitled.pro @@ -0,0 +1,29 @@ +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +CONFIG += c++17 + +# You can make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + main.cpp \ + mainwindow.cpp + +HEADERS += \ + mainwindow.h + +FORMS += \ + mainwindow.ui + +TRANSLATIONS += \ + untitled_en_US.ts +CONFIG += lrelease +CONFIG += embed_translations + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target diff --git a/untitled/untitled_en_US.ts b/untitled/untitled_en_US.ts new file mode 100644 index 0000000..edd0d34 --- /dev/null +++ b/untitled/untitled_en_US.ts @@ -0,0 +1,3 @@ + + + diff --git a/vaapitest.py b/vaapitest.py new file mode 100644 index 0000000..c3eea25 --- /dev/null +++ b/vaapitest.py @@ -0,0 +1,43 @@ +import cv2 +import numpy as np +import subprocess + +# Define the FFmpeg command to read from the camera +ffmpeg_command = [ + 'ffmpeg', + '-f', 'v4l2', # Input format + '-i', '/dev/video0', # Camera device + '-f', 'rawvideo', # Output format + '-pix_fmt', 'bgr24', # Pixel format + '-an', # Disable audio + '-sn', # Disable subtitles + '-' +] + +# Start the FFmpeg process +process = subprocess.Popen(ffmpeg_command, stdout=subprocess.PIPE, bufsize=10**8) + +# Set the width and height for the camera resolution +width = 1920 +height = 1080 + +while True: + # Read a frame from the FFmpeg output + raw_frame = process.stdout.read(width * height * 3) # 3 bytes per pixel for BGR + if not raw_frame: + break # Exit the loop if no more frames + + # Convert the byte data to a numpy array and reshape it to an image + frame = np.frombuffer(raw_frame, np.uint8).reshape((height, width, 3)) + + # Display the frame using OpenCV + cv2.imshow('Camera Stream', frame) + + # Break the loop on 'q' key press + if cv2.waitKey(1) & 0xFF == ord('q'): + break + +# Clean up +process.stdout.close() +process.wait() +cv2.destroyAllWindows() diff --git a/wledControl.py b/wledControl.py new file mode 100644 index 0000000..4046e53 --- /dev/null +++ b/wledControl.py @@ -0,0 +1,90 @@ +import serial +import time + +class WLEDController: + def __init__(self, port: str, baud_rate: int = 115200, timeout: float = 1.0): + """ + Initialize the WLEDController. + + :param port: The serial port to which the ESP32 is connected (e.g., '/dev/ttyUSB0'). + :param baud_rate: The baud rate for the serial connection. + :param timeout: The timeout for serial communication in seconds. + """ + self.port = port + self.baud_rate = baud_rate + self.timeout = timeout + self.connection = None + + def connect(self): + """Establish the serial connection.""" + try: + self.connection = serial.Serial( + self.port, self.baud_rate, timeout=self.timeout + ) + print(f"Connected to {self.port}") + except serial.SerialException as e: + print(f"Failed to connect to {self.port}: {e}") + + def disconnect(self): + """Close the serial connection.""" + if self.connection and self.connection.is_open: + self.connection.close() + print(f"Disconnected from {self.port}") + + def send_command(self, command: str): + """ + Send a command to the WLED device. + + :param command: The JSON command string to send. + """ + if not self.connection or not self.connection.is_open: + raise ConnectionError("Serial connection is not open.") + try: + self.connection.write(command.encode('utf-8')) + print(f"Sent command: {command}") + except serial.SerialException as e: + print(f"Failed to send command: {e}") + + def switch_to_red(self): + """Switch the light to red.""" + self.send_command('{"ps":"1"}') + + def switch_to_yellow(self): + """Switch the light to yellow.""" + self.send_command('{"ps":"2"}') + + def switch_to_green(self): + """Switch the light to green.""" + self.send_command('{"ps":"3"}') + + def turn_off_all(self): + """Turn off all lights.""" + self.send_command('{"ps":"4"}') + + def change_effect(self): + """Change the color effect.""" + self.send_command('{"ps":"5"}') + +# Example usage: +if __name__ == "__main__": + controller = WLEDController(port="/dev/serial/by-path/pci-0000:00:14.0-usbv2-0:1:1.0-port0") + controller.connect() + + try: + controller.switch_to_red() + time.sleep(2) # Wait for 2 seconds + + controller.switch_to_yellow() + time.sleep(2) # Wait for 2 seconds + + controller.switch_to_green() + time.sleep(2) # Wait for 2 seconds + + controller.change_effect() + time.sleep(2) # Wait for 2 seconds + + controller.turn_off_all() + time.sleep(2) # Wait for 2 seconds + + finally: + controller.disconnect() \ No newline at end of file