# ingelibre/ingetrazo architecture

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

## Overview

IngeTrazo is a desktop 3D modeler for architecture, engineering, and design. Its principal workflow is to draw and edit geometry in the viewport with modeling tools, then save a native document or export it for other applications; optional branches add BIM tagging and georeferencing. The graph includes the shared-mesh/history layer and documented capabilities such as materials, scenes, sheets, and extensions. Several subsystems are represented at directory level because their implementation files were not sampled; those links rely on README statements rather than inspected calls.

Main entry points: [`views/main_window.py`](https://github.com/ingelibre/ingetrazo/blob/main/views/main_window.py) (Main window), [`tools/pushpull.py`](https://github.com/ingelibre/ingetrazo/blob/main/tools/pushpull.py) (Push/Pull), [`core/history.py`](https://github.com/ingelibre/ingetrazo/blob/main/core/history.py) (Undo and redo), [`georef`](https://github.com/ingelibre/ingetrazo/tree/main/georef) (Georeferencing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Application interface"]
  node_app["Application startup<br/>[main.py]"]
  node_window["Main window<br/>[main_window.py]"]
  node_viewport["3D viewport<br/>[viewport.py]"]
end

subgraph group_modeling["Modeling engine"]
  node_model_tools["Modeling tools<br/>[base.py]"]
  node_pushpull["Push/Pull<br/>[pushpull.py]"]
  node_snap["Inference and snapping<br/>[snap.py]"]
  node_history["Undo and redo<br/>[history.py]"]
  node_mesh["Shared mesh<br/>[mesh.py]"]
  node_groups["Groups and components<br/>[group.py]"]
end

subgraph group_documents["Documents and exchange"]
  node_native["Native documents<br/>[igz.py]"]
  node_skp["SketchUp import<br/>[skp_openskp.py]"]
  node_exchange["Model exchange"]
  node_ifc["IFC export<br/>[ifc.py]"]
end

subgraph group_project["Project data"]
  node_materials["Materials and textures<br/>[materials.py]"]
  node_layers["Layers and saved views<br/>[layers.py]"]
  node_sheets["Sheet composer<br/>[composition.py]"]
  node_bim["BIM tagging<br/>[bim.py]"]
  node_georef["Georeferencing"]
  node_datum["Scene datum<br/>[datum.py]"]
end

subgraph group_extensions["Analysis and extensions"]
  node_model_info["Model information<br/>[model_info.py]"]
  node_ai["AI assistant<br/>[ai_assistant.py]"]
  node_render["Blender rendering<br/>[render_blender.py]"]
end

node_user(("Designer"))
node_basemap["Web basemap"]

node_user -->|"launches"| node_app
node_app -->|"opens"| node_window
node_user -->|"uses"| node_window
node_window -->|"presents"| node_viewport
node_user -->|"draws and edits"| node_model_tools
node_model_tools -->|"uses inference"| node_snap
node_user -->|"extrudes faces"| node_pushpull
node_pushpull -->|"records changes"| node_history
node_pushpull -->|"mutates geometry"| node_mesh
node_history -->|"replays mutations"| node_mesh
node_history -->|"updates groups"| node_groups
node_window -->|"opens and saves"| node_native
node_user -->|"imports models"| node_skp
node_window -->|"imports and exports"| node_exchange
node_user -->|"paints faces"| node_materials
node_user -->|"organizes model"| node_layers
node_user -->|"composes sheets"| node_sheets
node_user -->|"tags geometry"| node_bim
node_bim -->|"exports quantities"| node_ifc
node_user -->|"georeferences model"| node_georef
node_georef -->|"uses coordinate frame"| node_datum
node_georef -.->|"fetches map tiles"| node_basemap
node_user -->|"inspects quantities"| node_model_info
node_user -.->|"requests assistance"| node_ai
node_user -.->|"renders model"| node_render

click node_app "https://github.com/ingelibre/ingetrazo/blob/main/main.py"
click node_window "https://github.com/ingelibre/ingetrazo/blob/main/views/main_window.py"
click node_viewport "https://github.com/ingelibre/ingetrazo/blob/main/views/viewport.py"
click node_model_tools "https://github.com/ingelibre/ingetrazo/blob/main/tools/base.py"
click node_pushpull "https://github.com/ingelibre/ingetrazo/blob/main/tools/pushpull.py"
click node_snap "https://github.com/ingelibre/ingetrazo/blob/main/core/snap.py"
click node_history "https://github.com/ingelibre/ingetrazo/blob/main/core/history.py"
click node_mesh "https://github.com/ingelibre/ingetrazo/blob/main/core/mesh.py"
click node_groups "https://github.com/ingelibre/ingetrazo/blob/main/core/group.py"
click node_native "https://github.com/ingelibre/ingetrazo/blob/main/formats/igz.py"
click node_skp "https://github.com/ingelibre/ingetrazo/blob/main/formats/skp_openskp.py"
click node_exchange "https://github.com/ingelibre/ingetrazo/tree/main/formats"
click node_materials "https://github.com/ingelibre/ingetrazo/blob/main/core/materials.py"
click node_layers "https://github.com/ingelibre/ingetrazo/blob/main/core/layers.py"
click node_sheets "https://github.com/ingelibre/ingetrazo/blob/main/core/composition.py"
click node_bim "https://github.com/ingelibre/ingetrazo/blob/main/core/bim.py"
click node_ifc "https://github.com/ingelibre/ingetrazo/blob/main/formats/ifc.py"
click node_georef "https://github.com/ingelibre/ingetrazo/tree/main/georef"
click node_datum "https://github.com/ingelibre/ingetrazo/blob/main/georef/datum.py"
click node_model_info "https://github.com/ingelibre/ingetrazo/blob/main/plugins/model_info.py"
click node_ai "https://github.com/ingelibre/ingetrazo/blob/main/plugins/ai_assistant.py"
click node_render "https://github.com/ingelibre/ingetrazo/blob/main/plugins/render_blender.py"

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_app,node_window,node_viewport toneBlue
class node_model_tools,node_pushpull,node_snap,node_history,node_mesh,node_groups toneAmber
class node_native,node_skp,node_exchange,node_ifc toneMint
class node_materials,node_layers,node_sheets,node_bim,node_georef,node_datum toneRose
class node_model_info,node_ai,node_render,node_user,node_basemap toneIndigo
```

## Components

### Application interface

- [Application startup](https://github.com/ingelibre/ingetrazo/blob/main/main.py): `main.py`
- [Main window](https://github.com/ingelibre/ingetrazo/blob/main/views/main_window.py): `views/main_window.py`
- [3D viewport](https://github.com/ingelibre/ingetrazo/blob/main/views/viewport.py): `views/viewport.py`

### Modeling engine

- [Modeling tools](https://github.com/ingelibre/ingetrazo/blob/main/tools/base.py): `tools/base.py`
- [Push/Pull](https://github.com/ingelibre/ingetrazo/blob/main/tools/pushpull.py): `tools/pushpull.py`
- [Inference and snapping](https://github.com/ingelibre/ingetrazo/blob/main/core/snap.py): `core/snap.py`
- [Undo and redo](https://github.com/ingelibre/ingetrazo/blob/main/core/history.py): `core/history.py`
- [Shared mesh](https://github.com/ingelibre/ingetrazo/blob/main/core/mesh.py): `core/mesh.py`
- [Groups and components](https://github.com/ingelibre/ingetrazo/blob/main/core/group.py): `core/group.py`

### Documents and exchange

- [Native documents](https://github.com/ingelibre/ingetrazo/blob/main/formats/igz.py): `formats/igz.py`
- [SketchUp import](https://github.com/ingelibre/ingetrazo/blob/main/formats/skp_openskp.py): `formats/skp_openskp.py`
- [Model exchange](https://github.com/ingelibre/ingetrazo/tree/main/formats): `formats`
- [IFC export](https://github.com/ingelibre/ingetrazo/blob/main/formats/ifc.py): `formats/ifc.py`

### Project data

- [Materials and textures](https://github.com/ingelibre/ingetrazo/blob/main/core/materials.py): `core/materials.py`
- [Layers and saved views](https://github.com/ingelibre/ingetrazo/blob/main/core/layers.py): `core/layers.py`
- [Sheet composer](https://github.com/ingelibre/ingetrazo/blob/main/core/composition.py): `core/composition.py`
- [BIM tagging](https://github.com/ingelibre/ingetrazo/blob/main/core/bim.py): `core/bim.py`
- [Georeferencing](https://github.com/ingelibre/ingetrazo/tree/main/georef): `georef`
- [Scene datum](https://github.com/ingelibre/ingetrazo/blob/main/georef/datum.py): `georef/datum.py`

### Analysis and extensions

- [Model information](https://github.com/ingelibre/ingetrazo/blob/main/plugins/model_info.py): `plugins/model_info.py`
- [AI assistant](https://github.com/ingelibre/ingetrazo/blob/main/plugins/ai_assistant.py): `plugins/ai_assistant.py`
- [Blender rendering](https://github.com/ingelibre/ingetrazo/blob/main/plugins/render_blender.py): `plugins/render_blender.py`

### Other components

- **Designer**
- **Web basemap**

## Connections

- Designer → Application startup: launches (evidence: `README.md`)
- Application startup → Main window: opens (evidence: `main.py`)
- Designer → Main window: uses (evidence: `README.md`)
- Main window → 3D viewport: presents (evidence: `README.md`)
- Designer → Modeling tools: draws and edits (evidence: `README.md`)
- Modeling tools → Inference and snapping: uses inference (evidence: `tools/base.py`)
- Designer → Push/Pull: extrudes faces (evidence: `README.md`)
- Push/Pull → Undo and redo: records changes (evidence: `tools/pushpull.py`)
- Push/Pull → Shared mesh: mutates geometry (evidence: `tools/pushpull.py`)
- Undo and redo → Shared mesh: replays mutations (evidence: `core/history.py`)
- Undo and redo → Groups and components: updates groups (evidence: `core/history.py`)
- Main window → Native documents: opens and saves (evidence: `views/main_window.py`)
- Designer → SketchUp import: imports models (evidence: `README.md`)
- Main window → Model exchange: imports and exports (evidence: `views/main_window.py`)
- Designer → Materials and textures: paints faces (evidence: `README.md`)
- Designer → Layers and saved views: organizes model (evidence: `README.md`)
- Designer → Sheet composer: composes sheets (evidence: `README.md`)
- Designer → BIM tagging: tags geometry (evidence: `README.md`)
- BIM tagging → IFC export: exports quantities (evidence: `README.md`)
- Designer → Georeferencing: georeferences model (evidence: `README.md`)
- Georeferencing → Scene datum: uses coordinate frame (evidence: `georef/datum.py`)
- Georeferencing → Web basemap: fetches map tiles
- Designer → Model information: inspects quantities (evidence: `README.md`)
- Designer → AI assistant: requests assistance
- Designer → Blender rendering: renders model
