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:
@@ -93,7 +93,7 @@ Detaillierte Dokumentation aller Funktionen und Befehle: siehe `Lisp/README.md`.
|
||||
| `ssg_dialog.lsp` | - | DCL-Dialog-Vorlagen und Hilfsfunktionen |
|
||||
| `ssg_layer.lsp` | - | Layer-Verwaltung |
|
||||
| `KreiselInsert.lsp` | KreiselInsert, KreiselConnect, KreiselRedraw, KreiselQuick, KreiselEdit, KreiselParams, KreiselLabelSetup, KreiselLabelPos, KreiselLabelHoehe, ILS_Eckrad | ILS Kreisel und Eckrad komplett in AutoLISP |
|
||||
| `VarioFoerderer.lsp` (Wrapper fuer `vf_core.lsp`/`vf_standard.lsp`/`vf_etage.lsp`/`vf_linienzug.lsp`) | FOERDERANLAGE, VARIOFOERDERER_EDIT, Vario_Kette_Merge | Vario-Foerderanlagen Generator (Typen Standard/Etage/Linienzug); Standard- UND Etage-Typ: Werteingabe per DCL-Dialog (`vfs-standard-dialog-ablauf` in vf_standard.lsp bzw. `vfe-etage-dialog-ablauf` in vf_etage.lsp, beide nutzen dieselben Dialoge `vfs-dialog-eingabe-basis`/`vfs-dialog-winkel-verteilung`); Doppelklick auf VF_n-Block ruft VARIOFOERDERER_EDIT, das per SSG_VF_EDIT-XDATA-Marker ("standard"/"etage") in den passenden Neuaufbau-Zweig dispatcht (`vfe-edit-ent` fuer Etage); Linienzug-/Altbestand-Bloecke ohne Marker werden abgewiesen; `Vario_Kette_Merge` (in vf_linienzug.lsp) fuehrt mehrere einzeln gebaute VF_n-Bloecke ab einem gewaehlten Start-Baustein ueber die reale KS_AUS->KS_EIN-Nachbarschaft zu einem Gesamt-Block zusammen (aggregierte Attribute, Luecken-Erkennung) |
|
||||
| `VarioFoerderer.lsp` (Wrapper fuer `vf_core.lsp`/`vf_standard.lsp`/`vf_etage.lsp`/`vf_linienzug.lsp`) | FOERDERANLAGE, VARIOFOERDERER_EDIT, VARIOFOERDERER_NACHRUESTEN, Vario_Kette_Merge | Vario-Foerderanlagen Generator (Typen Standard/Etage/Linienzug); Standard- UND Etage-Typ: Werteingabe per DCL-Dialog (`vfs-standard-dialog-ablauf` in vf_standard.lsp bzw. `vfe-etage-dialog-ablauf` in vf_etage.lsp, beide nutzen dieselben Dialoge `vfs-dialog-eingabe-basis`/`vfs-dialog-winkel-verteilung`); Doppelklick auf VF_n-Block ruft VARIOFOERDERER_EDIT, das per SSG_VF_EDIT-XDATA-Marker ("standard"/"etage") in den passenden Neuaufbau-Zweig dispatcht (`vfe-edit-ent` fuer Etage); Linienzug-/Altbestand-Bloecke ohne Marker werden abgewiesen; `Vario_Kette_Merge` (in vf_linienzug.lsp) fuehrt mehrere einzeln gebaute VF_n-Bloecke ab einem gewaehlten Start-Baustein ueber die reale KS_AUS->KS_EIN-Nachbarschaft zu einem Gesamt-Block zusammen (aggregierte Attribute, Luecken-Erkennung) |
|
||||
| `Gefaellestrecke.lsp` | GEFAELLESTRECKE, GEFAELLESTRECKE_EDIT | Gefaelle-Foerderanlage (AUS -> Staustrecke skaliert -> Separator -> EIN); Modus 1 per DCL-Dialog (Einfuegehoehe, Element-Winkel 30/90); Doppelklick auf GF_n-Block ruft GEFAELLESTRECKE_EDIT (Dialog vorbelegt, Neuaufbau) |
|
||||
| `export.lsp` | EXPORTSIVAS, EXPORTCSV, OMNI_UPDATE_ATTRIBS | JSON-Sammlung und Python-Export (Omniflo-Merkmale/Sum-Zeile via lib/export_csv.py) |
|
||||
| `OmniModulInsert.lsp` | OMNI_LOAD, OMNI_APB_*, OMNI_W*_*, OMNI_AP60/AP110, OMNI_TEF_*, OMNI_TV_*, OMNI_APBW_*, OMNI_EDIT | Omniflo-Komponenten: Boegen, Weichen, Verbinder, Transferwagen, Edit-Dialog |
|
||||
|
||||
+74
-9
@@ -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
|
||||
;; ============================================================
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
[VarioFoerderer]^C^CVarioFoerderer
|
||||
[EtageVarioFoerderer]^C^CETAGEVARIOFOERDERER
|
||||
[Vario_Kette_Merge]^C^C(ssg-ensure "VarioFoerderer") Vario_Kette_Merge
|
||||
[VarioFoerderer nachruesten (Marker)]^C^C(ssg-ensure "VarioFoerderer") VARIOFOERDERER_NACHRUESTEN
|
||||
[--]
|
||||
[~90 Kurve links angetrieben Aussen]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_K90LA
|
||||
[~90 Kurve rechts angetrieben Aussen]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_K90RA
|
||||
|
||||
Reference in New Issue
Block a user