plano3d/app/procesado.py

34 lines
1.1 KiB
Python
Raw Normal View History

"""Ejecución del motor en segundo plano.
El motor puede tardar varios segundos en reconstruir una pieza. Si se llamara desde el hilo
de la interfaz, la ventana se quedaría congelada mientras tanto, así que se ejecuta en un
QThread y el resultado vuelve a la ventana mediante señales.
"""
from __future__ import annotations
from pathlib import Path
from PySide6.QtCore import QThread, Signal
from motor.api import Opciones, procesar
class HiloProcesado(QThread):
"""Procesa un plano con motor.api.procesar sin bloquear la interfaz."""
terminado = Signal(object) # motor.api.Resultado
fallido = Signal(str) # mensaje de error para el usuario
def __init__(self, ruta: Path, opciones: Opciones | None = None, parent=None):
super().__init__(parent)
self.ruta = ruta
self.opciones = opciones or Opciones()
def run(self) -> None:
try:
resultado = procesar(self.ruta, self.opciones)
except Exception as error: # cualquier fallo del motor se muestra al usuario
self.fallido.emit(f"{type(error).__name__}: {error}")
else:
self.terminado.emit(resultado)