# bogdanmari/relevel architecture

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

- Interactive diagram: https://gitdiagram.com/bogdanmari/relevel
- Repository: https://github.com/bogdanmari/relevel

## Overview

ReLevel is a Revit add-in for managing elements and views across building levels. Its main workflow loads level-linked model data into the dockable workspace, lets users select levels and elements, then transfers or distributes elements, fills a parameter with a level name, or recreates views; operations report results and can be undone. Separate workspace modes provide color-by-level, deletion, comparison, and debugging/inspection. The excerpts show key transfer, distribution, fill, and view-recreation behavior; some workspace wiring and additional capabilities are documented only in the README, so those links are cited there.

Main entry points: [`src/ReLevel.Revit/UI/WorkspaceController.cs`](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/UI/WorkspaceController.cs) (Workspace controller), [`src/ReLevel.Revit/Transfer/ElementTransferService.cs`](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ElementTransferService.cs) (Element transfer), [`src/ReLevel.Revit/Transfer/ViewRecreationService.cs`](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ViewRecreationService.cs) (View recreation), [`src/ReLevel.Revit/Transfer/DistributionService.cs`](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/DistributionService.cs) (Element distribution)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workspace["Workspace and analysis"]
  node_command["Add-in command<br/>[ReLevelCommand.cs]"]
  node_dock["Dockable workspace"]
  node_controller["Workspace controller"]
  node_analysis["Model analysis"]
  node_level_table["Level workspace<br/>[WorkspaceLevel.cs]"]
  node_color["Level graphics"]
  node_transfer_ui["Transfer panel<br/>[TransferPanel.cs]"]
  node_compare["Level comparison<br/>[LevelComparison.cs]"]
end

subgraph group_element_ops["Element operations"]
  node_element_index["Element index"]
  node_transfer["Element transfer"]
  node_case_registry["Transfer cases<br/>[TransferCases.cs]"]
  node_case_impl["Case implementations<br/>[Transfer]"]
  node_distribution["Element distribution"]
  node_fill["Fill level"]
  node_delete["Delete operations<br/>[DeleteService.cs]"]
  node_results["Operation results"]
end

subgraph group_view_ops["View operations"]
  node_view_recreate["View recreation"]
  node_view_support["View recreation support"]
  node_view_log["View operation log"]
end

subgraph group_support["Inspection and compatibility"]
  node_inspector["Element inspection"]
  node_ids["Element ID compatibility<br/>[ElementIds.cs]"]
  node_geometry["Geometry snapshot"]
end

node_user(("Revit user"))
node_revit["Revit model"]

node_user -.->|"invokes"| node_command
node_command -.->|"opens"| node_dock
node_dock -.->|"dispatches actions"| node_controller
node_controller -->|"loads model"| node_analysis
node_analysis -.->|"analyzes levels"| node_element_index
node_controller -->|"refreshes"| node_element_index
node_controller -->|"updates panel"| node_transfer_ui
node_user -.->|"selects levels"| node_level_table
node_level_table -.->|"requests actions"| node_controller
node_controller -->|"distributes elements"| node_distribution
node_distribution -->|"executes transfers"| node_transfer
node_transfer -->|"finds case"| node_case_registry
node_distribution -->|"finds case"| node_case_registry
node_case_registry -->|"selects implementation"| node_case_impl
node_transfer -->|"changes elements"| node_revit
node_controller -->|"fills level parameter"| node_fill
node_fill -->|"writes parameter"| node_revit
node_controller -.->|"deletes elements or views"| node_delete
node_delete -->|"deletes with checks"| node_revit
node_controller -.->|"recreates views"| node_view_recreate
node_view_recreate -->|"uses support"| node_view_support
node_view_recreate -->|"records operations"| node_view_log
node_view_recreate -->|"creates views"| node_revit
node_controller -->|"colorizes levels"| node_color
node_color -.->|"updates graphics"| node_revit
node_user -.->|"loads TSV"| node_compare
node_user -.->|"inspects element"| node_inspector
node_transfer -->|"returns report"| node_results
node_controller -->|"shows report"| node_results
node_transfer -.->|"reads element IDs"| node_ids
node_geometry -.->|"captures geometry"| node_revit

click node_command "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/ReLevelCommand.cs"
click node_dock "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/UI/DockableWorkspace.cs"
click node_controller "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/UI/WorkspaceController.cs"
click node_analysis "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/UI/ModelAnalysisLoader.cs"
click node_level_table "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/UI/Workspace/WorkspaceLevel.cs"
click node_color "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/LevelViewGraphics.cs"
click node_transfer_ui "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/UI/TransferPanel.cs"
click node_element_index "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ModelElementIndex.cs"
click node_transfer "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ElementTransferService.cs"
click node_case_registry "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/TransferCases.cs"
click node_case_impl "https://github.com/bogdanmari/relevel/tree/main/src/ReLevel.Revit/Transfer"
click node_distribution "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/DistributionService.cs"
click node_fill "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/FillLevelService.cs"
click node_delete "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/DeleteService.cs"
click node_results "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Logic/ElementTransferReport.cs"
click node_view_recreate "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ViewRecreationService.cs"
click node_view_support "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ViewRecreationSupport.cs"
click node_view_log "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ViewOperationLog.cs"
click node_compare "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Logic/LevelComparison.cs"
click node_inspector "https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Inspection/ElementInspectionReport.cs"
click node_ids "https://github.com/bogdanmari/relevel/blob/main/legacy/src/ReLevel.Revit/Compatibility/ElementIds.cs"
click node_geometry "https://github.com/bogdanmari/relevel/blob/main/legacy/src/ReLevel.Revit/Transfer/GeometrySnapshot.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_command,node_dock,node_controller,node_analysis,node_level_table,node_color,node_transfer_ui,node_compare,node_user toneBlue
class node_element_index,node_transfer,node_case_registry,node_case_impl,node_distribution,node_fill,node_delete,node_results toneAmber
class node_view_recreate,node_view_support,node_view_log toneMint
class node_inspector,node_ids,node_geometry toneRose
class node_revit toneIndigo
```

## Components

### Workspace and analysis

- [Add-in command](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/ReLevelCommand.cs): `src/ReLevel.Revit/ReLevelCommand.cs`
- [Dockable workspace](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/UI/DockableWorkspace.cs): `src/ReLevel.Revit/UI/DockableWorkspace.cs`
- [Workspace controller](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/UI/WorkspaceController.cs): `src/ReLevel.Revit/UI/WorkspaceController.cs`
- [Model analysis](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/UI/ModelAnalysisLoader.cs): `src/ReLevel.Revit/UI/ModelAnalysisLoader.cs`
- [Level workspace](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/UI/Workspace/WorkspaceLevel.cs): `src/ReLevel.Revit/UI/Workspace/WorkspaceLevel.cs`
- [Level graphics](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/LevelViewGraphics.cs): `src/ReLevel.Revit/Transfer/LevelViewGraphics.cs`
- [Transfer panel](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/UI/TransferPanel.cs): `src/ReLevel.Revit/UI/TransferPanel.cs`
- [Level comparison](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Logic/LevelComparison.cs): `src/ReLevel.Revit/Logic/LevelComparison.cs`

### Element operations

- [Element index](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ModelElementIndex.cs): `src/ReLevel.Revit/Transfer/ModelElementIndex.cs`
- [Element transfer](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ElementTransferService.cs): `src/ReLevel.Revit/Transfer/ElementTransferService.cs`
- [Transfer cases](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/TransferCases.cs): `src/ReLevel.Revit/Transfer/TransferCases.cs`
- [Case implementations](https://github.com/bogdanmari/relevel/tree/main/src/ReLevel.Revit/Transfer): `src/ReLevel.Revit/Transfer`
- [Element distribution](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/DistributionService.cs): `src/ReLevel.Revit/Transfer/DistributionService.cs`
- [Fill level](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/FillLevelService.cs): `src/ReLevel.Revit/Transfer/FillLevelService.cs`
- [Delete operations](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/DeleteService.cs): `src/ReLevel.Revit/Transfer/DeleteService.cs`
- [Operation results](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Logic/ElementTransferReport.cs): `src/ReLevel.Revit/Logic/ElementTransferReport.cs`

### View operations

- [View recreation](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ViewRecreationService.cs): `src/ReLevel.Revit/Transfer/ViewRecreationService.cs`
- [View recreation support](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ViewRecreationSupport.cs): `src/ReLevel.Revit/Transfer/ViewRecreationSupport.cs`
- [View operation log](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Transfer/ViewOperationLog.cs): `src/ReLevel.Revit/Transfer/ViewOperationLog.cs`

### Inspection and compatibility

- [Element inspection](https://github.com/bogdanmari/relevel/blob/main/src/ReLevel.Revit/Inspection/ElementInspectionReport.cs): `src/ReLevel.Revit/Inspection/ElementInspectionReport.cs`
- [Element ID compatibility](https://github.com/bogdanmari/relevel/blob/main/legacy/src/ReLevel.Revit/Compatibility/ElementIds.cs): `legacy/src/ReLevel.Revit/Compatibility/ElementIds.cs`
- [Geometry snapshot](https://github.com/bogdanmari/relevel/blob/main/legacy/src/ReLevel.Revit/Transfer/GeometrySnapshot.cs): `legacy/src/ReLevel.Revit/Transfer/GeometrySnapshot.cs`

### Other components

- **Revit user**
- **Revit model**

## Connections

- Revit user → Add-in command: invokes
- Add-in command → Dockable workspace: opens
- Dockable workspace → Workspace controller: dispatches actions
- Workspace controller → Model analysis: loads model (evidence: `src/ReLevel.Revit/UI/WorkspaceController.cs`)
- Model analysis → Element index: analyzes levels
- Workspace controller → Element index: refreshes (evidence: `src/ReLevel.Revit/UI/WorkspaceController.cs`)
- Workspace controller → Transfer panel: updates panel (evidence: `src/ReLevel.Revit/UI/WorkspaceController.cs`)
- Revit user → Level workspace: selects levels
- Level workspace → Workspace controller: requests actions (evidence: `src/ReLevel.Revit/UI/WorkspaceController.cs`)
- Workspace controller → Element distribution: distributes elements (evidence: `src/ReLevel.Revit/UI/WorkspaceController.cs`)
- Element distribution → Element transfer: executes transfers (evidence: `src/ReLevel.Revit/Transfer/DistributionService.cs`)
- Element transfer → Transfer cases: finds case (evidence: `src/ReLevel.Revit/Transfer/ElementTransferService.cs`)
- Element distribution → Transfer cases: finds case (evidence: `src/ReLevel.Revit/Transfer/DistributionService.cs`)
- Transfer cases → Case implementations: selects implementation (evidence: `src/ReLevel.Revit/Transfer/TransferCases.cs`)
- Element transfer → Revit model: changes elements (evidence: `src/ReLevel.Revit/Transfer/ElementTransferService.cs`)
- Workspace controller → Fill level: fills level parameter (evidence: `src/ReLevel.Revit/UI/WorkspaceController.cs`)
- Fill level → Revit model: writes parameter (evidence: `src/ReLevel.Revit/Transfer/FillLevelService.cs`)
- Workspace controller → Delete operations: deletes elements or views
- Delete operations → Revit model: deletes with checks (evidence: `src/ReLevel.Revit/Transfer/DeleteService.cs`)
- Workspace controller → View recreation: recreates views
- View recreation → View recreation support: uses support (evidence: `src/ReLevel.Revit/Transfer/ViewRecreationService.cs`)
- View recreation → View operation log: records operations (evidence: `src/ReLevel.Revit/Transfer/ViewRecreationService.cs`)
- View recreation → Revit model: creates views (evidence: `src/ReLevel.Revit/Transfer/ViewRecreationService.cs`)
- Workspace controller → Level graphics: colorizes levels (evidence: `src/ReLevel.Revit/UI/WorkspaceController.cs`)
- Level graphics → Revit model: updates graphics
- Revit user → Level comparison: loads TSV
- Revit user → Element inspection: inspects element
- Element transfer → Operation results: returns report (evidence: `src/ReLevel.Revit/Transfer/ElementTransferService.cs`)
- Workspace controller → Operation results: shows report (evidence: `src/ReLevel.Revit/UI/WorkspaceController.cs`)
- Element transfer → Element ID compatibility: reads element IDs
- Geometry snapshot → Revit model: captures geometry
