[CHANGE] Omniflo-Weichen: je Winkel ein Dialog (OMNI_W90/OMNI_W45/OMNI_WP/OMNI_WK statt 12 Einzelbefehlen), Doppel/Dreiwege ueber neue Radiobuttons unter Richtung, nicht belegte Richtungen ausgegraut, OMNI_EDIT kann Einzel/Doppel/Dreiwege wechseln
This commit is contained in:
1 parent
04f5035386
commit
f044148121
8 files changed
+494
-612
No files matched your search
@@ -78,7 +78,7 @@ Die `start_briscad.bat` ruft `setenv.bat` auf und startet BricsCAD.
|
||||
| VarioFoerderer | `VarioFoerderer` | FOERDERANLAGE, VARIOFOERDERER_EDIT, Vario_Kette_Merge |
|
||||
| Gefaellestrecke | `Gefaellestrecke` | GEFAELLESTRECKE, GEFAELLESTRECKE_EDIT |
|
||||
| Kettenfoerderer | `KettenFoerderer` | KETTENFOERDERER (Menue: Omniflo -> KettenFoerderer), KF_EDIT (Doppelklick auf KF_n). KF_KS_PRUEFEN ist ein reiner Diagnosebefehl und bewusst NICHT im Menue |
|
||||
| Omniflo (komplett) | `OmniModulInsert` + `GeruestInsert` | OMNI_APB_*, OMNI_W*_*, OMNI_WB_* (Untermenue Weichenbatterien), OMNI_TEF_*, OMNI_TV_*, OMNI_LADESCHLEIFE_*, OMNI_EDIT; OMNI_FAHRSTRECKE / OMNI_FAHRSTRECKE_BESCHRIFTEN (GeruestInsert, Linien-Logik wie GERUEST_TRAEGER) |
|
||||
| Omniflo (komplett) | `OmniModulInsert` + `GeruestInsert` | OMNI_APB_*, OMNI_W90/OMNI_W45/OMNI_WP/OMNI_WK (je Winkel ein Dialog, Einzel/Doppel/Dreiwege ueber "Richtung"), OMNI_WKomb_*, OMNI_WB_* (Untermenue Weichenbatterien), OMNI_TEF_*, OMNI_TV_*, OMNI_LADESCHLEIFE_*, OMNI_EDIT; OMNI_FAHRSTRECKE / OMNI_FAHRSTRECKE_BESCHRIFTEN (GeruestInsert, Linien-Logik wie GERUEST_TRAEGER) |
|
||||
| Geruest | `GeruestInsert` | GERUEST_SAEULEN, GERUEST_ROHRABHAENGER, GERUEST_WANDBEFESTIGUNG (je eigener Dialog aus der Vorlage geruest.dcl, keine Umschaltung), GERUEST_TRAEGER (eigener Dialog), GERUEST_TRAEGER_BESCHRIFTEN (Untermenue Geruest -> Funktionen -> Traeger beschriften; alle Traeger der Zeichnung neu beschriften); Gattertraeger noch Platzhalter auf GERUEST (zeigt nur einen Hinweis) |
|
||||
| Connections | `Connection_Edit` + `SSG_LIB_Commands` | CONNECTION_INSERT, CONNECTION_EDIT, ILS_EINGANG_INSERT, ILS_AUSGANG_INSERT |
|
||||
| HW Planung | `HwPlanung` | HW_MATERIALFLUSS (Materialfluss erzeugen), HW_SYMBOLE (Symbole erzeugen, noch Platzhalter) |
|
||||
@@ -116,7 +116,7 @@ Detaillierte Dokumentation aller Funktionen und Befehle: siehe `Lisp/README.md`.
|
||||
| `vf_spec.lsp` (von vf_core.lsp NACH vf_linienzug.lsp geladen) | VF_SPEC_BAU | Linienzug-Ketten aus **Eingabedaten** bauen, ohne Dialog und ohne Konsolenfrage (Stufe 1 aus `doc/todo/plan-vf-interactive.md`). Eine **Spec** beschreibt eine Kette in Domaenenwerten (`"links"`, `"winkel"`, `"aussen"`, ja/nein) statt in Menue-Codes; `vsp-journal` uebersetzt sie in ein Eingabe-Journal, `vsp-bau-aus-spec` spielt es per `vfl-journal-replay-start` durch den UNVERAENDERTEN `vf-linienzug-modus` (Replay-Kern `vsp-bau-journal` - nimmt auch ein unveraendert uebernommenes, aufgezeichnetes Journal, z.B. aus `dxf_anlage_export.py`). Damit traegt der fertige Block dasselbe `SSG_VF_EDIT`-Journal wie eine handgebaute Kette und bleibt per Doppelklick editier- und 2D/3D-konvertierbar - kein Journal-Konsument muss etwas von Specs wissen. Wichtige Regeln, die der Uebersetzer kennt: der Menue-Code haengt am Frame (erste Sektion 4 Optionen ohne GF-Bogen, danach 5), `hz` steht nur beim ERSTEN Segment im Journal, und `erst-hor` unterscheidet den horizontalen Erstkoerper einer VF-Einheit (Separator-/Endpunktfragen vorab) vom gewinkelten (keine Frage). Fehlerverhalten: fail fast - `vsp-pruefen` sammelt ALLE Spec-Fehler, gebaut wird dann nichts (nichts wird geraten). Ergebnis-Record je Kette mit `status` (`executed`/`warnung`/`desync`/`abbruch`/`spec-fehler`), Block/Handle/Einfuegepunkt/Attributen, `prompts` (muss 0 sein), `glieder_soll` vs. `glieder_ist` (Desync-Detektor, der auch bei aufgehender Queue greift) und den gesammelten `meldungen`. Headless-Rahmen `vsp-headless-an`/`-aus` (Save/Restore von `*vfl-headless*`, `*vfl-wizard-mode*`, `*ssg-gui-aus*` + zaehlende Eingabe-Stubs). Spec-Datei flach als JSON (`ssg-load-json` liest zeilenweise), erzeugt von `lib/vf_spec_export.py`. Gegenstueck/Referenz in Python: derselbe Emitter, gegen die 5 echten HundM-Ketten rundlaufgeprueft |
|
||||
| `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; die Einfuegehoehe kommt aus der aktuellen Z des Einfuegepunkts statt aus XDATA/HOEHE_VON_mm, damit ein in Z verschobener Block per OK direkt auf der neuen Hoehe neu entsteht - gleiches gilt fuer die 2D/3D-Umschaltung `gf-konvertiere-ent`; der GF-Linienzug-Rebuild nutzt weiter die absoluten Segmentpunkte aus XDATA) |
|
||||
| `export.lsp` | EXPORTSIVAS, EXPORTCSV, OMNI_UPDATE_ATTRIBS, CSV_EXPORT_KONFIG | JSON-Sammlung und Python-Export (Omniflo-Merkmale/Sum-Zeile via lib/export_csv.py). **Gefrorene Layer**: `csv:collect-export-blocks` laesst Bloecke auf gefrorenen Layern aus (ausgeschaltete Layer zaehlen NICHT), Schalter `*csv-gefrorene-ausschliessen*` (Standard an, Toggle im Dialog CSV_EXPORT_KONFIG). Die Hilfsobjekte eines gefrorenen VF_n/GF_n (Separator-/Element-Kopien, Einheiten-/AS-ES-Marker) liegen auf eigenen Layern und werden darum ueber `*csv-ausschluss-enames*` mit ausgelassen (gesetzt in `csv:export-vorbereiten` per `csv:hilfskopien-ausschluss`); erzeugt und nummeriert werden sie trotzdem, damit IDs stabil bleiben. DrawPlanquadrate nutzt dieselbe Sammlung und folgt dem Filter. **Hoehen-Neuberechnung**: erster Schritt von `csv:export-vorbereiten` ist `csv:hoehen-aktualisieren` - in Z verschobene `KREISEL_*`/`ECKRAD_*`/`VF_*`/`GF_*` bekommen ihre Hoehen-Attribute aus der Einfuege-Z neu (reiner Kern `csv:hoehen-werte`, getestet; Formeln/Rundung wie beim Bau: Kreisel HOEHE + MONTAGEHOEHE_m=z/1000, Eckrad HOEHE, GF/VF HOEHE_VON_mm=(fix z), MONTAGEHOEHE_m GF=z/1000 bzw. VF=(VON+BIS)/2000). HOEHE_BIS_mm = VON - (VON_alt - BIS_alt), bewusst NICHT z - DELTA_H_mm (ohne Vorzeichen -> steigende VF falsch, separat abgeschnitten -> 1 mm Abweichung); DELTA_H_mm nur Rueckfall. Nicht verschobene Bloecke (Attribut passt zu z) bleiben unangetastet, damit Bau-Werte und Hand-Korrekturen (z.B. Buehnen-Abzug aus HOEHEN_CHECK) bit-genau erhalten bleiben |
|
||||
| `OmniModulInsert.lsp` | OMNI_LOAD, OMNI_APB_*, OMNI_W*_*, OMNI_TEF_*, OMNI_TV_*, OMNI_APBW_*, OMNI_WB_*, OMNI_LADESCHLEIFE_AP110, OMNI_EDIT | Omniflo-Komponenten: Boegen, Weichen, Weichenbatterien (`OMNI_WB_<ARTINR>`: DWG aus `data/omniflo/2D`, Menuetexte/Nummern aus `data/omniflo/weichenbatterien_artinr_quelle.dxf`; im Katalog `omniflo_weichen.json` als `WeichenTyp` "Weichenbatterie" ohne Winkel/Breite/Laenge, damit der Doppelklick den Weichen-Dialog mit Richtung/Schaltung oeffnet), Verbinder (`OMNI_TV_*`: DWGs dimensionsunabhaengig in `data/omniflo/Verbinder`, `omni:insert-verbinder` -> gemeinsamer Einfuegekern `omni:insert-datei`, den auch `omni:insert-dxf` nutzt; im Export ueber `pattern_verbinder` = `VB_*, TV_*` gesammelt (`csv:collect-export-blocks`, `ssg-id-collect-blocks`), Sivas-Zeilen ueber TEILEART/ARTINR wie alle Omniflo-Teile), Transferwagen, Ladeschleifen (`data/json/omniflo_ladeschleifen.json`, per `ssg-json-laden`, da die Beschreibungen Kommas enthalten; Blockdatei darf `.dwg` statt `.dxf` sein), Edit-Dialog (OMNI_EDIT waehlt das bearbeitete Bauteil im Dropdown vor - globale `*omni-dlg-vorwahl*` statt neuer Dialog-Parameter; im Weichen-Dialog stehen Schaltung/Richtung auf seinen Werten, ein Filterwechsel waehlt das Gegenstueck mit dem aehnlichsten ProfilTyp, reine Kerne `omni:profil-aehnlichkeit`/`omni:vorwahl-index` getestet) |
|
||||
| `OmniModulInsert.lsp` | OMNI_LOAD, OMNI_APB_*, OMNI_W90, OMNI_W45, OMNI_WP, OMNI_WK, OMNI_WKomb_*, OMNI_TEF_*, OMNI_TV_*, OMNI_APBW_*, OMNI_WB_*, OMNI_LADESCHLEIFE_AP110, OMNI_EDIT | Omniflo-Komponenten: Boegen, Weichen (je Winkel EIN Dialog; Einzel/Doppel/Dreiwege ueber die Radiogruppe "Richtung" = KurvenRichtung 1/2/3/7, `*omni-weichen-std-typen*`/`omni:weichen-basis-liste`/`omni:weichen-richtung-key` getestet; Deltaweichen tragen ebenfalls 3/7 und bleiben darum per WeichenTyp draussen; Richtungen ohne Katalogeintrag ausgegraut; OMNI_EDIT erlaubt so den Wechsel Einzel <-> Doppel <-> Dreiwege), Weichenbatterien (`OMNI_WB_<ARTINR>`: DWG aus `data/omniflo/2D`, Menuetexte/Nummern aus `data/omniflo/weichenbatterien_artinr_quelle.dxf`; im Katalog `omniflo_weichen.json` als `WeichenTyp` "Weichenbatterie" ohne Winkel/Breite/Laenge, damit der Doppelklick den Weichen-Dialog mit Richtung/Schaltung oeffnet), Verbinder (`OMNI_TV_*`: DWGs dimensionsunabhaengig in `data/omniflo/Verbinder`, `omni:insert-verbinder` -> gemeinsamer Einfuegekern `omni:insert-datei`, den auch `omni:insert-dxf` nutzt; im Export ueber `pattern_verbinder` = `VB_*, TV_*` gesammelt (`csv:collect-export-blocks`, `ssg-id-collect-blocks`), Sivas-Zeilen ueber TEILEART/ARTINR wie alle Omniflo-Teile), Transferwagen, Ladeschleifen (`data/json/omniflo_ladeschleifen.json`, per `ssg-json-laden`, da die Beschreibungen Kommas enthalten; Blockdatei darf `.dwg` statt `.dxf` sein), Edit-Dialog (OMNI_EDIT waehlt das bearbeitete Bauteil im Dropdown vor - globale `*omni-dlg-vorwahl*` statt neuer Dialog-Parameter; im Weichen-Dialog stehen Schaltung/Richtung auf seinen Werten, ein Filterwechsel waehlt das Gegenstueck mit dem aehnlichsten ProfilTyp, reine Kerne `omni:profil-aehnlichkeit`/`omni:vorwahl-index` getestet) |
|
||||
| `SSG_LIB_Commands.lsp` | ILS_BTMT_Beladung, ILS_BTMT_Entladung, ILS_SCANNER_INSERT, ILS_SEPARATOR_INSERT, ILS_EINGANG_INSERT, ILS_AUSGANG_INSERT, SSG_BLOCKEDIT, SSG_DIM_SWITCH, SSG_SPRACHE | BTMT Be-/Entladung (`ils-insert-station`: wiederholtes Einfuegen von `BTMT-Beladung` bzw. `SC_Entladung`, Drehung interaktiv, Layer aus `LAYER`-Attribut, Dimension via `ssg-ils-block-laden`) + Sensoren (`ils-insert-sensor`) + Eingang-/Ausgang-Symbol (frei platzierbar wie BTMT Be-/Entladung, ueber `ils-insert-station` mit den Rohnamen `Eingang`/`Ausgang`, Bloecke `Eingang_<DIM>.dwg`/`Ausgang_<DIM>.dwg` in data/ils) + Doppelklick/Kontextmenue-Dispatcher + Konfiguration (2D/3D, Sprache) |
|
||||
| `Tro_Edit.lsp` | TRO_INSERT, TRO_EDIT | TRO-Marker (Block `TRO_SYM_<Typ>`) fuer sps_skel (lib/tro_annotate.py): TRO_INSERT fuegt eine bestehende Blockdefinition an einem gewaehlten Punkt ein und setzt ID/TYPE (bricht ab, wenn der Typ noch keine Blockdefinition in der Zeichnung hat - die entsteht nur ueber tro_annotate.py); TRO_EDIT aendert ID/TYPE eines bestehenden Markers per Dialog. Typliste aus `tro_types.lsp` (von `tro_annotate.py --emit-lisp` nach DXFM_LISP geschrieben). Der Dispatcher SSG_BLOCKEDIT leitet Blocknamen `TRO_*` zu TRO_EDIT. |
|
||||
| `Connection_Edit.lsp` | CONNECTION_INSERT, CONNECTION_EDIT | Verbindung zwischen zwei TRO-Markern als Block `CONNECTION_ARROW` (Pfeilmitte); Beziehung ueber die INTERNEN IDs der TROs (`FROM_ID`/`TO_ID`, sichtbar `FROM_TRO`/`TO_TRO`, `KIND` flow/colocated), damit Umbenennen/Verschieben die Zuordnung nicht bricht. Dialog `connection_edit.dcl`; SSG_BLOCKEDIT leitet `CONNECTION_*` hierher (vor dem TRO-Zweig) |
|
||||
@@ -140,7 +140,7 @@ Detaillierte Dokumentation aller Funktionen und Befehle: siehe `Lisp/README.md`.
|
||||
| `gefaellestrecke.dcl` | GEFAELLESTRECKE Modus 1 (Gefaellestrecke.lsp, `gf-dialog-eingabe`) |
|
||||
| `variofoerderer.dcl` | FOERDERANLAGE Standardfall + Werteingabe (vf_standard.lsp, `vfs-dialog-eingabe-basis`/`vfs-dialog-winkel-verteilung`) |
|
||||
| `omniflo_boegen.dcl` | OMNI_APB_* (OmniModulInsert.lsp) |
|
||||
| `omniflo_weichen.dcl` | OMNI_W*_* (OmniModulInsert.lsp) |
|
||||
| `omniflo_weichen.dcl` | OMNI_W90/W45/WP/WK, OMNI_WKomb_*, OMNI_EDIT (OmniModulInsert.lsp, `omni:weichen-dialog`); Radiogruppe Richtung `ri_alle`/`ri_links`/`ri_rechts`/`ri_doppel`/`ri_dreiwege` |
|
||||
| `omniflo_ladeschleifen.dcl` | OMNI_LADESCHLEIFE_* (OmniModulInsert.lsp, `omni:ladeschleifen-dialog`) |
|
||||
| `sprache.dcl` | SSG_SPRACHE (SSG_LIB_Commands.lsp) |
|
||||
| `tro_insert.dcl` | TRO_INSERT (Tro_Edit.lsp) |
|
||||
|
||||
+89
-133
@@ -552,14 +552,58 @@
|
||||
;; ============================================================
|
||||
|
||||
|
||||
;; --- Standard-Weichentypen eines Winkel-Dialogs ---
|
||||
;; Einzel-, Doppel- und Dreiwegeweiche eines Winkels stehen in EINEM Dialog,
|
||||
;; unterschieden ueber die Radiogruppe "Richtung" (KurvenRichtung 1/2/3/7).
|
||||
;; Delta-/Stern-/Weichenbatterie bleiben eigene Dialoge - Deltaweichen tragen
|
||||
;; ebenfalls KurvenRichtung 3/7 und duerfen darum nicht in diese Liste.
|
||||
(setq *omni-weichen-std-typen* '("Einzelweiche" "Doppelweiche" "Dreiwegeweiche"))
|
||||
|
||||
|
||||
;; --- KurvenRichtung -> Radiobutton der Richtungsgruppe ---
|
||||
;; Katalog: 1 = links, 2 = rechts, 3 = Doppel, 7 = Dreiwege.
|
||||
(setq *omni-weichen-richtungen*
|
||||
'(("1" . "ri_links") ("2" . "ri_rechts") ("3" . "ri_doppel") ("7" . "ri_dreiwege")))
|
||||
|
||||
;; kr = KurvenRichtung als String; Rueckgabe Tile-Key oder nil (unbekannt)
|
||||
(defun omni:weichen-richtung-key (kr)
|
||||
(cdr (assoc kr *omni-weichen-richtungen*))
|
||||
)
|
||||
|
||||
|
||||
;; --- Basisliste eines Weichen-Dialogs (reiner Kern) ---
|
||||
;; lst = Weichenkatalog
|
||||
;; winkel = KurvenWinkel oder nil (alle Winkel)
|
||||
;; weichentyp = WeichenTyp-String, Liste von WeichenTypen oder nil (alle)
|
||||
;; breite = Breite oder nil (z.B. Delta 1400/700 vs. 1600/800)
|
||||
(defun omni:weichen-basis-liste (lst winkel weichentyp breite / typen)
|
||||
(if winkel (setq lst (omni:filter lst "KurvenWinkel" winkel)))
|
||||
(if weichentyp
|
||||
(progn
|
||||
(setq typen (if (listp weichentyp) weichentyp (list weichentyp)))
|
||||
(setq lst (vl-remove-if-not
|
||||
'(lambda (e) (member (cdr (assoc "WeichenTyp" e)) typen))
|
||||
lst))
|
||||
)
|
||||
)
|
||||
(if breite
|
||||
(setq lst (vl-remove-if-not
|
||||
'(lambda (e) (= (cdr (assoc "Breite" e)) breite))
|
||||
lst))
|
||||
)
|
||||
lst
|
||||
)
|
||||
|
||||
|
||||
;; --- Aktuelle Filterwerte aus Radio-Buttons lesen ---
|
||||
(defun omni:weichen-get-filter ( / sch ri)
|
||||
(defun omni:weichen-get-filter ( / sch ri paar)
|
||||
(setq sch "alle")
|
||||
(if (= (get_tile "sch_m") "1") (setq sch "M"))
|
||||
(if (= (get_tile "sch_p") "1") (setq sch "P"))
|
||||
(setq ri "alle")
|
||||
(if (= (get_tile "ri_links") "1") (setq ri "1"))
|
||||
(if (= (get_tile "ri_rechts") "1") (setq ri "2"))
|
||||
(foreach paar *omni-weichen-richtungen*
|
||||
(if (= (get_tile (cdr paar)) "1") (setq ri (car paar)))
|
||||
)
|
||||
(list sch ri)
|
||||
)
|
||||
|
||||
@@ -567,7 +611,7 @@
|
||||
;; --- Gefilterte Weichen-Liste aufbauen ---
|
||||
;; basis-liste = alle Weichen fuer den gewaehlten Winkel/Typ
|
||||
;; sch-filter = "M", "P" oder "alle"
|
||||
;; ri-filter = "1", "2" oder "alle"
|
||||
;; ri-filter = KurvenRichtung "1", "2", "3", "7" oder "alle"
|
||||
(defun omni:weichen-filter-liste (basis-liste sch-filter ri-filter / eintrag sch kr ergebnis)
|
||||
(setq ergebnis nil)
|
||||
(foreach eintrag basis-liste
|
||||
@@ -653,13 +697,15 @@
|
||||
|
||||
;; --- Weichen-Auswahl-Dialog oeffnen ---
|
||||
;; winkel = KurvenWinkel (90, 45, 0, 22.5)
|
||||
;; weichentyp = "Einzelweiche", "Doppelweiche", "Dreiwegeweiche" oder nil fuer alle
|
||||
;; weichentyp = WeichenTyp-String, Liste von WeichenTypen (z.B.
|
||||
;; *omni-weichen-std-typen*) oder nil fuer alle
|
||||
;; init-hoehe / init-drehung = Vorbelegung (optional, fuer Edit-Modus)
|
||||
;; Rueckgabe: (eintrag hoehe drehung) oder nil bei Abbruch
|
||||
;; Vorwahl: *omni-dlg-vorwahl* (von OMNI_EDIT gesetzt) wird vorgewaehlt, die
|
||||
;; Filter Schaltung/Richtung stehen dann auf dessen Werten.
|
||||
;; Richtungs-Buttons ohne passenden Katalogeintrag werden ausgegraut.
|
||||
(defun omni:weichen-dialog (winkel weichentyp init-hoehe init-drehung breite / dcl-pfad dat basis-liste
|
||||
ergebnis dlg-hoehe sch kr)
|
||||
ergebnis dlg-hoehe sch kr key paar vorhanden)
|
||||
(if (null *OMNI-WEICHEN*) (omni:load-data))
|
||||
|
||||
;; Defaults
|
||||
@@ -667,27 +713,8 @@
|
||||
;; dem Einfuegen interaktiv abgefragt (omni:insert-dxf mit drehung=nil).
|
||||
(if (null init-hoehe) (setq init-hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000")))
|
||||
|
||||
;; Weichen nach Winkel filtern (nil = alle Winkel)
|
||||
(if winkel
|
||||
(setq basis-liste (omni:filter *OMNI-WEICHEN* "KurvenWinkel" winkel))
|
||||
(setq basis-liste *OMNI-WEICHEN*)
|
||||
)
|
||||
|
||||
;; Optional nach WeichenTyp filtern
|
||||
(if weichentyp
|
||||
(setq basis-liste
|
||||
(vl-remove-if-not
|
||||
'(lambda (e) (= (cdr (assoc "WeichenTyp" e)) weichentyp))
|
||||
basis-liste))
|
||||
)
|
||||
|
||||
;; Optional nach Breite filtern (z.B. Weichenkombinationen Delta 1400/700 vs. 1600/800)
|
||||
(if breite
|
||||
(setq basis-liste
|
||||
(vl-remove-if-not
|
||||
'(lambda (e) (= (cdr (assoc "Breite" e)) breite))
|
||||
basis-liste))
|
||||
)
|
||||
;; Weichen nach Winkel, WeichenTyp(en) und Breite eingrenzen
|
||||
(setq basis-liste (omni:weichen-basis-liste *OMNI-WEICHEN* winkel weichentyp breite))
|
||||
|
||||
(if (null basis-liste)
|
||||
(progn
|
||||
@@ -698,7 +725,11 @@
|
||||
((= (type winkel) 'INT) (strcat (itoa winkel) (ssg-text "omni-grad")))
|
||||
(T (strcat (rtos winkel 2 1) (ssg-text "omni-grad")))
|
||||
)
|
||||
(if weichentyp (strcat " / " weichentyp) "")
|
||||
(cond
|
||||
((null weichentyp) "")
|
||||
((listp weichentyp) (strcat " / " (ssg-join weichentyp ", ")))
|
||||
(T (strcat " / " weichentyp))
|
||||
)
|
||||
)
|
||||
))
|
||||
nil
|
||||
@@ -714,6 +745,16 @@
|
||||
(if (not (new_dialog "omniflo_weichen" dat))
|
||||
(progn (alert (ssg-text "omni-weiche-dialog-ladefehler")) nil)
|
||||
(progn
|
||||
;; Richtungen ohne Katalogeintrag ausgrauen (z.B. Weichenbatterie:
|
||||
;; kein Doppel/Dreiwege, Stern: kein Links/Rechts); "Alle" bleibt.
|
||||
(setq vorhanden
|
||||
(mapcar '(lambda (e) (omni:sivasid-to-str (cdr (assoc "KurvenRichtung" e))))
|
||||
basis-liste))
|
||||
(foreach paar *omni-weichen-richtungen*
|
||||
(if (not (member (car paar) vorhanden))
|
||||
(mode_tile (cdr paar) 1))
|
||||
)
|
||||
|
||||
;; Beim Edit (OMNI_EDIT, *omni-dlg-vorwahl*) die Filter auf Schaltung/
|
||||
;; Richtung des Bauteils stellen; ohne Vorwahl bleibt "Alle".
|
||||
(setq *omni-dlg-weiche-akt* *omni-dlg-vorwahl*)
|
||||
@@ -723,8 +764,8 @@
|
||||
(setq kr (omni:sivasid-to-str (cdr (assoc "KurvenRichtung" *omni-dlg-vorwahl*))))
|
||||
(cond ((= sch "M") (set_tile "sch_m" "1"))
|
||||
((= sch "P") (set_tile "sch_p" "1")))
|
||||
(cond ((= kr "1") (set_tile "ri_links" "1"))
|
||||
((= kr "2") (set_tile "ri_rechts" "1")))
|
||||
(if (setq key (omni:weichen-richtung-key kr))
|
||||
(set_tile key "1"))
|
||||
)
|
||||
)
|
||||
|
||||
@@ -743,8 +784,8 @@
|
||||
(action_tile "sch_m" "(omni:weichen-dlg-refresh)")
|
||||
(action_tile "sch_p" "(omni:weichen-dlg-refresh)")
|
||||
(action_tile "ri_alle" "(omni:weichen-dlg-refresh)")
|
||||
(action_tile "ri_links" "(omni:weichen-dlg-refresh)")
|
||||
(action_tile "ri_rechts" "(omni:weichen-dlg-refresh)")
|
||||
(foreach paar *omni-weichen-richtungen*
|
||||
(action_tile (cdr paar) "(omni:weichen-dlg-refresh)"))
|
||||
|
||||
;; OK/Abbrechen
|
||||
(action_tile "accept"
|
||||
@@ -962,9 +1003,11 @@
|
||||
;; OMNIFLO WEICHEN-BEFEHLE
|
||||
;; ============================================================
|
||||
|
||||
;; --- Omniflo / Weiche 90 Grad ---
|
||||
(defun c:OMNI_W90_Einfach ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 90 "Einzelweiche" nil nil nil))
|
||||
;; Je Winkel EIN Dialog mit Einzel-, Doppel- und Dreiwegeweichen; der Typ wird
|
||||
;; ueber die Radiogruppe "Richtung" gewaehlt (Links/Rechts/Doppel/Dreiwege).
|
||||
;; Ersetzt die frueheren OMNI_W<winkel>_Einfach/_Doppel/_Dreiwege.
|
||||
(defun omni:weichen-befehl (winkel / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog winkel *omni-weichen-std-typen* nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
@@ -972,107 +1015,17 @@
|
||||
(princ)
|
||||
)
|
||||
|
||||
(defun c:OMNI_W90_Doppel ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 90 "Doppelweiche" nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
;; --- Omniflo / Weichen 90 Grad ---
|
||||
(defun c:OMNI_W90 () (omni:weichen-befehl 90))
|
||||
|
||||
(defun c:OMNI_W90_Dreiwege ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 90 "Dreiwegeweiche" nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
;; --- Omniflo / Weichen 45 Grad ---
|
||||
(defun c:OMNI_W45 () (omni:weichen-befehl 45))
|
||||
|
||||
;; --- Omniflo / Weiche 45 Grad ---
|
||||
(defun c:OMNI_W45_Einfach ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 45 "Einzelweiche" nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
;; --- Omniflo / Weichen Parallel (KurvenWinkel 0) ---
|
||||
(defun c:OMNI_WP () (omni:weichen-befehl 0))
|
||||
|
||||
(defun c:OMNI_W45_Doppel ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 45 "Doppelweiche" nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
(defun c:OMNI_W45_Dreiwege ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 45 "Dreiwegeweiche" nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
;; --- Omniflo / Weichen Parallel ---
|
||||
(defun c:OMNI_WP_Einfach ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 0 "Einzelweiche" nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
(defun c:OMNI_WP_Doppel ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 0 "Doppelweiche" nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
(defun c:OMNI_WP_Dreiwege ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 0 "Dreiwegeweiche" nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
;; --- Omniflo / Weichenkoerper ---
|
||||
(defun c:OMNI_WK_Einfach ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 22.5 "Einzelweiche" nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
(defun c:OMNI_WK_Doppel ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 22.5 "Doppelweiche" nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
(defun c:OMNI_WK_Dreiwege ( / dlg-result)
|
||||
(setq dlg-result (omni:weichen-dialog 22.5 "Dreiwegeweiche" nil nil nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-weiche"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
;; --- Omniflo / Weichenkoerper (KurvenWinkel 22.5) ---
|
||||
(defun c:OMNI_WK () (omni:weichen-befehl 22.5))
|
||||
|
||||
;; --- Omniflo / Weichenkombinationen ---
|
||||
(defun c:OMNI_WKomb_Delta_1400 ( / dlg-result)
|
||||
@@ -1228,6 +1181,9 @@
|
||||
(T
|
||||
(setq winkel (cdr (assoc "KurvenWinkel" eintrag)))
|
||||
(setq weichentyp (cdr (assoc "WeichenTyp" eintrag)))
|
||||
;; Einzel/Doppel/Dreiwege teilen sich einen Dialog - Wechsel ueber "Richtung"
|
||||
(if (member weichentyp *omni-weichen-std-typen*)
|
||||
(setq weichentyp *omni-weichen-std-typen*))
|
||||
(setq dlg-result (omni:weichen-dialog winkel weichentyp hoehe drehung nil))
|
||||
)
|
||||
)
|
||||
|
||||
+1
-1
@@ -703,7 +703,7 @@ AutoLISP-Implementierung fuer alle Omniflo-Komponenten: Boegen, Weichen, Verbind
|
||||
| --- | --- | --- |
|
||||
| Daten | `OMNI_LOAD`, `OMNI_INFO_BOGEN`, `OMNI_INFO_WEICHE` | JSON-Daten laden und abfragen |
|
||||
| Boegen | `OMNI_APB_630_90`, `OMNI_APB_550_675`, `OMNI_APB_630_45`, `OMNI_APB_550_225`, `OMNI_APB_650_180` | Omniflo-Boegen ueber DCL-Dialog einfuegen |
|
||||
| Weichen | `OMNI_W90_*`, `OMNI_W45_*`, `OMNI_WP_*`, `OMNI_WK_*`, `OMNI_WKomb_*` | Omniflo-Weichen (Einfach/Doppel/Dreiwege, Delta, Stern) |
|
||||
| Weichen | `OMNI_W90`, `OMNI_W45`, `OMNI_WP`, `OMNI_WK`, `OMNI_WKomb_*` | Omniflo-Weichen: je Winkel EIN Dialog mit Einzel-, Doppel- und Dreiwegeweichen, Typwahl ueber die Radiogruppe "Richtung" (Links/Rechts/Doppel/Dreiwege = KurvenRichtung 1/2/3/7, Basisliste `omni:weichen-basis-liste` mit `*omni-weichen-std-typen*`, nicht belegte Richtungen ausgegraut); Delta/Stern eigene Dialoge |
|
||||
| Weichenbatterien | `OMNI_WB_<ARTINR>` (16) | Fertige Weichenbatterien, DWG `data/omniflo/2D/<ARTINR>.dwg` (nur 2D, Rueckfall per `omni:omniflo-datei-finden`), Menuetexte/Nummern aus `data/omniflo/weichenbatterien_artinr_quelle.dxf` (BESCHR/ARTINR). Im Katalog `omniflo_weichen.json` als `WeichenTyp` "Weichenbatterie" (ohne Winkel/Breite/Laenge), darum oeffnet der Doppelklick (`OMNI_EDIT`) den Weichen-Dialog mit allen Batterien - Richtung und Schaltung umstellbar |
|
||||
| Ladeschleifen | `OMNI_LADESCHLEIFE_AP110` | Ladeschleife aus `omniflo_ladeschleifen.json` ueber DCL-Dialog (`dcl/omniflo_ladeschleifen.dcl`) einfuegen; Daten per `ssg-json-laden` (Beschreibungen enthalten Kommas). Blockdatei `<Sivasnr>.dwg` unter `DXFM_OMNIFLO` (`omni:insert-dxf` faellt auf `.dwg` zurueck, wenn keine `.dxf` existiert). Per `OMNI_EDIT` editierbar |
|
||||
| TEF Elemente | `OMNI_TEF_UmlenkR/L`, `OMNI_TEF_AntriebL/R`, `OMNI_TEF_Gerade` | Feste TEF-Bauteile ohne Sivas-Auswahl, direkt per `omni:insert-dxf` an gewaehltem Punkt eingefuegt (Dateien unter `DXFM_OMNIFLO`) |
|
||||
|
||||
@@ -28,6 +28,8 @@ omniflo_weichen : dialog {
|
||||
: radio_button { key = "ri_alle"; label = "Alle"; value = "1"; }
|
||||
: radio_button { key = "ri_links"; label = "Links"; }
|
||||
: radio_button { key = "ri_rechts"; label = "Rechts"; }
|
||||
: radio_button { key = "ri_doppel"; label = "Doppel"; }
|
||||
: radio_button { key = "ri_dreiwege"; label = "Dreiwege"; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -91,10 +91,10 @@ Gross-/Kleinschreibung spielt an der Kommandozeile keine Rolle.
|
||||
| `OMNI_LOAD` | Omniflo-Komponentendaten laden |
|
||||
| `OMNI_INFO_BOGEN` / `OMNI_INFO_WEICHE` | Daten eines Bogens / einer Weiche anzeigen |
|
||||
| `OMNI_APB60_90`, `OMNI_APB_630_90`, `OMNI_APB_630_45`, `OMNI_APB_550_675`, `OMNI_APB_550_225`, `OMNI_APB_650_180` | Boegen einfuegen (Dialog `omniflo_boegen.dcl`) |
|
||||
| `OMNI_W90_Einfach`/`_Doppel`/`_Dreiwege` | Weichen 90 Grad (Dialog `omniflo_weichen.dcl`) |
|
||||
| `OMNI_W45_Einfach`/`_Doppel`/`_Dreiwege` | Weichen 45 Grad |
|
||||
| `OMNI_WP_Einfach`/`_Doppel`/`_Dreiwege` | Parallelweichen |
|
||||
| `OMNI_WK_Einfach`/`_Doppel`/`_Dreiwege` | Weichenkoerper |
|
||||
| `OMNI_W90` | Weichen 90 Grad (Dialog `omniflo_weichen.dcl`; Einzel/Doppel/Dreiwege ueber "Richtung": Links/Rechts/Doppel/Dreiwege) |
|
||||
| `OMNI_W45` | Weichen 45 Grad |
|
||||
| `OMNI_WP` | Parallelweichen |
|
||||
| `OMNI_WK` | Weichenkoerper |
|
||||
| `OMNI_WKomb_Delta_1400`, `OMNI_WKomb_Delta_1600`, `OMNI_WKomb_Star` | Weichenkombinationen (Delta, Stern) |
|
||||
| `OMNI_APBW_R400_45_140`, `OMNI_APBW_R400_675_260`, `OMNI_APBW_R550_45_77`, `OMNI_APBW_R550_45_194`, `OMNI_APBW_R550_225_360`, `OMNI_APBW_R550_225_410A`/`B`/`C`, `OMNI_APBW_R550_675_58`/`_125`/`_208`/`_360`, `OMNI_APBW_R650_90_300`, `OMNI_APBW_R750_90_200` | Boegen fuer Weichen (fest, ohne Dialog) |
|
||||
| `OMNI_TEF_UmlenkL`/`R`, `OMNI_TEF_AntriebL`/`R`, `OMNI_TEF_Gerade` | TEF-Elemente (fest, ohne Drehung) |
|
||||
|
||||
+357
-456
File diff suppressed because it is too large.
Load diff
+4
-15
@@ -49,21 +49,10 @@
|
||||
[->Boegen APB60]
|
||||
[<-90]^C^C(ssg-ensure "OmniModulInsert") OMNI_APB60_90
|
||||
[->Weichen]
|
||||
[Einfach 90]^C^C(ssg-ensure "OmniModulInsert") OMNI_W90_Einfach
|
||||
[Doppel 90]^C^C(ssg-ensure "OmniModulInsert") OMNI_W90_Doppel
|
||||
[Dreiwege 90]^C^C(ssg-ensure "OmniModulInsert") OMNI_W90_Dreiwege
|
||||
[--]
|
||||
[Einfach 45]^C^C(ssg-ensure "OmniModulInsert") OMNI_W45_Einfach
|
||||
[Doppel 45]^C^C(ssg-ensure "OmniModulInsert") OMNI_W45_Doppel
|
||||
[Dreiwege 45]^C^C(ssg-ensure "OmniModulInsert") OMNI_W45_Dreiwege
|
||||
[--]
|
||||
[Einfach Parallel]^C^C(ssg-ensure "OmniModulInsert") OMNI_WP_Einfach
|
||||
[Doppel Parallel]^C^C(ssg-ensure "OmniModulInsert") OMNI_WP_Doppel
|
||||
[Dreiwege Parallel]^C^C(ssg-ensure "OmniModulInsert") OMNI_WP_Dreiwege
|
||||
[--]
|
||||
[Einfach 22.5]^C^C(ssg-ensure "OmniModulInsert") OMNI_WK_Einfach
|
||||
[Doppel 22.5]^C^C(ssg-ensure "OmniModulInsert") OMNI_WK_Doppel
|
||||
[Dreiwege 22.5]^C^C(ssg-ensure "OmniModulInsert") OMNI_WK_Dreiwege
|
||||
[Weichen 90]^C^C(ssg-ensure "OmniModulInsert") OMNI_W90
|
||||
[Weichen 45]^C^C(ssg-ensure "OmniModulInsert") OMNI_W45
|
||||
[Weichen Parallel]^C^C(ssg-ensure "OmniModulInsert") OMNI_WP
|
||||
[Weichen 22.5]^C^C(ssg-ensure "OmniModulInsert") OMNI_WK
|
||||
[--]
|
||||
[Delta 1600/800]^C^C(ssg-ensure "OmniModulInsert") OMNI_WKomb_Delta_1600
|
||||
[Delta 1400/700]^C^C(ssg-ensure "OmniModulInsert") OMNI_WKomb_Delta_1400
|
||||
|
||||
@@ -1253,6 +1253,40 @@
|
||||
(("Sivasnr" . 834372515) ("ProfilTyp" . "Weiche S C R1S 2C 200/1200/950 mit M")))))
|
||||
(tu-nil "omni:vorwahl-index/leer" (omni:vorwahl-index (car _wl) nil))
|
||||
(tu-nil "omni:vorwahl-index/ohne-ziel" (omni:vorwahl-index nil _wl))
|
||||
|
||||
;; Richtungs-Radiobuttons: KurvenRichtung 1/2/3/7 -> Tile-Key
|
||||
(tu-eq "omni:weichen-richtung-key/links" "ri_links" (omni:weichen-richtung-key "1"))
|
||||
(tu-eq "omni:weichen-richtung-key/rechts" "ri_rechts" (omni:weichen-richtung-key "2"))
|
||||
(tu-eq "omni:weichen-richtung-key/doppel" "ri_doppel" (omni:weichen-richtung-key "3"))
|
||||
(tu-eq "omni:weichen-richtung-key/dreiwege" "ri_dreiwege" (omni:weichen-richtung-key "7"))
|
||||
(tu-nil "omni:weichen-richtung-key/unbekannt" (omni:weichen-richtung-key "5"))
|
||||
|
||||
;; Basisliste eines Winkel-Dialogs: Einzel/Doppel/Dreiwege gemeinsam,
|
||||
;; Deltaweiche (ebenfalls KurvenRichtung 3) bleibt draussen
|
||||
(setq _wk
|
||||
'((("Sivasnr" . 1) ("KurvenWinkel" . 90) ("WeichenTyp" . "Einzelweiche") ("KurvenRichtung" . 1) ("Schaltungstyp" . "M"))
|
||||
(("Sivasnr" . 2) ("KurvenWinkel" . 90) ("WeichenTyp" . "Einzelweiche") ("KurvenRichtung" . 2) ("Schaltungstyp" . "P"))
|
||||
(("Sivasnr" . 3) ("KurvenWinkel" . 90) ("WeichenTyp" . "Doppelweiche") ("KurvenRichtung" . 3) ("Schaltungstyp" . "M"))
|
||||
(("Sivasnr" . 4) ("KurvenWinkel" . 90) ("WeichenTyp" . "Dreiwegeweiche") ("KurvenRichtung" . 7) ("Schaltungstyp" . "P"))
|
||||
(("Sivasnr" . 5) ("KurvenWinkel" . 90) ("WeichenTyp" . "Deltaweiche") ("KurvenRichtung" . 3) ("Schaltungstyp" . "M") ("Breite" . 1400))
|
||||
(("Sivasnr" . 6) ("KurvenWinkel" . 45) ("WeichenTyp" . "Doppelweiche") ("KurvenRichtung" . 3) ("Schaltungstyp" . "M"))))
|
||||
(setq _bl (omni:weichen-basis-liste _wk 90 *omni-weichen-std-typen* nil))
|
||||
(tu-eq "omni:weichen-basis-liste/std-typen" '(1 2 3 4)
|
||||
(mapcar '(lambda (e) (cdr (assoc "Sivasnr" e))) _bl))
|
||||
(tu-eq "omni:weichen-basis-liste/typ-string" 1
|
||||
(length (omni:weichen-basis-liste _wk 90 "Doppelweiche" nil)))
|
||||
(tu-eq "omni:weichen-basis-liste/breite" 1
|
||||
(length (omni:weichen-basis-liste _wk nil "Deltaweiche" 1400)))
|
||||
(tu-eq "omni:weichen-basis-liste/alle" 6
|
||||
(length (omni:weichen-basis-liste _wk nil nil nil)))
|
||||
|
||||
;; Filter ueber die neuen Richtungen
|
||||
(tu-eq "omni:weichen-filter-liste/doppel" 3
|
||||
(cdr (assoc "Sivasnr" (car (omni:weichen-filter-liste _bl "alle" "3")))))
|
||||
(tu-eq "omni:weichen-filter-liste/dreiwege" 4
|
||||
(cdr (assoc "Sivasnr" (car (omni:weichen-filter-liste _bl "alle" "7")))))
|
||||
(tu-nil "omni:weichen-filter-liste/dreiwege-m"
|
||||
(omni:weichen-filter-liste _bl "M" "7"))
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user