feat: Eckrad-Dialog, Kreiselname, Hoehen-Neuberechnung beim Export
- Eckrad: eigener DCL-Dialog (eckrad_edit.dcl) beim Einfuegen und per Doppelklick (EckradEdit); Sivas-Merkmale am Kreisel ausgerichtet (2950, 3381, 3992 Ja/Nein); bei Sep./Scanner-Zaehlung ausgenommen - Kreisel: eigener Name bleibt in Bezeichnung + Beschriftung erhalten - Sivas: Kreisel/Eckrad unterschiedlicher Hoehe nicht mehr zusammengefasst - Export: Hoehen-Attribute in Z verschobener Kreisel/Eckrad/VF/GF neu berechnet - GF-Edit: Einfuegehoehe aus aktueller Z-Koordinate
This commit is contained in:
@@ -2493,6 +2493,77 @@
|
||||
;; Sammelt relevante Bloecke, schreibt JSON, ruft Python auf.
|
||||
;; label = Anzeigename (z.B. "EXPORTCSV")
|
||||
;; --- Export-Vorbereitung: Zeichnungszustand fuer den Export herrichten ---
|
||||
;; --- Hoehen-Attribute aus der Z-Koordinate neu berechnen ---
|
||||
;; Reiner Kern (in tests/test_unit.lsp getestet). Wird ein Kreisel/Eckrad/VF_n/
|
||||
;; GF_n nachtraeglich in Z verschoben, sind seine Hoehen-Attribute veraltet.
|
||||
;; Rechnet dieselben Formeln/Rundungen wie beim Bau:
|
||||
;; KREISEL: HOEHE = (rtos z 2 0), MONTAGEHOEHE_m = (rtos z/1000 2 3) (draw-module)
|
||||
;; ECKRAD : HOEHE = (rtos z 2 0) (ils-eckrad-insert)
|
||||
;; GF : VON = (fix z), MONTAGEHOEHE_m = (rtos z/1000 2 3) (gf-block-erstellen)
|
||||
;; VF : VON = (fix z), MONTAGEHOEHE_m = (rtos (VON+BIS)/2000 2 3) (vf_core/vf_linienzug)
|
||||
;; GF/VF : BIS = VON - (VON_alt - BIS_alt). NICHT z - DELTA_H_mm: DELTA_H_mm
|
||||
;; ist ohne Vorzeichen (steigende VF!) und separat abgeschnitten.
|
||||
;; DELTA_H_mm nur als Rueckfall, wenn VON/BIS fehlen.
|
||||
;; art = "KREISEL"/"ECKRAD"/"GF"/"VF", z = Einfuege-Z (VF/GF: Kettenstart),
|
||||
;; attribs = bisherige Attribut-alist.
|
||||
;; Rueckgabe: alist der neuen Werte, oder nil, wenn der Block nicht verschoben
|
||||
;; wurde (Attribut passt noch zu z) - dann bleibt er bit-genau beim Bau-Wert.
|
||||
(defun csv:hoehen-werte (art z attribs / alt von von-alt bis-alt diff bis)
|
||||
(cond
|
||||
((member art '("KREISEL" "ECKRAD"))
|
||||
(setq alt (cdr (assoc "HOEHE" attribs)))
|
||||
(if (not (and alt (/= alt "") (equal (atof alt) (atof (rtos z 2 0)) 1e-6)))
|
||||
(if (= art "KREISEL")
|
||||
(list (cons "HOEHE" (rtos z 2 0))
|
||||
(cons "MONTAGEHOEHE_m" (rtos (/ z 1000.0) 2 3)))
|
||||
(list (cons "HOEHE" (rtos z 2 0))))))
|
||||
((member art '("GF" "VF"))
|
||||
(setq von (fix z)
|
||||
von-alt (cdr (assoc "HOEHE_VON_mm" attribs))
|
||||
bis-alt (cdr (assoc "HOEHE_BIS_mm" attribs)))
|
||||
(if (not (and von-alt (/= von-alt "") (= (atoi von-alt) von)))
|
||||
(progn
|
||||
(setq diff (if (and von-alt (/= von-alt "") bis-alt (/= bis-alt ""))
|
||||
(- (atoi von-alt) (atoi bis-alt))
|
||||
(atoi (cond ((cdr (assoc "DELTA_H_mm" attribs))) ("0")))))
|
||||
(setq bis (- von diff))
|
||||
(list (cons "HOEHE_VON_mm" (itoa von))
|
||||
(cons "HOEHE_BIS_mm" (itoa bis))
|
||||
(cons "MONTAGEHOEHE_m"
|
||||
(if (= art "GF")
|
||||
(rtos (/ z 1000.0) 2 3)
|
||||
(rtos (/ (+ von bis) 2000.0) 2 3)))))))
|
||||
)
|
||||
)
|
||||
|
||||
;; Hoehen-Attribute aller Kreisel/Eckrad/VF_n/GF_n pruefen und bei in Z
|
||||
;; verschobenen Bloecken neu setzen (csv:hoehen-werte). Laeuft als erster
|
||||
;; Schritt von csv:export-vorbereiten, gilt also fuer EXPORTSIVAS und EXPORTCSV.
|
||||
(defun csv:hoehen-aktualisieren ( / ss i ent ed bname art werte n)
|
||||
(setq n 0)
|
||||
(if (setq ss (ssget "_X" '((0 . "INSERT") (2 . "KREISEL_*,ECKRAD_*,VF_*,GF_*"))))
|
||||
(progn
|
||||
(setq i 0)
|
||||
(while (setq ent (ssname ss i))
|
||||
(setq ed (entget ent)
|
||||
bname (strcase (cdr (assoc 2 ed))))
|
||||
(setq art (cond ((wcmatch bname "KREISEL_*") "KREISEL")
|
||||
((wcmatch bname "ECKRAD_*") "ECKRAD")
|
||||
((wcmatch bname "GF_*") "GF")
|
||||
((wcmatch bname "VF_*") "VF")))
|
||||
(setq werte (csv:hoehen-werte art (cadddr (assoc 10 ed)) (ssg-attrib-read ent)))
|
||||
(if werte
|
||||
(progn
|
||||
(ssg-attrib-set-on ent werte)
|
||||
(setq n (1+ n))))
|
||||
(setq i (1+ i))
|
||||
)
|
||||
)
|
||||
)
|
||||
(if (> n 0) (princ (ssg-textf "exp-hoehen-aktualisiert" (list n))))
|
||||
n
|
||||
)
|
||||
|
||||
;; Aus csv:run-export ausgelagert: alle Schritte, die VOR dem Sammeln/Schreiben
|
||||
;; den Zeichnungszustand herrichten - IDs sicherstellen, Stellvertreter der
|
||||
;; verpackten Kettenbausteine erzeugen und nummerieren, Omniflo-Attribute
|
||||
@@ -2522,6 +2593,9 @@
|
||||
(setq *csv-res-sammlung* nil)
|
||||
(setq *csv-ketten* nil)
|
||||
(setq *csv-sepliste-id-by-handle* nil)
|
||||
;; 0. Hoehen-Attribute in Z verschobener Kreisel/Eckrad/VF/GF nachziehen,
|
||||
;; damit Sivas- und Raw-Export die aktuelle Hoehe sehen.
|
||||
(csv:hoehen-aktualisieren)
|
||||
;; 1. IDs aller Bloecke sicherstellen und Duplikate korrigieren - hier nur
|
||||
;; fuer die dauerhaften Bloecke, Stellvertreter gibt es noch keine.
|
||||
(princ (ssg-textf "exp-check-ids" (list label)))
|
||||
|
||||
Reference in New Issue
Block a user