export: Kettenbausteine ueber KS verketten, Einheiten neu gruppieren

K1/K2 und Boundingbox je Export-Zeile folgen jetzt dem echten
Kettenbaustein statt seinem Stellvertreter:
- Separator (all_elements): KS + bbox des 300-mm-Trennstegs statt des
  Sensor-Symbols; separator_track/group_vf_gf behalten das Symbol
- AS/ES (all_elements, group_vf_gf): KS + bbox des AS-/ES-Elements statt
  des 200x200-Markers ohne K
- gemeinsamer Kern csv:ks-welt-punkte; VF/GF-Wrapper-K1/K2 = K1 des AS
  bzw. K2 des ES

Gruppierter Export neu (sepliste-/XDATA-Algorithmus entfernt):
- Bausteine je Wrapper als Vektorkette K2 -> K1 ordnen (Start am AS)
- Foerdereinheit = Separator vor der Umlenkstation bis Motorstation,
  alles dazwischen Gefaelleeinheit (csv:kette-einheiten, Unit-Tests)
- je Einheit ein temporaerer Proxy mit 3D-Boundingbox, K1/K2, Laenge und
  Anzahl Boegen; wird nach dem Export geloescht (ausser csv_leave_proxies)
- IDs neuer Export-Objekte entlang der Kette AS -> ES aufsteigend

Weiteres:
- ssg-make-layer ohne _LAYER-Befehl fuer bestehende Layer (Konsole)
- einheitliche, zweisprachige Meldungen fuer behaltene Hilfskopien
- bin/show_exportcsv.bat: Export-CSV als Boundingbox-SVG (sps_skel)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Michael Stangl
2026-09-25 20:25:29 +02:00
co-authored by Claude Opus 5.5
parent bc481de901
commit 394d476d56
13 changed files with 1017 additions and 1037 deletions
+663 -764
View File
File diff suppressed because it is too large Load Diff
+17 -9
View File
@@ -363,15 +363,23 @@
;; Layer anlegen (falls nicht vorhanden) und optional aktivieren ;; Layer anlegen (falls nicht vorhanden) und optional aktivieren
;; lay-name = Name; color = Farbnummer als String z.B. "2"; set-aktiv = T/nil ;; lay-name = Name; color = Farbnummer als String z.B. "2"; set-aktiv = T/nil
;; Farbe wird nur bei Neuanlage gesetzt, bestehende Layer bleiben unveraendert ;; Farbe wird nur bei Neuanlage gesetzt, bestehende Layer bleiben unveraendert
(defun ssg-make-layer (lay-name color set-aktiv / neu) ;; Ohne "_LAYER"-Befehl: ein bestehender Layer wird gar nicht angefasst (frueher
(setq neu (not (tblsearch "LAYER" lay-name))) ;; lief bei JEDEM Aufruf "_LAYER _N" und fuellte die Konsole, z.B. je Export-
(if set-aktiv ;; Marker einmal), ein neuer per entmake angelegt, CLAYER direkt gesetzt. Nur
(command "_LAYER" "_M" lay-name "") ;; wenn entmake scheitert (ungueltiger Name), bleibt der alte Befehlsweg.
(command "_LAYER" "_N" lay-name "") (defun ssg-make-layer (lay-name color set-aktiv / farbe)
) (if (not (tblsearch "LAYER" lay-name))
(if neu (progn
(command "_LAYER" "_CO" color lay-name "") (setq farbe (atoi (cond (color) ("7"))))
) (if (or (< farbe 1) (> farbe 255)) (setq farbe 7))
(if (not (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord") (cons 2 lay-name)
'(70 . 0) (cons 62 farbe) '(6 . "Continuous"))))
(progn
(command "_LAYER" "_N" lay-name "")
(command "_LAYER" "_CO" color lay-name "")))))
(if (and set-aktiv (tblsearch "LAYER" lay-name))
(setvar "CLAYER" lay-name))
) )
;; ------------------------------------------------------------ ;; ------------------------------------------------------------
+3 -2
View File
@@ -73,8 +73,9 @@
;; weil der Marker in der Zeichnung stehen bleibt. ;; weil der Marker in der Zeichnung stehen bleibt.
(wcmatch bname "ZZ_ASES_MARKER*") (wcmatch bname "ZZ_ASES_MARKER*")
;; ZZ_UNIT_MARKER: die Foerdereinheit-/Gefaelleeinheit-Marker ;; ZZ_UNIT_MARKER: die Foerdereinheit-/Gefaelleeinheit-Marker
;; (siehe csv:unitmark-aktualisieren, export.lsp) - aus ;; (siehe csv:ketten-verarbeiten, export.lsp) - temporaere
;; demselben Grund wie ZZ_ASES_MARKER. ;; Export-Proxies, die wie die Separator-Kopien eine ID fuer
;; ihre Export-Zeile brauchen.
(wcmatch bname "ZZ_UNIT_MARKER*") (wcmatch bname "ZZ_UNIT_MARKER*")
(wcmatch bname "Separator_SP*,S-LP*,Scanner*") (wcmatch bname "Separator_SP*,S-LP*,Scanner*")
(wcmatch bname "BTMT-Beladung*,SC_Entladung*") (wcmatch bname "BTMT-Beladung*,SC_Entladung*")
+73
View File
@@ -0,0 +1,73 @@
@echo off
REM ================================================================
REM DXFMAKROS - Export-CSV als Boundingbox-Draufsicht (SVG) anzeigen
REM ================================================================
REM Zeichnet jede Zeile der Export-CSV (EXPORTCSV) als achsparalleles
REM Rechteck aus Position + Boundingbox, mit Legende und Tooltip je
REM Rechteck sowie den Anschluss-Koordinatensystemen K1-K4 (rotes Kreuz,
REM blaue Linie K1->K2->K3->K4), und oeffnet das Ergebnis im Browser.
REM
REM Die Darstellung uebernimmt sps_skel (bin\material_flow.bat,
REM Option --show-bbs). sps_skel wird neben dxfmakros erwartet
REM (..\sps_skel) oder ueber die Umgebungsvariable SPS_SKEL_HOME.
REM
REM Aufruf:
REM bin\show_exportcsv.bat results\export.csv, alle Zeilen
REM bin\show_exportcsv.bat meine_export.csv andere CSV in results\ (oder Pfad)
REM bin\show_exportcsv.bat export.csv flow ohne VF/GF-Einzelbausteine
REM
REM Ergebnis: %SKEL_RESULTS%\<name>_bbs.svg
REM ================================================================
setlocal
REM Umgebung dxfmakros (DXFM_RESULTS ...)
call "%~dp0setenv.bat" >nul
REM sps_skel suchen
if not defined SPS_SKEL_HOME set "SPS_SKEL_HOME=%DXFMAKRO%\..\sps_skel"
if not exist "%SPS_SKEL_HOME%\bin\material_flow.bat" (
echo FEHLER: sps_skel nicht gefunden: %SPS_SKEL_HOME%
echo SPS_SKEL_HOME auf den sps_skel-Ordner setzen.
endlocal & exit /b 1
)
REM Umgebung sps_skel (SKEL_RESULTS ...) - material_flow.bat ruft setenv
REM zwar selbst auf, SKEL_RESULTS wird hier aber zum Oeffnen der SVG gebraucht.
call "%SPS_SKEL_HOME%\bin\setenv.bat" >nul
REM Eingabe-CSV: Dateiname wird in DXFM_RESULTS gesucht, Pfade bleiben
set "CSV=%~1"
if "%CSV%"=="" set "CSV=export.csv"
if exist "%DXFM_RESULTS%\%CSV%" set "CSV=%DXFM_RESULTS%\%CSV%"
if not exist "%CSV%" (
echo FEHLER: CSV nicht gefunden: %CSV%
echo Erst in BricsCAD EXPORTCSV ausfuehren.
endlocal & exit /b 1
)
for %%F in ("%CSV%") do (
set "CSV=%%~fF"
set "SVG=%SKEL_RESULTS%\%%~nF_bbs.svg"
)
REM Darstellungsmodus: all (Default) oder flow
set "MODE=%~2"
if "%MODE%"=="" set "MODE=all"
REM Alte SVG entfernen, damit nie eine veraltete Ansicht geoeffnet wird
if exist "%SVG%" del "%SVG%"
call "%SPS_SKEL_HOME%\bin\material_flow.bat" --file "%CSV%" --show-bbs %MODE% --show-kx
set "RC=%ERRORLEVEL%"
if not exist "%SVG%" (
echo FEHLER: SVG wurde nicht erzeugt ^(material_flow Exit-Code %RC%^).
endlocal & exit /b 1
)
echo.
echo Boundingbox-Ansicht: %SVG%
REM Vorschau direkt im Standardprogramm fuer .svg (Browser) oeffnen
start "" "%SVG%"
endlocal & exit /b 0
+15 -18
View File
@@ -76,14 +76,12 @@
# Gefaellestrecken-Segmente, Umlenk-/Motorstation). Wie pattern_schleuselement # Gefaellestrecken-Segmente, Umlenk-/Motorstation). Wie pattern_schleuselement
# liegen sie NICHT als eigener top-level INSERT vor, sondern verpackt in der # liegen sie NICHT als eigener top-level INSERT vor, sondern verpackt in der
# Wrapper-Blockdefinition - die Muster dienen der SUCHE dort # Wrapper-Blockdefinition - die Muster dienen der SUCHE dort
# (csv:nested-welt-records). Eine TEMPORAERE Kopie des jeweiligen Original- # (csv:nested-welt-records). Im Modus all_elements wird je Baustein eine
# Blocks wird IMMER erzeugt (csv:element-proxies-erzeugen, wie bei Separator/ # TEMPORAERE Kopie erzeugt (csv:element-proxies-erzeugen) und als eigene
# pattern_separator - liefert die Positionsdaten fuer die Gruppierung unten) # Export-Zeile ausgegeben, danach wieder geloescht. Im gruppierten Modus
# und nach dem Export IMMER wieder geloescht; als EIGENE Export-Zeile # (group_vf_gf, Default) fasst csv:ketten-verarbeiten die Bausteine
# erscheinen sie aber NUR, wenn *csv-export-alle-elemente* (export.lsp) auf T # stattdessen zu Foerdereinheit-/Gefaelleeinheit-Zeilen zusammen (siehe
# gesetzt ist. Im Default (nil, gruppierter Modus) fasst # pattern_unit_marker). Vario_Kurve_*
# csv:unitmark-aktualisieren sie stattdessen zu Foerdereinheit-/
# Gefaelleeinheit-Zeilen zusammen (siehe pattern_unit_marker). Vario_Kurve_*
# ist laut Code-Kommentar (vf_linienzug.lsp) als "nirgends im Projekt # ist laut Code-Kommentar (vf_linienzug.lsp) als "nirgends im Projekt
# tatsaechlich eingefuegt" dokumentiert - in der Praxis kommt es doch vor # tatsaechlich eingefuegt" dokumentiert - in der Praxis kommt es doch vor
# (siehe reale HundM05-Exporte), das Muster bleibt darum wirksam. # (siehe reale HundM05-Exporte), das Muster bleibt darum wirksam.
@@ -93,18 +91,17 @@
# vier Muster wie Separator/Scanner aus (Stueckzahl steckt schon in den # vier Muster wie Separator/Scanner aus (Stueckzahl steckt schon in den
# GF_Bogen_*/VF_Bogen_*/ANZAHL_VF/ANZAHL_GF-Attributen des Wrappers). # GF_Bogen_*/VF_Bogen_*/ANZAHL_VF/ANZAHL_GF-Attributen des Wrappers).
# #
# pattern_unit_marker: der Marker, den der Export je zusammenhaengendem # pattern_unit_marker: der Proxy, den der Export im gruppierten Modus je
# Foerderer-Abschnitt ("Foerdereinheit") bzw. Gefaelle-Abschnitt # Foerderer-Abschnitt ("Foerdereinheit") bzw. Gefaelle-Abschnitt
# ("Gefaelleeinheit") einer VF_n/GF_n-Kette setzt (ZZ_UNIT_MARKER, ein # ("Gefaelleeinheit") einer VF_n/GF_n-Kette setzt (ZZ_UNIT_MARKER, ein
# Rechteck auf der Bounding-Box-Vereinigung aller enthaltenen Boegen/ # Rechteck auf der Bounding-Box-Vereinigung der enthaltenen Bausteine,
# Streckenelemente/Umlenk-/Motorstation-Mitglieder, csv:unitmark- # csv:ketten-verarbeiten in Lisp/export.lsp). Die Kette wird dafuer als
# aktualisieren in Lisp/export.lsp). Bleibt wie ZZ_ASES_MARKER dauerhaft in # Vektorkette K2 -> K1 geordnet; eine Foerdereinheit reicht vom Separator vor
# der Zeichnung stehen und behaelt seine ID ueber Exportlaeufe hinweg # der Umlenkstation bis zur Motorstation, alles dazwischen ist Gefaelle.
# (Attribute ID/ZUORDNUNG/TYP/LFDNR/LAENGE_m/ANZAHL_BOEGEN/K1/K2, alle # Der Proxy ist ein reines Export-Hilfsmittel: er wird bei jedem Export neu
# unsichtbar). Nur aktiv im gruppierten Modus (*csv-export-alle-elemente* = # erzeugt und danach geloescht, ausser der Debug-Schalter csv_leave_proxies
# nil) - im Rohdaten-Modus werden keine neuen Marker angelegt, verwaiste # ist gesetzt (Attribute ID/ZUORDNUNG/TYP/LFDNR/LAENGE_m/ANZAHL_BOEGEN/K1/K2,
# Marker (z.B. nach einem Wechsel gruppiert->roh) werden aber immer # alle unsichtbar). export_sivas.py schliesst dieses Muster wie die vier
# aufgeraeumt. export_sivas.py schliesst dieses Muster wie die vier
# pattern_nested_*-Muster aus (Stueckzahl steckt in ANZAHL_VF/ANZAHL_GF). # pattern_nested_*-Muster aus (Stueckzahl steckt in ANZAHL_VF/ANZAHL_GF).
# ============================================================ # ============================================================
+15 -23
View File
@@ -1,35 +1,27 @@
// ============================================================ // ============================================================
// csv_export_konfig.dcl - CSV-Export Konfiguration (c:CSV_EXPORT_KONFIG, // csv_export_konfig.dcl - CSV-Export Konfiguration (c:CSV_EXPORT_KONFIG,
// export.lsp). Steuert *csv-export-modus* (drei sich gegenseitig // export.lsp). Steuert *csv-export-modus* (Combobox mit drei sich
// ausschliessende Radio-Buttons im selben boxed_radio_column) sowie die // gegenseitig ausschliessenden Eintraegen) sowie die zwei unabhaengigen
// zwei unabhaengigen Sichtbarkeits-Haken fuer temporaere Element-Proxy- // Sichtbarkeits-Haken fuer temporaere Element-Proxy-Kopien
// Kopien (*csv-export-pruef-zuordnung*/*csv-export-elemente-behalten*). // (*csv-export-pruef-zuordnung*/*csv-export-elemente-behalten*).
// //
// Radio-Button-Labels sind FEST (Deutsch) - set_tile kann bei einem // popup_list statt radio_column: set_tile/get_tile auf einer
// radio_button nur den Zustand, nicht das Label aendern (siehe Kommentar // boxed_radio_column liefern/erwarten den KEY des gewaehlten radio_button
// dcl/variofoerderer.dcl:16-23, gleiche Einschraenkung hier). // (String, z.B. "modus_all"), nicht den numerischen Index - das widersprach
// der urspruenglichen Annahme in csv:export-konfig-init/-accept (idx als
// "0"/"1"/"2" behandelt) und liess die Vorbelegung beim erneuten Oeffnen
// immer auf die erste Option zurueckfallen. popup_list ist eindeutig
// index-basiert (siehe dcl/sprache.dcl + SSG_LIB_Commands.lsp
// ssg-sprache-init/-accept, dasselbe Muster).
// ============================================================ // ============================================================
csv_export_konfig : dialog { csv_export_konfig : dialog {
label = "CSV-Export Konfiguration"; label = "CSV-Export Konfiguration";
: boxed_radio_column { : popup_list {
label = "Export-Modus:";
key = "modus"; key = "modus";
label = "Export-Modus:";
: radio_button { width = 55;
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; spacer;
+52 -3
View File
@@ -104,8 +104,8 @@ Pro INSERT wird ein JSON-Objekt geschrieben:
| `x`, `y`, `z`, `rotation` | `(assoc 10)` / `(assoc 50)` | roher Einfuegepunkt/-winkel, KEIN `vla-getboundingbox` | | `x`, `y`, `z`, `rotation` | `(assoc 10)` / `(assoc 50)` | roher Einfuegepunkt/-winkel, KEIN `vla-getboundingbox` |
| `attribs` | alle ATTRIB-Werte | | | `attribs` | alle ATTRIB-Werte | |
| `insertpoint` | `csv:kos-encode` | Position+Rotation als 24-Zeichen-Base64 (Quaternion) | | `insertpoint` | `csv:kos-encode` | Position+Rotation als 24-Zeichen-Base64 (Quaternion) |
| `k1`..`k4` | `csv:get-k-kos-strings` bzw. Fallbacks | Anschluss-Koordinatensysteme, siehe unten | | `k1`..`k4` | `csv:k-liste` (Kern `csv:ks-welt-punkte`) bzw. Fallbacks | Anschluss-Koordinatensysteme, siehe unten |
| `bbox` | `csv:get-bbox` (`vla-getboundingbox`) | NUR wenn `include-bbox=T` und der Aufruf gelingt; fehlt sonst komplett im JSON | | `bbox` | `csv:get-bbox` (`vla-getboundingbox`), im Modus `all_elements` fuer Separator/AS/ES die des Bausteins (`csv:baustein-merken`) | NUR wenn `include-bbox=T` und der Aufruf gelingt; fehlt sonst komplett im JSON |
| `warnung` | `*cs-scanner-warnung-by-handle*` | strittige Scanner-Zuordnung aus `cs-zuordnung-lauf` | | `warnung` | `*cs-scanner-warnung-by-handle*` | strittige Scanner-Zuordnung aus `cs-zuordnung-lauf` |
| `zuordnung_fix` | `*cs-sep-fix-by-handle*` | nur bei Proxy-Kopien: die feststehende Wrapper-ID | | `zuordnung_fix` | `*cs-sep-fix-by-handle*` | nur bei Proxy-Kopien: die feststehende Wrapper-ID |
| `sepliste` | `ssg-sepliste-xdata-lesen` + `*csv-sepliste-id-by-handle*` | nur bei VF_n/GF_n, siehe eigener Abschnitt | | `sepliste` | `ssg-sepliste-xdata-lesen` + `*csv-sepliste-id-by-handle*` | nur bei VF_n/GF_n, siehe eigener Abschnitt |
@@ -116,7 +116,56 @@ Laenge+Rotation synthetisiert (`csv:gerade-k-kos-strings`). VF_n/GF_n leiten
K1 (Eingang) und K2 (Ausgang) aus den eingebetteten AS_Element/ES_Element ab K1 (Eingang) und K2 (Ausgang) aus den eingebetteten AS_Element/ES_Element ab
(`csv:vfgf-k-kos-strings`), damit die Kreisel<->Strecke-Kollisionspruefung in (`csv:vfgf-k-kos-strings`), damit die Kreisel<->Strecke-Kollisionspruefung in
Python mit einer kleinen festen Box an der AS/ES-Position arbeiten kann statt Python mit einer kleinen festen Box an der AS/ES-Position arbeiten kann statt
mit der ganzen (oft sehr langen) Wrapper-Box. mit der ganzen (oft sehr langen) Wrapper-Box. K1 des Wrappers ist dabei K1
des AS, K2 der K2 des ES (`csv:vfgf-element-punkte`, dieselbe Rechnung wie
deren eigene Zeilen).
**Kettenteile: Stellvertreter vs. Baustein.** Innerhalb einer VF_n/GF_n-Kette
gilt fuer jedes Teil K1 = KS_EIN, K2 = KS_AUS des Bausteins - K2 eines Teils
ist exakt K1 des naechsten. Bogen/Streckenelement/Motor-/Umlenkstation werden
als 1:1-Kopie exportiert und erfuellen das von selbst. Separator und AS/ES
exportieren dagegen einen **Stellvertreter**: die Kopie des Sensor-Symbols
`Separator_SP` (sitzt 235 mm weit im 300-mm-Trennsteg
`Staustrecke_Separator_SP_300_mm`, hat nur EIN eigenes KS) bzw. den
`ZZ_ASES_MARKER` (200x200, ohne KS). Was die Zeile fuehrt, haengt am Modus:
| Modus | Separator | AS/ES |
|---|---|---|
| `all_elements` | K1/K2 + bbox des Trennstegs | K1/K2 + bbox des AS-/ES-Elements (AS: K1 Kreisel, K2 Kettenanfang; ES: K1 Kettenende, K2 Kreisel) |
| `group_vf_gf` | KS + bbox des Symbols | wie `all_elements` (schliesst an die Einheiten an) |
| `separator_track` | KS + bbox des Symbols | bbox des Markers, keine K |
IDs der neuen Export-Objekte jeder Kette (Separator-/Element-Kopien, neue
AS/ES-Marker, Einheiten-Proxies) werden vor `ssg-id-check-all` entlang der
Kette von AS nach ES aufsteigend vergeben (`csv:ketten-verarbeiten`) - die
CSV ist nach TeileId sortiert, die Zeilen stehen damit in Kettenfolge.
Umgesetzt ueber `csv:baustein-merken`: beim Erzeugen des Stellvertreters
werden K-Punkte (`csv:ks-welt-punkte`) und bbox (kurzlebige Kopie des
Bausteins, `csv:baustein-bbox`) unter seinem Handle gemerkt
(`*csv-baustein-by-handle*`, je Lauf neu); `csv:k-liste` und
`csv:block-to-json` bevorzugen diese Werte. Der Trennsteg eines Symbols wird
ueber die Lage des Symbols IM Trennsteg gefunden (`csv:trennsteg-zu-symbol`),
nicht ueber den naechsten Ursprung.
**Gruppierter Modus (`group_vf_gf`): Foerder-/Gefaelleeinheiten.** Eine
VF_n/GF_n-Kette wechselt zwischen Gefaelle- und Foerderabschnitten (GF, VF,
GF, ...). `csv:ketten-verarbeiten` holt je Wrapper alle Bausteine samt
Welt-KS (`csv:kette-teile`: AS, Trennstege, Boegen, Streckenelemente,
Umlenk-/Motorstation, ES), ordnet sie als **Vektorkette** - auf K2 eines
Bausteins liegt K1 des naechsten, Start am AS (`csv:kette-ordnen`, Toleranz
2 mm) - und schneidet die Typfolge in Einheiten (`csv:kette-einheiten`):
eine **Foerdereinheit** beginnt am Separator vor der Umlenkstation und endet
mit der Motorstation, alles dazwischen ist eine **Gefaelleeinheit**; AS/ES
bleiben eigene Zeilen. Kurven sind dabei kein Problem, weil nur die
KS-Nachbarschaft zaehlt. Je Einheit entsteht ein Proxy `ZZ_UNIT_MARKER` auf
der vereinigten Boundingbox (gemessen an kurzlebigen Kopien der Bausteine),
mit K1 vom ersten und K2 vom letzten Baustein, `LAENGE_m` = Summe der
Streckenelement-Laengen K1->K2, `ANZAHL_BOEGEN`. Alle Proxies werden nach
dem Export geloescht, ausser der Debug-Schalter `csv_leave_proxies` ist
gesetzt. Reisst die KS-Kette ab, meldet der Export das (`exp-kette-luecke`)
und fuehrt den Rest als eigene Teilkette weiter. Die fruehere Gruppierung
ueber die sepliste-XDATA und den Separator-Typ (`SSG_SEP_TYP`) ist entfallen.
**Die `bbox` ist das einzige Feld, das `vla-getboundingbox` braucht** — alle **Die `bbox` ist das einzige Feld, das `vla-getboundingbox` braucht** — alle
anderen Felder kommen aus rohen DXF-Gruppencodes oder XDATA. Ein Ausfall von anderen Felder kommen aus rohen DXF-Gruppencodes oder XDATA. Ein Ausfall von
+9
View File
@@ -711,6 +711,15 @@
"exp-asmark-blockdef-fehler": "\n[EXPORT] WARNUNG: Blockdefinition '%1' konnte nicht angelegt werden - es werden keine AS/ES-Marker gesetzt.", "exp-asmark-blockdef-fehler": "\n[EXPORT] WARNUNG: Blockdefinition '%1' konnte nicht angelegt werden - es werden keine AS/ES-Marker gesetzt.",
"exp-asmark-bilanz": "\n[EXPORT] AS/ES-Marker: %1 neu, %2 mit bisheriger ID uebernommen, %3 verwaiste entfernt.", "exp-asmark-bilanz": "\n[EXPORT] AS/ES-Marker: %1 neu, %2 mit bisheriger ID uebernommen, %3 verwaiste entfernt.",
"exp-asmark-ids": "\n[EXPORT] %1 AS/ES-Marker mit ihrer ID am sepliste-Eintrag vermerkt.", "exp-asmark-ids": "\n[EXPORT] %1 AS/ES-Marker mit ihrer ID am sepliste-Eintrag vermerkt.",
"exp-unitmark-blockdef": "\n[EXPORT] Blockdefinition '%1' fuer die Einheiten-Proxies angelegt.",
"exp-unitmark-blockdef-fehler": "\n[EXPORT] WARNUNG: Blockdefinition '%1' konnte nicht angelegt werden - es werden keine Foerder-/Gefaelleeinheiten exportiert.",
"exp-unitmark-bilanz": "\n[EXPORT] Foerder-/Gefaelleeinheiten: %1 Proxy(s) erzeugt, %2 alte entfernt.",
"exp-unitmark-ids": "\n[EXPORT] %1 Einheiten-Proxy(s) mit ID versehen.",
"exp-kette-luecke": "\n[EXPORT] WARNUNG: Kette '%1' reisst ab (kein K1 auf dem letzten K2) - %2 Baustein(e) als eigene Teilkette weitergefuehrt, Einheitengrenzen dort pruefen.",
"exp-hilfskopien-behalten": "\n[EXPORT] csv_leave_proxies=1: %1 %2 bleiben in der Zeichnung (Abschalten: (dbg-schalter-off \"csv_leave_proxies\"))",
"exp-art-separator": "Separator-Kopie(n)",
"exp-art-element": "Element-Kopie(n)",
"exp-art-einheit": "Einheiten-Proxy(s)",
"exp-update-hoehe-drehung": "\n[%1] Aktualisiere Hoehe/Drehung...", "exp-update-hoehe-drehung": "\n[%1] Aktualisiere Hoehe/Drehung...",
"exp-collect-blocks": "\n[%1] Sammle relevante Bloecke...", "exp-collect-blocks": "\n[%1] Sammle relevante Bloecke...",
"exp-no-blocks-found": "\n[%1] Keine relevanten Bloecke gefunden.", "exp-no-blocks-found": "\n[%1] Keine relevanten Bloecke gefunden.",
+9
View File
@@ -711,6 +711,15 @@
"exp-asmark-blockdef-fehler": "\n[EXPORT] WARNING: block definition '%1' could not be created - no AS/ES markers are placed.", "exp-asmark-blockdef-fehler": "\n[EXPORT] WARNING: block definition '%1' could not be created - no AS/ES markers are placed.",
"exp-asmark-bilanz": "\n[EXPORT] AS/ES markers: %1 new, %2 kept with their previous ID, %3 orphaned ones removed.", "exp-asmark-bilanz": "\n[EXPORT] AS/ES markers: %1 new, %2 kept with their previous ID, %3 orphaned ones removed.",
"exp-asmark-ids": "\n[EXPORT] %1 AS/ES marker ID(s) recorded at their sepliste entry.", "exp-asmark-ids": "\n[EXPORT] %1 AS/ES marker ID(s) recorded at their sepliste entry.",
"exp-unitmark-blockdef": "\n[EXPORT] Block definition '%1' for the unit proxies created.",
"exp-unitmark-blockdef-fehler": "\n[EXPORT] WARNING: block definition '%1' could not be created - no conveyor/gravity units are exported.",
"exp-unitmark-bilanz": "\n[EXPORT] Conveyor/gravity units: %1 proxy(s) created, %2 old ones removed.",
"exp-unitmark-ids": "\n[EXPORT] %1 unit proxy(s) given an ID.",
"exp-kette-luecke": "\n[EXPORT] WARNING: chain '%1' is broken (no K1 at the last K2) - %2 element(s) continued as a separate sub-chain, check the unit boundaries there.",
"exp-hilfskopien-behalten": "\n[EXPORT] csv_leave_proxies=1: %1 %2 remain in the drawing (switch off: (dbg-schalter-off \"csv_leave_proxies\"))",
"exp-art-separator": "separator copy(ies)",
"exp-art-element": "element copy(ies)",
"exp-art-einheit": "unit proxy(ies)",
"exp-update-hoehe-drehung": "\n[%1] Updating height/rotation...", "exp-update-hoehe-drehung": "\n[%1] Updating height/rotation...",
"exp-collect-blocks": "\n[%1] Collecting relevant blocks...", "exp-collect-blocks": "\n[%1] Collecting relevant blocks...",
"exp-no-blocks-found": "\n[%1] No relevant blocks found.", "exp-no-blocks-found": "\n[%1] No relevant blocks found.",
+10 -4
View File
@@ -274,7 +274,7 @@ def build_element_merkmale(block):
def build_einheit_merkmale(block): def build_einheit_merkmale(block):
"""Merkmale-Dict fuer eine Foerdereinheit-/Gefaelleeinheit-Zeile (ZZ_UNIT_ """Merkmale-Dict fuer eine Foerdereinheit-/Gefaelleeinheit-Zeile (ZZ_UNIT_
MARKER, siehe csv:unitmark-aktualisieren in export.lsp und MARKER, siehe csv:ketten-verarbeiten in export.lsp und
pattern_unit_marker in cfg/export.cfg). pattern_unit_marker in cfg/export.cfg).
LAENGE_m/ANZAHL_BOEGEN kommen direkt aus den ATTDEFs des Markers - dort LAENGE_m/ANZAHL_BOEGEN kommen direkt aus den ATTDEFs des Markers - dort
@@ -282,9 +282,15 @@ def build_einheit_merkmale(block):
zugeordneten Streckenelement-Mitglieder bzw. Anzahl der Bogen-Mitglieder). zugeordneten Streckenelement-Mitglieder bzw. Anzahl der Bogen-Mitglieder).
Python hat im gruppierten Modus KEINEN Zugriff auf die Einzelteile selbst Python hat im gruppierten Modus KEINEN Zugriff auf die Einzelteile selbst
(die werden dort gar nicht erst exportiert), daher keine eigene (die werden dort gar nicht erst exportiert), daher keine eigene
Neuberechnung hier.""" Neuberechnung hier.
"Zuordnung" ist die ID des VF_n/GF_n-Wrappers, aus dem diese Einheit
stammt (ATTDEF ZUORDNUNG, von csv:ketten-verarbeiten gesetzt) -
dieselbe Bedeutung wie "Zuordnung" bei build_sensor_merkmale, nur eine
Ebene hoeher (Einheit -> Strecke statt Sensor -> Carrier)."""
attribs = block.get("attribs", {}) attribs = block.get("attribs", {})
return { return {
"Zuordnung": attribs.get("ZUORDNUNG", ""),
"Laenge_m": attribs.get("LAENGE_m", ""), "Laenge_m": attribs.get("LAENGE_m", ""),
"Anzahl_Boegen": attribs.get("ANZAHL_BOEGEN", ""), "Anzahl_Boegen": attribs.get("ANZAHL_BOEGEN", ""),
} }
@@ -1034,8 +1040,8 @@ def process_blocks(blocks, lookup, dbg=None):
continue continue
# ZZ_UNIT_MARKER (siehe cfg/export.cfg pattern_unit_marker sowie # ZZ_UNIT_MARKER (siehe cfg/export.cfg pattern_unit_marker sowie
# csv:unitmark-aktualisieren in Lisp/export.lsp): der persistente # csv:ketten-verarbeiten in Lisp/export.lsp): der temporaere
# Marker, den Lisp je zusammenhaengendem Foerderer-/Gefaelle-Abschnitt # Proxy, den Lisp je zusammenhaengendem Foerderer-/Gefaelle-Abschnitt
# einer VF_n/GF_n-Kette setzt (gruppierter Modus, Default). TYP # einer VF_n/GF_n-Kette setzt (gruppierter Modus, Default). TYP
# entscheidet VF->Foerdereinheit / GF->Gefaelleeinheit, analog zur # entscheidet VF->Foerdereinheit / GF->Gefaelleeinheit, analog zur
# AS/ES-Klassifikation oben. K1/K2 brauchen keine Sonderbehandlung - # AS/ES-Klassifikation oben. K1/K2 brauchen keine Sonderbehandlung -
+1 -1
View File
@@ -416,7 +416,7 @@ SKIP_BLOCKS = set(BLOCKPATTERNS.get("pattern_ks_subblocks", ["K1", "K2", "K3", "
# siehe csv:element-proxies-erzeugen, export.lsp; nur im Rohdaten-Modus # siehe csv:element-proxies-erzeugen, export.lsp; nur im Rohdaten-Modus
# *csv-export-alle-elemente*=T ueberhaupt in export_raw.json vorhanden) sowie # *csv-export-alle-elemente*=T ueberhaupt in export_raw.json vorhanden) sowie
# fuer die gruppierten Foerdereinheit-/Gefaelleeinheit-Marker (ZZ_UNIT_MARKER, # fuer die gruppierten Foerdereinheit-/Gefaelleeinheit-Marker (ZZ_UNIT_MARKER,
# csv:unitmark-aktualisieren, Default-Modus): ihre Stueckzahl steckt bereits # csv:ketten-verarbeiten, Default-Modus): ihre Stueckzahl steckt bereits
# in den GF_Bogen_*/VF_Bogen_*/ANZAHL_VF/ANZAHL_GF-Attributen des Wrappers # in den GF_Bogen_*/VF_Bogen_*/ANZAHL_VF/ANZAHL_GF-Attributen des Wrappers
# (*strecke-attr-gruppe*, ssg_core.lsp) - ein eigener Sivas-Eintrag wuerde # (*strecke-attr-gruppe*, ssg_core.lsp) - ein eigener Sivas-Eintrag wuerde
# ebenso doppelt zaehlen. Muss VOR der pattern_strecke_module-Pruefung unten # ebenso doppelt zaehlen. Muss VOR der pattern_strecke_module-Pruefung unten
+98 -136
View File
@@ -530,229 +530,217 @@
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_EDIT</Command> <Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_EDIT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00114"> <MenuMacro UID="MM_00113">
<Macro> <Macro>
<Name>Rohrabhaenger</Name> <Name>Geruest...</Name>
<Command>^C^C(ssg-ensure "GeruestInsert") GERUEST_ROHRABHAENGER</Command> <Command>^C^C(ssg-ensure "GeruestInsert") GERUEST</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00116"> <MenuMacro UID="MM_00116">
<Macro>
<Name>2 Zoll Saeulen</Name>
<Command>^C^C(ssg-ensure "GeruestInsert") GERUEST_SAEULE_2ZOLL</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00117">
<Macro>
<Name>1 Zoll Saeulen</Name>
<Command>^C^C(ssg-ensure "GeruestInsert") GERUEST_SAEULE_1ZOLL</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00118">
<Macro>
<Name>Wandbefestigung</Name>
<Command>^C^C(ssg-ensure "GeruestInsert") GERUEST_WANDBEFESTIGUNG</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00121">
<Macro> <Macro>
<Name>Marker einfuegen</Name> <Name>Marker einfuegen</Name>
<Command>^C^C(ssg-ensure "Tro_Edit") TRO_INSERT</Command> <Command>^C^C(ssg-ensure "Tro_Edit") TRO_INSERT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00122"> <MenuMacro UID="MM_00117">
<Macro> <Macro>
<Name>Marker bearbeiten</Name> <Name>Marker bearbeiten</Name>
<Command>^C^C(ssg-ensure "Tro_Edit") TRO_EDIT</Command> <Command>^C^C(ssg-ensure "Tro_Edit") TRO_EDIT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00123"> <MenuMacro UID="MM_00118">
<Macro> <Macro>
<Name>Bearbeiten (Auto)</Name> <Name>Bearbeiten (Auto)</Name>
<Command>^C^C(ssg-ensure "SSG_LIB_Commands") SSG_BLOCKEDIT</Command> <Command>^C^C(ssg-ensure "SSG_LIB_Commands") SSG_BLOCKEDIT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00125"> <MenuMacro UID="MM_00120">
<Macro> <Macro>
<Name>Verbindung einfuegen</Name> <Name>Verbindung einfuegen</Name>
<Command>^C^C(ssg-ensure "Connection_Edit") CONNECTION_INSERT</Command> <Command>^C^C(ssg-ensure "Connection_Edit") CONNECTION_INSERT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00126"> <MenuMacro UID="MM_00121">
<Macro> <Macro>
<Name>Verbindung bearbeiten</Name> <Name>Verbindung bearbeiten</Name>
<Command>^C^C(ssg-ensure "Connection_Edit") CONNECTION_EDIT</Command> <Command>^C^C(ssg-ensure "Connection_Edit") CONNECTION_EDIT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00128"> <MenuMacro UID="MM_00123">
<Macro> <Macro>
<Name>Eingang</Name> <Name>Eingang</Name>
<Command>^C^C(ssg-ensure "SSG_LIB_Commands") ILS_EINGANG_INSERT</Command> <Command>^C^C(ssg-ensure "SSG_LIB_Commands") ILS_EINGANG_INSERT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00129"> <MenuMacro UID="MM_00124">
<Macro> <Macro>
<Name>Ausgang</Name> <Name>Ausgang</Name>
<Command>^C^C(ssg-ensure "SSG_LIB_Commands") ILS_AUSGANG_INSERT</Command> <Command>^C^C(ssg-ensure "SSG_LIB_Commands") ILS_AUSGANG_INSERT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00130"> <MenuMacro UID="MM_00125">
<Macro> <Macro>
<Name>SPS Schliessen</Name> <Name>SPS Schliessen</Name>
<Command>^C^C</Command> <Command>^C^C</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00132"> <MenuMacro UID="MM_00127">
<Macro> <Macro>
<Name>Export Sivas</Name> <Name>Export Sivas</Name>
<Command>^C^C(ssg-ensure "export") EXPORTSIVAS</Command> <Command>^C^C(ssg-ensure "export") EXPORTSIVAS</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00133"> <MenuMacro UID="MM_00128">
<Macro> <Macro>
<Name>Export CSV</Name> <Name>Export CSV</Name>
<Command>^C^C(ssg-ensure "export") EXPORTCSV</Command> <Command>^C^C(ssg-ensure "export") EXPORTCSV</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00135"> <MenuMacro UID="MM_00130">
<Macro> <Macro>
<Name>Umschalten 2D und 3D</Name> <Name>Umschalten 2D und 3D</Name>
<Command>^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_SWITCH</Command> <Command>^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_SWITCH</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00136"> <MenuMacro UID="MM_00131">
<Macro> <Macro>
<Name>Alle Bloecke auf 2D</Name> <Name>Alle Bloecke auf 2D</Name>
<Command>^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_ALL_2D</Command> <Command>^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_ALL_2D</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00137"> <MenuMacro UID="MM_00132">
<Macro> <Macro>
<Name>Alle Bloecke auf 3D</Name> <Name>Alle Bloecke auf 3D</Name>
<Command>^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_ALL_3D</Command> <Command>^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_ALL_3D</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00138"> <MenuMacro UID="MM_00133">
<Macro> <Macro>
<Name>Sprache</Name> <Name>Sprache</Name>
<Command>^C^C(ssg-ensure "SSG_LIB_Commands") SSG_SPRACHE</Command> <Command>^C^C(ssg-ensure "SSG_LIB_Commands") SSG_SPRACHE</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00139"> <MenuMacro UID="MM_00134">
<Macro> <Macro>
<Name>Planquadrate an/aus</Name> <Name>Planquadrate an/aus</Name>
<Command>^C^C(ssg-ensure "DrawPlanquadrate") PLANQUADRATE_TOGGLE</Command> <Command>^C^C(ssg-ensure "DrawPlanquadrate") PLANQUADRATE_TOGGLE</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00142"> <MenuMacro UID="MM_00135">
<Macro>
<Name>CSV-Export</Name>
<Command>^C^C(ssg-ensure "export") CSV_EXPORT_KONFIG</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00137">
<Macro> <Macro>
<Name>alle Tests ausfuehren und exportieren</Name> <Name>alle Tests ausfuehren und exportieren</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) SSG_RUN_ALL_TESTS_EXPORT</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) SSG_RUN_ALL_TESTS_EXPORT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00143"> <MenuMacro UID="MM_00138">
<Macro> <Macro>
<Name>Tests ausfuehren und stehen lassen</Name> <Name>Tests ausfuehren und stehen lassen</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) SSG_RUN_ALL_TESTS_OFFEN</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) SSG_RUN_ALL_TESTS_OFFEN</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00144"> <MenuMacro UID="MM_00139">
<Macro> <Macro>
<Name>Export CSV/Sivas ALL</Name> <Name>Export CSV/Sivas ALL</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_export_all.lsp")) TEST_EXPORT_ALL</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_export_all.lsp")) TEST_EXPORT_ALL</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00146"> <MenuMacro UID="MM_00141">
<Macro> <Macro>
<Name>Kreisel</Name> <Name>Kreisel</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_kreisel.lsp")) TEST_KREISEL</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_kreisel.lsp")) TEST_KREISEL</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00147"> <MenuMacro UID="MM_00142">
<Macro> <Macro>
<Name>Foerderer</Name> <Name>Foerderer</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_foerderer.lsp")) TEST_FOERDERER</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_foerderer.lsp")) TEST_FOERDERER</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00148"> <MenuMacro UID="MM_00143">
<Macro> <Macro>
<Name>Foerderer-Linienzug</Name> <Name>Foerderer-Linienzug</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_linienzug.lsp")) TEST_LINIENZUG TEST_LINIENZUG_STUFE2</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_linienzug.lsp")) TEST_LINIENZUG TEST_LINIENZUG_STUFE2</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00149"> <MenuMacro UID="MM_00144">
<Macro> <Macro>
<Name>Omniflo</Name> <Name>Omniflo</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_omniflo.lsp")) TEST_OMNIFLO</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_omniflo.lsp")) TEST_OMNIFLO</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00150"> <MenuMacro UID="MM_00145">
<Macro> <Macro>
<Name>Omniflo Strecke</Name> <Name>Omniflo Strecke</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_omniflo_strecke.lsp")) TEST_OMNIFLO_STRECKE</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_omniflo_strecke.lsp")) TEST_OMNIFLO_STRECKE</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00151"> <MenuMacro UID="MM_00146">
<Macro> <Macro>
<Name>Gefaellestrecke</Name> <Name>Gefaellestrecke</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_gefaellestrecke.lsp")) TEST_GEFAELLESTRECKE</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_gefaellestrecke.lsp")) TEST_GEFAELLESTRECKE</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00152"> <MenuMacro UID="MM_00147">
<Macro> <Macro>
<Name>Mubea Gesamtmodell</Name> <Name>Mubea Gesamtmodell</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_mubea.lsp")) TEST_MUBEA</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_mubea.lsp")) TEST_MUBEA</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00153"> <MenuMacro UID="MM_00148">
<Macro> <Macro>
<Name>HundM05 Kreisel-Abschnitt</Name> <Name>HundM05 Kreisel-Abschnitt</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_hundm05.lsp")) TEST_HUNDM05</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_hundm05.lsp")) TEST_HUNDM05</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00154"> <MenuMacro UID="MM_00149">
<Macro> <Macro>
<Name>KS 2D/3D pruefen (CSV)</Name> <Name>KS 2D/3D pruefen (CSV)</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/Lisp/ks_pruefung.lsp")) KS_PRUEFEN</Command> <Command>^C^C(load (strcat (getenv "DXFMAKRO") "/Lisp/ks_pruefung.lsp")) KS_PRUEFEN</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00166"> <MenuMacro UID="MM_00161">
<Macro> <Macro>
<Name>Kreisel bearbeiten</Name> <Name>Kreisel bearbeiten</Name>
<Command>(ssg-ensure "KreiselInsert") KreiselEdit</Command> <Command>(ssg-ensure "KreiselInsert") KreiselEdit</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00167"> <MenuMacro UID="MM_00162">
<Macro> <Macro>
<Name>Omniflo Element bearbeiten</Name> <Name>Omniflo Element bearbeiten</Name>
<Command>(ssg-ensure "OmniModulInsert") OMNI_EDIT</Command> <Command>(ssg-ensure "OmniModulInsert") OMNI_EDIT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00168"> <MenuMacro UID="MM_00163">
<Macro> <Macro>
<Name>Gefaellestrecke bearbeiten</Name> <Name>Gefaellestrecke bearbeiten</Name>
<Command>(ssg-ensure "Gefaellestrecke") GEFAELLESTRECKE_EDIT</Command> <Command>(ssg-ensure "Gefaellestrecke") GEFAELLESTRECKE_EDIT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00169"> <MenuMacro UID="MM_00164">
<Macro> <Macro>
<Name>VarioFoerderer bearbeiten</Name> <Name>VarioFoerderer bearbeiten</Name>
<Command>(ssg-ensure "VarioFoerderer") VARIOFOERDERER_EDIT</Command> <Command>(ssg-ensure "VarioFoerderer") VARIOFOERDERER_EDIT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00170"> <MenuMacro UID="MM_00165">
<Macro> <Macro>
<Name>TRO-Marker bearbeiten</Name> <Name>TRO-Marker bearbeiten</Name>
<Command>(ssg-ensure "Tro_Edit") TRO_EDIT</Command> <Command>(ssg-ensure "Tro_Edit") TRO_EDIT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00171"> <MenuMacro UID="MM_00166">
<Macro> <Macro>
<Name>Verbindung bearbeiten</Name> <Name>Verbindung bearbeiten</Name>
<Command>(ssg-ensure "Connection_Edit") CONNECTION_EDIT</Command> <Command>(ssg-ensure "Connection_Edit") CONNECTION_EDIT</Command>
</Macro> </Macro>
</MenuMacro> </MenuMacro>
<MenuMacro UID="MM_00173"> <MenuMacro UID="MM_00168">
<Macro> <Macro>
<Name>SSG Bearbeiten (Auto)</Name> <Name>SSG Bearbeiten (Auto)</Name>
<Command>(ssg-ensure "SSG_LIB_Commands") SSG_BLOCKEDIT</Command> <Command>(ssg-ensure "SSG_LIB_Commands") SSG_BLOCKEDIT</Command>
@@ -769,11 +757,16 @@
<Name>SSG_LIB</Name> <Name>SSG_LIB</Name>
<PopMenuRef pUID="PM_00005"/> <PopMenuRef pUID="PM_00005"/>
<PopMenuRef pUID="PM_00031"/> <PopMenuRef pUID="PM_00031"/>
<PopMenuRef pUID="PM_00113"/> <PopMenuItem>
<PopMenuRef pUID="PM_00119"/> <NameRef>Geruest...</NameRef>
<PopMenuRef pUID="PM_00131"/> <MenuItem>
<PopMenuRef pUID="PM_00134"/> <MacroRef MenuMacroID="MM_00113"/>
<PopMenuRef pUID="PM_00141"/> </MenuItem>
</PopMenuItem>
<PopMenuRef pUID="PM_00114"/>
<PopMenuRef pUID="PM_00126"/>
<PopMenuRef pUID="PM_00129"/>
<PopMenuRef pUID="PM_00136"/>
</PopMenu> </PopMenu>
<PopMenu UID="PM_00005"> <PopMenu UID="PM_00005">
<Name>ILS</Name> <Name>ILS</Name>
@@ -1366,276 +1359,245 @@
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
</PopMenu> </PopMenu>
<PopMenu UID="PM_00113"> <PopMenu UID="PM_00114">
<Name>Geruest</Name>
<PopMenuItem>
<NameRef>Rohrabhaenger</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00114"/>
</MenuItem>
</PopMenuItem>
<PopMenuRef pUID="PM_00115"/>
<PopMenuItem>
<NameRef>Wandbefestigung</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00118"/>
</MenuItem>
</PopMenuItem>
</PopMenu>
<PopMenu UID="PM_00115">
<Name>Saeulen</Name>
<PopMenuItem>
<NameRef>2 Zoll Saeulen</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00116"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>1 Zoll Saeulen</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00117"/>
</MenuItem>
</PopMenuItem>
</PopMenu>
<PopMenu UID="PM_00119">
<Name>SPS</Name> <Name>SPS</Name>
<PopMenuRef pUID="PM_00120"/> <PopMenuRef pUID="PM_00115"/>
<PopMenuRef pUID="PM_00124"/> <PopMenuRef pUID="PM_00119"/>
<PopMenuItem> <PopMenuItem>
<NameRef>Eingang</NameRef> <NameRef>Eingang</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00128"/> <MacroRef MenuMacroID="MM_00123"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Ausgang</NameRef> <NameRef>Ausgang</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00129"/> <MacroRef MenuMacroID="MM_00124"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>SPS Schliessen</NameRef> <NameRef>SPS Schliessen</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00130"/> <MacroRef MenuMacroID="MM_00125"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
</PopMenu> </PopMenu>
<PopMenu UID="PM_00120"> <PopMenu UID="PM_00115">
<Name>TRO</Name> <Name>TRO</Name>
<PopMenuItem> <PopMenuItem>
<NameRef>Marker einfuegen</NameRef> <NameRef>Marker einfuegen</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00121"/> <MacroRef MenuMacroID="MM_00116"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Marker bearbeiten</NameRef> <NameRef>Marker bearbeiten</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00122"/> <MacroRef MenuMacroID="MM_00117"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Bearbeiten (Auto)</NameRef> <NameRef>Bearbeiten (Auto)</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00123"/> <MacroRef MenuMacroID="MM_00118"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
</PopMenu> </PopMenu>
<PopMenu UID="PM_00124"> <PopMenu UID="PM_00119">
<Name>Connections</Name> <Name>Connections</Name>
<PopMenuItem> <PopMenuItem>
<NameRef>Verbindung einfuegen</NameRef> <NameRef>Verbindung einfuegen</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00125"/> <MacroRef MenuMacroID="MM_00120"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Verbindung bearbeiten</NameRef> <NameRef>Verbindung bearbeiten</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00126"/> <MacroRef MenuMacroID="MM_00121"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Bearbeiten (Auto)</NameRef> <NameRef>Bearbeiten (Auto)</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00123"/> <MacroRef MenuMacroID="MM_00118"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
</PopMenu> </PopMenu>
<PopMenu UID="PM_00131"> <PopMenu UID="PM_00126">
<Name>Export</Name> <Name>Export</Name>
<PopMenuItem> <PopMenuItem>
<NameRef>Export Sivas</NameRef> <NameRef>Export Sivas</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00132"/> <MacroRef MenuMacroID="MM_00127"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Export CSV</NameRef> <NameRef>Export CSV</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00133"/> <MacroRef MenuMacroID="MM_00128"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
</PopMenu> </PopMenu>
<PopMenu UID="PM_00134"> <PopMenu UID="PM_00129">
<Name>Konfiguration</Name> <Name>Konfiguration</Name>
<PopMenuItem> <PopMenuItem>
<NameRef>Umschalten 2D und 3D</NameRef> <NameRef>Umschalten 2D und 3D</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00135"/> <MacroRef MenuMacroID="MM_00130"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Alle Bloecke auf 2D</NameRef> <NameRef>Alle Bloecke auf 2D</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00136"/> <MacroRef MenuMacroID="MM_00131"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Alle Bloecke auf 3D</NameRef> <NameRef>Alle Bloecke auf 3D</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00137"/> <MacroRef MenuMacroID="MM_00132"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Sprache</NameRef> <NameRef>Sprache</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00138"/> <MacroRef MenuMacroID="MM_00133"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Planquadrate an/aus</NameRef> <NameRef>Planquadrate an/aus</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00139"/> <MacroRef MenuMacroID="MM_00134"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Konfiguration Schliessen</NameRef> <NameRef>CSV-Export</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00130"/> <MacroRef MenuMacroID="MM_00135"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
</PopMenu> </PopMenu>
<PopMenu UID="PM_00141"> <PopMenu UID="PM_00136">
<Name>Tests</Name> <Name>Tests</Name>
<PopMenuItem> <PopMenuItem>
<NameRef>alle Tests ausfuehren und exportieren</NameRef> <NameRef>alle Tests ausfuehren und exportieren</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00142"/> <MacroRef MenuMacroID="MM_00137"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Tests ausfuehren und stehen lassen</NameRef> <NameRef>Tests ausfuehren und stehen lassen</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00143"/> <MacroRef MenuMacroID="MM_00138"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Export CSV/Sivas ALL</NameRef> <NameRef>Export CSV/Sivas ALL</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00144"/> <MacroRef MenuMacroID="MM_00139"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem IsSeparator="true"/> <PopMenuItem IsSeparator="true"/>
<PopMenuItem> <PopMenuItem>
<NameRef>Kreisel</NameRef> <NameRef>Kreisel</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00146"/> <MacroRef MenuMacroID="MM_00141"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Foerderer</NameRef> <NameRef>Foerderer</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00147"/> <MacroRef MenuMacroID="MM_00142"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Foerderer-Linienzug</NameRef> <NameRef>Foerderer-Linienzug</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00148"/> <MacroRef MenuMacroID="MM_00143"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Omniflo</NameRef> <NameRef>Omniflo</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00149"/> <MacroRef MenuMacroID="MM_00144"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Omniflo Strecke</NameRef> <NameRef>Omniflo Strecke</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00150"/> <MacroRef MenuMacroID="MM_00145"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Gefaellestrecke</NameRef> <NameRef>Gefaellestrecke</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00151"/> <MacroRef MenuMacroID="MM_00146"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Mubea Gesamtmodell</NameRef> <NameRef>Mubea Gesamtmodell</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00152"/> <MacroRef MenuMacroID="MM_00147"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>HundM05 Kreisel-Abschnitt</NameRef> <NameRef>HundM05 Kreisel-Abschnitt</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00153"/> <MacroRef MenuMacroID="MM_00148"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>KS 2D/3D pruefen (CSV)</NameRef> <NameRef>KS 2D/3D pruefen (CSV)</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00154"/> <MacroRef MenuMacroID="MM_00149"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
</PopMenu> </PopMenu>
<PopMenu UID="PM_00165"> <PopMenu UID="PM_00160">
<Alias>POP501</Alias> <Alias>POP501</Alias>
<Name>SSG_LIB Edit Context</Name> <Name>SSG_LIB Edit Context</Name>
<PopMenuItem> <PopMenuItem>
<NameRef>Kreisel bearbeiten</NameRef> <NameRef>Kreisel bearbeiten</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00166"/> <MacroRef MenuMacroID="MM_00161"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Omniflo Element bearbeiten</NameRef> <NameRef>Omniflo Element bearbeiten</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00167"/> <MacroRef MenuMacroID="MM_00162"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Gefaellestrecke bearbeiten</NameRef> <NameRef>Gefaellestrecke bearbeiten</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00168"/> <MacroRef MenuMacroID="MM_00163"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>VarioFoerderer bearbeiten</NameRef> <NameRef>VarioFoerderer bearbeiten</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00169"/> <MacroRef MenuMacroID="MM_00164"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>TRO-Marker bearbeiten</NameRef> <NameRef>TRO-Marker bearbeiten</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00170"/> <MacroRef MenuMacroID="MM_00165"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem> <PopMenuItem>
<NameRef>Verbindung bearbeiten</NameRef> <NameRef>Verbindung bearbeiten</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00171"/> <MacroRef MenuMacroID="MM_00166"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
<PopMenuItem IsSeparator="true"/> <PopMenuItem IsSeparator="true"/>
<PopMenuItem> <PopMenuItem>
<NameRef>SSG Bearbeiten (Auto)</NameRef> <NameRef>SSG Bearbeiten (Auto)</NameRef>
<MenuItem> <MenuItem>
<MacroRef MenuMacroID="MM_00173"/> <MacroRef MenuMacroID="MM_00168"/>
</MenuItem> </MenuItem>
</PopMenuItem> </PopMenuItem>
</PopMenu> </PopMenu>
+52 -77
View File
@@ -411,86 +411,61 @@
(tu-eq "csv:element-teileart/unbekannt" nil (tu-eq "csv:element-teileart/unbekannt" nil
(csv:element-teileart "AS_Element_90_links")) (csv:element-teileart "AS_Element_90_links"))
;; --- csv:sepliste-partition: sepliste in Foerdereinheit-/Gefaelleeinheit- ;; --- csv:kette-typ: Bausteintyp einer VF_n/GF_n-Kette aus dem Blocknamen --
;; Spannen aufteilen (Lauflaengen-Kodierung ueber den effektiven Typ) ----- (tu-eq "csv:kette-typ/as" "AS" (csv:kette-typ "AS_Element_90_links_3D"))
;; Reine Rechenfunktion auf (typ lfdnr strecke-typ welt-pt)-Tupeln, hier (tu-eq "csv:kette-typ/es" "ES" (csv:kette-typ "ES_Element_30_rechts_2D"))
;; ohne Zeichnung testbar (welt-pt wird von der Partitionierung selbst (tu-eq "csv:kette-typ/sep" "SEP" (csv:kette-typ "Staustrecke_Separator_SP_300_mm_3D"))
;; nicht gebraucht, darum ueberall nil). (tu-eq "csv:kette-typ/streckenelement" "STRECKENELEMENT"
(csv:kette-typ "Staustrecke_SP_1000_mm_3D"))
(tu-eq "csv:kette-typ/umlenk" "UMLENKSTATION"
(csv:kette-typ "Vario_Umlenkstation_500mm_rechts_3D"))
(tu-nil "csv:kette-typ/symbol-ist-kein-baustein" (csv:kette-typ "Separator_SP_3D"))
;; HundM05 VF_1-Beispiel (echt verifiziert): AS, SEP2=VF, SEP3=GF, SEP4=GF, ;; --- csv:kette-einheiten: geordnete Typfolge in VF-/GF-Einheiten schneiden
;; SEP5=VF, ES -> 3 Einheiten VF,GF,VF. SEP3+SEP4 bracketen GEMEINSAM eine ;; VF = Separator vor der Umlenkstation ... Motorstation; alles dazwischen
;; einzige Gefaelleeinheit (nicht zwei separate). ;; GF; AS/ES gehoeren zu keiner Einheit. Reine Rechenfunktion.
(setq _sep-hundm05 ;; HundM05 VF_5 (Bausteinfolge aus der Testzeichnung, per KS-Kette geordnet):
'(("AS" 1 nil nil) ("SEP" 2 "VF" nil) ("SEP" 3 "GF" nil) ;; GF(1) VF(2..10) GF(11 12) VF(13..25) GF(26 27) - passt zu L_GF_m
("SEP" 4 "GF" nil) ("SEP" 5 "VF" nil) ("ES" 6 nil nil))) ;; "0.727,0.201,0.318" des Wrappers (drei Gefaelleabschnitte).
(tu-eq "csv:sepliste-partition/hundm05" (setq _kette-hundm05
'(("VF" (1 2)) ("GF" (3 4)) ("VF" (5 6))) '("AS" "STRECKENELEMENT" "SEP" "UMLENKSTATION" "BOGEN" "STRECKENELEMENT"
(csv:sepliste-partition _sep-hundm05)) "BOGEN" "STRECKENELEMENT" "BOGEN" "BOGEN" "MOTORSTATION" "SEP"
"STRECKENELEMENT" "SEP" "UMLENKSTATION" "BOGEN" "STRECKENELEMENT" "BOGEN"
;; Minimalfall: nur AS-SEP(VF)-ES, kein Typwechsel -> 1 Foerdereinheit ueber "BOGEN" "BOGEN" "STRECKENELEMENT" "BOGEN" "BOGEN" "STRECKENELEMENT" "BOGEN"
;; die ganze Kette. "MOTORSTATION" "STRECKENELEMENT" "SEP" "ES"))
(setq _sep-minimal '(("AS" 1 nil nil) ("SEP" 2 "VF" nil) ("ES" 3 nil nil))) (tu-eq "csv:kette-einheiten/hundm05"
(tu-eq "csv:sepliste-partition/minimal" '(("GF" (1)) ("VF" (2 3 4 5 6 7 8 9 10)) ("GF" (11 12))
'(("VF" (1 2 3))) ("VF" (13 14 15 16 17 18 19 20 21 22 23 24 25)) ("GF" (26 27)))
(csv:sepliste-partition _sep-minimal)) (csv:kette-einheiten _kette-hundm05))
;; Reine Gefaellestrecke ohne Stationen -> eine einzige GF.
;; Einzel-GF-Fall: die Gefaelleeinheit wird nur von EINEM SEP (nicht zwei) (tu-eq "csv:kette-einheiten/nur-gf"
;; UND dem nachfolgenden ES bracketiert.
(setq _sep-einzel-gf
'(("AS" 1 nil nil) ("SEP" 2 "VF" nil) ("SEP" 3 "GF" nil) ("ES" 4 nil nil)))
(tu-eq "csv:sepliste-partition/einzel-gf"
'(("VF" (1 2)) ("GF" (3 4)))
(csv:sepliste-partition _sep-einzel-gf))
;; 3+ gleichtypige SEP-Eintraege hintereinander muessen weiterhin EINE
;; Einheit ergeben (nicht mehrere) - Lauflaengen-Regel, kein Sonderfall.
(setq _sep-dreifach-gf
'(("AS" 1 nil nil) ("SEP" 2 "VF" nil) ("SEP" 3 "GF" nil)
("SEP" 4 "GF" nil) ("SEP" 5 "GF" nil) ("SEP" 6 "VF" nil) ("ES" 7 nil nil)))
(tu-eq "csv:sepliste-partition/dreifach-gf"
'(("VF" (1 2)) ("GF" (3 4 5)) ("VF" (6 7)))
(csv:sepliste-partition _sep-dreifach-gf))
;; Kette beginnend mit GF (AS erbt den Typ des ersten SEP-Eintrags, hier GF
;; statt des sonstigen Default "VF").
(setq _sep-startet-gf
'(("AS" 1 nil nil) ("SEP" 2 "GF" nil) ("ES" 3 nil nil)))
(tu-eq "csv:sepliste-partition/startet-gf"
'(("GF" (1 2 3))) '(("GF" (1 2 3)))
(csv:sepliste-partition _sep-startet-gf)) (csv:kette-einheiten '("AS" "STRECKENELEMENT" "BOGEN" "SEP" "ES")))
;; Kette beginnt direkt mit dem Foerderer (Separator gleich hinter dem AS),
;; endet mit der Motorstation vor dem ES -> nur eine VF, keine leeren GF.
(tu-eq "csv:kette-einheiten/nur-vf"
'(("VF" (1 2 3 4)))
(csv:kette-einheiten '("AS" "SEP" "UMLENKSTATION" "STRECKENELEMENT" "MOTORSTATION" "ES")))
;; Umlenkstation ohne Separator davor beginnt die VF selbst; der Separator,
;; der NICHT vor einer Umlenkstation steht, bleibt im Gefaelle.
(tu-eq "csv:kette-einheiten/umlenk-ohne-sep"
'(("GF" (1 2)) ("VF" (3 4 5)))
(csv:kette-einheiten '("AS" "SEP" "BOGEN" "UMLENKSTATION" "STRECKENELEMENT" "MOTORSTATION" "ES")))
;; --- csv:dot2: 2D-Skalarprodukt --- ;; --- csv:kette-ordnen: Vektorkette K2 -> K1, unabhaengig von der
(tu-eqf "csv:dot2/achsen" 0.0 (csv:dot2 '(1.0 0.0) '(0.0 1.0))) ;; Eingangsreihenfolge; Start am AS. rec wird dafuer nicht gebraucht (nil).
(tu-eqf "csv:dot2/parallel" 6.0 (csv:dot2 '(2.0 0.0) '(3.0 0.0))) (setq _t-as (list "AS" nil '(0.0 0.0 0.0) '(10.0 0.0 0.0)))
(setq _t-s1 (list "STRECKENELEMENT" nil '(10.0 0.0 0.0) '(20.0 0.0 0.0)))
;; --- csv:element-unit-zuordnung: Elemente per Kettenrichtungs-Projektion (setq _t-b (list "BOGEN" nil '(20.0 0.0 0.0) '(20.0 10.0 0.0)))
;; den Einheiten-Spannen zuordnen und INNERHALB jeder Spanne nach der (setq _t-es (list "ES" nil '(20.0 10.0 0.0) '(30.0 10.0 0.0)))
;; Projektion sortieren ----------------------------------------------- (tu-eq "csv:kette-ordnen/verwuerfelt"
;; Gerade Kette AS(0,0) -SEP2(VF, 10,0)- SEP3(GF, 20,0) -ES(30,0)- entlang (list _t-as _t-s1 _t-b _t-es)
;; der X-Achse. unit-spans: VF=[1,2], GF=[2,3] (SEP2 gehoert zu beiden (csv:kette-ordnen (list _t-b _t-es _t-as _t-s1) "TEST"))
;; Spannen als Grenzmarker, siehe csv:sepliste-partition). ;; Innerhalb der Toleranz (2 mm) gilt ein Anschluss noch als geschlossen.
(setq _sep-proj (setq _t-s1b (list "STRECKENELEMENT" nil '(11.5 0.0 0.0) '(20.0 0.0 0.0)))
'(("AS" 1 nil (0.0 0.0 0.0)) ("SEP" 2 "VF" (10.0 0.0 0.0)) (tu-eq "csv:kette-ordnen/toleranz"
("SEP" 3 "GF" (20.0 0.0 0.0)) ("ES" 4 nil (30.0 0.0 0.0)))) (list _t-as _t-s1b)
(setq _spans-proj (csv:sepliste-partition _sep-proj)) (csv:kette-ordnen (list _t-s1b _t-as) "TEST"))
(tu-eq "csv:sepliste-partition/proj-spans" '(("VF" (1 2)) ("GF" (3 4))) _spans-proj)
;; Zwei Elemente: eines bei x=5 (klar in der VF-Spanne [0,10]), eines bei
;; x=17 (in der Luecke zwischen den Spannen-Grenzpunkten [10,20], aber
;; naeher an der GF-Grenze 20 als an der VF-Grenze 10 - eindeutig GF, kein
;; Gleichstand wie bei x=15 in der Luecken-Mitte).
(setq _elem-vf (list 'PROXY1 'WRAPPER "STRECKENELEMENT" '(5.0 0.0 0.0)))
(setq _elem-gf (list 'PROXY2 'WRAPPER "STRECKENELEMENT" '(17.0 0.0 0.0)))
(setq _zuord (csv:element-unit-zuordnung _spans-proj _sep-proj (list _elem-vf _elem-gf)))
(tu-eq "csv:element-unit-zuordnung/vf-treffer" (list _elem-vf) (nth 0 _zuord))
(tu-eq "csv:element-unit-zuordnung/gf-treffer" (list _elem-gf) (nth 1 _zuord))
;; Sortierung innerhalb einer Spanne: zwei Elemente in der VF-Spanne,
;; absichtlich in "falscher" Reihenfolge uebergeben - das Ergebnis muss
;; nach x sortiert sein (frueheres x zuerst).
(setq _elem-a (list 'PROXY_A 'WRAPPER "BOGEN" '(8.0 0.0 0.0)))
(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 -- ;; --- csv:export-modus-setzen / -p-Praedikate: 3 Modi + Ungueltig-Schutz --
;; Bestehenden Modus sichern/wiederherstellen, damit dieser Testblock keine ;; Bestehenden Modus sichern/wiederherstellen, damit dieser Testblock keine