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:
+112
-21
@@ -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
|
||||
;; ============================================================
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user