diff --git a/Lisp/OmniModulInsert.lsp b/Lisp/OmniModulInsert.lsp index 7b43477..5588753 100644 --- a/Lisp/OmniModulInsert.lsp +++ b/Lisp/OmniModulInsert.lsp @@ -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//). 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) )