# vectorgraphics/okular-v3d-plugins architecture

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

- Interactive diagram: https://gitdiagram.com/vectorgraphics/okular-v3d-plugins
- Repository: https://github.com/vectorgraphics/okular-v3d-plugins

## Overview

Okular-v3d-Plugins adds interactive 3D model viewing to Okular: users open prerendered V3D files directly or view V3D models embedded in PDFs, then rotate, zoom, and pan. The README describes two plugin paths; the supplied tree does not include their adapter sources, so those nodes and links are based on documented behavior. The sampled shared code covers model data, rendering, and interaction management, but does not establish every internal call between those layers.

Main entry points: [`v3d-Common/V3dModelManager.cpp`](https://github.com/vectorgraphics/okular-v3d-plugins/blob/main/v3d-Common/V3dModelManager.cpp) (Model manager), [`v3d-Common/Rendering/renderheadless.cpp`](https://github.com/vectorgraphics/okular-v3d-plugins/blob/main/v3d-Common/Rendering/renderheadless.cpp) (Headless renderer), [`v3d-Common/V3dFile/V3dObjects.cpp`](https://github.com/vectorgraphics/okular-v3d-plugins/blob/main/v3d-Common/V3dFile/V3dObjects.cpp) (V3D objects)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_okular["Okular plugins"]
  node_v3d_plugin["V3D generator"]
  node_pdf_plugin["PDF integration"]
end

subgraph group_runtime["V3D runtime"]
  node_manager["Model manager"]
  node_renderer["Headless renderer<br/>[renderheadless.cpp]"]
end

subgraph group_model["Model data"]
  node_objects["V3D objects<br/>[V3dObjects.cpp]"]
end

node_reader(("Okular reader"))
node_v3d_file["V3D file"]
node_pdf_file["PDF document"]

node_reader -->|"opens V3D"| node_v3d_plugin
node_v3d_file -->|"loads file"| node_v3d_plugin
node_v3d_plugin -.->|"uses shared runtime"| node_manager
node_reader -->|"opens PDF"| node_pdf_plugin
node_pdf_file -->|"contains models"| node_pdf_plugin
node_pdf_plugin -->|"requests model rendering"| node_manager
node_manager -.->|"renders models"| node_renderer
node_renderer -.->|"renders geometry"| node_objects

click node_manager "https://github.com/vectorgraphics/okular-v3d-plugins/blob/main/v3d-Common/V3dModelManager.cpp"
click node_renderer "https://github.com/vectorgraphics/okular-v3d-plugins/blob/main/v3d-Common/Rendering/renderheadless.cpp"
click node_objects "https://github.com/vectorgraphics/okular-v3d-plugins/blob/main/v3d-Common/V3dFile/V3dObjects.cpp"

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_v3d_plugin,node_pdf_plugin toneBlue
class node_manager,node_renderer toneAmber
class node_objects toneMint
class node_reader,node_v3d_file,node_pdf_file toneIndigo
```

## Components

### Okular plugins

- **V3D generator**
- **PDF integration**

### V3D runtime

- [Model manager](https://github.com/vectorgraphics/okular-v3d-plugins/blob/main/v3d-Common/V3dModelManager.cpp): `v3d-Common/V3dModelManager.cpp`
- [Headless renderer](https://github.com/vectorgraphics/okular-v3d-plugins/blob/main/v3d-Common/Rendering/renderheadless.cpp): `v3d-Common/Rendering/renderheadless.cpp`

### Model data

- [V3D objects](https://github.com/vectorgraphics/okular-v3d-plugins/blob/main/v3d-Common/V3dFile/V3dObjects.cpp): `v3d-Common/V3dFile/V3dObjects.cpp`

### Other components

- **Okular reader**
- **V3D file**
- **PDF document**

## Connections

- Okular reader → V3D generator: opens V3D
- V3D file → V3D generator: loads file
- V3D generator → Model manager: uses shared runtime
- Okular reader → PDF integration: opens PDF
- PDF document → PDF integration: contains models
- PDF integration → Model manager: requests model rendering
- Model manager → Headless renderer: renders models
- Headless renderer → V3D objects: renders geometry
