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
|
;; draw-module verwendet eine vorhandene Definition KREISEL_n_TYP_ABSTAND
|
||||||
;; wieder (Edit/Redraw) - ein geaenderter Name kaeme sonst nie in die
|
;; wieder (Edit/Redraw) - ein geaenderter Name kaeme sonst nie in die
|
||||||
;; Beschriftung. Wirkt auf alle Referenzen dieser Definition.
|
;; 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))
|
(setq e (tblobjname "BLOCK" bname))
|
||||||
(while (setq e (entnext e))
|
(while (setq e (entnext e))
|
||||||
(setq ed (entget e))
|
(setq ed (entget e))
|
||||||
(if (and (= (cdr (assoc 0 ed)) "TEXT")
|
(if (and (= (cdr (assoc 0 ed)) "TEXT")
|
||||||
(/= (cdr (assoc 1 ed)) textStr))
|
(or (/= (cdr (assoc 1 ed)) textStr)
|
||||||
(entmod (subst (cons 1 textStr) (assoc 1 ed) ed))
|
(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
|
;; 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))
|
(setq textStr (kreisel-label-text nummer name kreiselart abstand))
|
||||||
|
|
||||||
;; Geometrie berechnen
|
;; Geometrie berechnen
|
||||||
@@ -258,8 +279,8 @@
|
|||||||
(cons 10 insertPoint)
|
(cons 10 insertPoint)
|
||||||
(cons 40 textHoehe)
|
(cons 40 textHoehe)
|
||||||
(cons 1 textStr)
|
(cons 1 textStr)
|
||||||
(cons 50 0.0)
|
(cons 50 (kreisel-grad->rad winkel))
|
||||||
(cons 7 "Kreisel_Arial") ;; Arial Textstil
|
(cons 7 "Kreisel_Arial") ;; Arial Textstil
|
||||||
(cons 62 *kreisel-beschriftung-farbe*)
|
(cons 62 *kreisel-beschriftung-farbe*)
|
||||||
'(72 . 1) ;; Horizontale Ausrichtung: Mitte
|
'(72 . 1) ;; Horizontale Ausrichtung: Mitte
|
||||||
'(73 . 2) ;; Vertikale Ausrichtung: Mitte
|
'(73 . 2) ;; Vertikale Ausrichtung: Mitte
|
||||||
@@ -561,8 +582,9 @@
|
|||||||
|
|
||||||
;; BESCHRIFTUNG einfügen (vor Block-Erzeugung, damit sie im Block ist)
|
;; BESCHRIFTUNG einfügen (vor Block-Erzeugung, damit sie im Block ist)
|
||||||
(kreisel-make-label kreisel-nummer abstand (if is-pin "PIN" "STANDARD")
|
(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
|
;; Unsichtbare Attribut-Definitionen erzeugen
|
||||||
(ssg-attrib-make-defs *kreisel-attrib-defs* 50.0)
|
(ssg-attrib-make-defs *kreisel-attrib-defs* 50.0)
|
||||||
|
|
||||||
@@ -593,7 +615,8 @@
|
|||||||
;; Beschriftung der wiederverwendeten Definition an den Namen anpassen
|
;; Beschriftung der wiederverwendeten Definition an den Namen anpassen
|
||||||
(kreisel-label-aktualisieren bname
|
(kreisel-label-aktualisieren bname
|
||||||
(kreisel-label-text kreisel-nummer (cdr (assoc "Bezeichnung" attribs))
|
(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
|
;; ebenso die Spiegelung der Drehrichtungspfeile
|
||||||
(kreisel-pfeil-aktualisieren bname (cdr (assoc "DREHRICHTUNG" attribs)))
|
(kreisel-pfeil-aktualisieren bname (cdr (assoc "DREHRICHTUNG" attribs)))
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1272,6 +1272,14 @@
|
|||||||
(tu-eq "kreisel-label-text/leer"
|
(tu-eq "kreisel-label-text/leer"
|
||||||
"KREISEL 3: PIN_4000" (kreisel-label-text 3 "" "PIN" 4000.0))
|
"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)
|
;; Eckrad-Dialog: Eingaben -> (attribs . rotation)
|
||||||
(setq _e (eckrad-dialog-werte '(("NUMMER" . "3") ("HOEHE" . "0") ("DREHRICHTUNG" . "UZS"))
|
(setq _e (eckrad-dialog-werte '(("NUMMER" . "3") ("HOEHE" . "0") ("DREHRICHTUNG" . "UZS"))
|
||||||
"Eck3" "2500" "-90" "1" "0" "1"))
|
"Eck3" "2500" "-90" "1" "0" "1"))
|
||||||
|
|||||||
Reference in new issue
Block a user