feat: GR_-Geruest-Baugruppen in EXPORTCSV/EXPORTSIVAS aufnehmen
GR_-Bloecke werden jetzt wie BTMT eigenstaendig gesammelt (LISP: neues pattern_geruest in cfg/export.cfg, csv:collect-export-blocks, ssg-id-collect-blocks + ID-ATTDEF in *geruest-attrib-defs*) und in beiden Python-Exporten als eigene TeileArt-Zeile ausgegeben: ARTINR/BEZEICHNUNG/ TEILEART/LAENGE in festen Spalten, restliche Attribute (FARBE/LAYER) im Merkmale-/details-JSON. Dabei zwei Bugs behoben, die beim ersten echten GR_-Export sichtbar wurden: - csv:json-escape nutzte vl-string-subst (ersetzt nur das erste Vorkommen) statt des global ersetzenden ssg-str-replace-all - bei Attributwerten mit mehreren Anfuehrungszeichen blieb ein Zeichen unescaped und brach die JSON-Struktur beim Python-Parsen. - Gradzeichen (°) in data/json/geruest.json durch "Grad" ersetzt, um das Encoding-Risiko (cp1252 vs. UTF-8 beim LISP-Export) zu vermeiden.
This commit is contained in:
@@ -24,9 +24,15 @@
|
||||
|
||||
;; Attribut-Schema des Wrapper-Blocks. Die Dummy-DWG darf eigene Tags
|
||||
;; mitbringen - die bleiben erhalten (ssg-attrib-merge).
|
||||
;; "ID" (leer vorbelegt, wie bei Kreisel/VF_n/GF_n) ist Voraussetzung dafuer,
|
||||
;; dass ssg-id-check-all dem Block ueberhaupt eine ID zuweisen kann -
|
||||
;; ssg-attrib-set-on schreibt nur auf ein bereits vorhandenes ATTDEF, siehe
|
||||
;; oben. Ohne diesen Eintrag bliebe ID fuer immer leer (csv:read-attribs
|
||||
;; exportiert dann eben kein "ID"-Feld statt eines Werts).
|
||||
(if (null *geruest-attrib-defs*)
|
||||
(setq *geruest-attrib-defs*
|
||||
'(("ARTINR" "")
|
||||
'(("ID" "")
|
||||
("ARTINR" "")
|
||||
("LAENGE" "")
|
||||
("BEZEICHNUNG" "")
|
||||
("TEILEART" "")
|
||||
|
||||
+13
-2
@@ -198,12 +198,18 @@
|
||||
|
||||
;; --- String fuer JSON escapen (Anfuehrungszeichen/Backslash) ---
|
||||
;; Konvertiert nicht-String-Werte (z.B. T, nil, Zahlen) defensiv in String.
|
||||
;; ssg-str-replace-all (ssg_lang.lsp) statt vl-string-subst: vl-string-subst
|
||||
;; ersetzt nur das ERSTE Vorkommen, nicht alle - bei einem Attributwert mit
|
||||
;; MEHREREN Anfuehrungszeichen (z.B. BEZEICHNUNG einer Geruest-Baugruppe mit
|
||||
;; zwei Zoll-Angaben wie 'F. 2" UND 1" ROHR') blieb das zweite Vorkommen
|
||||
;; unescaped stehen und brach die JSON-Struktur beim Python-Parsen (realer
|
||||
;; Bug, behoben) - export_raw.json/EXPORTCSV.
|
||||
(defun csv:json-escape (s)
|
||||
(if (not (= (type s) 'STR))
|
||||
(setq s (if s (vl-princ-to-string s) ""))
|
||||
)
|
||||
(setq s (vl-string-subst "\\\\" "\\" s))
|
||||
(vl-string-subst "\\\"" "\"" s)
|
||||
(setq s (ssg-str-replace-all "\\\\" "\\" s))
|
||||
(ssg-str-replace-all "\\\"" "\"" s)
|
||||
)
|
||||
|
||||
|
||||
@@ -1082,6 +1088,10 @@
|
||||
;; ils-insert-station in SSG_LIB_Commands.lsp). Anders als Separator/
|
||||
;; Scanner werden sie von KEINEM anderen Element mitgezaehlt - export_csv.py
|
||||
;; UND export_sivas.py fuehren sie beide als eigene TeileArt-Zeilen.
|
||||
;; GR_* = Geruest-Baugruppen (siehe pattern_geruest in cfg/export.cfg,
|
||||
;; GeruestInsert.lsp). Wie BTMT eigenstaendig und von keinem anderen
|
||||
;; Element mitgezaehlt - export_csv.py UND export_sivas.py fuehren sie
|
||||
;; beide als eigene TeileArt-Zeilen.
|
||||
;; Gibt Auswahlsatz zurueck oder nil.
|
||||
(defun csv:collect-export-blocks ( / ss-all ss-out i ename ed bname)
|
||||
(setq ss-all (ssget "X" (list (cons 0 "INSERT"))))
|
||||
@@ -1101,6 +1111,7 @@
|
||||
(wcmatch bname (export:pattern "pattern_scanner" "Scanner*"))
|
||||
(wcmatch bname (export:pattern "pattern_btmt_beladung" "BTMT-Beladung*"))
|
||||
(wcmatch bname (export:pattern "pattern_btmt_entladung" "SC_Entladung*"))
|
||||
(wcmatch bname (export:pattern "pattern_geruest" "GR_*"))
|
||||
;; Rein numerische Namen = Omniflo SivasNr (Boegen/Weichen)
|
||||
;; Rein LISP-intern (Python klassifiziert Omniflo stattdessen
|
||||
;; ueber exakten Katalog-Match), daher fest im Code statt in
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
;; pattern_btmt_entladung in cfg/export.cfg) aus demselben Grund: sonst bleibt
|
||||
;; ihre ID trotz ATTDEF leer und sie fehlen bei der zeichnungsweiten Duplikat-
|
||||
;; pruefung/Maximum-Ermittlung (ssg-id-check-all).
|
||||
;; GR_* (Geruest-Baugruppen, siehe pattern_geruest in cfg/export.cfg) ebenso -
|
||||
;; das ID-ATTDEF steht seit *geruest-attrib-defs* zur Verfuegung.
|
||||
(defun ssg-id-collect-blocks ( / ss-all ss-out i ename ed bname)
|
||||
(dbgf "ssg-id-collect-blocks")
|
||||
(setq ss-all (ssget "X" (list (cons 0 "INSERT"))))
|
||||
@@ -55,6 +57,7 @@
|
||||
(wcmatch bname "Vario*,Staustrecke*,AUS_Element*,EIN_Element*,VF_*,GF_*")
|
||||
(wcmatch bname "Separator_SP*,S-LP*,Scanner*")
|
||||
(wcmatch bname "BTMT-Beladung*,SC_Entladung*")
|
||||
(wcmatch bname "GR_*")
|
||||
(wcmatch bname "#*")
|
||||
)
|
||||
(ssadd ename ss-out)
|
||||
|
||||
Reference in New Issue
Block a user