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:
2026-10-13 11:02:23 +02:00
parent 3116e639eb
commit ea0e46a441
25 changed files with 2597 additions and 1469 deletions
+8 -6
View File
File diff suppressed because one or more lines are too long
+689 -387
View File
File diff suppressed because it is too large Load Diff
+21
View File
@@ -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
View File
@@ -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
+4
View File
@@ -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*")
+213 -307
View File
@@ -83,137 +83,99 @@
]
}
],
"anbaugruppen": [
{
"artikel": "SPANNPRATZE ST - KH 8-11 KPL.SELBSTSICHERND",
"sivas_id": 821004120,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "SPANNPRATZE SELBSTSICHERND KPL.",
"sivas_id": 821004058,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"name": "Schraubenset",
"anzahl_vorgabe": 1,
"teile": [
{
"artikel": "Scheibe DIN 125 - A 10,5 - 140 HV - St",
"sivas_id": 913011010,
"farbig": false,
"stueckzahl": 1
},
{
"artikel": "Sechskantmutter DIN 934 - M10 - 8",
"sivas_id": 912011010,
"farbig": false,
"stueckzahl": 2
},
{
"artikel": "Sechskantschraube DIN 933 - M10 x 30 - 8.8",
"sivas_id": 911011008,
"farbig": false,
"stueckzahl": 1
}
]
},
{
"artikel": "U-BÜGEL M7 41X49 FÜR PROFILGERÜST - BG",
"sivas_id": 825004049,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "ROHRKLAMMER 1\" KPL. VERTIKAL",
"sivas_id": 825004040,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "WINKEL 60X60X6X300",
"sivas_id": 821006043,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "WINKEL 60X60X6X60",
"sivas_id": 821006042,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "ROHRKLAMMER 1\" T-VERBINDUNG KPL.",
"sivas_id": 825004030,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "ROHRKLAMMER 1\" FLACH UND LANG, KPL.",
"sivas_id": 825002021,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "DURCHSTECKANKER HST M12X115X20",
"sivas_id": 922021003,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
}
],
"konfigurationen": [
{
"name": "Abhaengung Spannpratze / Rohrklammer",
"variante": "ROHR R 1\" 33,7 x 2,6",
"laenge": 2000,
"teilefarbe": "RAL7035",
"oben": [
{
"artikel": "SPANNPRATZE SELBSTSICHERND KPL.",
"anzahl": 1
},
{
"artikel": "Schraubenset",
"anzahl": 1
}
],
"unten": [
{
"artikel": "ROHRKLAMMER 1\" KPL. VERTIKAL",
"anzahl": 2
}
]
},
{
"name": "Abhaengung Duebel / T-Verbindung",
"variante": "ROHR R 1\" 33,7 x 2,6 einseitig gequetscht",
"laenge": 1500,
"teilefarbe": "RAL7035",
"oben": [
{
"artikel": "DURCHSTECKANKER HST M12X115X20",
"anzahl": 2
}
],
"unten": [
{
"artikel": "ROHRKLAMMER 1\" T-VERBINDUNG KPL.",
"anzahl": 1
}
]
}
]
"anbaugruppen": {
"befestigung": [
{
"artikel": "SPANNPRATZE ST - KH 8-11 KPL.SELBSTSICHERND",
"sivas_id": 821004120,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "SPANNPRATZE SELBSTSICHERND KPL.",
"sivas_id": 821004058,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"name": "Schraubenset",
"anzahl_vorgabe": 1,
"teile": [
{
"artikel": "Scheibe DIN 125 - A 10,5 - 140 HV - St",
"sivas_id": 913011010,
"farbig": false,
"stueckzahl": 1
},
{
"artikel": "Sechskantmutter DIN 934 - M10 - 8",
"sivas_id": 912011010,
"farbig": false,
"stueckzahl": 2
},
{
"artikel": "Sechskantschraube DIN 933 - M10 x 30 - 8.8",
"sivas_id": 911011008,
"farbig": false,
"stueckzahl": 1
}
]
},
{
"artikel": "U-BÜGEL M7 41X49 FÜR PROFILGERÜST - BG",
"sivas_id": 825004049,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "ROHRKLAMMER 1\" KPL. VERTIKAL",
"sivas_id": 825004040,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "WINKEL 60X60X6X300",
"sivas_id": 821006043,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "WINKEL 60X60X6X60",
"sivas_id": 821006042,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "ROHRKLAMMER 1\" T-VERBINDUNG KPL.",
"sivas_id": 825004030,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "ROHRKLAMMER 1\" FLACH UND LANG, KPL.",
"sivas_id": 825002021,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "DURCHSTECKANKER HST M12X115X20",
"sivas_id": 922021003,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 1
}
],
"sonstiges": []
},
"konfigurationen": []
},
"Säulen": {
"id": "Saeulen",
@@ -273,126 +235,90 @@
]
}
],
"anbaugruppen": [
{
"artikel": "KLEMMRING MIT MUFFE EINFACH KPL.",
"sivas_id": 825002019,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING MIT MUFFE DOPPELT 90 Grad, KPL.",
"sivas_id": 825002009,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING MIT MUFFE DOPPELT 180 Grad, KPL.",
"sivas_id": 825002008,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING M. MUFFE DREIFACH 90 Grad/180 Grad KPL.",
"sivas_id": 825002007,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING MIT LASCHE KPL. ZUSAMMENBAUZEICHNUNG",
"sivas_id": 825002020,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "QUERSCHELLE F. 1\" UND 2\" ROHR GESCHW./VZ. M. 4X M10X30 KPL.",
"sivas_id": 825002022,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KREUZSCHELLE F. 2\" UND 1\" ROHR SCHWENKBAR 360 Grad",
"sivas_id": 922083009,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 1-ARMIG KPL.",
"sivas_id": 821004051,
"farbig": true,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 2-ARMIG 90 Grad KPL.",
"sivas_id": 821004054,
"farbig": true,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 2-ARMIG 180 Grad KPL.",
"sivas_id": 821004052,
"farbig": true,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 3-ARMIG KPL.",
"sivas_id": 821004053,
"farbig": true,
"stueckzahl": 1,
"anzahl_vorgabe": 1
}
],
"konfigurationen": [
{
"name": "Bodensaeule 1 Zoll, Standardhoehe",
"variante": "R 1\"",
"laenge": 1000,
"teilefarbe": "RAL7035",
"oben": [],
"unten": []
},
{
"name": "Bodensaeule 2 Zoll, Haltearm 1-armig",
"variante": "R 2\" Haltearm 1-ARMIG",
"laenge": 1200,
"teilefarbe": "RAL7035",
"oben": [
{
"artikel": "KLEMMRING MIT MUFFE EINFACH KPL.",
"anzahl": 2
}
],
"unten": []
},
{
"name": "Bodensaeule 2 Zoll, Haltearm 2-armig 90 Grad",
"variante": "R 2\" Haltearm 2-ARMIG 90 Grad",
"laenge": 1200,
"teilefarbe": "RAL7035",
"oben": [
{
"artikel": "KLEMMRING MIT MUFFE DOPPELT 90 Grad, KPL.",
"anzahl": 2
}
],
"unten": [
{
"artikel": "QUERSCHELLE F. 1\" UND 2\" ROHR GESCHW./VZ. M. 4X M10X30 KPL.",
"anzahl": 2
}
]
}
]
"anbaugruppen": {
"befestigung": [
{
"artikel": "KLEMMRING MIT MUFFE EINFACH KPL.",
"sivas_id": 825002019,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING MIT MUFFE DOPPELT 90 Grad, KPL.",
"sivas_id": 825002009,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING MIT MUFFE DOPPELT 180 Grad, KPL.",
"sivas_id": 825002008,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING M. MUFFE DREIFACH 90 Grad/180 Grad KPL.",
"sivas_id": 825002007,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING MIT LASCHE KPL. ZUSAMMENBAUZEICHNUNG",
"sivas_id": 825002020,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "QUERSCHELLE F. 1\" UND 2\" ROHR GESCHW./VZ. M. 4X M10X30 KPL.",
"sivas_id": 825002022,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KREUZSCHELLE F. 2\" UND 1\" ROHR SCHWENKBAR 360 Grad",
"sivas_id": 922083009,
"farbig": false,
"stueckzahl": 1,
"anzahl_vorgabe": 2
}
],
"sonstiges": [
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 1-ARMIG KPL.",
"sivas_id": 821004051,
"farbig": true,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 2-ARMIG 90 Grad KPL.",
"sivas_id": 821004054,
"farbig": true,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 2-ARMIG 180 Grad KPL.",
"sivas_id": 821004052,
"farbig": true,
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 3-ARMIG KPL.",
"sivas_id": 821004053,
"farbig": true,
"stueckzahl": 1,
"anzahl_vorgabe": 1
}
]
},
"konfigurationen": []
},
"Wandbefestigung": {
"id": "Wandbefestigung",
@@ -449,61 +375,41 @@
]
}
],
"anbaugruppen": [
{
"name": "Nylondübel 12x60 inkl. Holzschrauben",
"anzahl_vorgabe": 2,
"teile": [
{
"artikel": "HOLZSCHRAUB,10X70, 6KT DIN 571 VZ",
"sivas_id": 911271027,
"farbig": false,
"stueckzahl": 1
},
{
"artikel": "NYLON - DUEBEL 12X60 (TYP S)",
"sivas_id": 922013003,
"farbig": false,
"stueckzahl": 1
}
]
},
{
"name": "HST M12X115X20",
"anzahl_vorgabe": 2,
"teile": [
{
"artikel": "DURCHSTECKANKER HST M12X115X20 WANDABH.",
"sivas_id": 922021003,
"farbig": false,
"stueckzahl": 1
}
]
}
],
"konfigurationen": [
{
"name": "Wandflansch mit Duebeln",
"variante": "WANDFLANSCH EINZELTEIL",
"oben": [
{
"artikel": "Nylondübel 12x60 inkl. Holzschrauben",
"anzahl": 2
}
],
"unten": []
},
{
"name": "Winkel 300 mit Schwerlastanker",
"variante": "WINKEL 60X60X6X300",
"oben": [
{
"artikel": "HST M12X115X20",
"anzahl": 2
}
],
"unten": []
}
]
"anbaugruppen": {
"befestigung": [
{
"name": "Nylondübel 12x60 inkl. Holzschrauben",
"anzahl_vorgabe": 2,
"teile": [
{
"artikel": "HOLZSCHRAUB,10X70, 6KT DIN 571 VZ",
"sivas_id": 911271027,
"farbig": false,
"stueckzahl": 1
},
{
"artikel": "NYLON - DUEBEL 12X60 (TYP S)",
"sivas_id": 922013003,
"farbig": false,
"stueckzahl": 1
}
]
},
{
"name": "HST M12X115X20",
"anzahl_vorgabe": 2,
"teile": [
{
"artikel": "DURCHSTECKANKER HST M12X115X20 WANDABH.",
"sivas_id": 922021003,
"farbig": false,
"stueckzahl": 1
}
]
}
],
"sonstiges": []
},
"konfigurationen": []
}
}
+6
View File
@@ -89,6 +89,7 @@
"text": "DRT 80",
"layer": "D-1-BEM"
},
"mit_querstrebe": true,
"teileart": "Geruest Traeger",
"layer": "D-1",
"teile": [
@@ -107,6 +108,7 @@
"layer": "D-1-BEM"
},
"mit_muffe": true,
"mit_querstrebe": true,
"teileart": "Geruest Traeger",
"layer": "D-1",
"teile": [
@@ -124,6 +126,7 @@
"text": "DRT 114",
"layer": "D-3-BEM"
},
"mit_querstrebe": true,
"teileart": "Geruest Traeger",
"layer": "D-3",
"teile": [
@@ -142,6 +145,7 @@
"layer": "D-3-BEM"
},
"mit_muffe": true,
"mit_querstrebe": true,
"teileart": "Geruest Traeger",
"layer": "D-3",
"teile": [
@@ -159,6 +163,7 @@
"text": "RT 80/80",
"layer": "D-5-BEM"
},
"mit_querstrebe": true,
"teileart": "Geruest Traeger",
"layer": "D-5",
"teile": [
@@ -177,6 +182,7 @@
"layer": "D-5-BEM"
},
"mit_muffe": true,
"mit_querstrebe": true,
"teileart": "Geruest Traeger",
"layer": "D-5",
"teile": [
+157
View File
@@ -0,0 +1,157 @@
{
"Fahrstrecke": {
"id": "Fahrstrecke",
"titel": "Fahrstrecke",
"teileart": "Omniflo Fahrstrecke",
"muffe": {
"dummy": "dummy_Muffe_1zoll.dwg"
},
"beschriftung": {
"format": "%1 L=%2",
"stil": "Lan",
"ausrichtung": "BL",
"hoehe": 100
},
"attribute": {
"LAENGE": {
"typ": "number",
"min": 0,
"max": 6000,
"einheit": "mm"
},
"TEILEFARBE": {
"typ": "auswahl",
"optionen": [
"RAL7035",
"RAL7030"
],
"frei_erlaubt": true,
"frei_option": "Individuell"
}
},
"geometrie_varianten": [
{
"name": "AP 110",
"beschriftung": {
"text": "AP 110",
"layer": "A-7-BEM"
},
"teileart": "Omniflo Fahrstrecke",
"layer": "A-7",
"teile": [
{
"artikel": "AP 110",
"sivas_id": 821106001,
"stueckzahl": 1
}
]
},
{
"name": "APG 110",
"beschriftung": {
"text": "APG 110",
"layer": "A-2-BEM"
},
"teileart": "Omniflo Fahrstrecke",
"layer": "A-2",
"teile": [
{
"artikel": "APG 110",
"sivas_id": 821106002,
"stueckzahl": 1
}
]
},
{
"name": "AP 60",
"beschriftung": {
"text": "AP 60",
"layer": "A-4-BEM"
},
"teileart": "Omniflo Fahrstrecke",
"layer": "A-4",
"teile": [
{
"artikel": "AP 60",
"sivas_id": 821096001,
"stueckzahl": 1
}
]
},
{
"name": "ST",
"beschriftung": {
"text": "ST",
"layer": "L-2-BEM"
},
"mit_muffe": false,
"teileart": "Omniflo Fahrstrecke",
"layer": "L-2",
"teile": [
{
"artikel": "ST",
"sivas_id": 821084000,
"farbig": true,
"stueckzahl": 1
}
]
},
{
"name": "ST mit Muffen",
"disabled": true,
"beschriftung": {
"text": "ST",
"layer": "L-2-BEM"
},
"mit_muffe": true,
"teileart": "Omniflo Fahrstrecke",
"layer": "L-2",
"teile": [
{
"artikel": "ST mit Muffen",
"sivas_id": 821084007,
"farbig": true,
"stueckzahl": 1
}
]
},
{
"name": "STL",
"beschriftung": {
"text": "STL",
"layer": "L-2-BEM"
},
"mit_muffe": false,
"teileart": "Omniflo Fahrstrecke",
"layer": "L-2",
"teile": [
{
"artikel": "STL",
"sivas_id": 821084050,
"farbig": true,
"stueckzahl": 1
}
]
},
{
"name": "STL mit Muffen",
"disabled": true,
"beschriftung": {
"text": "STL",
"layer": "L-2-BEM"
},
"mit_muffe": true,
"teileart": "Omniflo Fahrstrecke",
"layer": "L-2",
"teile": [
{
"artikel": "STL mit Muffen",
"sivas_id": 821084057,
"farbig": true,
"stueckzahl": 1
}
]
}
]
}
}
+10
View File
@@ -0,0 +1,10 @@
[
{
"Sivasnr": 824331125,
"Beschreibung": "Ladeschleife - 6300, stufenlos ausziehbar, kpl.",
"Laenge": 6300,
"ProfilTyp": "AP 110",
"Stuetzfuß": 0,
"Antriebsart": 0
}
]
+247 -247
View File
@@ -1,76 +1,4 @@
[
{
"Sivasnr": 834372001,
"ProfilTyp": "WEICHE S 45-L-350/700, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 1,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372002,
"ProfilTyp": "WEICHE S 45-L-350/700, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 1,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": "834372002+0_BG090090",
"ProfilTyp": "WEICHE S 45-L-350/700, KPL. MIT P mit TEF Innen",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 1,
"SivasnrTEF": "0_B10090+0_B10090",
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372004,
"ProfilTyp": "WEICHE S 45-R-350/700, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 2,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372005,
"ProfilTyp": "WEICHE S 45-R-350/700, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 2,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": "834372005+0_BG090090",
"ProfilTyp": "WEICHE S 45-R-350/700, KPL. MIT P mit TEF Innen",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 2,
"SivasnrTEF": "0_B10090+0_B10090",
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372007,
"ProfilTyp": "WEICHE S 45-L-400/750, KPL. MIT M",
@@ -144,53 +72,77 @@
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372021,
"ProfilTyp": "WEICHE S 90-L-500/600, KPL. MIT M",
"Sivasnr": 834372001,
"ProfilTyp": "WEICHE S 45-L-350/700, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"KurvenWinkel": 45,
"Schaltungstyp": "M",
"Breite": 500,
"Länge": 600,
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 1,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372022,
"ProfilTyp": "WEICHE S 90-L-500/600, KPL. MIT P",
"Sivasnr": 834372002,
"ProfilTyp": "WEICHE S 45-L-350/700, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 500,
"Länge": 600,
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 1,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372024,
"ProfilTyp": "WEICHE S 90-R-500/600, KPL. MIT M",
"Sivasnr": "834372002+0_BG090090",
"ProfilTyp": "WEICHE S 45-L-350/700, KPL. MIT P mit TEF Innen",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 1,
"SivasnrTEF": "0_B10090+0_B10090",
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372004,
"ProfilTyp": "WEICHE S 45-R-350/700, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
"Breite": 500,
"Länge": 600,
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 2,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372025,
"ProfilTyp": "WEICHE S 90-R-500/600, KPL. MIT P",
"Sivasnr": 834372005,
"ProfilTyp": "WEICHE S 45-R-350/700, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 500,
"Länge": 600,
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 2,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": "834372005+0_BG090090",
"ProfilTyp": "WEICHE S 45-R-350/700, KPL. MIT P mit TEF Innen",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 2,
"SivasnrTEF": "0_B10090+0_B10090",
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372027,
"ProfilTyp": "WEICHE S 90-L-700/700, KPL. MIT M",
@@ -263,6 +215,54 @@
"SivasnrTEF": "0_B10080+0_B10090",
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372021,
"ProfilTyp": "WEICHE S 90-L-500/600, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
"Breite": 500,
"Länge": 600,
"KurvenRichtung": 1,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372022,
"ProfilTyp": "WEICHE S 90-L-500/600, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
"Breite": 500,
"Länge": 600,
"KurvenRichtung": 1,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372024,
"ProfilTyp": "WEICHE S 90-R-500/600, KPL. MIT M",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
"Breite": 500,
"Länge": 600,
"KurvenRichtung": 2,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372025,
"ProfilTyp": "WEICHE S 90-R-500/600, KPL. MIT P",
"WeichenTyp": "Einzelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
"Breite": 500,
"Länge": 600,
"KurvenRichtung": 2,
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372047,
"ProfilTyp": "WEICHE S PARALLEL-L-200/750, KPL. MIT M",
@@ -311,61 +311,6 @@
"SivasnrTEF": null,
"WeichenkörperLänge": 360
},
{
"Sivasnr": 834372100,
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT M",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": null
},
{
"Sivasnr": 834372101,
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": null
},
{
"Sivasnr": "0_BG090090+834372101",
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P mit TEF links",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": "0_B10090+0_B10090"
},
{
"Sivasnr": "834372101+0_BG090090",
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P mit TEF rechts",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": "0_B10090+0_B10090"
},
{
"Sivasnr": "0_BG090090+834372101+0_BG090090",
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P mit TEF beideseitig",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": "0_B10090+0_B10090+0_B10090+0_B10090"
},
{
"Sivasnr": 834372103,
"ProfilTyp": "WEICHE S D 45-400/750, KPL. MIT M",
@@ -422,27 +367,60 @@
"SivasnrTEF": "0_B10090+0_B10090+0_B10090+0_B10090"
},
{
"Sivasnr": 834372106,
"ProfilTyp": "WEICHE S D 90-500/600, KPL. MIT M",
"Sivasnr": 834372100,
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT M",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 90,
"KurvenWinkel": 45,
"Schaltungstyp": "M",
"Breite": 500,
"Länge": 600,
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": null
},
{
"Sivasnr": 834372107,
"ProfilTyp": "WEICHE S D 90-500/600, KPL. MIT P",
"Sivasnr": 834372101,
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 90,
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 500,
"Länge": 600,
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": null
},
{
"Sivasnr": "0_BG090090+834372101",
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P mit TEF links",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": "0_B10090+0_B10090"
},
{
"Sivasnr": "834372101+0_BG090090",
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P mit TEF rechts",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": "0_B10090+0_B10090"
},
{
"Sivasnr": "0_BG090090+834372101+0_BG090090",
"ProfilTyp": "WEICHE S D 45-350/700, KPL. MIT P mit TEF beideseitig",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": "0_B10090+0_B10090+0_B10090+0_B10090"
},
{
"Sivasnr": 834372109,
"ProfilTyp": "WEICHE S D 90-700/700, KPL. MIT M",
@@ -498,6 +476,28 @@
"KurvenRichtung": 3,
"SivasnrTEF": "0_B10080+0_B10090+0_B10080+0_B10090"
},
{
"Sivasnr": 834372106,
"ProfilTyp": "WEICHE S D 90-500/600, KPL. MIT M",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
"Breite": 500,
"Länge": 600,
"KurvenRichtung": 3,
"SivasnrTEF": null
},
{
"Sivasnr": 834372107,
"ProfilTyp": "WEICHE S D 90-500/600, KPL. MIT P",
"WeichenTyp": "Doppelweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
"Breite": 500,
"Länge": 600,
"KurvenRichtung": 3,
"SivasnrTEF": null
},
{
"Sivasnr": 834372115,
"ProfilTyp": "WEICHE S D PARALLEL-200/750, KPL. MIT M",
@@ -520,61 +520,6 @@
"KurvenRichtung": 3,
"SivasnrTEF": null
},
{
"Sivasnr": 834372200,
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT M",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "M",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": null
},
{
"Sivasnr": 834372201,
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": null
},
{
"Sivasnr": "0_BG090090+834372201",
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P mit TEF links",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": "0_B10090+0_B10090"
},
{
"Sivasnr": "834372201+0_BG090090",
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P mit TEF rechts",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": "0_B10090+0_B10090"
},
{
"Sivasnr": "0_BG090090+834372201+0_BG090090",
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P mit TEF beideseitig",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": "0_B10090+0_B10090+0_B10090+0_B10090"
},
{
"Sivasnr": 834372203,
"ProfilTyp": "WEICHE S T 45-400/750, KPL. MIT M",
@@ -631,27 +576,60 @@
"SivasnrTEF": "0_B10090+0_B10090+0_B10090+0_B10090"
},
{
"Sivasnr": 834372206,
"ProfilTyp": "WEICHE S T 90-500/600, KPL. MIT M",
"Sivasnr": 834372200,
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT M",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 90,
"KurvenWinkel": 45,
"Schaltungstyp": "M",
"Breite": 500,
"Länge": 600,
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": null
},
{
"Sivasnr": 834372207,
"ProfilTyp": "WEICHE S T 90-500/600, KPL. MIT P",
"Sivasnr": 834372201,
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 90,
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 500,
"Länge": 600,
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": null
},
{
"Sivasnr": "0_BG090090+834372201",
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P mit TEF links",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": "0_B10090+0_B10090"
},
{
"Sivasnr": "834372201+0_BG090090",
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P mit TEF rechts",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": "0_B10090+0_B10090"
},
{
"Sivasnr": "0_BG090090+834372201+0_BG090090",
"ProfilTyp": "WEICHE S T 45-350/700, KPL. MIT P mit TEF beideseitig",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 45,
"Schaltungstyp": "P",
"Breite": 350,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": "0_B10090+0_B10090+0_B10090+0_B10090"
},
{
"Sivasnr": 834372209,
"ProfilTyp": "WEICHE S T 90-700/700, KPL. MIT M",
@@ -707,6 +685,28 @@
"KurvenRichtung": 7,
"SivasnrTEF": "0_B10080+0_B10090+0_B10080+0_B10090"
},
{
"Sivasnr": 834372206,
"ProfilTyp": "WEICHE S T 90-500/600, KPL. MIT M",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
"Breite": 500,
"Länge": 600,
"KurvenRichtung": 7,
"SivasnrTEF": null
},
{
"Sivasnr": 834372207,
"ProfilTyp": "WEICHE S T 90-500/600, KPL. MIT P",
"WeichenTyp": "Dreiwegeweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
"Breite": 500,
"Länge": 600,
"KurvenRichtung": 7,
"SivasnrTEF": null
},
{
"Sivasnr": 834372215,
"ProfilTyp": "WEICHE S T PARALLEL-200/750, KPL. MIT M",
@@ -729,30 +729,6 @@
"KurvenRichtung": 7,
"SivasnrTEF": null
},
{
"Sivasnr": 834372400,
"ProfilTyp": "WEICHE S C DELTA 1400/700, KPL. M",
"WeichenTyp": "Deltaweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
"Breite": 1400,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": null,
"WeichenkörperLänge": 1400.4619
},
{
"Sivasnr": 834372401,
"ProfilTyp": "WEICHE S C DELTA 1400/700, KPL. P",
"WeichenTyp": "Deltaweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
"Breite": 1400,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": null,
"WeichenkörperLänge": 1400.4619
},
{
"Sivasnr": 834372403,
"ProfilTyp": "WEICHE S C DELTA 1600/800, KPL. M",
@@ -812,6 +788,30 @@
"KurvenRichtung": 3,
"SivasnrTEF": "0_B10090+0_B10090+0_B10071",
"WeichenkörperLänge": 1600.3844
},
{
"Sivasnr": 834372400,
"ProfilTyp": "WEICHE S C DELTA 1400/700, KPL. M",
"WeichenTyp": "Deltaweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "M",
"Breite": 1400,
"Länge": 700,
"KurvenRichtung": 3,
"SivasnrTEF": null,
"WeichenkörperLänge": 1400.4619
},
{
"Sivasnr": 834372401,
"ProfilTyp": "WEICHE S C DELTA 1400/700, KPL. P",
"WeichenTyp": "Deltaweiche",
"KurvenWinkel": 90,
"Schaltungstyp": "P",
"Breite": 1400,
"Länge": 700,
"KurvenRichtung": 7,
"SivasnrTEF": null,
"WeichenkörperLänge": 1400.4619
},
{
"Sivasnr": 834372420,
@@ -927,4 +927,4 @@
"KurvenRichtung": 7,
"SivasnrTEF": null
}
]
]
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+56
View File
@@ -0,0 +1,56 @@
// ============================================================
// fahrstrecke.dcl - Omniflo-Fahrstrecke konfigurieren (VORLAGE)
// Verwendet von: OMNI_FAHRSTRECKE (GeruestInsert.lsp, geruest-traeger-dialog)
// Daten: data/json/omniflo_fahrstrecke.json
//
// Gleicher Aufbau wie geruest_traeger.dcl - dieselben Tile-Keys, denn beide
// Dialoge laufen ueber dieselben Funktionen (geruest-traeger-dialog).
//
// Diese Datei wird NICHT direkt geladen: //@VARIANTEN@ ist ein Platzhalter,
// den GeruestInsert.lsp zur Laufzeit durch einen radio_button je
// Variante (key v<i>, i = Index in geometrie_varianten) ersetzt
// (ssg-dcl-vorlage-fuellen, ssg_core.lsp). Das Ergebnis wird als Temp-Datei
// geladen.
//
// Jede Variante (auch die mit Muffe) hat einen eigenen Radiobutton, damit
// ihre Artikelnummer sichtbar ist.
//
// Die Laenge steht bewusst NICHT im Dialog - sie wird nach dem Dialog in der
// Zeichnung per Start-/Endpunkt (oder getippter Laenge) bestimmt.
// ============================================================
fahrstrecke : dialog {
label = "Fahrstrecke konfigurieren";
: boxed_column {
label = "Basis";
: radio_column {
key = "variante";
label = "Variante:";
alignment = left;
//@VARIANTEN@
}
: row {
: popup_list { key = "farbe"; label = "Farbe:"; width = 25; }
: edit_box { key = "farbe_frei"; label = "eigene:"; edit_width = 12; }
}
}
: boxed_column {
label = "Längenabzug";
: row {
: toggle { key = "abzug_a"; label = "Längenabzug Anfang"; width = 24; fixed_width = true; }
: edit_box { key = "abzug_a_w"; label = "mm:"; edit_width = 8; fixed_width = true; }
}
: row {
: toggle { key = "abzug_e"; label = "Längenabzug Ende"; width = 24; fixed_width = true; }
: edit_box { key = "abzug_e_w"; label = "mm:"; edit_width = 8; fixed_width = true; }
}
}
: toggle { key = "beschriftung"; label = "Beschriftung einfügen"; }
: text { key = "hinweis"; label = ""; width = 56; }
ok_cancel;
}
+55
View File
@@ -0,0 +1,55 @@
// ============================================================
// geruest.dcl - Geruest-Baugruppe konfigurieren (VORLAGE)
// Verwendet von: GERUEST_SAEULEN, GERUEST_ROHRABHAENGER,
// GERUEST_WANDBEFESTIGUNG (GeruestInsert.lsp, geruest-dialog)
//
// Diese Datei wird NICHT direkt geladen: Zeilen der Form //@NAME@ sind
// Platzhalter, die GeruestInsert.lsp zur Laufzeit durch datenabhaengige
// Bloecke ersetzt (ssg-dcl-vorlage-fuellen, ssg_core.lsp) - DCL kann Tiles
// weder zur Laufzeit erzeugen noch ausblenden, und Radiobutton-Labels lassen
// sich per set_tile nicht aendern. Das Ergebnis wird als Temp-Datei geladen.
//
// //@TITEL@ label-Zeile des Dialogs (Bereichsname)
// //@VARIANTEN@ ein radio_button je Geometrie-Variante (key v<i>)
// //@BEFESTIGUNG@ Spalte "Befestigung oben und unten" (Tile-Keys b<i>/bm<i>,
// entfaellt ohne Teile - ein leerer Cluster ist in DCL
// unzulaessig)
// //@SONSTIGES@ Spalte "Sonstiges" (s<i>/sm<i>, entfaellt ohne Teile)
// Je Teil: Mengenfeld, Ankreuzfeld und darunter "Art.-Nr. ..." (sivas_id).
// ============================================================
geruest : dialog {
//@TITEL@
: row {
: popup_list { key = "konfig"; label = "Konfiguration:"; width = 40; }
: button { key = "kspeichern"; label = "Speichern..."; fixed_width = true; }
: button { key = "kloeschen"; label = "Löschen"; fixed_width = true; }
}
// Zeigt an, ob der Stand noch der gewaehlten Konfiguration entspricht
// (geruest-dlg-aenderung-pruefen).
: text { key = "kstatus"; label = ""; width = 64; }
: boxed_column {
label = "Basis";
// Radiobuttons statt Liste: alle Varianten sichtbar, Einfachauswahl,
// Beschriftung in voller Breite.
: radio_column {
key = "variante";
label = "Variante:";
alignment = left;
//@VARIANTEN@
}
: row {
: edit_box { key = "laenge"; label = "Laenge (mm):"; edit_width = 10; }
: popup_list { key = "farbe"; label = "Farbe:"; width = 25; }
: edit_box { key = "farbe_frei"; label = "eigene:"; edit_width = 12; }
}
// Ausrichtung, in der die Anbauteile mit der Basis zusammengebaut werden
: popup_list { key = "winkel"; label = "Winkel Platte:"; width = 22; fixed_width = true; }
}
//@BEFESTIGUNG@
//@SONSTIGES@
ok_cancel;
}
+21 -7
View File
@@ -1,18 +1,32 @@
// ============================================================
// geruest_traeger.dcl - Rohr-Geruest-Traeger konfigurieren
// geruest_traeger.dcl - Rohr-Geruest-Traeger konfigurieren (VORLAGE)
// Verwendet von: GERUEST_TRAEGER (GeruestInsert.lsp, geruest-traeger-dialog)
//
// Diese Datei wird NICHT direkt geladen: //@VARIANTEN@ ist ein Platzhalter,
// den GeruestInsert.lsp zur Laufzeit durch einen radio_button je
// Variante (key v<i>, i = Index in geometrie_varianten) ersetzt
// (ssg-dcl-vorlage-fuellen, ssg_core.lsp) - Radiobutton-Labels lassen sich
// per set_tile nicht aendern. Das Ergebnis wird als Temp-Datei geladen.
//
// Jede Variante (auch die mit Muffe) hat einen eigenen Radiobutton, damit
// ihre Artikelnummer sichtbar ist.
//
// Die Laenge steht bewusst NICHT im Dialog - sie wird nach dem Dialog in der
// Zeichnung per Start-/Endpunkt (oder getippter Laenge) bestimmt. Aktive
// Laengenabzuege ruecken die Linie am Anfang bzw. Ende ein.
// ============================================================
geruest_traeger : dialog {
label = "Rohr-Geruest-Traeger konfigurieren";
label = "Rohr-Gerüst-Träger konfigurieren";
: boxed_column {
label = "Basis";
: popup_list { key = "variante"; label = "Variante:"; width = 56; }
: radio_column {
key = "variante";
label = "Variante:";
alignment = left;
//@VARIANTEN@
}
: row {
: popup_list { key = "farbe"; label = "Farbe:"; width = 25; }
: edit_box { key = "farbe_frei"; label = "eigene:"; edit_width = 12; }
@@ -20,18 +34,18 @@ geruest_traeger : dialog {
}
: boxed_column {
label = "Laengenabzug";
label = "Längenabzug";
: row {
: toggle { key = "abzug_a"; label = "Laengenabzug Anfang"; width = 24; fixed_width = true; }
: toggle { key = "abzug_a"; label = "Längenabzug Anfang"; width = 24; fixed_width = true; }
: edit_box { key = "abzug_a_w"; label = "mm:"; edit_width = 8; fixed_width = true; }
}
: row {
: toggle { key = "abzug_e"; label = "Laengenabzug Ende"; width = 24; fixed_width = true; }
: toggle { key = "abzug_e"; label = "Längenabzug Ende"; width = 24; fixed_width = true; }
: edit_box { key = "abzug_e_w"; label = "mm:"; edit_width = 8; fixed_width = true; }
}
}
: toggle { key = "beschriftung"; label = "Beschriftung einfuegen"; }
: toggle { key = "beschriftung"; label = "Beschriftung einfügen"; }
: text { key = "hinweis"; label = ""; width = 56; }
+17 -9
View File
@@ -973,6 +973,7 @@
"gr-fehler-json-lesbar": "\nGeruest: Datendatei nicht lesbar: %1",
"gr-fehler-baugruppe": "\nGeruest: Baugruppe '%1' steht nicht in der Datendatei.",
"gr-fehler-keine-varianten": "\nGeruest: Baugruppe '%1' hat keine Geometrie-Varianten.",
"gr-bereich-waehlen": "\nGeruest: bitte einen Bereich ueber das Menue waehlen (GERUEST_SAEULEN, GERUEST_ROHRABHAENGER, GERUEST_WANDBEFESTIGUNG).",
"gr-fehler-dummy": "\nGeruest: Dummy-Baugruppe nicht gefunden: %1",
"gr-fehler-dummy-variante": "\nGeruest: Dummy der Variante nicht gefunden: %1 - verwende Dummy der Baugruppe (%2)",
"gr-fehler-dcl": "Dialog geruest.dcl konnte nicht geladen werden.",
@@ -982,10 +983,15 @@
"gr-abgebrochen": "\nAbgebrochen.",
"gr-fertig": "\nGeruest-Baugruppe '%1' eingefuegt (Block %2).",
"gr-alert-menge": "Ungueltige Anzahl. Erlaubt ist eine ganze Zahl ab 1; ein leeres Feld uebernimmt den Vorgabewert.",
"gr-position-oben": "oben",
"gr-position-unten": "unten",
"gr-position-befestigung": "Befestigung",
"gr-position-sonstiges": "sonstiges",
"gr-konfig-keine": "<keine>",
"gr-konfig-name": "\nName der Konfiguration: ",
"gr-konfig-name-vorgabe": "\nName der Konfiguration <%1>: ",
"gr-konfig-geaendert": "%1 (geaendert)",
"gr-konfig-status-geaendert": "Geaendert gegenueber '%1' - Speichern (Enter beim Namen) ueberschreibt sie.",
"gr-konfig-status-bibliothek": "Geaendert gegenueber '%1' (Bibliothek, schreibgeschuetzt) - zum Speichern einen neuen Namen vergeben.",
"gr-winkel-grad": "%1%2",
"gr-konfig-gespeichert": "\nKonfiguration '%1' gespeichert.",
"gr-konfig-geloescht": "\nKonfiguration '%1' geloescht.",
"gr-konfig-loeschen-frage": "\nKonfiguration '%1' wirklich loeschen? [Ja/Nein] <Nein>: ",
@@ -993,25 +999,26 @@
"gr-konfig-bibliothek-fest": "\nKonfigurationen der Bibliothek koennen nicht geloescht werden - nur eigene (mit * markiert).",
"gr-konfig-teil-unbekannt": "\nGeruest: Anbauteil '%1' aus Konfiguration '%2' ist bei dieser Baugruppe unbekannt - uebersprungen.",
"gr-konfig-variante-unbekannt": "\nGeruest: Variante '%1' aus Konfiguration '%2' ist bei dieser Baugruppe unbekannt - Auswahl unveraendert.",
"gr-konfig-variante-gesperrt": "\nKonfiguration '%2': Variante '%1' ist gesperrt - Auswahl bleibt unveraendert.",
"gr-fehler-schreiben": "\nGeruest: Datei konnte nicht geschrieben werden: %1",
"gr-fehler-keine-baugruppen": "\nGeruest: Die Datendatei enthaelt keine Baugruppen.",
"gr-tr-fehler-dcl": "Dialog %1 konnte nicht geladen werden.",
"gr-tr-hinweis": "Die Laenge wird nach OK in der Zeichnung bestimmt.",
"gr-tr-alert-abzug": "Laengenabzug ungueltig. Erlaubt ist eine Zahl ab 0 (mm); ein leeres Feld gilt als 0.",
"gr-tr-prompt-start": "\nStartpunkt des Traegers waehlen <Ende>: ",
"gr-tr-prompt-start": "\nStartpunkt (%1) waehlen <Ende>: ",
"gr-tr-prompt-ende": "\nEndpunkt waehlen oder Laenge (mm) eingeben: ",
"gr-tr-prompt-richtung": "\nRichtung angeben <0>: ",
"gr-tr-eingabe-ungueltig": "\nEingabe '%1' ist weder Punkt noch Laenge.",
"gr-tr-laenge-null": "\nStrecke %1 mm ist nicht laenger als die Abzuege (%2 mm) - kein Traeger eingefuegt.",
"gr-tr-laenge-bereich": "\nTraegerlaenge %1 mm ausserhalb des erlaubten Bereichs %2 bis %3 mm - kein Traeger eingefuegt.",
"gr-tr-fertig": "\nTraeger %1 mm eingefuegt (Block %2).",
"gr-tr-ende": "\n%1 Traeger eingefuegt.",
"gr-tr-laenge-null": "\nStrecke %1 mm ist nicht laenger als die Abzuege (%2 mm) - nichts eingefuegt (%3).",
"gr-tr-laenge-bereich": "\n%4: Laenge %1 mm ausserhalb des erlaubten Bereichs %2 bis %3 mm - nichts eingefuegt.",
"gr-tr-fertig": "\n%3 %1 mm eingefuegt (Block %2).",
"gr-tr-ende": "\n%1x %2 eingefuegt.",
"gr-tr-bez-abzug-anfang": "Abzug Anfang %1 mm",
"gr-tr-bez-abzug-ende": "Abzug Ende %1 mm",
"gr-tr-beschr-stil-fehlt": "\nTextstil %1 fehlt in der Zeichnung - Beschriftung mit aktuellem Stil %2.",
"gr-tr-beschr-ausrichtung": "\nUnbekannte Ausrichtung %1 fuer die Traeger-Beschriftung - verwende BC.",
"gr-tr-beschr-ergebnis": "\n%1 Traeger beschriftet (davon %2 ohne bekannte Variante), %3 nicht beschriftbar, %4 verwaiste Beschriftungen entfernt.",
"gr-tr-beschr-keine": "\nKeine Rohr-Geruest-Traeger in der Zeichnung.",
"gr-tr-beschr-ergebnis": "\n%5: %1 beschriftet (davon %2 ohne bekannte Variante), %3 nicht beschriftbar, %4 verwaiste Beschriftungen entfernt.",
"gr-tr-beschr-keine": "\nKeine Bloecke vom Typ %1 in der Zeichnung.",
"gr-tr-strebe-rand": "Traeger %1 mm: Der Randabstand der Querstreben betraegt %2 mm und liegt ausserhalb des erlaubten Bereichs %3 bis %4 mm (Strebenabstand %5 mm, %6 Streben). Der Traeger wird trotzdem eingefuegt.",
"in-yesno-keys": "Ja Nein",
"in-keys-bereich": "Alle Auswahl",
@@ -1092,6 +1099,7 @@
"sl-erk-kreisel": "ILS Kreisel/Eckrad",
"sl-erk-strecke": "ILS Streckengruppe (VarioFoerderer/Gefaellestrecke)",
"sl-erk-geruest": "Rohrgeruest",
"sl-erk-fahrstrecke": "Omniflo Fahrstrecke",
"sl-erk-ap60": "Omniflo Gerade AP60",
"sl-erk-ap110": "Omniflo Gerade AP110",
"sl-erk-apg110": "Omniflo Gerade APG110"
+17 -9
View File
@@ -973,6 +973,7 @@
"gr-fehler-json-lesbar": "\nScaffold: data file not readable: %1",
"gr-fehler-baugruppe": "\nScaffold: assembly '%1' is not in the data file.",
"gr-fehler-keine-varianten": "\nScaffold: assembly '%1' has no geometry variants.",
"gr-bereich-waehlen": "\nScaffold: please choose an area from the menu (GERUEST_SAEULEN, GERUEST_ROHRABHAENGER, GERUEST_WANDBEFESTIGUNG).",
"gr-fehler-dummy": "\nScaffold: dummy assembly not found: %1",
"gr-fehler-dummy-variante": "\nScaffold: dummy of the variant not found: %1 - using dummy of the assembly (%2)",
"gr-fehler-dcl": "Dialog geruest.dcl could not be loaded.",
@@ -982,10 +983,15 @@
"gr-abgebrochen": "\nCancelled.",
"gr-fertig": "\nScaffold assembly '%1' inserted (block %2).",
"gr-alert-menge": "Invalid quantity. Enter a whole number of 1 or more; an empty field uses the default.",
"gr-position-oben": "top",
"gr-position-unten": "bottom",
"gr-position-befestigung": "mounting",
"gr-position-sonstiges": "other",
"gr-konfig-keine": "<none>",
"gr-konfig-name": "\nConfiguration name: ",
"gr-konfig-name-vorgabe": "\nConfiguration name <%1>: ",
"gr-konfig-geaendert": "%1 (modified)",
"gr-konfig-status-geaendert": "Modified compared to '%1' - Save (Enter at the name prompt) overwrites it.",
"gr-konfig-status-bibliothek": "Modified compared to '%1' (library, read-only) - enter a new name to save.",
"gr-winkel-grad": "%1%2",
"gr-konfig-gespeichert": "\nConfiguration '%1' saved.",
"gr-konfig-geloescht": "\nConfiguration '%1' deleted.",
"gr-konfig-loeschen-frage": "\nReally delete configuration '%1'? [Ja/Nein] <Nein>: ",
@@ -993,25 +999,26 @@
"gr-konfig-bibliothek-fest": "\nLibrary configurations cannot be deleted - only your own (marked with *).",
"gr-konfig-teil-unbekannt": "\nScaffold: add-on part '%1' from configuration '%2' is unknown for this assembly - skipped.",
"gr-konfig-variante-unbekannt": "\nScaffold: variant '%1' from configuration '%2' is unknown for this assembly - selection unchanged.",
"gr-konfig-variante-gesperrt": "\nConfiguration '%2': variant '%1' is disabled - selection left unchanged.",
"gr-fehler-schreiben": "\nScaffold: could not write file: %1",
"gr-fehler-keine-baugruppen": "\nScaffold: the data file contains no assemblies.",
"gr-tr-fehler-dcl": "Dialog %1 could not be loaded.",
"gr-tr-hinweis": "The length is defined in the drawing after OK.",
"gr-tr-alert-abzug": "Invalid length deduction. Allowed is a number from 0 (mm); an empty field counts as 0.",
"gr-tr-prompt-start": "\nSelect start point of the beam <exit>: ",
"gr-tr-prompt-start": "\nSelect start point (%1) <exit>: ",
"gr-tr-prompt-ende": "\nSelect end point or enter length (mm): ",
"gr-tr-prompt-richtung": "\nSpecify direction <0>: ",
"gr-tr-eingabe-ungueltig": "\nInput '%1' is neither a point nor a length.",
"gr-tr-laenge-null": "\nDistance %1 mm is not longer than the deductions (%2 mm) - no beam inserted.",
"gr-tr-laenge-bereich": "\nBeam length %1 mm outside the allowed range %2 to %3 mm - no beam inserted.",
"gr-tr-fertig": "\nBeam %1 mm inserted (block %2).",
"gr-tr-ende": "\n%1 beam(s) inserted.",
"gr-tr-laenge-null": "\nDistance %1 mm is not longer than the deductions (%2 mm) - nothing inserted (%3).",
"gr-tr-laenge-bereich": "\n%4: length %1 mm outside the allowed range %2 to %3 mm - nothing inserted.",
"gr-tr-fertig": "\n%3 %1 mm inserted (block %2).",
"gr-tr-ende": "\n%1x %2 inserted.",
"gr-tr-bez-abzug-anfang": "Deduction start %1 mm",
"gr-tr-bez-abzug-ende": "Deduction end %1 mm",
"gr-tr-beschr-stil-fehlt": "\nText style %1 missing in drawing - labelling with current style %2.",
"gr-tr-beschr-ausrichtung": "\nUnknown justification %1 for beam label - using BC.",
"gr-tr-beschr-ergebnis": "\n%1 beam(s) labelled (%2 without known variant), %3 not labellable, %4 orphaned label(s) removed.",
"gr-tr-beschr-keine": "\nNo pipe scaffold beams in the drawing.",
"gr-tr-beschr-ergebnis": "\n%5: %1 labelled (%2 without known variant), %3 not labellable, %4 orphaned label(s) removed.",
"gr-tr-beschr-keine": "\nNo blocks of type %1 in the drawing.",
"gr-tr-strebe-rand": "Beam %1 mm: the edge distance of the cross braces is %2 mm, outside the allowed range %3 to %4 mm (brace spacing %5 mm, %6 braces). The beam is inserted anyway.",
"in-yesno-keys": "Yes No",
"in-keys-bereich": "All Selection",
@@ -1092,6 +1099,7 @@
"sl-erk-kreisel": "ILS roundabout/corner wheel",
"sl-erk-strecke": "ILS conveyor section (VarioFoerderer/gravity conveyor)",
"sl-erk-geruest": "Pipe scaffold",
"sl-erk-fahrstrecke": "Omniflo track",
"sl-erk-ap60": "Omniflo straight AP60",
"sl-erk-ap110": "Omniflo straight AP110",
"sl-erk-apg110": "Omniflo straight APG110"
+510 -437
View File
File diff suppressed because it is too large Load Diff
+35 -25
View File
@@ -34,6 +34,9 @@
[QC Linie mit GF (automatische Auf-Ab-Berechnung)]^C^C(ssg-ensure "VarioFoerderer") QcLinieMitGf
[<-<-QC Linie mit GF und U-Form]^C^C(ssg-ensure "VarioFoerderer") QcLinieMitGfUForm
[->Omniflo]
[Fahrstrecke]^C^C(ssg-ensure "GeruestInsert") OMNI_FAHRSTRECKE
[Fahrstrecken beschriften]^C^C(ssg-ensure "GeruestInsert") OMNI_FAHRSTRECKE_BESCHRIFTEN
[--]
[->Boegen APB110]
[90]^C^C(ssg-ensure "OmniModulInsert") OMNI_APB_630_90
[67.5]^C^C(ssg-ensure "OmniModulInsert") OMNI_APB_550_675
@@ -46,26 +49,26 @@
[AP 60]^C^C(ssg-ensure "OmniModulInsert") OMNI_AP60
[AP 110]^C^C(ssg-ensure "OmniModulInsert") OMNI_AP110
[<-APG 110]^C^C(ssg-ensure "OmniModulInsert") OMNI_APG110
[->Weiche 90 Grad]
[Einfach 90 700/700 links M]^C^C(ssg-ensure "OmniModulInsert") OMNI_W90_Einfach
[Doppel 90 700/700 M]^C^C(ssg-ensure "OmniModulInsert") OMNI_W90_Doppel
[<-Dreiwege 90 700/700 M]^C^C(ssg-ensure "OmniModulInsert") OMNI_W90_Dreiwege
[->Weiche 45 Grad]
[Einfach 45 350/700 links M]^C^C(ssg-ensure "OmniModulInsert") OMNI_W45_Einfach
[Doppel 45 350/700 M]^C^C(ssg-ensure "OmniModulInsert") OMNI_W45_Doppel
[<-Dreiwege 45 350/700 M]^C^C(ssg-ensure "OmniModulInsert") OMNI_W45_Dreiwege
[->Weichen Parallel]
[Einfach Parallel 200/750 links M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WP_Einfach
[Doppel Parallel 200/750 M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WP_Doppel
[<-Dreiwege Parallel 200/750 M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WP_Dreiwege
[->Weichenkoerper]
[Einfach 22.5 links M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WK_Einfach
[Doppel 22.5 M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WK_Doppel
[<-Dreiwege 22.5 M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WK_Dreiwege
[->Weichenkombinationen]
[Delta 1400/700 M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WKomb_Delta_1400
[Delta 1600/800 M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WKomb_Delta_1600
[<-Star 1400/1400 M]^C^C(ssg-ensure "OmniModulInsert") OMNI_WKomb_Star
[->Weichen]
[Einfach 90]^C^C(ssg-ensure "OmniModulInsert") OMNI_W90_Einfach
[Doppel 90]^C^C(ssg-ensure "OmniModulInsert") OMNI_W90_Doppel
[Dreiwege 90]^C^C(ssg-ensure "OmniModulInsert") OMNI_W90_Dreiwege
[--]
[Einfach 45]^C^C(ssg-ensure "OmniModulInsert") OMNI_W45_Einfach
[Doppel 45]^C^C(ssg-ensure "OmniModulInsert") OMNI_W45_Doppel
[Dreiwege 45]^C^C(ssg-ensure "OmniModulInsert") OMNI_W45_Dreiwege
[--]
[Einfach Parallel]^C^C(ssg-ensure "OmniModulInsert") OMNI_WP_Einfach
[Doppel Parallel]^C^C(ssg-ensure "OmniModulInsert") OMNI_WP_Doppel
[Dreiwege Parallel]^C^C(ssg-ensure "OmniModulInsert") OMNI_WP_Dreiwege
[--]
[Einfach 22.5]^C^C(ssg-ensure "OmniModulInsert") OMNI_WK_Einfach
[Doppel 22.5]^C^C(ssg-ensure "OmniModulInsert") OMNI_WK_Doppel
[Dreiwege 22.5]^C^C(ssg-ensure "OmniModulInsert") OMNI_WK_Dreiwege
[--]
[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
[->TEF Elemente]
[TEF Antriebst. rechts]^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_AntriebR
[TEF Umlenkspannst. rechts]^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_UmlenkR
@@ -79,6 +82,13 @@
[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
[->Spez. Streckenelemente]
[->Türlösungen]
[->Schwenkschienen]
[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 "OmniModulInsert") OMNI_KettenFoerderer
[Ladeschleifen]^C^C(ssg-ensure "OmniModulInsert") OMNI_LADESCHLEIFE_AP110
[->Verbinder]
@@ -116,12 +126,12 @@
[~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
[->Geruest]^C^C(ssg-ensure "GeruestInsert") GERUEST
[Rohr-Geruest-Traeger]^C^C(ssg-ensure "GeruestInsert") GERUEST_TRAEGER
[Saeulen]^C^C(ssg-ensure "GeruestInsert") GERUEST_SAEULEN
[Rohrabhaenger]^C^C(ssg-ensure "GeruestInsert") GERUEST_ROHRABHAENGER
[->Gerüst]^C^C(ssg-ensure "GeruestInsert") GERUEST
[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
[Gattertraeger]^C^C(ssg-ensure "GeruestInsert") GERUEST
[Gatterträger]^C^C(ssg-ensure "GeruestInsert") GERUEST
[->Funktionen]
[<-<-Traeger beschriften]^C^C(ssg-ensure "GeruestInsert") GERUEST_TRAEGER_BESCHRIFTEN
[->SPS]
+39
View File
@@ -0,0 +1,39 @@
"""Merkmale der GR_-Geruest-Bloecke im CSV-Export (build_geruest_merkmale).
Prueft die Teilefarbe (Attribut TEILEFARBE - das frueher gelesene FARBE gibt
es im Schema nicht) und die Laengenabzuege, die nur der Rohr-Geruest-Traeger
traegt und die bei den anderen GR_-Bloecken nicht auftauchen duerfen.
"""
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
from export_csv import build_geruest_merkmale # noqa: E402
def test_teilefarbe_aus_teilefarbe_attribut():
block = {"attribs": {"TEILEART": "Geruest Saeule 1 Zoll",
"TEILEFARBE": ",RAL7030", "LAENGE": "2000",
"LAYER": "D-6"}}
m = build_geruest_merkmale(block)
assert m["Farbe"] == ",RAL7030"
assert m["Laenge"] == "2000"
assert m["Layer"] == "D-6"
def test_ohne_abzug_keine_abzugsmerkmale():
m = build_geruest_merkmale({"attribs": {"TEILEART": "Geruest Rohrabhaenger"}})
assert "LaengenabzugAnfang" not in m
assert "LaengenabzugEnde" not in m
def test_traeger_abzuege():
block = {"attribs": {"TEILEART": "Geruest Traeger 1 Zoll", "LAENGE": "965",
"LAENGENABZUGANFANG": "0",
"LAENGENABZUGENDE": "35"}}
m = build_geruest_merkmale(block)
assert m["Laenge"] == "965"
assert m["LaengenabzugAnfang"] == "0"
assert m["LaengenabzugEnde"] == "35"
+52
View File
@@ -0,0 +1,52 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
test_export_sivas_zusammenfassen.py - zusammengefasste Sivas-Kopie
(<output>_zusammengefasst.csv, export_sivas.items_zusammenfassen).
Laeuft komplett ohne BricsCAD (reine Python-Logik).
"""
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
import export_sivas # noqa: E402
def _geruest(teileid, laenge="2500"):
return {"block_name": f"GR_{teileid}", "x": 0.0, "y": 0.0, "z": 0.0,
"rotation": 0.0,
"attribs": {"ID": teileid, "TEILEART": "Geruest Saeule 2 Zoll",
"ARTINR": "821006051,825002022,825002022",
"TEILEFARBE": "RAL7035,,",
"BEZEICHNUNG": "Saeule", "LAENGE": laenge}}
def test_gleiche_zeilen_werden_summiert():
items, _ = export_sivas.process_blocks(
[_geruest("0001"), _geruest("0002"), _geruest("0003", laenge="2800")])
assert len(items) == 6
zus = export_sivas.items_zusammenfassen(items)
# Laenge gehoert zum Schluessel: 2500er und 2800er bleiben getrennt
assert len(zus) == 4
assert [z["nr"] for z in zus] == [1, 2, 3, 4]
z = {(z["sivasnr"], z["laenge_mm"]): z for z in zus}
assert z[("825002022", "2500")]["anzahl"] == 4
assert z[("825002022", "2500")]["ids"] == ["0001", "0002"]
assert z[("821006051", "2500")]["anzahl"] == 2
assert z[("821006051", "2500")]["details"] == {export_sivas.MERKMAL_TEILEFARBE: "RAL7035"}
assert z[("825002022", "2800")]["anzahl"] == 2
assert z[("825002022", "2800")]["ids"] == ["0003"]
def test_eingabe_bleibt_unveraendert():
items, _ = export_sivas.process_blocks([_geruest("0001"), _geruest("0002")])
vorher = [export_sivas.format_csv_line(it) for it in items]
export_sivas.items_zusammenfassen(items)
assert [export_sivas.format_csv_line(it) for it in items] == vorher
def test_dateiname():
assert export_sivas.zusammengefasster_dateiname("x/500651_sivas.csv") == \
"x/500651_sivas_zusammengefasst.csv"
+129
View File
@@ -0,0 +1,129 @@
;; ============================================================
;; test_lastent.lsp - Szenario-Test fuer ssg-lastent-ohne-attribute (ssg_core)
;;
;; Stellt den realen Bug nach: ein Block MIT Attributen (z.B. eine per
;; Strg+C/V eingefuegte GR_-Kopie) ist das letzte Objekt der Zeichnung.
;; Ein Makro merkt sich die Startmarke, zeichnet neue Objekte, sammelt
;; "alles ab (entnext marke)" ein und wickelt es per _.-BLOCK zu einem Block.
;; Mit nacktem (entlast) als Marke landeten dabei die ATTRIBs des alten
;; Blocks im Auswahlsatz und wurden entfernt.
;;
;; Aufruf in BricsCAD:
;; (load (strcat (getenv "DXFMAKRO") "/tests/test_lastent.lsp"))
;; TEST_LASTENT
;;
;; Speichert tests/output/lastent_results.json (Konvention test_run_all).
;; ============================================================
(setq *tle-pass* 0 *tle-fail* 0 *tle-fails* '())
;; Ein Assert: erwartet-Wert gleich ist-Wert (equal). Loggt Pass/Fail.
(defun tle-eq (name erwartet ist)
(if (equal erwartet ist)
(progn (setq *tle-pass* (1+ *tle-pass*))
(princ (strcat "\n [PASS] " name)))
(progn (setq *tle-fail* (1+ *tle-fail*))
(setq *tle-fails* (cons name *tle-fails*))
(princ (strcat "\n [FAIL] " name
"\n erwartet: " (vl-princ-to-string erwartet)
"\n ist: " (vl-princ-to-string ist))))))
;; Blockdefinition mit zwei ATTDEFs anlegen (falls noch nicht vorhanden).
(defun tle-blockdef (name)
(if (not (tblsearch "BLOCK" name))
(progn
(entmake (list '(0 . "BLOCK") (cons 2 name) '(70 . 2) '(10 0.0 0.0 0.0)))
(entmake '((0 . "LINE") (8 . "0") (10 0.0 0.0 0.0) (11 100.0 0.0 0.0)))
(foreach tag '("ID" "ARTINR")
(entmake (list '(0 . "ATTDEF") '(8 . "0") '(10 0.0 0.0 0.0)
'(40 . 10.0) '(1 . "") (cons 2 tag) (cons 3 tag)
'(70 . 0))))
(entmake '((0 . "ENDBLK")))))
name)
;; INSERT mit Attributen per entmake (INSERT 66=1, ATTRIBs, SEQEND).
;; Rueckgabe: ename des INSERT.
(defun tle-insert-mit-attributen (name pt werte / ins)
(entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt) '(66 . 1)))
(setq ins (entlast))
(foreach paar werte
(entmake (list '(0 . "ATTRIB") '(8 . "0") (cons 10 pt) '(40 . 10.0)
(cons 1 (cdr paar)) (cons 2 (car paar)) '(70 . 0))))
(entmake '((0 . "SEQEND")))
ins)
(defun lastent:tests ( / bname werte ins marke line ss e neu anz)
(setvar "CMDECHO" 0)
(setq bname (tle-blockdef "TLE_ATT_BLOCK"))
(setq werte (list (cons "ID" "4711") (cons "ARTINR" "A1,A2")))
(setq ins (tle-insert-mit-attributen bname '(0.0 0.0 0.0) werte))
;; --- Vorbedingung: Attribute lesbar, INSERT ist (entlast) ---
(tle-eq "vorher: attribute lesbar" werte (ssg-attrib-read ins))
(tle-eq "vorher: entlast = insert" ins (entlast))
;; --- Marke steht auf dem SEQEND des Attribut-Blocks ---
(setq marke (ssg-lastent-ohne-attribute))
(tle-eq "marke ist SEQEND" "SEQEND" (cdr (assoc 0 (entget marke))))
;; --- Neues Objekt zeichnen: entnext der Marke ist genau dieses Objekt ---
(entmake '((0 . "LINE") (8 . "0") (10 0.0 50.0 0.0) (11 100.0 50.0 0.0)))
(setq line (entlast))
(tle-eq "entnext marke = neues objekt" line (entnext marke))
;; --- Einsammeln + _.-BLOCK wie geruest-block-bauen ---
(setq ss (ssadd) anz 0 e (entnext marke))
(while e (ssadd e ss) (setq anz (1+ anz)) (setq e (entnext e)))
(tle-eq "genau 1 objekt eingesammelt" 1 anz)
(setq neu (strcat "TLE_NEU_" (ssg-timestamp)))
(command "_.-BLOCK" neu '(0.0 0.0 0.0) ss "")
;; --- Kern des Bugs: der alte Block behaelt seine Attribute ---
(tle-eq "nachher: attribute erhalten" werte (ssg-attrib-read ins))
(tle-eq "nachher: neuer block existiert" T (if (tblsearch "BLOCK" neu) T nil))
;; --- Leere Zeichnung wird hier nicht getestet (Testzeichnung ist nie leer);
;; ohne Attribute liefert der Helfer (entlast) unveraendert ---
(entmake '((0 . "LINE") (8 . "0") (10 0.0 90.0 0.0) (11 10.0 90.0 0.0)))
(tle-eq "ohne attribute: marke = entlast" (entlast) (ssg-lastent-ohne-attribute))
;; Aufraeumen
(entdel ins)
(entdel (entlast))
(princ))
(defun lastent:export-results (out-dir / f pfad)
(setq pfad (strcat out-dir "/lastent_results.json"))
(setq f (open pfad "w"))
(if f
(progn
(write-line "{" f)
(write-line (strcat " \"pass\": " (itoa *tle-pass*) ",") f)
(write-line (strcat " \"fail\": " (itoa *tle-fail*) ",") f)
(write-line (strcat " \"status\": \""
(if (= *tle-fail* 0) "OK" "FEHLER") "\"") f)
(write-line "}" f)
(close f)
(princ (strcat "\n Ergebnis: " pfad))))
(princ))
(defun c:TEST_LASTENT ( / )
(setq *tle-pass* 0 *tle-fail* 0 *tle-fails* '())
(princ "\n================================================================")
(princ "\n TEST_LASTENT - ssg-lastent-ohne-attribute (ssg_core.lsp)")
(princ "\n================================================================")
(lastent:tests)
(princ "\n\n----------------------------------------------------------------")
(princ (strcat "\n Ergebnis: " (itoa *tle-pass*) " PASS, "
(itoa *tle-fail*) " FAIL"))
(if (> *tle-fail* 0)
(progn
(princ "\n Fehlgeschlagen:")
(foreach n (reverse *tle-fails*) (princ (strcat "\n - " n)))))
(princ "\n================================================================")
(princ))
(princ "\nTEST_LASTENT geladen. Aufruf: TEST_LASTENT")
(princ)
+268 -31
View File
@@ -217,6 +217,21 @@
(setq *ssg-ils-dim* _lay-dim-alt
*ssg-layer-cfg* _lay-cfg-alt
*ssg-layer-cfg-versucht* _lay-vers-alt)
;; --- DCL-Vorlagen: Platzhalterzeilen //@NAME@ ersetzen ---
(tu-eq "ssg-dcl-zeilen-ersetzen/ersetzt"
'("a {" " x;" " y;" "}")
(ssg-dcl-zeilen-ersetzen '("a {" " //@L@" "}") '(("L" " x;" " y;"))))
(tu-eq "ssg-dcl-zeilen-ersetzen/leer-entfernt"
'("a {" "}")
(ssg-dcl-zeilen-ersetzen '("a {" "\t//@L@ " "}") '(("L"))))
(tu-eq "ssg-dcl-zeilen-ersetzen/mehrere"
'("1" "2")
(ssg-dcl-zeilen-ersetzen '("//@A@" "//@B@") '(("A" "1") ("B" "2"))))
;; unbekannter Marker und normaler Kommentar bleiben stehen
(tu-eq "ssg-dcl-zeilen-ersetzen/unbekannt"
'("//@X@" "// Kommentar")
(ssg-dcl-zeilen-ersetzen '("//@X@" "// Kommentar") '(("A" "1"))))
)
@@ -849,7 +864,7 @@
)
(defun tu-tests-geruest ( / _eintrag _gruppe _teile _konfig _rec _pfad _f
_zurueck _bgtest _saeulen)
_zurueck _bgtest _saeulen _vmq _alt _fs)
(princ "\n[GeruestInsert]")
;; GeruestInsert ist ein lazy Feature-Modul (nicht in der Core-Ladeliste).
;; Geladen wird es zentral in test_unit.scr auf .scr-Top-Level; hier nur
@@ -917,10 +932,10 @@
"{\"artikel\": \"X\", \"sivas_id\": 7, \"stueckzahl\": 2, \"anzahl_vorgabe\": 5}")
2))
;; Dummy, der zugleich Teile-DWG ist, faellt aus der Teileliste
(tu-eq "geruest-ohne-pfad/entfernt" '("b/2.dwg")
(geruest-ohne-pfad "A/1.DWG" '("a/1.dwg" "b/2.dwg")))
(tu-eq "geruest-ohne-pfad/nil" '("a/1.dwg")
(geruest-ohne-pfad nil '("a/1.dwg")))
(tu-eq "geruest-ohne-pfad/entfernt" '(("b/2.dwg" . 90.0))
(geruest-ohne-pfad "A/1.DWG" '(("a/1.dwg" . 0.0) ("b/2.dwg" . 90.0))))
(tu-eq "geruest-ohne-pfad/nil" '(("a/1.dwg" . 0.0))
(geruest-ohne-pfad nil '(("a/1.dwg" . 0.0))))
;; Dummy-Wahl: Variante gewinnt, fehlende Varianten-DWG -> Baugruppe
(setq _pfad (geruest-dummy-pfad "821006036.dwg"))
(if (and _pfad (findfile _pfad))
@@ -1015,7 +1030,148 @@
"{\"artikel\": \"Schraubenset\", \"anzahl\": 3},"
"{\"artikel\": \"unbekannt\", \"anzahl\": 1}]}")))
(tu-eq "geruest-konfig-position" '(nil 3)
(geruest-konfig-position _konfig "oben" _teile))
(geruest-konfig-position _konfig "oben" _teile nil))
;; --- anbaugruppen: befestigung / sonstiges ---
(setq _bgtest (ssg-json-parse
(strcat "{\"anbaugruppen\": {\"befestigung\": [{\"artikel\": \"K\"}],"
" \"sonstiges\": [{\"artikel\": \"H1\"}, {\"artikel\": \"H2\"}]}}")))
(tu-eq "geruest-anbau-liste/befestigung" 1
(length (geruest-anbau-liste _bgtest "befestigung")))
(tu-eq "geruest-anbau-liste/sonstiges" '("H1" "H2")
(mapcar 'geruest-eintrag-name (geruest-anbau-liste _bgtest "sonstiges")))
;; altes flaches Array gilt als befestigung
(setq _rec (ssg-json-parse "{\"anbaugruppen\": [{\"artikel\": \"A\"}, {\"artikel\": \"B\"}]}"))
(tu-eq "geruest-anbau-liste/flach" 2 (length (geruest-anbau-liste _rec "befestigung")))
(tu-nil "geruest-anbau-liste/flach-sonstiges" (geruest-anbau-liste _rec "sonstiges"))
(tu-nil "geruest-anbau-liste/leer"
(geruest-anbau-liste
(ssg-json-parse "{\"anbaugruppen\": {\"befestigung\": [], \"sonstiges\": []}}")
"sonstiges"))
(tu-nil "geruest-anbau-liste/fehlt"
(geruest-anbau-liste (ssg-json-parse "{\"id\": \"X\"}") "befestigung"))
(tu-eq "geruest-dlg-standard/teile" '(("0" . "1") ("0" . "1"))
(geruest-dlg-standard (geruest-anbau-liste _bgtest "sonstiges")))
(tu-eq "geruest-mengen-addieren" '(nil 3 2 5)
(geruest-mengen-addieren '(nil 1 nil 2) '(nil 2 2 3)))
;; Alte Konfiguration mit Haltearm unter "oben": landet in sonstiges
;; (Mengen addiert), oben meldet ihn nicht als unbekannt
(setq _konfig (ssg-json-parse
(strcat "{\"name\": \"Alt\","
" \"oben\": [{\"artikel\": \"K\", \"anzahl\": 2}, {\"artikel\": \"H2\", \"anzahl\": 1}],"
" \"unten\": [{\"artikel\": \"H2\", \"anzahl\": 2}],"
" \"sonstiges\": [{\"artikel\": \"H1\", \"anzahl\": 4}]}")))
(tu-eq "geruest-konfig-position/ausweich" '(2)
(geruest-konfig-position _konfig "oben"
(geruest-anbau-liste _bgtest "befestigung")
(geruest-anbau-liste _bgtest "sonstiges")))
;; --- Winkel Platte: Basis ungedreht, Anbauteile gedreht, kein Doppel ---
(tu-eq "geruest-teile-dwgs-rot/90" '(("b.dwg" . 0.0) ("a.dwg" . 90.0))
(geruest-teile-dwgs-rot '("b.dwg") '("b.dwg" "a.dwg") 90))
(tu-eq "geruest-teile-dwgs-rot/0" '(("a.dwg" . 0.0))
(geruest-teile-dwgs-rot nil '("a.dwg") 0))
(tu-eq "geruest-rest-liste" '(3 4) (geruest-rest-liste '(1 2 3 4) 2))
(tu-eq "geruest-winkel-aus-index/90" 90 (geruest-winkel-aus-index "1"))
(tu-eq "geruest-winkel-aus-index/leer" 0 (geruest-winkel-aus-index ""))
(tu-eq "geruest-winkel-index/90" "1" (geruest-winkel-index 90))
(tu-eq "geruest-winkel-index/fehlt" "0" (geruest-winkel-index nil))
;; --- Radiobuttons der Varianten: Key "v<i>" <-> Index ---
(tu-eq "geruest-radio-key" "v3" (geruest-radio-key 3))
(tu-eq "geruest-radio-index" 3 (geruest-radio-index "v3"))
(tu-eq "geruest-radio-index/leer" 0 (geruest-radio-index ""))
(tu-eq "geruest-radio-index/nil" 0 (geruest-radio-index nil))
(tu-eq "geruest-indizes" '(0 1 2) (geruest-indizes 3))
(tu-nil "geruest-indizes/0" (geruest-indizes 0))
(tu-eq "geruest-dcl-varianten-zeilen"
'(" : radio_button { key = \"v1\"; label = \"B 1''\"; }")
(geruest-dcl-varianten-zeilen
(list '(("name" . "A")) '(("name" . "B 1\""))) '(1)))
;; Variante mit Teilen: Artikelnummern in Klammern, jede nur einmal
(tu-eq "geruest-varianten-label/nummern" "R 2\" (111, 222)"
(geruest-varianten-label
(ssg-json-parse
(strcat "{\"name\": \"R 2\\\"\", \"teile\": ["
"{\"artikel\": \"A\", \"sivas_id\": 111},"
"{\"artikel\": \"B\", \"sivas_id\": 222, \"stueckzahl\": 2}]}"))))
(tu-eq "geruest-varianten-label/ohne" "A"
(geruest-varianten-label '(("name" . "A"))))
;; --- Gesperrte Varianten ("disabled": true) ---
(setq _rec (list '(("name" . "A") ("disabled" . T))
'(("name" . "B"))
'(("name" . "C") ("disabled" . T))))
(tu-true "geruest-variante-gesperrt-p/ja" (geruest-variante-gesperrt-p (nth 0 _rec)))
(tu-nil "geruest-variante-gesperrt-p/nein" (geruest-variante-gesperrt-p (nth 1 _rec)))
(tu-eq "geruest-erste-freie-variante" 1 (geruest-erste-freie-variante _rec))
(tu-eq "geruest-erste-freie-variante/alle-gesperrt" 0
(geruest-erste-freie-variante (list '(("disabled" . T)))))
(tu-eq "geruest-variante-waehlbar/frei" 1 (geruest-variante-waehlbar _rec 1))
(tu-eq "geruest-variante-waehlbar/gesperrt" 1 (geruest-variante-waehlbar _rec 2))
(tu-eq "geruest-variante-waehlbar/zu-gross" 1 (geruest-variante-waehlbar _rec 7))
;; Ersetzungen: ohne Teile entfallen die Bloecke (leerer Cluster)
(setq _rec (geruest-dcl-ersetzungen "Saeulen" nil nil
(list '(("name" . "A")))))
(tu-nil "geruest-dcl-ersetzungen/ohne-befestigung"
(cdr (assoc "BEFESTIGUNG" _rec)))
(tu-nil "geruest-dcl-ersetzungen/ohne-sonstiges"
(cdr (assoc "SONSTIGES" _rec)))
(tu-eq "geruest-dcl-ersetzungen/varianten" 1
(length (cdr (assoc "VARIANTEN" _rec))))
;; --- Geaenderte Konfiguration: Vergleich ohne Namen ---
(tu-true "geruest-record-gleich-p/name"
(geruest-record-gleich-p '(("name" . "A") ("laenge" . "100"))
'(("name" . "B") ("laenge" . "100"))))
(tu-nil "geruest-record-gleich-p/geaendert"
(geruest-record-gleich-p '(("name" . "A") ("laenge" . "100"))
'(("name" . "A") ("laenge" . "200"))))
;; Eigene Konfiguration gewinnt vor gleichnamiger Bibliothek; nur eine
;; eigene liefert eine Namensvorgabe (Ueberspeichern)
(setq _alt *geruest-konfig-liste*)
(setq *geruest-konfig-liste*
(list (cons nil '(("name" . "K"))) (cons T '(("name" . "K")))
(cons nil '(("name" . "L")))))
(tu-eq "geruest-konfig-index/eigene-zuerst" 2 (geruest-konfig-index "K"))
(tu-eq "geruest-konfig-index/bibliothek" 3 (geruest-konfig-index "L"))
(tu-eq "geruest-konfig-name-vorgabe/eigene" "K" (geruest-konfig-name-vorgabe 2))
(tu-nil "geruest-konfig-name-vorgabe/bibliothek" (geruest-konfig-name-vorgabe 1))
(tu-nil "geruest-konfig-name-vorgabe/keine" (geruest-konfig-name-vorgabe 0))
(setq *geruest-konfig-liste* _alt)
(tu-eq "geruest-konfig-sonstiges/umhaengen" '(4 3)
(geruest-konfig-sonstiges _konfig
(geruest-anbau-liste _bgtest "sonstiges")
(geruest-anbau-liste _bgtest "befestigung")))
;; Befestigung = Gesamtanzahl: neues Feld "befestigung", altes oben +
;; unten summiert; der Haltearm unter "oben" wird hier still uebergangen
(tu-eq "geruest-konfig-befestigung/alt" '(2)
(geruest-konfig-befestigung _konfig
(geruest-anbau-liste _bgtest "befestigung")
(geruest-anbau-liste _bgtest "sonstiges")))
(tu-eq "geruest-konfig-befestigung/oben-unten" '(5)
(geruest-konfig-befestigung
(ssg-json-parse
(strcat "{\"name\": \"A\", \"oben\": [{\"artikel\": \"K\", \"anzahl\": 2}],"
" \"unten\": [{\"artikel\": \"K\", \"anzahl\": 3}]}"))
(geruest-anbau-liste _bgtest "befestigung")
(geruest-anbau-liste _bgtest "sonstiges")))
(tu-eq "geruest-konfig-befestigung/neu" '(4)
(geruest-konfig-befestigung
(ssg-json-parse
"{\"name\": \"N\", \"befestigung\": [{\"artikel\": \"K\", \"anzahl\": 4}]}")
(geruest-anbau-liste _bgtest "befestigung")
(geruest-anbau-liste _bgtest "sonstiges")))
;; Artikelnummer(n) fuer die Anzeige: Einzelteil bzw. Gruppe eindeutig
(tu-eq "geruest-artnr-anzeige/einzelteil" "825002019"
(geruest-artnr-anzeige _eintrag))
(tu-eq "geruest-artnr-anzeige/gruppe" "111, 222"
(geruest-artnr-anzeige _gruppe))
;; Eine Befestigungsspalte (Prefix b) mit Art.-Nr.-Zeile je Teil
(setq _rec (geruest-dcl-ersetzungen "Saeulen" (list _eintrag) nil
(list '(("name" . "A")))))
(tu-true "geruest-dcl-ersetzungen/befestigung-key"
(vl-some '(lambda (z) (vl-string-search "key = \"bm0\"" z))
(cdr (assoc "BEFESTIGUNG" _rec))))
(tu-true "geruest-dcl-ersetzungen/artnr-zeile"
(vl-some '(lambda (z) (vl-string-search "Art.-Nr. 825002019" z))
(cdr (assoc "BEFESTIGUNG" _rec))))
;; --- Variante gewinnt vor Baugruppe (TEILEART/dummy) ---
;; Die zusammengefuehrte Saeulen-Baugruppe unterscheidet 1 Zoll und
@@ -1032,9 +1188,7 @@
(geruest-variante-wert nil _bgtest "dummy"))
;; --- Zusammengefuehrte Saeulen-Baugruppe ---
(setq _saeulen nil)
(foreach _e (geruest-baugruppen-liste)
(if (equal (car _e) "Saeulen") (setq _saeulen (cdr _e))))
(setq _saeulen (geruest-baugruppe "Saeulen" (geruest-daten)))
(tu-eq "geruest/saeulen-vorhanden" T (if _saeulen T nil))
(if _saeulen
(progn
@@ -1046,10 +1200,27 @@
(tu-geruest-artikel-unvollstaendig
(ssg-json-get _saeulen "geometrie_varianten")))
(tu-eq "geruest/saeulen-anbauteile" T
(if (ssg-json-get _saeulen "anbaugruppen") T nil))
(if (geruest-anbau-liste _saeulen "befestigung") T nil))
(tu-eq "geruest/saeulen-anbauteile-artikel" 0
(tu-geruest-artikel-unvollstaendig
(ssg-json-get _saeulen "anbaugruppen")))
(geruest-anbau-liste _saeulen "befestigung")))
;; Haltearme passen weder oben noch unten -> eigene Sonstiges-Zeile
(tu-eq "geruest/saeulen-sonstiges" 4
(length (geruest-anbau-liste _saeulen "sonstiges")))
(tu-eq "geruest/saeulen-sonstiges-artikel" 0
(tu-geruest-artikel-unvollstaendig
(geruest-anbau-liste _saeulen "sonstiges")))
(tu-nil "geruest/saeulen-haltearm-nicht-befestigung"
(vl-some '(lambda (a)
(wcmatch (geruest-eintrag-name a) "HALTEARM*"))
(geruest-anbau-liste _saeulen "befestigung")))
;; Rohrabhaenger/Wandbefestigung haben keine Sonstiges-Teile
(foreach _e '("Rohrabhaenger" "Wandbefestigung")
(setq _rec (geruest-baugruppe _e (geruest-daten)))
(tu-true (strcat "geruest/" _e "-befestigung")
(geruest-anbau-liste _rec "befestigung"))
(tu-nil (strcat "geruest/" _e "-ohne-sonstiges")
(geruest-anbau-liste _rec "sonstiges")))
(tu-eq "geruest/saeulen-titel" "Saeulen" (geruest-titel _saeulen))
;; Variante R 1" traegt die eigene TEILEART - per Name gesucht,
;; die Reihenfolge in geruest.json ist nicht fest.
@@ -1136,20 +1307,33 @@
(tu-eqf "geruest-traeger-streben/6000-letzte" 5750.0 (last _rec))
;; Konfiguration: fehlende Felder -> Standard, ohne querstrebe -> nil
;; Ergebnis (dummy laenge querlinie abstand rand-min rand-max)
;; Streben nur bei Varianten mit "mit_querstrebe": true
(setq _vmq (ssg-json-parse "{\"name\": \"A\", \"mit_querstrebe\": true}"))
(tu-eqf "geruest-traeger-strebe-cfg/standard" '(nil 30.0 25.0 500.0 100.0 250.0)
(geruest-traeger-strebe-cfg nil
(geruest-traeger-strebe-cfg _vmq
(ssg-json-parse "{\"querstrebe\": {\"rand_min\": 100}}")))
(tu-eqf "geruest-traeger-strebe-cfg/dummy" '("s.dwg" 30.0 25.0 500.0 100.0 250.0)
(geruest-traeger-strebe-cfg nil
(geruest-traeger-strebe-cfg _vmq
(ssg-json-parse "{\"querstrebe\": {\"dummy\": \"s.dwg\"}}")))
(tu-eqf "geruest-traeger-strebe-cfg/wert" '(nil 30.0 25.0 400.0 100.0 250.0)
(geruest-traeger-strebe-cfg _vmq
(ssg-json-parse "{\"querstrebe\": {\"abstand\": 400}}")))
(tu-eqf "geruest-traeger-strebe-cfg/variante" '(nil 30.0 25.0 300.0 100.0 250.0)
(geruest-traeger-strebe-cfg
(ssg-json-parse
"{\"mit_querstrebe\": true, \"querstrebe\": {\"abstand\": 300}}")
(ssg-json-parse "{\"querstrebe\": {\"abstand\": 400}}")))
(tu-nil "geruest-traeger-strebe-cfg/ohne-flag"
(geruest-traeger-strebe-cfg (ssg-json-parse "{\"name\": \"Rohr 1\"}")
(ssg-json-parse "{\"querstrebe\": {\"abstand\": 400}}")))
(tu-nil "geruest-traeger-strebe-cfg/ohne-variante"
(geruest-traeger-strebe-cfg nil
(ssg-json-parse "{\"querstrebe\": {\"abstand\": 400}}")))
;; Querlinien an Anfang und Ende der 30 mm langen Strebe
(tu-eqf "geruest-traeger-strebe-enden" '(235.0 265.0)
(geruest-traeger-strebe-enden 250.0 30.0))
(tu-nil "geruest-traeger-strebe-cfg/ohne"
(geruest-traeger-strebe-cfg nil (ssg-json-parse "{\"id\": \"X\"}")))
(geruest-traeger-strebe-cfg _vmq (ssg-json-parse "{\"id\": \"X\"}")))
;; Muffe nur bei "mit_muffe": true; Variante darf eigene Muffe mitbringen
(setq _bgtest (ssg-json-parse "{\"muffe\": {\"dummy\": \"m.dwg\"}}"))
(tu-eq "geruest-traeger-muffe-dummy/flag" "m.dwg"
@@ -1271,13 +1455,8 @@
_bgtest "LAENGENABZUGENDE" "aktiv"))
;; --- Rohr-Geruest-Traeger in der echten Datendatei ---
;; Eigene Datei data/json/geruest_traeger.json: im Bereichs-Dropdown von
;; GERUEST darf er nicht auftauchen, ueber geruest-traeger-daten muss er
;; auffindbar sein.
(setq _rec nil)
(foreach _e (geruest-baugruppen-liste)
(if (equal (car _e) "Traeger") (setq _rec T)))
(tu-nil "geruest/traeger-nicht-im-dropdown" _rec)
;; Eigene Datei data/json/geruest_traeger.json: in geruest.json darf er
;; nicht stehen, ueber geruest-traeger-daten muss er auffindbar sein.
(tu-true "geruest/traeger-datei"
(findfile (geruest-json-pfad "geruest_traeger.json")))
(setq _traeger (geruest-baugruppe "Traeger" (geruest-traeger-daten)))
@@ -1297,12 +1476,26 @@
(geruest-attr-feld nil _traeger "LAENGE" "max"))
(tu-eqf "geruest/traeger-querstrebe"
'("dummy_Strebe_30x4.dwg" 30.0 25.0 500.0 100.0 250.0)
(geruest-traeger-strebe-cfg nil _traeger))
(geruest-traeger-strebe-cfg _vmq _traeger))
;; Querstreben-Flag je Variante: alle ausser den beiden Rohr-1"-Varianten
(setq _rec 0)
(foreach _v (ssg-json-get _traeger "geometrie_varianten")
(if (geruest-traeger-strebe-cfg _v _traeger) (setq _rec (1+ _rec))))
(tu-eq "geruest/traeger-querstreben-varianten" 6 _rec)
(tu-nil "geruest/traeger-rohr-ohne-querstrebe"
(geruest-traeger-strebe-cfg
(car (ssg-json-get _traeger "geometrie_varianten")) _traeger))
;; Muffen-Flag ausdruecklich je Variante: genau die "mit (2) Muffe(n)"
(setq _rec 0)
(foreach _v (ssg-json-get _traeger "geometrie_varianten")
(if (geruest-traeger-muffe-dummy _v _traeger) (setq _rec (1+ _rec))))
(tu-eq "geruest/traeger-muffen-varianten" 4 _rec)
;; Dialog: ein Radiobutton je Variante, auch fuer die mit Muffe
(tu-eq "geruest/traeger-radiobuttons" 8
(length (geruest-dcl-varianten-zeilen
(ssg-json-get _traeger "geometrie_varianten")
(geruest-indizes (length (ssg-json-get _traeger
"geometrie_varianten"))))))
;; Jede Variante definiert Beschriftungstext UND -layer selbst - der
;; Layer ist je Traegervariante verschieden, eine Vorgabe der
;; Baugruppe gibt es dafuer bewusst nicht.
@@ -1327,6 +1520,44 @@
)
)
;; --- Omniflo-Fahrstrecke (data/json/omniflo_fahrstrecke.json) ---
;; Gleiche Linien-Logik wie der Traeger: jede Variante ein Radiobutton,
;; nur ST/STL gibt es mit Muffen, nur ST/STL sind farbig.
(setq _fs (geruest-baugruppe "Fahrstrecke" (geruest-fahrstrecke-daten)))
(tu-true "fahrstrecke/vorhanden" _fs)
(if _fs
(progn
(setq _rec (ssg-json-get _fs "geometrie_varianten"))
(tu-eq "fahrstrecke/titel" "Fahrstrecke" (geruest-titel _fs))
(tu-eq "fahrstrecke/varianten"
'("AP 110" "APG 110" "AP 60" "ST" "ST mit Muffen" "STL" "STL mit Muffen")
(mapcar 'geruest-eintrag-name _rec))
(tu-eq "fahrstrecke/mit-muffe" '("ST mit Muffen" "STL mit Muffen")
(mapcar 'geruest-eintrag-name
(vl-remove-if-not '(lambda (v) (ssg-json-get v "mit_muffe")) _rec)))
;; AP 110 ohne "farbig" -> leerer TEILEFARBE-Eintrag, ST farbig
(tu-eq "fahrstrecke/ap110-nicht-farbig" '("")
(geruest-farbliste (geruest-teile-paare (nth 0 _rec) nil) "RAL7035"))
(tu-eq "fahrstrecke/st-farbig" '("RAL7035")
(geruest-farbliste
(geruest-teile-paare
(nth (geruest-name-index "ST" _rec) _rec) nil)
"RAL7035"))
;; Keine Querstreben; Muffen-Dummy wie beim Traeger nur bei den
;; Varianten mit "mit_muffe": true
(tu-nil "fahrstrecke/ohne-querstrebe"
(geruest-traeger-strebe-cfg (nth (geruest-name-index "ST" _rec) _rec) _fs))
(tu-eq "fahrstrecke/muffe-dummy" "dummy_Muffe_1zoll.dwg"
(geruest-traeger-muffe-dummy
(nth (geruest-name-index "ST mit Muffen" _rec) _rec) _fs))
(tu-nil "fahrstrecke/ohne-muffe-dummy"
(geruest-traeger-muffe-dummy
(nth (geruest-name-index "ST" _rec) _rec) _fs))
)
)
(tu-true "fahrstrecke/dcl-vorlage"
(findfile (geruest-dcl-vorlage-pfad "fahrstrecke.dcl")))
;; --- Rundlauf Schreiber -> Parser ---
;; Prueft den Konfigurations-Schreiber ohne BricsCAD-Dialog. Bewusst in
;; eine temporaere Datei: ein Test darf cfg/geruest_user.json nicht
@@ -1337,9 +1568,10 @@
(cons "variante" "ROHR R 1\" 33,7 x 2,6")
(cons "laenge" "2000")
(cons "teilefarbe" "RAL 7035 Lichtgrau")
(cons "oben" (list (list (cons "artikel" "ROHRKLAMMER 1\" KPL. VERTIKAL")
(cons "anzahl" 2))))
(cons "unten" nil)))
(cons "befestigung" (list (list (cons "artikel" "ROHRKLAMMER 1\" KPL. VERTIKAL")
(cons "anzahl" 2))))
(cons "sonstiges" nil)
(cons "winkel_platte" 90)))
(setq _pfad (vl-filename-mktemp "grtest" nil ".json"))
(setq _f (open _pfad "w"))
(write-line "{ \"Test\": [" _f)
@@ -1356,12 +1588,16 @@
(ssg-json-get _zurueck "laenge"))
(tu-eq "geruest-schreiber/farbe" "RAL 7035 Lichtgrau"
(ssg-json-get _zurueck "teilefarbe"))
(tu-eq "geruest-schreiber/oben-artikel" "ROHRKLAMMER 1\" KPL. VERTIKAL"
(ssg-json-get (car (ssg-json-get _zurueck "oben")) "artikel"))
(tu-eq "geruest-schreiber/oben-anzahl" 2
(ssg-json-get (car (ssg-json-get _zurueck "oben")) "anzahl"))
(tu-eq "geruest-schreiber/unten-leer" nil
(ssg-json-get _zurueck "unten"))
(tu-eq "geruest-schreiber/befestigung-artikel" "ROHRKLAMMER 1\" KPL. VERTIKAL"
(ssg-json-get (car (ssg-json-get _zurueck "befestigung")) "artikel"))
(tu-eq "geruest-schreiber/befestigung-anzahl" 2
(ssg-json-get (car (ssg-json-get _zurueck "befestigung")) "anzahl"))
(tu-eq "geruest-schreiber/sonstiges-leer" nil
(ssg-json-get _zurueck "sonstiges"))
(tu-eq "geruest-schreiber/winkel" 90
(ssg-json-get _zurueck "winkel_platte"))
;; altes Format wird nicht mehr geschrieben
(tu-nil "geruest-schreiber/ohne-oben" (assoc "oben" _zurueck))
)
)
)
@@ -1713,6 +1949,7 @@
(tu-eq "ssg-sl-klasse/vf" "ils_strecke" (car (ssg-sl-klasse "VF_2")))
(tu-eq "ssg-sl-klasse/gf" "ils_strecke" (car (ssg-sl-klasse "GF_1")))
(tu-eq "ssg-sl-klasse/geruest" "geruest" (car (ssg-sl-klasse "GR_Saeulen_20260101120000")))
(tu-eq "ssg-sl-klasse/fahrstrecke" "fahrstrecke" (car (ssg-sl-klasse "GR_Fahrstrecke_20260101120000")))
(tu-eq "ssg-sl-klasse/ap60" "ap60" (car (ssg-sl-klasse "AP60_20260101120000")))
(tu-eq "ssg-sl-klasse/apg110" "apg110" (car (ssg-sl-klasse "APG110_20260101120000")))
(tu-eq "ssg-sl-klasse/ap110" "ap110" (car (ssg-sl-klasse "AP110_20260101120000")))