# letsconstructit/grasshopper-tekladrawinglink architecture

> Architecture diagram of the GitHub repository letsconstructit/grasshopper-tekladrawinglink, 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/letsconstructit/grasshopper-tekladrawinglink
- Repository: https://github.com/letsconstructit/grasshopper-tekladrawinglink

## Overview

Grasshopper-Tekla Drawing Link is a Grasshopper plugin for interacting with Tekla drawings, their views and objects, and related model data. Users supply Grasshopper inputs to drawing/model components, which create, query, modify, or export Tekla objects; drawing objects can also be mapped to model counterparts. The README documents the broad component families, while sampled source confirms parameter picking and shared object-creation behavior. The desktop UI and startup support are included as an internal layer. Several domain links are documented rather than visible in the sampled component implementations.

Main entry points: [`src/GrasshopperTeklaDrawingLink/Components/TeklaComponentBaseNew.cs`](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Components/TeklaComponentBaseNew.cs) (Component base new), [`src/DrawingLink.UI/App.xaml.cs`](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/DrawingLink.UI/App.xaml.cs) (UI startup), [`src/GrasshopperTeklaDrawingLink/Tools/DrawingInteractor.cs`](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/DrawingInteractor.cs) (Drawing interactor), [`src/GrasshopperTeklaDrawingLink/Types/TeklaDatabaseObjectParam.cs`](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Types/TeklaDatabaseObjectParam.cs) (Grasshopper parameters)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["Grasshopper Interface"]
  node_component_base["Component base"]
  node_component_base_new["Component base new"]
  node_parameter_types["Grasshopper parameters"]
  node_param_infos["Parameter definitions<br/>[ParamInfos.cs]"]
  node_attributes["Object attributes<br/>[Attributes.cs]"]
end

subgraph group_drawings["Drawing Management"]
  node_drawing_components["Drawing operations"]
  node_drawing_lists["Drawing lists"]
  node_drawing_creation["Drawing creation"]
end

subgraph group_objects["Drawing Objects"]
  node_annotation_components["Annotations and marks"]
  node_modify_components["Object modification"]
  node_parts_components["Drawing parts"]
  node_export_components["Exports and reports"]
  node_uda_components["Drawing UDAs"]
end

subgraph group_views["Views and Geometry"]
  node_view_components["View operations"]
  node_geometry_components["Geometry queries"]
end

subgraph group_runtime["Runtime and UI"]
  node_drawing_interactor["Drawing interactor"]
  node_model_interactor["Model interactor<br/>[ModelInteractor.cs]"]
  node_component_infos["Component metadata<br/>[ComponentInfos.cs]"]
  node_enum_helpers["Enum helpers<br/>[EnumHelpers.cs]"]
  node_version_constants["Version constants"]
  node_ui_app["UI startup<br/>[App.xaml.cs]"]
  node_startup_controller["Startup modes"]
  node_main_window_vm["Main window view model"]
  node_user_form_data["User form data<br/>[UserFormData.cs]"]
  node_ui_extensions["UI extensions<br/>[Extensions.cs]"]
end

node_gh_user(("Grasshopper user"))
node_tekla["Tekla"]

node_gh_user -.->|"uses components"| node_component_base
node_gh_user -.->|"uses components"| node_component_base_new
node_component_base_new -->|"creates and deletes"| node_drawing_interactor
node_parameter_types -->|"picks objects"| node_drawing_interactor
node_component_base_new -->|"defines menus"| node_param_infos
node_drawing_components -.->|"manages drawings"| node_tekla
node_drawing_lists -.->|"queries drawings"| node_tekla
node_drawing_creation -.->|"creates drawings"| node_tekla
node_view_components -.->|"creates and queries"| node_tekla
node_geometry_components -.->|"queries geometry"| node_tekla
node_annotation_components -.->|"creates annotations"| node_tekla
node_modify_components -.->|"modifies objects"| node_tekla
node_parts_components -.->|"maps parts"| node_tekla
node_export_components -.->|"exports data"| node_tekla
node_uda_components -.->|"reads and writes"| node_tekla
node_ui_app -->|"selects mode"| node_startup_controller
node_ui_app -->|"creates view model"| node_main_window_vm

click node_component_base "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Components/TeklaComponentBase.cs"
click node_component_base_new "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Components/TeklaComponentBaseNew.cs"
click node_parameter_types "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Types/TeklaDatabaseObjectParam.cs"
click node_param_infos "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/ParamInfos.cs"
click node_attributes "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/Attributes.cs"
click node_drawing_components "https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Drawings"
click node_drawing_lists "https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Drawings"
click node_drawing_creation "https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Drawings"
click node_view_components "https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Views"
click node_geometry_components "https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Geometries"
click node_annotation_components "https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Annotations"
click node_modify_components "https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Modify"
click node_parts_components "https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Parts"
click node_export_components "https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Exports"
click node_uda_components "https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/UDAs"
click node_drawing_interactor "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/DrawingInteractor.cs"
click node_model_interactor "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/ModelInteractor.cs"
click node_component_infos "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/ComponentInfos.cs"
click node_enum_helpers "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/EnumHelpers.cs"
click node_version_constants "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/VersionSpecificConstants.cs"
click node_ui_app "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/DrawingLink.UI/App.xaml.cs"
click node_startup_controller "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/DrawingLink.UI/StartupUtils/StartupController.cs"
click node_main_window_vm "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/DrawingLink.UI/MainWindowViewModel.cs"
click node_user_form_data "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/DrawingLink.UI/UserFormData.cs"
click node_ui_extensions "https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/DrawingLink.UI/Extensions.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_component_base,node_component_base_new,node_parameter_types,node_param_infos,node_attributes,node_gh_user toneBlue
class node_drawing_components,node_drawing_lists,node_drawing_creation toneAmber
class node_annotation_components,node_modify_components,node_parts_components,node_export_components,node_uda_components toneMint
class node_view_components,node_geometry_components toneRose
class node_drawing_interactor,node_model_interactor,node_component_infos,node_enum_helpers,node_version_constants,node_ui_app,node_startup_controller,node_main_window_vm,node_user_form_data,node_ui_extensions,node_tekla toneIndigo
```

## Components

### Grasshopper Interface

- [Component base](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Components/TeklaComponentBase.cs): `src/GrasshopperTeklaDrawingLink/Components/TeklaComponentBase.cs`
- [Component base new](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Components/TeklaComponentBaseNew.cs): `src/GrasshopperTeklaDrawingLink/Components/TeklaComponentBaseNew.cs`
- [Grasshopper parameters](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Types/TeklaDatabaseObjectParam.cs): `src/GrasshopperTeklaDrawingLink/Types/TeklaDatabaseObjectParam.cs`
- [Parameter definitions](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/ParamInfos.cs): `src/GrasshopperTeklaDrawingLink/Tools/ParamInfos.cs`
- [Object attributes](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/Attributes.cs): `src/GrasshopperTeklaDrawingLink/Tools/Attributes.cs`

### Drawing Management

- [Drawing operations](https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Drawings): `src/GrasshopperTeklaDrawingLink/Components/Drawings`
- [Drawing lists](https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Drawings): `src/GrasshopperTeklaDrawingLink/Components/Drawings`
- [Drawing creation](https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Drawings): `src/GrasshopperTeklaDrawingLink/Components/Drawings`

### Drawing Objects

- [Annotations and marks](https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Annotations): `src/GrasshopperTeklaDrawingLink/Components/Annotations`
- [Object modification](https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Modify): `src/GrasshopperTeklaDrawingLink/Components/Modify`
- [Drawing parts](https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Parts): `src/GrasshopperTeklaDrawingLink/Components/Parts`
- [Exports and reports](https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Exports): `src/GrasshopperTeklaDrawingLink/Components/Exports`
- [Drawing UDAs](https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/UDAs): `src/GrasshopperTeklaDrawingLink/Components/UDAs`

### Views and Geometry

- [View operations](https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Views): `src/GrasshopperTeklaDrawingLink/Components/Views`
- [Geometry queries](https://github.com/letsconstructit/grasshopper-tekladrawinglink/tree/main/src/GrasshopperTeklaDrawingLink/Components/Geometries): `src/GrasshopperTeklaDrawingLink/Components/Geometries`

### Runtime and UI

- [Drawing interactor](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/DrawingInteractor.cs): `src/GrasshopperTeklaDrawingLink/Tools/DrawingInteractor.cs`
- [Model interactor](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/ModelInteractor.cs): `src/GrasshopperTeklaDrawingLink/Tools/ModelInteractor.cs`
- [Component metadata](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/ComponentInfos.cs): `src/GrasshopperTeklaDrawingLink/Tools/ComponentInfos.cs`
- [Enum helpers](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/EnumHelpers.cs): `src/GrasshopperTeklaDrawingLink/Tools/EnumHelpers.cs`
- [Version constants](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/GrasshopperTeklaDrawingLink/Tools/VersionSpecificConstants.cs): `src/GrasshopperTeklaDrawingLink/Tools/VersionSpecificConstants.cs`
- [UI startup](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/DrawingLink.UI/App.xaml.cs): `src/DrawingLink.UI/App.xaml.cs`
- [Startup modes](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/DrawingLink.UI/StartupUtils/StartupController.cs): `src/DrawingLink.UI/StartupUtils/StartupController.cs`
- [Main window view model](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/DrawingLink.UI/MainWindowViewModel.cs): `src/DrawingLink.UI/MainWindowViewModel.cs`
- [User form data](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/DrawingLink.UI/UserFormData.cs): `src/DrawingLink.UI/UserFormData.cs`
- [UI extensions](https://github.com/letsconstructit/grasshopper-tekladrawinglink/blob/main/src/DrawingLink.UI/Extensions.cs): `src/DrawingLink.UI/Extensions.cs`

### Other components

- **Grasshopper user**
- **Tekla**

## Connections

- Grasshopper user → Component base: uses components
- Grasshopper user → Component base new: uses components
- Component base new → Drawing interactor: creates and deletes (evidence: `src/GrasshopperTeklaDrawingLink/Components/CreateDatabaseObjectComponentBaseNew.cs`)
- Grasshopper parameters → Drawing interactor: picks objects (evidence: `src/GrasshopperTeklaDrawingLink/Types/TeklaDatabaseObjectParam.cs`)
- Component base new → Parameter definitions: defines menus (evidence: `src/GrasshopperTeklaDrawingLink/Components/CreateDatabaseObjectComponentBaseNew.cs`)
- Drawing operations → Tekla: manages drawings
- Drawing lists → Tekla: queries drawings
- Drawing creation → Tekla: creates drawings
- View operations → Tekla: creates and queries
- Geometry queries → Tekla: queries geometry
- Annotations and marks → Tekla: creates annotations
- Object modification → Tekla: modifies objects
- Drawing parts → Tekla: maps parts
- Exports and reports → Tekla: exports data
- Drawing UDAs → Tekla: reads and writes
- UI startup → Startup modes: selects mode (evidence: `src/DrawingLink.UI/App.xaml.cs`)
- UI startup → Main window view model: creates view model (evidence: `src/DrawingLink.UI/App.xaml.cs`)
