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:
1 parent
afc5dce13a
commit
d2318bc3c6
2 files changed
+40
-9
No files matched your search
+32
-9
@@ -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,8 +582,9 @@
|
||||
|
||||
;; 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)))
|
||||
)
|
||||
|
||||
@@ -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"))
|
||||
|
||||
Reference in new issue
Block a user