2026-02-21 14:34:00 +00:00
|
|
|
import traceback
|
|
|
|
|
|
|
|
|
|
import cv2
|
|
|
|
|
from PySide6.QtCore import QObject, QRunnable, QThreadPool, Signal
|
|
|
|
|
from PySide6.QtGui import QImage
|
|
|
|
|
from PySide6.QtWidgets import QMessageBox
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# DetectionTaskSignals: class definition for ScanSlicer behavior.
|
2026-02-21 14:48:53 +00:00
|
|
|
class DetectionTaskSignals(QObject):
|
|
|
|
|
status = Signal(str)
|
|
|
|
|
finished = Signal(object, object, object)
|
|
|
|
|
failed = Signal(str)
|
2026-02-21 15:14:12 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
# DetectionTask: class definition for ScanSlicer behavior.
|
|
|
|
|
class DetectionTask(QRunnable):
|
|
|
|
|
# __init__: function definition for ScanSlicer behavior.
|
|
|
|
|
def __init__(self, autoslicer):
|
|
|
|
|
super().__init__()
|
|
|
|
|
self.autoslicer = autoslicer
|
|
|
|
|
self.signals = DetectionTaskSignals()
|
|
|
|
|
|
|
|
|
|
# run: function definition for ScanSlicer behavior.
|
|
|
|
|
def run(self):
|
|
|
|
|
try:
|
|
|
|
|
boxes, filter_preview_image = self.autoslicer.autodetect_slices(
|
|
|
|
|
self.signals.status.emit,
|
|
|
|
|
preview_filter_output=True,
|
|
|
|
|
)
|
|
|
|
|
normal_preview_image = cv2.cvtColor(self.autoslicer.image, cv2.COLOR_BGR2RGB)
|
|
|
|
|
self.signals.finished.emit(boxes, filter_preview_image, normal_preview_image)
|
|
|
|
|
except Exception as exc:
|
|
|
|
|
details = f"{exc}\n\n{traceback.format_exc()}"
|
|
|
|
|
self.signals.failed.emit(details)
|
2026-02-21 15:22:24 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
# AutotuneTaskSignals: class definition for ScanSlicer behavior.
|
|
|
|
|
class AutotuneTaskSignals(QObject):
|
|
|
|
|
status = Signal(str)
|
|
|
|
|
finished = Signal(object)
|
|
|
|
|
failed = Signal(str)
|
2026-02-21 15:42:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
# AutotuneTask: class definition for ScanSlicer behavior.
|
|
|
|
|
class AutotuneTask(QRunnable):
|
|
|
|
|
# __init__: function definition for ScanSlicer behavior.
|
|
|
|
|
def __init__(self, autoslicer, profile_name):
|
|
|
|
|
super().__init__()
|
|
|
|
|
self.autoslicer = autoslicer
|
|
|
|
|
self.profile_name = profile_name
|
|
|
|
|
self.signals = AutotuneTaskSignals()
|
|
|
|
|
|
|
|
|
|
# run: function definition for ScanSlicer behavior.
|
|
|
|
|
def run(self):
|
|
|
|
|
try:
|
|
|
|
|
result = self.autoslicer.autotune_for_current_image(
|
|
|
|
|
self.signals.status.emit,
|
|
|
|
|
profile_name=self.profile_name,
|
|
|
|
|
)
|
|
|
|
|
self.signals.finished.emit(result)
|
|
|
|
|
except Exception as exc:
|
|
|
|
|
details = f"{exc}\n\n{traceback.format_exc()}"
|
|
|
|
|
self.signals.failed.emit(details)
|