Update der Attribute Höhe und Drehung vor Aufruf der Exports durchgeführt

This commit is contained in:
2026-06-11 12:08:40 +02:00
parent 0e8d264b6a
commit 9fe08411df
5 changed files with 79 additions and 19 deletions
+31
View File
@@ -108,6 +108,31 @@
)
;; --- HOEHE/DREHUNG aller Omniflo-Elemente still aktualisieren ---
;; Wird automatisch vor jedem Export aufgerufen.
(defun omni:update-all-attribs ( / ss i ename ed bname teileart)
(setq ss (ssget "X" (list (cons 0 "INSERT"))))
(if ss
(progn
(setq i 0)
(while (setq ename (ssname ss i))
(setq ed (entget ename))
(setq bname (cdr (assoc 2 ed)))
(setq teileart (csv:get-attrib ename "TEILEART"))
(if (or teileart
(wcmatch (strcase bname) "AP110*,AP_110*"))
(progn
(omni:set-hoehe-attrib ename)
(omni:set-drehung-attrib ename)
)
)
(setq i (1+ i))
)
)
)
)
;; --- Gemeinsame Export-Funktion ---
;; Sammelt relevante Bloecke, schreibt JSON, ruft Python auf.
;; label = Anzeigename (z.B. "EXPORTCSV")
@@ -115,6 +140,9 @@
;; csv-name = Ergebnis-CSV-Name (z.B. "export.csv")
(defun csv:run-export (label py-name csv-name / ss i ename fh out-pfad
py-skript ergebnis-pfad cmd first-block count)
;; Vor dem Export HOEHE/DREHUNG aller Omniflo-Elemente aktualisieren
(princ (strcat "\n[" label "] Aktualisiere Hoehe/Drehung..."))
(omni:update-all-attribs)
(princ (strcat "\n[" label "] Sammle relevante Bloecke..."))
(setq ss (csv:collect-export-blocks))
@@ -338,6 +366,9 @@
len-ap110 len-ap60 laenge-str
fh out-pfad lines subtyp merkmale)
;; Vor dem Export HOEHE/DREHUNG aller Omniflo-Elemente aktualisieren
(princ "\n[OMNI_EXPORT] Aktualisiere Hoehe/Drehung...")
(omni:update-all-attribs)
(princ "\n[OMNI_EXPORT] Sammle Omniflo-Elemente...")
(setq ss-all (ssget "X" (list (cons 0 "INSERT"))))
(if (null ss-all)
+1
View File
@@ -26,6 +26,7 @@
;; KreiselInsert.lsp entfernt - ersetzt durch Python/PyRx (lib/elemente/kreisel.py, eckrad.py)
(load (strcat base-path "VarioFoerderer.lsp") "VarioFoerderer.lsp nicht gefunden")
(load (strcat base-path "Gefaellestrecke.lsp") "Gefaellestrecke.lsp nicht gefunden")
(load (strcat base-path "export.lsp") "export.lsp nicht gefunden")
(load (strcat base-path "tests.lsp") "tests.lsp nicht gefunden")
;; OmniModulInsert.lsp entfernt - ersetzt durch Python/PyRx (lib/elemente/omniflo*.py)
(load (strcat base-path "SSG_LIB_Commands.lsp") "SSG_LIB_Commands.lsp nicht gefunden")
+22 -8
View File
@@ -43,13 +43,30 @@ def generate_shape_id():
# Merkmale-Builder
# ---------------------------------------------------------------------------
def get_hoehe(block):
"""Liest HOEHE aus Block-Attributen. Fallback: Z-Koordinate."""
attribs = block.get("attribs", {})
return attribs.get("HOEHE") or str(int(block.get("z", 0) or 0)) or "2000"
def get_drehung(block):
"""Liest DREHUNG aus Block-Attributen. Fallback: CAD-Rotation."""
attribs = block.get("attribs", {})
drehung_raw = attribs.get("DREHUNG")
if drehung_raw is not None:
try:
return float(drehung_raw)
except (ValueError, TypeError):
pass
return block.get("rotation", 0.0)
def build_bogen_merkmale(block, eintrag):
return {
"Länge in Meter": "0",
"Kurvenwinkel": eintrag.get("KurvenWinkel", 0),
"Radius": eintrag.get("Radius", 0),
"Höhe": "2000",
"Drehung": block.get("rotation", 0.0),
"Höhe": get_hoehe(block),
"Drehung": get_drehung(block),
"SivasNummer": str(eintrag.get("Sivasnr", ""))
}
@@ -57,14 +74,11 @@ def build_bogen_merkmale(block, eintrag):
def build_weiche_merkmale(block, eintrag):
wt = eintrag.get("WeichenTyp", "Einzelweiche")
return {
"Länge in Meter links": 0,
"Länge in Meter rechts": 0,
"Länge in Meter gerade": 0,
"Weichentyp": wt,
"Richtung": str(eintrag.get("KurvenRichtung", "")),
"Weichenwinkel": eintrag.get("KurvenWinkel", 0),
"Höhe": "2000",
"Drehung": block.get("rotation", 0.0),
"Höhe": get_hoehe(block),
"Drehung": get_drehung(block),
"Antrieb Kurve": eintrag.get("SivasnrTEF") is not None,
"SivasNummer": str(eintrag.get("Sivasnr", ""))
}
+22 -8
View File
@@ -60,14 +60,31 @@ def classify_weiche(eintrag):
return "einzelweiche"
def get_hoehe(block):
"""Liest HOEHE aus Block-Attributen. Fallback: Z-Koordinate."""
attribs = block.get("attribs", {})
return attribs.get("HOEHE") or str(int(block.get("z", 0) or 0)) or "2000"
def get_drehung(block):
"""Liest DREHUNG aus Block-Attributen. Fallback: CAD-Rotation."""
attribs = block.get("attribs", {})
drehung_raw = attribs.get("DREHUNG")
if drehung_raw is not None:
try:
return float(drehung_raw)
except (ValueError, TypeError):
pass
return block.get("rotation", 0.0)
def build_bogen_merkmale(block, eintrag):
"""Merkmale-JSON fuer einen Omniflo Bogen."""
return {
"Länge in Meter": "0",
"Kurvenwinkel": eintrag.get("KurvenWinkel", 0),
"Radius": eintrag.get("Radius", 0),
"Höhe": "2000",
"Drehung": block.get("rotation", 0.0),
"Höhe": get_hoehe(block),
"Drehung": get_drehung(block),
"SivasNummer": str(eintrag.get("Sivasnr", ""))
}
@@ -76,14 +93,11 @@ def build_weiche_merkmale(block, eintrag):
"""Merkmale-JSON fuer eine Omniflo Weiche."""
wt = eintrag.get("WeichenTyp", "Einzelweiche")
return {
"Länge in Meter links": 0,
"Länge in Meter rechts": 0,
"Länge in Meter gerade": 0,
"Weichentyp": wt,
"Richtung": str(eintrag.get("KurvenRichtung", "")),
"Weichenwinkel": eintrag.get("KurvenWinkel", 0),
"Höhe": "2000",
"Drehung": block.get("rotation", 0.0),
"Höhe": get_hoehe(block),
"Drehung": get_drehung(block),
"Antrieb Kurve": eintrag.get("SivasnrTEF") is not None,
"SivasNummer": str(eintrag.get("Sivasnr", ""))
}
+3 -3
View File
@@ -63,9 +63,9 @@
[Doppel Parallel 200/750 M]^C^COMNI_WP_Doppel
[<-Dreiwege Parallel 200/750 M]^C^COMNI_WP_Dreiwege
[->Weichenkoerper]
[Weichenkoerper Einfach 22.5 links M]^C^COMNI_WK_Einfach
[Weichenkoerper Doppel 22.5 M]^C^COMNI_WK_Doppel
[<-Weichenkoerper Dreiwege 22.5 M]^C^COMNI_WK_Dreiwege
[Einfach 22.5 links M]^C^COMNI_WK_Einfach
[Doppel 22.5 M]^C^COMNI_WK_Doppel
[<-Dreiwege 22.5 M]^C^COMNI_WK_Dreiwege
[->Weichenkombinationen]
[Delta 1400/700 M]^C^COMNI_WKomb_Delta
[<-Star 1400/1400 M]^C^COMNI_WKomb_Star