# equinor/rvmsharp architecture

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

## Overview

RvmSharp reads RVM files into a model, with documented connection, alignment and tessellation operations; the separate CAD Reveal Composer CLI accepts RVM, OBJ and FBX inputs and writes Reveal output. Its runner coordinates conversion, geometry processing, sector splitting and export. The tree also contains hierarchy-database composition as a supporting capability. Some internal converter and runner calls are not shown in excerpts, so those relationships are omitted or marked unverified rather than inferred as certain.

Main entry points: [`CadRevealComposer/CadRevealComposerRunner.cs`](https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/CadRevealComposerRunner.cs) (Composition runner), [`RvmSharp.Exe/Program.cs`](https://github.com/equinor/rvmsharp/blob/master/RvmSharp.Exe/Program.cs) (RVM utility), [`CadRevealComposer.Exe/Program.cs`](https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer.Exe/Program.cs) (Composer CLI), [`CadRevealComposer/ModelFormatProvider/IModelFormatProvider.cs`](https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/ModelFormatProvider/IModelFormatProvider.cs) (Format-provider API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_rvm["RVM reader"]
  node_rvmcli["RVM utility<br/>[Program.cs]"]
  node_parser["RVM parser<br/>[RvmParser.cs]"]
  node_rvmdata["RVM model<br/>[RvmStore.cs]"]
  node_connect["Geometry connect<br/>[RvmConnect.cs]"]
  node_align["Geometry align<br/>[RvmAlign.cs]"]
  node_tess["RVM tessellation"]
  node_objexport["OBJ export<br/>[RvmObjExporter.cs]"]
end

subgraph group_formats["Format providers"]
  node_formatapi["Format-provider API"]
  node_rvmprovider["RVM provider<br/>[RvmProvider.cs]"]
  node_fbxprovider["FBX provider<br/>[FbxProvider.cs]"]
  node_objprovider["OBJ provider<br/>[ObjProvider.cs]"]
  node_fbxattrs["Scaffolding metadata"]
end

subgraph group_composer["Reveal composition"]
  node_composercli["Composer CLI<br/>[Program.cs]"]
  node_runner["Composition runner"]
  node_primitives["Reveal primitives<br/>[APrimitive.cs]"]
  node_tessellators["Primitive tessellators"]
  node_sectors["Sector splitting"]
  node_scene["Scene creation<br/>[SceneCreator.cs]"]
end

subgraph group_export["Reveal output"]
  node_gltf["glTF writer<br/>[GltfWriter.cs]"]
end

subgraph group_hierarchy["Hierarchy database"]
  node_hierarchycomposer["Hierarchy composer"]
  node_database[("Hierarchy database")]
end

node_user(("CLI user"))

node_user -->|"runs"| node_rvmcli
node_user -->|"runs"| node_composercli
node_rvmcli -->|"reads files"| node_parser
node_parser -->|"builds model"| node_rvmdata
node_rvmcli -->|"connects geometry"| node_connect
node_rvmcli -->|"aligns geometry"| node_align
node_rvmcli -->|"exports OBJ"| node_objexport
node_rvmdata -->|"processes store"| node_connect
node_rvmdata -->|"processes store"| node_align
node_composercli -->|"registers"| node_rvmprovider
node_composercli -->|"registers"| node_fbxprovider
node_composercli -->|"registers"| node_objprovider
node_rvmprovider -.->|"implements"| node_formatapi
node_fbxprovider -.->|"implements"| node_formatapi
node_objprovider -.->|"implements"| node_formatapi
node_fbxprovider -.->|"parses attributes"| node_fbxattrs
node_composercli -->|"starts processing"| node_runner
node_runner -->|"uses providers"| node_formatapi
node_runner -->|"collects geometry"| node_primitives
node_runner -->|"splits geometry"| node_sectors
node_runner -->|"creates scene"| node_scene
node_runner -.->|"tessellates geometry"| node_tessellators
node_runner -.->|"writes output"| node_gltf
node_hierarchycomposer -->|"writes database"| node_database

click node_rvmcli "https://github.com/equinor/rvmsharp/blob/master/RvmSharp.Exe/Program.cs"
click node_parser "https://github.com/equinor/rvmsharp/blob/master/RvmSharp/RvmParser.cs"
click node_rvmdata "https://github.com/equinor/rvmsharp/blob/master/RvmSharp/Containers/RvmStore.cs"
click node_connect "https://github.com/equinor/rvmsharp/blob/master/RvmSharp/Operations/RvmConnect.cs"
click node_align "https://github.com/equinor/rvmsharp/blob/master/RvmSharp/Operations/RvmAlign.cs"
click node_tess "https://github.com/equinor/rvmsharp/blob/master/RvmSharp/Tessellation/TessellatorBridge.cs"
click node_objexport "https://github.com/equinor/rvmsharp/blob/master/RvmSharp/Operations/RvmObjExporter.cs"
click node_composercli "https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer.Exe/Program.cs"
click node_formatapi "https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/ModelFormatProvider/IModelFormatProvider.cs"
click node_rvmprovider "https://github.com/equinor/rvmsharp/blob/master/CadRevealRvmProvider/RvmProvider.cs"
click node_fbxprovider "https://github.com/equinor/rvmsharp/blob/master/CadRevealFbxProvider/FbxProvider.cs"
click node_objprovider "https://github.com/equinor/rvmsharp/blob/master/CadRevealObjProvider/ObjProvider.cs"
click node_fbxattrs "https://github.com/equinor/rvmsharp/blob/master/CadRevealFbxProvider/Attributes/ScaffoldingAttributeParser.cs"
click node_runner "https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/CadRevealComposerRunner.cs"
click node_primitives "https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/Primitives/APrimitive.cs"
click node_tessellators "https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/Operations/Tessellating/APrimitiveTessellator.cs"
click node_sectors "https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/Operations/SectorSplitting/PrioritySectorSplitter.cs"
click node_scene "https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/SceneCreator.cs"
click node_gltf "https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/Writers/GltfWriter.cs"
click node_hierarchycomposer "https://github.com/equinor/rvmsharp/blob/master/HierarchyComposer/Functions/DatabaseComposer.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_rvmcli,node_parser,node_rvmdata,node_connect,node_align,node_tess,node_objexport,node_user toneBlue
class node_formatapi,node_rvmprovider,node_fbxprovider,node_objprovider,node_fbxattrs toneAmber
class node_composercli,node_runner,node_primitives,node_tessellators,node_sectors,node_scene toneMint
class node_gltf toneRose
class node_hierarchycomposer,node_database toneIndigo
```

## Components

### RVM reader

- [RVM utility](https://github.com/equinor/rvmsharp/blob/master/RvmSharp.Exe/Program.cs): `RvmSharp.Exe/Program.cs`
- [RVM parser](https://github.com/equinor/rvmsharp/blob/master/RvmSharp/RvmParser.cs): `RvmSharp/RvmParser.cs`
- [RVM model](https://github.com/equinor/rvmsharp/blob/master/RvmSharp/Containers/RvmStore.cs): `RvmSharp/Containers/RvmStore.cs`
- [Geometry connect](https://github.com/equinor/rvmsharp/blob/master/RvmSharp/Operations/RvmConnect.cs): `RvmSharp/Operations/RvmConnect.cs`
- [Geometry align](https://github.com/equinor/rvmsharp/blob/master/RvmSharp/Operations/RvmAlign.cs): `RvmSharp/Operations/RvmAlign.cs`
- [RVM tessellation](https://github.com/equinor/rvmsharp/blob/master/RvmSharp/Tessellation/TessellatorBridge.cs): `RvmSharp/Tessellation/TessellatorBridge.cs`
- [OBJ export](https://github.com/equinor/rvmsharp/blob/master/RvmSharp/Operations/RvmObjExporter.cs): `RvmSharp/Operations/RvmObjExporter.cs`

### Format providers

- [Format-provider API](https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/ModelFormatProvider/IModelFormatProvider.cs): `CadRevealComposer/ModelFormatProvider/IModelFormatProvider.cs`
- [RVM provider](https://github.com/equinor/rvmsharp/blob/master/CadRevealRvmProvider/RvmProvider.cs): `CadRevealRvmProvider/RvmProvider.cs`
- [FBX provider](https://github.com/equinor/rvmsharp/blob/master/CadRevealFbxProvider/FbxProvider.cs): `CadRevealFbxProvider/FbxProvider.cs`
- [OBJ provider](https://github.com/equinor/rvmsharp/blob/master/CadRevealObjProvider/ObjProvider.cs): `CadRevealObjProvider/ObjProvider.cs`
- [Scaffolding metadata](https://github.com/equinor/rvmsharp/blob/master/CadRevealFbxProvider/Attributes/ScaffoldingAttributeParser.cs): `CadRevealFbxProvider/Attributes/ScaffoldingAttributeParser.cs`

### Reveal composition

- [Composer CLI](https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer.Exe/Program.cs): `CadRevealComposer.Exe/Program.cs`
- [Composition runner](https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/CadRevealComposerRunner.cs): `CadRevealComposer/CadRevealComposerRunner.cs`
- [Reveal primitives](https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/Primitives/APrimitive.cs): `CadRevealComposer/Primitives/APrimitive.cs`
- [Primitive tessellators](https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/Operations/Tessellating/APrimitiveTessellator.cs): `CadRevealComposer/Operations/Tessellating/APrimitiveTessellator.cs`
- [Sector splitting](https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/Operations/SectorSplitting/PrioritySectorSplitter.cs): `CadRevealComposer/Operations/SectorSplitting/PrioritySectorSplitter.cs`
- [Scene creation](https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/SceneCreator.cs): `CadRevealComposer/SceneCreator.cs`

### Reveal output

- [glTF writer](https://github.com/equinor/rvmsharp/blob/master/CadRevealComposer/Writers/GltfWriter.cs): `CadRevealComposer/Writers/GltfWriter.cs`

### Hierarchy database

- [Hierarchy composer](https://github.com/equinor/rvmsharp/blob/master/HierarchyComposer/Functions/DatabaseComposer.cs): `HierarchyComposer/Functions/DatabaseComposer.cs`
- **Hierarchy database**

### Other components

- **CLI user**

## Connections

- CLI user → RVM utility: runs (evidence: `README.md`)
- CLI user → Composer CLI: runs (evidence: `README.md`)
- RVM utility → RVM parser: reads files (evidence: `RvmSharp.Exe/Program.cs`)
- RVM parser → RVM model: builds model (evidence: `RvmSharp/RvmParser.cs`)
- RVM utility → Geometry connect: connects geometry (evidence: `RvmSharp.Exe/Program.cs`)
- RVM utility → Geometry align: aligns geometry (evidence: `RvmSharp.Exe/Program.cs`)
- RVM utility → OBJ export: exports OBJ (evidence: `RvmSharp.Exe/Program.cs`)
- RVM model → Geometry connect: processes store (evidence: `README.md`)
- RVM model → Geometry align: processes store (evidence: `README.md`)
- Composer CLI → RVM provider: registers (evidence: `CadRevealComposer.Exe/Program.cs`)
- Composer CLI → FBX provider: registers (evidence: `CadRevealComposer.Exe/Program.cs`)
- Composer CLI → OBJ provider: registers (evidence: `CadRevealComposer.Exe/Program.cs`)
- RVM provider → Format-provider API: implements
- FBX provider → Format-provider API: implements
- OBJ provider → Format-provider API: implements
- FBX provider → Scaffolding metadata: parses attributes
- Composer CLI → Composition runner: starts processing (evidence: `CadRevealComposer.Exe/Program.cs`)
- Composition runner → Format-provider API: uses providers (evidence: `CadRevealComposer/CadRevealComposerRunner.cs`)
- Composition runner → Reveal primitives: collects geometry (evidence: `CadRevealComposer/CadRevealComposerRunner.cs`)
- Composition runner → Sector splitting: splits geometry (evidence: `CadRevealComposer/CadRevealComposerRunner.cs`)
- Composition runner → Scene creation: creates scene (evidence: `CadRevealComposer/CadRevealComposerRunner.cs`)
- Composition runner → Primitive tessellators: tessellates geometry
- Composition runner → glTF writer: writes output
- Hierarchy composer → Hierarchy database: writes database (evidence: `HierarchyComposer/Functions/DatabaseComposer.cs`)
