Etage: Batch-2D/3D-Umschaltung + Nachruest-Befehl fuer Bestandsbloecke

vf-konvertiere-ent waehlt die Einfuege-Funktion jetzt per XDATA-Typ aus der Registry (standard/etage) statt fest variofoerderer-einfuegen -> SSG_DIM_SWITCH schaltet auch Etage-Bloecke um.

Neuer Befehl VARIOFOERDERER_NACHRUESTEN (Alias VF_NACHRUESTEN, + Menueeintrag): markiert bestehende, vor der Marker-Einfuehrung gebaute VF_n-Bloecke nachtraeglich mit SSG_VF_EDIT (Typ aus Attributen erkannt, Baurichtung hz abgefragt) - danach editier- und dim-umschaltbar. Schreibt nur XDATA, keine Geometrieaenderung.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-03 16:34:48 +02:00
parent 7f42ac2701
commit 046d34c4aa
3 changed files with 76 additions and 10 deletions
+74 -9
View File
@@ -1096,17 +1096,21 @@
)
)
;; Nicht-interaktive Umwandlung EINES bestehenden Standard-VF-Blocks in die
;; Zieldimension (fuer die Batch-Umschaltung "Alle auf 2D/3D"). Liest alle
;; Parameter aus XDATA/Attributen (ohne Winkel-Dialog), erzwingt die Zieldim
;; per Override und baut am selben Startpunkt neu auf. Rueckgabe: T/nil.
(defun vf-konvertiere-ent (ent ziel-dim / ed bname xd attribs startpunkt hz
;; Nicht-interaktive Umwandlung EINES bestehenden VF-Blocks (Standard ODER
;; Etage) in die Zieldimension (fuer die Batch-Umschaltung "Alle auf 2D/3D").
;; Liest alle Parameter aus XDATA/Attributen (ohne Winkel-Dialog), erzwingt die
;; Zieldim per Override und baut am selben Startpunkt neu auf. Der Typ-Marker
;; der XDATA ("standard"/"etage") waehlt die passende Einfuege-Funktion aus der
;; Typ-Registry (beide haben dieselbe Signatur). Rueckgabe: T/nil.
(defun vf-konvertiere-ent (ent ziel-dim / ed bname xd typ einfuege-fn attribs startpunkt hz
deltaL deltaH richtung seite best-winkel L_GF_m-teile
L_GF1 L_GF2 L_VF hoehe-von hoehe-bis lastEnt vf-insert vf-nummer
geruest-einzelmodul geruest-typ motorseite)
(setq ed (entget ent) bname (cdr (assoc 2 ed)))
(setq xd (vfs-xdata-lesen ent))
(if (and (wcmatch bname "VF_*") xd (= (car xd) "standard"))
(setq typ (if xd (car xd)))
(setq einfuege-fn (if typ (nth 2 (assoc typ *vf-typ-registry*))))
(if (and (wcmatch bname "VF_*") (member typ '("standard" "etage")) einfuege-fn)
(progn
(setq attribs (ssg-attrib-read ent))
(setq startpunkt (cdr (assoc 10 ed)))
@@ -1132,14 +1136,15 @@
(setq *vf-motorseite* motorseite)
(entdel ent)
(setq lastEnt (vf-lastent-ohne-attribute))
(variofoerderer-einfuegen deltaL deltaH richtung best-winkel L_GF1 L_GF2 L_VF startpunkt seite hz)
(apply einfuege-fn
(list deltaL deltaH richtung best-winkel L_GF1 L_GF2 L_VF startpunkt seite hz))
(setq vf-nummer (vf-next-number))
(setq vf-insert
(vf-block-erstellen "standard" seite vf-nummer 0
(vf-block-erstellen typ seite vf-nummer 0
hoehe-von hoehe-bis deltaH deltaL L_VF L_GF1 L_GF2
richtung best-winkel startpunkt lastEnt hz
geruest-einzelmodul geruest-typ))
(if vf-insert (vfs-xdata-schreiben vf-insert hz))
(if vf-insert (vf-edit-xdata-schreiben vf-insert typ hz))
(setq *ssg-ils-dim* nil)
(setq *vf-motorseite* nil)
(if vf-insert T nil))
@@ -1259,6 +1264,66 @@
(princ)
)
;; ============================================================
;; VARIOFOERDERER_NACHRUESTEN - Bestandsbloecke markieren
;; ============================================================
;; Versieht bestehende VF_n-Bloecke, die noch KEINEN SSG_VF_EDIT-Marker tragen
;; (vor Einfuehrung der Dialog-/Edit-Unterstuetzung erzeugt), nachtraeglich mit
;; dem Marker (Typ + Baurichtung hz). Danach sind sie per Doppelklick editierbar
;; (c:VARIOFOERDERER_EDIT) und per SSG_DIM_SWITCH 2D/3D-umschaltbar
;; (vf-konvertiere-ent).
;;
;; Es wird NUR die XDATA geschrieben - keine Geometrie veraendert. Der Typ wird
;; aus den Attributen erkannt (Etage traegt GF_Bogen_R_60/L_60, sonst Standard).
;; Die Baurichtung hz laesst sich NICHT aus den Attributen rekonstruieren und
;; wird deshalb pro Block abgefragt (Default = zuletzt eingegebener Wert; bei
;; Neuanlage 0). Wer hz nicht kennt: der Wert steht in der urspruenglichen
;; Bau-Eingabe (z.B. mubea.json "hz") bzw. ergibt sich aus der Ausrichtung.
;; Bereits markierte Bloecke und Nicht-VF-Bloecke werden uebersprungen.
(defun c:VARIOFOERDERER_NACHRUESTEN ( / ss i ent ed bname attribs xd typ hz
n-neu n-skip default-hz)
(ssg-start "VARIOFOERDERER_NACHRUESTEN" nil)
(princ "\n=== VF-Bestandsbloecke nachruesten (SSG_VF_EDIT-Marker) ===")
(setq ss (ssget '((0 . "INSERT") (2 . "VF_*"))))
(if (null ss)
(progn
(princ "\nKeine VF_n-Bloecke ausgewaehlt - abgebrochen.")
(ssg-end)
(exit)))
(setq i 0 n-neu 0 n-skip 0 default-hz 0.0)
(while (< i (sslength ss))
(setq ent (ssname ss i))
(setq ed (entget ent) bname (cdr (assoc 2 ed)))
(setq xd (vfs-xdata-lesen ent))
(cond
;; Schon markiert (standard/etage) -> ueberspringen
((and xd (member (car xd) '("standard" "etage")))
(princ (strcat "\n " bname ": bereits markiert (" (car xd) ") - uebersprungen"))
(setq n-skip (1+ n-skip)))
(t
(setq attribs (ssg-attrib-read ent))
;; Typ-Erkennung: Etage traegt die Gefaellebogen-Zaehler GF_Bogen_R/L_60.
(setq typ
(if (or (assoc "GF_Bogen_R_60" attribs) (assoc "GF_Bogen_L_60" attribs))
"etage" "standard"))
(princ (strcat "\n " bname ": erkannt als Typ '" typ "'"))
(setq hz (getreal (strcat "\n Baurichtung hz in Grad [" (rtos default-hz 2 1) "]: ")))
(if (null hz) (setq hz default-hz))
(setq default-hz hz)
(vf-edit-xdata-schreiben ent typ hz)
(princ (strcat " -> markiert (hz=" (rtos hz 2 1) ")"))
(setq n-neu (1+ n-neu)))
)
(setq i (1+ i))
)
(princ (strcat "\n=== Fertig: " (itoa n-neu) " markiert, " (itoa n-skip) " uebersprungen ==="))
(ssg-end)
(princ)
)
;; Kurz-Alias
(defun c:VF_NACHRUESTEN () (c:VARIOFOERDERER_NACHRUESTEN))
;; ============================================================
;; REGISTRIERUNG
;; ============================================================