Für Omniflo Elemente eigene Funktion zur AUflösung des Pfades 2D3D oder 3D2D gebaut

This commit is contained in:
2026-10-09 16:29:13 +02:00
parent 9bb593ab6f
commit 009d3488b5
+59 -16
View File
@@ -949,6 +949,56 @@
;; Der Benutzer waehlt den Einfuegepunkt und Drehwinkel.
;; ============================================================
;; --- Omniflo-Quelldatei fuer eine SivasNr aufloesen ---
;; Sucht sivasnr-str.dxf, dann .dwg im aktuellen DXFM_OMNIFLO-Ordner
;; (data/omniflo/<DXFM_DIM>/). Omniflo-Bloecke liegen - anders als die
;; ILS-Bloecke in data/ils (Dimensionssuffix _2D/_3D im Dateinamen, flach in
;; EINEM Ordner) - in GETRENNTEN Ordnern data/omniflo/2D/ und .../3D/ ohne
;; Dimensionssuffix im Namen. Ist der 3D-Datensatz (noch) unvollstaendig
;; (Stand 2026: nur BTMT-Beladung als 3D-DWG vorhanden), faellt diese
;; Funktion auf den jeweils ANDEREN Dimensionsordner zurueck, statt mit
;; "DXF nicht gefunden" abzubrechen - mit Warnmeldung, da das Ergebnis dann
;; nicht die gewuenschte Dimension ist. Rueckgabe: Dateipfad oder nil.
(defun omni:omniflo-datei-finden (sivasnr-str omniflo-pfad / dxf-pfad partner-pfad partner-dim basis pfad-norm)
(setq dxf-pfad (strcat omniflo-pfad "/" sivasnr-str ".dxf"))
;; Fallback: manche Elemente (z.B. Ladeschleifen) liegen nur als DWG vor
(if (and (not (findfile dxf-pfad))
(findfile (strcat omniflo-pfad "/" sivasnr-str ".dwg")))
(setq dxf-pfad (strcat omniflo-pfad "/" sivasnr-str ".dwg"))
)
(if (findfile dxf-pfad)
dxf-pfad
(progn
;; Fallback: anderer Dimensionsordner (2D<->3D), falls die gewuenschte
;; Dimension fuer dieses Element (noch) nicht vorliegt. DXFM_OMNIFLO
;; kommt aus setenv.bat mit Backslashes (%DXFMAKRO%\data\omniflo\%DIM%) -
;; vor der Suche auf Forward-Slash normalisieren.
(setq pfad-norm (vl-string-translate "\\" "/" omniflo-pfad))
(setq partner-dim (cond ((vl-string-search "/3D" pfad-norm) "2D")
((vl-string-search "/2D" pfad-norm) "3D")
(t nil)))
(if partner-dim
(progn
(setq basis (substr pfad-norm 1 (- (strlen pfad-norm) 2)))
(setq partner-pfad (strcat basis partner-dim "/" sivasnr-str ".dxf"))
(if (and (not (findfile partner-pfad))
(findfile (strcat basis partner-dim "/" sivasnr-str ".dwg")))
(setq partner-pfad (strcat basis partner-dim "/" sivasnr-str ".dwg"))
)
(if (findfile partner-pfad)
(progn
(princ (ssg-textf "omni-fallback-andere-dim" (list sivasnr-str partner-dim)))
partner-pfad
)
nil
)
)
nil
)
)
)
)
;; --- DXF-Datei als Block einfuegen ---
;; sivasnr-str = SivasNr als String (Dateiname ohne .dxf)
;; hoehe = Hoehe in mm als String (wird als HOEHE-Attribut gesetzt)
@@ -963,15 +1013,10 @@
nil
)
(progn
(setq dxf-pfad (strcat omniflo-pfad "/" sivasnr-str ".dxf"))
;; Fallback: manche Elemente (z.B. Ladeschleifen) liegen nur als DWG vor
(if (and (not (findfile dxf-pfad))
(findfile (strcat omniflo-pfad "/" sivasnr-str ".dwg")))
(setq dxf-pfad (strcat omniflo-pfad "/" sivasnr-str ".dwg"))
)
(if (not (findfile dxf-pfad))
(setq dxf-pfad (omni:omniflo-datei-finden sivasnr-str omniflo-pfad))
(if (not dxf-pfad)
(progn
(princ (ssg-textf "omni-fehler-dxf-nicht-gefunden" (list dxf-pfad)))
(princ (ssg-textf "omni-fehler-dxf-nicht-gefunden" (list (strcat omniflo-pfad "/" sivasnr-str ".dxf"))))
nil
)
(progn
@@ -1365,15 +1410,13 @@
(setq new-drehung (rtos rotation 2 1))
(setq sivasnr-str (omni:sivasid-to-str (omni:val new-eintrag "Sivasnr")))
;; 6. DXF-Datei pruefen (Fallback DWG wie in omni:insert-dxf)
(setq dxf-pfad (strcat (getenv "DXFM_OMNIFLO") "/" sivasnr-str ".dxf"))
(if (and (not (findfile dxf-pfad))
(findfile (strcat (getenv "DXFM_OMNIFLO") "/" sivasnr-str ".dwg")))
(setq dxf-pfad (strcat (getenv "DXFM_OMNIFLO") "/" sivasnr-str ".dwg"))
)
(if (not (findfile dxf-pfad))
;; 6. DXF-Datei pruefen (gleiche Aufloesung inkl. 2D/3D-Fallback wie in
;; omni:insert-dxf, siehe omni:omniflo-datei-finden)
(setq dxf-pfad (omni:omniflo-datei-finden sivasnr-str (getenv "DXFM_OMNIFLO")))
(if (not dxf-pfad)
(progn
(ssg-emsg (ssg-textf "omni-edit-dxf-nicht-gefunden" (list dxf-pfad)))
(ssg-emsg (ssg-textf "omni-edit-dxf-nicht-gefunden"
(list (strcat (getenv "DXFM_OMNIFLO") "/" sivasnr-str ".dxf"))))
(ssg-end)
(exit)
)