# albrechtl/sweethome3d architecture

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

- Interactive diagram: https://gitdiagram.com/albrechtl/sweethome3d
- Repository: https://github.com/albrechtl/sweethome3d

## Overview

Sweet Home 3D is a desktop home-planning application: users build and edit a home plan, furnish it, view it in 3D, and save or export the result. Its model covers the home, furniture, levels, rooms, walls, and preferences; controllers coordinate editing, with Swing views providing the interface. The tree also shows persistence, recovery, rendering, applet, and plug-in capabilities. The README is only a brief fork notice, and most source is unsampled, so several subsystem links are shown as unverified rather than asserted calls.

Main entry points: [`src/com/eteks/sweethome3d/viewcontroller/HomeController.java`](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/viewcontroller/HomeController.java) (Home controller), [`src/com/eteks/sweethome3d/model/Home.java`](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/model/Home.java) (Home model), [`src/com/eteks/sweethome3d/HomeFrameController.java`](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/HomeFrameController.java) (Application frame), [`src/com/eteks/sweethome3d/model/HomeRecorder.java`](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/model/HomeRecorder.java) (Home recorder)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_frame["Application frame"]
  node_applet["Applet interface"]
end

subgraph group_editing["Editing UI"]
  node_homecontroller["Home controller"]
  node_views["Swing views<br/>[HomePane.java]"]
  node_viewfactory["View factory<br/>[ViewFactory.java]"]
  node_plan["Plan editing"]
  node_furniture["Furniture catalog"]
end

subgraph group_domain["Home domain"]
  node_homemodel["Home model<br/>[Home.java]"]
  node_preferences["User preferences"]
end

subgraph group_rendering["3D rendering"]
  node_scene["3D scene"]
  node_renderer["Photo rendering<br/>[PhotoRenderer.java]"]
  node_texture["Texture loading"]
end

subgraph group_extensions["Persistence and extensions"]
  node_recorder["Home recorder<br/>[HomeRecorder.java]"]
  node_homeio["Home file I/O"]
  node_recovery["Auto recovery"]
  node_plugins["Plug-in manager<br/>[PluginManager.java]"]
end

node_user(("User"))

node_user -.->|"operates"| node_frame
node_frame -->|"creates"| node_homecontroller
node_frame -->|"manages"| node_homemodel
node_homecontroller -->|"edits"| node_homemodel
node_homecontroller -->|"delegates to"| node_plan
node_homecontroller -->|"reads catalog"| node_furniture
node_homecontroller -->|"updates"| node_preferences
node_homecontroller -.->|"presents via"| node_views
node_viewfactory -.->|"creates"| node_views
node_homemodel -.->|"builds from"| node_scene
node_scene -->|"loads textures"| node_texture
node_homemodel -.->|"renders"| node_renderer
node_homecontroller -.->|"saves through"| node_recorder
node_recorder -.->|"implemented by"| node_homeio
node_recovery -->|"tracks changes"| node_homemodel
node_plugins -->|"initializes for"| node_homemodel
node_applet -->|"coordinates"| node_homecontroller
node_applet -->|"uses"| node_recorder

click node_frame "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/HomeFrameController.java"
click node_homecontroller "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/viewcontroller/HomeController.java"
click node_views "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/swing/HomePane.java"
click node_viewfactory "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/viewcontroller/ViewFactory.java"
click node_plan "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/viewcontroller/PlanController.java"
click node_furniture "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/model/CatalogPieceOfFurniture.java"
click node_homemodel "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/model/Home.java"
click node_preferences "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/model/UserPreferences.java"
click node_recorder "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/model/HomeRecorder.java"
click node_homeio "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/io/HomeFileRecorder.java"
click node_recovery "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/io/AutoRecoveryManager.java"
click node_plugins "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/plugin/PluginManager.java"
click node_applet "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/applet/HomeAppletController.java"
click node_scene "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/j3d/Object3DBranchFactory.java"
click node_renderer "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/j3d/PhotoRenderer.java"
click node_texture "https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/j3d/TextureManager.java"

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_frame,node_applet,node_user toneBlue
class node_homecontroller,node_views,node_viewfactory,node_plan,node_furniture toneAmber
class node_homemodel,node_preferences toneMint
class node_scene,node_renderer,node_texture toneRose
class node_recorder,node_homeio,node_recovery,node_plugins toneIndigo
```

## Components

### Application

- [Application frame](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/HomeFrameController.java): `src/com/eteks/sweethome3d/HomeFrameController.java`
- [Applet interface](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/applet/HomeAppletController.java): `src/com/eteks/sweethome3d/applet/HomeAppletController.java`

### Editing UI

- [Home controller](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/viewcontroller/HomeController.java): `src/com/eteks/sweethome3d/viewcontroller/HomeController.java`
- [Swing views](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/swing/HomePane.java): `src/com/eteks/sweethome3d/swing/HomePane.java`
- [View factory](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/viewcontroller/ViewFactory.java): `src/com/eteks/sweethome3d/viewcontroller/ViewFactory.java`
- [Plan editing](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/viewcontroller/PlanController.java): `src/com/eteks/sweethome3d/viewcontroller/PlanController.java`
- [Furniture catalog](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/model/CatalogPieceOfFurniture.java): `src/com/eteks/sweethome3d/model/CatalogPieceOfFurniture.java`

### Home domain

- [Home model](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/model/Home.java): `src/com/eteks/sweethome3d/model/Home.java`
- [User preferences](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/model/UserPreferences.java): `src/com/eteks/sweethome3d/model/UserPreferences.java`

### 3D rendering

- [3D scene](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/j3d/Object3DBranchFactory.java): `src/com/eteks/sweethome3d/j3d/Object3DBranchFactory.java`
- [Photo rendering](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/j3d/PhotoRenderer.java): `src/com/eteks/sweethome3d/j3d/PhotoRenderer.java`
- [Texture loading](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/j3d/TextureManager.java): `src/com/eteks/sweethome3d/j3d/TextureManager.java`

### Persistence and extensions

- [Home recorder](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/model/HomeRecorder.java): `src/com/eteks/sweethome3d/model/HomeRecorder.java`
- [Home file I/O](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/io/HomeFileRecorder.java): `src/com/eteks/sweethome3d/io/HomeFileRecorder.java`
- [Auto recovery](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/io/AutoRecoveryManager.java): `src/com/eteks/sweethome3d/io/AutoRecoveryManager.java`
- [Plug-in manager](https://github.com/albrechtl/sweethome3d/blob/master/src/com/eteks/sweethome3d/plugin/PluginManager.java): `src/com/eteks/sweethome3d/plugin/PluginManager.java`

### Other components

- **User**

## Connections

- User → Application frame: operates
- Application frame → Home controller: creates (evidence: `src/com/eteks/sweethome3d/HomeFrameController.java`)
- Application frame → Home model: manages (evidence: `src/com/eteks/sweethome3d/HomeFrameController.java`)
- Home controller → Home model: edits (evidence: `src/com/eteks/sweethome3d/viewcontroller/HomeController.java`)
- Home controller → Plan editing: delegates to (evidence: `src/com/eteks/sweethome3d/viewcontroller/HomeController.java`)
- Home controller → Furniture catalog: reads catalog (evidence: `src/com/eteks/sweethome3d/viewcontroller/HomeController.java`)
- Home controller → User preferences: updates (evidence: `src/com/eteks/sweethome3d/viewcontroller/HomeController.java`)
- Home controller → Swing views: presents via
- View factory → Swing views: creates
- Home model → 3D scene: builds from
- 3D scene → Texture loading: loads textures (evidence: `src/com/eteks/sweethome3d/j3d/TextureManager.java`)
- Home model → Photo rendering: renders
- Home controller → Home recorder: saves through (evidence: `src/com/eteks/sweethome3d/viewcontroller/HomeController.java`)
- Home recorder → Home file I/O: implemented by
- Auto recovery → Home model: tracks changes (evidence: `src/com/eteks/sweethome3d/io/AutoRecoveryManager.java`)
- Plug-in manager → Home model: initializes for (evidence: `src/com/eteks/sweethome3d/plugin/PluginManager.java`)
- Applet interface → Home controller: coordinates (evidence: `src/com/eteks/sweethome3d/applet/HomeAppletController.java`)
- Applet interface → Home recorder: uses (evidence: `src/com/eteks/sweethome3d/applet/HomeAppletController.java`)
