[ADD] Gerüst Dummydateien sowie Zeichnungsdateien hinzugefügt; [FIX] Anzahl und menge der Baugruppenteile unterscheidet sich nun mit dem vorgabe wert für die Inputfelder; [CHANGE] Gerüstträger in separates JSON FIle ausgelagert, da andere Einfügelogik

This commit is contained in:
2026-10-05 09:49:20 +02:00
parent 6ec85905d4
commit fe5cb9664c
14 changed files with 488 additions and 348 deletions
+2 -2
View File
File diff suppressed because one or more lines are too long
+125 -72
View File
@@ -5,6 +5,7 @@
;; Nutzer eine Basis-Variante, Anbauteile fuer "Befestigung oben" UND
;; "Befestigung unten" (je mit eigener Stueckzahl), Laenge und Farbe waehlen,
;; und fuegt das Ergebnis als Block GR_<id>_<Zeitstempel> ein.
;; Rohr-Geruest-Traeger (GERUEST_TRAEGER) lesen data/json/geruest_traeger.json.
;;
;; Beide Befestigungslisten enthalten ALLE Anbauteile der Baugruppe - dasselbe
;; Teil kann oben, unten oder gleichzeitig an beiden Positionen sitzen.
@@ -100,9 +101,10 @@
)
)
(defun geruest-json-pfad ( / basis)
;; Pfad einer Datendatei unter data/json, z.B. "geruest.json".
(defun geruest-json-pfad (datei / basis)
(if (setq basis (geruest-data-verzeichnis))
(strcat basis "/json/geruest.json")
(strcat basis "/json/" datei)
)
)
@@ -112,36 +114,48 @@
)
)
;; Datendatei einmal je Zeichnungssitzung laden.
(defun geruest-daten ( / pfad)
(if (null *geruest-daten*)
;; Datendatei unter data/json einmal je Zeichnungssitzung laden und im
;; globalen Symbol cache-sym ablegen. Rueckgabe: die geparsten Daten oder nil
;; (mit Meldung).
(defun geruest-json-laden-cache (datei cache-sym / pfad daten)
(if (null (eval cache-sym))
(progn
(setq pfad (geruest-json-pfad))
(setq pfad (geruest-json-pfad datei))
(cond
((null pfad) (princ (ssg-text "gr-fehler-datenpfad")))
((null (findfile pfad)) (princ (ssg-textf "gr-fehler-json-fehlt" (list pfad))))
(T
(setq *geruest-daten* (ssg-json-laden pfad))
(if (null *geruest-daten*)
(setq daten (ssg-json-laden pfad))
(set cache-sym daten)
(if (null daten)
(princ (ssg-textf "gr-fehler-json-lesbar" (list pfad)))
)
)
)
)
)
*geruest-daten*
(eval cache-sym)
)
;; Baugruppen des GERUEST-Dialogs (Rohrabhaenger, Saeulen, Wandbefestigung).
(defun geruest-daten ( / )
(geruest-json-laden-cache "geruest.json" '*geruest-daten*)
)
;; Traeger-Baugruppen mit Linien-Logik (Rohr-Geruest-Traeger, spaeter z.B.
;; Gattertraeger) - bewusst eine eigene Datei: eigener Dialog, Laenge aus der
;; Zeichnung, Streben/Muffe/Beschriftung statt Anbaugruppen/Konfigurationen.
(defun geruest-traeger-daten ( / )
(geruest-json-laden-cache "geruest_traeger.json" '*geruest-traeger-daten*)
)
;; Alle Baugruppen als ((id . objekt) ...) in Dateireihenfolge - diese
;; Reihenfolge bestimmt auch die Reihenfolge im Bereichs-Dropdown.
;; Baugruppen mit "einfuegeart": "linie" (Rohr-Geruest-Traeger) fehlen hier:
;; sie haben einen eigenen Dialog und einen eigenen Einfuegeablauf
;; (c:GERUEST_TRAEGER) und gehoeren nicht in das Bereichs-Dropdown.
;; Reihenfolge bestimmt auch die Reihenfolge im Bereichs-Dropdown. Die
;; Traeger stehen in geruest_traeger.json und gehoeren nicht hierher.
(defun geruest-baugruppen-liste ( / erg)
(setq erg nil)
(foreach eintrag (geruest-daten)
(if (and (listp (cdr eintrag))
(not (equal (ssg-json-get (cdr eintrag) "einfuegeart") "linie")))
(if (listp (cdr eintrag))
(setq erg (append erg
(list (cons (ssg-json-get (cdr eintrag) "id") (cdr eintrag)))))
)
@@ -169,6 +183,40 @@
(if (and w (/= w "")) w (ssg-json-get bg schluessel))
)
;; Pfad der Dummy-DWG fuer den Block. Ein "dummy" in der Geometrie-Variante
;; wird bevorzugt; fehlt die Datei unter data/geruest, wird gemeldet und auf
;; den "dummy" der Baugruppe zurueckgefallen. Rueckgabe: (datei . pfad) -
;; pfad ist nil, wenn kein Datenverzeichnis bekannt ist; ob die
;; Rueckfall-Datei existiert, prueft der Aufrufer.
(defun geruest-dummy-wahl (variante bg / v pfad)
(setq v (if variante (ssg-json-get variante "dummy")))
(if (and v (= (type v) 'STR) (/= v "")
(setq pfad (geruest-dummy-pfad v))
(findfile pfad))
(cons v pfad)
(progn
(if (and v (= (type v) 'STR) (/= v ""))
(princ (ssg-textf "gr-fehler-dummy-variante"
(list (if pfad pfad v)
(if (ssg-json-get bg "dummy")
(ssg-json-get bg "dummy")
"-"))))
)
(setq v (ssg-json-get bg "dummy"))
(cons v (geruest-dummy-pfad v))
)
)
)
;; Liste ohne die Eintraege, die (ohne Gross/Klein) gleich pfad sind. Damit
;; landet eine Teile-DWG, die zugleich der Dummy ist, nicht doppelt im Block.
(defun geruest-ohne-pfad (pfad liste)
(if pfad
(vl-remove-if '(lambda (p) (= (strcase p) (strcase pfad))) liste)
liste
)
)
;; ============================================================
;; TEILE AUSWERTEN
@@ -184,9 +232,23 @@
)
)
(defun geruest-menge (eintrag / m)
(setq m (ssg-json-get eintrag "menge"))
(if (and m (numberp m) (> m 0)) (fix m) 1)
;; Zwei Mengenfelder im JSON, bewusst verschieden benannt:
;; "stueckzahl" = wie oft das Teil TATSAECHLICH geschrieben wird - je
;; Einbau (Variante) bzw. je Satz/Anbauteil. Fehlt = 1.
;; "anzahl_vorgabe" = NUR die Vorbelegung des Anzahl-Feldes im Dialog
;; (Anbaugruppen). Fehlt = 1.
;; Ein Anbauteil wird Anzahl (Dialog) x stueckzahl mal geschrieben; bei einer
;; Gruppe ("teile") ist die Anzahl die Zahl der Saetze.
(defun geruest-positiv-int (w / )
(if (and w (numberp w) (> w 0)) (fix w) 1)
)
(defun geruest-stueckzahl (eintrag)
(geruest-positiv-int (ssg-json-get eintrag "stueckzahl"))
)
(defun geruest-anzahl-vorgabe (eintrag)
(geruest-positiv-int (ssg-json-get eintrag "anzahl_vorgabe"))
)
;; Sivas-ID als String. Im JSON stehen rein numerische IDs als Zahl
@@ -212,7 +274,7 @@
)
;; Alle Teile eines Eintrags als ((artnr . farbig) ...), jedes gemaess
;; "menge" wiederholt. Benannte Gruppen ("teile") werden rekursiv aufgeloest.
;; "stueckzahl" wiederholt. Benannte Gruppen ("teile") werden rekursiv aufgeloest.
;; farbig = darf das Teil die Baugruppenfarbe tragen ("farbig" im JSON). Eine
;; Gruppe mit "farbig": true vererbt das an ihre Teile (erbe); ein Teil kann
;; die Vererbung nicht per false aufheben - false und "fehlt" sind beide nil.
@@ -229,12 +291,12 @@
(setq erg (mapcar '(lambda (nr) (cons nr farbig))
(geruest-wiederholen
(geruest-id-string (ssg-json-get eintrag "sivas_id"))
(geruest-menge eintrag))))
(geruest-stueckzahl eintrag))))
)
erg
)
;; Alle Artikelnummern eines Eintrags, jede gemaess "menge" wiederholt.
;; Alle Artikelnummern eines Eintrags, jede gemaess "stueckzahl" wiederholt.
(defun geruest-artikelnummern (eintrag)
(mapcar 'car (geruest-teile-paare eintrag nil))
)
@@ -289,7 +351,7 @@
;; Eingabe aus einem Mengenfeld auswerten.
;; Leer -> Vorgabewert aus dem JSON, gueltig -> Zahl >= 1, sonst nil.
(defun geruest-menge-wert (s vorgabe)
(defun geruest-anzahl-wert (s vorgabe)
(setq s (ssg-cfg-trim (if s s "")))
(cond
((= s "") vorgabe)
@@ -310,30 +372,18 @@
)
)
;; Artikelnummern eines Eintrags bei frei gewaehlter Stueckzahl.
;; Einzelteil: die Sivas-ID anzahl-mal. Benannte Gruppe ("teile"): das
;; komplette Set anzahl-mal - die Mengen INNERHALB des Sets bleiben erhalten
;; Teile eines Anbauteils bei der im Dialog gewaehlten Anzahl: der Eintrag
;; (Einzelteil mit seiner "stueckzahl" bzw. benannte Gruppe als kompletter
;; Satz) anzahl-mal. Die Stueckzahlen INNERHALB eines Satzes bleiben erhalten
;; (ein Schraubenset bleibt 1 Scheibe + 2 Muttern + 1 Schraube je Satz).
(defun geruest-teile-paare-n (eintrag anzahl / teile einmal erg i farbig)
(setq teile (ssg-json-get eintrag "teile"))
(setq farbig (if (ssg-json-get eintrag "farbig") T nil))
(if teile
(progn
(setq einmal nil)
(foreach teil teile
(setq einmal (append einmal (geruest-teile-paare teil farbig)))
)
(setq erg nil i 0)
(while (< i anzahl)
(setq erg (append erg einmal))
(setq i (1+ i))
)
erg
)
(mapcar '(lambda (nr) (cons nr farbig))
(geruest-wiederholen
(geruest-id-string (ssg-json-get eintrag "sivas_id")) anzahl))
(defun geruest-teile-paare-n (eintrag anzahl / einmal erg i)
(setq einmal (geruest-teile-paare eintrag nil))
(setq erg nil i 0)
(while (< i anzahl)
(setq erg (append erg einmal))
(setq i (1+ i))
)
erg
)
(defun geruest-artikelnummern-n (eintrag anzahl)
@@ -441,7 +491,7 @@
;; Positionsliste ("oben"/"unten") einer Konfiguration auf die Anbauteile
;; abbilden. Rueckgabe: ein Eintrag je Anbauteil - nil (nicht gewaehlt) oder
;; die Stueckzahl. Ein unbekannter Artikelname wird gemeldet und
;; die Anzahl (Feld "anzahl"). Ein unbekannter Artikelname wird gemeldet und
;; uebersprungen, statt die ganze Konfiguration scheitern zu lassen.
(defun geruest-konfig-position (konfig schluessel anbauteile / mengen idx n)
(setq mengen (geruest-nil-liste (length anbauteile)))
@@ -449,7 +499,7 @@
(setq idx (geruest-name-index (ssg-json-get e "artikel") anbauteile))
(if idx
(progn
(setq n (ssg-json-get e "menge"))
(setq n (ssg-json-get e "anzahl"))
(setq mengen (geruest-liste-setzen mengen idx
(if (and n (numberp n) (> n 0)) (fix n) 1)))
)
@@ -583,20 +633,20 @@
(defun geruest-dlg-standard ( / erg)
(setq erg nil)
(foreach a *geruest-anbauteile*
(setq erg (append erg (list (cons "0" (itoa (geruest-menge a))))))
(setq erg (append erg (list (cons "0" (itoa (geruest-anzahl-vorgabe a))))))
)
erg
)
;; Mengenliste (nil oder Zahl je Teil) in den Tile-Zustand umsetzen.
(defun geruest-mengen->tiles (mengen / erg i a)
(defun geruest-anzahlen->tiles (mengen / erg i a)
(setq erg nil i 0)
(foreach m mengen
(setq a (nth i *geruest-anbauteile*))
(setq erg (append erg
(list (if m
(cons "1" (itoa m))
(cons "0" (itoa (geruest-menge a)))))))
(cons "0" (itoa (geruest-anzahl-vorgabe a)))))))
(setq i (1+ i))
)
erg
@@ -720,10 +770,10 @@
*geruest-dlg-frei* farbe))
)
(setq *geruest-dlg-oben*
(geruest-mengen->tiles
(geruest-anzahlen->tiles
(geruest-konfig-position k "oben" *geruest-anbauteile*)))
(setq *geruest-dlg-unten*
(geruest-mengen->tiles
(geruest-anzahlen->tiles
(geruest-konfig-position k "unten" *geruest-anbauteile*)))
)
)
@@ -745,16 +795,16 @@
)
;; Angehakte Teile einer Spalte mit gueltiger Menge einsammeln.
;; Rueckgabe: (T . ((index . menge) ...)) oder nil bei ungueltigem Mengenfeld.
;; Rueckgabe: (T . ((index . anzahl) ...)) oder nil bei ungueltigem Mengenfeld.
;; Das fuehrende T ist noetig, weil "nichts ausgewaehlt" ein gueltiges
;; Ergebnis ist und sich sonst nicht von einem Fehler unterscheiden liesse.
(defun geruest-mengen-lesen (zustand / erg i a m ok)
(defun geruest-anzahlen-lesen (zustand / erg i a m ok)
(setq erg nil i 0 ok T)
(foreach paar zustand
(setq a (nth i *geruest-anbauteile*))
(if (and ok (= (car paar) "1"))
(progn
(setq m (geruest-menge-wert (cdr paar) (geruest-menge a)))
(setq m (geruest-anzahl-wert (cdr paar) (geruest-anzahl-vorgabe a)))
(if m
(setq erg (append erg (list (cons i m))))
(setq ok nil)
@@ -788,11 +838,11 @@
(setq a (nth i *geruest-anbauteile*))
(if (= (car paar) "1")
(progn
(setq m (geruest-menge-wert (cdr paar) (geruest-menge a)))
(setq m (geruest-anzahl-wert (cdr paar) (geruest-anzahl-vorgabe a)))
(if m
(setq erg (append erg
(list (list (cons "artikel" (geruest-eintrag-name a))
(cons "menge" m)))))
(cons "anzahl" m)))))
)
)
)
@@ -818,7 +868,7 @@
(write-line
(strcat " { \"artikel\": \""
(ssg-json-escape (ssg-json-get e "artikel"))
"\", \"menge\": " (itoa (ssg-json-get e "menge")) " }"
"\", \"anzahl\": " (itoa (ssg-json-get e "anzahl")) " }"
(if (< i n) "," ""))
f)
)
@@ -963,7 +1013,7 @@
)
;; Dialog fuer einen Bereich zeigen. Rueckgabe:
;; ("OK" variante-index ((idx . menge) ...) ((idx . menge) ...) laenge farbe)
;; ("OK" variante-index ((idx . anzahl) ...) ((idx . anzahl) ...) laenge farbe)
;; - drittes Element = Befestigung oben, viertes = unten
;; ("WECHSEL" bereich-index) - Nutzer hat den Bereich umgestellt
;; nil - abgebrochen
@@ -1120,8 +1170,8 @@
)
(T
(setq oben-m (geruest-mengen-lesen *geruest-dlg-oben*))
(setq unten-m (geruest-mengen-lesen *geruest-dlg-unten*))
(setq oben-m (geruest-anzahlen-lesen *geruest-dlg-oben*))
(setq unten-m (geruest-anzahlen-lesen *geruest-dlg-unten*))
(if (or (null oben-m) (null unten-m))
(alert (ssg-text "gr-alert-menge"))
(progn
@@ -1170,10 +1220,14 @@
;; Rueckgabe: (blockname . entity) oder nil.
(defun geruest-block-bauen (bg variante werte pt teile-dwgs / datei dummy lastEnt dummyEnt
dummy-attribs attribs)
;; Eine Variante darf eine eigene Dummy-DWG mitbringen; sonst gilt die der
;; Baugruppe.
(setq datei (geruest-variante-wert variante bg "dummy"))
(setq dummy (geruest-dummy-pfad datei))
;; Eine Variante darf eine eigene Dummy-DWG mitbringen; sonst (oder wenn
;; deren Datei fehlt) gilt die der Baugruppe.
(setq datei (geruest-dummy-wahl variante bg))
(setq dummy (cdr datei)
datei (car datei))
;; Ist der Dummy zugleich eine Teile-DWG (z.B. 821006036.dwg beim
;; T-Abhaenger), nicht ein zweites Mal einfuegen.
(setq teile-dwgs (geruest-ohne-pfad dummy teile-dwgs))
(if (or (null dummy) (null (findfile dummy)))
(progn
(princ (ssg-textf "gr-fehler-dummy" (list (if dummy dummy datei))))
@@ -1269,7 +1323,7 @@
;; ============================================================
;; Teile-Paare ((artnr . farbig) ...) einer Befestigungsauswahl
;; ((index . menge) ...).
;; ((index . anzahl) ...).
(defun geruest-auswahl-paare (auswahl anbauteile / erg)
(setq erg nil)
(foreach paar auswahl
@@ -1410,7 +1464,7 @@
;; ============================================================
;; ROHR-GERUEST-TRAEGER (Baugruppe mit "einfuegeart": "linie")
;; ROHR-GERUEST-TRAEGER (Daten: data/json/geruest_traeger.json)
;; ============================================================
;; Eigener Dialog (dcl/geruest_traeger.dcl): Variante, Farbe und zwei
;; Laengenabzuege. Die Laenge selbst wird DANACH in der Zeichnung bestimmt -
@@ -1425,11 +1479,10 @@
;; Richtungswinkel eingefuegt. Es wird wiederholt eingefuegt, bis der Nutzer
;; ESC/Enter drueckt - jeder Traeger ist ein eigener GR_Traeger_<ts>-Block.
;; Baugruppe ueber das ASCII-Feld "id" (auch solche, die
;; geruest-baugruppen-liste auslaesst).
(defun geruest-baugruppe (id / erg)
;; Baugruppe ueber das ASCII-Feld "id" in daten (z.B. (geruest-traeger-daten)).
(defun geruest-baugruppe (id daten / erg)
(setq erg nil)
(foreach eintrag (geruest-daten)
(foreach eintrag daten
(if (and (null erg) (listp (cdr eintrag))
(equal (ssg-json-get (cdr eintrag) "id") id))
(setq erg (cdr eintrag))
@@ -2098,7 +2151,7 @@
cfg laenge lage lay handle code erg)
(setq ed (entget blockEnt))
(setq attribs (ssg-attrib-read blockEnt))
(setq bg (geruest-baugruppe "Traeger"))
(setq bg (geruest-baugruppe "Traeger" (geruest-traeger-daten)))
(setq laenge (atof (cond ((cdr (assoc "LAENGE" attribs))) ("0"))))
(if (and bg (> laenge 0.0))
(progn
@@ -2190,7 +2243,7 @@
)
(defun c:GERUEST_TRAEGER ( / bg wahl)
(setq bg (geruest-baugruppe "Traeger"))
(setq bg (geruest-baugruppe "Traeger" (geruest-traeger-daten)))
(cond
((null bg)
(princ (ssg-textf "gr-fehler-baugruppe" (list "Traeger"))))
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+91 -243
View File
@@ -29,13 +29,13 @@
"artikel": "ROHR R 1\" 33,7 x 2,6",
"sivas_id": 821006026,
"farbig": true,
"menge": 1
"stueckzahl": 1
},
{
"artikel": "CAD - ROHRABH. 1\" NICHT GEQUETSCHT - MONTAGEELEMENTE KPL.",
"sivas_id": 821004202,
"farbig": false,
"menge": 1
"stueckzahl": 1
}
]
},
@@ -46,13 +46,13 @@
"artikel": "ROHR R 1\" 33,7 x 2,6 einseitig gequetscht",
"sivas_id": 821006034,
"farbig": true,
"menge": 1
"stueckzahl": 1
},
{
"artikel": "CAD - ROHRABHÄNGER 1\" EINSEITIG GEQUETSCHT - MONTAGEELEMENTE KPL.",
"sivas_id": 821004203,
"farbig": false,
"menge": 1
"stueckzahl": 1
}
]
},
@@ -63,13 +63,25 @@
"artikel": "ROHR R 1\" 33,7 x 2,6 beidseitig gequetscht",
"sivas_id": 821006035,
"farbig": true,
"menge": 1
"stueckzahl": 1
},
{
"artikel": "CAD - ROHRABHÄNGER 1\" BEIDSEITIG GEQUETSCHT - MONTAGEELEMENTE KPL.",
"sivas_id": 821004204,
"farbig": false,
"menge": 1
"stueckzahl": 1
}
]
},
{
"name": "T-Abhaenger mit 300 mm Flanschrohr R 1\" 33,7 x 2,6",
"dummy": "821006036.dwg",
"teile": [
{
"artikel": "T-ABHÄNGER MIT FLANSCH-ROHR 33,7 x 2,6",
"sivas_id": 821006036,
"farbig": true,
"stueckzahl": 1
}
]
}
@@ -79,34 +91,37 @@
"artikel": "SPANNPRATZE ST - KH 8-11 KPL.SELBSTSICHERND",
"sivas_id": 821004120,
"farbig": false,
"menge": 1
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "SPANNPRATZE SELBSTSICHERND KPL.",
"sivas_id": 821004058,
"farbig": false,
"menge": 1
"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,
"menge": 1
"stueckzahl": 1
},
{
"artikel": "Sechskantmutter DIN 934 - M10 - 8",
"sivas_id": 912011010,
"farbig": false,
"menge": 2
"stueckzahl": 2
},
{
"artikel": "Sechskantschraube DIN 933 - M10 x 30 - 8.8",
"sivas_id": 911011008,
"farbig": false,
"menge": 1
"stueckzahl": 1
}
]
},
@@ -114,43 +129,50 @@
"artikel": "U-BÜGEL M7 41X49 FÜR PROFILGERÜST - BG",
"sivas_id": 825004049,
"farbig": false,
"menge": 1
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "ROHRKLAMMER 1\" KPL. VERTIKAL",
"sivas_id": 825004040,
"farbig": false,
"menge": 2
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "WINKEL 60X60X6X300",
"sivas_id": 821006043,
"farbig": false,
"menge": 1
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "WINKEL 60X60X6X60",
"sivas_id": 821006042,
"farbig": false,
"menge": 1
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "ROHRKLAMMER 1\" T-VERBINDUNG KPL.",
"sivas_id": 825004030,
"farbig": false,
"menge": 1
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "ROHRKLAMMER 1\" FLACH UND LANG, KPL.",
"sivas_id": 825002021,
"farbig": false,
"menge": 1
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "DURCHSTECKANKER HST M12X115X20",
"sivas_id": 922021003,
"farbig": false,
"menge": 1
"stueckzahl": 1,
"anzahl_vorgabe": 1
}
],
"konfigurationen": [
@@ -162,17 +184,17 @@
"oben": [
{
"artikel": "SPANNPRATZE SELBSTSICHERND KPL.",
"menge": 1
"anzahl": 1
},
{
"artikel": "Schraubenset",
"menge": 1
"anzahl": 1
}
],
"unten": [
{
"artikel": "ROHRKLAMMER 1\" KPL. VERTIKAL",
"menge": 2
"anzahl": 2
}
]
},
@@ -184,13 +206,13 @@
"oben": [
{
"artikel": "DURCHSTECKANKER HST M12X115X20",
"menge": 2
"anzahl": 2
}
],
"unten": [
{
"artikel": "ROHRKLAMMER 1\" T-VERBINDUNG KPL.",
"menge": 1
"anzahl": 1
}
]
}
@@ -200,7 +222,7 @@
"id": "Saeulen",
"titel": "Saeulen",
"teileart": "Geruest Saeule",
"dummy": "R2-Saeule_dummy.dwg",
"dummy": "821006051.dwg",
"attribute": {
"LAENGE": {
"typ": "number",
@@ -239,31 +261,32 @@
"artikel": "BODENSÄULE R 2\" 60,3 MIT FUSSPLATTE",
"sivas_id": 821006051,
"farbig": true,
"menge": 1
"stueckzahl": 1
},
{
"artikel": "CAD - BODENSÄULE R 2\" - DURCHSTECKANKER KPL.",
"sivas_id": 821004201,
"farbig": false,
"menge": 1
"stueckzahl": 1
}
]
},
{
"name": "R 1\"",
"teileart": "Geruest Saeule 1 Zoll",
"dummy": "821004200.dwg",
"teile": [
{
"artikel": "ROHR R 1\" 33,7 x 2,6",
"sivas_id": 821006026,
"farbig": true,
"menge": 1
"stueckzahl": 1
},
{
"artikel": "CAD - BODENSÄULE R 1\" - BODENPLATTE KPL.",
"sivas_id": 821004200,
"farbig": false,
"menge": 1
"stueckzahl": 1
}
]
}
@@ -273,67 +296,78 @@
"artikel": "KLEMMRING MIT MUFFE EINFACH KPL.",
"sivas_id": 825002019,
"farbig": false,
"menge": 2
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING MIT MUFFE DOPPELT 90 Grad, KPL.",
"sivas_id": 825002009,
"farbig": false,
"menge": 2
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING MIT MUFFE DOPPELT 180 Grad, KPL.",
"sivas_id": 825002008,
"farbig": false,
"menge": 2
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING M. MUFFE DREIFACH 90 Grad/180 Grad KPL.",
"sivas_id": 825002007,
"farbig": false,
"menge": 2
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KLEMMRING MIT LASCHE KPL. ZUSAMMENBAUZEICHNUNG",
"sivas_id": 825002020,
"farbig": false,
"menge": 2
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "QUERSCHELLE F. 1\" UND 2\" ROHR GESCHW./VZ. M. 4X M10X30 KPL.",
"sivas_id": 825002022,
"farbig": false,
"menge": 2
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "KREUZSCHELLE F. 2\" UND 1\" ROHR SCHWENKBAR 360 Grad",
"sivas_id": 922083009,
"farbig": false,
"menge": 2
"stueckzahl": 1,
"anzahl_vorgabe": 2
},
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 1-ARMIG KPL.",
"sivas_id": 821004051,
"farbig": true,
"menge": 1
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 2-ARMIG 90 Grad KPL.",
"sivas_id": 821004054,
"farbig": true,
"menge": 1
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 2-ARMIG 180 Grad KPL.",
"sivas_id": 821004052,
"farbig": true,
"menge": 1
"stueckzahl": 1,
"anzahl_vorgabe": 1
},
{
"artikel": "HALTEARM FÜR BODENSÄULE R 2\" 3-ARMIG KPL.",
"sivas_id": 821004053,
"farbig": true,
"menge": 1
"stueckzahl": 1,
"anzahl_vorgabe": 1
}
],
"konfigurationen": [
@@ -353,7 +387,7 @@
"oben": [
{
"artikel": "KLEMMRING MIT MUFFE EINFACH KPL.",
"menge": 2
"anzahl": 2
}
],
"unten": []
@@ -366,13 +400,13 @@
"oben": [
{
"artikel": "KLEMMRING MIT MUFFE DOPPELT 90 Grad, KPL.",
"menge": 2
"anzahl": 2
}
],
"unten": [
{
"artikel": "QUERSCHELLE F. 1\" UND 2\" ROHR GESCHW./VZ. M. 4X M10X30 KPL.",
"menge": 2
"anzahl": 2
}
]
}
@@ -386,45 +420,49 @@
"geometrie_varianten": [
{
"name": "WANDFLANSCH EINZELTEIL",
"dummy": "821006031.dwg",
"teile": [
{
"artikel": "WANDFLANSCH EINZELTEIL",
"sivas_id": 821006031,
"farbig": false,
"menge": 1
"stueckzahl": 1
}
]
},
{
"name": "WINKEL 60X60X6X60",
"dummy": "821006042.dwg",
"teile": [
{
"artikel": "WINKEL 60X60X6X60",
"sivas_id": 821006042,
"farbig": false,
"menge": 1
"stueckzahl": 1
}
]
},
{
"name": "WINKEL 60X60X6X300",
"dummy": "821006043.dwg",
"teile": [
{
"artikel": "WINKEL 60X60X6X300",
"sivas_id": 821006043,
"farbig": false,
"menge": 1
"stueckzahl": 1
}
]
},
{
"name": "ROHRSCHELLE 1\" OBERTEIL",
"dummy": "825006009.dwg",
"teile": [
{
"artikel": "ROHRSCHELLE 1\" OBERTEIL",
"sivas_id": 825006009,
"farbig": false,
"menge": 1
"stueckzahl": 1
}
]
}
@@ -432,29 +470,31 @@
"anbaugruppen": [
{
"name": "Nylondübel 12x60 inkl. Holzschrauben",
"anzahl_vorgabe": 2,
"teile": [
{
"artikel": "HOLZSCHRAUB,10X70, 6KT DIN 571 VZ",
"sivas_id": 911271027,
"farbig": false,
"menge": 2
"stueckzahl": 1
},
{
"artikel": "NYLON - DUEBEL 12X60 (TYP S)",
"sivas_id": 922013003,
"farbig": false,
"menge": 2
"stueckzahl": 1
}
]
},
{
"name": "HST M12X115X20",
"anzahl_vorgabe": 2,
"teile": [
{
"artikel": "DURCHSTECKANKER HST M12X115X20 WANDABH.",
"sivas_id": 922021003,
"farbig": false,
"menge": 2
"stueckzahl": 1
}
]
}
@@ -466,7 +506,7 @@
"oben": [
{
"artikel": "Nylondübel 12x60 inkl. Holzschrauben",
"menge": 1
"anzahl": 2
}
],
"unten": []
@@ -477,203 +517,11 @@
"oben": [
{
"artikel": "HST M12X115X20",
"menge": 1
"anzahl": 2
}
],
"unten": []
}
]
},
"Rohr-Gerüst-Träger": {
"id": "Traeger",
"titel": "Traeger",
"teileart": "Geruest Traeger",
"einfuegeart": "linie",
"querstrebe": {
"dummy": "dummy_Strebe_30x4.dwg",
"abstand_max": 500,
"rand_min": 100,
"rand_max": 250
},
"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"
},
"LAENGENABZUGANFANG": {
"typ": "number",
"einheit": "mm",
"vorgabe": 35,
"aktiv": false
},
"LAENGENABZUGENDE": {
"typ": "number",
"einheit": "mm",
"vorgabe": 35,
"aktiv": false
},
"TEILEFARBE": {
"typ": "auswahl",
"optionen": [
"RAL7035",
"RAL7030"
],
"frei_erlaubt": true,
"frei_option": "Individuell"
}
},
"geometrie_varianten": [
{
"name": "Rohr 1\"",
"beschriftung": {
"text": "Rohr 1\"",
"layer": "D-6-BEM"
},
"teileart": "Geruest Traeger",
"layer": "D-6",
"teile": [
{
"artikel": "ROHR R 1\"",
"sivas_id": 821006026,
"farbig": true,
"menge": 1
}
]
},
{
"name": "Rohr 1\" mit Muffe",
"beschriftung": {
"text": "Rohr 1\"",
"layer": "D-6-BEM"
},
"mit_muffe": true,
"teileart": "Geruest Traeger",
"layer": "D-6",
"teile": [
{
"artikel": "ROHR R 1\" mit Muffe",
"sivas_id": 825004000,
"farbig": true,
"menge": 1
}
]
},
{
"name": "DRT 80 1\"",
"beschriftung": {
"text": "DRT 80",
"layer": "D-1-BEM"
},
"teileart": "Geruest Traeger",
"layer": "D-1",
"teile": [
{
"artikel": "DRT DOPPELROHRTRAEGER 80 1\"",
"sivas_id": 825084000,
"farbig": true,
"menge": 1
}
]
},
{
"name": "DRT 80 1\" mit 2 Muffen",
"beschriftung": {
"text": "DRT 80",
"layer": "D-1-BEM"
},
"mit_muffe": true,
"teileart": "Geruest Traeger",
"layer": "D-1",
"teile": [
{
"artikel": "DRT DOPPELROHRTRAEGER 80 1\" mit 2 Muffen",
"sivas_id": 825084007,
"farbig": true,
"menge": 1
}
]
},
{
"name": "DRT 114 1\"",
"beschriftung": {
"text": "DRT 114",
"layer": "D-3-BEM"
},
"teileart": "Geruest Traeger",
"layer": "D-3",
"teile": [
{
"artikel": "DRT DOPPELROHRTRAEGER 114 1\"",
"sivas_id": 825104000,
"farbig": true,
"menge": 1
}
]
},
{
"name": "DRT 114 1\" mit 2 Muffen",
"beschriftung": {
"text": "DRT 114",
"layer": "D-3-BEM"
},
"mit_muffe": true,
"teileart": "Geruest Traeger",
"layer": "D-3",
"teile": [
{
"artikel": "DRT DOPPELROHRTRAEGER 114 1\" mit 2 Muffen",
"sivas_id": 825104007,
"farbig": true,
"menge": 1
}
]
},
{
"name": "RT 80/80 1\"",
"beschriftung": {
"text": "RT 80/80",
"layer": "D-5-BEM"
},
"teileart": "Geruest Traeger",
"layer": "D-5",
"teile": [
{
"artikel": "RT ROHRTRAEGER 80/80 1\"",
"sivas_id": 825144000,
"farbig": true,
"menge": 1
}
]
},
{
"name": "RT 80/80 1\" mit 2 Muffen",
"beschriftung": {
"text": "RT 80/80",
"layer": "D-5-BEM"
},
"mit_muffe": true,
"teileart": "Geruest Traeger",
"layer": "D-5",
"teile": [
{
"artikel": "RT ROHRTRAEGER 80/80 1\" mit 2 Muffen",
"sivas_id": 825144007,
"farbig": true,
"menge": 1
}
]
}
]
}
}
+193
View File
@@ -0,0 +1,193 @@
{
"Rohr-Gerüst-Träger": {
"id": "Traeger",
"titel": "Traeger",
"teileart": "Geruest Traeger",
"querstrebe": {
"dummy": "dummy_Strebe_30x4.dwg",
"abstand_max": 500,
"rand_min": 100,
"rand_max": 250
},
"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"
},
"LAENGENABZUGANFANG": {
"typ": "number",
"einheit": "mm",
"vorgabe": 35,
"aktiv": false
},
"LAENGENABZUGENDE": {
"typ": "number",
"einheit": "mm",
"vorgabe": 35,
"aktiv": false
},
"TEILEFARBE": {
"typ": "auswahl",
"optionen": [
"RAL7035",
"RAL7030"
],
"frei_erlaubt": true,
"frei_option": "Individuell"
}
},
"geometrie_varianten": [
{
"name": "Rohr 1\"",
"beschriftung": {
"text": "Rohr 1\"",
"layer": "D-6-BEM"
},
"teileart": "Geruest Traeger",
"layer": "D-6",
"teile": [
{
"artikel": "ROHR R 1\"",
"sivas_id": 821006026,
"farbig": true,
"stueckzahl": 1
}
]
},
{
"name": "Rohr 1\" mit Muffe",
"beschriftung": {
"text": "Rohr 1\"",
"layer": "D-6-BEM"
},
"mit_muffe": true,
"teileart": "Geruest Traeger",
"layer": "D-6",
"teile": [
{
"artikel": "ROHR R 1\" mit Muffe",
"sivas_id": 825004000,
"farbig": true,
"stueckzahl": 1
}
]
},
{
"name": "DRT 80 1\"",
"beschriftung": {
"text": "DRT 80",
"layer": "D-1-BEM"
},
"teileart": "Geruest Traeger",
"layer": "D-1",
"teile": [
{
"artikel": "DRT DOPPELROHRTRAEGER 80 1\"",
"sivas_id": 825084000,
"farbig": true,
"stueckzahl": 1
}
]
},
{
"name": "DRT 80 1\" mit 2 Muffen",
"beschriftung": {
"text": "DRT 80",
"layer": "D-1-BEM"
},
"mit_muffe": true,
"teileart": "Geruest Traeger",
"layer": "D-1",
"teile": [
{
"artikel": "DRT DOPPELROHRTRAEGER 80 1\" mit 2 Muffen",
"sivas_id": 825084007,
"farbig": true,
"stueckzahl": 1
}
]
},
{
"name": "DRT 114 1\"",
"beschriftung": {
"text": "DRT 114",
"layer": "D-3-BEM"
},
"teileart": "Geruest Traeger",
"layer": "D-3",
"teile": [
{
"artikel": "DRT DOPPELROHRTRAEGER 114 1\"",
"sivas_id": 825104000,
"farbig": true,
"stueckzahl": 1
}
]
},
{
"name": "DRT 114 1\" mit 2 Muffen",
"beschriftung": {
"text": "DRT 114",
"layer": "D-3-BEM"
},
"mit_muffe": true,
"teileart": "Geruest Traeger",
"layer": "D-3",
"teile": [
{
"artikel": "DRT DOPPELROHRTRAEGER 114 1\" mit 2 Muffen",
"sivas_id": 825104007,
"farbig": true,
"stueckzahl": 1
}
]
},
{
"name": "RT 80/80 1\"",
"beschriftung": {
"text": "RT 80/80",
"layer": "D-5-BEM"
},
"teileart": "Geruest Traeger",
"layer": "D-5",
"teile": [
{
"artikel": "RT ROHRTRAEGER 80/80 1\"",
"sivas_id": 825144000,
"farbig": true,
"stueckzahl": 1
}
]
},
{
"name": "RT 80/80 1\" mit 3 Muffen",
"beschriftung": {
"text": "RT 80/80",
"layer": "D-5-BEM"
},
"mit_muffe": true,
"teileart": "Geruest Traeger",
"layer": "D-5",
"teile": [
{
"artikel": "RT ROHRTRAEGER 80/80 1\" mit 3 Muffen",
"sivas_id": 825144007,
"farbig": true,
"stueckzahl": 1
}
]
}
]
}
}
+2 -1
View File
@@ -1003,13 +1003,14 @@
"gr-fehler-baugruppe": "\nGeruest: Baugruppe '%1' steht nicht in der Datendatei.",
"gr-fehler-keine-varianten": "\nGeruest: Baugruppe '%1' hat keine Geometrie-Varianten.",
"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.",
"gr-dlg-kopf": "%1 konfigurieren",
"gr-alert-laenge": "Laenge ungueltig: '%1' mm. Erlaubt: %2 bis %3 mm.",
"gr-prompt-einfuegepunkt": "\nEinfuegepunkt waehlen: ",
"gr-abgebrochen": "\nAbgebrochen.",
"gr-fertig": "\nGeruest-Baugruppe '%1' eingefuegt (Block %2).",
"gr-alert-menge": "Ungueltige Stueckzahl. Erlaubt ist eine ganze Zahl ab 1; ein leeres Feld uebernimmt den Vorgabewert.",
"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-konfig-keine": "<keine>",
+1
View File
@@ -1003,6 +1003,7 @@
"gr-fehler-baugruppe": "\nScaffold: assembly '%1' is not in the data file.",
"gr-fehler-keine-varianten": "\nScaffold: assembly '%1' has no geometry variants.",
"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.",
"gr-dlg-kopf": "Configure %1",
"gr-alert-laenge": "Invalid length: '%1' mm. Allowed: %2 to %3 mm.",
+74 -30
View File
@@ -754,9 +754,9 @@
(if (findfile _datei)
(progn
(setq _daten (ssg-json-laden _datei))
;; Vier Baugruppen: Rohrabhaenger, Saeulen (1 und 2 Zoll
;; zusammengefuehrt), Wandbefestigung, Rohr-Geruest-Traeger
(tu-eq "json/geruest-baugruppen" 4 (length _daten))
;; Drei Bereiche: Rohrabhaenger, Saeulen (1 und 2 Zoll zusammengefuehrt),
;; Wandbefestigung. Die Traeger liegen in geruest_traeger.json.
(tu-eq "json/geruest-baugruppen" 3 (length _daten))
;; Baugruppe ueber das ASCII-Feld "id" finden (aeusserer Schluessel
;; traegt Umlaute bzw. Anfuehrungszeichen)
(setq _bg nil)
@@ -768,7 +768,7 @@
(progn
(setq _var (ssg-json-get _bg "geometrie_varianten"))
(setq _anb (ssg-json-get _bg "anbaugruppen"))
(tu-eq "json/geruest-varianten" 3 (length _var))
(tu-eq "json/geruest-varianten" 4 (length _var))
(tu-eq "json/geruest-teileart" "Geruest Rohrabhaenger"
(ssg-json-get _bg "teileart"))
(tu-eq "json/geruest-dummy" "Rohrabhaenger_dummy.dwg"
@@ -824,24 +824,24 @@
(tu-eq "geruest-id-string/str" "0_B10071" (geruest-id-string "0_B10071"))
(tu-eq "geruest-id-string/nil" nil (geruest-id-string nil))
;; Einzelteil mit menge 2 -> Artikelnummer zweimal (ARTINR-Regel)
;; Einzelteil mit stueckzahl 2 -> Artikelnummer zweimal (ARTINR-Regel)
(setq _eintrag (ssg-json-parse
"{\"artikel\": \"X\", \"sivas_id\": 825002019, \"menge\": 2}"))
(tu-eq "geruest-artnr/menge2" '("825002019" "825002019")
"{\"artikel\": \"X\", \"sivas_id\": 825002019, \"stueckzahl\": 2}"))
(tu-eq "geruest-artnr/stueckzahl2" '("825002019" "825002019")
(geruest-artikelnummern _eintrag))
(tu-eq "geruest-name/artikel" "X" (geruest-eintrag-name _eintrag))
;; Benannte Gruppe -> teile rekursiv aufloesen, Mengen beachten
(setq _gruppe (ssg-json-parse
(strcat "{\"name\": \"Schraubenset\", \"teile\": ["
"{\"artikel\": \"A\", \"sivas_id\": 111, \"menge\": 1},"
"{\"artikel\": \"B\", \"sivas_id\": 222, \"menge\": 2}]}")))
"{\"artikel\": \"A\", \"sivas_id\": 111, \"stueckzahl\": 1},"
"{\"artikel\": \"B\", \"sivas_id\": 222, \"stueckzahl\": 2}]}")))
(tu-eq "geruest-artnr/gruppe" '("111" "222" "222")
(geruest-artikelnummern _gruppe))
(tu-eq "geruest-name/gruppe" "Schraubenset" (geruest-eintrag-name _gruppe))
;; Fehlendes menge-Feld -> 1
(tu-eq "geruest-artnr/ohne-menge" '("333")
;; Fehlendes stueckzahl-Feld -> 1
(tu-eq "geruest-artnr/ohne-stueckzahl" '("333")
(geruest-artikelnummern
(ssg-json-parse "{\"artikel\": \"C\", \"sivas_id\": 333}")))
@@ -859,21 +859,62 @@
(tu-eq "geruest-teile-dwgs/vorhanden" (list _pfad)
(geruest-teile-dwgs '("825002019" "999999999" "825002019")))
)
;; --- Anzahl-Vorgabe (Dialogfeld) vs. stueckzahl (wirklich geschrieben) ---
(tu-eq "geruest-anzahl-vorgabe/gruppe" 2
(geruest-anzahl-vorgabe (ssg-json-parse
"{\"name\": \"G\", \"anzahl_vorgabe\": 2, \"teile\": [{\"sivas_id\": 1, \"stueckzahl\": 1}]}")))
;; stueckzahl ist KEINE Vorgabe fuer das Dialogfeld
(tu-eq "geruest-anzahl-vorgabe/stueckzahl-zaehlt-nicht" 1
(geruest-anzahl-vorgabe (ssg-json-parse "{\"sivas_id\": 1, \"stueckzahl\": 3}")))
(tu-eq "geruest-anzahl-vorgabe/ohne" 1
(geruest-anzahl-vorgabe (ssg-json-parse "{\"name\": \"G\", \"teile\": []}")))
;; anzahl_vorgabe bestimmt nur die Vorbelegung, nicht den Satzinhalt:
;; 3 Saetze a (1 Schraube + 1 Duebel) = 6 Nummern
(tu-eq "geruest-artikelnummern-n/anzahl-vorgabe" '("1" "2" "1" "2" "1" "2")
(geruest-artikelnummern-n (ssg-json-parse
"{\"name\": \"G\", \"anzahl_vorgabe\": 2, \"teile\": [{\"sivas_id\": 1, \"stueckzahl\": 1}, {\"sivas_id\": 2, \"stueckzahl\": 1}]}")
3))
;; Einzelteil-Anbauteil: Anzahl x stueckzahl
(tu-eq "geruest-artikelnummern-n/einzelteil-stueckzahl" '("7" "7" "7" "7")
(geruest-artikelnummern-n (ssg-json-parse
"{\"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")))
;; Dummy-Wahl: Variante gewinnt, fehlende Varianten-DWG -> Baugruppe
(setq _pfad (geruest-dummy-pfad "821006036.dwg"))
(if (and _pfad (findfile _pfad))
(tu-eq "geruest-dummy-wahl/variante" "821006036.dwg"
(car (geruest-dummy-wahl
(ssg-json-parse "{\"dummy\": \"821006036.dwg\"}")
(ssg-json-parse "{\"dummy\": \"basis.dwg\"}"))))
)
(tu-eq "geruest-dummy-wahl/fehlt" "basis.dwg"
(car (geruest-dummy-wahl
(ssg-json-parse "{\"dummy\": \"gibtsnicht_999.dwg\"}")
(ssg-json-parse "{\"dummy\": \"basis.dwg\"}"))))
(tu-eq "geruest-dummy-wahl/ohne" "basis.dwg"
(car (geruest-dummy-wahl
(ssg-json-parse "{\"name\": \"X\"}")
(ssg-json-parse "{\"dummy\": \"basis.dwg\"}"))))
;; --- Mengenfeld ---
(tu-eq "geruest-zahl-p/ziffern" T (geruest-zahl-p "12"))
(tu-eq "geruest-zahl-p/text" nil (geruest-zahl-p "1a"))
(tu-eq "geruest-zahl-p/leer" nil (geruest-zahl-p ""))
;; Leeres Feld uebernimmt die JSON-Vorgabe, ungueltiges liefert nil
(tu-eq "geruest-menge-wert/leer" 2 (geruest-menge-wert "" 2))
(tu-eq "geruest-menge-wert/zahl" 5 (geruest-menge-wert "5" 2))
(tu-eq "geruest-menge-wert/null" nil (geruest-menge-wert "0" 2))
(tu-eq "geruest-menge-wert/text" nil (geruest-menge-wert "abc" 2))
(tu-eq "geruest-menge-wert/negativ" nil (geruest-menge-wert "-3" 2))
(tu-eq "geruest-anzahl-wert/leer" 2 (geruest-anzahl-wert "" 2))
(tu-eq "geruest-anzahl-wert/zahl" 5 (geruest-anzahl-wert "5" 2))
(tu-eq "geruest-anzahl-wert/null" nil (geruest-anzahl-wert "0" 2))
(tu-eq "geruest-anzahl-wert/text" nil (geruest-anzahl-wert "abc" 2))
(tu-eq "geruest-anzahl-wert/negativ" nil (geruest-anzahl-wert "-3" 2))
;; --- Stueckzahl ersetzt die JSON-Menge (Einzelteil) ---
(tu-eq "geruest-artnr-n/einzelteil" '("825002019" "825002019" "825002019")
(geruest-artikelnummern-n _eintrag 3))
;; --- Einzelteil: Anzahl (Dialog) x stueckzahl (JSON, hier 2) ---
(tu-eq "geruest-artnr-n/einzelteil" 6
(length (geruest-artikelnummern-n _eintrag 3)))
;; --- Gruppe: ganzes Set n-mal, Mengen INNERHALB bleiben erhalten ---
(tu-eq "geruest-artnr-n/gruppe" '("111" "222" "222" "111" "222" "222")
(geruest-artikelnummern-n _gruppe 2))
@@ -894,7 +935,7 @@
(setq _teile (ssg-json-parse
(strcat "{\"name\": \"Set\", \"farbig\": true, \"teile\": ["
"{\"artikel\": \"A\", \"sivas_id\": 111},"
"{\"artikel\": \"B\", \"sivas_id\": 222, \"menge\": 2}]}")))
"{\"artikel\": \"B\", \"sivas_id\": 222, \"stueckzahl\": 2}]}")))
(tu-eq "geruest-paare/gruppe-erbt" '(("111" . T) ("222" . T) ("222" . T))
(geruest-teile-paare _teile nil))
(tu-eq "geruest-paare-n/gruppe" 6 (length (geruest-teile-paare-n _teile 2)))
@@ -934,8 +975,8 @@
;; die ganze Konfiguration verworfen)
(setq _konfig (ssg-json-parse
(strcat "{\"name\": \"K1\", \"oben\": ["
"{\"artikel\": \"Schraubenset\", \"menge\": 3},"
"{\"artikel\": \"unbekannt\", \"menge\": 1}]}")))
"{\"artikel\": \"Schraubenset\", \"anzahl\": 3},"
"{\"artikel\": \"unbekannt\", \"anzahl\": 1}]}")))
(tu-eq "geruest-konfig-position" '(nil 3)
(geruest-konfig-position _konfig "oben" _teile))
@@ -1172,18 +1213,21 @@
_bgtest "LAENGENABZUGENDE" "aktiv"))
;; --- Rohr-Geruest-Traeger in der echten Datendatei ---
;; Eigener Dialog: im Bereichs-Dropdown von GERUEST darf er fehlen,
;; ueber geruest-baugruppe muss er aber auffindbar sein.
;; 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)
(setq _traeger (geruest-baugruppe "Traeger"))
(tu-true "geruest/traeger-datei"
(findfile (geruest-json-pfad "geruest_traeger.json")))
(setq _traeger (geruest-baugruppe "Traeger" (geruest-traeger-daten)))
(tu-true "geruest/traeger-vorhanden" _traeger)
(tu-nil "geruest/traeger-nicht-in-geruest-json"
(geruest-baugruppe "Traeger" (geruest-daten)))
(if _traeger
(progn
(tu-eq "geruest/traeger-einfuegeart" "linie"
(ssg-json-get _traeger "einfuegeart"))
(tu-eq "geruest/traeger-varianten-artikel" 0
(tu-geruest-artikel-unvollstaendig
(ssg-json-get _traeger "geometrie_varianten")))
@@ -1236,7 +1280,7 @@
(cons "laenge" "2000")
(cons "teilefarbe" "RAL 7035 Lichtgrau")
(cons "oben" (list (list (cons "artikel" "ROHRKLAMMER 1\" KPL. VERTIKAL")
(cons "menge" 2))))
(cons "anzahl" 2))))
(cons "unten" nil)))
(setq _pfad (vl-filename-mktemp "grtest" nil ".json"))
(setq _f (open _pfad "w"))
@@ -1256,8 +1300,8 @@
(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-menge" 2
(ssg-json-get (car (ssg-json-get _zurueck "oben")) "menge"))
(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"))
)