diff --git a/CLAUDE.md b/CLAUDE.md index 189ce35..15c21ed 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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_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_W*_*, 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_LADESCHLEIFE_AP110, OMNI_EDIT | Omniflo-Komponenten: Boegen, Weichen, 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 | +| `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_`: 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_.dwg`/`Ausgang_.dwg` in data/ils) + Doppelklick/Kontextmenue-Dispatcher + Konfiguration (2D/3D, Sprache) | | `Tro_Edit.lsp` | TRO_INSERT, TRO_EDIT | TRO-Marker (Block `TRO_SYM_`) 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) | diff --git a/Lisp/OmniModulInsert.lsp b/Lisp/OmniModulInsert.lsp index 5a2e8b2..fee198c 100644 --- a/Lisp/OmniModulInsert.lsp +++ b/Lisp/OmniModulInsert.lsp @@ -123,6 +123,66 @@ ) +;; --- Aehnlichkeit zweier ProfilTyp-Texte --- +;; Anzahl gleicher Zeichen an gleicher Position minus Laengendifferenz. +;; Gegenstuecke unterscheiden sich im Katalog nur in einzelnen Zeichen +;; ("45-L-" / "45-R-", "MIT M" / "MIT P", "L1S" / "R1S"), darum bewertet das +;; ohne schemaabhaengiges Zerlegen die passende Weiche am hoechsten. +;; Kein String auf einer Seite -> 0. +(defun omni:profil-aehnlichkeit (a b / la lb n) + (if (and (= (type a) 'STR) (= (type b) 'STR)) + (progn + (setq la (vl-string->list a) + lb (vl-string->list b) + n 0) + (while (and la lb) + (if (= (car la) (car lb)) (setq n (1+ n))) + (setq la (cdr la) lb (cdr lb)) + ) + (- n (abs (- (strlen a) (strlen b)))) + ) + 0 + ) +) + + +;; --- Vorwahl-Index fuer ein Dialog-Dropdown --- +;; ziel = Katalog-Eintrag, der vorgewaehlt werden soll (z.B. das per +;; Doppelklick bearbeitete Bauteil oder die bisherige Auswahl) +;; liste = aktuell angezeigte Eintraege +;; Rueckgabe: Index des Eintrags mit gleicher Sivasnr, sonst des Eintrags mit +;; dem aehnlichsten ProfilTyp (Gleichstand: erster); nil ohne Ziel/Liste. +(defun omni:vorwahl-index (ziel liste / nr profil i idx best wert) + (if (and ziel liste) + (progn + (setq nr (omni:sivasid-to-str (cdr (assoc "Sivasnr" ziel))) + i 0) + (if (/= nr "") + (foreach e liste + (if (and (null idx) + (= (omni:sivasid-to-str (cdr (assoc "Sivasnr" e))) nr)) + (setq idx i)) + (setq i (1+ i)) + ) + ) + (if (null idx) + (progn + (setq profil (cdr (assoc "ProfilTyp" ziel)) + i 0) + (foreach e liste + (setq wert (omni:profil-aehnlichkeit profil (cdr (assoc "ProfilTyp" e)))) + (if (or (null best) (> wert best)) + (setq best wert idx i)) + (setq i (1+ i)) + ) + ) + ) + idx + ) + ) +) + + ;; --- Einzelnen Wert aus einem Eintrag lesen --- ;; eintrag = Assoziationsliste (Rueckgabe von omni:get-bogen etc.) ;; key = Schluesselname z.B. "Radius" @@ -331,8 +391,9 @@ ;; profiltyp = optionales Praefix zum Filtern des ProfilTyp-Textes, ;; z.B. "APB 60" oder "APB 110" (nil = keine Einschraenkung) ;; Rueckgabe: (eintrag hoehe drehung) oder nil bei Abbruch +;; Vorwahl: *omni-dlg-vorwahl* (von OMNI_EDIT gesetzt) wird vorgewaehlt. (defun omni:bogen-dialog (winkel init-hoehe init-drehung profiltyp / dcl-pfad dat boegen-liste - profil-liste ergebnis dlg-hoehe profil) + profil-liste ergebnis dlg-hoehe profil idx) (if (null *OMNI-BOEGEN*) (omni:load-data)) ;; Defaults @@ -387,13 +448,16 @@ (start_list "bogenart") (mapcar 'add_list profil-liste) (end_list) - (set_tile "bogenart" "0") + ;; Beim Edit (OMNI_EDIT) das bearbeitete Bauteil vorwaehlen + (setq idx (omni:vorwahl-index *omni-dlg-vorwahl* boegen-liste)) + (if (null idx) (setq idx 0)) + (set_tile "bogenart" (itoa idx)) ;; Hoehe initialisieren (Drehung erfolgt interaktiv nach dem Einfuegen) (set_tile "val_hoehe" init-hoehe) ;; Startwerte anzeigen - (omni:bogen-dlg-update "0") + (omni:bogen-dlg-update (itoa idx)) ;; Callback bei Dropdown-Aenderung (action_tile "bogenart" "(omni:bogen-dlg-update $value)") @@ -522,7 +586,11 @@ ;; --- Dropdown mit gefilterter Liste neu befuellen --- -(defun omni:weichen-dlg-refresh ( / filter sch-f ri-f gefiltert profil-liste) +;; Die bisher angezeigte Weiche (*omni-dlg-weiche-akt*) bleibt gewaehlt, wenn sie +;; den Filter passiert; sonst wird ihr Gegenstueck (aehnlichster ProfilTyp) +;; gewaehlt - ein Klick auf "Rechts" macht aus 45-L-400/750 MIT M also +;; 45-R-400/750 MIT M statt des ersten Listeneintrags. +(defun omni:weichen-dlg-refresh ( / filter sch-f ri-f gefiltert profil-liste idx) (setq filter (omni:weichen-get-filter)) (setq sch-f (car filter)) (setq ri-f (cadr filter)) @@ -536,11 +604,13 @@ (mapcar 'add_list profil-liste) (end_list) - ;; Ersten Eintrag anzeigen (falls vorhanden) + ;; Bisherige Weiche bzw. ihr Gegenstueck anzeigen (falls vorhanden) (if gefiltert (progn - (set_tile "profiltyp" "0") - (omni:weichen-dlg-update "0") + (setq idx (omni:vorwahl-index *omni-dlg-weiche-akt* gefiltert)) + (if (null idx) (setq idx 0)) + (set_tile "profiltyp" (itoa idx)) + (omni:weichen-dlg-update (itoa idx)) ) (progn (set_tile "val_sivasnr" "---") @@ -553,23 +623,29 @@ ;; --- Detail-Felder im Weichen-Dialog aktualisieren --- -(defun omni:weichen-dlg-update (idx-str / idx eintrag wkl) +;; Fehlende Werte (null im Katalog, z.B. Weichenbatterien ohne KurvenWinkel/ +;; Breite/Laenge) werden als "---" angezeigt. +(defun omni:weichen-dlg-update (idx-str / idx eintrag wkl br lg) (setq idx (atoi idx-str)) (setq eintrag (nth idx *OMNI-DLG-WEICHEN*)) (if eintrag (progn + ;; Merken fuer den naechsten Filterwechsel (omni:weichen-dlg-refresh) + (setq *omni-dlg-weiche-akt* eintrag) (set_tile "val_sivasnr" (omni:sivasid-to-str (omni:val eintrag "Sivasnr"))) (setq wkl (omni:val eintrag "KurvenWinkel")) (set_tile "val_winkel" - (if (= (type wkl) 'INT) (strcat (itoa wkl) " Grad") - (strcat (rtos wkl 2 1) " Grad") + (cond + ((= (type wkl) 'INT) (strcat (itoa wkl) " Grad")) + ((numberp wkl) (strcat (rtos wkl 2 1) " Grad")) + (T "---") ) ) - (set_tile "val_breite" - (itoa (fix (omni:val eintrag "Breite")))) - (set_tile "val_laenge" - (itoa (fix (omni:val eintrag "Länge")))) + (setq br (omni:val eintrag "Breite")) + (setq lg (omni:val eintrag "Länge")) + (set_tile "val_breite" (if (numberp br) (itoa (fix br)) "---")) + (set_tile "val_laenge" (if (numberp lg) (itoa (fix lg)) "---")) ) ) ) @@ -580,8 +656,10 @@ ;; weichentyp = "Einzelweiche", "Doppelweiche", "Dreiwegeweiche" 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. (defun omni:weichen-dialog (winkel weichentyp init-hoehe init-drehung breite / dcl-pfad dat basis-liste - profil-liste ergebnis dlg-hoehe) + ergebnis dlg-hoehe sch kr) (if (null *OMNI-WEICHEN*) (omni:load-data)) ;; Defaults @@ -630,28 +708,33 @@ (setq *OMNI-DLG-WEICHEN-BASIS* basis-liste) (setq *OMNI-DLG-WEICHEN* basis-liste) - ;; ProfilTyp-Liste fuer Dropdown aufbauen - (setq profil-liste - (mapcar '(lambda (e) (cdr (assoc "ProfilTyp" e))) basis-liste)) - ;; DCL laden (setq dcl-pfad (strcat (getenv "DXFM_DCL") "/omniflo_weichen.dcl")) (setq dat (load_dialog dcl-pfad)) (if (not (new_dialog "omniflo_weichen" dat)) (progn (alert (ssg-text "omni-weiche-dialog-ladefehler")) nil) (progn - ;; Dropdown befuellen - (start_list "profiltyp") - (mapcar 'add_list profil-liste) - (end_list) - (set_tile "profiltyp" "0") + ;; 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*) + (if *omni-dlg-vorwahl* + (progn + (setq sch (cdr (assoc "Schaltungstyp" *omni-dlg-vorwahl*))) + (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"))) + ) + ) + + ;; Dropdown befuellen und Weiche waehlen (vorgewaehltes Bauteil bzw. + ;; ohne Vorwahl der erste Eintrag) + (omni:weichen-dlg-refresh) ;; Hoehe initialisieren (Drehung erfolgt interaktiv nach dem Einfuegen) (set_tile "val_hoehe" init-hoehe) - ;; Startwerte anzeigen - (omni:weichen-dlg-update "0") - ;; Callback bei Dropdown-Aenderung (action_tile "profiltyp" "(omni:weichen-dlg-update $value)") @@ -1129,8 +1212,11 @@ ) ) - ;; 4. Dialog oeffnen mit vorhandenen Werten + ;; 4. Dialog oeffnen mit vorhandenen Werten; das bearbeitete Bauteil wird + ;; ueber *omni-dlg-vorwahl* im Dropdown vorgewaehlt (danach zuruecksetzen, + ;; damit die Menuebefehle wieder ohne Vorwahl starten). (setq dlg-result nil) + (setq *omni-dlg-vorwahl* eintrag) (cond ((= typ "bogen") (setq winkel (cdr (assoc "KurvenWinkel" eintrag))) @@ -1145,6 +1231,7 @@ (setq dlg-result (omni:weichen-dialog winkel weichentyp hoehe drehung nil)) ) ) + (setq *omni-dlg-vorwahl* nil) (if (null dlg-result) (progn (princ (ssg-text "omni-abbruch")) (ssg-end) (exit)) @@ -1249,6 +1336,77 @@ (princ) ) +;; --- Omniflo / Weichenbatterien --- +;; Fertige Weichenbatterien, DWG = ARTINR (aktuell nur in data/omniflo/2D, +;; omni:omniflo-datei-finden faellt bei 3D darauf zurueck). Menuetexte (BESCHR) +;; und Nummern aus data/omniflo/weichenbatterien_artinr_quelle.dxf. Der +;; Doppelklick (OMNI_EDIT) findet sie im Weichen-Katalog omniflo_weichen.json +;; unter WeichenTyp "Weichenbatterie" (Richtung/Schaltung umstellbar). +(defun c:OMNI_WB_834372536 () + (omni:insert-dxf "834372536" nil nil) + (princ) +) +(defun c:OMNI_WB_834372537 () + (omni:insert-dxf "834372537" nil nil) + (princ) +) +(defun c:OMNI_WB_834372512 () + (omni:insert-dxf "834372512" nil nil) + (princ) +) +(defun c:OMNI_WB_834372513 () + (omni:insert-dxf "834372513" nil nil) + (princ) +) +(defun c:OMNI_WB_834372524 () + (omni:insert-dxf "834372524" nil nil) + (princ) +) +(defun c:OMNI_WB_834372525 () + (omni:insert-dxf "834372525" nil nil) + (princ) +) +(defun c:OMNI_WB_834372500 () + (omni:insert-dxf "834372500" nil nil) + (princ) +) +(defun c:OMNI_WB_834372501 () + (omni:insert-dxf "834372501" nil nil) + (princ) +) +(defun c:OMNI_WB_834372539 () + (omni:insert-dxf "834372539" nil nil) + (princ) +) +(defun c:OMNI_WB_834372540 () + (omni:insert-dxf "834372540" nil nil) + (princ) +) +(defun c:OMNI_WB_834372515 () + (omni:insert-dxf "834372515" nil nil) + (princ) +) +(defun c:OMNI_WB_834372516 () + (omni:insert-dxf "834372516" nil nil) + (princ) +) +(defun c:OMNI_WB_834372527 () + (omni:insert-dxf "834372527" nil nil) + (princ) +) +(defun c:OMNI_WB_834372528 () + (omni:insert-dxf "834372528" nil nil) + (princ) +) +(defun c:OMNI_WB_834372503 () + (omni:insert-dxf "834372503" nil nil) + (princ) +) +(defun c:OMNI_WB_834372504 () + (omni:insert-dxf "834372504" nil nil) + (princ) +) + @@ -1335,7 +1493,8 @@ ;; profiltyp = Praefix zum Filtern des ProfilTyp, z.B. "AP 110" (nil = alle) ;; init-hoehe = Vorbelegung Hoehe (nil = Default aus cfg) ;; Rueckgabe: (eintrag hoehe nil) wie omni:bogen-dialog, oder nil bei Abbruch -(defun omni:ladeschleifen-dialog (profiltyp init-hoehe / liste dat ergebnis dlg-hoehe profil) +;; Vorwahl: *omni-dlg-vorwahl* (von OMNI_EDIT gesetzt) wird vorgewaehlt. +(defun omni:ladeschleifen-dialog (profiltyp init-hoehe / liste dat ergebnis dlg-hoehe profil idx) (if (null *OMNI-LADESCHLEIFEN*) (omni:load-ladeschleifen)) (if (null init-hoehe) (setq init-hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000"))) @@ -1367,9 +1526,12 @@ (start_list "ladeschleife") (mapcar '(lambda (e) (add_list (omni:sivasid-to-str (omni:val e "Beschreibung")))) liste) (end_list) - (set_tile "ladeschleife" "0") + ;; Beim Edit (OMNI_EDIT) das bearbeitete Bauteil vorwaehlen + (setq idx (omni:vorwahl-index *omni-dlg-vorwahl* liste)) + (if (null idx) (setq idx 0)) + (set_tile "ladeschleife" (itoa idx)) (set_tile "val_hoehe" init-hoehe) - (omni:ladeschleife-dlg-update "0") + (omni:ladeschleife-dlg-update (itoa idx)) (action_tile "ladeschleife" "(omni:ladeschleife-dlg-update $value)") (action_tile "accept" diff --git a/Lisp/README.md b/Lisp/README.md index 6b83014..8c64767 100644 --- a/Lisp/README.md +++ b/Lisp/README.md @@ -704,12 +704,13 @@ 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) | +| Weichenbatterien | `OMNI_WB_` (16) | Fertige Weichenbatterien, DWG `data/omniflo/2D/.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 `.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`) | | Anbaugruppen | `OMNI_STOPPER`, `OMNI_SCANNER`, `OMNI_BUERSTENBREMSE` | Implementiert | | Verbinder | `OMNI_TV_*` | Verbinder-DWG aus `data/omniflo/Verbinder` (dimensionsunabhaengig, `omni:insert-verbinder` -> `omni:insert-datei`, Punkt + Drehung interaktiv). Zuordnung Befehl -> DWG nach Dateiname, z.B. `OMNI_TV_W_AP60` -> `TV_W-AP60_oben`, `OMNI_TV_ENDPLATTE` -> `VB_ENDP_AP`, `OMNI_TV_W_AP60_KPL` -> `TV_W-AP60_kpl`, `OMNI_TV_ANSCHLAG` -> `VB_ENDP_AP_Spulenzug`, `OMNI_TV_SW_I_AP110` -> `TV_SW_I_SW-AP110`, `OMNI_TV_MUFFE` -> `VB_Muffe`. Alle 18 Eintraege aktiv | | Bogenweichen ⚠️ | `OMNI_APBW_*` | **Dummy** (noch nicht implementiert, im Menue ausgegraut) | -| Bearbeiten | `OMNI_EDIT` | Omniflo-Block selektieren und Attribute bearbeiten | +| Bearbeiten | `OMNI_EDIT` | Omniflo-Block selektieren und im Bogen-/Weichen-/Ladeschleifen-Dialog neu waehlen. Das bearbeitete Bauteil ist im Dropdown vorgewaehlt (`*omni-dlg-vorwahl*`, `omni:vorwahl-index`); im Weichen-Dialog stehen Schaltung/Richtung auf seinen Werten, und ein Filterwechsel waehlt das Gegenstueck mit dem aehnlichsten ProfilTyp (`omni:profil-aehnlichkeit`) statt des ersten Eintrags - nur L/R oder M/P umstellen braucht damit kein Dropdown | Daneben zeichnet [`TEFInsert.lsp`](#tefinsertlsp--tef-geradenstuecke-entlang-einer-linie) (`TEF_FOERDERER_LINIE`) eine Kette von TEF-Geradenelementen (1000 mm) entlang einer frei gewaehlten Linie – diff --git a/data/json/omniflo_weichen.json b/data/json/omniflo_weichen.json index 03f2adb..4784cba 100644 --- a/data/json/omniflo_weichen.json +++ b/data/json/omniflo_weichen.json @@ -926,5 +926,197 @@ "Länge": 360, "KurvenRichtung": 7, "SivasnrTEF": null + }, + { + "Sivasnr": 834372536, + "ProfilTyp": "Weiche S C L1S 1C 200/1200/950 mit M", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "M", + "Breite": null, + "Länge": null, + "KurvenRichtung": 1, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372537, + "ProfilTyp": "Weiche S C L1S 1C 200/1200/950 mit P", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "P", + "Breite": null, + "Länge": null, + "KurvenRichtung": 1, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372512, + "ProfilTyp": "Weiche S C L1S 2C 200/1200/950 mit M", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "M", + "Breite": null, + "Länge": null, + "KurvenRichtung": 1, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372513, + "ProfilTyp": "Weiche S C L1S 2C 200/1200/950 mit P", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "P", + "Breite": null, + "Länge": null, + "KurvenRichtung": 1, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372524, + "ProfilTyp": "Weiche S C L2S 2C 200/1200/950 mit M", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "M", + "Breite": null, + "Länge": null, + "KurvenRichtung": 1, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372525, + "ProfilTyp": "Weiche S C L2S 2C 200/1200/950 mit P", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "P", + "Breite": null, + "Länge": null, + "KurvenRichtung": 1, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372500, + "ProfilTyp": "Weiche S C L2S 3C 200/1400/950 mit M", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "M", + "Breite": null, + "Länge": null, + "KurvenRichtung": 1, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372501, + "ProfilTyp": "Weiche S C L2S 3C 200/1400/950 mit P", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "P", + "Breite": null, + "Länge": null, + "KurvenRichtung": 1, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372539, + "ProfilTyp": "Weiche S C R1S 1C 200/1200/950 mit M", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "M", + "Breite": null, + "Länge": null, + "KurvenRichtung": 2, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372540, + "ProfilTyp": "Weiche S C R1S 1C 200/1200/950 mit P", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "P", + "Breite": null, + "Länge": null, + "KurvenRichtung": 2, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372515, + "ProfilTyp": "Weiche S C R1S 2C 200/1200/950 mit M", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "M", + "Breite": null, + "Länge": null, + "KurvenRichtung": 2, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372516, + "ProfilTyp": "Weiche S C R1S 2C 200/1200/950 mit P", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "P", + "Breite": null, + "Länge": null, + "KurvenRichtung": 2, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372527, + "ProfilTyp": "Weiche S C R2S 2C 200/1200/950 mit M", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "M", + "Breite": null, + "Länge": null, + "KurvenRichtung": 2, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372528, + "ProfilTyp": "Weiche S C R2S 2C 200/1200/950 mit P", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "P", + "Breite": null, + "Länge": null, + "KurvenRichtung": 2, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372503, + "ProfilTyp": "Weiche S C R2S 3C 200/1400/950 mit M", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "M", + "Breite": null, + "Länge": null, + "KurvenRichtung": 2, + "SivasnrTEF": null, + "WeichenkörperLänge": null + }, + { + "Sivasnr": 834372504, + "ProfilTyp": "Weiche S C R2S 3C 200/1400/950 mit P", + "WeichenTyp": "Weichenbatterie", + "KurvenWinkel": null, + "Schaltungstyp": "P", + "Breite": null, + "Länge": null, + "KurvenRichtung": 2, + "SivasnrTEF": null, + "WeichenkörperLänge": null } ] \ No newline at end of file diff --git a/data/omniflo/2D/834372500.dwg b/data/omniflo/2D/834372500.dwg new file mode 100644 index 0000000..c3f6020 Binary files /dev/null and b/data/omniflo/2D/834372500.dwg differ diff --git a/data/omniflo/2D/834372501.dwg b/data/omniflo/2D/834372501.dwg new file mode 100644 index 0000000..2a0df0e Binary files /dev/null and b/data/omniflo/2D/834372501.dwg differ diff --git a/data/omniflo/2D/834372503.dwg b/data/omniflo/2D/834372503.dwg new file mode 100644 index 0000000..1d7a866 Binary files /dev/null and b/data/omniflo/2D/834372503.dwg differ diff --git a/data/omniflo/2D/834372504.dwg b/data/omniflo/2D/834372504.dwg new file mode 100644 index 0000000..53fd5f8 Binary files /dev/null and b/data/omniflo/2D/834372504.dwg differ diff --git a/data/omniflo/2D/834372512.dwg b/data/omniflo/2D/834372512.dwg new file mode 100644 index 0000000..01a365b Binary files /dev/null and b/data/omniflo/2D/834372512.dwg differ diff --git a/data/omniflo/2D/834372513.dwg b/data/omniflo/2D/834372513.dwg new file mode 100644 index 0000000..8aa39e5 Binary files /dev/null and b/data/omniflo/2D/834372513.dwg differ diff --git a/data/omniflo/2D/834372515.dwg b/data/omniflo/2D/834372515.dwg new file mode 100644 index 0000000..06dc715 Binary files /dev/null and b/data/omniflo/2D/834372515.dwg differ diff --git a/data/omniflo/2D/834372516.dwg b/data/omniflo/2D/834372516.dwg new file mode 100644 index 0000000..f3b878a Binary files /dev/null and b/data/omniflo/2D/834372516.dwg differ diff --git a/data/omniflo/2D/834372524.dwg b/data/omniflo/2D/834372524.dwg new file mode 100644 index 0000000..c7ee238 Binary files /dev/null and b/data/omniflo/2D/834372524.dwg differ diff --git a/data/omniflo/2D/834372525.dwg b/data/omniflo/2D/834372525.dwg new file mode 100644 index 0000000..4459e55 Binary files /dev/null and b/data/omniflo/2D/834372525.dwg differ diff --git a/data/omniflo/2D/834372527.dwg b/data/omniflo/2D/834372527.dwg new file mode 100644 index 0000000..7ebc511 Binary files /dev/null and b/data/omniflo/2D/834372527.dwg differ diff --git a/data/omniflo/2D/834372528.dwg b/data/omniflo/2D/834372528.dwg new file mode 100644 index 0000000..f96647d Binary files /dev/null and b/data/omniflo/2D/834372528.dwg differ diff --git a/data/omniflo/2D/834372536.dwg b/data/omniflo/2D/834372536.dwg new file mode 100644 index 0000000..2e1a81c Binary files /dev/null and b/data/omniflo/2D/834372536.dwg differ diff --git a/data/omniflo/2D/834372537.dwg b/data/omniflo/2D/834372537.dwg new file mode 100644 index 0000000..857a4f3 Binary files /dev/null and b/data/omniflo/2D/834372537.dwg differ diff --git a/data/omniflo/2D/834372539.dwg b/data/omniflo/2D/834372539.dwg new file mode 100644 index 0000000..94b277f Binary files /dev/null and b/data/omniflo/2D/834372539.dwg differ diff --git a/data/omniflo/2D/834372540.dwg b/data/omniflo/2D/834372540.dwg new file mode 100644 index 0000000..77af03b Binary files /dev/null and b/data/omniflo/2D/834372540.dwg differ diff --git a/menu/SSG_LIB.cui b/menu/SSG_LIB.cui index 030cad2..9c47345 100644 --- a/menu/SSG_LIB.cui +++ b/menu/SSG_LIB.cui @@ -212,793 +212,889 @@ ^C^C(ssg-ensure "OmniModulInsert") OMNI_APB60_90 - + 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 - + Delta 1600/800 ^C^C(ssg-ensure "OmniModulInsert") OMNI_WKomb_Delta_1600 - + Delta 1400/700 ^C^C(ssg-ensure "OmniModulInsert") OMNI_WKomb_Delta_1400 - + Star 1400/1400 ^C^C(ssg-ensure "OmniModulInsert") OMNI_WKomb_Star + + + Weiche S C L1S 1C 200/1200/950 mit M + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372536 + + + + + Weiche S C L1S 1C 200/1200/950 mit P + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372537 + + + + + Weiche S C L1S 2C 200/1200/950 mit M + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372512 + + + + + Weiche S C L1S 2C 200/1200/950 mit P + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372513 + + + + Weiche S C L2S 2C 200/1200/950 mit M + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372524 + + + + + Weiche S C L2S 2C 200/1200/950 mit P + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372525 + + + + + Weiche S C L2S 3C 200/1400/950 mit M + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372500 + + + + + Weiche S C L2S 3C 200/1400/950 mit P + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372501 + + + + + Weiche S C R1S 1C 200/1200/950 mit M + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372539 + + + + + Weiche S C R1S 1C 200/1200/950 mit P + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372540 + + + + + Weiche S C R1S 2C 200/1200/950 mit M + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372515 + + + + + Weiche S C R1S 2C 200/1200/950 mit P + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372516 + + + + + Weiche S C R2S 2C 200/1200/950 mit M + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372527 + + + + + Weiche S C R2S 2C 200/1200/950 mit P + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372528 + + + + + Weiche S C R2S 3C 200/1400/950 mit M + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372503 + + + + + Weiche S C R2S 3C 200/1400/950 mit P + ^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372504 + + + TEF Antriebst. rechts ^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_AntriebR - + TEF Umlenkspannst. rechts ^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_UmlenkR - + TEF Antriebst. links ^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_AntriebL - + TEF Umlenkspannst. links ^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_UmlenkL - + TEF Gerade auf Linie ^C^C(ssg-ensure "TEFInsert") TEF_FOERDERER_LINIE - + TEF Gerade ^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_Gerade - + Stopper AP ^C^C(ssg-ensure "OmniModulInsert") OMNI_STOPPER - + Scanner ^C^C(ssg-ensure "OmniModulInsert") OMNI_SCANNER - + Bürstenbremse ^C^C(ssg-ensure "OmniModulInsert") OMNI_BUERSTENBREMSE - + Schwenkschiene Schiebetür L ^C^C(ssg-ensure "OmniModulInsert") OMNI_SCHW_400_L - + Schwenkschiene Schiebetür R ^C^C(ssg-ensure "OmniModulInsert") OMNI_SCHW_400_R - + Schwenkschiene Schiebetür L mit Sensorik ^C^C(ssg-ensure "OmniModulInsert") OMNI_SCHW_400_L_SENSORIK - + Schwenkschiene Schiebetür R mit Sensorik ^C^C(ssg-ensure "OmniModulInsert") OMNI_SCHW_400_R_SENSORIK - + KettenFoerderer ^C^C(ssg-ensure "KettenFoerderer") KETTENFOERDERER - + Ladeschleifen ^C^C(ssg-ensure "OmniModulInsert") OMNI_LADESCHLEIFE_AP110 - + TV W-AP110 kpl ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_AP110 - + TV W-AP60 oben kpl. ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_AP60 - + TV W-W kpl ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_W - + TV W-AP110-W kpl ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_AP110_W - + TV W-AP60 kpl ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_AP60_KPL - + TV 80 ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_80 - + TV 50 ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_50 - + Endplatte Al-Profil AP schraubbar ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_ENDPLATTE - + Anschlag AP-Ende für Spulenzug ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_ANSCHLAG - + TV-A für AP110/AP60 kpl ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_A_AP110_AP60 - + TV-A für AP60/ST ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_A_AP60_ST - + TV-A für AP110/ST kpl ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_A_AP110_ST - + TV-SW II für SW-SW ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_II_SW_SW - + TV-SW III für SW-AP110-SW ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_III_AP110_SW - + TV-SW I für SW-AP110 ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_I_AP110 - + TV-SW IV für Anschluss SW-AP60 ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_IV_AP60 - + TV-SW IV für SW-ST ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_IV_ST - + Muffe ^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_MUFFE - + APB 110 R400/45 140 nur fuer Delta ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R400_45_140 - + APB 110 R550/45 194 nur fuer Delta ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_45_194 - + APBW 110 R550/22,5 360x248,5 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_225_360 - + APBW 110 R550/22,5 410x298,5 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_225_410A - + APBW 110 R550/22,5 410x78,5 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_225_410B - + APBW 110 R550/22,5 410x98,5 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_225_410C - + APBW 110 R550/67,5 360x598,5 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_675_360 - + APBW 110 R400/67,5 260x398,5 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R400_675_260 - + APBW 110 R550/45 77x160 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_45_77 - + APBW 110 R550/67,5 125x83,5 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_675_125 - + APBW 110 R750/90 200x290 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R750_90_200 - + APBW 110 R650/90 300x190 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R650_90_300 - + APBW 110 R550/67,5 208x347 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_675_208 - + APBW 110 R550/67,5 58x497 ^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_675_58 - + Element bearbeiten ^C^C(ssg-ensure "OmniModulInsert") OMNI_EDIT - + Rohr-Gerüst-Traeger ^C^C(ssg-ensure "GeruestInsert") GERUEST_TRAEGER - + Säulen ^C^C(ssg-ensure "GeruestInsert") GERUEST_SAEULEN - + Rohrabhänger ^C^C(ssg-ensure "GeruestInsert") GERUEST_ROHRABHAENGER - + Wandbefestigung ^C^C(ssg-ensure "GeruestInsert") GERUEST_WANDBEFESTIGUNG - + Gatterträger ^C^C(ssg-ensure "GeruestInsert") GERUEST - + Traeger beschriften ^C^C(ssg-ensure "GeruestInsert") GERUEST_TRAEGER_BESCHRIFTEN - + Geschoss anlegen ^C^C(ssg-ensure "LagerInsert") LG_GESCHOSS - + Aktives Geschoss ^C^C(ssg-ensure "LagerInsert") LG_GESCHOSS_AKTIV - + Geschoss kopieren ^C^C(ssg-ensure "LagerInsert") LG_GESCHOSS_KOPIEREN - + Lagerbereich (Auto-Fuellung) ^C^C(ssg-ensure "LagerInsert") LG_BEREICH - + Regalreihen einzeln ^C^C(ssg-ensure "LagerInsert") LG_REIHE - + Gaenge einzeln ^C^C(ssg-ensure "LagerInsert") LG_GANG - + Bearbeiten ^C^C(ssg-ensure "LagerInsert") LG_EDIT - + Darstellung aktualisieren ^C^C(ssg-ensure "LagerInsert") LG_DARSTELLUNG - + Regale zaehlen ^C^C(ssg-ensure "LagerInsert") LG_REGALE - + Regelprofil anzeigen ^C^C(ssg-ensure "LagerPruefung") LG_REGELN - + Export Lager-JSON ^C^C(ssg-ensure "LagerInsert") LAGER_EXPORT - + Materialfluss erzeugen ^C^C(ssg-ensure "HwPlanung") HW_MATERIALFLUSS - + Symbole erzeugen ^C^C(ssg-ensure "HwPlanung") HW_SYMBOLE - + Symbole nummerieren ^C^C(ssg-ensure "HwPlanung") HW_NUMMERIEREN - + Marker einfuegen ^C^C(ssg-ensure "Tro_Edit") TRO_INSERT - + Marker bearbeiten ^C^C(ssg-ensure "Tro_Edit") TRO_EDIT - + Bearbeiten (Auto) ^C^C(ssg-ensure "SSG_LIB_Commands") SSG_BLOCKEDIT - + Verbindung einfuegen ^C^C(ssg-ensure "Connection_Edit") CONNECTION_INSERT - + Verbindung bearbeiten ^C^C(ssg-ensure "Connection_Edit") CONNECTION_EDIT - + Eingang ^C^C(ssg-ensure "SSG_LIB_Commands") ILS_EINGANG_INSERT - + Ausgang ^C^C(ssg-ensure "SSG_LIB_Commands") ILS_AUSGANG_INSERT - + SPS Schliessen ^C^C - + Hoehen-Check (Montagehoehe/Buehne) ^C^C(ssg-ensure "check_hoehen") HOEHEN_CHECK - + Export Sivas ^C^C(ssg-ensure "export") EXPORTSIVAS - + Export CSV ^C^C(ssg-ensure "export") EXPORTCSV - + Umschalten 2D und 3D ^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_SWITCH - + Alle Bloecke auf 2D ^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_ALL_2D - + 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 - + Bloecke zaehlen ^C^C(ssg-ensure "ssg_blocktools") SSG_BLOCK_COUNT - + Bloecke loeschen ^C^C(ssg-ensure "ssg_blocktools") SSG_BLOCK_DELETE - + Attribute ersetzen ^C^C(ssg-ensure "ssg_blocktools") SSG_ATTR_ERSETZEN - + Text ersetzen ^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_ERSETZEN - + Text parallel beschriften ^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_PARALLEL - + Texthoehe aendern ^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_HOEHE - + Textstil aendern ^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_STIL - + Faehnchen + Stueckliste aus Zeichnung ^C^C(ssg-ensure "ssg_stueckliste") SSG_FAEHNCHEN_STUECKLISTE - + Din Formate ^C^C(ssg-ensure "DinFormate") DIN_FORMATE - + alle Tests ausfuehren und exportieren ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) (c:SSG_RUN_ALL_TESTS_EXPORT) - + Tests ausfuehren und stehen lassen ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) (c:SSG_RUN_ALL_TESTS_OFFEN) - + Export CSV/Sivas ALL ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_export_all.lsp")) (c:TEST_EXPORT_ALL) - + Kreisel ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_kreisel.lsp")) (c:TEST_KREISEL) - + Foerderer ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_foerderer.lsp")) (c:TEST_FOERDERER) - + Foerderer-Linienzug ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_linienzug.lsp")) (c:TEST_LINIENZUG) (c:TEST_LINIENZUG_STUFE2) (c:TEST_LINIENZUG_MODUS2) - + Omniflo ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_omniflo.lsp")) (c:TEST_OMNIFLO) - + Omniflo Strecke ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_omniflo_strecke.lsp")) (c:TEST_OMNIFLO_STRECKE) - + Gefaellestrecke ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_gefaellestrecke.lsp")) (c:TEST_GEFAELLESTRECKE) - + Mubea Gesamtmodell ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_mubea.lsp")) (c:TEST_MUBEA) - + HundM05 Kreisel-Abschnitt ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_hundm05.lsp")) (c:TEST_HUNDM05) - + Dematic/Arvato Flowpuffer (Vorlage) ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_dematic_arvato.lsp")) (c:TEST_DEMATIC_ARVATO) - + ILS 3.0 Showroom (Vorlage) ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_showroom_ils.lsp")) (c:TEST_SHOWROOM_ILS) - + Testanlage test_system ^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_test_system.lsp")) (c:TEST_TEST_SYSTEM) - + KS 2D/3D pruefen (CSV) ^C^C(load (strcat (getenv "DXFMAKRO") "/Lisp/ks_pruefung.lsp")) KS_PRUEFEN - + Kreisel bearbeiten (ssg-ensure "KreiselInsert") KreiselEdit - + Eckrad bearbeiten (ssg-ensure "KreiselInsert") EckradEdit - + Omniflo Element bearbeiten (ssg-ensure "OmniModulInsert") OMNI_EDIT - + Gefaellestrecke bearbeiten (ssg-ensure "Gefaellestrecke") GEFAELLESTRECKE_EDIT - + VarioFoerderer bearbeiten (ssg-ensure "VarioFoerderer") VARIOFOERDERER_EDIT - + TRO-Marker bearbeiten (ssg-ensure "Tro_Edit") TRO_EDIT - + Verbindung bearbeiten (ssg-ensure "Connection_Edit") CONNECTION_EDIT - + SSG Bearbeiten (Auto) (ssg-ensure "SSG_LIB_Commands") SSG_BLOCKEDIT @@ -1015,14 +1111,14 @@ SSG_LIB - - + - - - - - + + + + + + ILS @@ -1218,28 +1314,29 @@ - - - - + + + + + KettenFoerderer - + Ladeschleifen - + - - + + Element bearbeiten - + @@ -1285,862 +1382,962 @@ - + Weichen Einfach 90 - + Doppel 90 - + Dreiwege 90 - + Einfach 45 - + Doppel 45 - + Dreiwege 45 - + Einfach Parallel - + Doppel Parallel - + Dreiwege Parallel - + Einfach 22.5 - + Doppel 22.5 - + Dreiwege 22.5 - + Delta 1600/800 - + Delta 1400/700 - + Star 1400/1400 - + - - TEF Elemente + + Weichenbatterien - TEF Antriebst. rechts + Weiche S C L1S 1C 200/1200/950 mit M + + + + + + Weiche S C L1S 1C 200/1200/950 mit P + + + + + + Weiche S C L1S 2C 200/1200/950 mit M + + + + + + Weiche S C L1S 2C 200/1200/950 mit P + + + + + + Weiche S C L2S 2C 200/1200/950 mit M - TEF Umlenkspannst. rechts + Weiche S C L2S 2C 200/1200/950 mit P + + Weiche S C L2S 3C 200/1400/950 mit M + + + + + + Weiche S C L2S 3C 200/1400/950 mit P + + + + + + + Weiche S C R1S 1C 200/1200/950 mit M + + + + + + Weiche S C R1S 1C 200/1200/950 mit P + + + + + + Weiche S C R1S 2C 200/1200/950 mit M + + + + + + Weiche S C R1S 2C 200/1200/950 mit P + + + + + + Weiche S C R2S 2C 200/1200/950 mit M + + + + + + Weiche S C R2S 2C 200/1200/950 mit P + + + + + + Weiche S C R2S 3C 200/1400/950 mit M + + + + + + Weiche S C R2S 3C 200/1400/950 mit P + + + + + + + TEF Elemente + + TEF Antriebst. rechts + + + + + + TEF Umlenkspannst. rechts + + + + TEF Antriebst. links - + TEF Umlenkspannst. links - + TEF Gerade auf Linie - + TEF Gerade - + - + Anbaugruppen Stopper AP - - - - - - Scanner - - - - - - Bürstenbremse - - - - - - - Spez. Streckenelemente - - - - Türlösungen - - - - Schwenkschienen - - Schwenkschiene Schiebetür L - - - - - - Schwenkschiene Schiebetür R - - - - - - Schwenkschiene Schiebetür L mit Sensorik - - - - - - Schwenkschiene Schiebetür R mit Sensorik - - - - - - - Verbinder - - TV W-AP110 kpl - - - - - - TV W-AP60 oben kpl. - TV W-W kpl + Scanner - TV W-AP110-W kpl + Bürstenbremse + + + Spez. Streckenelemente + + + + Türlösungen + + + + Schwenkschienen - TV W-AP60 kpl - - - - - - TV 80 - - - - - - TV 50 - - - - - - Endplatte Al-Profil AP schraubbar + Schwenkschiene Schiebetür L - Anschlag AP-Ende für Spulenzug + Schwenkschiene Schiebetür R - TV-A für AP110/AP60 kpl + Schwenkschiene Schiebetür L mit Sensorik - TV-A für AP60/ST + Schwenkschiene Schiebetür R mit Sensorik + + + Verbinder - TV-A für AP110/ST kpl - - - - - - TV-SW II für SW-SW - - - - - - TV-SW III für SW-AP110-SW - - - - - - TV-SW I für SW-AP110 + TV W-AP110 kpl - TV-SW IV für Anschluss SW-AP60 + TV W-AP60 oben kpl. - TV-SW IV für SW-ST + TV W-W kpl - Muffe + TV W-AP110-W kpl - - - Boegen fuer Weichen - ~APB 110 R400/45 140 nur fuer Delta + TV W-AP60 kpl + + + + + + TV 80 - ~APB 110 R550/45 194 nur fuer Delta + TV 50 - ~APBW 110 R550/22,5 360x248,5 + Endplatte Al-Profil AP schraubbar - ~APBW 110 R550/22,5 410x298,5 + Anschlag AP-Ende für Spulenzug - ~APBW 110 R550/22,5 410x78,5 + TV-A für AP110/AP60 kpl - ~APBW 110 R550/22,5 410x98,5 + TV-A für AP60/ST - ~APBW 110 R550/67,5 360x598,5 + TV-A für AP110/ST kpl - ~APBW 110 R400/67,5 260x398,5 + TV-SW II für SW-SW - ~APBW 110 R550/45 77x160 + TV-SW III für SW-AP110-SW - ~APBW 110 R550/67,5 125x83,5 + TV-SW I für SW-AP110 - ~APBW 110 R750/90 200x290 + TV-SW IV für Anschluss SW-AP60 - ~APBW 110 R650/90 300x190 + TV-SW IV für SW-ST - ~APBW 110 R550/67,5 208x347 + Muffe + + + Boegen fuer Weichen - ~APBW 110 R550/67,5 58x497 + ~APB 110 R400/45 140 nur fuer Delta - + - - - Gerüst - Rohr-Gerüst-Traeger + ~APB 110 R550/45 194 nur fuer Delta + + + + + + ~APBW 110 R550/22,5 360x248,5 - Säulen + ~APBW 110 R550/22,5 410x298,5 - Rohrabhänger + ~APBW 110 R550/22,5 410x78,5 - Wandbefestigung + ~APBW 110 R550/22,5 410x98,5 - Gatterträger + ~APBW 110 R550/67,5 360x598,5 - - - - Funktionen - Traeger beschriften + ~APBW 110 R400/67,5 260x398,5 + + + + + + ~APBW 110 R550/45 77x160 - - - Lager - Geschoss anlegen + ~APBW 110 R550/67,5 125x83,5 + + + + + + ~APBW 110 R750/90 200x290 - Aktives Geschoss + ~APBW 110 R650/90 300x190 - Geschoss kopieren + ~APBW 110 R550/67,5 208x347 - - Lagerbereich (Auto-Fuellung) + ~APBW 110 R550/67,5 58x497 - + + + + Gerüst - Regalreihen einzeln - - - - - - Gaenge einzeln + Rohr-Gerüst-Traeger - Bearbeiten + Säulen - - Darstellung aktualisieren + Rohrabhänger - + - Regale zaehlen + Wandbefestigung - Regelprofil anzeigen + Gatterträger + + + + Funktionen - Export Lager-JSON + Traeger beschriften - HW Planung + Lager - Materialfluss erzeugen + Geschoss anlegen - Symbole erzeugen + Aktives Geschoss + + Geschoss kopieren + + + + + + + Lagerbereich (Auto-Fuellung) + + + + + + Regalreihen einzeln + + + + + + Gaenge einzeln + + + + + + Bearbeiten + + + + + + + Darstellung aktualisieren + + + + + + Regale zaehlen + + + + + + Regelprofil anzeigen + + + + + + Export Lager-JSON + + + + + + + HW Planung + + Materialfluss erzeugen + + + + + + Symbole erzeugen + + + + Symbole nummerieren - + - + SPS - - + + Eingang - + Ausgang - + SPS Schliessen - + - + TRO Marker einfuegen - + Marker bearbeiten - - - - - - Bearbeiten (Auto) - - - - - - - Connections - - Verbindung einfuegen - - - - - - Verbindung bearbeiten - - - - - - Bearbeiten (Auto) - - - - - - - Export - - Hoehen-Check (Montagehoehe/Buehne) - - - - - - Export Sivas - - - - - - Export CSV - - - - - - - Konfiguration - - Umschalten 2D und 3D - Alle Bloecke auf 2D + Bearbeiten (Auto) + + + Connections - Alle Bloecke auf 3D - - - - - - Sprache + Verbindung einfuegen - Planquadrate an/aus + Verbindung bearbeiten - CSV-Export + Bearbeiten (Auto) - + - + + Export + + Hoehen-Check (Montagehoehe/Buehne) + + + + + + Export Sivas + + + + + + Export CSV + + + + + + + Konfiguration + + Umschalten 2D und 3D + + + + + + Alle Bloecke auf 2D + + + + + + Alle Bloecke auf 3D + + + + + + Sprache + + + + + + Planquadrate an/aus + + + + + + CSV-Export + + + + + + Werkzeuge Bloecke zaehlen - + Bloecke loeschen - + Attribute ersetzen - + Text ersetzen - + Text parallel beschriften - + Texthoehe aendern - + Textstil aendern - + Faehnchen + Stueckliste aus Zeichnung - + Din Formate - + - + Tests alle Tests ausfuehren und exportieren - + Tests ausfuehren und stehen lassen - + Export CSV/Sivas ALL - + Kreisel - + Foerderer - + Foerderer-Linienzug - + Omniflo - + Omniflo Strecke - + Gefaellestrecke - + Mubea Gesamtmodell - + HundM05 Kreisel-Abschnitt - + Dematic/Arvato Flowpuffer (Vorlage) - + ILS 3.0 Showroom (Vorlage) - + Testanlage test_system - + KS 2D/3D pruefen (CSV) - + - + POP501 SSG_LIB Edit Context Kreisel bearbeiten - + Eckrad bearbeiten - + Omniflo Element bearbeiten - + Gefaellestrecke bearbeiten - + VarioFoerderer bearbeiten - + TRO-Marker bearbeiten - + Verbindung bearbeiten - + SSG Bearbeiten (Auto) - + diff --git a/menu/SSG_LIB.mnu b/menu/SSG_LIB.mnu index 1be04ae..712768b 100644 --- a/menu/SSG_LIB.mnu +++ b/menu/SSG_LIB.mnu @@ -68,6 +68,24 @@ [Delta 1600/800]^C^C(ssg-ensure "OmniModulInsert") OMNI_WKomb_Delta_1600 [Delta 1400/700]^C^C(ssg-ensure "OmniModulInsert") OMNI_WKomb_Delta_1400 [<-Star 1400/1400]^C^C(ssg-ensure "OmniModulInsert") OMNI_WKomb_Star +[->Weichenbatterien] +[Weiche S C L1S 1C 200/1200/950 mit M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372536 +[Weiche S C L1S 1C 200/1200/950 mit P]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372537 +[Weiche S C L1S 2C 200/1200/950 mit M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372512 +[Weiche S C L1S 2C 200/1200/950 mit P]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372513 +[Weiche S C L2S 2C 200/1200/950 mit M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372524 +[Weiche S C L2S 2C 200/1200/950 mit P]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372525 +[Weiche S C L2S 3C 200/1400/950 mit M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372500 +[Weiche S C L2S 3C 200/1400/950 mit P]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372501 +[--] +[Weiche S C R1S 1C 200/1200/950 mit M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372539 +[Weiche S C R1S 1C 200/1200/950 mit P]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372540 +[Weiche S C R1S 2C 200/1200/950 mit M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372515 +[Weiche S C R1S 2C 200/1200/950 mit P]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372516 +[Weiche S C R2S 2C 200/1200/950 mit M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372527 +[Weiche S C R2S 2C 200/1200/950 mit P]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372528 +[Weiche S C R2S 3C 200/1400/950 mit M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372503 +[<-Weiche S C R2S 3C 200/1400/950 mit P]^C^C(ssg-ensure "OmniModulInsert") OMNI_WB_834372504 [->TEF Elemente] [TEF Antriebst. rechts]^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_AntriebR [TEF Umlenkspannst. rechts]^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_UmlenkR diff --git a/tests/test_unit.lsp b/tests/test_unit.lsp index 0641c41..4967432 100644 --- a/tests/test_unit.lsp +++ b/tests/test_unit.lsp @@ -1218,6 +1218,41 @@ (tu-eq "omni:verbinder-pfad/trenner" "C:/x/data/omniflo/Verbinder/VB_ENDP_AP.dwg" (omni:verbinder-pfad "C:/x/data/" "VB_ENDP_AP")) + + ;; Aehnlichkeit: Gegenstueck (nur L/R bzw. M/P anders) schlaegt andere Groesse + (tu-eq "omni:profil-aehnlichkeit/gleich" 5 (omni:profil-aehnlichkeit "ABCDE" "ABCDE")) + (tu-eq "omni:profil-aehnlichkeit/laenge" 2 (omni:profil-aehnlichkeit "ABC" "ABCD")) + (tu-eq "omni:profil-aehnlichkeit/kein-string" 0 (omni:profil-aehnlichkeit nil "ABC")) + (tu-true "omni:profil-aehnlichkeit/lr-vor-groesse" + (> (omni:profil-aehnlichkeit "WEICHE S 45-L-400/750, KPL. MIT M" + "WEICHE S 45-R-400/750, KPL. MIT M") + (omni:profil-aehnlichkeit "WEICHE S 45-L-400/750, KPL. MIT M" + "WEICHE S 45-R-350/700, KPL. MIT M"))) + + ;; Vorwahl-Index: exakte Sivasnr, sonst Gegenstueck nach Filterwechsel + (setq _wl + '((("Sivasnr" . 1) ("ProfilTyp" . "WEICHE S 45-L-350/700, KPL. MIT M")) + (("Sivasnr" . 2) ("ProfilTyp" . "WEICHE S 45-L-400/750, KPL. MIT M")) + (("Sivasnr" . 3) ("ProfilTyp" . "WEICHE S 45-R-400/750, KPL. MIT M")))) + (tu-eq "omni:vorwahl-index/sivasnr" 2 + (omni:vorwahl-index '(("Sivasnr" . 3) ("ProfilTyp" . "egal")) _wl)) + (tu-eq "omni:vorwahl-index/gegenstueck-lr" 1 + (omni:vorwahl-index + '(("Sivasnr" . 9) ("ProfilTyp" . "WEICHE S 45-L-400/750, KPL. MIT P")) _wl)) + ;; P mit TEF -> M ohne TEF: gleiche Groesse statt der kuerzeren 350/700 + (tu-eq "omni:vorwahl-index/tef-nach-m" 1 + (omni:vorwahl-index + '(("Sivasnr" . "834372008+0_BG190090") + ("ProfilTyp" . "WEICHE S 45-L-400/750, KPL. MIT P mit TEF Ihnen")) + (list (car _wl) (cadr _wl)))) + (tu-eq "omni:vorwahl-index/batterie" 1 + (omni:vorwahl-index + '(("Sivasnr" . 834372536) ("ProfilTyp" . "Weiche S C L1S 1C 200/1200/950 mit M")) + '((("Sivasnr" . 834372540) ("ProfilTyp" . "Weiche S C R1S 1C 200/1200/950 mit P")) + (("Sivasnr" . 834372539) ("ProfilTyp" . "Weiche S C R1S 1C 200/1200/950 mit M")) + (("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)) )