feat: Kreisel-Beschriftung von unten/links lesbar (180 Grad Drehung bei SM/MS)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Michael StanglandClaude Sonnet 5.5 committed 2026-11-02 10:20:45 +01:00
1 parent afc5dce13a
commit d2318bc3c6
2 files changed
+39 -8

No files matched your search

+31 -8
View File
@@ -208,19 +208,40 @@
;; draw-module verwendet eine vorhandene Definition KREISEL_n_TYP_ABSTAND
;; wieder (Edit/Redraw) - ein geaenderter Name kaeme sonst nie in die
;; Beschriftung. Wirkt auf alle Referenzen dieser Definition.
(defun kreisel-label-aktualisieren (bname textStr / e ed)
(defun kreisel-label-aktualisieren (bname textStr winkel / e ed)
(setq e (tblobjname "BLOCK" bname))
(while (setq e (entnext e))
(setq ed (entget e))
(if (and (= (cdr (assoc 0 ed)) "TEXT")
(/= (cdr (assoc 1 ed)) textStr))
(entmod (subst (cons 1 textStr) (assoc 1 ed) ed))
(or (/= (cdr (assoc 1 ed)) textStr)
(not (equal (cdr (assoc 50 ed)) (kreisel-grad->rad winkel) 1e-6))))
(progn
(setq ed (subst (cons 1 textStr) (assoc 1 ed) ed))
(setq ed (subst (cons 50 (kreisel-grad->rad winkel)) (assoc 50 ed) ed))
(entmod ed)
)
)
)
)
(defun kreisel-grad->rad (grad)
(* grad (/ pi 180.0))
)
;; Textwinkel INNERHALB der Blockdefinition (Grad, reiner Kern, getestet).
;; Der Block wird mit `rotation` eingefuegt; die Schrift soll in der Welt von
;; unten oder von links lesbar sein, also Weltwinkel in [270,360) und [0,90).
;; Liegt der Block im Bereich [90,270) (z.B. horizontal SM / vertikal MS),
;; wird die Schrift um 180 Grad um ihren Mittelpunkt gedreht (Text ist
;; mittig ausgerichtet, die Mitte bleibt daher stehen).
(defun kreisel-label-winkel (rotation / w)
(setq w (- rotation (* 360.0 (fix (/ rotation 360.0)))))
(if (< w 0.0) (setq w (+ w 360.0)))
(if (and (>= w 89.999 ) (< w 269.999)) 180.0 0.0)
)
;; Beschriftungstext erzeugen
(defun kreisel-make-label (nummer abstand kreiselart name / textStr insertPoint radius mitteX mitteY textHoehe lay)
(defun kreisel-make-label (nummer abstand kreiselart name winkel / textStr insertPoint radius mitteX mitteY textHoehe lay)
(setq textStr (kreisel-label-text nummer name kreiselart abstand))
;; Geometrie berechnen
@@ -258,8 +279,8 @@
(cons 10 insertPoint)
(cons 40 textHoehe)
(cons 1 textStr)
(cons 50 0.0)
(cons 7 "Kreisel_Arial") ;; Arial Textstil
(cons 50 (kreisel-grad->rad winkel))
(cons 7 "Kreisel_Arial") ;; Arial Textstil
(cons 62 *kreisel-beschriftung-farbe*)
'(72 . 1) ;; Horizontale Ausrichtung: Mitte
'(73 . 2) ;; Vertikale Ausrichtung: Mitte
@@ -561,7 +582,8 @@
;; BESCHRIFTUNG einfügen (vor Block-Erzeugung, damit sie im Block ist)
(kreisel-make-label kreisel-nummer abstand (if is-pin "PIN" "STANDARD")
(cdr (assoc "Bezeichnung" attribs)))
(cdr (assoc "Bezeichnung" attribs))
(kreisel-label-winkel rotation))
;; Unsichtbare Attribut-Definitionen erzeugen
(ssg-attrib-make-defs *kreisel-attrib-defs* 50.0)
@@ -593,7 +615,8 @@
;; Beschriftung der wiederverwendeten Definition an den Namen anpassen
(kreisel-label-aktualisieren bname
(kreisel-label-text kreisel-nummer (cdr (assoc "Bezeichnung" attribs))
(if is-pin "PIN" "STANDARD") abstand))
(if is-pin "PIN" "STANDARD") abstand)
(kreisel-label-winkel rotation))
;; ebenso die Spiegelung der Drehrichtungspfeile
(kreisel-pfeil-aktualisieren bname (cdr (assoc "DREHRICHTUNG" attribs)))
)
+8
View File
@@ -1272,6 +1272,14 @@
(tu-eq "kreisel-label-text/leer"
"KREISEL 3: PIN_4000" (kreisel-label-text 3 "" "PIN" 4000.0))
;; Beschriftungswinkel: von unten oder links lesbar
(tu-eq "kreisel-label-winkel/0" 0.0 (kreisel-label-winkel 0.0))
(tu-eq "kreisel-label-winkel/90" 180.0 (kreisel-label-winkel 90.0))
(tu-eq "kreisel-label-winkel/180" 180.0 (kreisel-label-winkel 180.0))
(tu-eq "kreisel-label-winkel/270" 0.0 (kreisel-label-winkel 270.0))
(tu-eq "kreisel-label-winkel/-90" 0.0 (kreisel-label-winkel -90.0))
(tu-eq "kreisel-label-winkel/450" 180.0 (kreisel-label-winkel 450.0))
;; Eckrad-Dialog: Eingaben -> (attribs . rotation)
(setq _e (eckrad-dialog-werte '(("NUMMER" . "3") ("HOEHE" . "0") ("DREHRICHTUNG" . "UZS"))
"Eck3" "2500" "-90" "1" "0" "1"))