[ADD] Verbinder für Omniflo Fahrstrecke hinzugefügt

This commit is contained in:
Simon Hensch committed 2026-10-21 10:24:49 +02:00
1 parent 6b8f0f9ec3
commit e528913fbf
28 files changed
+244 -187

No files matched your search

+1 -1
View File
@@ -110,7 +110,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_AP60/AP110, OMNI_TEF_*, OMNI_TV_*, OMNI_APBW_*, OMNI_LADESCHLEIFE_AP110, OMNI_EDIT | Omniflo-Komponenten: Boegen, Weichen, Verbinder, 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_AP60/AP110, 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 |
| `SSG_LIB_Commands.lsp` | ILS_BTMT_Beladung, ILS_BTMT_Entladung, ILS_SCANNER_INSERT, ILS_SEPARATOR_INSERT, ILS_EINGANG_INSERT, ILS_AUSGANG_INSERT, ILS_ETF_*, ILS_GK*_*, 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) + Dummy-Befehle fuer Menue + 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. |
| `GeruestInsert.lsp` | GERUEST, GERUEST_SAEULEN, GERUEST_ROHRABHAENGER, GERUEST_WANDBEFESTIGUNG, GERUEST_TRAEGER, GERUEST_TRAEGER_BESCHRIFTEN, OMNI_FAHRSTRECKE, OMNI_FAHRSTRECKE_BESCHRIFTEN | Geruest-Baugruppen aus `data/json/geruest.json` konfigurieren und einfuegen. **Ein Dialog je Bereich**: Rohrabhaenger / Saeulen / Wandbefestigung oeffnen NUR ueber ihren eigenen Menuebefehl (`geruest-starten id`, Dialogtitel aus dem ASCII-Feld `titel`); eine Umschaltung im Dialog gibt es nicht (DCL hat kein Reiter-Tile), `GERUEST` ohne Bereich zeigt nur einen Hinweis. Der Dialogstand beginnt je Aufruf frisch. 1"- und 2"-Saeulen liegen in EINER Baugruppe `Saeulen` mit gemeinsamer Anbauteil-Liste; **`teileart` und `dummy` duerfen je Geometrie-Variante ueberschrieben werden** (`geruest-variante-wert`, Variante gewinnt vor Baugruppe; fuer `dummy` ueber `geruest-dummy-wahl`: fehlt die DWG der Variante, Meldung + Rueckfall auf den Baugruppen-Dummy; ist der Dummy zugleich eine Teile-DWG, wird er per `geruest-ohne-pfad` nicht doppelt eingefuegt) - so liefert `R 1"` weiterhin TEILEART `Geruest Saeule 1 Zoll` und die `R 2"`-Varianten `Geruest Saeule 2 Zoll`, die Groessen bleiben im Export also unterscheidbar. **Das Layout steht als Vorlage in `dcl/geruest.dcl`** (bzw. `dcl/geruest_traeger.dcl`); nur die datenabhaengigen Bloecke - ein `radio_button` je Variante (Key `v<i>`, `geruest-radio-key`/`-index`), Mengenfeld + Ankreuzfeld je Anbauteil - werden zur Laufzeit an Markerzeilen `//@NAME@` eingesetzt (`geruest-dcl-ersetzungen` -> `ssg-dcl-vorlage-fuellen` in ssg_core, Temp-Datei, nach `unload_dialog` geloescht). Grund: DCL kann Tiles weder zur Laufzeit erzeugen noch ausblenden, Radiobutton-Labels lassen sich per `set_tile` nicht aendern, und eine `list_box` kann keine Eingabefelder enthalten. Varianten bewusst als Radiobuttons statt `list_box`: BricsCAD zeichnet die Listenspalte nur halb so breit, und ein `tabs`-Wert passt nur schrift-/skalierungsabhaengig. Inhalt: Basis-Variante aus `geometrie_varianten` (`list_box` mit Einfachauswahl, Hoehe nach Variantenzahl, `geruest-dcl-listenhoehe`), **Winkel Platte** (0/90 Grad, `*geruest-winkel-werte*`): Ausrichtung der Anbauteile zur Basis - die Teile-DWGs aus oben/unten/sonstiges werden um diesen Winkel um Z gedreht in den Block eingefuegt, Basis und Dummy bleiben ungedreht (`geruest-teile-dwgs-rot`; in Konfigurationen als echter Wert `winkel_platte`, kein Block-Attribut), Laenge (gegen `attribute.Laenge` min/max geprueft, Retry-Schleife), Farbe (`attribute.Teilefarbe`, Freitext bei `frei_option`) und **eine Befestigungsspalte** "Befestigung oben und unten" mit allen `anbaugruppen.befestigung` - die Anzahl ist die GESAMTanzahl je Teil (oben und unten zusammen; Tile-Keys `b<i>`/`bm<i>`, Zustand `*geruest-dlg-bef*`). Unter jedem Teil (auch in Sonstiges) zeigt eine Textzeile "Art.-Nr. ..." die Artikelnummer(n) (`geruest-artnr-anzeige`: Einzelteil -> `sivas_id`, Gruppe -> eindeutige Nummern der Teile; DCL kennt keine Schriftgroesse, darum normale Groesse in eigener Zeile). `anbaugruppen` ist ein Objekt mit zwei Listen: `befestigung` (Befestigungsspalte) und `sonstiges` (Teile, die weder oben noch unten sitzen, z.B. die Saeulen-Haltearme) - letztere bekommen eine eigene Zeile darunter (nur wenn nicht leer), in ARTINR/BEZEICHNUNG nach "unten" als "sonstiges" (`geruest-anbau-liste`; ein altes flaches Array gilt als `befestigung`). **Zwei Mengenfelder im JSON, bewusst verschieden benannt**: `stueckzahl` = wie oft ein Teil TATSAECHLICH geschrieben wird (je Variante bzw. je Satz/Anbauteil, fehlt = 1), `anzahl_vorgabe` = NUR die Vorbelegung des Anzahl-Feldes im Dialog (Anbaugruppen, fehlt = 1); ein Anbauteil wird Anzahl x `stueckzahl` mal geschrieben, bei einer Gruppe (`teile`) zaehlt die Anzahl die Saetze (`geruest-stueckzahl`/`geruest-anzahl-vorgabe`). In Konfigurationen (`befestigung`/`sonstiges`, dazu `winkel_platte`) heisst der gespeicherte Dialogwert `anzahl`. Aeltere Konfigurationen mit getrennten `oben`/`unten`-Listen laden weiter: deren Mengen werden zur Gesamtanzahl addiert (`geruest-konfig-befestigung`), Sonstiges-Teile darin still in die Sonstiges-Zeile umgehaengt (`geruest-konfig-sonstiges`); beim naechsten Speichern steht alles im neuen Format. Baugruppen ohne `attribute`-Block (Wandbefestigung) bekommen Laenge/Farbe gesperrt, Baugruppen ohne Anbauteile bekommen gar keine Spalten (ein leerer DCL-Cluster ist unzulaessig). Im generierten Label wird `"` zu `''` ersetzt (`geruest-dcl-label`) - fuenf Artikelnamen enthalten ein Anfuehrungszeichen, das das DCL-Label sonst vorzeitig beendet und die Datei zerstoert. **Konfigurationen**: gepflegte Bibliothek je Baugruppe unter `konfigurationen` in `geruest.json` (schreibgeschuetzt) plus eigene in `cfg/geruest_user.json` (gitignored, `geruest-user-schreiben`; getrennte Datei, damit Benutzerdaten und versionierte Bibliothek nicht kollidieren). Eigene Eintraege sind in der Liste mit `*` markiert und nur diese loeschbar. **Geaenderte KonfiguratiLine truncated
+144 -107
View File
@@ -1004,8 +1004,7 @@
;; hoehe = Hoehe in mm als String (wird als HOEHE-Attribut gesetzt)
;; drehung = Drehwinkel in Grad als String (Block-Rotation)
;; Rueckgabe: Einfuegepunkt oder nil bei Abbruch
(defun omni:insert-dxf (sivasnr-str hoehe drehung / dxf-pfad omniflo-pfad angleDeg
drehung-anzeige blockEnt attribs layer-name ed pt10 zval zdelta)
(defun omni:insert-dxf (sivasnr-str hoehe drehung / dxf-pfad omniflo-pfad)
(setq omniflo-pfad (getenv "DXFM_OMNIFLO"))
(if (null omniflo-pfad)
(progn
@@ -1019,94 +1018,102 @@
(princ (ssg-textf "omni-fehler-dxf-nicht-gefunden" (list (strcat omniflo-pfad "/" sivasnr-str ".dxf"))))
nil
)
(progn
(ssg-start "OMNI DXF Insert" '(("ATTREQ") ("ATTDIA")))
(setvar "ATTREQ" 0)
(setvar "ATTDIA" 0)
;; Absolute Z-Hoehe fuer den Einfuegepunkt bestimmen
(setq zval (if (and hoehe (/= hoehe "")) (atof hoehe) 0.0))
;; Interaktives Einfuegen mit Live-Vorschau am Mauszeiger:
;; dxf-pfad -> Block aus Datei definieren/waehlen
;; 1. 'pause -> Einfuegepunkt; Objekt haengt sichtbar am Cursor und
;; verschiebt sich mit der Maus (erster Klick positioniert)
;; "" "" -> X-/Y-Massstab = 1
;; Drehung -> aus Dialog fest, sonst 2. 'pause: Objekt dreht sich
;; beim Ziehen sichtbar mit, zweiter Klick beendet
(if drehung
(progn
(setq angleDeg (atof drehung))
(setq drehung-anzeige drehung)
(command "_.INSERT" dxf-pfad pause "" "" angleDeg)
)
(command "_.INSERT" dxf-pfad pause "" "" pause)
)
;; INSERT vollstaendig abschliessen (bei Bedarf weitere Eingabe zulassen)
(while (> (getvar "CMDACTIVE") 0) (command pause))
(setq blockEnt (entlast))
(if (and blockEnt (= (cdr (assoc 0 (entget blockEnt))) "INSERT"))
(progn
(setq ed (entget blockEnt))
;; Tatsaechlich per Maus gesetzte Drehung ermitteln (interaktiv)
(if (null drehung)
(progn
(setq angleDeg (* (cdr (assoc 50 ed)) (/ 180.0 pi)))
(setq drehung-anzeige (rtos angleDeg 2 1))
)
)
;; Z-Hoehe absolut anwenden: Block (inkl. Attribute) per MOVE um
;; die Differenz zum aktuellen Einfuegepunkt-Z verschieben. Osnap
;; beim interaktiven Einfuegen kann eine abweichende Z-Lage liefern,
;; daher Differenz statt fixem Wert (vgl. GF-Z-Versatz-Bug).
;; Explizite Koordinaten unterliegen keinem Objektfang.
(setq pt10 (cdr (assoc 10 ed)))
(setq zdelta (- zval (caddr pt10)))
(if (/= zdelta 0.0)
(command "_.MOVE" blockEnt "" (list 0.0 0.0 0.0) (list 0.0 0.0 zdelta))
)
;; HOEHE und DREHUNG Attribute setzen
(ssg-attrib-set-on blockEnt
(list (cons "HOEHE" (if hoehe hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000")))
(cons "DREHUNG" drehung-anzeige)))
;; Layer aus der Block-Vorgabe (LAYER-Attribut) setzen
(setq attribs (ssg-attrib-read blockEnt))
(setq layer-name (ssg-block-layer-vorgabe blockEnt sivasnr-str attribs))
)
)
;; Fallback fuer Anzeige, falls keine Drehung ermittelt wurde
(if (null drehung-anzeige)
(setq drehung-anzeige (rtos (if angleDeg angleDeg 0.0) 2 1))
)
;; Eindeutige ID zuweisen
(if (and blockEnt (atoms-family 1 '("ssg-id-generate")))
(ssg-id-generate blockEnt)
)
(princ (ssg-textf "omni-dxf-eingefuegt"
(list
sivasnr-str
(if hoehe hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000"))
drehung-anzeige
(if layer-name (strcat " Layer=" layer-name) "")
)))
(ssg-end)
;; Rueckgabe: tatsaechlicher Einfuegepunkt
(if blockEnt (cdr (assoc 10 (entget blockEnt))))
)
(omni:insert-datei dxf-pfad sivasnr-str hoehe drehung)
)
)
)
)
;; --- Block-Datei (DXF/DWG) interaktiv einfuegen ---
;; dxf-pfad = vollstaendiger Pfad der Blockdatei (bereits auf Existenz geprueft)
;; name = Anzeigename/Blockname fuer Meldung und Layer-Vorgabe
;; hoehe, drehung wie omni:insert-dxf
;; Rueckgabe: Einfuegepunkt oder nil bei Abbruch
(defun omni:insert-datei (dxf-pfad name hoehe drehung / angleDeg
drehung-anzeige blockEnt attribs layer-name ed pt10 zval zdelta)
(ssg-start "OMNI DXF Insert" '(("ATTREQ") ("ATTDIA")))
(setvar "ATTREQ" 0)
(setvar "ATTDIA" 0)
;; Absolute Z-Hoehe fuer den Einfuegepunkt bestimmen
(setq zval (if (and hoehe (/= hoehe "")) (atof hoehe) 0.0))
;; Interaktives Einfuegen mit Live-Vorschau am Mauszeiger:
;; dxf-pfad -> Block aus Datei definieren/waehlen
;; 1. 'pause -> Einfuegepunkt; Objekt haengt sichtbar am Cursor und
;; verschiebt sich mit der Maus (erster Klick positioniert)
;; "" "" -> X-/Y-Massstab = 1
;; Drehung -> aus Dialog fest, sonst 2. 'pause: Objekt dreht sich
;; beim Ziehen sichtbar mit, zweiter Klick beendet
(if drehung
(progn
(setq angleDeg (atof drehung))
(setq drehung-anzeige drehung)
(command "_.INSERT" dxf-pfad pause "" "" angleDeg)
)
(command "_.INSERT" dxf-pfad pause "" "" pause)
)
;; INSERT vollstaendig abschliessen (bei Bedarf weitere Eingabe zulassen)
(while (> (getvar "CMDACTIVE") 0) (command pause))
(setq blockEnt (entlast))
(if (and blockEnt (= (cdr (assoc 0 (entget blockEnt))) "INSERT"))
(progn
(setq ed (entget blockEnt))
;; Tatsaechlich per Maus gesetzte Drehung ermitteln (interaktiv)
(if (null drehung)
(progn
(setq angleDeg (* (cdr (assoc 50 ed)) (/ 180.0 pi)))
(setq drehung-anzeige (rtos angleDeg 2 1))
)
)
;; Z-Hoehe absolut anwenden: Block (inkl. Attribute) per MOVE um
;; die Differenz zum aktuellen Einfuegepunkt-Z verschieben. Osnap
;; beim interaktiven Einfuegen kann eine abweichende Z-Lage liefern,
;; daher Differenz statt fixem Wert (vgl. GF-Z-Versatz-Bug).
;; Explizite Koordinaten unterliegen keinem Objektfang.
(setq pt10 (cdr (assoc 10 ed)))
(setq zdelta (- zval (caddr pt10)))
(if (/= zdelta 0.0)
(command "_.MOVE" blockEnt "" (list 0.0 0.0 0.0) (list 0.0 0.0 zdelta))
)
;; HOEHE und DREHUNG Attribute setzen
(ssg-attrib-set-on blockEnt
(list (cons "HOEHE" (if hoehe hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000")))
(cons "DREHUNG" drehung-anzeige)))
;; Layer aus der Block-Vorgabe (LAYER-Attribut) setzen
(setq attribs (ssg-attrib-read blockEnt))
(setq layer-name (ssg-block-layer-vorgabe blockEnt name attribs))
)
)
;; Fallback fuer Anzeige, falls keine Drehung ermittelt wurde
(if (null drehung-anzeige)
(setq drehung-anzeige (rtos (if angleDeg angleDeg 0.0) 2 1))
)
;; Eindeutige ID zuweisen
(if (and blockEnt (atoms-family 1 '("ssg-id-generate")))
(ssg-id-generate blockEnt)
)
(princ (ssg-textf "omni-dxf-eingefuegt"
(list
name
(if hoehe hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000"))
drehung-anzeige
(if layer-name (strcat " Layer=" layer-name) "")
)))
(ssg-end)
;; Rueckgabe: tatsaechlicher Einfuegepunkt
(if blockEnt (cdr (assoc 10 (entget blockEnt))))
)
;; --- Eintrag aus Dialog-Ergebnis einfuegen ---
;; dlg-result = (eintrag hoehe drehung) aus omni:bogen-dialog / omni:weichen-dialog
@@ -1650,76 +1657,106 @@
)
;; --- Omniflo / Verbinder ---
;; Verbinder-Bloecke liegen dimensionsunabhaengig als DWG in
;; data/omniflo/Verbinder (nicht unter DXFM_OMNIFLO = data/omniflo/<DIM>).
;; Einfuegen wie die festen TEF-Bauteile ueber omni:insert-datei: Punkt und
;; Drehung interaktiv, Layer aus dem LAYER-Attribut, ID per ssg-id-generate.
;; Befehl -> DWG-Name steht direkt im jeweiligen c:OMNI_TV_*-Befehl.
;; Pfad der Verbinder-DWG aus Datenverzeichnis + Dateiname (ohne .dwg)
(defun omni:verbinder-pfad (data-pfad datei)
(strcat (vl-string-right-trim "/" (vl-string-translate "\\" "/" data-pfad))
"/omniflo/Verbinder/" datei ".dwg")
)
;; Verbinder-DWG interaktiv einfuegen. Rueckgabe: Einfuegepunkt oder nil
(defun omni:insert-verbinder (datei / data-pfad pfad)
(setq data-pfad (getenv "DXFM_DATA"))
(cond
((null data-pfad)
(princ (ssg-text "omni-fehler-dxfm-data"))
nil)
((not (findfile (setq pfad (omni:verbinder-pfad data-pfad datei))))
(princ (ssg-textf "omni-fehler-dxf-nicht-gefunden" (list pfad)))
nil)
(t (omni:insert-datei pfad datei nil nil))
)
)
(defun c:OMNI_TV_W_W ()
(princ "\n[DUMMY] TV W-W kpl")
(omni:insert-verbinder "TV_W-W_kpl")
(princ)
)
(defun c:OMNI_TV_W_AP110 ()
(princ "\n[DUMMY] TV W-AP110 kpl")
(omni:insert-verbinder "TV_W-AP110_kpl")
(princ)
)
(defun c:OMNI_TV_W_AP60 ()
(princ "\n[DUMMY] TV W-AP60 oben kpl.")
(omni:insert-verbinder "TV_W-AP60_oben")
(princ)
)
(defun c:OMNI_TV_W_AP60_KPL ()
(omni:insert-verbinder "TV_W-AP60_kpl")
(princ)
)
(defun c:OMNI_TV_W_AP110_W ()
(princ "\n[DUMMY] TV W-AP110-W kpl")
(princ)
)
(defun c:OMNI_TV_W_AP ()
(princ "\n[DUMMY] TV W-AP oben kpl")
(omni:insert-verbinder "TV_W-AP110-W_kpl")
(princ)
)
(defun c:OMNI_TV_80 ()
(princ "\n[DUMMY] TV 80")
(omni:insert-verbinder "TV_80_kpl")
(princ)
)
(defun c:OMNI_TV_50 ()
(princ "\n[DUMMY] TV 50")
(omni:insert-verbinder "TV_50_kpl")
(princ)
)
(defun c:OMNI_TV_ENDPLATTE ()
(princ "\n[DUMMY] Endplatte Al-Profil AP schraubbar")
(omni:insert-verbinder "VB_ENDP_AP")
(princ)
)
(defun c:OMNI_TV_ANSCHLAG ()
(princ "\n[DUMMY] Anschlag AP-Ende fuer Spulenzug")
(omni:insert-verbinder "VB_ENDP_AP_Spulenzug")
(princ)
)
(defun c:OMNI_TV_A_AP110_AP60 ()
(princ "\n[DUMMY] TV-A fuer AP110/AP60 kpl")
(omni:insert-verbinder "TV_AP110-AP60_kpl")
(princ)
)
(defun c:OMNI_TV_A_AP60_ST ()
(princ "\n[DUMMY] TV-A fuer AP60/ST")
(omni:insert-verbinder "TV_AP60-ST_kpl")
(princ)
)
(defun c:OMNI_TV_A_AP110_ST ()
(princ "\n[DUMMY] TV-A fuer AP110/ST kpl")
(omni:insert-verbinder "TV_AP110-ST_kpl")
(princ)
)
(defun c:OMNI_TV_SW_II_SW_SW ()
(princ "\n[DUMMY] TV-SW II fuer SW-SW")
(omni:insert-verbinder "TV_SW-SW")
(princ)
)
(defun c:OMNI_TV_SW_III_AP110_SW ()
(princ "\n[DUMMY] TV-SW III fuer SW-AP110-SW")
(omni:insert-verbinder "TV_SW-AP110-SW")
(princ)
)
(defun c:OMNI_TV_SW_III_AP110 ()
(princ "\n[DUMMY] TV-SW III fuer SW-AP110")
(defun c:OMNI_TV_W_AP60_KPL ()
(omni:insert-verbinder "TV_W-AP60_kpl")
(princ)
)
(defun c:OMNI_TV_SW_I_AP110 ()
(omni:insert-verbinder "TV_SW_I_SW-AP110")
(princ)
)
(defun c:OMNI_TV_SW_IV_AP60 ()
(princ "\n[DUMMY] TV-SW IV fuer Anschluss SW-AP60")
(omni:insert-verbinder "TV_SW_IV_SW-AP60")
(princ)
)
(defun c:OMNI_TV_SW_IV_ST ()
(princ "\n[DUMMY] TV-SW IV fuer SW-ST")
(omni:insert-verbinder "TV_SW_IV_SW-ST")
(princ)
)
(defun c:OMNI_TV_MUFFE ()
(princ "\n[DUMMY] Muffe")
(omni:insert-verbinder "VB_Muffe")
(princ)
)
+1 -2
View File
@@ -39,7 +39,6 @@ am Label-Anfang, bei Submenue-Schliessern hinter dem `<-` (`[<-~Label]`).
| Menuebereich | Eintraege | Definiert in |
| --- | --- | --- |
| Omniflo ▸ Anbaugruppen | `OMNI_KettenFoerderer` | `OmniModulInsert.lsp` |
| Omniflo ▸ Verbinder | alle `OMNI_TV_*` (18) | `OmniModulInsert.lsp` |
| Omniflo ▸ Boegen fuer Weichen | alle `OMNI_APBW_*` (14) | `OmniModulInsert.lsp` |
| ILS ▸ Zusatzmodule/Kurven | `ILS_ETF_Etagenfoerderer`, `ILS_K{90,60,30}{L,R}{A,I}` (12), `ILS_Gefaellestrecke` | `SSG_LIB_Commands.lsp` |
| Geruest | `GERUEST` (Gattertraeger-Platzhalter, derselbe Befehl wie Saeulen/Rohrabhaenger/Wandbefestigung) | `GeruestInsert.lsp` |
@@ -703,7 +702,7 @@ AutoLISP-Implementierung fuer alle Omniflo-Komponenten: Boegen, Weichen, Verbind
| 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`) |
| Anbaugruppen ⚠️ | `OMNI_KettenFoerderer` | **Dummy** (noch nicht implementiert, im Menue ausgegraut); `OMNI_STOPPER`/`OMNI_SCANNER`/`OMNI_BUERSTENBREMSE` sind implementiert |
| Transferwagen ⚠️ | `OMNI_TV_*` | **Dummy** (noch nicht implementiert, im Menue ausgegraut) |
| 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 |
+4
View File
@@ -2394,6 +2394,9 @@
;; GeruestInsert.lsp). Wie BTMT eigenstaendig und von keinem anderen
;; Element mitgezaehlt - export_csv.py UND export_sivas.py fuehren sie
;; beide als eigene TeileArt-Zeilen.
;; VB_*/TV_* = Omniflo-Verbinder (siehe pattern_verbinder in
;; cfg/export.cfg, OMNI_TV_* in OmniModulInsert.lsp). export_sivas.py
;; fuehrt sie ueber TEILEART/ARTINR im allgemeinen Omniflo-Zweig.
;; Bloecke auf GEFRORENEN Layern (und die Hilfsobjekte gefrorener VF_n/GF_n)
;; werden ausgelassen, solange *csv-gefrorene-ausschliessen* an ist (Standard,
;; Dialog CSV_EXPORT_KONFIG); ausgeschaltete Layer zaehlen nicht als gefroren.
@@ -2445,6 +2448,7 @@
(wcmatch bname (export:pattern "pattern_eingang" "Eingang*"))
(wcmatch bname (export:pattern "pattern_ausgang" "Ausgang*"))
(wcmatch bname (export:pattern "pattern_geruest" "GR_*"))
(wcmatch bname (export:pattern "pattern_verbinder" "VB_*,TV_*"))
(wcmatch bname (export:pattern "pattern_unit_marker" "ZZ_UNIT_MARKER*"))
;; Rein numerische Namen = Omniflo SivasNr (Boegen/Weichen)
;; Rein LISP-intern (Python klassifiziert Omniflo stattdessen
+3
View File
@@ -45,6 +45,8 @@
;; Spalte (auch auf Kreiseln) bekommen.
;; GR_* (Geruest-Baugruppen, siehe pattern_geruest in cfg/export.cfg) ebenso -
;; das ID-ATTDEF steht seit *geruest-attrib-defs* zur Verfuegung.
;; VB_*/TV_* (Omniflo-Verbinder, siehe pattern_verbinder in
;; cfg/export.cfg) ebenso - fest im Code wie GR_*.
;; Gefaellebogen_* (siehe pattern_nested_bogen in cfg/export.cfg): einer der
;; Bausteine einer GF-Kette, verpackt in VF_n/GF_n; wird beim Export ebenso
;; als temporaere Kopie ausgepackt wie die uebrigen Vario_*/Staustrecke_*-
@@ -81,6 +83,7 @@
(wcmatch bname "BTMT-Beladung*,SC_Entladung*")
(wcmatch bname "Eingang*,Ausgang*")
(wcmatch bname "GR_*")
(wcmatch bname "VB_*,TV_*")
(wcmatch bname "#*")
)
(ssadd ename ss-out)
+6
View File
@@ -71,6 +71,11 @@
# Eigenstaendig wie BTMT, kein ANZAHL_*-Attribut an einem Carrier - export_csv.py
# UND export_sivas.py fuehren sie als eigene TeileArt-Zeilen.
#
# pattern_verbinder: Omniflo-Verbinder (OMNI_TV_*, DWGs in data/omniflo/
# Verbinder). Nur fuer Lisp's Block-SAMMLUNG und ID-Vergabe - export_sivas.py
# erkennt sie wie alle Omniflo-Teile ueber TEILEART "Omniflo ..." und schreibt
# je Nummer aus ARTINR eine Omniflo-Zeile.
#
# pattern_nested_bogen/_streckenelement/_umlenkstation/_motorstation: die
# uebrigen Bausteine einer VF_n/GF_n-Kette (Boegen, gerade Foerderer-/
# Gefaellestrecken-Segmente, Umlenk-/Motorstation). Wie pattern_schleuselement
@@ -130,6 +135,7 @@ pattern_ks_subblocks= KS_EIN, KS_AUS, K1, K2, K3, K4
pattern_gerade= AP110*, AP_110*, AP60*
# Gerüst
pattern_geruest= GR_*
pattern_verbinder= VB_*, TV_*
[python]
# Interpreter fuer die Export-Skripte (lib/export_csv.py, lib/export_sivas.py).
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -98,7 +98,7 @@ Gross-/Kleinschreibung spielt an der Kommandozeile keine Rolle.
| `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) |
| `OMNI_STOPPER`, `OMNI_SCANNER`, `OMNI_BUERSTENBREMSE` | Anbaugruppen |
| `OMNI_TV_W_W`, `OMNI_TV_W_AP`, `OMNI_TV_W_AP60`, `OMNI_TV_W_AP110`, `OMNI_TV_W_AP110_W`, `OMNI_TV_50`, `OMNI_TV_80`, `OMNI_TV_ENDPLATTE`, `OMNI_TV_ANSCHLAG`, `OMNI_TV_MUFFE`, `OMNI_TV_A_AP110_AP60`, `OMNI_TV_A_AP60_ST`, `OMNI_TV_A_AP110_ST`, `OMNI_TV_SW_II_SW_SW`, `OMNI_TV_SW_III_AP110`, `OMNI_TV_SW_III_AP110_SW`, `OMNI_TV_SW_IV_AP60`, `OMNI_TV_SW_IV_ST` | Verbinder |
| `OMNI_TV_W_W`, `OMNI_TV_W_AP60`, `OMNI_TV_W_AP60_KPL`, `OMNI_TV_W_AP110`, `OMNI_TV_W_AP110_W`, `OMNI_TV_50`, `OMNI_TV_80`, `OMNI_TV_ENDPLATTE`, `OMNI_TV_ANSCHLAG`, `OMNI_TV_MUFFE`, `OMNI_TV_A_AP110_AP60`, `OMNI_TV_A_AP60_ST`, `OMNI_TV_A_AP110_ST`, `OMNI_TV_SW_II_SW_SW`, `OMNI_TV_SW_I_AP110`, `OMNI_TV_SW_III_AP110_SW`, `OMNI_TV_SW_IV_AP60`, `OMNI_TV_SW_IV_ST` | Verbinder |
| `OMNI_LADESCHLEIFE_AP110` | Ladeschleife (Dialog `omniflo_ladeschleifen.dcl`) |
| `OMNI_KettenFoerderer` | Platzhalter (noch ohne Funktion) |
| `OMNI_EDIT` | Omniflo-Element per Dialog bearbeiten; auch per Doppelklick |
+58 -58
View File
@@ -411,23 +411,23 @@
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00098">
<Macro>
<Name>TV W-W kpl</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_W</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00099">
<Macro>
<Name>TV W-AP110 kpl</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_AP110</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00100">
<MenuMacro UID="MM_00099">
<Macro>
<Name>TV W-AP60 oben kpl.</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_AP60</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00100">
<Macro>
<Name>TV W-W kpl</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_W</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00101">
<Macro>
<Name>TV W-AP110-W kpl</Name>
@@ -436,8 +436,8 @@
</MenuMacro>
<MenuMacro UID="MM_00102">
<Macro>
<Name>TV W-AP oben kpl</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_AP</Command>
<Name>TV W-AP60 kpl</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_AP60_KPL</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00103">
@@ -460,55 +460,55 @@
</MenuMacro>
<MenuMacro UID="MM_00106">
<Macro>
<Name>Anschlag AP-Ende fuer Spulenzug</Name>
<Name>Anschlag AP-Ende für Spulenzug</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_ANSCHLAG</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00107">
<Macro>
<Name>TV-A fuer AP110/AP60 kpl</Name>
<Name>TV-A für AP110/AP60 kpl</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_A_AP110_AP60</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00108">
<Macro>
<Name>TV-A fuer AP60/ST</Name>
<Name>TV-A für AP60/ST</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_A_AP60_ST</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00109">
<Macro>
<Name>TV-A fuer AP110/ST kpl</Name>
<Name>TV-A für AP110/ST kpl</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_A_AP110_ST</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00110">
<Macro>
<Name>TV-SW II fuer SW-SW</Name>
<Name>TV-SW II für SW-SW</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_II_SW_SW</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00111">
<Macro>
<Name>TV-SW III fuer SW-AP110-SW</Name>
<Name>TV-SW III für SW-AP110-SW</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_III_AP110_SW</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00112">
<Macro>
<Name>TV-SW III fuer SW-AP110</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_III_AP110</Command>
<Name>TV-SW I für SW-AP110</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_I_AP110</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00113">
<Macro>
<Name>TV-SW IV fuer Anschluss SW-AP60</Name>
<Name>TV-SW IV für Anschluss SW-AP60</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_IV_AP60</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00114">
<Macro>
<Name>TV-SW IV fuer SW-ST</Name>
<Name>TV-SW IV für SW-ST</Name>
<Command>^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_IV_ST</Command>
</Macro>
</MenuMacro>
@@ -872,61 +872,61 @@
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_showroom_ils.lsp")) (c:TEST_SHOWROOM_ILS)</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00210">
<MenuMacro UID="MM_00189">
<Macro>
<Name>Testanlage test_system</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_test_system.lsp")) (c:TEST_TEST_SYSTEM)</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00189">
<MenuMacro UID="MM_00190">
<Macro>
<Name>KS 2D/3D pruefen (CSV)</Name>
<Command>^C^C(load (strcat (getenv "DXFMAKRO") "/Lisp/ks_pruefung.lsp")) KS_PRUEFEN</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00201">
<MenuMacro UID="MM_00202">
<Macro>
<Name>Kreisel bearbeiten</Name>
<Command>(ssg-ensure "KreiselInsert") KreiselEdit</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00202">
<MenuMacro UID="MM_00203">
<Macro>
<Name>Eckrad bearbeiten</Name>
<Command>(ssg-ensure "KreiselInsert") EckradEdit</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00203">
<MenuMacro UID="MM_00204">
<Macro>
<Name>Omniflo Element bearbeiten</Name>
<Command>(ssg-ensure "OmniModulInsert") OMNI_EDIT</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00204">
<MenuMacro UID="MM_00205">
<Macro>
<Name>Gefaellestrecke bearbeiten</Name>
<Command>(ssg-ensure "Gefaellestrecke") GEFAELLESTRECKE_EDIT</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00205">
<MenuMacro UID="MM_00206">
<Macro>
<Name>VarioFoerderer bearbeiten</Name>
<Command>(ssg-ensure "VarioFoerderer") VARIOFOERDERER_EDIT</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00206">
<MenuMacro UID="MM_00207">
<Macro>
<Name>TRO-Marker bearbeiten</Name>
<Command>(ssg-ensure "Tro_Edit") TRO_EDIT</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00207">
<MenuMacro UID="MM_00208">
<Macro>
<Name>Verbindung bearbeiten</Name>
<Command>(ssg-ensure "Connection_Edit") CONNECTION_EDIT</Command>
</Macro>
</MenuMacro>
<MenuMacro UID="MM_00209">
<MenuMacro UID="MM_00210">
<Macro>
<Name>SSG Bearbeiten (Auto)</Name>
<Command>(ssg-ensure "SSG_LIB_Commands") SSG_BLOCKEDIT</Command>
@@ -1430,109 +1430,109 @@
<PopMenu UID="PM_00097">
<Name>Verbinder</Name>
<PopMenuItem>
<NameRef>~TV W-W kpl</NameRef>
<NameRef>TV W-AP110 kpl</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00098"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV W-AP110 kpl</NameRef>
<NameRef>TV W-AP60 oben kpl.</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00099"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV W-AP60 oben kpl.</NameRef>
<NameRef>TV W-W kpl</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00100"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV W-AP110-W kpl</NameRef>
<NameRef>TV W-AP110-W kpl</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00101"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV W-AP oben kpl</NameRef>
<NameRef>TV W-AP60 kpl</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00102"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV 80</NameRef>
<NameRef>TV 80</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00103"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV 50</NameRef>
<NameRef>TV 50</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00104"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~Endplatte Al-Profil AP schraubbar</NameRef>
<NameRef>Endplatte Al-Profil AP schraubbar</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00105"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~Anschlag AP-Ende fuer Spulenzug</NameRef>
<NameRef>Anschlag AP-Ende für Spulenzug</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00106"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV-A fuer AP110/AP60 kpl</NameRef>
<NameRef>TV-A für AP110/AP60 kpl</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00107"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV-A fuer AP60/ST</NameRef>
<NameRef>TV-A für AP60/ST</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00108"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV-A fuer AP110/ST kpl</NameRef>
<NameRef>TV-A für AP110/ST kpl</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00109"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV-SW II fuer SW-SW</NameRef>
<NameRef>TV-SW II für SW-SW</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00110"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV-SW III fuer SW-AP110-SW</NameRef>
<NameRef>TV-SW III für SW-AP110-SW</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00111"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV-SW III fuer SW-AP110</NameRef>
<NameRef>TV-SW I für SW-AP110</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00112"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV-SW IV fuer Anschluss SW-AP60</NameRef>
<NameRef>TV-SW IV für Anschluss SW-AP60</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00113"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~TV-SW IV fuer SW-ST</NameRef>
<NameRef>TV-SW IV für SW-ST</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00114"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>~Muffe</NameRef>
<NameRef>Muffe</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00115"/>
</MenuItem>
@@ -1930,66 +1930,66 @@
<PopMenuItem>
<NameRef>Testanlage test_system</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00210"/>
<MacroRef MenuMacroID="MM_00189"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>KS 2D/3D pruefen (CSV)</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00189"/>
<MacroRef MenuMacroID="MM_00190"/>
</MenuItem>
</PopMenuItem>
</PopMenu>
<PopMenu UID="PM_00200">
<PopMenu UID="PM_00201">
<Alias>POP501</Alias>
<Name>SSG_LIB Edit Context</Name>
<PopMenuItem>
<NameRef>Kreisel bearbeiten</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00201"/>
<MacroRef MenuMacroID="MM_00202"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>Eckrad bearbeiten</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00202"/>
<MacroRef MenuMacroID="MM_00203"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>Omniflo Element bearbeiten</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00203"/>
<MacroRef MenuMacroID="MM_00204"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>Gefaellestrecke bearbeiten</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00204"/>
<MacroRef MenuMacroID="MM_00205"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>VarioFoerderer bearbeiten</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00205"/>
<MacroRef MenuMacroID="MM_00206"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>TRO-Marker bearbeiten</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00206"/>
<MacroRef MenuMacroID="MM_00207"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem>
<NameRef>Verbindung bearbeiten</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00207"/>
<MacroRef MenuMacroID="MM_00208"/>
</MenuItem>
</PopMenuItem>
<PopMenuItem IsSeparator="true"/>
<PopMenuItem>
<NameRef>SSG Bearbeiten (Auto)</NameRef>
<MenuItem>
<MacroRef MenuMacroID="MM_00209"/>
<MacroRef MenuMacroID="MM_00210"/>
</MenuItem>
</PopMenuItem>
</PopMenu>
+18 -18
View File
@@ -95,24 +95,24 @@
[~KettenFoerderer]^C^C(ssg-ensure "OmniModulInsert") OMNI_KettenFoerderer
[Ladeschleifen]^C^C(ssg-ensure "OmniModulInsert") OMNI_LADESCHLEIFE_AP110
[->Verbinder]
[~TV W-W kpl]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_W
[~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-AP110-W kpl]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_AP110_W
[~TV W-AP oben kpl]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_AP
[~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 fuer Spulenzug]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_ANSCHLAG
[~TV-A fuer AP110/AP60 kpl]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_A_AP110_AP60
[~TV-A fuer AP60/ST]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_A_AP60_ST
[~TV-A fuer AP110/ST kpl]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_A_AP110_ST
[~TV-SW II fuer SW-SW]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_II_SW_SW
[~TV-SW III fuer SW-AP110-SW]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_III_AP110_SW
[~TV-SW III fuer SW-AP110]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_III_AP110
[~TV-SW IV fuer Anschluss SW-AP60]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_IV_AP60
[~TV-SW IV fuer SW-ST]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_SW_IV_ST
[<-~Muffe]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_MUFFE
[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
[->Boegen fuer Weichen]
[~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
+8
View File
@@ -794,6 +794,14 @@
(tu-eq "omni:filter/anzahl" 2 (length (omni:filter _lst "KurvenWinkel" 45)))
(tu-eq "omni:filter/wert"
100 (cdr (assoc "Sivasnr" (car (omni:filter _lst "KurvenWinkel" 45)))))
;; Verbinder-Pfad: Backslashes normalisiert, abschliessender Trenner entfernt
(tu-eq "omni:verbinder-pfad/backslash"
"C:/x/data/omniflo/Verbinder/TV_W-W_kpl.dwg"
(omni:verbinder-pfad "C:\\x\\data" "TV_W-W_kpl"))
(tu-eq "omni:verbinder-pfad/trenner"
"C:/x/data/omniflo/Verbinder/VB_ENDP_AP.dwg"
(omni:verbinder-pfad "C:/x/data/" "VB_ENDP_AP"))
)