feat: Omniflo-Fahrstrecke (OMNI_FAHRSTRECKE) + Geruest-Dialoge ueberarbeitet
Fahrstrecke: - Neuer Befehl OMNI_FAHRSTRECKE (+ _BESCHRIFTEN) im Omniflo-Menue, Daten aus data/json/omniflo_fahrstrecke.json, Vorlage dcl/fahrstrecke.dcl - Nutzt die Linien-Logik des Geruest-Traegers (geruest-linien-starten, Dialog/Einfuegen/Beschriftung je Baugruppe parametriert) - Muffen-Dummy wie beim Traeger, farbig nur wo in der JSON gesetzt - Stueckliste: eigene Klasse "Omniflo Fahrstrecke" (GR_Fahrstrecke_*) Geruest-Dialoge: - DCL als statische Vorlagen mit //@NAME@-Platzhaltern (ssg-dcl-vorlage-fuellen in ssg_core), dcl/geruest.dcl neu - Ein Dialog je Bereich (keine Bereichsumschaltung mehr) - Varianten als Radiobuttons mit Artikelnummern im Label, "disabled": true graut Varianten aus - Eine Befestigungsspalte (Gesamtanzahl) + Zeile "Sonstiges", Art.-Nr. unter jedem Anbauteil - Winkel Platte (0/90): Anbauteile gedreht eingefuegt - Kennzeichnung geaenderter Konfiguration, Ueberspeichern per Enter - Traeger: Querstreben nur bei "mit_querstrebe": true Konfigurationen im alten Format (oben/unten) werden beim Laden uebernommen. Unit-Tests ergaenzt (599 gruen).
This commit is contained in:
+689
-387
File diff suppressed because it is too large
Load Diff
@@ -1479,6 +1479,27 @@
|
||||
(princ)
|
||||
)
|
||||
|
||||
;; --- Omniflo / Türlösungen Schwenkschienen ---
|
||||
;; Feste TEF-Bauteile ohne Sivas-Auswahl: Datei liegt direkt unter DXFM_OMNIFLO,
|
||||
;; wird per omni:insert-dxf am gewaehlten Einfuegepunkt ohne Drehung eingefuegt.
|
||||
(defun c:OMNI_SCHW_400_R ()
|
||||
(omni:insert-dxf "824604002" nil nil)
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_SCHW_400_L ()
|
||||
(omni:insert-dxf "824604001" nil nil)
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_SCHW_400_R_SENSORIK ()
|
||||
(omni:insert-dxf "824604012" nil nil)
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_SCHW_400_L_SENSORIK ()
|
||||
(omni:insert-dxf "824604011" nil nil)
|
||||
(princ)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
;; --- Omniflo / TEF Elemente ---
|
||||
|
||||
+43
-4
@@ -1643,10 +1643,9 @@
|
||||
;; Schreibt eine Liste von Textzeilen als temporaere DCL-Datei und liefert
|
||||
;; deren Pfad zurueck (oder nil bei Fehler, z.B. wenn open scheitert). Der
|
||||
;; Aufrufer ist fuer load_dialog/unload_dialog UND das Loeschen der Datei
|
||||
;; (vl-file-delete) danach selbst verantwortlich - analog zum bestehenden
|
||||
;; Muster in GeruestInsert.lsp (geruest-dcl-schreiben), hier nur als
|
||||
;; generischer Baustein fuer WEITERE Aufrufer (GeruestInsert.lsp selbst
|
||||
;; bleibt unveraendert, um dessen Code nicht anzufassen).
|
||||
;; (vl-file-delete) danach selbst verantwortlich. Fuer Dialoge mit fester
|
||||
;; Grundstruktur und nur einzelnen datenabhaengigen Bloecken siehe
|
||||
;; ssg-dcl-vorlage-fuellen.
|
||||
(defun ssg-dcl-temp-schreiben (praefix zeilen / pfad f)
|
||||
(setq pfad (vl-filename-mktemp praefix nil ".dcl"))
|
||||
(if (setq f (open pfad "w"))
|
||||
@@ -1659,6 +1658,46 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; DCL-Vorlagen mit Platzhaltern: DCL kann Tiles weder zur Laufzeit erzeugen
|
||||
;; noch ausblenden, und Labels von radio_button/toggle lassen sich per
|
||||
;; set_tile nicht aendern. Datenabhaengige Teile (z.B. ein Radiobutton je
|
||||
;; Variante) werden darum in eine statische .dcl-Vorlage eingesetzt: jede
|
||||
;; Zeile, die getrimmt genau "//@NAME@" lautet, wird durch die Zeilen aus
|
||||
;; ersetzungen (("NAME" . (zeile ...)) ...) ersetzt. Eine leere Liste
|
||||
;; entfernt die Markerzeile; ein unbekannter Marker bleibt als DCL-Kommentar
|
||||
;; stehen (harmlos). Das Layout bleibt so eine normale, lesbare .dcl-Datei.
|
||||
(defun ssg-dcl-zeilen-ersetzen (zeilen ersetzungen / erg t1 name e)
|
||||
(setq erg nil)
|
||||
(foreach z zeilen
|
||||
(setq t1 (vl-string-trim " \t" z))
|
||||
(setq name (if (and (> (strlen t1) 4)
|
||||
(= (substr t1 1 3) "//@")
|
||||
(= (substr t1 (strlen t1) 1) "@"))
|
||||
(substr t1 4 (- (strlen t1) 4))))
|
||||
(if (and name (setq e (assoc name ersetzungen)))
|
||||
(setq erg (append erg (cdr e)))
|
||||
(setq erg (append erg (list z)))
|
||||
)
|
||||
)
|
||||
erg
|
||||
)
|
||||
|
||||
;; Vorlage lesen, Platzhalter ersetzen (ssg-dcl-zeilen-ersetzen) und als
|
||||
;; temporaere DCL-Datei schreiben. Rueckgabe: Pfad oder nil (Vorlage fehlt /
|
||||
;; nicht lesbar / nicht schreibbar). Laden und Loeschen wie bei
|
||||
;; ssg-dcl-temp-schreiben durch den Aufrufer.
|
||||
(defun ssg-dcl-vorlage-fuellen (vorlage-pfad praefix ersetzungen / f z zeilen)
|
||||
(if (and vorlage-pfad (findfile vorlage-pfad) (setq f (open vorlage-pfad "r")))
|
||||
(progn
|
||||
(setq zeilen nil)
|
||||
(while (setq z (read-line f)) (setq zeilen (cons z zeilen)))
|
||||
(close f)
|
||||
(ssg-dcl-temp-schreiben praefix
|
||||
(ssg-dcl-zeilen-ersetzen (reverse zeilen) ersetzungen))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; REKURSIVER JSON-PARSER
|
||||
|
||||
@@ -163,6 +163,10 @@
|
||||
(cons "ils_kreisel" (ssg-text "sl-erk-kreisel")))
|
||||
((or (wcmatch b "VF_*") (wcmatch b "GF_*"))
|
||||
(cons "ils_strecke" (ssg-text "sl-erk-strecke")))
|
||||
;; Fahrstrecke (OMNI_FAHRSTRECKE) entsteht ueber den Geruest-Baukasten und
|
||||
;; traegt darum ebenfalls das GR_-Praefix - VOR dem allgemeinen GR_-Zweig.
|
||||
((wcmatch b "GR_FAHRSTRECKE_*")
|
||||
(cons "fahrstrecke" (ssg-text "sl-erk-fahrstrecke")))
|
||||
((wcmatch b "GR_*")
|
||||
(cons "geruest" (ssg-text "sl-erk-geruest")))
|
||||
((wcmatch b "AP60*")
|
||||
|
||||
Reference in New Issue
Block a user