# chuongmep/navislookup architecture

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

- Interactive diagram: https://gitdiagram.com/chuongmep/navislookup
- Repository: https://github.com/chuongmep/navislookup

## Overview

Navisworks Lookup is an in-process Navisworks plugin for exploring application, document, view, selection, and clash data through snooping and search. Users launch a ribbon command, which creates a snoop view model and opens the inspection UI; the UI presents reflected objects and their members, with event subscription and clash-result lookup as additional capabilities. The README documents several snoop targets not individually traced here. Those subsystems are represented at their existing command-directory path; wiring beyond the sampled entry points is not asserted.

Main entry points: [`NavisAppInfo/View/AppInfoControl.cs`](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/View/AppInfoControl.cs) (Object inspector), [`NavisAppInfo/View/SearchByContains.xaml.cs`](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/View/SearchByContains.xaml.cs) (Search dialog), [`NavisAppInfo/ViewModel/AppInfoViewModel.cs`](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/ViewModel/AppInfoViewModel.cs) (Snoop state), [`NavisAppInfo/App.cs`](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/App.cs) (Ribbon plugin)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Plugin entry"]
  node_plugin["Ribbon plugin<br/>[App.cs]"]
  node_command_base["Base command<br/>[BaseCommand.cs]"]
end

subgraph group_commands["Snoop workflows"]
  node_snoop_commands["Snoop commands"]
  node_search_command["Search command<br/>[SnoopSearch.cs]"]
end

subgraph group_inspection["Inspection UI"]
  node_viewmodel["Snoop state"]
  node_search_dialog["Search dialog"]
  node_inspection_window["Inspection window<br/>[FrmAppInfo.xaml.cs]"]
  node_tree_control["Object inspector<br/>[AppInfoControl.cs]"]
end

subgraph group_support["Inspection support"]
  node_node_info["Node metadata<br/>[NodeInfo.cs]"]
  node_node_search["Search types<br/>[NodeSearch.cs]"]
  node_event_registry["Event registry<br/>[EventHandlers.cs]"]
  node_event_details["Event subscription<br/>[EventDetails.cs]"]
end

node_navisworks(("Navisworks"))
node_navis_api["Navisworks API"]

node_navisworks -->|"invokes ribbon"| node_plugin
node_plugin -->|"dispatches commands"| node_snoop_commands
node_plugin -->|"dispatches search"| node_search_command
node_snoop_commands -->|"uses base"| node_command_base
node_command_base -->|"creates state"| node_viewmodel
node_command_base -->|"opens window"| node_inspection_window
node_search_command -->|"creates state"| node_viewmodel
node_search_command -->|"opens dialog"| node_search_dialog
node_search_dialog -->|"sets search"| node_viewmodel
node_search_dialog -->|"opens results"| node_inspection_window
node_inspection_window -->|"hosts inspector"| node_tree_control
node_tree_control -->|"reads state"| node_viewmodel
node_tree_control -->|"inspects objects"| node_navis_api
node_tree_control -->|"stores node context"| node_node_info
node_search_dialog -->|"selects search type"| node_node_search
node_tree_control -->|"manages subscriptions"| node_event_registry
node_event_registry -->|"creates handlers"| node_event_details
node_event_details -->|"attaches to events"| node_navis_api

click node_plugin "https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/App.cs"
click node_command_base "https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Command/BaseCommand.cs"
click node_snoop_commands "https://github.com/chuongmep/navislookup/tree/dev/NavisAppInfo/Command"
click node_search_command "https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Command/SnoopSearch.cs"
click node_viewmodel "https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/ViewModel/AppInfoViewModel.cs"
click node_search_dialog "https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/View/SearchByContains.xaml.cs"
click node_inspection_window "https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/View/FrmAppInfo.xaml.cs"
click node_tree_control "https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/View/AppInfoControl.cs"
click node_node_info "https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Model/NodeInfo.cs"
click node_node_search "https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Model/NodeSearch.cs"
click node_event_registry "https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Events/EventHandlers.cs"
click node_event_details "https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Events/EventDetails.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_plugin,node_command_base toneBlue
class node_snoop_commands,node_search_command toneAmber
class node_viewmodel,node_search_dialog,node_inspection_window,node_tree_control,node_navis_api toneMint
class node_node_info,node_node_search,node_event_registry,node_event_details toneRose
class node_navisworks toneIndigo
```

## Components

### Plugin entry

- [Ribbon plugin](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/App.cs): `NavisAppInfo/App.cs`
- [Base command](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Command/BaseCommand.cs): `NavisAppInfo/Command/BaseCommand.cs`

### Snoop workflows

- [Snoop commands](https://github.com/chuongmep/navislookup/tree/dev/NavisAppInfo/Command): `NavisAppInfo/Command`
- [Search command](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Command/SnoopSearch.cs): `NavisAppInfo/Command/SnoopSearch.cs`

### Inspection UI

- [Snoop state](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/ViewModel/AppInfoViewModel.cs): `NavisAppInfo/ViewModel/AppInfoViewModel.cs`
- [Search dialog](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/View/SearchByContains.xaml.cs): `NavisAppInfo/View/SearchByContains.xaml.cs`
- [Inspection window](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/View/FrmAppInfo.xaml.cs): `NavisAppInfo/View/FrmAppInfo.xaml.cs`
- [Object inspector](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/View/AppInfoControl.cs): `NavisAppInfo/View/AppInfoControl.cs`

### Inspection support

- [Node metadata](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Model/NodeInfo.cs): `NavisAppInfo/Model/NodeInfo.cs`
- [Search types](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Model/NodeSearch.cs): `NavisAppInfo/Model/NodeSearch.cs`
- [Event registry](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Events/EventHandlers.cs): `NavisAppInfo/Events/EventHandlers.cs`
- [Event subscription](https://github.com/chuongmep/navislookup/blob/dev/NavisAppInfo/Events/EventDetails.cs): `NavisAppInfo/Events/EventDetails.cs`

### Other components

- **Navisworks**
- **Navisworks API**

## Connections

- Navisworks → Ribbon plugin: invokes ribbon
- Ribbon plugin → Snoop commands: dispatches commands
- Ribbon plugin → Search command: dispatches search
- Snoop commands → Base command: uses base
- Base command → Snoop state: creates state
- Base command → Inspection window: opens window
- Search command → Snoop state: creates state
- Search command → Search dialog: opens dialog
- Search dialog → Snoop state: sets search
- Search dialog → Inspection window: opens results
- Inspection window → Object inspector: hosts inspector
- Object inspector → Snoop state: reads state
- Object inspector → Navisworks API: inspects objects
- Object inspector → Node metadata: stores node context
- Search dialog → Search types: selects search type
- Object inspector → Event registry: manages subscriptions
- Event registry → Event subscription: creates handlers
- Event subscription → Navisworks API: attaches to events
