Arquitectura del Modelo de Documento
El modelo de documento es la columna vertebral de la aplicación, representando todo el proyecto del usuario como un árbol jerárquico de objetos. Está diseñado para ser reactivo, serializable y fácilmente recorrible.
Resumen
La arquitectura está construida sobre el patrón de diseño Composite. Una sola clase base abstracta, DocItem, define la interfaz común para todos los objetos que pueden existir en el árbol del documento (ej., capas, workpieces, grupos). Esto permite que estructuras complejas y anidadas sean tratadas uniformemente.
Los principios clave del modelo incluyen:
- Estructura de Árbol: El objeto
Docsirve como raíz del árbol. Cada elemento (excepto la raíz) tiene un soloparenty puede tener múltipleschildren. - Reactividad: El modelo usa un sistema de señal/slot (
blinker). Cuando un elemento cambia, emite una señal. Los elementos padres escuchan las señales de sus hijos y las "propagan hacia arriba" en el árbol. Esto permite que componentes de alto nivel como elPipelineescuchen cualquier cambio en el documento conectándose a una sola señal en el objeto raízDoc. El sistema rastrea tanto cambios de contenido como cambios de transformación separadamente para actualizaciones eficientes. - Jerarquía de Transformación: Cada
DocItemtiene unaMatrixde transformación local. La posición final, escala y rotación de un elemento en el "mundo" (el lienzo principal) es el producto de su propia matriz local y las matrices mundo de todos sus ancestros. - Desacoplamiento de Datos: Los datos visuales o crudos para un
WorkPieceno se almacenan directamente dentro de él. En su lugar, elWorkPiececontiene un UID que referencia un objetoImportSourceen un registro central en elDoc. Esto desacopla la estructura del documento de la gestión de datos, haciendo el modelo más ligero y flexible.
Herencia de Clases
Este diagrama muestra la jerarquía de clases. Cada objeto que es parte del árbol espacial del documento hereda de la clase base abstracta DocItem, ganando funcionalidades core como parentesco, transformaciones y propagación de señales.
DocItem: La fundación abstracta que proporciona la implementación del patrón composite.- Todas las otras clases son implementaciones concretas de
DocItem, cada una con un rol especializado en la estructura del documento.
Composición de Objetos
Este diagrama ilustra cómo las instancias de las clases se ensamblan para formar un documento completo. Muestra las relaciones padre-hijo y referencias entre objetos.
- Un
Doces el objeto de nivel superior. Contiene uno o másLayers yStockItems. También gestiona un registro de todos losImportSources en el proyecto. - Cada
Layercontiene el contenido del usuario:WorkPieces yGroups. Crucialmente, unLayertambién posee unoWorkflow. - Un
Workflowcontiene una lista ordenada deSteps, que definen el proceso de manufactura para esa capa. - Un
Groupes un contenedor que puede contenerWorkPieces y otrosGroups, permitiendo transformaciones anidadas. - Un
WorkPiecees un elemento de diseño fundamental. No almacena sus datos crudos directamente. En su lugar, referencia unImportSourcevia un UID. También tiene su propiaGeometry(datos vectoriales) y puede tener una lista deTabs.
Descripciones de DocItem
-
DocItem(Abstracto)- Rol: La base abstracta para todos los nodos del árbol.
- Propiedades Clave:
uid,parent,children,matrix, señalupdated, señaltransform_changed. Proporciona la lógica core del patrón composite.
-
Doc- Rol: La raíz del árbol del documento.
- Propiedades Clave:
children(Layers, StockItems),import_sources(un diccionario mapeando UIDs a objetosImportSource),active_layer.
-
Layer- Rol: La unidad organizacional principal para contenido. Una capa asocia un grupo de workpieces con un solo flujo de trabajo de manufactura.
- Propiedades Clave:
children(WorkPieces, Groups, un Workflow),visible,stock_item_uid.
-
Group- Rol: Un contenedor para otros
DocItems (WorkPiece,Group). Permite que una colección de elementos sea transformada como una sola unidad.
- Rol: Un contenedor para otros
-
WorkPiece- Rol: Representa un solo elemento de diseño tangible en el lienzo (ej., un SVG importado).
- Propiedades Clave:
vectors(un objetoGeometry),import_source_uid,tabs,tabs_enabled. Susvectorsestán normalizados a una caja de 1x1, con todo el escalado y posicionamiento manejado por sumatrixde transformación.
-
Workflow- Rol: Una secuencia ordenada de instrucciones de procesamiento. Propiedad de un
Layer. - Propiedades Clave:
children(una lista ordenada deSteps).
- Rol: Una secuencia ordenada de instrucciones de procesamiento. Propiedad de un
-
Step- Rol: Una sola instrucción de procesamiento dentro de un
Workflow(ej., "Corte de Contorno" o "Grabado Raster"). Es un objeto de configuración que contiene diccionarios que definen el productor, modificadores y transformadores a usar.
- Rol: Una sola instrucción de procesamiento dentro de un
-
StockItem- Rol: Representa una pieza de material físico en el documento, definida por su propia
geometryvectorial. LosLayers pueden asignarse a un item de stock específico.
- Rol: Representa una pieza de material físico en el documento, definida por su propia