# Dokumentation der Funktionsweise einzelner Funktionen und Ausgaben aus `plant.py` bzw. `routing.py`

## Aufbau des Graphen in unterschiedlichen Ausbaustufen

Die nachfolgenden Bilder zeigen den schrittweisen Aufbau des Graphen aus dem System:

1. **Nur Racks**

   ![Graph nur mit Racks](img\plant.py\racks.png)

2. **Racks + Sensoren**

   ![Graph mit Racks und Sensoren](img\plant.py\racks_sensors.png)

3. **Racks + Sensoren + Unterverteiler**

   ![Kompletter Graph mit Racks, Sensoren und Unterverteilern](img\plant.py\racks_sensors_dists.png)

---

## Funktionsweise ausgewählter Funktionen

### Beispiel 1: `join_racks`

Problematik: Racks sind in dxf-Dateien teileweise nicht formschlüssig aneinander angefügt. 
-> Echte Schnittpunkte sowie "beinahe" Schnittpunkte im Toleranzbereich müssen identifiziert werden und die Kabeltrassen dort verbunden werden.

Hierfür wird "Toleranz-Kreis" festgelegt, welcher das Rack entlangläuft:

![Step 1](img\join_racks\join_racks_1.png)
![Step 2](img\join_racks\join_racks_2.png)

Bei einem Schnittpunkt des Kreises mit einem anderen Rack, wird der Aufpunkt des gefunden Racks mit dem entlangzulaufenden Rack verbunden und ein Knoten an dieser Stelle erstellt:

![Step 3](img\join_racks\join_racks_3.png)
![Step 4](img\join_racks\join_racks_4.png)


### Beispiel 2: `connect_sensors_to_racks`

Problematik: Sensoren liegen nicht direkt auf Racks und haben keine Information, auf welchem Rack sie am besten angebunden werden. 

-> Algorithmus sucht ausgeend von realem Sensor Punkt das nächstgelegene Rack und stelle die kürzeste Vebindung mittels einem "virtuellen Rack" her.

Situation: Horizontales (R1) und vetikales (R2) Rack. Sensor (S) nahe dem Kreuzungspunkt.
![Step 0](img\connect_sensors_to_racks\connect_sensors_to_racks_1.png)

Schritt 1: Zeichnen eines Kreises um den Sensor. Schnittpunkt mit Rack?
![Step 1](img\connect_sensors_to_racks\connect_sensors_to_racks_2.png)

Schritt 2: Wenn kein Schnittpunkt -> vergrößern des Kreises
![Step 2](img\connect_sensors_to_racks\connect_sensors_to_racks_3.png)

Schritt 3: Erzeugung des Aufpunktes auf geschnittenem Rack und verbinden des Aufpunktes mit dem Sensorpunkt via "virtuellem Rack" (vR1)
![Step 3](img\connect_sensors_to_racks\connect_sensors_to_racks_4.png)