[MERGE] export Konflikt gelöst
This commit is contained in:
+144
-5
@@ -964,6 +964,11 @@
|
||||
)
|
||||
(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))
|
||||
(progn
|
||||
(princ (ssg-textf "omni-fehler-dxf-nicht-gefunden" (list dxf-pfad)))
|
||||
@@ -1230,7 +1235,7 @@
|
||||
typ eintrag winkel weichentyp
|
||||
dlg-result new-eintrag new-hoehe new-drehung
|
||||
basePoint sivasnr-str dxf-pfad data-pfad angleDeg blockEnt
|
||||
layer-name)
|
||||
layer-name such)
|
||||
|
||||
;; Implied Selection pruefen
|
||||
(setq ss (ssget "I"))
|
||||
@@ -1307,6 +1312,20 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; Zuletzt in Ladeschleifen suchen (ARTINR, dann Blockname)
|
||||
(if (null eintrag)
|
||||
(progn
|
||||
(if (null *OMNI-LADESCHLEIFEN*) (omni:load-ladeschleifen))
|
||||
(foreach such (list artinr bname)
|
||||
(if (and such (null eintrag))
|
||||
(setq eintrag (omni:get-by-sivasid *OMNI-LADESCHLEIFEN*
|
||||
(if (/= (atoi such) 0) (atoi such) such)))
|
||||
)
|
||||
)
|
||||
(if eintrag (setq typ "ladeschleife"))
|
||||
)
|
||||
)
|
||||
|
||||
(if (null eintrag)
|
||||
(progn
|
||||
(ssg-emsg (ssg-text "omni-edit-kein-element"))
|
||||
@@ -1317,12 +1336,15 @@
|
||||
|
||||
;; 4. Dialog oeffnen mit vorhandenen Werten
|
||||
(setq dlg-result nil)
|
||||
(if (= typ "bogen")
|
||||
(progn
|
||||
(cond
|
||||
((= typ "bogen")
|
||||
(setq winkel (cdr (assoc "KurvenWinkel" eintrag)))
|
||||
(setq dlg-result (omni:bogen-dialog winkel hoehe drehung nil))
|
||||
)
|
||||
(progn
|
||||
((= typ "ladeschleife")
|
||||
(setq dlg-result (omni:ladeschleifen-dialog nil hoehe))
|
||||
)
|
||||
(T
|
||||
(setq winkel (cdr (assoc "KurvenWinkel" eintrag)))
|
||||
(setq weichentyp (cdr (assoc "WeichenTyp" eintrag)))
|
||||
(setq dlg-result (omni:weichen-dialog winkel weichentyp hoehe drehung nil))
|
||||
@@ -1343,8 +1365,12 @@
|
||||
(setq new-drehung (rtos rotation 2 1))
|
||||
(setq sivasnr-str (omni:sivasid-to-str (omni:val new-eintrag "Sivasnr")))
|
||||
|
||||
;; 6. DXF-Datei pruefen
|
||||
;; 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))
|
||||
(progn
|
||||
(ssg-emsg (ssg-textf "omni-edit-dxf-nicht-gefunden" (list dxf-pfad)))
|
||||
@@ -1446,6 +1472,119 @@
|
||||
(princ)
|
||||
)
|
||||
|
||||
|
||||
;; --- Omniflo / Ladeschleifen ---
|
||||
;; Datenbasis: data/json/omniflo_ladeschleifen.json. Die Beschreibungen
|
||||
;; enthalten Kommas, daher der rekursive Parser ssg-json-laden statt des
|
||||
;; zeilenbasierten ssg-load-json (siehe ssg_core.lsp).
|
||||
|
||||
;; Ladeschleifen-Daten laden (in *OMNI-LADESCHLEIFEN*)
|
||||
(defun omni:load-ladeschleifen ( / data-pfad datei)
|
||||
(setq data-pfad (getenv "DXFM_DATA"))
|
||||
(if (null data-pfad)
|
||||
(progn (princ (ssg-text "omni-fehler-dxfm-data")) nil)
|
||||
(progn
|
||||
(setq datei (strcat data-pfad "/json/omniflo_ladeschleifen.json"))
|
||||
(setq *OMNI-LADESCHLEIFEN* (ssg-json-laden datei))
|
||||
(if *OMNI-LADESCHLEIFEN*
|
||||
(princ (strcat "\n[OMNI] " (itoa (length *OMNI-LADESCHLEIFEN*)) " Ladeschleifen geladen."))
|
||||
(princ (strcat "\n[OMNI] WARNUNG: Keine Ladeschleifen geladen aus " datei))
|
||||
)
|
||||
*OMNI-LADESCHLEIFEN*
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
;; Zahl als Ganzzahl-String fuer die Dialoganzeige ("" wenn kein Zahlwert)
|
||||
(defun omni:zahl-str (v)
|
||||
(if (numberp v) (itoa (fix v)) "")
|
||||
)
|
||||
|
||||
|
||||
;; Detail-Felder im Ladeschleifen-Dialog aktualisieren (action_tile callback)
|
||||
(defun omni:ladeschleife-dlg-update (idx-str / eintrag)
|
||||
(setq eintrag (nth (atoi idx-str) *OMNI-DLG-LADESCHLEIFEN*))
|
||||
(if eintrag
|
||||
(progn
|
||||
(set_tile "val_sivasnr" (omni:sivasid-to-str (omni:val eintrag "Sivasnr")))
|
||||
(set_tile "val_profiltyp" (omni:sivasid-to-str (omni:val eintrag "ProfilTyp")))
|
||||
(set_tile "val_laenge" (omni:zahl-str (omni:val eintrag "Laenge")))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
;; Ladeschleifen-Auswahl-Dialog oeffnen
|
||||
;; profiltyp = Praefix zum Filtern des ProfilTyp, z.B. "AP 110" (nil = alle)
|
||||
;; init-hoehe = Vorbelegung Hoehe (nil = Default aus cfg)
|
||||
;; Rueckgabe: (eintrag hoehe nil) wie omni:bogen-dialog, oder nil bei Abbruch
|
||||
(defun omni:ladeschleifen-dialog (profiltyp init-hoehe / liste dat ergebnis dlg-hoehe profil)
|
||||
(if (null *OMNI-LADESCHLEIFEN*) (omni:load-ladeschleifen))
|
||||
(if (null init-hoehe) (setq init-hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000")))
|
||||
|
||||
(setq liste *OMNI-LADESCHLEIFEN*)
|
||||
(if profiltyp
|
||||
(setq liste
|
||||
(vl-remove-if-not
|
||||
'(lambda (e)
|
||||
(setq profil (cdr (assoc "ProfilTyp" e)))
|
||||
(and (= (type profil) 'STR) (= (vl-string-search profiltyp profil) 0))
|
||||
)
|
||||
liste
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(if (null liste)
|
||||
(progn
|
||||
(alert (ssg-textf "omni-ladeschleife-keine-gefunden"
|
||||
(list (if profiltyp (strcat " (" profiltyp ")") ""))))
|
||||
nil
|
||||
)
|
||||
(progn
|
||||
(setq *OMNI-DLG-LADESCHLEIFEN* liste)
|
||||
(setq dat (load_dialog (strcat (getenv "DXFM_DCL") "/omniflo_ladeschleifen.dcl")))
|
||||
(if (not (new_dialog "omniflo_ladeschleifen" dat))
|
||||
(progn (alert (ssg-text "omni-ladeschleife-dialog-ladefehler")) nil)
|
||||
(progn
|
||||
(start_list "ladeschleife")
|
||||
(mapcar '(lambda (e) (add_list (omni:sivasid-to-str (omni:val e "Beschreibung")))) liste)
|
||||
(end_list)
|
||||
(set_tile "ladeschleife" "0")
|
||||
(set_tile "val_hoehe" init-hoehe)
|
||||
(omni:ladeschleife-dlg-update "0")
|
||||
|
||||
(action_tile "ladeschleife" "(omni:ladeschleife-dlg-update $value)")
|
||||
(action_tile "accept"
|
||||
(strcat
|
||||
"(setq ergebnis (atoi (get_tile \"ladeschleife\")))"
|
||||
"(setq dlg-hoehe (get_tile \"val_hoehe\"))"
|
||||
"(done_dialog 1)"))
|
||||
(action_tile "cancel" "(done_dialog 0)")
|
||||
|
||||
(start_dialog)
|
||||
(unload_dialog dat)
|
||||
|
||||
(if ergebnis
|
||||
(list (nth ergebnis *OMNI-DLG-LADESCHLEIFEN*) dlg-hoehe nil)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
(defun c:OMNI_LADESCHLEIFE_AP110 ( / dlg-result)
|
||||
(setq dlg-result (omni:ladeschleifen-dialog "AP 110" nil))
|
||||
(if dlg-result
|
||||
(omni:insert-from-entry dlg-result)
|
||||
(princ (ssg-text "omni-abbruch-ladeschleife"))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
;; --- Omniflo / Verbinder ---
|
||||
(defun c:OMNI_TV_W_W ()
|
||||
(princ "\n[DUMMY] TV W-W kpl")
|
||||
|
||||
@@ -571,6 +571,7 @@ AutoLISP-Implementierung fuer alle Omniflo-Komponenten: Boegen, Weichen, Verbind
|
||||
| Boegen | `OMNI_APB_630_90`, `OMNI_APB_550_675`, `OMNI_APB_630_45`, `OMNI_APB_550_225`, `OMNI_APB_650_180` | Omniflo-Boegen ueber DCL-Dialog einfuegen |
|
||||
| Weichen | `OMNI_W90_*`, `OMNI_W45_*`, `OMNI_WP_*`, `OMNI_WK_*`, `OMNI_WKomb_*` | Omniflo-Weichen (Einfach/Doppel/Dreiwege, Delta, Stern) |
|
||||
| Geraden | `OMNI_AP60`, `OMNI_AP110`, `OMNI_APG110` | Omniflo-Geradenstuecke |
|
||||
| Ladeschleifen | `OMNI_LADESCHLEIFE_AP110` | Ladeschleife aus `omniflo_ladeschleifen.json` ueber DCL-Dialog (`dcl/omniflo_ladeschleifen.dcl`) einfuegen; Daten per `ssg-json-laden` (Beschreibungen enthalten Kommas). Blockdatei `<Sivasnr>.dwg` unter `DXFM_OMNIFLO` (`omni:insert-dxf` faellt auf `.dwg` zurueck, wenn keine `.dxf` existiert). Per `OMNI_EDIT` editierbar |
|
||||
| TEF ⚠️ | `OMNI_TEF_UmlenkR/L`, `OMNI_TEF_AntriebL/R`, `OMNI_TEF_Gerade`, `OMNI_KettenFoerderer` | **Dummy** (noch nicht implementiert, im Menue ausgegraut) |
|
||||
| Transferwagen ⚠️ | `OMNI_TV_*` | **Dummy** (noch nicht implementiert, im Menue ausgegraut) |
|
||||
| Bogenweichen ⚠️ | `OMNI_APBW_*` | **Dummy** (noch nicht implementiert, im Menue ausgegraut) |
|
||||
|
||||
+65
-1
@@ -104,6 +104,32 @@
|
||||
(if (car (atoms-family 1 '("DBG-SCHALTER-SET")))
|
||||
(dbg-schalter-set "csv_leave_proxies" (if an 1 0))))
|
||||
|
||||
;; --- Bloecke auf gefrorenen Layern vom Export ausschliessen ---
|
||||
;; Standard an (T). Nur GEFRORENE Layer zaehlen (ssg-ent-layer-gefroren-p,
|
||||
;; ssg_layer.lsp) - ausgeschaltete Layer werden weiter exportiert. Bedienbar
|
||||
;; im Dialog CSV_EXPORT_KONFIG. Wirkt in csv:collect-export-blocks auf den
|
||||
;; Block selbst UND - ueber *csv-ausschluss-enames* - auf die Hilfsobjekte
|
||||
;; (Separator-/Element-Kopien, Einheiten-/AS-ES-Marker) eines gefrorenen
|
||||
;; VF_n/GF_n-Wrappers, die auf eigenen Layern liegen.
|
||||
(if (not (boundp '*csv-gefrorene-ausschliessen*)) (setq *csv-gefrorene-ausschliessen* T))
|
||||
(defun csv:gefrorene-ausschliessen-p () (if *csv-gefrorene-ausschliessen* T nil))
|
||||
(defun csv:gefrorene-ausschliessen-setzen (an)
|
||||
(setq *csv-gefrorene-ausschliessen* (if an T nil)))
|
||||
|
||||
;; Hilfsobjekte (car eines Records), deren Wrapper (nth 1) gefroren-fn
|
||||
;; erfuellt. records = Record-Listen der Form (hilfsobjekt wrapper ...), wie
|
||||
;; sie csv:sep-proxies-erzeugen, csv:element-proxies-erzeugen,
|
||||
;; csv:asmark-aktualisieren und csv:ketten-verarbeiten liefern.
|
||||
;; gefroren-fn = Praedikat auf den Wrapper. Reine Listenlogik, file-frei
|
||||
;; testbar (tests/test_unit.lsp).
|
||||
(defun csv:hilfskopien-ausschluss (records gefroren-fn / result)
|
||||
(foreach rec records
|
||||
(if (and (car rec) (nth 1 rec) (apply gefroren-fn (list (nth 1 rec))))
|
||||
(setq result (cons (car rec) result))))
|
||||
(reverse result)
|
||||
)
|
||||
(setq *csv-ausschluss-enames* nil)
|
||||
|
||||
|
||||
;; --- Feste Datei-/Skriptnamen dieses Moduls (keine Config, direkt im Code) ---
|
||||
(setq *export-filenames*
|
||||
@@ -2353,8 +2379,13 @@
|
||||
;; GeruestInsert.lsp). Wie BTMT eigenstaendig und von keinem anderen
|
||||
;; Element mitgezaehlt - export_csv.py UND export_sivas.py fuehren sie
|
||||
;; beide als eigene TeileArt-Zeilen.
|
||||
;; Bloecke auf GEFRORENEN Layern (und die Hilfsobjekte gefrorener VF_n/GF_n)
|
||||
;; werden ausgelassen, solange *csv-gefrorene-ausschliessen* an ist (Standard,
|
||||
;; Dialog CSV_EXPORT_KONFIG); ausgeschaltete Layer zaehlen nicht als gefroren.
|
||||
;; Gibt Auswahlsatz zurueck oder nil.
|
||||
(defun csv:collect-export-blocks ( / ss-all ss-out i ename ed bname ist-nested-element)
|
||||
(defun csv:collect-export-blocks ( / ss-all ss-out i ename ed bname ist-nested-element
|
||||
gefroren n-gefroren)
|
||||
(setq n-gefroren 0)
|
||||
(setq ss-all (ssget "X" (list (cons 0 "INSERT"))))
|
||||
(if (null ss-all) (setq ss-out nil)
|
||||
(progn
|
||||
@@ -2376,7 +2407,16 @@
|
||||
(setq ist-nested-element
|
||||
(and (not (csv:export-alle-elemente-p))
|
||||
(wcmatch bname (csv:pattern-nested-element))))
|
||||
;; Gefrorener Layer (Schalter *csv-gefrorene-ausschliessen*): der
|
||||
;; Block selbst liegt darauf, oder er ist Hilfsobjekt eines
|
||||
;; gefrorenen VF_n/GF_n (*csv-ausschluss-enames*, csv:export-vorbereiten).
|
||||
(setq gefroren
|
||||
(and (csv:gefrorene-ausschliessen-p)
|
||||
(or (ssg-ent-layer-gefroren-p ename)
|
||||
(member ename *csv-ausschluss-enames*))))
|
||||
(if gefroren (setq n-gefroren (1+ n-gefroren)))
|
||||
(if (and (not ist-nested-element)
|
||||
(not gefroren)
|
||||
(or
|
||||
(wcmatch bname (export:pattern "pattern_kreisel" "KR_*,KREISEL_*,ECKRAD_*"))
|
||||
(wcmatch (strcase bname) (export:pattern "pattern_gerade" "AP110*,AP_110*"))
|
||||
@@ -2404,6 +2444,8 @@
|
||||
(if (= (sslength ss-out) 0) (setq ss-out nil))
|
||||
)
|
||||
)
|
||||
(if (> n-gefroren 0)
|
||||
(princ (ssg-textf "exp-gefroren-ausgelassen" (list (itoa n-gefroren)))))
|
||||
ss-out
|
||||
)
|
||||
|
||||
@@ -2459,6 +2501,9 @@
|
||||
;; Stand eines frueheren Laufs verwerfen: Baustein-Geometrie der
|
||||
;; Stellvertreter, Anmeldungen fuer reservierte IDs (csv:res-merken),
|
||||
;; geordnete Ketten (csv:kette-von), sepliste-Stellvertreter.
|
||||
(setq *csv-ausschluss-enames* nil)
|
||||
;; Baustein-Geometrie der Stellvertreter (Separator-Kopie, AS-/ES-Marker)
|
||||
;; wird beim Erzeugen neu gemerkt - Stand eines frueheren Laufs verwerfen.
|
||||
(setq *csv-baustein-by-handle* nil)
|
||||
(setq *csv-res-sammlung* nil)
|
||||
(setq *csv-ketten* nil)
|
||||
@@ -2489,6 +2534,22 @@
|
||||
;; 4. Restnummerierung + Duplikat-Korrektur. ssg-id-check-all ermittelt
|
||||
;; zuerst das globale Maximum der vergebenen IDs (Phase 0) und nummeriert
|
||||
;; erst danach - neue IDs liegen damit ueber jeder vorhandenen.
|
||||
;; Hilfsobjekte gefrorener Wrapper merken: sie liegen auf eigenen Layern,
|
||||
;; der Wrapper-Layer allein haelt sie daher nicht aus dem Export heraus
|
||||
;; (Auswertung in csv:collect-export-blocks). Erzeugt werden sie trotzdem,
|
||||
;; damit IDs und AS/ES-Marker ueber Laeufe stabil bleiben.
|
||||
(setq *csv-ausschluss-enames*
|
||||
(if (csv:gefrorene-ausschliessen-p)
|
||||
(csv:hilfskopien-ausschluss
|
||||
(append sep-proxies asmarks element-proxies unitmarks)
|
||||
'ssg-ent-layer-gefroren-p)))
|
||||
;; Vor dem Export: IDs aller Bloecke sicherstellen und Duplikate korrigieren.
|
||||
;; Erst hier - also erst nachdem ALLE Kopien aus allen Wrapper-Bloecken
|
||||
;; stehen - wird ueberhaupt eine ID vergeben. ssg-id-check-all ermittelt
|
||||
;; dabei zuerst das globale Maximum der bereits vergebenen IDs (Phase 0)
|
||||
;; und nummeriert die noch ID-losen Kopien erst danach - sonst bekaemen sie
|
||||
;; IDs, die die Wrapper (VF_n/GF_n/Kreisel) selbst schon tragen.
|
||||
(princ (ssg-textf "exp-check-ids" (list label)))
|
||||
(ssg-id-check-all)
|
||||
;; IDs aller temporaeren Kettenobjekte als reservierte IDs am Wrapper
|
||||
;; ablegen - der naechste Export gibt sie ihnen zurueck (csv:res-merken).
|
||||
@@ -2678,6 +2739,7 @@
|
||||
(csv:hilfskopien-loeschen asmarks "exp-art-ases")
|
||||
(csv:hilfskopien-loeschen element-proxies "exp-art-element")
|
||||
(csv:hilfskopien-loeschen unitmarks "exp-art-einheit")
|
||||
(setq *csv-ausschluss-enames* nil)
|
||||
(princ)
|
||||
)
|
||||
|
||||
@@ -2723,6 +2785,7 @@
|
||||
(if eintrag (setq idx eintrag))
|
||||
(set_tile "modus" (itoa idx))
|
||||
(set_tile "hilfskopien_behalten" (if (csv:hilfskopien-behalten-p) "1" "0"))
|
||||
(set_tile "gefrorene_ausschliessen" (if (csv:gefrorene-ausschliessen-p) "1" "0"))
|
||||
)
|
||||
|
||||
(defun csv:export-konfig-accept ( / idx modus)
|
||||
@@ -2730,6 +2793,7 @@
|
||||
(setq modus (car (nth idx *csv-export-konfig-modi*)))
|
||||
(if modus (csv:export-modus-setzen modus))
|
||||
(csv:hilfskopien-behalten-setzen (= (get_tile "hilfskopien_behalten") "1"))
|
||||
(csv:gefrorene-ausschliessen-setzen (= (get_tile "gefrorene_ausschliessen") "1"))
|
||||
)
|
||||
|
||||
(defun c:CSV_EXPORT_KONFIG ()
|
||||
|
||||
@@ -56,6 +56,24 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; Layer gefroren? (nur Frieren, NICHT Ausschalten - anders als
|
||||
;; ssg-layer-visible-p). Rueckgabe: T wenn der Layer existiert und gefroren
|
||||
;; ist (Bit 0 in Gruppe 70), sonst nil. Genutzt vom Export
|
||||
;; (csv:collect-export-blocks, export.lsp).
|
||||
(defun ssg-layer-gefroren-p (lay-name / entry)
|
||||
(setq entry (if lay-name (tblsearch "LAYER" lay-name)))
|
||||
(if entry
|
||||
(= (logand (cdr (assoc 70 entry)) 1) 1)
|
||||
)
|
||||
)
|
||||
|
||||
;; Liegt die Entity ename auf einem gefrorenen Layer (Gruppe 8)?
|
||||
(defun ssg-ent-layer-gefroren-p (ename)
|
||||
(if ename
|
||||
(ssg-layer-gefroren-p (cdr (assoc 8 (entget ename))))
|
||||
)
|
||||
)
|
||||
|
||||
;; Pruefen ob Objekt-Layer der aktive Layer ist (Schutz vor Ausschalten)
|
||||
;; lay-name = zu pruefender Layer; ist-gruppe = T wenn Gruppen-Layer
|
||||
;; Rueckgabe: T wenn sicher (nicht aktiver Layer), nil wenn Problem
|
||||
|
||||
Reference in New Issue
Block a user