Arquitetura do Modelo de Documento
O modelo de documento é a espinha dorsal da aplicação, representando o projeto inteiro do usuário como uma árvore hierárquica de objetos. É projetado para ser reativo, serializável e facilmente percorrível.
Visão Geral
A arquitetura é construída sobre o padrão de design Composite. Uma única
classe base abstrata, DocItem, define a interface comum para todos
os objetos que podem existir na árvore do documento (ex.: camadas, workpieces,
grupos). Isso permite que estruturas complexas e aninhadas sejam tratadas uniformemente.
Princípios principais do modelo incluem:
- Estrutura de Árvore: O objeto
Docserve como raiz da árvore. Cada item (exceto a raiz) tem um únicoparente pode ter múltiploschildren. - Reatividade: O modelo usa um sistema de signal/slot (
blinker). Quando um item é alterado, ele emite um sinal. Itens pai escutam os sinais de seus filhos e os "borbulham para cima" na árvore. Isso permite componentes de alto nível como oPipelineescutarem qualquer mudança no documento conectando-se a um único sinal no objetoDocraiz. O sistema rastreia tanto mudanças de conteúdo quanto mudanças de transformação separadamente para atualizações eficientes. - Hierarquia de Transformação: Cada
DocItemtem uma transformação localMatrix. A posição final, escala e rotação de um item no "mundo" (a tela principal) é o produto de sua própria matriz local e as matrizes mundiais de todos os seus ancestrais. - Desacoplamento de Dados: Os dados visuais ou brutos para um
WorkPiecenão são armazenados diretamente nele. Em vez disso, oWorkPiecemantém um UID que referencia um objetoImportSourceem um registro central noDoc. Isso desacopla a estrutura do documento do gerenciamento de dados, tornando o modelo mais leve e flexível.
Herança de Classes
Este diagrama mostra a hierarquia de classes. Todo objeto que faz parte da
árvore espacial do documento herda da classe base abstrata DocItem,
ganhando funcionalidades principais como parentesco, transformações e sinal
de borbulhamento.
DocItem: A fundação abstrata fornecendo a implementação do padrão composite.- Todas as outras classes são implementações concretas de
DocItem, cada uma com um papel especializado na estrutura do documento.
Composição de Objetos
Este diagrama ilustra como instâncias das classes são montadas para formar um documento completo. Mostra os relacionamentos pai-filho e referências entre objetos.
- Um
Docé o objeto de nível superior. Ele contém um ou maisLayers eStockItems. Ele também gerencia um registro de todos osImportSources no projeto. - Cada
Layercontém o conteúdo do usuário:WorkPieces eGroups. Crucialmente, umaLayertambém possui umWorkflow. - Um
Workflowcontém uma lista ordenada deSteps, que definem o processo de manufatura para aquela camada. - Um
Groupé um contêiner que pode conterWorkPieces e outrosGroups, permitindo transformações aninhadas. - Um
WorkPieceé um elemento de design fundamental. Ele não armazena seus dados brutos diretamente. Em vez disso, ele referencia umImportSourcevia um UID. Ele também tem sua própriaGeometry(dados vetoriais) e pode ter uma lista deTabs.
Descrições dos DocItems
-
DocItem(Abstrato)- Função: A base abstrata para todos os nós da árvore.
- Propriedades Principais:
uid,parent,children,matrix, sinalupdated, sinaltransform_changed. Fornece a lógica principal do padrão composite.
-
Doc- Função: A raiz da árvore do documento.
- Propriedades Principais:
children(Layers, StockItems),import_sources(um dicionário mapeando UIDs para objetosImportSource),active_layer.
-
Layer- Função: A unidade organizacional primária para conteúdo. Uma camada associa um grupo de workpieces a um único workflow de manufatura.
- Propriedades Principais:
children(WorkPieces, Groups, um Workflow),visible,stock_item_uid.
-
Group- Função: Um contêiner para outros
DocItems (WorkPiece,Group). Permite que uma coleção de itens seja transformada como uma única unidade.
- Função: Um contêiner para outros
-
WorkPiece- Função: Representa um único elemento de design tangível na tela (ex.: um SVG importado).
- Propriedades Principais:
vectors(um objetoGeometry),import_source_uid,tabs,tabs_enabled. Seusvectorssão normalizados para uma caixa 1x1, com todo escalonamento e posicionamento tratados por sua matriz de transformaçãomatrix.
-
Workflow- Função: Uma sequência ordenada de instruções de processamento. Possuído por uma
Layer. - Propriedades Principais:
children(uma lista ordenada deSteps).
- Função: Uma sequência ordenada de instruções de processamento. Possuído por uma
-
Step- Função: Uma única instrução de processamento dentro de um
Workflow(ex., "Corte de Contorno" ou "Gravação Raster"). É um objeto de configuração contendo dicionários que definem o produtor, modificadores e transformadores a serem usados.
- Função: Uma única instrução de processamento dentro de um
-
StockItem- Função: Representa uma peça de material físico no documento,
definida por sua própria
geometryvetorial.Layers podem ser atribuídas a um item de estoque específico.
- Função: Representa uma peça de material físico no documento,
definida por sua própria