Document terminal strips, 9k lines of shipped feature with no user docs

sources/TerminalStrip/ is 66 files and ~9,250 lines, and the words
"terminal strip" appeared on the wiki only in the roadmap, history,
vision and contributing pages -- discussed as a topic, never documented
as a feature.

Covers the part that actually causes confusion: the three-layer model of
strip / physical terminal / real terminal, where a physical terminal's
several real terminals are its levels, ordered back to front from the
mounting plate. Also the six conditions a selection must meet to be
bridgeable (the reason the button greys out), free terminals that exist
in the strip but on no folio, the four-level ceiling in the drawing that
the data model itself does not impose, and the <terminal_strips> XML.

States the honest caveats: the menu entry is labelled (DEV) in the
shipped source, and no example project contains strip data -- verified,
the 143 "terminal_strips" hits in industrial.qet are all element
collection paths, not strip data.

EN/FR/DE.
ispyisail
2026-09-11 21:54:52 +12:00
parent 7ebdce88f4
commit 02de705a9c
5 changed files with 655 additions and 0 deletions
+2
@@ -22,6 +22,8 @@
**[Variables & formulas](variables)** — `%f`, `%{label}`, sequences
**[Terminal strips](terminal_strips)** — strips, levels, bridges
**[Elements XML](elements_XML)**
* [attribute](elements_definition_attribute)
* [uuid](elements_child_uuid)
+1
@@ -60,6 +60,7 @@ Beginnen Sie mit der deutschen Version dieses Wikis:
| Linking elements | ✅ | ✅ | ✅ |
| Project database | ✅ | ✅ | ✅ |
| Variables & formulas | ✅ | ✅ | ✅ |
| Terminal strips | ✅ | ✅ | ✅ |
**Legend:** ✅ Translated | 📋 Planned | ❌ Not yet started
+219
@@ -0,0 +1,219 @@
# Klemmenleisten
Eine Klemmenleiste ist in QElectroTech ein **eigenes Objekt, getrennt von den
auf den Folios gezeichneten Klemmen**. Die Folio-Klemmen bleiben, wo sie sind;
die Leiste ist eine Liste, die sie referenziert, die nur im Schrank
vorhandenen Klemmen ergänzt, Ebenen und Brücken festhält und sich als
Klemmenplan auf ein Folio zeichnen lässt.
> **Status: als (DEV) gekennzeichnet.** Der Menüeintrag lautet
> *Projekt → Klemmenleisten-Verwaltung (DEV)*, und diese Kennzeichnung steht so
> im ausgelieferten Quellcode. Die Funktion arbeitet, und ihre Daten werden in
> der Projektdatei gespeichert, doch die Entwickler haben sie nicht für fertig
> erklärt. Betrachten Sie sie als nutzbar und in Bewegung, nicht als
> abgeschlossen.
Quellen: `sources/TerminalStrip/``terminalstrip.cpp`, `physicalterminal.cpp`,
`realterminal.cpp`, `terminalstripbridge.cpp`, und `ui/` für den Editor.
---
## 1. Die drei Objekte
Das Modell hat drei Ebenen, und fast alle Verwirrung um Klemmenleisten entsteht
daraus, zwei davon zusammenzuwerfen.
| Objekt | Ist | Beispiel |
|---|---|---|
| **Klemmenleiste** | die ganze Leiste | `-X1`, 24 Klemmen auf einer Schiene |
| **Physische Klemme** | ein auf die Schiene geclipster Block | Position 7 von `-X1` |
| **Reale Klemme** | eine elektrische Ebene dieses Blocks | die vordere Ebene von Position 7 |
Eine physische Klemme besteht aus **einer oder mehreren** realen Klemmen. Eine
einzelne reale Klemme ist ein gewöhnlicher einstöckiger Block. Mehrere bedeuten,
dass der Block **Ebenen** hat — eine zwei- oder dreistöckige Klemme.
Die Ebenen sind von hinten nach vorn geordnet, von der Montageplatte zur
Schranktür:
```
Montageplatte Tür
| |
| +---+ |
| | 0 | +---+ |
| | | | 1 | +---+ |
| | | | | | 2 | |
| +---+ +---+ +---+ |
| |
|<---- eine physische Klemme, 3 Ebenen ----->|
```
Ebene 0 liegt hinten. Es ist dieselbe Ordnung, die die Spalte *Ebene* im Editor
zeigt, und dieselbe, gegen die das Brücken prüft.
### Reale Klemmen, die auf keinem Folio stehen
Eine reale Klemme muss **nicht** einer gezeichneten Klemme entsprechen. Eine auf
der Schiene reservierte, aber nicht gezeichnete Klemme — eine Reserve, ein
künftiger Anschluss, ein vom Hersteller gelieferter Endblock — existiert in der
Leiste als reale Klemme ohne Element dahinter.
Dafür ist die Liste der **freien Klemmen** im Editor da: Klemmen, die in der
Leiste vorkommen und im Schaltplan nicht. Deshalb kann die Klemmenzahl einer
Leiste die Zahl der Klemmenelemente in den Folios berechtigterweise übersteigen.
---
## 2. Eine Leiste anlegen und füllen
*Projekt → Klemmenleisten-Verwaltung (DEV)* öffnet das Editorfenster. Links
stehen die Leisten des Projekts in einem Baum, rechts die Klemmen der gewählten
Leiste in einer Tabelle.
Eine Leiste trägt fünf Kennzeichnungen: **Anlage**, **Ort**, **Name**,
**Kommentar** und **Beschreibung**. Anlage und Ort sind dieselben Begriffe wie
die Felder `plant` und `locmach` eines Folios — eine Leiste wird adressiert wie
ein Element.
Klemmen gelangen in eine Leiste, indem sie ihr hinzugefügt werden: entweder aus
den bereits gezeichneten Klemmenelementen des Projekts oder als freie Klemmen,
die man in der Leiste selbst anlegt.
### Die Klemmentabelle
| Spalte | Bedeutung |
|---|---|
| Position | Reihenfolge auf der Schiene |
| Ebene | welche Etage eines mehrstöckigen Blocks, 0 = hinten |
| Label | Nummer oder Name der Klemme |
| Leiternummer | der ankommende Draht |
| Querverweis | wo die Klemme gezeichnet ist |
| Kabel | Kabel, zu dem die Klemme gehört |
| Kabeladerfarbe / -nummer | die Ader in diesem Kabel |
| Typ | generisch, Sicherung, trennbar, Diode, Erde |
| Funktion | generisch, Phase, Neutralleiter |
| LED | ob der Block eine Anzeige trägt |
Typ und Funktion stammen aus der Definition des Klemmenelements — siehe
**[Elemente verknüpfen](element_linking)**.
---
## 3. Gruppieren, Ebenen, Sortieren
Zwei Operationen ändern die Gestalt der Leiste statt ihres Inhalts:
- **Gruppieren** fasst mehrere reale Klemmen zu Ebenen einer physischen Klemme
zusammen. So sagt man QET „diese drei sind ein dreistöckiger Block“ und nicht
drei Blöcke.
- **Aufheben** kehrt das um und gibt jeder realen Klemme einen eigenen Block.
Das Sortieren legt die Reihenfolge der physischen Klemmen auf der Schiene fest.
Beides ist rückgängig zu machen: Das Modul bringt eigene Undo-Kommandos für
Gruppieren, Sortieren, Ebenenwechsel, Brücken und Farbe mit.
---
## 4. Brücken
Eine Brücke (Kamm, Bügel) verbindet Klemmen, die auf gleichem Potential liegen
müssen. QETs Regeln sind streng, und sie zu kennen erspart das Rätselraten,
warum die Brückenschaltfläche ausgegraut ist. Brückbar sind die gewählten
realen Klemmen nur, wenn sie:
1. **mindestens zwei** sind;
2. alle zu **dieser** Leiste gehören;
3. alle auf **derselben Ebene** liegen — eine vordere Ebene lässt sich nicht mit
einer hinteren brücken;
4. auf der Schiene **aufeinanderfolgen**;
5. zu **verschiedenen physischen Klemmen** gehören — die Ebenen eines Blocks
werden nicht untereinander gebrückt;
6. **mindestens eine noch nicht gebrückte** Klemme enthalten.
Fehlt eine der sechs Bedingungen, wird die Operation abgelehnt statt teilweise
ausgeführt.
Brücken tragen eine Farbe aus einer festen Palette — Rot, Blau, Weiß,
Dunkelgrau, Schwarz — mit **Dunkelgrau** als Vorgabe. Die Farbe ist eine
Zeichnungskonvention, keine elektrische Bedeutung; konsequent im ganzen Projekt
eingesetzt, liest sie sich als Dokumentation.
---
## 5. Eine Leiste auf ein Folio zeichnen
Eine Leiste lässt sich als grafisches Objekt auf einem Folio platzieren. Was
gezeichnet wird, bestimmt ein **Layoutmuster**: ein benannter, wiederverwendbarer
Satz von Geometrien — Rechteck und Textausrichtung der Kopfzeile, Abstandhalter,
Klemmenrechtecke je Ebene, Höhe, Position und Ausrichtung der Klemmen- und
Querverweistexte, Schrift sowie Durchmesser und vertikale Versätze der
Brückenpunkte.
Layouts werden je Projekt verwaltet; ein Hausstil lässt sich also einmal
festlegen und auf jede Leiste anwenden.
**Die Zeichnung unterstützt bis zu vier Ebenen.** Das Layoutmuster enthält vier
Klemmenrechtecke und vier Brückenpunkt-Versätze. Das Datenmodell selbst kennt
diese Grenze nicht — eine physische Klemme kann mehr reale Klemmen aufnehmen,
als die Zeichnung Reihen hat. Wer fünfstöckige Blöcke baut, behält sie im
Modell; der Klemmenplan zeigt nicht alle.
---
## 6. Speicherung
Leisten leben in der Projektdatei, nicht in den Folios:
```xml
<project>
...
<terminal_strips>
<terminal_strip>
<terminal_strip_data uuid="{…}">
<informations>
<information name="installation"></information>
<information name="location"></information>
<information name="name">-X1</information>
<information name="comment"></information>
<information name="description"></information>
</informations>
</terminal_strip_data>
<layout>
<!-- ein Eintrag je physischer Klemme, jeweils mit ihren
realen Klemmen in Ebenenreihenfolge -->
</layout>
<terminal_strip_bridge></terminal_strip_bridge>
</terminal_strip>
</terminal_strips>
</project>
```
Leere Kennzeichnungsfelder werden weggelassen statt leer geschrieben; das XML
einer minimalen Leiste ist daher kurz.
Reale Klemmen werden über die **uuid des Elements** gespeichert, auf das sie
verweisen. Beim Laden wird die Leiste über diese uuid wieder mit den
Klemmenelementen des Projekts verbunden; reale Klemmen ohne Element entstehen
als freie Klemmen neu. Das ist die übliche Folge einer elementbasierten
Identität: Ein Element, das seine uuid verliert oder ändert, verliert seinen
Platz in der Leiste.
---
## 7. Was ehrlicherweise zu erwarten ist
- Die Funktion ist in der Oberfläche mit **(DEV)** gekennzeichnet. Ihre Daten
werden gespeichert und gelesen, ihr Umfang bewegt sich aber noch.
- Die Leiste ist eine **Sicht auf** Ihre Klemmen, ergänzt um die, die nur sie
kennt. Sie nummeriert Ihre Folios nicht um und legt keine Klemmenelemente an.
- Die Klemmennummerierung ist eine **eigene** Funktion — siehe `auto_num_locked`
unter **[Elemente verknüpfen](element_linking)**, um eine Klemme davon
auszunehmen.
- Kein mitgeliefertes Beispielprojekt verwendet Klemmenleisten; ein fertiges
Beispiel zum Abschauen gibt es also nicht.
---
Siehe auch: **[Elemente verknüpfen](element_linking)** ·
**[Variablen und Formeln](variables)** ·
**[Die Projektdatenbank](project_database)**
+222
@@ -0,0 +1,222 @@
# Borniers
Dans QElectroTech, un bornier est un **objet distinct des bornes dessinées sur
vos folios**. Les bornes des folios restent où elles sont ; le bornier est une
liste qui les référence, y ajoute les bornes qui n'existent que dans l'armoire,
enregistre les étages et les ponts, et peut être dessiné sur un folio sous forme
de plan de bornier.
> **État : marqué (DEV).** L'entrée de menu est
> *Projet → Gestionnaire de borniers (DEV)*, et cette mention figure dans les
> sources livrées. La fonction marche et ses données sont enregistrées dans le
> fichier projet, mais les développeurs ne l'ont pas déclarée achevée.
> Considérez-la comme utilisable et évolutive, non comme figée.
Sources : `sources/TerminalStrip/``terminalstrip.cpp`,
`physicalterminal.cpp`, `realterminal.cpp`, `terminalstripbridge.cpp`, et `ui/`
pour l'éditeur.
---
## 1. Les trois objets
Le modèle comporte trois niveaux, et presque toutes les confusions au sujet des
borniers viennent de la fusion de deux d'entre eux.
| Objet | Est | Exemple |
|---|---|---|
| **Bornier** | le bornier entier | `-X1`, 24 bornes sur un rail |
| **Borne physique** | un bloc clipsé sur le rail | la position 7 de `-X1` |
| **Borne réelle** | un étage électrique de ce bloc | l'étage avant de la position 7 |
Une borne physique est composée d'**une ou plusieurs** bornes réelles. Une seule
borne réelle correspond à un bloc simple ordinaire. Plusieurs signifient que le
bloc a des **étages** — une borne à deux ou trois étages.
Les étages sont ordonnés de l'arrière vers l'avant, de la platine de montage
vers la porte de l'armoire :
```
platine de montage porte
| |
| +---+ |
| | 0 | +---+ |
| | | | 1 | +---+ |
| | | | | | 2 | |
| +---+ +---+ +---+ |
| |
|<---- une borne physique, 3 étages -------->|
```
L'étage 0 est celui du fond. C'est le même ordre que celui affiché par la
colonne *Étage* de l'éditeur, et celui que compare le pontage.
### Des bornes réelles absentes des folios
Une borne réelle ne correspond **pas nécessairement** à une borne dessinée. Une
borne réservée sur le rail mais non dessinée — une réserve, un raccordement
futur, un bloc d'extrémité fourni par le fabricant — existe dans le bornier
comme borne réelle sans élément derrière elle.
C'est à cela que sert la liste des **bornes libres** de l'éditeur : des bornes
qui existent dans le bornier et pas dans le schéma. C'est aussi pourquoi le
nombre de bornes d'un bornier peut légitimement dépasser le nombre d'éléments
bornes de vos folios.
---
## 2. Créer et remplir un bornier
*Projet → Gestionnaire de borniers (DEV)* ouvre la fenêtre d'édition. Elle
présente les borniers du projet dans une arborescence à gauche, et les bornes du
bornier sélectionné dans un tableau.
Un bornier porte cinq éléments d'identification : **installation**,
**localisation**, **nom**, **commentaire** et **description**. Installation et
localisation sont les mêmes notions que les champs `plant` et `locmach` d'un
folio : un bornier s'adresse comme un élément.
Les bornes rejoignent un bornier en y étant ajoutées, soit depuis les éléments
bornes déjà dessinés dans le projet, soit comme bornes libres créées directement
dans le bornier.
### Le tableau des bornes
| Colonne | Signification |
|---|---|
| Position | ordre sur le rail |
| Étage | quel étage d'un bloc multi-étages, 0 = arrière |
| Label | numéro ou nom de la borne |
| Numéro de conducteur | le fil qui arrive |
| Référence croisée | où la borne est dessinée |
| Câble | câble auquel la borne appartient |
| Couleur / numéro de fil câble | le conducteur dans ce câble |
| Type | générique, fusible, sectionnable, diode, terre |
| Fonction | générique, phase, neutre |
| led | si le bloc porte un voyant |
Type et fonction proviennent de la définition de l'élément borne — voir
**[Lier des éléments](element_linking)** pour la façon dont un élément les
déclare.
---
## 3. Regrouper, étager, trier
Deux opérations changent la forme du bornier plutôt que son contenu :
- **Regrouper** prend plusieurs bornes réelles et en fait les étages d'une seule
borne physique. C'est ainsi qu'on indique à QET « ces trois-là forment un seul
bloc à trois étages », et non trois blocs.
- **Dégrouper** fait l'inverse, en donnant à chaque borne réelle son propre
bloc.
Le tri fixe l'ordre des bornes physiques sur le rail. Les deux sont annulables :
le module possède ses propres commandes d'annulation pour le regroupement, le
tri, le changement d'étage, le pontage et la couleur.
---
## 4. Pontage
Un pont (peigne, barrette) relie des bornes qui doivent être au même potentiel.
Les règles de QET sont strictes, et les connaître évite de chercher pourquoi le
bouton de pontage est grisé. Pour être pontables, les bornes réelles
sélectionnées doivent :
1. être **au moins deux** ;
2. appartenir toutes à **ce** bornier ;
3. être toutes au **même étage** — on ne ponte pas un étage avant à un étage
arrière ;
4. être **consécutives** sur le rail ;
5. appartenir à des **bornes physiques différentes** — les étages d'un même bloc
ne se pontent pas entre eux ;
6. comporter **au moins une borne pas déjà pontée**.
Si l'une des six conditions manque, l'opération est refusée plutôt
qu'appliquée partiellement.
Les ponts portent une couleur, choisie dans une palette fixe — rouge, bleu,
blanc, gris foncé, noir — le **gris foncé** étant la valeur par défaut. La
couleur est une convention de dessin, non une signification électrique ;
utilisée de façon cohérente dans un projet, elle se lit comme une
documentation.
---
## 5. Dessiner un bornier sur un folio
Un bornier peut être placé sur un folio comme objet graphique. Ce qui est
dessiné est régi par un **modèle de mise en page** : un jeu de géométries
nommé et réutilisable — rectangle et orientation du texte d'en-tête,
espacement, rectangles de bornes par étage, hauteur, position et orientation
des textes de borne et de référence croisée, police, diamètre et décalages
verticaux des points de pont.
Les mises en page sont gérées par projet : une charte graphique se définit une
fois et s'applique à tous les borniers.
**Le dessin gère jusqu'à quatre étages.** Le modèle de mise en page contient
quatre rectangles de bornes et quatre décalages de points de pont. Le modèle de
données, lui, n'impose pas cette limite : une borne physique peut contenir plus
de bornes réelles que le dessin n'a de rangées. Si vous créez des blocs à cinq
étages, le modèle les conservera ; le plan de bornier ne les montrera pas tous.
---
## 6. Stockage
Les borniers vivent dans le fichier projet, pas dans les folios :
```xml
<project>
...
<terminal_strips>
<terminal_strip>
<terminal_strip_data uuid="{…}">
<informations>
<information name="installation"></information>
<information name="location"></information>
<information name="name">-X1</information>
<information name="comment"></information>
<information name="description"></information>
</informations>
</terminal_strip_data>
<layout>
<!-- une entrée par borne physique, chacune listant ses
bornes réelles dans l'ordre des étages -->
</layout>
<terminal_strip_bridge></terminal_strip_bridge>
</terminal_strip>
</terminal_strips>
</project>
```
Les champs d'identification vides sont omis plutôt qu'écrits vides : le XML d'un
bornier minimal est donc court.
Les bornes réelles sont stockées par l'**uuid de l'élément** qu'elles
référencent. Au chargement, le bornier est reconnecté aux éléments bornes du
projet par cet uuid ; les bornes réelles sans élément sont reconstruites comme
bornes libres. C'est la conséquence habituelle d'une identité fondée sur
l'élément : un élément qui perd ou change d'uuid perd sa place dans le bornier.
---
## 7. À quoi s'attendre, honnêtement
- La fonction est marquée **(DEV)** dans l'interface. Ses données sont
enregistrées et relues, mais son périmètre bouge encore.
- Le bornier est une **vue sur** vos bornes, plus celles qu'il est seul à
connaître. Il ne renumérote pas vos folios et ne crée pas d'éléments bornes.
- La renumérotation des bornes est une fonction **distincte** — voir
`auto_num_locked` dans **[Lier des éléments](element_linking)** pour en
exempter une borne.
- Aucun projet d'exemple livré n'utilise de bornier : il n'y a donc pas de cas
concret fourni dont s'inspirer.
---
Voir aussi : **[Lier des éléments](element_linking)** ·
**[Variables et formules](variables)** ·
**[La base de données du projet](project_database)**
+211
@@ -0,0 +1,211 @@
# Terminal strips
A terminal strip in QElectroTech is a **separate object from the terminals
drawn on your folios**. The folio terminals stay where they are; the strip is a
list that references them, adds the terminals that exist only in the cabinet,
records levels and bridges, and can be drawn on a folio as a strip plan.
> **Status: marked (DEV).** The menu entry is
> *Project → Terminal strip manager (DEV)*, and that label is in the shipped
> source. The feature works and its data is saved in the project file, but the
> developers have not declared it finished. Treat it as usable and evolving
> rather than settled.
Source: `sources/TerminalStrip/``terminalstrip.cpp`, `physicalterminal.cpp`,
`realterminal.cpp`, `terminalstripbridge.cpp`, and `ui/` for the editor.
---
## 1. The three objects
The model has three layers, and almost every confusion about terminal strips
comes from collapsing two of them.
| Object | Is | Example |
|---|---|---|
| **Terminal strip** | the whole strip | `-X1`, 24 terminals on a rail |
| **Physical terminal** | one block clipped onto the rail | position 7 on `-X1` |
| **Real terminal** | one electrical level within that block | the front level of position 7 |
A physical terminal is composed of **one or more** real terminals. One real
terminal is an ordinary single-level block. More than one means the block has
**levels** — a two- or three-tier terminal.
Levels are ordered back to front, from the mounting plate towards the cabinet
door:
```
mounting plate door
| |
| +---+ |
| | 0 | +---+ |
| | | | 1 | +---+ |
| | | | | | 2 | |
| +---+ +---+ +---+ |
| |
|<---- one physical terminal, 3 levels ----->|
```
Level 0 is the back. That ordering is the same one the editor's *Level* column
shows and the same one bridging compares against.
### Real terminals that are not on any folio
A real terminal does **not** have to correspond to a drawn terminal element. A
terminal you have reserved on the rail but not drawn — a spare, a future
connection, a manufacturer-supplied end block — exists in the strip as a real
terminal with no element behind it.
This is what the editor's **free terminal** list is for: terminals that exist in
the strip and not in the schematic. It is also why a strip's terminal count can
legitimately exceed the number of terminal elements in your folios.
---
## 2. Creating and filling a strip
*Project → Terminal strip manager (DEV)* opens the editor window. It shows the
project's strips in a tree on the left, and the selected strip's terminals in a
table.
A strip carries five pieces of identification: **installation**, **location**,
**name**, **comment** and **description**. Installation and location are the
same concepts as a folio's `plant` and `locmach` — a strip is addressed the same
way an element is.
Terminals reach a strip by being added to it, either from the drawn terminal
elements the project already has, or as free terminals you create in the strip
itself.
### The terminal table
| Column | Meaning |
|---|---|
| Position | order on the rail |
| Level | which tier of a multi-level block, 0 = back |
| Label | the terminal's number or name |
| Conductor number | the wire number arriving |
| Cross-reference | where the terminal is drawn |
| Cable | cable this terminal belongs to |
| Cable wire colour / number | the core within that cable |
| Type | generic, fuse, sectional, diode, ground |
| Function | generic, phase, neutral |
| LED | whether the block carries an indicator |
Type and function come from the terminal element's own definition — see
**[Linking elements](element_linking)** for how an element declares them.
---
## 3. Grouping, levels and sorting
Two operations change the shape of the strip rather than its contents:
- **Grouping** takes several real terminals and makes them levels of one
physical terminal. That is how you tell QET "these three are one three-tier
block", not three blocks.
- **Ungrouping** reverses it, giving each real terminal a block of its own.
Sorting sets the order of physical terminals on the rail. Both are undoable —
the module has its own undo commands for grouping, sorting, level changes,
bridging and colour.
---
## 4. Bridging
A bridge (comb, jumper) links terminals that must be at the same potential.
QET's rules are strict, and knowing them saves guessing why the bridge button
is greyed out. To be bridgeable, the selected real terminals must:
1. number **at least two**;
2. all belong to **this** strip;
3. all be at the **same level** — you cannot bridge a front level to a back one;
4. be **consecutive** on the rail;
5. belong to **different physical terminals** — the levels of one block are not
bridged to each other;
6. include **at least one terminal that is not already bridged**.
Fail any of the six and the operation is refused rather than partially applied.
Bridges carry a colour, chosen from a fixed palette — red, blue, white, dark
grey, black — with **dark grey** the default. The colour is a drawing
convention, not electrical meaning; use it consistently across a project and it
reads as documentation.
---
## 5. Drawing a strip on a folio
A strip can be placed on a folio as a graphical item. What gets drawn is
governed by a **layout pattern**, a named, reusable set of geometry: header
rectangle and text orientation, spacer, per-level terminal rectangles, terminal
and cross-reference text height, position and orientation, font, and the
diameter and vertical offsets of the bridge dots.
Layouts are managed per project, so a house style can be defined once and
applied to every strip.
**The drawing supports up to four levels.** The layout pattern holds four
terminal rectangles and four bridge-point offsets. The data model itself does
not impose that limit — a physical terminal can hold more real terminals than
the drawing has rows for. If you build five-level blocks, the model will keep
them; the strip plan will not show them all.
---
## 6. How it is stored
Strips live in the project file, not in the folios:
```xml
<project>
...
<terminal_strips>
<terminal_strip>
<terminal_strip_data uuid="{…}">
<informations>
<information name="installation"></information>
<information name="location"></information>
<information name="name">-X1</information>
<information name="comment"></information>
<information name="description"></information>
</informations>
</terminal_strip_data>
<layout>
<!-- one entry per physical terminal, each listing its
real terminals in level order -->
</layout>
<terminal_strip_bridge></terminal_strip_bridge>
</terminal_strip>
</terminal_strips>
</project>
```
Empty identification fields are omitted rather than written blank, so a minimal
strip's XML is short.
Real terminals are stored by the **uuid of the element** they refer to. On load,
the strip is reconnected to the project's terminal elements by that uuid; real
terminals with no element are rebuilt as free terminals. This is the usual
consequence of identity being element-based: an element that loses or changes
its uuid loses its place in the strip.
---
## 7. What to expect, honestly
- The feature is labelled **(DEV)** in the interface. Its data is saved and
reloaded, but its scope is still moving.
- The strip is a **view over** your terminals plus the ones only it knows about.
It does not renumber your folios and does not create terminal elements.
- Terminal renumbering is a **separate** feature — see `auto_num_locked` in
**[Linking elements](element_linking)** for how to exempt a terminal from it.
- Nothing in the shipped example projects uses terminal strips, so there is no
worked example in the box to copy from.
---
See also: **[Linking elements](element_linking)** ·
**[Variables & formulas](variables)** ·
**[The project database](project_database)**