# razorcx/drawing-manager architecture

> Architecture diagram of the GitHub repository razorcx/drawing-manager, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/razorcx/drawing-manager
- Repository: https://github.com/razorcx/drawing-manager

## Overview

DrawingsManager is a Windows Forms companion for Tekla Structures drawings. Users refresh a drawing list, inspect status and marks, select model objects, produce BOM/revision details, and open drawings by assembly or part mark. The form also registers model-selection and change events. Drawing-type managers look up drawings and activate them through a shared base class. The excerpts support these main calls, but do not show the full event behavior or all UI actions; those connections are omitted where unverified.

Main entry points: [`DrawingsManager/DrawingManagerForm.cs`](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerForm.cs) (Drawing manager UI), [`DrawingsManager/SingleDrawingManager.cs`](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/SingleDrawingManager.cs) (Single drawing access), [`DrawingsManager/AssemblyDrawingManager.cs`](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/AssemblyDrawingManager.cs) (Assembly drawing access), [`DrawingsManager/DrawingManagerBase.cs`](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerBase.cs) (Drawing access base)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application UI"]
  node_startup["App startup<br/>[Program.cs]"]
  node_form["Drawing manager UI"]
  node_listing["Drawing listing"]
  node_selection["Model selection"]
  node_bom["BOM and revision"]
  node_events["Model events"]
  node_extensions["Enumeration and JSON helpers"]
end

subgraph group_drawing["Drawing access"]
  node_single["Single drawing access"]
  node_assembly["Assembly drawing access"]
  node_base["Drawing access base"]
end

subgraph group_model["Tekla model"]
  node_tekla{{"Tekla Structures"}}
end

node_user(("User"))

node_user -->|"launches"| node_startup
node_startup -->|"starts"| node_form
node_user -->|"uses"| node_form
node_form -->|"refreshes"| node_listing
node_form -->|"loads drawings"| node_tekla
node_form -->|"selects objects"| node_selection
node_form -->|"builds details"| node_bom
node_form -->|"registers events"| node_events
node_form -->|"opens part drawing"| node_single
node_form -->|"opens assembly drawing"| node_assembly
node_single -->|"inherits access"| node_base
node_assembly -->|"inherits access"| node_base
node_base -->|"gets drawings"| node_tekla
node_single -->|"looks up parts"| node_tekla
node_assembly -->|"looks up assemblies"| node_tekla
node_form -->|"serializes parts"| node_extensions

click node_startup "https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/Program.cs"
click node_form "https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerForm.cs"
click node_listing "https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerForm.cs"
click node_selection "https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerForm.cs"
click node_bom "https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerForm.cs"
click node_events "https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerForm.cs"
click node_single "https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/SingleDrawingManager.cs"
click node_assembly "https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/AssemblyDrawingManager.cs"
click node_base "https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerBase.cs"
click node_extensions "https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/ExtensionMethods.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_startup,node_form,node_listing,node_selection,node_bom,node_events,node_extensions,node_user toneBlue
class node_single,node_assembly,node_base toneAmber
class node_tekla toneMint
```

## Components

### Application UI

- [App startup](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/Program.cs): `DrawingsManager/Program.cs`
- [Drawing manager UI](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerForm.cs): `DrawingsManager/DrawingManagerForm.cs`
- [Drawing listing](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerForm.cs): `DrawingsManager/DrawingManagerForm.cs`
- [Model selection](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerForm.cs): `DrawingsManager/DrawingManagerForm.cs`
- [BOM and revision](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerForm.cs): `DrawingsManager/DrawingManagerForm.cs`
- [Model events](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerForm.cs): `DrawingsManager/DrawingManagerForm.cs`
- [Enumeration and JSON helpers](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/ExtensionMethods.cs): `DrawingsManager/ExtensionMethods.cs`

### Drawing access

- [Single drawing access](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/SingleDrawingManager.cs): `DrawingsManager/SingleDrawingManager.cs`
- [Assembly drawing access](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/AssemblyDrawingManager.cs): `DrawingsManager/AssemblyDrawingManager.cs`
- [Drawing access base](https://github.com/razorcx/drawing-manager/blob/master/DrawingsManager/DrawingManagerBase.cs): `DrawingsManager/DrawingManagerBase.cs`

### Tekla model

- **Tekla Structures**

### Other components

- **User**

## Connections

- User → App startup: launches
- App startup → Drawing manager UI: starts (evidence: `DrawingsManager/Program.cs`)
- User → Drawing manager UI: uses
- Drawing manager UI → Drawing listing: refreshes (evidence: `DrawingsManager/DrawingManagerForm.cs`)
- Drawing manager UI → Tekla Structures: loads drawings (evidence: `DrawingsManager/DrawingManagerForm.cs`)
- Drawing manager UI → Model selection: selects objects (evidence: `DrawingsManager/DrawingManagerForm.cs`)
- Drawing manager UI → BOM and revision: builds details (evidence: `DrawingsManager/DrawingManagerForm.cs`)
- Drawing manager UI → Model events: registers events (evidence: `DrawingsManager/DrawingManagerForm.cs`)
- Drawing manager UI → Single drawing access: opens part drawing (evidence: `DrawingsManager/DrawingManagerForm.cs`)
- Drawing manager UI → Assembly drawing access: opens assembly drawing (evidence: `DrawingsManager/DrawingManagerForm.cs`)
- Single drawing access → Drawing access base: inherits access (evidence: `DrawingsManager/SingleDrawingManager.cs`)
- Assembly drawing access → Drawing access base: inherits access (evidence: `DrawingsManager/AssemblyDrawingManager.cs`)
- Drawing access base → Tekla Structures: gets drawings (evidence: `DrawingsManager/DrawingManagerBase.cs`)
- Single drawing access → Tekla Structures: looks up parts (evidence: `DrawingsManager/SingleDrawingManager.cs`)
- Assembly drawing access → Tekla Structures: looks up assemblies (evidence: `DrawingsManager/AssemblyDrawingManager.cs`)
- Drawing manager UI → Enumeration and JSON helpers: serializes parts (evidence: `DrawingsManager/DrawingManagerForm.cs`)
