export_csv: Konfigurationsdialog fuer Export-Modus + Proxy-Sichtbarkeit

Neuer Menuepunkt Konfiguration > CSV-Export (CSV_EXPORT_KONFIG) mit DCL-
Dialog: drei sich ausschliessende Export-Modi (group_vf_gf/all_elements/
separator_track, letzterer neu - nur AS/ES/Separator) ueber die zentrale
Variable *csv-export-modus*, sowie zwei unabhaengige Haken fuer sichtbare
Element-Proxy-Kopien (Zuordnung pruefen / Kopien behalten).
This commit is contained in:
Michael Stangl
2026-09-25 08:45:03 +02:00
parent e7643bf181
commit 69a192b83a
4 changed files with 191 additions and 21 deletions
+112 -21
View File
@@ -50,20 +50,63 @@
;; ueberlebt damit jeden Neustart.
(setq *export-test-override* nil)
;; --- Schalter: rohe Einzelteil-Zeilen statt gruppierter Foerdereinheit/
;; Gefaelleeinheit-Zeilen exportieren ---
;; Default nil = gruppierter Modus (csv:unitmark-aktualisieren fasst Boegen/
;; Streckenelemente/Umlenk-/Motorstation zu je einer Zeile pro
;; Foerdereinheit/Gefaelleeinheit zusammen, die vier pattern_nested_*-
;; Einzelteil-Zeilen bleiben aus dem Export ausgeschlossen). Auf T gesetzt:
;; Verhalten wie vor der Gruppierung - jedes Einzelteil bekommt seine eigene
;; Export-Zeile (csv:collect-export-blocks laesst die pattern_nested_*-
;; Klauseln dann durch). Nur per Lisp-Variable/den beiden Helfern
;; umschaltbar, kein Menuepunkt vorgesehen.
(if (not (boundp '*csv-export-alle-elemente*)) (setq *csv-export-alle-elemente* nil))
(defun csv:export-alle-elemente-p () *csv-export-alle-elemente*)
(defun csv:export-alle-elemente-an () (setq *csv-export-alle-elemente* T) (princ))
(defun csv:export-alle-elemente-aus () (setq *csv-export-alle-elemente* nil) (princ))
;; --- Export-Modus: wie granular VF_n/GF_n-Ketten exportiert werden ---
;; Drei sich gegenseitig ausschliessende Werte (String, ueber CSV_EXPORT_
;; KONFIG/dcl/csv_export_konfig.dcl bedienbar, siehe c:CSV_EXPORT_KONFIG
;; weiter unten):
;; "group_vf_gf" - Default. csv:unitmark-aktualisieren fasst Boegen/
;; Streckenelemente/Umlenk-/Motorstation zu je einer
;; Zeile pro Foerdereinheit/Gefaelleeinheit zusammen,
;; die pattern_nested_*-Einzelteil-Zeilen bleiben aus
;; dem Export ausgeschlossen.
;; "all_elements" - Verhalten wie vor der Gruppierung: jedes Einzelteil
;; (Bogen/Streckenelement/Umlenk-/Motorstation)
;; bekommt seine eigene Export-Zeile
;; (csv:collect-export-blocks laesst die
;; pattern_nested_*-Klauseln durch, csv:unitmark-
;; aktualisieren legt keine neuen Marker an).
;; "separator_track" - Klassisches Verhalten vor beiden Erweiterungen:
;; nur AS/ES/Separator, keine Einzelteile UND keine
;; Foerdereinheit/Gefaelleeinheit-Marker (weder
;; csv:element-proxies-erzeugen noch csv:unitmark-
;; aktualisieren legen dafuer etwas Neues an - siehe
;; csv:export-vorbereiten).
;; Ein ungueltiger Wert wird von csv:export-modus-setzen ignoriert (Modus
;; bleibt unveraendert) statt die Zeichnung in einen unbekannten Zustand zu
;; versetzen.
(if (not (boundp '*csv-export-modus*)) (setq *csv-export-modus* "group_vf_gf"))
(defun csv:export-modus () *csv-export-modus*)
(defun csv:export-modus-setzen (modus)
(if (member modus '("all_elements" "group_vf_gf" "separator_track"))
(setq *csv-export-modus* modus))
(princ)
)
;; Abgeleitete Boolean-Abfragen - bestehende Aufrufstellen (csv:collect-
;; export-blocks/csv:unitmark-aktualisieren) bleiben dadurch unveraendert.
(defun csv:export-alle-elemente-p () (= *csv-export-modus* "all_elements"))
(defun csv:export-separator-track-p () (= *csv-export-modus* "separator_track"))
;; Kurzformen, die die frueheren csv:export-alle-elemente-an/-aus 1:1
;; ersetzen (z.B. fuer Testcode/Kommandozeile).
(defun csv:export-alle-elemente-an () (csv:export-modus-setzen "all_elements"))
(defun csv:export-alle-elemente-aus () (csv:export-modus-setzen "group_vf_gf"))
;; --- Zwei unabhaengige Sichtbarkeits-Haken fuer die temporaeren Element-
;; Proxy-Kopien (siehe csv:element-proxies-loeschen/csv:unitmark-
;; aktualisieren) - ebenfalls ueber CSV_EXPORT_KONFIG bedienbar ---
;; *csv-export-pruef-zuordnung* - laesst die den Foerdereinheit-/
;; Gefaelleeinheit-Markern zugeordneten Element-Kopien zusaetzlich
;; sichtbar, damit in BricsCAD optisch nachvollziehbar ist, welche
;; Einzelteile zu welchem ZZ_UNIT_MARKER-Rechteck zusammengefasst
;; wurden (die Marker selbst bleiben ohnehin immer stehen, persistent
;; wie ZZ_ASES_MARKER).
;; *csv-export-elemente-behalten* - laesst die Element-Proxy-Kopien
;; grundsaetzlich stehen, unabhaengig vom Gruppierungs-Debugging oben.
;; Beide unabhaengig vom bestehenden, als TEMPORAER dokumentierten Debug-
;; Schalter "csv_leave_proxies" (ssg_dbg.lsp) - der bleibt unveraendert und
;; steuert weiterhin zusaetzlich (ODER-verknuepft) sowohl Separator- als
;; auch Element-Proxies.
(if (not (boundp '*csv-export-pruef-zuordnung*)) (setq *csv-export-pruef-zuordnung* nil))
(if (not (boundp '*csv-export-elemente-behalten*)) (setq *csv-export-elemente-behalten* nil))
;; --- Feste Datei-/Skriptnamen dieses Moduls (keine Config, direkt im Code) ---
@@ -1251,11 +1294,22 @@
;; Eigene, minimale Loeschfunktion statt csv:sep-proxies-loeschen wieder-
;; zuverwenden: *cs-sep-fix-by-handle*/*cs-sep-typ-by-handle*/
;; *csv-sepliste-id-by-handle* bleiben separator-/AS-/ES-spezifisch, diese
;; Elemente haben keine Entsprechung davon. Nutzt denselben Debug-Schalter
;; "csv_leave_proxies" wie Separator, fuer konsistentes Debugging.
;; Elemente haben keine Entsprechung davon.
;;
;; Drei unabhaengige Gruende, die Kopien trotzdem stehen zu lassen (ODER-
;; verknuepft): der dialoggesteuerte Haken "Element-Kopien behalten"
;; (*csv-export-elemente-behalten*), der Haken "Zuordnung pruefen"
;; (*csv-export-pruef-zuordnung* - zeigt zusammen mit den stehenbleibenden
;; ZZ_UNIT_MARKER-Rechtecken, welche Kopie zu welcher Einheit gehoert), und
;; der bestehende, als TEMPORAER dokumentierte Debug-Schalter
;; "csv_leave_proxies" (ssg_dbg.lsp) - dieser bleibt unveraendert und
;; steuert weiterhin zusaetzlich auch die Separator-Proxies
;; (csv:sep-proxies-loeschen).
(defun csv:element-proxies-loeschen (proxy-liste / behalten)
(setq behalten (and (car (atoms-family 1 '("DBG-SCHALTER-P")))
(dbg-schalter-p "csv_leave_proxies")))
(setq behalten (or *csv-export-elemente-behalten*
*csv-export-pruef-zuordnung*
(and (car (atoms-family 1 '("DBG-SCHALTER-P")))
(dbg-schalter-p "csv_leave_proxies"))))
(if behalten
(princ (strcat "\n[EXPORT] csv_leave_proxies=1: "
(itoa (length proxy-liste))
@@ -2352,7 +2406,11 @@
ergebnis neu uebernommen verwaist)
(setq neu 0 uebernommen 0 verwaist 0)
(setq bestand (csv:unitmark-sammeln))
(if (not (csv:export-alle-elemente-p))
;; Neue Marker nur im GENAU gruppierten Modus anlegen - sowohl
;; "all_elements" als auch "separator_track" wollen keine ZZ_UNIT_MARKER,
;; der Aufraeum-Pass unten (verwaiste Marker loeschen) laeuft in JEDEM
;; Modus unbedingt weiter.
(if (= *csv-export-modus* "group_vf_gf")
(progn
(setq blockname (csv:unitmark-blockdef-sicherstellen))
(if blockname
@@ -2659,8 +2717,10 @@
;; temporaere Kopien ersetzen - siehe csv:element-proxies-erzeugen. MUSS wie
;; sep-proxies VOR ssg-id-check-all stehen, damit die frischen Kopien in
;; dessen Lauf mit nummeriert werden (siehe ssg-id-collect-blocks,
;; ssg_id.lsp).
(setq element-proxies (csv:element-proxies-erzeugen))
;; ssg_id.lsp). Im Modus "separator_track" werden gar keine Element-Kopien
;; erzeugt - dieser Modus kennt nur AS/ES/Separator.
(setq element-proxies
(if (csv:export-separator-track-p) nil (csv:element-proxies-erzeugen)))
;; Foerdereinheit-/Gefaelleeinheit-Marker (ZZ_UNIT_MARKER) aus den drei
;; obigen Proxy-/Marker-Listen bauen - MUSS nach ihnen (braucht ihre
;; Weltpositionen) und VOR ssg-id-check-all stehen (frische Marker werden
@@ -2892,6 +2952,37 @@
)
;; --- CSV_EXPORT_KONFIG: Dialog fuer Export-Modus + Proxy-Sichtbarkeit ---
(defun csv:export-konfig-init ( / idx)
(setq idx
(cond
((= *csv-export-modus* "all_elements") "1")
((= *csv-export-modus* "separator_track") "2")
(t "0")))
(set_tile "modus" idx)
(set_tile "pruef_zuordnung" (if *csv-export-pruef-zuordnung* "1" "0"))
(set_tile "elemente_behalten" (if *csv-export-elemente-behalten* "1" "0"))
)
(defun csv:export-konfig-accept ( / idx)
(setq idx (get_tile "modus"))
(csv:export-modus-setzen
(cond ((= idx "1") "all_elements") ((= idx "2") "separator_track") (t "group_vf_gf")))
(setq *csv-export-pruef-zuordnung* (= (get_tile "pruef_zuordnung") "1"))
(setq *csv-export-elemente-behalten* (= (get_tile "elemente_behalten") "1"))
)
(defun c:CSV_EXPORT_KONFIG ()
(ssg-dialog-run
(strcat (getenv "DXFM_DCL") "/csv_export_konfig.dcl")
"csv_export_konfig"
'csv:export-konfig-init
'csv:export-konfig-accept
)
(princ)
)
;; ============================================================
;; OMNIFLO HOEHE/DREHUNG AKTUALISIEREN
;; ============================================================
+51
View File
@@ -0,0 +1,51 @@
// ============================================================
// csv_export_konfig.dcl - CSV-Export Konfiguration (c:CSV_EXPORT_KONFIG,
// export.lsp). Steuert *csv-export-modus* (drei sich gegenseitig
// ausschliessende Radio-Buttons im selben boxed_radio_column) sowie die
// zwei unabhaengigen Sichtbarkeits-Haken fuer temporaere Element-Proxy-
// Kopien (*csv-export-pruef-zuordnung*/*csv-export-elemente-behalten*).
//
// Radio-Button-Labels sind FEST (Deutsch) - set_tile kann bei einem
// radio_button nur den Zustand, nicht das Label aendern (siehe Kommentar
// dcl/variofoerderer.dcl:16-23, gleiche Einschraenkung hier).
// ============================================================
csv_export_konfig : dialog {
label = "CSV-Export Konfiguration";
: boxed_radio_column {
label = "Export-Modus:";
key = "modus";
: radio_button {
key = "modus_group";
label = "Gruppiert: Foerdereinheit/Gefaelleeinheit (Standard)";
value = "1";
}
: radio_button {
key = "modus_all";
label = "Alle Einzelelemente (Boegen, Strecken, Umlenk-/Motorstation)";
}
: radio_button {
key = "modus_sep";
label = "Nur Separator-Spur (AS/ES/Separator, ohne Streckenelemente)";
}
}
spacer;
: boxed_column {
label = "Element-Proxy-Kopien (Debug)";
: toggle {
key = "pruef_zuordnung";
label = "Zuordnung pruefen (Element-Kopien zusaetzlich sichtbar lassen)";
}
: toggle {
key = "elemente_behalten";
label = "Element-Kopien nach Export behalten (nicht loeschen)";
}
}
ok_cancel;
}
+1
View File
@@ -132,6 +132,7 @@
[Alle Bloecke auf 3D]^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_ALL_3D
[Sprache]^C^C(ssg-ensure "SSG_LIB_Commands") SSG_SPRACHE
[Planquadrate an/aus]^C^C(ssg-ensure "DrawPlanquadrate") PLANQUADRATE_TOGGLE
[<-CSV-Export]^C^C(ssg-ensure "export") CSV_EXPORT_KONFIG
[<-Konfiguration Schliessen]^C^C
[->Tests]
[alle Tests ausfuehren und exportieren]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) SSG_RUN_ALL_TESTS_EXPORT
+27
View File
@@ -491,6 +491,33 @@
(setq _elem-b (list 'PROXY_B 'WRAPPER "BOGEN" '(2.0 0.0 0.0)))
(setq _zuord2 (csv:element-unit-zuordnung _spans-proj _sep-proj (list _elem-a _elem-b)))
(tu-eq "csv:element-unit-zuordnung/sortiert" (list _elem-b _elem-a) (nth 0 _zuord2))
;; --- csv:export-modus-setzen / -p-Praedikate: 3 Modi + Ungueltig-Schutz --
;; Bestehenden Modus sichern/wiederherstellen, damit dieser Testblock keine
;; Seiteneffekte auf nachfolgende Tests oder eine laufende Sitzung hat.
(setq _modus-alt *csv-export-modus*)
(csv:export-modus-setzen "all_elements")
(tu-eq "csv:export-modus-setzen/all_elements" "all_elements" *csv-export-modus*)
(tu-true "csv:export-alle-elemente-p/all_elements" (csv:export-alle-elemente-p))
(tu-nil "csv:export-separator-track-p/all_elements" (csv:export-separator-track-p))
(csv:export-modus-setzen "group_vf_gf")
(tu-eq "csv:export-modus-setzen/group_vf_gf" "group_vf_gf" *csv-export-modus*)
(tu-nil "csv:export-alle-elemente-p/group_vf_gf" (csv:export-alle-elemente-p))
(tu-nil "csv:export-separator-track-p/group_vf_gf" (csv:export-separator-track-p))
(csv:export-modus-setzen "separator_track")
(tu-eq "csv:export-modus-setzen/separator_track" "separator_track" *csv-export-modus*)
(tu-nil "csv:export-alle-elemente-p/separator_track" (csv:export-alle-elemente-p))
(tu-true "csv:export-separator-track-p/separator_track" (csv:export-separator-track-p))
;; Ungueltiger Wert wird ignoriert - Modus bleibt auf dem zuletzt gueltig
;; gesetzten Stand (hier "separator_track").
(csv:export-modus-setzen "unbekannt")
(tu-eq "csv:export-modus-setzen/ungueltig-ignoriert" "separator_track" *csv-export-modus*)
(csv:export-modus-setzen _modus-alt)
)