# towareesh/intersectioncurve architecture

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

- Interactive diagram: https://gitdiagram.com/towareesh/intersectioncurve
- Repository: https://github.com/towareesh/intersectioncurve

## Overview

IntersectionCurve is a Fusion 360 add-in for batch creation of intersection curves. The user selects one target and multiple intersectors, runs the command, and receives created-sketch and curve counts plus skips or errors. The sampled execution path validates selections, runs the use case inside a Fusion transaction, reports progress, intersects each item, groups created sketches, and displays a summary. The graph also includes profiling and shared event/logging utilities. Some subsystem links come from the source index or README; unsampled implementations are not treated as inspected.

Main entry points: [`lib/intersectionCurves/application/use_cases.py`](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/application/use_cases.py) (Batch use case), [`commands/intersectionCurves/execute.py`](https://github.com/towareesh/intersectioncurve/blob/dev/commands/intersectionCurves/execute.py) (Execute handler), [`lib/intersectionCurves/adapters/fusion_geometry.py`](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/adapters/fusion_geometry.py) (Geometry adapter), [`commands/intersectionCurves/command_created.py`](https://github.com/towareesh/intersectioncurve/blob/dev/commands/intersectionCurves/command_created.py) (Command setup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Command UI"]
  node_addin["Add-in entry"]
  node_command["Command registration<br/>[entry.py]"]
  node_command_created["Command setup<br/>[command_created.py]"]
  node_inputs["Selection inputs<br/>[inputs.py]"]
  node_execute["Execute handler<br/>[execute.py]"]
end

subgraph group_core["Intersection Core"]
  node_usecase["Batch use case<br/>[use_cases.py]"]
  node_models["Domain DTOs<br/>[models.py]"]
  node_errors["Domain errors<br/>[errors.py]"]
  node_geometry_port["Geometry contract<br/>[geometry.py]"]
  node_logger_port["Logger contract<br/>[logger.py]"]
  node_progress_port["Progress contract<br/>[progress.py]"]
  node_transaction_port["Transaction contract<br/>[transaction.py]"]
end

subgraph group_fusion["Fusion Adapters"]
  node_selection["Selection adapter"]
  node_geometry["Geometry adapter<br/>[fusion_geometry.py]"]
  node_fusion_logger["Fusion logger<br/>[fusion_logger.py]"]
  node_progress["Progress adapter<br/>[fusion_progress.py]"]
  node_transaction["Transaction adapter"]
end

subgraph group_support["Runtime Support"]
  node_profiler["Profiling<br/>[profiler.py]"]
  node_callflow["Callflow tracing"]
  node_event_utils["Event utilities<br/>[event_utils.py]"]
  node_general_utils["General utilities<br/>[general_utils.py]"]
end

node_user(("Fusion user"))

node_user -->|"runs command"| node_command
node_addin -->|"starts"| node_command
node_command -->|"registers handler"| node_command_created
node_command_created -->|"defines inputs"| node_inputs
node_command_created -->|"registers handler"| node_execute
node_execute -->|"reads selections"| node_selection
node_execute -->|"runs"| node_usecase
node_execute -->|"constructs"| node_geometry
node_execute -->|"constructs"| node_fusion_logger
node_execute -->|"constructs"| node_progress
node_execute -->|"constructs"| node_transaction
node_execute -->|"starts and stops"| node_profiler
node_execute -->|"starts and stops"| node_callflow
node_usecase -->|"intersects and groups"| node_geometry
node_usecase -->|"begins and commits"| node_transaction
node_usecase -->|"checks and reports"| node_progress
node_usecase -->|"builds report"| node_models
node_usecase -->|"handles errors"| node_errors
node_usecase -->|"depends on contract"| node_geometry_port
node_usecase -->|"depends on contract"| node_logger_port
node_usecase -->|"depends on contract"| node_progress_port
node_usecase -->|"depends on contract"| node_transaction_port
node_selection -->|"converts selections"| node_models
node_selection -->|"raises validation"| node_errors
node_geometry -->|"returns curve data"| node_models
node_geometry -->|"raises geometry errors"| node_errors
node_geometry -->|"logs events"| node_logger_port
node_event_utils -->|"handles errors"| node_general_utils

click node_addin "https://github.com/towareesh/intersectioncurve/blob/dev/IntersectionCurve.py"
click node_command "https://github.com/towareesh/intersectioncurve/blob/dev/commands/intersectionCurves/entry.py"
click node_command_created "https://github.com/towareesh/intersectioncurve/blob/dev/commands/intersectionCurves/command_created.py"
click node_inputs "https://github.com/towareesh/intersectioncurve/blob/dev/commands/intersectionCurves/inputs.py"
click node_execute "https://github.com/towareesh/intersectioncurve/blob/dev/commands/intersectionCurves/execute.py"
click node_usecase "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/application/use_cases.py"
click node_models "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/domain/models.py"
click node_errors "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/domain/errors.py"
click node_geometry_port "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/ports/geometry.py"
click node_logger_port "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/ports/logger.py"
click node_progress_port "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/ports/progress.py"
click node_transaction_port "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/ports/transaction.py"
click node_selection "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/adapters/fusion_selection.py"
click node_geometry "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/adapters/fusion_geometry.py"
click node_fusion_logger "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/adapters/fusion_logger.py"
click node_progress "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/adapters/fusion_progress.py"
click node_transaction "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/adapters/fusion_transaction.py"
click node_profiler "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/infrastructure/profiler.py"
click node_callflow "https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/infrastructure/callflow_profiler.py"
click node_event_utils "https://github.com/towareesh/intersectioncurve/blob/dev/lib/fusionAddInUtils/event_utils.py"
click node_general_utils "https://github.com/towareesh/intersectioncurve/blob/dev/lib/fusionAddInUtils/general_utils.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_addin,node_command,node_command_created,node_inputs,node_execute,node_user toneBlue
class node_usecase,node_models,node_errors,node_geometry_port,node_logger_port,node_progress_port,node_transaction_port toneAmber
class node_selection,node_geometry,node_fusion_logger,node_progress,node_transaction toneMint
class node_profiler,node_callflow,node_event_utils,node_general_utils toneRose
```

## Components

### Command UI

- [Add-in entry](https://github.com/towareesh/intersectioncurve/blob/dev/IntersectionCurve.py): `IntersectionCurve.py`
- [Command registration](https://github.com/towareesh/intersectioncurve/blob/dev/commands/intersectionCurves/entry.py): `commands/intersectionCurves/entry.py`
- [Command setup](https://github.com/towareesh/intersectioncurve/blob/dev/commands/intersectionCurves/command_created.py): `commands/intersectionCurves/command_created.py`
- [Selection inputs](https://github.com/towareesh/intersectioncurve/blob/dev/commands/intersectionCurves/inputs.py): `commands/intersectionCurves/inputs.py`
- [Execute handler](https://github.com/towareesh/intersectioncurve/blob/dev/commands/intersectionCurves/execute.py): `commands/intersectionCurves/execute.py`

### Intersection Core

- [Batch use case](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/application/use_cases.py): `lib/intersectionCurves/application/use_cases.py`
- [Domain DTOs](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/domain/models.py): `lib/intersectionCurves/domain/models.py`
- [Domain errors](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/domain/errors.py): `lib/intersectionCurves/domain/errors.py`
- [Geometry contract](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/ports/geometry.py): `lib/intersectionCurves/ports/geometry.py`
- [Logger contract](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/ports/logger.py): `lib/intersectionCurves/ports/logger.py`
- [Progress contract](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/ports/progress.py): `lib/intersectionCurves/ports/progress.py`
- [Transaction contract](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/ports/transaction.py): `lib/intersectionCurves/ports/transaction.py`

### Fusion Adapters

- [Selection adapter](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/adapters/fusion_selection.py): `lib/intersectionCurves/adapters/fusion_selection.py`
- [Geometry adapter](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/adapters/fusion_geometry.py): `lib/intersectionCurves/adapters/fusion_geometry.py`
- [Fusion logger](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/adapters/fusion_logger.py): `lib/intersectionCurves/adapters/fusion_logger.py`
- [Progress adapter](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/adapters/fusion_progress.py): `lib/intersectionCurves/adapters/fusion_progress.py`
- [Transaction adapter](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/adapters/fusion_transaction.py): `lib/intersectionCurves/adapters/fusion_transaction.py`

### Runtime Support

- [Profiling](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/infrastructure/profiler.py): `lib/intersectionCurves/infrastructure/profiler.py`
- [Callflow tracing](https://github.com/towareesh/intersectioncurve/blob/dev/lib/intersectionCurves/infrastructure/callflow_profiler.py): `lib/intersectionCurves/infrastructure/callflow_profiler.py`
- [Event utilities](https://github.com/towareesh/intersectioncurve/blob/dev/lib/fusionAddInUtils/event_utils.py): `lib/fusionAddInUtils/event_utils.py`
- [General utilities](https://github.com/towareesh/intersectioncurve/blob/dev/lib/fusionAddInUtils/general_utils.py): `lib/fusionAddInUtils/general_utils.py`

### Other components

- **Fusion user**

## Connections

- Fusion user → Command registration: runs command (evidence: `readme.md`)
- Add-in entry → Command registration: starts (evidence: `IntersectionCurve.py`)
- Command registration → Command setup: registers handler (evidence: `commands/intersectionCurves/entry.py`)
- Command setup → Selection inputs: defines inputs (evidence: `commands/intersectionCurves/command_created.py`)
- Command setup → Execute handler: registers handler (evidence: `commands/intersectionCurves/command_created.py`)
- Execute handler → Selection adapter: reads selections (evidence: `commands/intersectionCurves/execute.py`)
- Execute handler → Batch use case: runs (evidence: `commands/intersectionCurves/execute.py`)
- Execute handler → Geometry adapter: constructs (evidence: `commands/intersectionCurves/execute.py`)
- Execute handler → Fusion logger: constructs (evidence: `commands/intersectionCurves/execute.py`)
- Execute handler → Progress adapter: constructs (evidence: `commands/intersectionCurves/execute.py`)
- Execute handler → Transaction adapter: constructs (evidence: `commands/intersectionCurves/execute.py`)
- Execute handler → Profiling: starts and stops (evidence: `commands/intersectionCurves/execute.py`)
- Execute handler → Callflow tracing: starts and stops (evidence: `commands/intersectionCurves/execute.py`)
- Batch use case → Geometry adapter: intersects and groups (evidence: `lib/intersectionCurves/application/use_cases.py`)
- Batch use case → Transaction adapter: begins and commits (evidence: `lib/intersectionCurves/application/use_cases.py`)
- Batch use case → Progress adapter: checks and reports (evidence: `lib/intersectionCurves/application/use_cases.py`)
- Batch use case → Domain DTOs: builds report (evidence: `lib/intersectionCurves/application/use_cases.py`)
- Batch use case → Domain errors: handles errors (evidence: `lib/intersectionCurves/application/use_cases.py`)
- Batch use case → Geometry contract: depends on contract (evidence: `lib/intersectionCurves/application/use_cases.py`)
- Batch use case → Logger contract: depends on contract (evidence: `lib/intersectionCurves/application/use_cases.py`)
- Batch use case → Progress contract: depends on contract (evidence: `lib/intersectionCurves/application/use_cases.py`)
- Batch use case → Transaction contract: depends on contract (evidence: `lib/intersectionCurves/application/use_cases.py`)
- Selection adapter → Domain DTOs: converts selections (evidence: `lib/intersectionCurves/adapters/fusion_selection.py`)
- Selection adapter → Domain errors: raises validation (evidence: `lib/intersectionCurves/adapters/fusion_selection.py`)
- Geometry adapter → Domain DTOs: returns curve data (evidence: `lib/intersectionCurves/adapters/fusion_geometry.py`)
- Geometry adapter → Domain errors: raises geometry errors (evidence: `lib/intersectionCurves/adapters/fusion_geometry.py`)
- Geometry adapter → Logger contract: logs events (evidence: `lib/intersectionCurves/adapters/fusion_geometry.py`)
- Event utilities → General utilities: handles errors (evidence: `lib/fusionAddInUtils/event_utils.py`)
