Перейти до основного вмісту

Архітектура моделі документа

Модель документа - це хребет додатку, що представляє весь проект користувача як ієрархічне дерево об'єктів. Вона розроблена щоб бути реактивною, серіалізованою та легко прохідною.

Огляд​

Архітектура побудована на Патерні Composite. Один абстрактний базовий клас, DocItem, визначає загальний інтерфейс для всіх об'єктів, які можуть існувати в дереві документа (наприклад, шари, деталі, групи). Це дозволяє складним, вкладеним структурам оброблятися однорідно.

Ключові принципи моделі включають:

  • Структура дерева: Об'єкт Doc служить коренем дерева. Кожен елемент (окрім кореня) має одного parent і може мати кілька children.
  • Реактивність: Модель використовує систему сигналів/слотів (blinker). Коли елемент змінюється, він видає сигнал. Батьківські елементи слухають сигнали своїх нащадків і "піднімають їх вгору" по дереву. Це дозволяє високорівневим компонентам, як Pipeline, слухати будь-яку зміну в документі, підключаючись до одного сигналу на кореневому об'єкті Doc. Система відстежує як зміни вмісту, так і зміни трансформації окремо для ефективних оновлень.
  • Ієрархія трансформацій: Кожен DocItem має локальну трансформацію Matrix. Кінцева позиція, масштаб та обертання елемента у "світі" (головне полотно) є добутком його власної локальної матриці та світових матриць всіх його предків.
  • Роз'єднання даних: Візуальні або сирі дані для WorkPiece не зберігаються безпосередньо в ньому. Замість цього WorkPiece містить UID, що посилається на об'єкт ImportSource у центральному реєстрі на Doc. Це роз'єднує структуру документа від керування даними, роблячи модель більш легкою та гнучкою.

Успадкування класів​

Ця діаграма показує ієрархію класів. Кожен об'єкт, що є частиною просторового дерева документа, успадковується від абстрактного базового класу DocItem, отримуючи основні функціональності як батьківство, трансформації та спливання сигналів.

  • DocItem: Абстрактний фундамент, що забезпечує реалізацію патерну composite.
  • Всі інші класи є конкретними реалізаціями DocItem, кожен з спеціалізованою роллю в структурі документа.

Композиція об'єктів​

Ця діаграма ілюструє, як екземпляри класів збираються щоб сформувати повний документ. Вона показує батьківсько-дочірні відносини та посилання між об'єктами.

  • Doc - це об'єкт верхнього рівня. Він містить один або кілька Layer та StockItem. Він також керує реєстром всіх ImportSource у проекті.
  • Кожен Layer містить контент користувача: WorkPiece та Group. Важливо, Layer також володіє одним Workflow.
  • Workflow містить впорядкований список Step, які визначають виробничий процес для цього шару.
  • Group - це контейнер, який може містити WorkPiece та інші Group, дозволяючи вкладені трансформації.
  • WorkPiece - це фундаментальний елемент дизайну. Він не зберігає свої сирі дані безпосередньо. Замість цього він посилається на ImportSource через UID. Він також має власну Geometry (векторні дані) і може мати список Tab.

Описи DocItem​

  • DocItem (Абстрактний)

    • Роль: Абстрактна база для всіх вузлів дерева.
    • Ключові властивості: uid, parent, children, matrix, updated сигнал, transform_changed сигнал. Надає основну логіку патерну composite.
  • Doc

    • Роль: Корінь дерева документа.
    • Ключові властивості: children (Layers, StockItems), import_sources (словник, що відображає UID на об'єкти ImportSource), active_layer.
  • Layer

    • Роль: Первинна організаційна одиниця для контенту. Шар асоціює групу деталей з одним виробничим робочим процесом.
    • Ключові властивості: children (WorkPieces, Groups, one Workflow), visible.
  • Group

    • Роль: Контейнер для інших DocItem (WorkPiece, Group). Дозволяє колекції елементів трансформуватися як єдине ціле.
  • WorkPiece

    • Роль: Представляє окремий, матеріальний елемент дизайну на полотні (наприклад, імпортований SVG).
    • Ключові властивості: vectors (об'єкт Geometry), import_source_uid, tabs, tabs_enabled. Його vectors нормалізовані до блоку 1x1, з усім масштабуванням та позиціонуванням, що обробляється його матрицею трансформації.
  • Workflow

    • Роль: Впорядкована послідовність інструкцій обробки. Належить Layer.
    • Ключові властивості: children (впорядкований список Step).
  • Step

    • Роль: Окрема інструкція обробки в Workflow (наприклад, "Contour Cut" або "Raster Engrave"). Це об'єкт конфігурації, що містить словники, які визначають продюсер, модифікатори та трансформери для використання.
  • StockItem

    • Роль: Представляє шматок фізичного матеріалу в документі, визначений його векторною geometry. StockItems є елементами рівня документа (дочірні елементи Doc, поряд з Layer) і існують незалежно від шарів.