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_dialog.lsp` | - | DCL-Dialog-Vorlagen und Hilfsfunktionen |
|
||||||
| `ssg_layer.lsp` | - | Layer-Verwaltung |
|
| `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 |
|
| `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) |
|
| `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) |
|
| `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 |
|
| `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
|
;; Nicht-interaktive Umwandlung EINES bestehenden VF-Blocks (Standard ODER
|
||||||
;; Zieldimension (fuer die Batch-Umschaltung "Alle auf 2D/3D"). Liest alle
|
;; Etage) in die Zieldimension (fuer die Batch-Umschaltung "Alle auf 2D/3D").
|
||||||
;; Parameter aus XDATA/Attributen (ohne Winkel-Dialog), erzwingt die Zieldim
|
;; Liest alle Parameter aus XDATA/Attributen (ohne Winkel-Dialog), erzwingt die
|
||||||
;; per Override und baut am selben Startpunkt neu auf. Rueckgabe: T/nil.
|
;; Zieldim per Override und baut am selben Startpunkt neu auf. Der Typ-Marker
|
||||||
(defun vf-konvertiere-ent (ent ziel-dim / ed bname xd attribs startpunkt hz
|
;; 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
|
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
|
L_GF1 L_GF2 L_VF hoehe-von hoehe-bis lastEnt vf-insert vf-nummer
|
||||||
geruest-einzelmodul geruest-typ motorseite)
|
geruest-einzelmodul geruest-typ motorseite)
|
||||||
(setq ed (entget ent) bname (cdr (assoc 2 ed)))
|
(setq ed (entget ent) bname (cdr (assoc 2 ed)))
|
||||||
(setq xd (vfs-xdata-lesen ent))
|
(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
|
(progn
|
||||||
(setq attribs (ssg-attrib-read ent))
|
(setq attribs (ssg-attrib-read ent))
|
||||||
(setq startpunkt (cdr (assoc 10 ed)))
|
(setq startpunkt (cdr (assoc 10 ed)))
|
||||||
@@ -1132,14 +1136,15 @@
|
|||||||
(setq *vf-motorseite* motorseite)
|
(setq *vf-motorseite* motorseite)
|
||||||
(entdel ent)
|
(entdel ent)
|
||||||
(setq lastEnt (vf-lastent-ohne-attribute))
|
(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-nummer (vf-next-number))
|
||||||
(setq vf-insert
|
(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
|
hoehe-von hoehe-bis deltaH deltaL L_VF L_GF1 L_GF2
|
||||||
richtung best-winkel startpunkt lastEnt hz
|
richtung best-winkel startpunkt lastEnt hz
|
||||||
geruest-einzelmodul geruest-typ))
|
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 *ssg-ils-dim* nil)
|
||||||
(setq *vf-motorseite* nil)
|
(setq *vf-motorseite* nil)
|
||||||
(if vf-insert T nil))
|
(if vf-insert T nil))
|
||||||
@@ -1259,6 +1264,66 @@
|
|||||||
(princ)
|
(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
|
;; REGISTRIERUNG
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
[VarioFoerderer]^C^CVarioFoerderer
|
[VarioFoerderer]^C^CVarioFoerderer
|
||||||
[EtageVarioFoerderer]^C^CETAGEVARIOFOERDERER
|
[EtageVarioFoerderer]^C^CETAGEVARIOFOERDERER
|
||||||
[Vario_Kette_Merge]^C^C(ssg-ensure "VarioFoerderer") Vario_Kette_Merge
|
[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 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
|
[~90 Kurve rechts angetrieben Aussen]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_K90RA
|
||||||
|
|||||||
Reference in New Issue
Block a user