CONNECTION_INSERT/EDIT: Attributnamen wie die Bloecke aus sps_skel

Die Befehle schrieben ID/FROM_ID/TO_ID und lasen den Markernamen aus TRO_ID -
Attribute, die CONNECTION_ARROW und die TRO-Marker von tro_annotate nicht
haben (ssg-attrib-set-on ueberspringt sie still). Jetzt UID/FROM_UID/TO_UID
und Markername aus ID; alte Namen werden mitgelesen und mitgeschrieben.
Rueckweg nach sps_skel: tro_annotate --read-tros (edit_connections).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-27 14:32:11 +01:00
parent 56c926cc07
commit 767e47980b
3 changed files with 50 additions and 16 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+40 -14
View File
@@ -8,13 +8,22 @@
;; TRO11 ----------> TRO14 ;; TRO11 ----------> TRO14
;; ID 0062 ID 0065 ;; ID 0062 ID 0065
;; ;;
;; Attribute des Verbindungsblocks: ;; Attribute des Verbindungsblocks (wie sps_skel lib/tro_annotate.py sie
;; ID unsichtbar - eindeutige interne Nummer (ID-Raum von SSG_LIB) ;; anlegt):
;; FROM_ID unsichtbar - interne ID der Quelle ;; UID unsichtbar - eindeutige interne Nummer (ID-Raum von SSG_LIB)
;; TO_ID unsichtbar - interne ID des Ziels ;; FROM_UID unsichtbar - interne Nummer (UID) des Quell-Markers
;; FROM_TRO sichtbar - sprechender Name der Quelle ;; TO_UID unsichtbar - interne Nummer (UID) des Ziel-Markers
;; TO_TRO sichtbar - sprechender Name des Ziels ;; FROM_TRO unsichtbar - sprechender Name der Quelle (Attribut ID des Markers)
;; KIND unsichtbar - flow | colocated ;; TO_TRO unsichtbar - sprechender Name des Ziels
;; KIND unsichtbar - flow | weiche
;; Aeltere Bloecke trugen ID/FROM_ID/TO_ID - gelesen wird beides, geschrieben
;; wird in beide Namen (ssg-attrib-set-on ueberspringt fehlende Attribute).
;;
;; Zurueck nach sps_skel: tro_annotate --read-tros liest die Verbindungsbloecke
;; mit; ein Ende wird erst ueber den Namen (FROM_TRO/TO_TRO), sonst ueber die
;; UID einem Marker zugeordnet. Hinzugefuegte und geloeschte Bloecke werden zu
;; [<csv>.edit_connections] in cfg/tro_overrides.ini. Eine Verbindung loescht
;; man mit ihrem Block (Pfeil-Geometrie allein zaehlt nicht).
;; ;;
;; Warum interne IDs: der sprechende Name darf sich aendern (TRO_EDIT), die ;; Warum interne IDs: der sprechende Name darf sich aendern (TRO_EDIT), die
;; interne ID nicht. Ein DXF-Export kann die Beziehung damit eindeutig ;; interne ID nicht. Ein DXF-Export kann die Beziehung damit eindeutig
@@ -45,10 +54,20 @@
(if wert wert "") (if wert wert "")
) )
;; Erstes nicht leeres Attribut aus einer Liste von Tags (neu vor alt)
(defun con-attrib-1 (ent tags / wert)
(setq wert "")
(foreach tag tags
(if (= wert "") (setq wert (con-attrib ent tag)))
)
wert
)
;; ------------------------------------------------------------ ;; ------------------------------------------------------------
;; Einen TRO-Marker waehlen; liefert (ename interne-ID sprechender-Name) ;; Einen TRO-Marker waehlen; liefert (ename interne-ID sprechender-Name)
;; oder nil bei Abbruch bzw. falschem Block. ;; oder nil bei Abbruch bzw. falschem Block. Marker von sps_skel tragen die
;; interne Nummer in UID und den Namen in ID (aeltere: ID und TRO_ID).
;; ------------------------------------------------------------ ;; ------------------------------------------------------------
(defun con-pick-tro (prompt-key / sel ent bname) (defun con-pick-tro (prompt-key / sel ent bname)
(setq sel (entsel (ssg-text prompt-key))) (setq sel (entsel (ssg-text prompt-key)))
@@ -59,7 +78,9 @@
bname (cdr (assoc 2 (entget ent)))) bname (cdr (assoc 2 (entget ent))))
(if (not (wcmatch bname "TRO_*")) (if (not (wcmatch bname "TRO_*"))
(progn (alert (ssg-textf "con-kein-tro" (list bname))) nil) (progn (alert (ssg-textf "con-kein-tro" (list bname))) nil)
(list ent (con-attrib ent "ID") (con-attrib ent "TRO_ID")) (if (/= (con-attrib ent "UID") "")
(list ent (con-attrib ent "UID") (con-attrib ent "ID"))
(list ent (con-attrib ent "ID") (con-attrib-1 ent '("TRO_ID" "ID"))))
) )
) )
) )
@@ -130,7 +151,10 @@
;; Eindeutige interne ID im ID-Raum von SSG_LIB ;; Eindeutige interne ID im ID-Raum von SSG_LIB
(setq neue-id (ssg-id-format (1+ (ssg-id-max)))) (setq neue-id (ssg-id-format (1+ (ssg-id-max))))
(ssg-attrib-set-on ent-neu (ssg-attrib-set-on ent-neu
(list (cons "ID" neue-id) (list (cons "UID" neue-id)
(cons "ID" neue-id)
(cons "FROM_UID" (cadr von))
(cons "TO_UID" (cadr nach))
(cons "FROM_ID" (cadr von)) (cons "FROM_ID" (cadr von))
(cons "TO_ID" (cadr nach)) (cons "TO_ID" (cadr nach))
(cons "FROM_TRO" (caddr von)) (cons "FROM_TRO" (caddr von))
@@ -183,8 +207,8 @@
) )
) )
(setq alt-from-id (con-attrib ent "FROM_ID") (setq alt-from-id (con-attrib-1 ent '("FROM_UID" "FROM_ID"))
alt-to-id (con-attrib ent "TO_ID") alt-to-id (con-attrib-1 ent '("TO_UID" "TO_ID"))
alt-from (con-attrib ent "FROM_TRO") alt-from (con-attrib ent "FROM_TRO")
alt-to (con-attrib ent "TO_TRO") alt-to (con-attrib ent "TO_TRO")
alt-kind (con-attrib ent "KIND")) alt-kind (con-attrib ent "KIND"))
@@ -199,7 +223,7 @@
) )
) )
(set_tile "blockname" (ssg-textf "con-block" (list bname (con-attrib ent "ID")))) (set_tile "blockname" (ssg-textf "con-block" (list bname (con-attrib-1 ent '("UID" "ID")))))
(set_tile "from_id" alt-from-id) (set_tile "from_id" alt-from-id)
(set_tile "from_tro" alt-from) (set_tile "from_tro" alt-from)
(set_tile "to_id" alt-to-id) (set_tile "to_id" alt-to-id)
@@ -233,7 +257,9 @@
(alert (ssg-text "con-gleiche-id")) (alert (ssg-text "con-gleiche-id"))
(progn (progn
(ssg-attrib-set-on ent (ssg-attrib-set-on ent
(list (cons "FROM_ID" neu-from-id) (list (cons "FROM_UID" neu-from-id)
(cons "TO_UID" neu-to-id)
(cons "FROM_ID" neu-from-id)
(cons "TO_ID" neu-to-id) (cons "TO_ID" neu-to-id)
(cons "FROM_TRO" neu-from) (cons "FROM_TRO" neu-from)
(cons "TO_TRO" neu-to) (cons "TO_TRO" neu-to)
+9 -1
View File
@@ -862,9 +862,17 @@ Verbindungslinien zwischen zwei Punkten/Bausteinen fuer SPS-Dokumentation.
| Befehl | Beschreibung | | Befehl | Beschreibung |
| --- | --- | | --- | --- |
| `c:CONNECTION_INSERT` | Verbindung zwischen zwei Punkten einfuegen (Laenge/Winkel/Mitte werden berechnet) | | `c:CONNECTION_INSERT` | Verbindung zwischen zwei TRO-Markern einfuegen (Laenge/Winkel/Mitte werden berechnet) |
| `c:CONNECTION_EDIT` | Bestehende Verbindung bearbeiten | | `c:CONNECTION_EDIT` | Bestehende Verbindung bearbeiten |
Der Block `CONNECTION_ARROW` traegt `UID`, `FROM_UID`/`TO_UID` (Attribut `UID`
der Marker), `FROM_TRO`/`TO_TRO` (Attribut `ID` der Marker) und `KIND` - die
Namen, die `sps_skel`/`lib/tro_annotate.py` anlegt (bis 2026-10-27 schrieben die
Befehle `ID`/`FROM_ID`/`TO_ID`, die dieser Block nicht hat). Zurueck nach
sps_skel: `tro_annotate --read-tros` vergleicht die Bloecke mit der Ableitung
und schreibt hinzugefuegte/geloeschte Verbindungen nach `cfg/tro_overrides.ini`
(`[<csv>.edit_connections]`). Eine Verbindung loescht man mit ihrem Block.
--- ---
### `DrawPlanquadrate.lsp` – Planquadrat-Raster ### `DrawPlanquadrate.lsp` – Planquadrat-Raster