Update der Attribute Höhe und Drehung vor Aufruf der Exports durchgeführt
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user