Compare commits
40 Commits
da1ffb27a4
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 9199ea705f | |||
| cfdcd31b30 | |||
| 78f19c750c | |||
| 2eca169326 | |||
| 1ddd9449c6 | |||
| 3ab7d29476 | |||
| 15ba546a17 | |||
| 9458382965 | |||
| 0fe14c5454 | |||
| bf517475bb | |||
| ae9ce69d5f | |||
| 2ae64cb4a8 | |||
| a9c03b0b9a | |||
| ab7fc92e23 | |||
| bde2380490 | |||
| 2767897158 | |||
| 444d643dd3 | |||
| 554e9bee99 | |||
| fe283a0bf3 | |||
| 6bf6b00e13 | |||
| f7933df5a4 | |||
| 0b89ed6c5e | |||
| 335c6d7875 | |||
| 8a7521572d | |||
| 1d3191b84b | |||
| 6073eb1d78 | |||
| 96788e7244 | |||
| 72a4637bd2 | |||
| 7a1444439c | |||
| 3897581dc9 | |||
| 8ae55d171e | |||
| 6a487433e2 | |||
| 80ec7043b8 | |||
| 9ce739fb35 | |||
| 5eb0acd446 | |||
| fd63e4c3ad | |||
| acdf735e00 | |||
| 17d5bfc539 | |||
| 027b377b84 | |||
| cc3cb9f160 |
@@ -71,6 +71,7 @@ Die `start_briscad.bat` ruft `setenv.bat` auf und startet BricsCAD.
|
|||||||
| Gefaellestrecke | `Gefaellestrecke` | GEFAELLESTRECKE |
|
| Gefaellestrecke | `Gefaellestrecke` | GEFAELLESTRECKE |
|
||||||
| Omniflo (komplett) | `OmniModulInsert` | OMNI_APB_*, OMNI_W*_*, OMNI_AP*, OMNI_TEF_*, OMNI_TV_*, OMNI_EDIT |
|
| Omniflo (komplett) | `OmniModulInsert` | OMNI_APB_*, OMNI_W*_*, OMNI_AP*, OMNI_TEF_*, OMNI_TV_*, OMNI_EDIT |
|
||||||
| Export | `export` | EXPORTSIVAS, EXPORTCSV, CALLPYTHON |
|
| Export | `export` | EXPORTSIVAS, EXPORTCSV, CALLPYTHON |
|
||||||
|
| Konfiguration | `SSG_LIB_Commands` | SSG_DIM_SWITCH, SSG_SPRACHE |
|
||||||
| Doppelklick/Kontextmenue | `SSG_LIB_Commands` | SSG_BLOCKEDIT |
|
| Doppelklick/Kontextmenue | `SSG_LIB_Commands` | SSG_BLOCKEDIT |
|
||||||
|
|
||||||
### Entfernte Legacy-Dateien
|
### Entfernte Legacy-Dateien
|
||||||
@@ -86,6 +87,7 @@ Detaillierte Dokumentation aller Funktionen und Befehle: siehe `Lisp/README.md`.
|
|||||||
| Datei | Befehle | Beschreibung |
|
| Datei | Befehle | Beschreibung |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `ssg_core.lsp` | - | Kernel: ssg-start/ssg-end, ssg-cfg-or, ssg-attrib-read/write, Layer/Block-Ops |
|
| `ssg_core.lsp` | - | Kernel: ssg-start/ssg-end, ssg-cfg-or, ssg-attrib-read/write, Layer/Block-Ops |
|
||||||
|
| `ssg_lang.lsp` | - | Sprachumschaltung Deutsch/Englisch (ssg-text, ssg-textf, *ssg-lang*) |
|
||||||
| `ssg_dbg.lsp` | - | Debug-Logging (dbgopen, dbgmsg, dbgflush, dbgclose) |
|
| `ssg_dbg.lsp` | - | Debug-Logging (dbgopen, dbgmsg, dbgflush, dbgclose) |
|
||||||
| `ssg_dialog.lsp` | - | DCL-Dialog-Vorlagen und Hilfsfunktionen |
|
| `ssg_dialog.lsp` | - | DCL-Dialog-Vorlagen und Hilfsfunktionen |
|
||||||
| `ssg_layer.lsp` | - | Layer-Verwaltung |
|
| `ssg_layer.lsp` | - | Layer-Verwaltung |
|
||||||
@@ -94,7 +96,7 @@ Detaillierte Dokumentation aller Funktionen und Befehle: siehe `Lisp/README.md`.
|
|||||||
| `Gefaellestrecke.lsp` | GEFAELLESTRECKE | Gefaelle-Foerderanlage (AUS -> Staustrecke skaliert -> Separator -> EIN) |
|
| `Gefaellestrecke.lsp` | GEFAELLESTRECKE | Gefaelle-Foerderanlage (AUS -> Staustrecke skaliert -> Separator -> EIN) |
|
||||||
| `export.lsp` | EXPORTSIVAS, EXPORTCSV, OMNI_UPDATE_ATTRIBS | JSON-Sammlung und Python-Export (Omniflo-Merkmale/Sum-Zeile via lib/export_csv.py) |
|
| `export.lsp` | EXPORTSIVAS, EXPORTCSV, OMNI_UPDATE_ATTRIBS | JSON-Sammlung und Python-Export (Omniflo-Merkmale/Sum-Zeile via lib/export_csv.py) |
|
||||||
| `OmniModulInsert.lsp` | OMNI_LOAD, OMNI_APB_*, OMNI_W*_*, OMNI_AP60/AP110, OMNI_TEF_*, OMNI_TV_*, OMNI_APBW_*, OMNI_EDIT | Omniflo-Komponenten: Boegen, Weichen, Verbinder, Transferwagen, Edit-Dialog |
|
| `OmniModulInsert.lsp` | OMNI_LOAD, OMNI_APB_*, OMNI_W*_*, OMNI_AP60/AP110, OMNI_TEF_*, OMNI_TV_*, OMNI_APBW_*, OMNI_EDIT | Omniflo-Komponenten: Boegen, Weichen, Verbinder, Transferwagen, Edit-Dialog |
|
||||||
| `SSG_LIB_Commands.lsp` | ILS_BTMT_*, ILS_ETF_*, ILS_K*_*, ILS_GK*_*, SSG_BLOCKEDIT | Dummy-Befehle fuer Menue + Doppelklick/Kontextmenue-Dispatcher |
|
| `SSG_LIB_Commands.lsp` | ILS_BTMT_*, ILS_ETF_*, ILS_K*_*, ILS_GK*_*, SSG_BLOCKEDIT, SSG_DIM_SWITCH, SSG_SPRACHE | Dummy-Befehle fuer Menue + Doppelklick/Kontextmenue-Dispatcher + Konfiguration (2D/3D, Sprache) |
|
||||||
| `menu-inventory.lsp` | MenuInventory | BricsCAD Diagnostik (Menuegruppen, Plugins, Startdateien) |
|
| `menu-inventory.lsp` | MenuInventory | BricsCAD Diagnostik (Menuegruppen, Plugins, Startdateien) |
|
||||||
|
|
||||||
## DCL-Dialoge
|
## DCL-Dialoge
|
||||||
@@ -104,13 +106,14 @@ Detaillierte Dokumentation aller Funktionen und Befehle: siehe `Lisp/README.md`.
|
|||||||
| `kreisel_edit.dcl` | KreiselEdit (KreiselInsert.lsp) |
|
| `kreisel_edit.dcl` | KreiselEdit (KreiselInsert.lsp) |
|
||||||
| `omniflo_boegen.dcl` | OMNI_APB_* (OmniModulInsert.lsp) |
|
| `omniflo_boegen.dcl` | OMNI_APB_* (OmniModulInsert.lsp) |
|
||||||
| `omniflo_weichen.dcl` | OMNI_W*_* (OmniModulInsert.lsp) |
|
| `omniflo_weichen.dcl` | OMNI_W*_* (OmniModulInsert.lsp) |
|
||||||
|
| `sprache.dcl` | SSG_SPRACHE (SSG_LIB_Commands.lsp) |
|
||||||
|
|
||||||
## Menue (SSG_LIB.mnu + SSG_LIB.mnl)
|
## Menue (SSG_LIB.mnu + SSG_LIB.mnl)
|
||||||
|
|
||||||
- `SSG_LIB.mnu` - Menuedefinition mit Lazy-Loading (`(ssg-ensure "Modul") Befehl`)
|
- `SSG_LIB.mnu` - Menuedefinition mit Lazy-Loading (`(ssg-ensure "Modul") Befehl`)
|
||||||
- `SSG_LIB.mnl` - Automatisch geladen mit dem Menue, definiert `ssg-ensure` Loader
|
- `SSG_LIB.mnl` - Automatisch geladen mit dem Menue, definiert `ssg-ensure` Loader
|
||||||
- `***MENUGROUP=SSG_LIB` - Menuegruppenname
|
- `***MENUGROUP=SSG_LIB` - Menuegruppenname
|
||||||
- `***POP1` - Hauptmenue (ILS, Omniflo, Export)
|
- `***POP1` - Hauptmenue (ILS, Omniflo, Export, Konfiguration)
|
||||||
- `***DOUBLECLICK` - Doppelklick auf INSERT-Bloecke ruft SSG_BLOCKEDIT auf
|
- `***DOUBLECLICK` - Doppelklick auf INSERT-Bloecke ruft SSG_BLOCKEDIT auf
|
||||||
- `***POP501` - Rechtsklick-Kontextmenue (KreiselEdit, OMNI_EDIT, SSG_BLOCKEDIT)
|
- `***POP501` - Rechtsklick-Kontextmenue (KreiselEdit, OMNI_EDIT, SSG_BLOCKEDIT)
|
||||||
|
|
||||||
@@ -124,6 +127,7 @@ Werden via `bin/setenv.bat` gesetzt. Wichtigste:
|
|||||||
- `DXFM_LOG` - Log-Verzeichnis
|
- `DXFM_LOG` - Log-Verzeichnis
|
||||||
- `DXFM_DCL` - Pfad zu DCL-Dialogdateien
|
- `DXFM_DCL` - Pfad zu DCL-Dialogdateien
|
||||||
- `DXFM_CFG` - Konfigurationsverzeichnis
|
- `DXFM_CFG` - Konfigurationsverzeichnis
|
||||||
|
- `DXFM_LANG` - Aktive Sprache (`de_DE`/`en_GB`), persistiert von `SSG_SPRACHE`; Default `de_DE`
|
||||||
|
|
||||||
## Konventionen
|
## Konventionen
|
||||||
|
|
||||||
|
|||||||
@@ -18,5 +18,5 @@
|
|||||||
)
|
)
|
||||||
(if *vf-core-datei*
|
(if *vf-core-datei*
|
||||||
(load *vf-core-datei*)
|
(load *vf-core-datei*)
|
||||||
(princ "\n[EtageVarioFoerderer] WARNUNG: vf_core.lsp nicht gefunden - Befehle nicht verfuegbar.")
|
(princ (ssg-text "vfstart-etage-core-nicht-gefunden"))
|
||||||
)
|
)
|
||||||
|
|||||||
+153
-131
@@ -129,7 +129,7 @@
|
|||||||
(vla-Delete temp-obj)
|
(vla-Delete temp-obj)
|
||||||
(princ " OK")
|
(princ " OK")
|
||||||
)
|
)
|
||||||
(princ (strcat "\n FEHLER: Block-Datei nicht gefunden: " block-datei))
|
(princ (ssg-textf "gf-fehler-blockdatei-fehlt" (list block-datei)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -146,12 +146,19 @@
|
|||||||
(setq ks-results '())
|
(setq ks-results '())
|
||||||
(setq sub-entities (vlax-invoke block-obj 'Explode))
|
(setq sub-entities (vlax-invoke block-obj 'Explode))
|
||||||
(foreach sub-obj sub-entities
|
(foreach sub-obj sub-entities
|
||||||
(if (and (not (vlax-erased-p sub-obj))
|
;; KS-Blocknamen normalisieren: aeltere Bloecke nutzen KS_EIN/KS_AUS,
|
||||||
(= (vla-get-ObjectName sub-obj) "AcDbBlockReference")
|
;; Vario_Kurve-Bloecke KSYS_EIN/KSYS_AUS (inline, damit diese Fallback-
|
||||||
(or (= (vla-get-Name sub-obj) "KS_EIN")
|
;; Kopie unabhaengig von vf_core.lsp funktioniert).
|
||||||
(= (vla-get-Name sub-obj) "KS_AUS")))
|
(setq ks-ref
|
||||||
|
(if (and (not (vlax-erased-p sub-obj))
|
||||||
|
(= (vla-get-ObjectName sub-obj) "AcDbBlockReference"))
|
||||||
|
(cond
|
||||||
|
((or (= (vla-get-Name sub-obj) "KS_EIN") (= (vla-get-Name sub-obj) "KSYS_EIN")) "KS_EIN")
|
||||||
|
((or (= (vla-get-Name sub-obj) "KS_AUS") (= (vla-get-Name sub-obj) "KSYS_AUS")) "KS_AUS")
|
||||||
|
(t nil))
|
||||||
|
nil))
|
||||||
|
(if ks-ref
|
||||||
(progn
|
(progn
|
||||||
(setq ks-ref (vla-get-Name sub-obj))
|
|
||||||
(setq inner-entities (vlax-invoke sub-obj 'Explode))
|
(setq inner-entities (vlax-invoke sub-obj 'Explode))
|
||||||
(setq origin nil x-end nil y-end nil z-end nil)
|
(setq origin nil x-end nil y-end nil z-end nil)
|
||||||
(foreach inner-obj inner-entities
|
(foreach inner-obj inner-entities
|
||||||
@@ -238,15 +245,19 @@
|
|||||||
|
|
||||||
;; --- Block per KS_EIN/KS_AUS einfuegen ---
|
;; --- Block per KS_EIN/KS_AUS einfuegen ---
|
||||||
(if (null (car (atoms-family 1 '("INSERT-BLOCK-BY-KS"))))
|
(if (null (car (atoms-family 1 '("INSERT-BLOCK-BY-KS"))))
|
||||||
(defun insert-block-by-ks (blockname einfuegepunkt /
|
(defun insert-block-by-ks (blockname einfuegepunkt hz /
|
||||||
block-obj temp-obj ks-data ks-ein ks-aus offset ausgang)
|
block-obj temp-obj ks-data ks-ein ks-aus
|
||||||
|
rad-h chv shv ein-x ein-y ein-z dx-loc dy-loc dz-loc
|
||||||
|
offset ausgang)
|
||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Block '" blockname "' fehlt"))
|
(princ (ssg-textf "gf-fehler-block-fehlt" (list blockname)))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
(setq rad-h (* (float hz) (/ pi 180.0)))
|
||||||
|
(setq chv (cos rad-h) shv (sin rad-h))
|
||||||
;; KS_EIN/KS_AUS ueber eigenes Temp-Objekt am Ursprung ermitteln (nicht
|
;; KS_EIN/KS_AUS ueber eigenes Temp-Objekt am Ursprung ermitteln (nicht
|
||||||
;; am spaeter tatsaechlich platzierten block-obj), siehe vf_core.lsp.
|
;; am spaeter tatsaechlich platzierten block-obj), siehe vf_core.lsp.
|
||||||
(setq temp-obj
|
(setq temp-obj
|
||||||
@@ -259,26 +270,35 @@
|
|||||||
(setq ks-aus (cadr (assoc "KS_AUS" ks-data)))
|
(setq ks-aus (cadr (assoc "KS_AUS" ks-data)))
|
||||||
(setq block-obj
|
(setq block-obj
|
||||||
(vla-InsertBlock modelspace
|
(vla-InsertBlock modelspace
|
||||||
(vlax-3D-point einfuegepunkt)
|
(vlax-3D-point '(0 0 0))
|
||||||
blockname 1.0 1.0 1.0 0))
|
blockname 1.0 1.0 1.0 0))
|
||||||
|
(vla-TransformBy block-obj (vlax-tmatrix
|
||||||
|
(list (list chv (- shv) 0 0)
|
||||||
|
(list shv chv 0 0)
|
||||||
|
(list 0 0 1 0)
|
||||||
|
(list 0 0 0 1))))
|
||||||
(if (and ks-ein ks-aus)
|
(if (and ks-ein ks-aus)
|
||||||
(progn
|
(progn
|
||||||
(setq offset
|
(setq ein-x (car (car ks-ein)) ein-y (cadr (car ks-ein)) ein-z (caddr (car ks-ein)))
|
||||||
(list (- (car (car ks-ein)))
|
(setq offset (list
|
||||||
(- (cadr (car ks-ein)))
|
(- (car einfuegepunkt) (- (* chv ein-x) (* shv ein-y)))
|
||||||
(- (caddr (car ks-ein)))))
|
(- (cadr einfuegepunkt) (+ (* shv ein-x) (* chv ein-y)))
|
||||||
|
(- (caddr einfuegepunkt) ein-z)))
|
||||||
(vla-Move block-obj
|
(vla-Move block-obj
|
||||||
(vlax-3D-point '(0 0 0))
|
(vlax-3D-point '(0 0 0))
|
||||||
(vlax-3D-point offset))
|
(vlax-3D-point offset))
|
||||||
(setq ausgang
|
(setq dx-loc (- (car (car ks-aus)) ein-x))
|
||||||
(list (+ (car einfuegepunkt) (car (car ks-aus)) (car offset))
|
(setq dy-loc (- (cadr (car ks-aus)) ein-y))
|
||||||
(+ (cadr einfuegepunkt) (cadr (car ks-aus)) (cadr offset))
|
(setq dz-loc (- (caddr (car ks-aus)) ein-z))
|
||||||
(+ (caddr einfuegepunkt) (caddr (car ks-aus)) (caddr offset))))
|
(setq ausgang (list
|
||||||
(princ (strcat "\n KS_AUS Z=" (rtos (caddr ausgang) 2 2)))
|
(+ (car einfuegepunkt) (- (* chv dx-loc) (* shv dy-loc)))
|
||||||
|
(+ (cadr einfuegepunkt) (+ (* shv dx-loc) (* chv dy-loc)))
|
||||||
|
(+ (caddr einfuegepunkt) dz-loc)))
|
||||||
|
(princ (ssg-textf "gf-status-ks-aus-z" (list (rtos (caddr ausgang) 2 2))))
|
||||||
ausgang
|
ausgang
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n WARNUNG: KS_EIN/KS_AUS fehlt!")
|
(princ (ssg-text "gf-warnung-ks-fehlt"))
|
||||||
einfuegepunkt
|
einfuegepunkt
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -287,52 +307,56 @@
|
|||||||
|
|
||||||
;; --- Skalierter geneigter Block (Staustrecke, Richtung X) ---
|
;; --- Skalierter geneigter Block (Staustrecke, Richtung X) ---
|
||||||
(if (null (car (atoms-family 1 '("INSERT-INCLINED-SCALED-BLOCK"))))
|
(if (null (car (atoms-family 1 '("INSERT-INCLINED-SCALED-BLOCK"))))
|
||||||
(defun insert-inclined-scaled-block (blockname startpunkt laenge winkel /
|
(defun insert-inclined-scaled-block (blockname startpunkt laenge winkel hz /
|
||||||
rad scale block-obj endpunkt)
|
rad-v rad-h chv shv cvv svv scale block-obj endpunkt)
|
||||||
(if (<= laenge 0.1)
|
(if (<= laenge 0.1)
|
||||||
(progn (princ "\n (Laenge 0 - uebersprungen)") startpunkt)
|
(progn (princ (ssg-text "gf-laenge-null-uebersprungen")) startpunkt)
|
||||||
(progn
|
(progn
|
||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(setq scale (/ (float laenge) 1000.0))
|
(setq scale (/ (float laenge) 1000.0))
|
||||||
(setq rad (* (float winkel) (/ pi 180.0)))
|
(setq rad-v (* (float winkel) (/ pi 180.0)))
|
||||||
|
(setq rad-h (* (float hz) (/ pi 180.0)))
|
||||||
|
(setq chv (cos rad-h) shv (sin rad-h) cvv (cos rad-v) svv (sin rad-v))
|
||||||
(setq block-obj
|
(setq block-obj
|
||||||
(vla-InsertBlock modelspace
|
(vla-InsertBlock modelspace
|
||||||
(vlax-3D-point '(0 0 0))
|
(vlax-3D-point '(0 0 0))
|
||||||
blockname scale 1.0 1.0 0))
|
blockname scale 1.0 1.0 0))
|
||||||
(vla-TransformBy block-obj (vlax-tmatrix
|
(vla-TransformBy block-obj (vlax-tmatrix
|
||||||
(list (list (cos rad) 0 (sin rad) 0)
|
(list (list (* chv cvv) (- shv) (* chv svv) 0)
|
||||||
(list 0 1 0 0)
|
(list (* shv cvv) chv (* shv svv) 0)
|
||||||
(list (- (sin rad)) 0 (cos rad) 0)
|
(list (- svv) 0 cvv 0)
|
||||||
(list 0 0 0 1))))
|
(list 0 0 0 1))))
|
||||||
(vla-Move block-obj
|
(vla-Move block-obj
|
||||||
(vlax-3D-point '(0 0 0))
|
(vlax-3D-point '(0 0 0))
|
||||||
(vlax-3D-point startpunkt))
|
(vlax-3D-point startpunkt))
|
||||||
(setq endpunkt
|
(setq endpunkt
|
||||||
(list (+ (car startpunkt) (* laenge (cos rad)))
|
(list (+ (car startpunkt) (* laenge chv cvv))
|
||||||
(cadr startpunkt)
|
(+ (cadr startpunkt) (* laenge shv cvv))
|
||||||
(+ (caddr startpunkt) (* (- (sin rad)) laenge))))
|
(+ (caddr startpunkt) (* laenge (- svv)))))
|
||||||
(princ (strcat "\n " blockname " L=" (rtos laenge 2 1)
|
(princ (ssg-textf "gf-status-block-l-z"
|
||||||
" -> Z=" (rtos (caddr endpunkt) 2 1)))
|
(list blockname (rtos laenge 2 1) (rtos (caddr endpunkt) 2 1))))
|
||||||
endpunkt
|
endpunkt
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; --- Rotierter Block mit manuellem dx/dz (Richtung X) ---
|
;; --- Rotierter Block mit manuellem dx/dz ---
|
||||||
;; KS_EIN (nicht der Block-Ursprung) wird auf startpunkt ausgerichtet, siehe
|
;; KS_EIN (nicht der Block-Ursprung) wird auf startpunkt ausgerichtet, siehe
|
||||||
;; Kommentar an der kanonischen Definition in vf_core.lsp.
|
;; Kommentar an der kanonischen Definition in vf_core.lsp.
|
||||||
(if (null (car (atoms-family 1 '("INSERT-ROTATED-BLOCK-WITH-KS"))))
|
(if (null (car (atoms-family 1 '("INSERT-ROTATED-BLOCK-WITH-KS"))))
|
||||||
;; block-dx/block-dz: Fallback, nur falls KS_AUS nicht extrahierbar.
|
;; block-dx/block-dz: Fallback, nur falls KS_AUS nicht extrahierbar.
|
||||||
;; Ist KS_AUS vorhanden, wird der echte Versatz KS_AUS-KS_EIN verwendet
|
;; Ist KS_AUS vorhanden, wird der echte Versatz KS_AUS-KS_EIN verwendet
|
||||||
;; (schuetzt vor veralteten Config-Zahlen), siehe vf_core.lsp.
|
;; (schuetzt vor veralteten Config-Zahlen), siehe vf_core.lsp.
|
||||||
(defun insert-rotated-block-with-ks (blockname startpunkt winkel block-dx block-dz /
|
(defun insert-rotated-block-with-ks (blockname startpunkt winkel block-dx block-dz hz /
|
||||||
rad block-obj temp-obj ks-data
|
rad-v rad-h chv shv cvv svv block-obj temp-obj ks-data
|
||||||
ks-ein-raw ks-aus-raw
|
ks-ein-raw ks-aus-raw
|
||||||
ein-x ein-y ein-z aus-x aus-y aus-z
|
ein-x ein-y ein-z aus-x aus-y aus-z
|
||||||
dx dz ins-pt)
|
dx dz ins-pt)
|
||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(setq rad (* (float winkel) (/ pi 180.0)))
|
(setq rad-v (* (float winkel) (/ pi 180.0)))
|
||||||
|
(setq rad-h (* (float hz) (/ pi 180.0)))
|
||||||
|
(setq chv (cos rad-h) shv (sin rad-h) cvv (cos rad-v) svv (sin rad-v))
|
||||||
;; Lokale KS_EIN/KS_AUS-Position ueber EIGENES Temp-Objekt ermitteln
|
;; Lokale KS_EIN/KS_AUS-Position ueber EIGENES Temp-Objekt ermitteln
|
||||||
;; (nicht am spaeter tatsaechlich platzierten block-obj), siehe vf_core.lsp.
|
;; (nicht am spaeter tatsaechlich platzierten block-obj), siehe vf_core.lsp.
|
||||||
(setq temp-obj
|
(setq temp-obj
|
||||||
@@ -363,23 +387,21 @@
|
|||||||
(vlax-3D-point '(0 0 0))
|
(vlax-3D-point '(0 0 0))
|
||||||
blockname 1.0 1.0 1.0 0))
|
blockname 1.0 1.0 1.0 0))
|
||||||
(vla-TransformBy block-obj (vlax-tmatrix
|
(vla-TransformBy block-obj (vlax-tmatrix
|
||||||
(list (list (cos rad) 0 (sin rad) 0)
|
(list (list (* chv cvv) (- shv) (* chv svv) 0)
|
||||||
(list 0 1 0 0)
|
(list (* shv cvv) chv (* shv svv) 0)
|
||||||
(list (- (sin rad)) 0 (cos rad) 0)
|
(list (- svv) 0 cvv 0)
|
||||||
(list 0 0 0 1))))
|
(list 0 0 0 1))))
|
||||||
(setq ins-pt (list
|
(setq ins-pt (list
|
||||||
(- (car startpunkt) (+ (* ein-x (cos rad)) (* ein-z (sin rad))))
|
(- (car startpunkt) (+ (* ein-x chv cvv) (* ein-y (- shv)) (* ein-z chv svv)))
|
||||||
(- (cadr startpunkt) ein-y)
|
(- (cadr startpunkt) (+ (* ein-x shv cvv) (* ein-y chv) (* ein-z shv svv)))
|
||||||
(- (caddr startpunkt) (+ (* (- (sin rad)) ein-x) (* (cos rad) ein-z)))))
|
(- (caddr startpunkt) (+ (* ein-x (- svv)) (* ein-z cvv)))))
|
||||||
(vla-Move block-obj
|
(vla-Move block-obj
|
||||||
(vlax-3D-point '(0 0 0))
|
(vlax-3D-point '(0 0 0))
|
||||||
(vlax-3D-point ins-pt))
|
(vlax-3D-point ins-pt))
|
||||||
(list
|
(list
|
||||||
(+ (car startpunkt)
|
(+ (car startpunkt) (+ (* dx chv cvv) (* dz chv svv)))
|
||||||
(+ (* dx (cos rad)) (* dz (sin rad))))
|
(+ (cadr startpunkt) (+ (* dx shv cvv) (* dz shv svv)))
|
||||||
(cadr startpunkt)
|
(+ (caddr startpunkt) (+ (* dx (- svv)) (* dz cvv))))
|
||||||
(+ (caddr startpunkt)
|
|
||||||
(+ (* (- (sin rad)) dx) (* (cos rad) dz))))
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -403,7 +425,7 @@
|
|||||||
(if (null (car (atoms-family 1 '("GET-LINE-START-END-POINTS"))))
|
(if (null (car (atoms-family 1 '("GET-LINE-START-END-POINTS"))))
|
||||||
(defun get-line-start-end-points (msg / ent obj obj-name sp ep)
|
(defun get-line-start-end-points (msg / ent obj obj-name sp ep)
|
||||||
(princ msg)
|
(princ msg)
|
||||||
(setq ent (entsel "\n >> Linie waehlen: "))
|
(setq ent (entsel (ssg-text "gf-prompt-linie-waehlen")))
|
||||||
(if ent
|
(if ent
|
||||||
(progn
|
(progn
|
||||||
(setq obj (vlax-ename->vla-object (car ent)))
|
(setq obj (vlax-ename->vla-object (car ent)))
|
||||||
@@ -414,11 +436,11 @@
|
|||||||
(vlax-variant-value (vla-get-StartPoint obj))))
|
(vlax-variant-value (vla-get-StartPoint obj))))
|
||||||
(setq ep (vlax-safearray->list
|
(setq ep (vlax-safearray->list
|
||||||
(vlax-variant-value (vla-get-EndPoint obj))))
|
(vlax-variant-value (vla-get-EndPoint obj))))
|
||||||
(princ (strcat "\n 3D-Linie: Z_start=" (rtos (caddr sp) 2 2)
|
(princ (ssg-textf "gf-status-3dlinie-z"
|
||||||
" Z_end=" (rtos (caddr ep) 2 2)))
|
(list (rtos (caddr sp) 2 2) (rtos (caddr ep) 2 2))))
|
||||||
(list sp ep)
|
(list sp ep)
|
||||||
)
|
)
|
||||||
(t (princ "\n Fehler: keine Linie!") nil)
|
(t (princ (ssg-text "gf-fehler-keine-linie")) nil)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
nil
|
nil
|
||||||
@@ -503,7 +525,7 @@
|
|||||||
(defun gf-insert-hz-incl-scaled (blockname pt laenge hz-grad vert-grad /
|
(defun gf-insert-hz-incl-scaled (blockname pt laenge hz-grad vert-grad /
|
||||||
chz shz cv sv scale block-obj endpunkt)
|
chz shz cv sv scale block-obj endpunkt)
|
||||||
(if (<= laenge 0.1)
|
(if (<= laenge 0.1)
|
||||||
(progn (princ "\n (Laenge 0 - uebersprungen)") pt)
|
(progn (princ (ssg-text "gf-laenge-null-uebersprungen")) pt)
|
||||||
(progn
|
(progn
|
||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(setq scale (/ (float laenge) 1000.0))
|
(setq scale (/ (float laenge) 1000.0))
|
||||||
@@ -524,11 +546,9 @@
|
|||||||
(list (+ (car pt) (* laenge chz cv))
|
(list (+ (car pt) (* laenge chz cv))
|
||||||
(+ (cadr pt) (* laenge shz cv))
|
(+ (cadr pt) (* laenge shz cv))
|
||||||
(+ (caddr pt) (* (- sv) laenge))))
|
(+ (caddr pt) (* (- sv) laenge))))
|
||||||
(princ (strcat "\n HzIncl " blockname
|
(princ (ssg-textf "gf-status-hzincl"
|
||||||
" L=" (rtos laenge 2 0)
|
(list blockname (rtos laenge 2 0) (rtos hz-grad 2 0) grad-zeichen
|
||||||
" hz=" (rtos hz-grad 2 0) grad-zeichen
|
(rtos vert-grad 2 1) grad-zeichen (rtos (caddr endpunkt) 2 1))))
|
||||||
" v=" (rtos vert-grad 2 1) grad-zeichen
|
|
||||||
" -> Z=" (rtos (caddr endpunkt) 2 1)))
|
|
||||||
endpunkt
|
endpunkt
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -557,10 +577,9 @@
|
|||||||
(list (+ (car pt) (+ (* dx chz cv) (* dz chz sv)))
|
(list (+ (car pt) (+ (* dx chz cv) (* dz chz sv)))
|
||||||
(+ (cadr pt) (+ (* dx shz cv) (* dz shz sv)))
|
(+ (cadr pt) (+ (* dx shz cv) (* dz shz sv)))
|
||||||
(+ (caddr pt) (+ (* (- sv) dx) (* cv dz)))))
|
(+ (caddr pt) (+ (* (- sv) dx) (* cv dz)))))
|
||||||
(princ (strcat "\n HzKS " blockname
|
(princ (ssg-textf "gf-status-hzks"
|
||||||
" hz=" (rtos hz-grad 2 0) grad-zeichen
|
(list blockname (rtos hz-grad 2 0) grad-zeichen
|
||||||
" v=" (rtos vert-grad 2 1) grad-zeichen
|
(rtos vert-grad 2 1) grad-zeichen (rtos (caddr endpunkt) 2 1))))
|
||||||
" -> Z=" (rtos (caddr endpunkt) 2 1)))
|
|
||||||
endpunkt
|
endpunkt
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -575,7 +594,7 @@
|
|||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Block '" blockname "' fehlt!"))
|
(princ (ssg-textf "gf-fehler-block-fehlt-ausruf" (list blockname)))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -621,13 +640,12 @@
|
|||||||
(list (+ (car p-aus-rot) (car offset))
|
(list (+ (car p-aus-rot) (car offset))
|
||||||
(+ (cadr p-aus-rot) (cadr offset))
|
(+ (cadr p-aus-rot) (cadr offset))
|
||||||
(+ (caddr p-aus-rot) (caddr offset))))
|
(+ (caddr p-aus-rot) (caddr offset))))
|
||||||
(princ (strcat "\n Gefaellebogen " blockname
|
(princ (ssg-textf "gf-status-gefaellebogen"
|
||||||
" hz=" (rtos hz-grad 2 0) grad-zeichen
|
(list blockname (rtos hz-grad 2 0) grad-zeichen (rtos (caddr ausgang) 2 1))))
|
||||||
" -> Z=" (rtos (caddr ausgang) 2 1)))
|
|
||||||
ausgang
|
ausgang
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n WARNUNG: KS fehlt in '" blockname "'"))
|
(princ (ssg-textf "gf-warnung-ks-fehlt-in" (list blockname)))
|
||||||
pt
|
pt
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -667,7 +685,7 @@
|
|||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n WARNUNG: " blockname " fehlt - Nullwerte"))
|
(princ (ssg-textf "gf-warnung-block-fehlt-nullwerte" (list blockname)))
|
||||||
'(0 0)
|
'(0 0)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
@@ -685,12 +703,12 @@
|
|||||||
(progn
|
(progn
|
||||||
(setq dx (- (caar ks-aus-pos) (caar ks-ein-pos)))
|
(setq dx (- (caar ks-aus-pos) (caar ks-ein-pos)))
|
||||||
(setq dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
(setq dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
||||||
(princ (strcat "\n " blockname
|
(princ (ssg-textf "gf-status-bogen-masse"
|
||||||
": dx=" (rtos dx 2 1) " dz=" (rtos dz 2 1)))
|
(list blockname (rtos dx 2 1) (rtos dz 2 1))))
|
||||||
(list dx dz)
|
(list dx dz)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n WARNUNG: KS fehlt in " blockname))
|
(princ (ssg-textf "gf-warnung-ks-fehlt-in2" (list blockname)))
|
||||||
'(0 0)
|
'(0 0)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -1047,17 +1065,17 @@
|
|||||||
(setq exit-hz (gf-exit-hz segmente))
|
(setq exit-hz (gf-exit-hz segmente))
|
||||||
|
|
||||||
;; Seite fuer AUS-Element (vor Winkelberechnung, da Laengenanpassung davon abhaengt)
|
;; Seite fuer AUS-Element (vor Winkelberechnung, da Laengenanpassung davon abhaengt)
|
||||||
(princ "\n\nAUS-Element (AS_Element_90_*) - Seite waehlen:")
|
(princ (ssg-text "gf-seite-aus-header"))
|
||||||
(princ "\n 1 - Links")
|
(princ (ssg-text "gf-seite-links"))
|
||||||
(princ "\n 2 - Rechts")
|
(princ (ssg-text "gf-seite-rechts"))
|
||||||
(setq antwort (getstring "\nIhre Wahl (1/2) [1]: "))
|
(setq antwort (getstring (ssg-text "prompt-wahl-1-2")))
|
||||||
(setq as-seite (if (= antwort "2") "rechts" "links"))
|
(setq as-seite (if (= antwort "2") "rechts" "links"))
|
||||||
|
|
||||||
;; Seite fuer EIN-Element
|
;; Seite fuer EIN-Element
|
||||||
(princ "\n\nEIN-Element (ES_Element_90_*) - Seite waehlen:")
|
(princ (ssg-text "gf-seite-ein-header"))
|
||||||
(princ "\n 1 - Links")
|
(princ (ssg-text "gf-seite-links"))
|
||||||
(princ "\n 2 - Rechts")
|
(princ (ssg-text "gf-seite-rechts"))
|
||||||
(setq antwort (getstring "\nIhre Wahl (1/2) [1]: "))
|
(setq antwort (getstring (ssg-text "prompt-wahl-1-2")))
|
||||||
(setq es-seite (if (= antwort "2") "rechts" "links"))
|
(setq es-seite (if (= antwort "2") "rechts" "links"))
|
||||||
|
|
||||||
(setq as-block (strcat "AS_Element_90_" as-seite))
|
(setq as-block (strcat "AS_Element_90_" as-seite))
|
||||||
@@ -1319,7 +1337,8 @@
|
|||||||
bL90 bL60 bL30
|
bL90 bL60 bL30
|
||||||
bR90 bR60 bR30
|
bR90 bR60 bR30
|
||||||
startpunkt last-ent nach-aus-pt entry-hz
|
startpunkt last-ent nach-aus-pt entry-hz
|
||||||
(caddr (nth first-idx segmente)))
|
(caddr (nth first-idx segmente))
|
||||||
|
es-seite)
|
||||||
|
|
||||||
(princ "\n\n=========================================")
|
(princ "\n\n=========================================")
|
||||||
(princ "\n>>> Fertig! <<<")
|
(princ "\n>>> Fertig! <<<")
|
||||||
@@ -1333,49 +1352,25 @@
|
|||||||
;; TEIL 4.5: GF-BLOCK-SYSTEM (Nummerierung, Label, Attribute)
|
;; TEIL 4.5: GF-BLOCK-SYSTEM (Nummerierung, Label, Attribute)
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
|
|
||||||
;; Attribut-Definitionen fuer GF_N-Bloecke
|
;; Attribut-Definitionen fuer GF_N-Bloecke kommen aus dem gemeinsamen
|
||||||
(setq *gf-attrib-defs*
|
;; Strecken-Schema in ssg_core.lsp (ssg-strecke-attrib-defs). TYP wird zur
|
||||||
'(("NUMMER" "0")
|
;; Laufzeit bestimmt: ohne Bogen -> "Gefaellestrecke" (reduziert), mit Bogen
|
||||||
("TYP" "standard")
|
;; -> "Streckengruppe" (voll).
|
||||||
("SEITE" "rechts")
|
|
||||||
("MONTAGEHOEHE_m" "0.000")
|
|
||||||
("HOEHE_VON" "0")
|
|
||||||
("HOEHE_BIS" "0")
|
|
||||||
("DELTA_H" "0")
|
|
||||||
("DELTA_L" "0")
|
|
||||||
("L_GF_m" "0.000")
|
|
||||||
("WINKEL" "0.000")
|
|
||||||
("ANZAHL_SEPARATOR" "0")
|
|
||||||
("ANZAHL_SCANNER" "0")
|
|
||||||
("GF_Bogen_L_90" "0")
|
|
||||||
("GF_Bogen_L_60" "0")
|
|
||||||
("GF_Bogen_L_30" "0")
|
|
||||||
("GF_Bogen_R_90" "0")
|
|
||||||
("GF_Bogen_R_60" "0")
|
|
||||||
("GF_Bogen_R_30" "0")
|
|
||||||
("ID" "")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
;; Naechste freie GF-Nummer
|
;; Naechste freie GF-Nummer
|
||||||
;; Stufe 1: NUMMER-Attribut aller GF_*-Inserts lesen
|
;; Stufe 1: NUMMER-Attribut aller GF_*-Inserts lesen
|
||||||
;; Stufe 2: Block-Tabelle pruefen – GF_N darf noch nicht als Definition existieren
|
;; Stufe 2: Block-Tabelle pruefen – GF_N darf noch nicht als Definition existieren
|
||||||
(defun gf-next-number ( / ss i nr maxnr attribs)
|
(defun gf-next-number ( / ss i nr maxnr bname)
|
||||||
(setq maxnr 0)
|
(setq maxnr 0)
|
||||||
(setq ss (ssget "X" '((0 . "INSERT") (2 . "GF_*"))))
|
(setq ss (ssget "X" '((0 . "INSERT") (2 . "GF_*"))))
|
||||||
(if ss
|
(if ss
|
||||||
(progn
|
(progn
|
||||||
(setq i 0)
|
(setq i 0)
|
||||||
(while (< i (sslength ss))
|
(while (< i (sslength ss))
|
||||||
(setq attribs (ssg-attrib-read (ssname ss i)))
|
;; Nummer aus dem Blocknamen GF_<n> ableiten ("GF_" = 3 Zeichen)
|
||||||
(foreach pair attribs
|
(setq bname (cdr (assoc 2 (entget (ssname ss i)))))
|
||||||
(if (= (car pair) "NUMMER")
|
(setq nr (atoi (substr bname 4)))
|
||||||
(progn
|
(if (> nr maxnr) (setq maxnr nr))
|
||||||
(setq nr (atoi (cdr pair)))
|
|
||||||
(if (> nr maxnr) (setq maxnr nr))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(setq i (1+ i))
|
(setq i (1+ i))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -1441,13 +1436,31 @@
|
|||||||
L-gf-str winkel n-separator n-scanner
|
L-gf-str winkel n-separator n-scanner
|
||||||
bogen-L90 bogen-L60 bogen-L30
|
bogen-L90 bogen-L60 bogen-L30
|
||||||
bogen-R90 bogen-R60 bogen-R30
|
bogen-R90 bogen-R60 bogen-R30
|
||||||
startpunkt last-ent nach-aus-pt entry-hz L-first-seg /
|
startpunkt last-ent nach-aus-pt entry-hz L-first-seg
|
||||||
gf-bname gf-ss ent gf-insert)
|
es-seite /
|
||||||
|
gf-bname gf-ss ent gf-insert typ-str anzahl-gf
|
||||||
|
gf-winkel-str i)
|
||||||
;; Beschriftung: Mitte der ersten Geraden, 400mm senkrecht versetzt
|
;; Beschriftung: Mitte der ersten Geraden, 400mm senkrecht versetzt
|
||||||
(gf-make-label gf-nummer hoehe-von hoehe-bis deltaH deltaL
|
(gf-make-label gf-nummer hoehe-von hoehe-bis deltaH deltaL
|
||||||
L-gf-str winkel n-separator nach-aus-pt entry-hz L-first-seg)
|
L-gf-str winkel n-separator nach-aus-pt entry-hz L-first-seg)
|
||||||
;; ATTDEFs (unsichtbar, am Startpunkt)
|
;; TYP: mit Bogen -> "Streckengruppe"; ohne Bogen (einsegmentig) ->
|
||||||
(foreach def *gf-attrib-defs*
|
;; "Gefaellestrecke" (reduzierter Attributsatz, siehe ssg-strecke-attrib-defs).
|
||||||
|
(setq typ-str
|
||||||
|
(if (> (+ bogen-L90 bogen-L60 bogen-L30 bogen-R90 bogen-R60 bogen-R30) 0)
|
||||||
|
"Streckengruppe" "Gefaellestrecke"))
|
||||||
|
(setq gf-bname (strcat "GF_" (itoa gf-nummer)))
|
||||||
|
;; Anzahl GF-Segmente = Anzahl kommagetrennter Werte in L-gf-str;
|
||||||
|
;; GF_WINKEL parallel dazu (alle Segmente teilen die Gefaelle-Neigung).
|
||||||
|
(setq anzahl-gf 1 i 1)
|
||||||
|
(while (<= i (strlen L-gf-str))
|
||||||
|
(if (= (substr L-gf-str i 1) ",") (setq anzahl-gf (1+ anzahl-gf)))
|
||||||
|
(setq i (1+ i)))
|
||||||
|
(setq gf-winkel-str (rtos (float winkel) 2 1) i 1)
|
||||||
|
(while (< i anzahl-gf)
|
||||||
|
(setq gf-winkel-str (strcat gf-winkel-str "," (rtos (float winkel) 2 1)))
|
||||||
|
(setq i (1+ i)))
|
||||||
|
;; ATTDEFs (unsichtbar, am Startpunkt) nach gemeinsamem Strecken-Schema
|
||||||
|
(foreach def (ssg-strecke-attrib-defs typ-str)
|
||||||
(entmake
|
(entmake
|
||||||
(list '(0 . "ATTDEF")
|
(list '(0 . "ATTDEF")
|
||||||
(cons 10 startpunkt)
|
(cons 10 startpunkt)
|
||||||
@@ -1467,35 +1480,43 @@
|
|||||||
(ssadd ent gf-ss)
|
(ssadd ent gf-ss)
|
||||||
(setq ent (entnext ent))
|
(setq ent (entnext ent))
|
||||||
)
|
)
|
||||||
;; Block definieren und einfuegen
|
;; Block definieren und einfuegen (ATTREQ/ATTDIA=0: keine interaktive Abfrage)
|
||||||
(setq gf-bname (strcat "GF_" (itoa gf-nummer)))
|
(setvar "ATTREQ" 0)
|
||||||
|
(setvar "ATTDIA" 0)
|
||||||
(command "_.-BLOCK" gf-bname startpunkt gf-ss "")
|
(command "_.-BLOCK" gf-bname startpunkt gf-ss "")
|
||||||
(command "_.INSERT" gf-bname startpunkt 1.0 1.0 0.0)
|
(command "_.INSERT" gf-bname startpunkt 1.0 1.0 0.0)
|
||||||
;; Attribute auf das eingefuegte INSERT-Objekt setzen
|
(setvar "ATTREQ" 1)
|
||||||
|
;; Attribute auf das eingefuegte INSERT-Objekt setzen (volle Werteliste;
|
||||||
|
;; nicht vorhandene Tags ignoriert ssg-attrib-set-on -> reduzierter Satz ok).
|
||||||
(setq gf-insert (entlast))
|
(setq gf-insert (entlast))
|
||||||
(ssg-attrib-set-on gf-insert
|
(ssg-attrib-set-on gf-insert
|
||||||
(list
|
(list
|
||||||
(cons "NUMMER" (itoa gf-nummer))
|
(cons "Bezeichnung" gf-bname)
|
||||||
(cons "TYP" typ)
|
|
||||||
(cons "SEITE" seite)
|
|
||||||
(cons "MONTAGEHOEHE_m" "0.000")
|
(cons "MONTAGEHOEHE_m" "0.000")
|
||||||
(cons "HOEHE_VON" (itoa (fix hoehe-von)))
|
(cons "HOEHE_VON_mm" (itoa (fix hoehe-von)))
|
||||||
(cons "HOEHE_BIS" (itoa (fix hoehe-bis)))
|
(cons "HOEHE_BIS_mm" (itoa (fix hoehe-bis)))
|
||||||
(cons "DELTA_H" (itoa (fix (abs deltaH))))
|
(cons "DELTA_H_mm" (itoa (fix (abs deltaH))))
|
||||||
(cons "DELTA_L" (itoa (fix deltaL)))
|
(cons "DELTA_L_mm" (itoa (fix deltaL)))
|
||||||
|
(cons "TYP" typ-str)
|
||||||
|
(cons "SEITE_AS" seite)
|
||||||
|
(cons "SEITE_ES" es-seite)
|
||||||
|
(cons "ANZAHL_GF" (itoa anzahl-gf))
|
||||||
(cons "L_GF_m" L-gf-str)
|
(cons "L_GF_m" L-gf-str)
|
||||||
(cons "WINKEL" (rtos (float winkel) 2 3))
|
(cons "GF_WINKEL" gf-winkel-str)
|
||||||
(cons "ANZAHL_SEPARATOR" (itoa n-separator))
|
|
||||||
(cons "ANZAHL_SCANNER" (itoa n-scanner))
|
|
||||||
(cons "GF_Bogen_L_90" (itoa bogen-L90))
|
(cons "GF_Bogen_L_90" (itoa bogen-L90))
|
||||||
(cons "GF_Bogen_L_60" (itoa bogen-L60))
|
(cons "GF_Bogen_L_60" (itoa bogen-L60))
|
||||||
(cons "GF_Bogen_L_30" (itoa bogen-L30))
|
(cons "GF_Bogen_L_30" (itoa bogen-L30))
|
||||||
(cons "GF_Bogen_R_90" (itoa bogen-R90))
|
(cons "GF_Bogen_R_90" (itoa bogen-R90))
|
||||||
(cons "GF_Bogen_R_60" (itoa bogen-R60))
|
(cons "GF_Bogen_R_60" (itoa bogen-R60))
|
||||||
(cons "GF_Bogen_R_30" (itoa bogen-R30))
|
(cons "GF_Bogen_R_30" (itoa bogen-R30))
|
||||||
|
(cons "ANZAHL_SEPARATOR" (itoa n-separator))
|
||||||
|
(cons "ANZAHL_SCANNER" (itoa n-scanner))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n>>> GF-Block erstellt: " gf-bname))
|
;; Aufsteigende, eindeutige ID vergeben (wie beim Kreisel), falls verfuegbar.
|
||||||
|
(if (car (atoms-family 1 '("SSG-ID-GENERATE")))
|
||||||
|
(ssg-id-generate gf-insert))
|
||||||
|
(princ (strcat "\n>>> GF-Block erstellt: " gf-bname " (" typ-str ")"))
|
||||||
gf-insert
|
gf-insert
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1590,7 +1611,8 @@
|
|||||||
winkel
|
winkel
|
||||||
1 0
|
1 0
|
||||||
0 0 0 0 0 0
|
0 0 0 0 0 0
|
||||||
startpunkt last-ent nach-aus-pt (float hz) (float L_stau)))
|
startpunkt last-ent nach-aus-pt (float hz) (float L_stau)
|
||||||
|
es-seite))
|
||||||
|
|
||||||
(princ "\n\n=========================================")
|
(princ "\n\n=========================================")
|
||||||
(princ "\n>>> Gefaellestrecke erfolgreich eingefuegt! <<<")
|
(princ "\n>>> Gefaellestrecke erfolgreich eingefuegt! <<<")
|
||||||
|
|||||||
+107
-116
@@ -31,7 +31,7 @@
|
|||||||
(strcat (substr *ssg-lisp-pfad* 1 (vl-string-search "/Lisp" *ssg-lisp-pfad*))
|
(strcat (substr *ssg-lisp-pfad* 1 (vl-string-search "/Lisp" *ssg-lisp-pfad*))
|
||||||
"/data/ils/" *ki-dxfm-dim* "/"))
|
"/data/ils/" *ki-dxfm-dim* "/"))
|
||||||
(t
|
(t
|
||||||
(princ "\n[KreiselInsert] WARNUNG: Block-Pfad nicht ermittelbar!")
|
(princ (ssg-text "kreisel-warn-blockpfad"))
|
||||||
nil)
|
nil)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
(defun ssg-cfg-or (sektion schluessel standard) standard)
|
(defun ssg-cfg-or (sektion schluessel standard) standard)
|
||||||
(defun ssg-cfg (sektion schluessel) nil)
|
(defun ssg-cfg (sektion schluessel) nil)
|
||||||
(defun ssg-load-config () nil)
|
(defun ssg-load-config () nil)
|
||||||
(princ "\n[KreiselInsert] WARNUNG: ssg_core.lsp nicht gefunden - Standardwerte.")
|
(princ (ssg-text "kreisel-warn-core-fehlt"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
(progn
|
(progn
|
||||||
;; Neuen Textstil mit Arial erstellen
|
;; Neuen Textstil mit Arial erstellen
|
||||||
(command "_.STYLE" style-name "Arial" 0 1 0 "N" "N" "N")
|
(command "_.STYLE" style-name "Arial" 0 1 0 "N" "N" "N")
|
||||||
(princ (strcat "\n-> Textstil '" style-name "' mit Arial erstellt"))
|
(princ (ssg-textf "kreisel-textstil-erstellt" (list style-name)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -222,7 +222,7 @@
|
|||||||
(cons 11 insertPoint) ;; Ausrichtungspunkt
|
(cons 11 insertPoint) ;; Ausrichtungspunkt
|
||||||
))
|
))
|
||||||
|
|
||||||
(princ (strcat "\n-> Beschriftung: " textStr " (Höhe=" (rtos textHoehe 2 0) "mm, Arial, zentriert)"))
|
(princ (ssg-textf "kreisel-beschriftung-erzeugt" (list textStr (rtos textHoehe 2 0))))
|
||||||
textStr
|
textStr
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -230,9 +230,9 @@
|
|||||||
|
|
||||||
;; Kreiselart abfragen. Rueckgabe: "PIN" oder "STANDARD"
|
;; Kreiselart abfragen. Rueckgabe: "PIN" oder "STANDARD"
|
||||||
(defun kreisel-ask-typ ( / typNum typ)
|
(defun kreisel-ask-typ ( / typNum typ)
|
||||||
(princ "\n[1] STANDARD (ohne PIN)")
|
(princ (ssg-text "kreisel-typ-opt-standard"))
|
||||||
(princ "\n[2] PIN")
|
(princ (ssg-text "kreisel-typ-opt-pin"))
|
||||||
(princ (strcat "\nBitte waehlen <" (if (= #Kreisel_Typ "PIN") "2" "1") ">: "))
|
(princ (ssg-textf "kreisel-typ-prompt" (list (if (= #Kreisel_Typ "PIN") "2" "1"))))
|
||||||
(setq typNum (getstring ""))
|
(setq typNum (getstring ""))
|
||||||
(cond
|
(cond
|
||||||
((= typNum "2") (setq typ "PIN"))
|
((= typNum "2") (setq typ "PIN"))
|
||||||
@@ -337,7 +337,7 @@
|
|||||||
(progn
|
(progn
|
||||||
(setq z-hoehe (caddr basePoint))
|
(setq z-hoehe (caddr basePoint))
|
||||||
(setq block-hoehe (rtos z-hoehe 2 0))
|
(setq block-hoehe (rtos z-hoehe 2 0))
|
||||||
(princ (strcat "\n-> Höhe aus Basispunkt übernommen: " block-hoehe))
|
(princ (ssg-textf "kreisel-hoehe-aus-basispunkt" (list block-hoehe)))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
;; Höhe aus Attributen lesen
|
;; Höhe aus Attributen lesen
|
||||||
@@ -454,12 +454,12 @@
|
|||||||
;; --- Block erzeugen (Entities werden aus Zeichnung entfernt) ---
|
;; --- Block erzeugen (Entities werden aus Zeichnung entfernt) ---
|
||||||
(if (> (sslength ss) 0)
|
(if (> (sslength ss) 0)
|
||||||
(command "_.-BLOCK" bname (list 0.0 0.0 0.0) ss "")
|
(command "_.-BLOCK" bname (list 0.0 0.0 0.0) ss "")
|
||||||
(princ "\nFehler: Keine Entities zum Block erstellen!")
|
(princ (ssg-text "kreisel-fehler-keine-entities"))
|
||||||
)
|
)
|
||||||
|
|
||||||
(princ (strcat "\n-> Neue Blockdefinition: " bname))
|
(princ (ssg-textf "kreisel-neue-blockdef" (list bname)))
|
||||||
)
|
)
|
||||||
(princ (strcat "\n-> Verwende bestehende Blockdefinition: " bname))
|
(princ (ssg-textf "kreisel-bestehende-blockdef" (list bname)))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; --- Block am Zielpunkt einfuegen (ohne Attribut-Dialog) ---
|
;; --- Block am Zielpunkt einfuegen (ohne Attribut-Dialog) ---
|
||||||
@@ -495,8 +495,7 @@
|
|||||||
(if (atoms-family 1 '("ssg-id-generate"))
|
(if (atoms-family 1 '("ssg-id-generate"))
|
||||||
(ssg-id-generate block-ent)
|
(ssg-id-generate block-ent)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n-> Kreisel #" (itoa kreisel-nummer) " eingefügt: " bname
|
(princ (ssg-textf "kreisel-eingefuegt" (list (itoa kreisel-nummer) bname block-hoehe)))
|
||||||
" (Höhe=" block-hoehe ")"))
|
|
||||||
(entlast)
|
(entlast)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -514,19 +513,19 @@
|
|||||||
;; --------------------------------------------
|
;; --------------------------------------------
|
||||||
(defun c:KreiselInsert ( / pt abstand typ rotation rotStr hoehe
|
(defun c:KreiselInsert ( / pt abstand typ rotation rotStr hoehe
|
||||||
selectedEnt blockAttribs oldOsmode)
|
selectedEnt blockAttribs oldOsmode)
|
||||||
(ssg-start "Kreisel Modul einfuegen" '(("OSMODE") ("CECOLOR")))
|
(ssg-start (ssg-text "kreisel-start-insert") '(("OSMODE") ("CECOLOR")))
|
||||||
|
|
||||||
;; Temporär Osnap für Blockerkennung setzen
|
;; Temporär Osnap für Blockerkennung setzen
|
||||||
(setq oldOsmode (getvar "OSMODE"))
|
(setq oldOsmode (getvar "OSMODE"))
|
||||||
(setvar "OSMODE" (logior oldOsmode 512)) ;; 512 = INS (Block-Einfügepunkt)
|
(setvar "OSMODE" (logior oldOsmode 512)) ;; 512 = INS (Block-Einfügepunkt)
|
||||||
|
|
||||||
;; 1. Einfuegepunkt
|
;; 1. Einfuegepunkt
|
||||||
(setq pt (getpoint "\nBasispunkt (AN-Seite): "))
|
(setq pt (getpoint (ssg-text "kreisel-prompt-basispunkt")))
|
||||||
(if (null pt)
|
(if (null pt)
|
||||||
(progn
|
(progn
|
||||||
(setvar "OSMODE" oldOsmode)
|
(setvar "OSMODE" oldOsmode)
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
(princ "\nBefehl abgebrochen.")
|
(princ (ssg-text "kreisel-abbruch-befehl"))
|
||||||
(princ)
|
(princ)
|
||||||
(return)
|
(return)
|
||||||
)
|
)
|
||||||
@@ -546,41 +545,39 @@
|
|||||||
(setq blockAttribs (ssg-attrib-read selectedEnt))
|
(setq blockAttribs (ssg-attrib-read selectedEnt))
|
||||||
(assoc "HOEHE" blockAttribs))
|
(assoc "HOEHE" blockAttribs))
|
||||||
(setq hoehe (atof (cdr (assoc "HOEHE" blockAttribs))))
|
(setq hoehe (atof (cdr (assoc "HOEHE" blockAttribs))))
|
||||||
(princ (strcat "\n-> Höhe von bestehendem Kreisel übernommen: " (rtos hoehe 2 0)))
|
(princ (ssg-textf "kreisel-hoehe-von-bestehendem" (list (rtos hoehe 2 0))))
|
||||||
)
|
)
|
||||||
;; Fall 2: Punkt hat Z-Koordinate > 0
|
;; Fall 2: Punkt hat Z-Koordinate > 0
|
||||||
((and (> (length pt) 2) (> (caddr pt) 0))
|
((and (> (length pt) 2) (> (caddr pt) 0))
|
||||||
(setq hoehe (caddr pt))
|
(setq hoehe (caddr pt))
|
||||||
(princ (strcat "\n-> Höhe aus 3D-Punkt übernommen: " (rtos hoehe 2 0)))
|
(princ (ssg-textf "kreisel-hoehe-aus-3dpunkt" (list (rtos hoehe 2 0))))
|
||||||
)
|
)
|
||||||
;; Fall 3: Sonst separat abfragen
|
;; Fall 3: Sonst separat abfragen
|
||||||
(t
|
(t
|
||||||
(setq hoehe (getreal (strcat "\nHöhe (Z-Koordinate) <" (rtos *kreisel-default-hoehe* 2 0) ">: ")))
|
(setq hoehe (getreal (ssg-textf "kreisel-prompt-hoehe-z" (list (rtos *kreisel-default-hoehe* 2 0)))))
|
||||||
(if (null hoehe) (setq hoehe *kreisel-default-hoehe*))
|
(if (null hoehe) (setq hoehe *kreisel-default-hoehe*))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 3. Abstand
|
;; 3. Abstand
|
||||||
(initget 6)
|
(initget 6)
|
||||||
(setq abstand (getdist (list (car pt) (cadr pt))
|
(setq abstand (getdist (list (car pt) (cadr pt))
|
||||||
(strcat "\nAbstand (Tangentenlaenge) <"
|
(ssg-textf "kreisel-prompt-abstand" (list (rtos *kreisel-default-laenge* 2 0)))))
|
||||||
(rtos *kreisel-default-laenge* 2 0) ">: ")))
|
|
||||||
(if (null abstand) (setq abstand *kreisel-default-laenge*))
|
(if (null abstand) (setq abstand *kreisel-default-laenge*))
|
||||||
(princ (strcat "\n-> Abstand: " (rtos abstand 2 0) " mm"))
|
(princ (ssg-textf "kreisel-abstand-ausgabe" (list (rtos abstand 2 0))))
|
||||||
|
|
||||||
;; 4. Rotation
|
;; 4. Rotation
|
||||||
(setq rotStr (getstring "\nRotation in Grad <0>: "))
|
(setq rotStr (getstring (ssg-text "kreisel-prompt-rotation")))
|
||||||
(if (= rotStr "")
|
(if (= rotStr "")
|
||||||
(setq rotation 0.0)
|
(setq rotation 0.0)
|
||||||
(setq rotation (atof rotStr))
|
(setq rotation (atof rotStr))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 5. Kreiselart
|
;; 5. Kreiselart
|
||||||
(setq typ (kreisel-ask-typ))
|
(setq typ (kreisel-ask-typ))
|
||||||
|
|
||||||
(princ (strcat "\n-> Rotation: " (rtos rotation 2 1)
|
(princ (ssg-textf "kreisel-insert-zusammenfassung"
|
||||||
" Höhe: " (rtos hoehe 2 0)
|
(list (rtos rotation 2 1) (rtos hoehe 2 0) typ)))
|
||||||
" Kreiselart: " typ))
|
|
||||||
|
|
||||||
;; 6. Modul einfuegen
|
;; 6. Modul einfuegen
|
||||||
(draw-module (list (car pt) (cadr pt) hoehe) abstand rotation
|
(draw-module (list (car pt) (cadr pt) hoehe) abstand rotation
|
||||||
@@ -590,7 +587,7 @@
|
|||||||
;; KEIN weiteres (setvar "OSMODE" ...) mehr nötig!
|
;; KEIN weiteres (setvar "OSMODE" ...) mehr nötig!
|
||||||
;; ssg-end stellt nur CLAYER und CMDECHO wieder her, nicht OSMODE
|
;; ssg-end stellt nur CLAYER und CMDECHO wieder her, nicht OSMODE
|
||||||
|
|
||||||
(princ "\nKreisel Modul eingefuegt.")
|
(princ (ssg-text "kreisel-insert-fertig"))
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -607,20 +604,20 @@
|
|||||||
;; -----------------------------------------------
|
;; -----------------------------------------------
|
||||||
(defun c:KreiselConnect ( / ptStart ptEnd dx dy dist abstand rotation typ hoehe)
|
(defun c:KreiselConnect ( / ptStart ptEnd dx dy dist abstand rotation typ hoehe)
|
||||||
|
|
||||||
(ssg-start "Kreisel Smart Connect" '(("OSMODE") ("CECOLOR")))
|
(ssg-start (ssg-text "kreisel-start-connect") '(("OSMODE") ("CECOLOR")))
|
||||||
|
|
||||||
(princ "\n--- Kreisel durch Linie definieren (AN -> SP) ---")
|
(princ (ssg-text "kreisel-connect-header"))
|
||||||
|
|
||||||
;; 1. Startpunkt (aeusserster Punkt AN-Seite)
|
;; 1. Startpunkt (aeusserster Punkt AN-Seite)
|
||||||
(setq ptStart (getpoint "\nStartpunkt (AN-Seite aussen): "))
|
(setq ptStart (getpoint (ssg-text "kreisel-prompt-startpunkt")))
|
||||||
(if (null ptStart)
|
(if (null ptStart)
|
||||||
(progn (ssg-end) (princ "\nAbgebrochen.") (princ) (exit))
|
(progn (ssg-end) (princ (ssg-text "kreisel-abgebrochen")) (princ) (exit))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 2. Endpunkt (aeusserster Punkt SP-Seite) mit Gummiband
|
;; 2. Endpunkt (aeusserster Punkt SP-Seite) mit Gummiband
|
||||||
(setq ptEnd (getpoint ptStart "\nEndpunkt (SP-Seite aussen): "))
|
(setq ptEnd (getpoint ptStart (ssg-text "kreisel-prompt-endpunkt")))
|
||||||
(if (null ptEnd)
|
(if (null ptEnd)
|
||||||
(progn (ssg-end) (princ "\nAbgebrochen.") (princ) (exit))
|
(progn (ssg-end) (princ (ssg-text "kreisel-abgebrochen")) (princ) (exit))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 3. Geometrie berechnen
|
;; 3. Geometrie berechnen
|
||||||
@@ -631,8 +628,8 @@
|
|||||||
|
|
||||||
(if (<= abstand 0.0)
|
(if (<= abstand 0.0)
|
||||||
(progn
|
(progn
|
||||||
(ssg-emsg (strcat "Distanz zu klein! ("
|
(ssg-emsg (ssg-textf "kreisel-emsg-distanz-klein"
|
||||||
(rtos dist 2 0) " < " (rtos *kreisel-durchmesser* 2 0) ")"))
|
(list (rtos dist 2 0) (rtos *kreisel-durchmesser* 2 0))))
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
@@ -648,26 +645,24 @@
|
|||||||
)
|
)
|
||||||
(if (<= hoehe 0.0)
|
(if (<= hoehe 0.0)
|
||||||
(progn
|
(progn
|
||||||
(setq hoehe (getreal (strcat "\nHoehe (Z-Koordinate) <" (rtos *kreisel-default-hoehe* 2 0) ">: ")))
|
(setq hoehe (getreal (ssg-textf "kreisel-prompt-hoehe-z" (list (rtos *kreisel-default-hoehe* 2 0)))))
|
||||||
(if (null hoehe) (setq hoehe *kreisel-default-hoehe*))
|
(if (null hoehe) (setq hoehe *kreisel-default-hoehe*))
|
||||||
)
|
)
|
||||||
(princ (strcat "\n-> Hoehe aus Startpunkt uebernommen: " (rtos hoehe 2 0)))
|
(princ (ssg-textf "kreisel-hoehe-aus-startpunkt" (list (rtos hoehe 2 0))))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 6. Kreiselart abfragen
|
;; 6. Kreiselart abfragen
|
||||||
(setq typ (kreisel-ask-typ))
|
(setq typ (kreisel-ask-typ))
|
||||||
|
|
||||||
(princ (strcat "\n-> Abstand: " (rtos abstand 2 0) " mm"
|
(princ (ssg-textf "kreisel-connect-zusammenfassung"
|
||||||
" Rotation: " (rtos rotation 2 1) " Grad"
|
(list (rtos abstand 2 0) (rtos rotation 2 1) (rtos hoehe 2 0) typ)))
|
||||||
" Hoehe: " (rtos hoehe 2 0)
|
|
||||||
" Kreiselart: " typ))
|
|
||||||
|
|
||||||
;; 7. Modul einfuegen
|
;; 7. Modul einfuegen
|
||||||
(draw-module (list (car ptStart) (cadr ptStart) hoehe) abstand rotation
|
(draw-module (list (car ptStart) (cadr ptStart) hoehe) abstand rotation
|
||||||
(list (cons "KREISELART" typ)
|
(list (cons "KREISELART" typ)
|
||||||
(cons "HOEHE" (rtos hoehe 2 0))))
|
(cons "HOEHE" (rtos hoehe 2 0))))
|
||||||
|
|
||||||
(princ "\nKreisel Connect erfolgreich!")
|
(princ (ssg-text "kreisel-connect-erfolgreich"))
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -684,7 +679,7 @@
|
|||||||
;; hoehe : Hoehe in mm (oder nil fuer Z aus pt)
|
;; hoehe : Hoehe in mm (oder nil fuer Z aus pt)
|
||||||
;; Rueckgabe: Entity-Name des erzeugten Blocks oder nil
|
;; Rueckgabe: Entity-Name des erzeugten Blocks oder nil
|
||||||
(defun kreisel-insert-script (pt abstand rotation typ hoehe / z blockEnt)
|
(defun kreisel-insert-script (pt abstand rotation typ hoehe / z blockEnt)
|
||||||
(ssg-start "Kreisel Script Insert" '(("OSMODE") ("CECOLOR")))
|
(ssg-start (ssg-text "kreisel-start-script-insert") '(("OSMODE") ("CECOLOR")))
|
||||||
(if (null typ) (setq typ "STANDARD"))
|
(if (null typ) (setq typ "STANDARD"))
|
||||||
(setq z (if hoehe hoehe
|
(setq z (if hoehe hoehe
|
||||||
(if (and pt (caddr pt)) (caddr pt) *kreisel-default-hoehe*)))
|
(if (and pt (caddr pt)) (caddr pt) *kreisel-default-hoehe*)))
|
||||||
@@ -703,14 +698,14 @@
|
|||||||
;; hoehe : Hoehe in mm (oder nil fuer Z aus ptStart)
|
;; hoehe : Hoehe in mm (oder nil fuer Z aus ptStart)
|
||||||
;; Rueckgabe: Entity-Name des erzeugten Blocks oder nil
|
;; Rueckgabe: Entity-Name des erzeugten Blocks oder nil
|
||||||
(defun kreisel-connect-script (ptStart ptEnd typ hoehe / dx dy dist abstand rotation z blockEnt)
|
(defun kreisel-connect-script (ptStart ptEnd typ hoehe / dx dy dist abstand rotation z blockEnt)
|
||||||
(ssg-start "Kreisel Script Connect" '(("OSMODE") ("CECOLOR")))
|
(ssg-start (ssg-text "kreisel-start-script-connect") '(("OSMODE") ("CECOLOR")))
|
||||||
(if (null typ) (setq typ "STANDARD"))
|
(if (null typ) (setq typ "STANDARD"))
|
||||||
(setq dx (- (car ptEnd) (car ptStart))
|
(setq dx (- (car ptEnd) (car ptStart))
|
||||||
dy (- (cadr ptEnd) (cadr ptStart)))
|
dy (- (cadr ptEnd) (cadr ptStart)))
|
||||||
(setq dist (sqrt (+ (* dx dx) (* dy dy))))
|
(setq dist (sqrt (+ (* dx dx) (* dy dy))))
|
||||||
(setq abstand (- dist *kreisel-durchmesser*))
|
(setq abstand (- dist *kreisel-durchmesser*))
|
||||||
(if (<= abstand 0.0)
|
(if (<= abstand 0.0)
|
||||||
(progn (princ (strcat "\n[Connect] Distanz zu klein: " (rtos dist 2 0)))
|
(progn (princ (ssg-textf "kreisel-script-distanz-klein" (list (rtos dist 2 0))))
|
||||||
(ssg-end) nil)
|
(ssg-end) nil)
|
||||||
(progn
|
(progn
|
||||||
(setq rotation (* (/ 180.0 pi) (atan dy dx)))
|
(setq rotation (* (/ 180.0 pi) (atan dy dx)))
|
||||||
@@ -727,19 +722,19 @@
|
|||||||
|
|
||||||
;; Neue Befehle für Beschriftungs-Einstellungen
|
;; Neue Befehle für Beschriftungs-Einstellungen
|
||||||
(defun c:KreiselLabelPos ( / dx dy)
|
(defun c:KreiselLabelPos ( / dx dy)
|
||||||
(setq dx (getreal (strcat "\nX-Abstand von AN8-Mitte <" (rtos *kreisel-beschriftung-abstand-x* 2 0) ">: ")))
|
(setq dx (getreal (ssg-textf "kreisel-prompt-x-abstand" (list (rtos *kreisel-beschriftung-abstand-x* 2 0)))))
|
||||||
(if dx (setq *kreisel-beschriftung-abstand-x* dx))
|
(if dx (setq *kreisel-beschriftung-abstand-x* dx))
|
||||||
(setq dy (getreal (strcat "\nY-Abstand von AN8-Mitte <" (rtos *kreisel-beschriftung-abstand-y* 2 0) ">: ")))
|
(setq dy (getreal (ssg-textf "kreisel-prompt-y-abstand" (list (rtos *kreisel-beschriftung-abstand-y* 2 0)))))
|
||||||
(if dy (setq *kreisel-beschriftung-abstand-y* dy))
|
(if dy (setq *kreisel-beschriftung-abstand-y* dy))
|
||||||
(princ (strcat "\nNeue Beschriftungsposition: X=" (rtos *kreisel-beschriftung-abstand-x* 2 0)
|
(princ (ssg-textf "kreisel-neue-beschriftungsposition"
|
||||||
" Y=" (rtos *kreisel-beschriftung-abstand-y* 2 0)))
|
(list (rtos *kreisel-beschriftung-abstand-x* 2 0) (rtos *kreisel-beschriftung-abstand-y* 2 0))))
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
|
|
||||||
(defun c:KreiselLabelHoehe ( / h)
|
(defun c:KreiselLabelHoehe ( / h)
|
||||||
(setq h (getreal (strcat "\nTexthöhe <" (rtos *kreisel-beschriftung-hoehe* 2 0) ">: ")))
|
(setq h (getreal (ssg-textf "kreisel-prompt-texthoehe" (list (rtos *kreisel-beschriftung-hoehe* 2 0)))))
|
||||||
(if h (setq *kreisel-beschriftung-hoehe* h))
|
(if h (setq *kreisel-beschriftung-hoehe* h))
|
||||||
(princ (strcat "\nNeue Texthöhe: " (rtos *kreisel-beschriftung-hoehe* 2 0)))
|
(princ (ssg-textf "kreisel-neue-texthoehe" (list (rtos *kreisel-beschriftung-hoehe* 2 0))))
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -753,17 +748,17 @@
|
|||||||
;; -----------------------------------------------
|
;; -----------------------------------------------
|
||||||
(defun c:KreiselRedraw ( / sel ent ed attribs basePoint rotation newAbstand)
|
(defun c:KreiselRedraw ( / sel ent ed attribs basePoint rotation newAbstand)
|
||||||
|
|
||||||
(ssg-start "Kreisel Neu Zeichnen" '(("CECOLOR")))
|
(ssg-start (ssg-text "kreisel-start-redraw") '(("CECOLOR")))
|
||||||
|
|
||||||
;; 1. Bestehenden Kreisel-Block auswaehlen
|
;; 1. Bestehenden Kreisel-Block auswaehlen
|
||||||
(setq sel (entsel "\nKreisel-Block auswaehlen: "))
|
(setq sel (entsel (ssg-text "kreisel-prompt-block-auswaehlen")))
|
||||||
(if (null sel) (exit))
|
(if (null sel) (exit))
|
||||||
(setq ent (car sel))
|
(setq ent (car sel))
|
||||||
(setq ed (entget ent))
|
(setq ed (entget ent))
|
||||||
|
|
||||||
;; Pruefen ob INSERT
|
;; Pruefen ob INSERT
|
||||||
(if (/= (cdr (assoc 0 ed)) "INSERT")
|
(if (/= (cdr (assoc 0 ed)) "INSERT")
|
||||||
(progn (ssg-emsg "Kein Block ausgewaehlt!") (exit))
|
(progn (ssg-emsg (ssg-text "kreisel-emsg-kein-block")) (exit))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 2. Bestehende Werte auslesen
|
;; 2. Bestehende Werte auslesen
|
||||||
@@ -772,19 +767,20 @@
|
|||||||
(setq rotation (* (/ 180.0 pi) (cdr (assoc 50 ed))))
|
(setq rotation (* (/ 180.0 pi) (cdr (assoc 50 ed))))
|
||||||
|
|
||||||
;; NEU - Höhe aus Attributen lesen und anzeigen:
|
;; NEU - Höhe aus Attributen lesen und anzeigen:
|
||||||
(princ (strcat "\n-> Bestehend: Abstand=" (cdr (assoc "ABSTAND" attribs))
|
(princ (ssg-textf "kreisel-redraw-bestehend"
|
||||||
" Drehung=" (cdr (assoc "DREHUNG" attribs))
|
(list (cdr (assoc "ABSTAND" attribs))
|
||||||
" Höhe=" (cdr (assoc "HOEHE" attribs)) ;; <-- NEU
|
(cdr (assoc "DREHUNG" attribs))
|
||||||
" Art=" (cdr (assoc "KREISELART" attribs))))
|
(cdr (assoc "HOEHE" attribs))
|
||||||
|
(cdr (assoc "KREISELART" attribs)))))
|
||||||
|
|
||||||
;; 3. Neuen Abstand abfragen (Enter = beibehalten)
|
;; 3. Neuen Abstand abfragen (Enter = beibehalten)
|
||||||
(initget 6)
|
(initget 6)
|
||||||
(setq newAbstand (getdist (strcat "\nNeuer Abstand <" (cdr (assoc "ABSTAND" attribs)) ">: ")))
|
(setq newAbstand (getdist (ssg-textf "kreisel-prompt-neuer-abstand" (list (cdr (assoc "ABSTAND" attribs))))))
|
||||||
(if (null newAbstand)
|
(if (null newAbstand)
|
||||||
(setq newAbstand (atof (cdr (assoc "ABSTAND" attribs))))
|
(setq newAbstand (atof (cdr (assoc "ABSTAND" attribs))))
|
||||||
)
|
)
|
||||||
;; NEU - Neue Höhe abfragen:
|
;; NEU - Neue Höhe abfragen:
|
||||||
(setq newHoehe (getreal (strcat "\nNeue Höhe <" (cdr (assoc "HOEHE" attribs)) ">: ")))
|
(setq newHoehe (getreal (ssg-textf "kreisel-prompt-neue-hoehe" (list (cdr (assoc "HOEHE" attribs))))))
|
||||||
(if (null newHoehe)
|
(if (null newHoehe)
|
||||||
(setq newHoehe (atof (cdr (assoc "HOEHE" attribs))))
|
(setq newHoehe (atof (cdr (assoc "HOEHE" attribs))))
|
||||||
)
|
)
|
||||||
@@ -795,7 +791,7 @@
|
|||||||
(draw-module (list (car basePoint) (cadr basePoint) newHoehe)
|
(draw-module (list (car basePoint) (cadr basePoint) newHoehe)
|
||||||
newAbstand rotation attribs)
|
newAbstand rotation attribs)
|
||||||
|
|
||||||
(princ (strcat "\nKreisel neu gezeichnet. Abstand=" (rtos newAbstand 2 0)))
|
(princ (ssg-textf "kreisel-redraw-fertig" (list (rtos newAbstand 2 0))))
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -804,17 +800,17 @@
|
|||||||
;; KreiselQuick: Schnell mit Defaults (horizontal)
|
;; KreiselQuick: Schnell mit Defaults (horizontal)
|
||||||
;; --------------------------------------------
|
;; --------------------------------------------
|
||||||
(defun c:KreiselQuick ( / pt)
|
(defun c:KreiselQuick ( / pt)
|
||||||
(ssg-start "Kreisel Schnell Einfuegen" '(("CECOLOR")))
|
(ssg-start (ssg-text "kreisel-start-quick") '(("CECOLOR")))
|
||||||
(setq pt (getpoint "\nBasispunkt (AN-Seite): "))
|
(setq pt (getpoint (ssg-text "kreisel-prompt-basispunkt")))
|
||||||
;; NEU - Höhe abfragen:
|
;; NEU - Höhe abfragen:
|
||||||
(setq hoehe (getreal (strcat "\nHöhe (Z-Koordinate) <0>: ")))
|
(setq hoehe (getreal (ssg-textf "kreisel-prompt-hoehe-z" (list "0"))))
|
||||||
(if (null hoehe) (setq hoehe 0.0))
|
(if (null hoehe) (setq hoehe 0.0))
|
||||||
(if pt
|
(if pt
|
||||||
;; NEU - Höhe im Aufruf übergeben:
|
;; NEU - Höhe im Aufruf übergeben:
|
||||||
(draw-module (list (car pt) (cadr pt) hoehe) *kreisel-default-laenge* 0.0
|
(draw-module (list (car pt) (cadr pt) hoehe) *kreisel-default-laenge* 0.0
|
||||||
(list (cons "HOEHE" (rtos hoehe 2 0))))
|
(list (cons "HOEHE" (rtos hoehe 2 0))))
|
||||||
)
|
)
|
||||||
(princ "\nSchnell Einfuegen fertig.")
|
(princ (ssg-text "kreisel-quick-fertig"))
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -870,13 +866,13 @@
|
|||||||
(setq ent (ssname ss 0))
|
(setq ent (ssname ss 0))
|
||||||
)
|
)
|
||||||
|
|
||||||
(ssg-start "Kreisel bearbeiten" '(("OSMODE") ("CECOLOR") ("ATTREQ") ("ATTDIA")))
|
(ssg-start (ssg-text "kreisel-start-edit") '(("OSMODE") ("CECOLOR") ("ATTREQ") ("ATTDIA")))
|
||||||
(setvar "OSMODE" 0)
|
(setvar "OSMODE" 0)
|
||||||
|
|
||||||
;; 1. Block auswaehlen (falls nicht vorselektiert)
|
;; 1. Block auswaehlen (falls nicht vorselektiert)
|
||||||
(if (null ent)
|
(if (null ent)
|
||||||
(progn
|
(progn
|
||||||
(setq sel (entsel "\nKreisel-Block auswaehlen: "))
|
(setq sel (entsel (ssg-text "kreisel-prompt-block-auswaehlen")))
|
||||||
(if sel (setq ent (car sel)))
|
(if sel (setq ent (car sel)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -884,7 +880,7 @@
|
|||||||
|
|
||||||
(setq ed (entget ent))
|
(setq ed (entget ent))
|
||||||
(if (/= (cdr (assoc 0 ed)) "INSERT")
|
(if (/= (cdr (assoc 0 ed)) "INSERT")
|
||||||
(progn (ssg-emsg "Kein Block ausgewaehlt!") (ssg-end) (exit))
|
(progn (ssg-emsg (ssg-text "kreisel-emsg-kein-block")) (ssg-end) (exit))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 2. Bestehende Werte auslesen
|
;; 2. Bestehende Werte auslesen
|
||||||
@@ -895,7 +891,7 @@
|
|||||||
;; Pruefen ob Block Kreisel-Attribute hat (mindestens ABSTAND)
|
;; Pruefen ob Block Kreisel-Attribute hat (mindestens ABSTAND)
|
||||||
(if (null (assoc "ABSTAND" attribs))
|
(if (null (assoc "ABSTAND" attribs))
|
||||||
(progn
|
(progn
|
||||||
(ssg-emsg "Kein Kreisel-Block! (Attribut ABSTAND fehlt)")
|
(ssg-emsg (ssg-text "kreisel-emsg-kein-kreisel-block"))
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
@@ -912,15 +908,14 @@
|
|||||||
(setq attribs (subst (cons "HOEHE" (rtos (if (caddr basePoint) (caddr basePoint) 0.0) 2 1))
|
(setq attribs (subst (cons "HOEHE" (rtos (if (caddr basePoint) (caddr basePoint) 0.0) 2 1))
|
||||||
(assoc "HOEHE" attribs) attribs))
|
(assoc "HOEHE" attribs) attribs))
|
||||||
|
|
||||||
(princ (strcat "\n-> Bestehend: Abstand=" (cdr (assoc "ABSTAND" attribs))
|
(princ (ssg-textf "kreisel-edit-bestehend"
|
||||||
" Drehung=" (rtos rotation 2 1)
|
(list (cdr (assoc "ABSTAND" attribs)) (rtos rotation 2 1) (cdr (assoc "KREISELART" attribs)))))
|
||||||
" Art=" (cdr (assoc "KREISELART" attribs))))
|
|
||||||
|
|
||||||
;; 3. DCL-Dialog laden
|
;; 3. DCL-Dialog laden
|
||||||
(setq dcl-pfad (strcat (getenv "DXFM_DCL") "/kreisel_edit.dcl"))
|
(setq dcl-pfad (strcat (getenv "DXFM_DCL") "/kreisel_edit.dcl"))
|
||||||
(setq dat (load_dialog dcl-pfad))
|
(setq dat (load_dialog dcl-pfad))
|
||||||
(if (not (new_dialog "kreisel_edit" dat))
|
(if (not (new_dialog "kreisel_edit" dat))
|
||||||
(progn (alert (strcat "Dialog nicht verfuegbar: " dcl-pfad)) (ssg-end) (exit))
|
(progn (alert (ssg-textf "kreisel-edit-dialog-fehlt" (list dcl-pfad))) (ssg-end) (exit))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; Ausrichtungs-Labels fuer popup_list aufbauen
|
;; Ausrichtungs-Labels fuer popup_list aufbauen
|
||||||
@@ -999,13 +994,10 @@
|
|||||||
(draw-module (list (car basePoint) (cadr basePoint) (atof dlg-hoehe))
|
(draw-module (list (car basePoint) (cadr basePoint) (atof dlg-hoehe))
|
||||||
newAbstand newRotation attribs)
|
newAbstand newRotation attribs)
|
||||||
|
|
||||||
(princ (strcat "\nKreisel aktualisiert: "
|
(princ (ssg-textf "kreisel-edit-aktualisiert"
|
||||||
"Name=" dlg-name
|
(list dlg-name (rtos newAbstand 2 0) dlg-hoehe (rtos newRotation 2 1))))
|
||||||
" Abstand=" (rtos newAbstand 2 0)
|
|
||||||
" Hoehe=" dlg-hoehe
|
|
||||||
" Rotation=" (rtos newRotation 2 1)))
|
|
||||||
)
|
)
|
||||||
(princ "\nAbgebrochen.")
|
(princ (ssg-text "kreisel-abgebrochen"))
|
||||||
)
|
)
|
||||||
|
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
@@ -1016,13 +1008,13 @@
|
|||||||
;; KreiselParams: Aktuelle Parameter anzeigen
|
;; KreiselParams: Aktuelle Parameter anzeigen
|
||||||
;; --------------------------------------------
|
;; --------------------------------------------
|
||||||
(defun c:KreiselParams ()
|
(defun c:KreiselParams ()
|
||||||
(princ "\n=== Kreisel Parameter ===")
|
(princ (ssg-text "kreisel-params-header"))
|
||||||
(princ (strcat "\nKreiselart: " #Kreisel_Typ))
|
(princ (ssg-textf "kreisel-params-typ" (list #Kreisel_Typ)))
|
||||||
(princ (strcat "\nDurchmesser: " (rtos *kreisel-durchmesser* 2 0)))
|
(princ (ssg-textf "kreisel-params-durchmesser" (list (rtos *kreisel-durchmesser* 2 0))))
|
||||||
(princ (strcat "\nDefault-Laenge: " (rtos *kreisel-default-laenge* 2 0)))
|
(princ (ssg-textf "kreisel-params-default-laenge" (list (rtos *kreisel-default-laenge* 2 0))))
|
||||||
;; NEU - Default-Höhe anzeigen:
|
;; NEU - Default-Höhe anzeigen:
|
||||||
(princ (strcat "\nDefault-Höhe: " (rtos *kreisel-default-hoehe* 2 0)))
|
(princ (ssg-textf "kreisel-params-default-hoehe" (list (rtos *kreisel-default-hoehe* 2 0))))
|
||||||
(princ "\nAttribute im Block:")
|
(princ (ssg-text "kreisel-params-attribute-header"))
|
||||||
(foreach def *kreisel-attrib-defs*
|
(foreach def *kreisel-attrib-defs*
|
||||||
(princ (strcat "\n " (car def) " = " (cadr def)))
|
(princ (strcat "\n " (car def) " = " (cadr def)))
|
||||||
)
|
)
|
||||||
@@ -1045,12 +1037,12 @@
|
|||||||
(dbgf "c:ILS_Eckrad")
|
(dbgf "c:ILS_Eckrad")
|
||||||
|
|
||||||
;; 1. Beruehrpunkt (Tangentenpunkt)
|
;; 1. Beruehrpunkt (Tangentenpunkt)
|
||||||
(setq ptTangent (getpoint "\nBeruehrpunkt Eckrad (Tangente): "))
|
(setq ptTangent (getpoint (ssg-text "kreisel-eckrad-beruehrpunkt")))
|
||||||
(if (null ptTangent) (progn (dbgreturn nil) (exit)))
|
(if (null ptTangent) (progn (dbgreturn nil) (exit)))
|
||||||
(dbg 'ptTangent)
|
(dbg 'ptTangent)
|
||||||
|
|
||||||
;; 2. Richtungspunkt (Gummiband vom Beruehrpunkt)
|
;; 2. Richtungspunkt (Gummiband vom Beruehrpunkt)
|
||||||
(setq ptDir (getpoint ptTangent "\nRichtung zum Kreismittelpunkt: "))
|
(setq ptDir (getpoint ptTangent (ssg-text "kreisel-eckrad-richtung")))
|
||||||
(if (null ptDir) (progn (dbgreturn nil) (exit)))
|
(if (null ptDir) (progn (dbgreturn nil) (exit)))
|
||||||
(dbg 'ptDir)
|
(dbg 'ptDir)
|
||||||
|
|
||||||
@@ -1061,7 +1053,7 @@
|
|||||||
|
|
||||||
(if (<= dist (ssg-cfg-or "kreisel" "toleranz_min_distanz" 0.001))
|
(if (<= dist (ssg-cfg-or "kreisel" "toleranz_min_distanz" 0.001))
|
||||||
(progn
|
(progn
|
||||||
(princ "\nFehler: Beruehr- und Richtungspunkt sind identisch!")
|
(princ (ssg-text "kreisel-eckrad-fehler-identisch"))
|
||||||
(dbgreturn nil)
|
(dbgreturn nil)
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
@@ -1087,10 +1079,10 @@
|
|||||||
(if (and (> (length ptTangent) 2) (caddr ptTangent) (> (caddr ptTangent) 0))
|
(if (and (> (length ptTangent) 2) (caddr ptTangent) (> (caddr ptTangent) 0))
|
||||||
(progn
|
(progn
|
||||||
(setq hoehe (caddr ptTangent))
|
(setq hoehe (caddr ptTangent))
|
||||||
(princ (strcat "\n-> Hoehe aus 3D-Punkt uebernommen: " (rtos hoehe 2 0)))
|
(princ (ssg-textf "kreisel-hoehe-aus-3dpunkt" (list (rtos hoehe 2 0))))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(setq hoehe (getreal (strcat "\nHoehe (Z-Koordinate) <" (rtos *eckrad-default-hoehe* 2 0) ">: ")))
|
(setq hoehe (getreal (ssg-textf "kreisel-prompt-hoehe-z" (list (rtos *eckrad-default-hoehe* 2 0)))))
|
||||||
(if (null hoehe) (setq hoehe *eckrad-default-hoehe*))
|
(if (null hoehe) (setq hoehe *eckrad-default-hoehe*))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -1118,7 +1110,7 @@
|
|||||||
(dbg 'pt)
|
(dbg 'pt)
|
||||||
(dbg 'rotation)
|
(dbg 'rotation)
|
||||||
|
|
||||||
(ssg-start "Eckrad einfuegen" '(("ATTREQ") ("ATTDIA") ("OSMODE") ("CECOLOR")))
|
(ssg-start (ssg-text "kreisel-start-eckrad") '(("ATTREQ") ("ATTDIA") ("OSMODE") ("CECOLOR")))
|
||||||
|
|
||||||
;; Attribute vorbereiten
|
;; Attribute vorbereiten
|
||||||
(setq attribs (ssg-attrib-merge attribs *eckrad-attrib-defs*))
|
(setq attribs (ssg-attrib-merge attribs *eckrad-attrib-defs*))
|
||||||
@@ -1215,14 +1207,14 @@
|
|||||||
(dbgp (strcat "Blockdefinition erzeugt: " bname))
|
(dbgp (strcat "Blockdefinition erzeugt: " bname))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\nFehler: Keine Entities zum Block erstellen!")
|
(princ (ssg-text "kreisel-fehler-keine-entities"))
|
||||||
(dbgp "FEHLER: Keine Entities fuer Block!")
|
(dbgp "FEHLER: Keine Entities fuer Block!")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n-> Neue Blockdefinition: " bname))
|
(princ (ssg-textf "kreisel-neue-blockdef" (list bname)))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n-> Verwende bestehende Blockdefinition: " bname))
|
(princ (ssg-textf "kreisel-bestehende-blockdef" (list bname)))
|
||||||
(dbgp (strcat "Verwende bestehende Blockdefinition: " bname))
|
(dbgp (strcat "Verwende bestehende Blockdefinition: " bname))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -1259,29 +1251,28 @@
|
|||||||
)
|
)
|
||||||
(entupd block-ent)
|
(entupd block-ent)
|
||||||
|
|
||||||
(princ (strcat "\n-> Eckrad #" (itoa eckrad-nummer) " eingefuegt: " bname
|
(princ (ssg-textf "kreisel-eckrad-eingefuegt"
|
||||||
" bei " (rtos (car pt) 2 1) "," (rtos (cadr pt) 2 1)
|
(list (itoa eckrad-nummer) bname (rtos (car pt) 2 1) (rtos (cadr pt) 2 1)
|
||||||
" Rotation=" (rtos rotation 2 1)
|
(rtos rotation 2 1) block-hoehe)))
|
||||||
" Hoehe=" block-hoehe))
|
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
(dbgreturn (entlast))
|
(dbgreturn (entlast))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; NEU: KreiselLabelSetup - Hier einfügen!
|
;; NEU: KreiselLabelSetup - Hier einfügen!
|
||||||
(defun c:KreiselLabelSetup ( / hoehe farbe abstand schriftart)
|
(defun c:KreiselLabelSetup ( / hoehe farbe abstand schriftart)
|
||||||
(setq hoehe (getreal (strcat "\nSchrifthöhe <" (rtos *kreisel-beschriftung-hoehe* 2 0) ">: ")))
|
(setq hoehe (getreal (ssg-textf "kreisel-prompt-schrifthoehe" (list (rtos *kreisel-beschriftung-hoehe* 2 0)))))
|
||||||
(if hoehe (setq *kreisel-beschriftung-hoehe* hoehe))
|
(if hoehe (setq *kreisel-beschriftung-hoehe* hoehe))
|
||||||
|
|
||||||
(setq farbe (getint (strcat "\nSchriftfarbe (1=Rot,2=Gelb,3=Grün,4=Cyan,5=Blau,6=Magenta,7=Weiß) <" (itoa *kreisel-beschriftung-farbe*) ">: ")))
|
(setq farbe (getint (ssg-textf "kreisel-prompt-schriftfarbe" (list (itoa *kreisel-beschriftung-farbe*)))))
|
||||||
(if farbe (setq *kreisel-beschriftung-farbe* farbe))
|
(if farbe (setq *kreisel-beschriftung-farbe* farbe))
|
||||||
|
|
||||||
(setq abstand (getreal (strcat "\nAbstand über Kreisel-Mitte <" (rtos *kreisel-beschriftung-abstand-oben* 2 0) ">: ")))
|
(setq abstand (getreal (ssg-textf "kreisel-prompt-abstand-oben" (list (rtos *kreisel-beschriftung-abstand-oben* 2 0)))))
|
||||||
(if abstand (setq *kreisel-beschriftung-abstand-oben* abstand))
|
(if abstand (setq *kreisel-beschriftung-abstand-oben* abstand))
|
||||||
|
|
||||||
(princ (strcat "\nNeue Einstellungen: Höhe=" (rtos *kreisel-beschriftung-hoehe* 2 0)
|
(princ (ssg-textf "kreisel-labelsetup-fertig"
|
||||||
", Farbe=" (itoa *kreisel-beschriftung-farbe*)
|
(list (rtos *kreisel-beschriftung-hoehe* 2 0)
|
||||||
", Y-Versatz=" (rtos *kreisel-beschriftung-abstand-oben* 2 0)
|
(itoa *kreisel-beschriftung-farbe*)
|
||||||
", Schriftart=Arial"))
|
(rtos *kreisel-beschriftung-abstand-oben* 2 0))))
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+128
-90
@@ -28,7 +28,7 @@
|
|||||||
(setq data-pfad (getenv "DXFM_DATA"))
|
(setq data-pfad (getenv "DXFM_DATA"))
|
||||||
(if (null data-pfad)
|
(if (null data-pfad)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n[OMNI] FEHLER: DXFM_DATA nicht gesetzt!")
|
(princ (ssg-text "omni-fehler-dxfm-data"))
|
||||||
nil
|
nil
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
@@ -242,21 +242,21 @@
|
|||||||
;; --- BricsCAD-Befehl: Bogen-Info anzeigen ---
|
;; --- BricsCAD-Befehl: Bogen-Info anzeigen ---
|
||||||
(defun c:OMNI_INFO_BOGEN ( / id eintrag)
|
(defun c:OMNI_INFO_BOGEN ( / id eintrag)
|
||||||
(if (null *OMNI-BOEGEN*) (omni:load-data))
|
(if (null *OMNI-BOEGEN*) (omni:load-data))
|
||||||
(setq id (getstring T "\nSivasId des Bogens eingeben: "))
|
(setq id (getstring T (ssg-text "omni-info-bogen-prompt")))
|
||||||
(if (= id "") (princ "\nAbgebrochen.")
|
(if (= id "") (princ (ssg-text "omni-abbruch"))
|
||||||
(progn
|
(progn
|
||||||
;; Versuch als Zahl, dann als String
|
;; Versuch als Zahl, dann als String
|
||||||
(setq eintrag (omni:get-bogen (if (/= (atoi id) 0) (atoi id) id)))
|
(setq eintrag (omni:get-bogen (if (/= (atoi id) 0) (atoi id) id)))
|
||||||
(if eintrag
|
(if eintrag
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n ProfilTyp: " (omni:sivasid-to-str (omni:val eintrag "ProfilTyp"))))
|
(princ (ssg-textf "omni-bogen-info-profiltyp" (list (omni:sivasid-to-str (omni:val eintrag "ProfilTyp")))))
|
||||||
(princ (strcat "\n Radius: " (itoa (fix (omni:val eintrag "Radius")))))
|
(princ (ssg-textf "omni-bogen-info-radius" (list (itoa (fix (omni:val eintrag "Radius"))))))
|
||||||
(princ (strcat "\n KurvenWinkel: " (rtos (omni:val eintrag "KurvenWinkel") 2 1)))
|
(princ (ssg-textf "omni-bogen-info-kurvenwinkel" (list (rtos (omni:val eintrag "KurvenWinkel") 2 1))))
|
||||||
(princ (strcat "\n Breite: " (itoa (fix (omni:val eintrag "Breite")))))
|
(princ (ssg-textf "omni-bogen-info-breite" (list (itoa (fix (omni:val eintrag "Breite"))))))
|
||||||
(princ (strcat "\n Laenge: " (itoa (fix (omni:val eintrag "Länge")))))
|
(princ (ssg-textf "omni-bogen-info-laenge" (list (itoa (fix (omni:val eintrag "Länge"))))))
|
||||||
(princ (strcat "\n Antriebsart: " (itoa (fix (omni:val eintrag "Antriebsart")))))
|
(princ (ssg-textf "omni-bogen-info-antriebsart" (list (itoa (fix (omni:val eintrag "Antriebsart"))))))
|
||||||
)
|
)
|
||||||
(princ (strcat "\nKein Bogen mit SivasId '" id "' gefunden."))
|
(princ (ssg-textf "omni-bogen-nicht-gefunden" (list id)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -267,25 +267,25 @@
|
|||||||
;; --- BricsCAD-Befehl: Weichen-Info anzeigen ---
|
;; --- BricsCAD-Befehl: Weichen-Info anzeigen ---
|
||||||
(defun c:OMNI_INFO_WEICHE ( / id eintrag wkl)
|
(defun c:OMNI_INFO_WEICHE ( / id eintrag wkl)
|
||||||
(if (null *OMNI-WEICHEN*) (omni:load-data))
|
(if (null *OMNI-WEICHEN*) (omni:load-data))
|
||||||
(setq id (getstring T "\nSivasId der Weiche eingeben: "))
|
(setq id (getstring T (ssg-text "omni-info-weiche-prompt")))
|
||||||
(if (= id "") (princ "\nAbgebrochen.")
|
(if (= id "") (princ (ssg-text "omni-abbruch"))
|
||||||
(progn
|
(progn
|
||||||
(setq eintrag (omni:get-weiche (if (/= (atoi id) 0) (atoi id) id)))
|
(setq eintrag (omni:get-weiche (if (/= (atoi id) 0) (atoi id) id)))
|
||||||
(if eintrag
|
(if eintrag
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n ProfilTyp: " (omni:sivasid-to-str (omni:val eintrag "ProfilTyp"))))
|
(princ (ssg-textf "omni-weiche-info-profiltyp" (list (omni:sivasid-to-str (omni:val eintrag "ProfilTyp")))))
|
||||||
(princ (strcat "\n WeichenTyp: " (omni:sivasid-to-str (omni:val eintrag "WeichenTyp"))))
|
(princ (ssg-textf "omni-weiche-info-weichentyp" (list (omni:sivasid-to-str (omni:val eintrag "WeichenTyp")))))
|
||||||
(setq wkl (omni:val eintrag "KurvenWinkel"))
|
(setq wkl (omni:val eintrag "KurvenWinkel"))
|
||||||
(princ (strcat "\n KurvenWinkel: " (if (= (type wkl) 'INT) (itoa wkl) (rtos wkl 2 1))))
|
(princ (ssg-textf "omni-weiche-info-kurvenwinkel" (list (if (= (type wkl) 'INT) (itoa wkl) (rtos wkl 2 1)))))
|
||||||
(princ (strcat "\n Schaltungstyp: " (omni:sivasid-to-str (omni:val eintrag "Schaltungstyp"))))
|
(princ (ssg-textf "omni-weiche-info-schaltungstyp" (list (omni:sivasid-to-str (omni:val eintrag "Schaltungstyp")))))
|
||||||
(princ (strcat "\n Breite: " (itoa (fix (omni:val eintrag "Breite")))))
|
(princ (ssg-textf "omni-weiche-info-breite" (list (itoa (fix (omni:val eintrag "Breite"))))))
|
||||||
(princ (strcat "\n Laenge: " (itoa (fix (omni:val eintrag "Länge")))))
|
(princ (ssg-textf "omni-weiche-info-laenge" (list (itoa (fix (omni:val eintrag "Länge"))))))
|
||||||
(princ (strcat "\n KurvenRichtung: " (itoa (fix (omni:val eintrag "KurvenRichtung")))))
|
(princ (ssg-textf "omni-weiche-info-kurvenrichtung" (list (itoa (fix (omni:val eintrag "KurvenRichtung"))))))
|
||||||
(if (omni:val eintrag "WeichenkörperLänge")
|
(if (omni:val eintrag "WeichenkörperLänge")
|
||||||
(princ (strcat "\n WK-Laenge: " (rtos (omni:val eintrag "WeichenkörperLänge") 2 1)))
|
(princ (ssg-textf "omni-weiche-info-wklaenge" (list (rtos (omni:val eintrag "WeichenkörperLänge") 2 1))))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\nKeine Weiche mit SivasId '" id "' gefunden."))
|
(princ (ssg-textf "omni-weiche-nicht-gefunden" (list id)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -326,11 +326,13 @@
|
|||||||
|
|
||||||
|
|
||||||
;; --- Bogen-Auswahl-Dialog oeffnen ---
|
;; --- Bogen-Auswahl-Dialog oeffnen ---
|
||||||
;; winkel = KurvenWinkel (90, 67.5, 45, 22.5, 180)
|
;; winkel = KurvenWinkel (90, 67.5, 45, 22.5, 180)
|
||||||
;; init-hoehe / init-drehung = Vorbelegung (optional, fuer Edit-Modus)
|
;; init-hoehe / init-drehung = Vorbelegung (optional, fuer Edit-Modus)
|
||||||
|
;; profiltyp = optionales Praefix zum Filtern des ProfilTyp-Textes,
|
||||||
|
;; z.B. "APB 60" oder "APB 110" (nil = keine Einschraenkung)
|
||||||
;; Rueckgabe: (eintrag hoehe drehung) oder nil bei Abbruch
|
;; Rueckgabe: (eintrag hoehe drehung) oder nil bei Abbruch
|
||||||
(defun omni:bogen-dialog (winkel init-hoehe init-drehung / dcl-pfad dat boegen-liste
|
(defun omni:bogen-dialog (winkel init-hoehe init-drehung profiltyp / dcl-pfad dat boegen-liste
|
||||||
profil-liste ergebnis dlg-hoehe dlg-drehung)
|
profil-liste ergebnis dlg-hoehe dlg-drehung profil)
|
||||||
(if (null *OMNI-BOEGEN*) (omni:load-data))
|
(if (null *OMNI-BOEGEN*) (omni:load-data))
|
||||||
|
|
||||||
;; Defaults
|
;; Defaults
|
||||||
@@ -339,11 +341,31 @@
|
|||||||
|
|
||||||
;; Boegen nach Winkel filtern
|
;; Boegen nach Winkel filtern
|
||||||
(setq boegen-liste (omni:filter *OMNI-BOEGEN* "KurvenWinkel" winkel))
|
(setq boegen-liste (omni:filter *OMNI-BOEGEN* "KurvenWinkel" winkel))
|
||||||
|
|
||||||
|
;; Optional zusaetzlich nach ProfilTyp-Praefix filtern (z.B. "APB 60")
|
||||||
|
(if profiltyp
|
||||||
|
(setq boegen-liste
|
||||||
|
(vl-remove-if-not
|
||||||
|
'(lambda (e)
|
||||||
|
(setq profil (cdr (assoc "ProfilTyp" e)))
|
||||||
|
(and profil (= (vl-string-search profiltyp profil) 0))
|
||||||
|
)
|
||||||
|
boegen-liste
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
(if (null boegen-liste)
|
(if (null boegen-liste)
|
||||||
(progn
|
(progn
|
||||||
(alert (strcat "Keine Boegen fuer "
|
(alert (ssg-textf "omni-bogen-keine-gefunden"
|
||||||
(if (= (type winkel) 'INT) (itoa winkel) (rtos winkel 2 1))
|
(list
|
||||||
" Grad gefunden."))
|
(strcat
|
||||||
|
(if (= (type winkel) 'INT) (itoa winkel) (rtos winkel 2 1))
|
||||||
|
(ssg-text "omni-grad")
|
||||||
|
)
|
||||||
|
(if profiltyp (strcat " (" profiltyp ")") "")
|
||||||
|
)
|
||||||
|
))
|
||||||
nil
|
nil
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
@@ -358,7 +380,7 @@
|
|||||||
(setq dcl-pfad (strcat (getenv "DXFM_DCL") "/omniflo_boegen.dcl"))
|
(setq dcl-pfad (strcat (getenv "DXFM_DCL") "/omniflo_boegen.dcl"))
|
||||||
(setq dat (load_dialog dcl-pfad))
|
(setq dat (load_dialog dcl-pfad))
|
||||||
(if (not (new_dialog "omniflo_boegen" dat))
|
(if (not (new_dialog "omniflo_boegen" dat))
|
||||||
(progn (alert "Bogen-Dialog konnte nicht geladen werden.") nil)
|
(progn (alert (ssg-text "omni-bogen-dialog-ladefehler")) nil)
|
||||||
(progn
|
(progn
|
||||||
;; Dropdown befuellen
|
;; Dropdown befuellen
|
||||||
(start_list "bogenart")
|
(start_list "bogenart")
|
||||||
@@ -405,47 +427,57 @@
|
|||||||
;; ============================================================
|
;; ============================================================
|
||||||
|
|
||||||
;; --- Omniflo / Boegen ---
|
;; --- Omniflo / Boegen ---
|
||||||
(defun c:OMNI_APB_630_90 ( / dlg-result)
|
(defun c:OMNI_APB60_90 ( / dlg-result)
|
||||||
(setq dlg-result (omni:bogen-dialog 90 nil nil))
|
(setq dlg-result (omni:bogen-dialog 90 nil nil "APB 60"))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[BOGEN] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-bogen"))
|
||||||
|
)
|
||||||
|
(princ)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(defun c:OMNI_APB_630_90 ( / dlg-result)
|
||||||
|
(setq dlg-result (omni:bogen-dialog 90 nil nil "APB 110"))
|
||||||
|
(if dlg-result
|
||||||
|
(omni:insert-from-entry dlg-result)
|
||||||
|
(princ (ssg-text "omni-abbruch-bogen"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
|
|
||||||
(defun c:OMNI_APB_550_675 ( / dlg-result)
|
(defun c:OMNI_APB_550_675 ( / dlg-result)
|
||||||
(setq dlg-result (omni:bogen-dialog 67.5 nil nil))
|
(setq dlg-result (omni:bogen-dialog 67.5 nil nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[BOGEN] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-bogen"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
|
|
||||||
(defun c:OMNI_APB_630_45 ( / dlg-result)
|
(defun c:OMNI_APB_630_45 ( / dlg-result)
|
||||||
(setq dlg-result (omni:bogen-dialog 45 nil nil))
|
(setq dlg-result (omni:bogen-dialog 45 nil nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[BOGEN] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-bogen"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
|
|
||||||
(defun c:OMNI_APB_550_225 ( / dlg-result)
|
(defun c:OMNI_APB_550_225 ( / dlg-result)
|
||||||
(setq dlg-result (omni:bogen-dialog 22.5 nil nil))
|
(setq dlg-result (omni:bogen-dialog 22.5 nil nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[BOGEN] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-bogen"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
|
|
||||||
(defun c:OMNI_APB_650_180 ( / dlg-result)
|
(defun c:OMNI_APB_650_180 ( / dlg-result)
|
||||||
(setq dlg-result (omni:bogen-dialog 180 nil nil))
|
(setq dlg-result (omni:bogen-dialog 180 nil nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[BOGEN] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-bogen"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -485,7 +517,7 @@
|
|||||||
(setq srcAttribs (append srcAttribs (list (cons "ID" ""))))
|
(setq srcAttribs (append srcAttribs (list (cons "ID" ""))))
|
||||||
)
|
)
|
||||||
(if (null srcAttribs)
|
(if (null srcAttribs)
|
||||||
(progn (princ "\n[OMNI] Keine Attribute im Quell-Block gefunden.") nil)
|
(progn (princ (ssg-text "omni-insert-keine-attribute")) nil)
|
||||||
(progn
|
(progn
|
||||||
;; LAENGEMAX aus Quell-Attribut lesen (falls vorhanden), sonst Parameter
|
;; LAENGEMAX aus Quell-Attribut lesen (falls vorhanden), sonst Parameter
|
||||||
(if (and (assoc "LAENGEMAX" srcAttribs)
|
(if (and (assoc "LAENGEMAX" srcAttribs)
|
||||||
@@ -493,9 +525,9 @@
|
|||||||
(setq laengemax (atof (cdr (assoc "LAENGEMAX" srcAttribs))))
|
(setq laengemax (atof (cdr (assoc "LAENGEMAX" srcAttribs))))
|
||||||
)
|
)
|
||||||
|
|
||||||
(setq pt (getpoint "\nEinfuegepunkt waehlen: "))
|
(setq pt (getpoint (ssg-text "omni-prompt-einfuegepunkt")))
|
||||||
(if (null pt)
|
(if (null pt)
|
||||||
(progn (princ "\n[OMNI] Abgebrochen.") nil)
|
(progn (princ (ssg-text "omni-abbruch-omni")) nil)
|
||||||
(progn
|
(progn
|
||||||
(ssg-start "OMNI Aluprofil" '(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
(ssg-start "OMNI Aluprofil" '(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
||||||
;; ATTREQ/ATTDIA auf 0 setzen (werden durch ssg-end wiederhergestellt)
|
;; ATTREQ/ATTDIA auf 0 setzen (werden durch ssg-end wiederhergestellt)
|
||||||
@@ -515,22 +547,20 @@
|
|||||||
;; 2. Endpunkt fuer Fahrstrecke abfragen (Schleife bei Ueberschreitung)
|
;; 2. Endpunkt fuer Fahrstrecke abfragen (Schleife bei Ueberschreitung)
|
||||||
(setq ok nil)
|
(setq ok nil)
|
||||||
(while (not ok)
|
(while (not ok)
|
||||||
(setq pt2 (getpoint pt "\nEndpunkt der Fahrstrecke waehlen: "))
|
(setq pt2 (getpoint pt (ssg-text "omni-prompt-endpunkt-fahrstrecke")))
|
||||||
(if (null pt2)
|
(if (null pt2)
|
||||||
(progn
|
(progn
|
||||||
;; Abbruch: Text loeschen
|
;; Abbruch: Text loeschen
|
||||||
(command "_.ERASE" textEnt "")
|
(command "_.ERASE" textEnt "")
|
||||||
(princ "\n[OMNI] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-omni"))
|
||||||
(setq ok T pt nil)
|
(setq ok T pt nil)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(setq laenge (distance (list (car pt) (cadr pt))
|
(setq laenge (distance (list (car pt) (cadr pt))
|
||||||
(list (car pt2) (cadr pt2))))
|
(list (car pt2) (cadr pt2))))
|
||||||
(if (> laenge laengemax)
|
(if (> laenge laengemax)
|
||||||
(alert (strcat "Die gewuenschte Fahrstreckenlaenge von "
|
(alert (ssg-textf "omni-laenge-ueberschritten"
|
||||||
(rtos laenge 2 0) " mm ueberschreitet die Maximallaenge von "
|
(list (rtos laenge 2 0) (rtos laengemax 2 0))))
|
||||||
(rtos laengemax 2 0) " mm des Fahrstreckenprofils.\n"
|
|
||||||
"Bitte neu definieren!"))
|
|
||||||
(progn
|
(progn
|
||||||
(setq laengeStr (rtos laenge 2 0))
|
(setq laengeStr (rtos laenge 2 0))
|
||||||
(setq dx (- (car pt2) (car pt))
|
(setq dx (- (car pt2) (car pt))
|
||||||
@@ -604,7 +634,7 @@
|
|||||||
(ssg-id-generate blockEnt)
|
(ssg-id-generate blockEnt)
|
||||||
)
|
)
|
||||||
|
|
||||||
(princ (strcat "\n[OMNI] " bname " eingefuegt. Laenge=" laengeStr " mm"))
|
(princ (ssg-textf "omni-insert-block-eingefuegt" (list bname laengeStr)))
|
||||||
(setq ok T)
|
(setq ok T)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -756,14 +786,16 @@
|
|||||||
|
|
||||||
(if (null basis-liste)
|
(if (null basis-liste)
|
||||||
(progn
|
(progn
|
||||||
(alert (strcat "Keine Weichen fuer "
|
(alert (ssg-textf "omni-weiche-keine-gefunden"
|
||||||
(cond
|
(list
|
||||||
((null winkel) "alle Winkel")
|
(cond
|
||||||
((= (type winkel) 'INT) (strcat (itoa winkel) " Grad"))
|
((null winkel) (ssg-text "omni-alle-winkel"))
|
||||||
(T (strcat (rtos winkel 2 1) " Grad"))
|
((= (type winkel) 'INT) (strcat (itoa winkel) (ssg-text "omni-grad")))
|
||||||
|
(T (strcat (rtos winkel 2 1) (ssg-text "omni-grad")))
|
||||||
|
)
|
||||||
|
(if weichentyp (strcat " / " weichentyp) "")
|
||||||
)
|
)
|
||||||
(if weichentyp (strcat " / " weichentyp) "")
|
))
|
||||||
" gefunden."))
|
|
||||||
nil
|
nil
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
@@ -779,7 +811,7 @@
|
|||||||
(setq dcl-pfad (strcat (getenv "DXFM_DCL") "/omniflo_weichen.dcl"))
|
(setq dcl-pfad (strcat (getenv "DXFM_DCL") "/omniflo_weichen.dcl"))
|
||||||
(setq dat (load_dialog dcl-pfad))
|
(setq dat (load_dialog dcl-pfad))
|
||||||
(if (not (new_dialog "omniflo_weichen" dat))
|
(if (not (new_dialog "omniflo_weichen" dat))
|
||||||
(progn (alert "Weichen-Dialog konnte nicht geladen werden.") nil)
|
(progn (alert (ssg-text "omni-weiche-dialog-ladefehler")) nil)
|
||||||
(progn
|
(progn
|
||||||
;; Dropdown befuellen
|
;; Dropdown befuellen
|
||||||
(start_list "profiltyp")
|
(start_list "profiltyp")
|
||||||
@@ -844,20 +876,20 @@
|
|||||||
(setq omniflo-pfad (getenv "DXFM_OMNIFLO"))
|
(setq omniflo-pfad (getenv "DXFM_OMNIFLO"))
|
||||||
(if (null omniflo-pfad)
|
(if (null omniflo-pfad)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n[OMNI] FEHLER: DXFM_OMNIFLO nicht gesetzt!")
|
(princ (ssg-text "omni-fehler-dxfm-omniflo"))
|
||||||
nil
|
nil
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(setq dxf-pfad (strcat omniflo-pfad "/" sivasnr-str ".dxf"))
|
(setq dxf-pfad (strcat omniflo-pfad "/" sivasnr-str ".dxf"))
|
||||||
(if (not (findfile dxf-pfad))
|
(if (not (findfile dxf-pfad))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n[OMNI] FEHLER: DXF nicht gefunden: " dxf-pfad))
|
(princ (ssg-textf "omni-fehler-dxf-nicht-gefunden" (list dxf-pfad)))
|
||||||
nil
|
nil
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(setq pt (getpoint "\nEinfuegepunkt waehlen: "))
|
(setq pt (getpoint (ssg-text "omni-prompt-einfuegepunkt")))
|
||||||
(if (null pt)
|
(if (null pt)
|
||||||
(progn (princ "\n[OMNI] Abgebrochen.") nil)
|
(progn (princ (ssg-text "omni-abbruch-omni")) nil)
|
||||||
(progn
|
(progn
|
||||||
(ssg-start "OMNI DXF Insert" '(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
(ssg-start "OMNI DXF Insert" '(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
||||||
(setvar "ATTREQ" 0)
|
(setvar "ATTREQ" 0)
|
||||||
@@ -904,10 +936,13 @@
|
|||||||
(ssg-id-generate blockEnt)
|
(ssg-id-generate blockEnt)
|
||||||
)
|
)
|
||||||
|
|
||||||
(princ (strcat "\n[OMNI] " sivasnr-str " eingefuegt."
|
(princ (ssg-textf "omni-dxf-eingefuegt"
|
||||||
" Hoehe=" (if hoehe hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000"))
|
(list
|
||||||
" Drehung=" (if drehung drehung (ssg-cfg-or "omniflo" "default_drehung" "0"))
|
sivasnr-str
|
||||||
(if layer-name (strcat " Layer=" layer-name) "")))
|
(if hoehe hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000"))
|
||||||
|
(if drehung drehung (ssg-cfg-or "omniflo" "default_drehung" "0"))
|
||||||
|
(if layer-name (strcat " Layer=" layer-name) "")
|
||||||
|
)))
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
pt
|
pt
|
||||||
)
|
)
|
||||||
@@ -928,8 +963,8 @@
|
|||||||
(setq hoehe (cadr dlg-result))
|
(setq hoehe (cadr dlg-result))
|
||||||
(setq drehung (caddr dlg-result))
|
(setq drehung (caddr dlg-result))
|
||||||
(setq sivasnr-str (omni:sivasid-to-str (omni:val eintrag "Sivasnr")))
|
(setq sivasnr-str (omni:sivasid-to-str (omni:val eintrag "Sivasnr")))
|
||||||
(princ (strcat "\n[OMNI] Einfuegen: "
|
(princ (ssg-textf "omni-einfuegen-info"
|
||||||
(omni:val eintrag "ProfilTyp") " (" sivasnr-str ")"))
|
(list (omni:val eintrag "ProfilTyp") sivasnr-str)))
|
||||||
(omni:insert-dxf sivasnr-str hoehe drehung)
|
(omni:insert-dxf sivasnr-str hoehe drehung)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -945,7 +980,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 90 "Einzelweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 90 "Einzelweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -954,7 +989,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 90 "Doppelweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 90 "Doppelweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -963,7 +998,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 90 "Dreiwegeweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 90 "Dreiwegeweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -973,7 +1008,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 45 "Einzelweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 45 "Einzelweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -982,7 +1017,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 45 "Doppelweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 45 "Doppelweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -991,7 +1026,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 45 "Dreiwegeweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 45 "Dreiwegeweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -1001,7 +1036,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 0 "Einzelweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 0 "Einzelweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -1010,7 +1045,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 0 "Doppelweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 0 "Doppelweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -1019,7 +1054,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 0 "Dreiwegeweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 0 "Dreiwegeweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -1029,7 +1064,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 22.5 "Einzelweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 22.5 "Einzelweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -1038,7 +1073,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 22.5 "Doppelweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 22.5 "Doppelweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -1047,7 +1082,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog 22.5 "Dreiwegeweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog 22.5 "Dreiwegeweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -1057,7 +1092,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog nil "Deltaweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog nil "Deltaweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -1066,7 +1101,7 @@
|
|||||||
(setq dlg-result (omni:weichen-dialog nil "Sternweiche" nil nil))
|
(setq dlg-result (omni:weichen-dialog nil "Sternweiche" nil nil))
|
||||||
(if dlg-result
|
(if dlg-result
|
||||||
(omni:insert-from-entry dlg-result)
|
(omni:insert-from-entry dlg-result)
|
||||||
(princ "\n[WEICHE] Abgebrochen.")
|
(princ (ssg-text "omni-abbruch-weiche"))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -1096,7 +1131,7 @@
|
|||||||
;; 1. Block auswaehlen (falls nicht vorselektiert)
|
;; 1. Block auswaehlen (falls nicht vorselektiert)
|
||||||
(if (null ent)
|
(if (null ent)
|
||||||
(progn
|
(progn
|
||||||
(setq sel (entsel "\nOmniflo-Element auswaehlen: "))
|
(setq sel (entsel (ssg-text "omni-edit-prompt-auswahl")))
|
||||||
(if sel (setq ent (car sel)))
|
(if sel (setq ent (car sel)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -1104,7 +1139,7 @@
|
|||||||
|
|
||||||
(setq ed (entget ent))
|
(setq ed (entget ent))
|
||||||
(if (/= (cdr (assoc 0 ed)) "INSERT")
|
(if (/= (cdr (assoc 0 ed)) "INSERT")
|
||||||
(progn (ssg-emsg "Kein Block ausgewaehlt!") (ssg-end) (exit))
|
(progn (ssg-emsg (ssg-text "omni-edit-kein-block")) (ssg-end) (exit))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 2. Bestehende Attribute lesen
|
;; 2. Bestehende Attribute lesen
|
||||||
@@ -1160,7 +1195,7 @@
|
|||||||
|
|
||||||
(if (null eintrag)
|
(if (null eintrag)
|
||||||
(progn
|
(progn
|
||||||
(ssg-emsg "Kein Omniflo-Element erkannt! (ARTINR/Blockname nicht im Katalog)")
|
(ssg-emsg (ssg-text "omni-edit-kein-element"))
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
@@ -1171,7 +1206,7 @@
|
|||||||
(if (= typ "bogen")
|
(if (= typ "bogen")
|
||||||
(progn
|
(progn
|
||||||
(setq winkel (cdr (assoc "KurvenWinkel" eintrag)))
|
(setq winkel (cdr (assoc "KurvenWinkel" eintrag)))
|
||||||
(setq dlg-result (omni:bogen-dialog winkel hoehe drehung))
|
(setq dlg-result (omni:bogen-dialog winkel hoehe drehung nil))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(setq winkel (cdr (assoc "KurvenWinkel" eintrag)))
|
(setq winkel (cdr (assoc "KurvenWinkel" eintrag)))
|
||||||
@@ -1181,7 +1216,7 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
(if (null dlg-result)
|
(if (null dlg-result)
|
||||||
(progn (princ "\nAbgebrochen.") (ssg-end) (exit))
|
(progn (princ (ssg-text "omni-abbruch")) (ssg-end) (exit))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 5. Neuen Eintrag und Werte extrahieren
|
;; 5. Neuen Eintrag und Werte extrahieren
|
||||||
@@ -1194,7 +1229,7 @@
|
|||||||
(setq dxf-pfad (strcat (getenv "DXFM_OMNIFLO") "/" sivasnr-str ".dxf"))
|
(setq dxf-pfad (strcat (getenv "DXFM_OMNIFLO") "/" sivasnr-str ".dxf"))
|
||||||
(if (not (findfile dxf-pfad))
|
(if (not (findfile dxf-pfad))
|
||||||
(progn
|
(progn
|
||||||
(ssg-emsg (strcat "DXF nicht gefunden: " dxf-pfad))
|
(ssg-emsg (ssg-textf "omni-edit-dxf-nicht-gefunden" (list dxf-pfad)))
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
@@ -1223,9 +1258,12 @@
|
|||||||
(cons "DREHUNG" (if new-drehung new-drehung (ssg-cfg-or "omniflo" "default_drehung" "0")))))
|
(cons "DREHUNG" (if new-drehung new-drehung (ssg-cfg-or "omniflo" "default_drehung" "0")))))
|
||||||
)
|
)
|
||||||
|
|
||||||
(princ (strcat "\n[OMNI] Element aktualisiert: " sivasnr-str
|
(princ (ssg-textf "omni-edit-aktualisiert"
|
||||||
" Hoehe=" (if new-hoehe new-hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000"))
|
(list
|
||||||
" Drehung=" (if new-drehung new-drehung (ssg-cfg-or "omniflo" "default_drehung" "0"))))
|
sivasnr-str
|
||||||
|
(if new-hoehe new-hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000"))
|
||||||
|
(if new-drehung new-drehung (ssg-cfg-or "omniflo" "default_drehung" "0"))
|
||||||
|
)))
|
||||||
|
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
(princ)
|
(princ)
|
||||||
|
|||||||
+64
-4
@@ -15,7 +15,7 @@ _MENULOAD → menu/SSG_LIB.mnu auswaehlen
|
|||||||
```
|
```
|
||||||
|
|
||||||
BricsCAD laedt daraufhin automatisch `SSG_LIB.mnl`, welches alle Module
|
BricsCAD laedt daraufhin automatisch `SSG_LIB.mnl`, welches alle Module
|
||||||
per `ssg-ensure` initialisiert (Kern: ssg_core/dbg/dialog/layer, dann
|
per `ssg-ensure` initialisiert (Kern: ssg_core/lang/dbg/dialog/layer, dann
|
||||||
alle Feature-Module). Details: siehe `../CLAUDE.md` Abschnitt "Lademechanismus".
|
alle Feature-Module). Details: siehe `../CLAUDE.md` Abschnitt "Lademechanismus".
|
||||||
|
|
||||||
**Manuell laden (Notfall / Entwicklung):**
|
**Manuell laden (Notfall / Entwicklung):**
|
||||||
@@ -26,6 +26,28 @@ alle Feature-Module). Details: siehe `../CLAUDE.md` Abschnitt "Lademechanismus".
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Status: noch offene Menueintraege (im Menue ausgegraut)
|
||||||
|
|
||||||
|
Die folgenden Menueintraege rufen aktuell nur eine Dummy-Funktion auf (Meldung
|
||||||
|
`[DUMMY]`, keine Geometrie). Sie sind in `menu/SSG_LIB.mnu` mit `~` **ausgegraut**
|
||||||
|
und werden erst bei echter Implementierung wieder aktiviert. Der `~`-Marker steht
|
||||||
|
am Label-Anfang, bei Submenue-Schliessern hinter dem `<-` (`[<-~Label]`).
|
||||||
|
|
||||||
|
| Menuebereich | Eintraege | Definiert in |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| ILS ▸ Zusatzmodul | BTMT-Beladung, BTMT-Entladung | `SSG_LIB_Commands.lsp` |
|
||||||
|
| ILS ▸ Foerderer | Durch TEF angetriebene Strecke; Kurven 90/60/30 links/rechts angetrieben Aussen + Innen (12) | `SSG_LIB_Commands.lsp` |
|
||||||
|
| ILS ▸ Gefaellestrecke | Kurven 90/60/30 links/rechts Gefaellestrecke (6) | `SSG_LIB_Commands.lsp` |
|
||||||
|
| Omniflo ▸ TEF Elemente | UmlenkR/L, AntriebL/R, TEF Gerade, KettenFoerderer (6) | `OmniModulInsert.lsp` |
|
||||||
|
| Omniflo ▸ Verbinder | alle `OMNI_TV_*` (18) | `OmniModulInsert.lsp` |
|
||||||
|
| Omniflo ▸ Boegen fuer Weichen | alle `OMNI_APBW_*` (14) | `OmniModulInsert.lsp` |
|
||||||
|
|
||||||
|
Aktiv (implementiert) sind u.a.: Kreisel, Eckrad, VarioFoerderer, EtageVarioFoerderer,
|
||||||
|
Gefaellestrecke, Omniflo Boegen (APB), Aluprofil-Geraden (AP), alle Weichen
|
||||||
|
(W90/W45/WP/WK/WKomb), Export (Sivas/CSV) und die Tests.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Dateien
|
## Dateien
|
||||||
|
|
||||||
### `ssg_core.lsp` – Kernbibliothek
|
### `ssg_core.lsp` – Kernbibliothek
|
||||||
@@ -111,6 +133,20 @@ Interne Parser-Funktionen (nicht direkt aufrufen):
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### `ssg_lang.lsp` – Sprachumschaltung (Deutsch/Englisch)
|
||||||
|
|
||||||
|
Zentrale Textverwaltung fuer benutzersichtbare Meldungen. Kern-Modul, wird direkt nach `ssg_core` geladen. Wird schrittweise auf weitere Module ausgerollt (siehe `doc/translate.md`).
|
||||||
|
|
||||||
|
| Funktion | Beschreibung |
|
||||||
|
| --- | --- |
|
||||||
|
| `ssg-text key` | Liefert Text zu `key` in `*ssg-lang*`, Fallback `de_DE`, dann Key selbst |
|
||||||
|
| `ssg-textf key werte` | Wie `ssg-text`, ersetzt Platzhalter `%1 %2 ...` durch `werte` (Liste) |
|
||||||
|
|
||||||
|
Sprache umschalten: Befehl `SSG_SPRACHE` (Menue → Konfiguration → Sprache) setzt `*ssg-lang*`
|
||||||
|
live und persistiert via `(setenv "DXFM_LANG" ...)`. Default ohne `DXFM_LANG` ist `"de_DE"`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### `ssg_dbg.lsp` – Debug-Logging
|
### `ssg_dbg.lsp` – Debug-Logging
|
||||||
|
|
||||||
Dateibasiertes Debug-Log mit gepuffertem Schreiben. `dbgf`/`dbg`/`dbgmsg` puffern im Speicher, `dbgreturn` flusht auf die Platte (open/append/close).
|
Dateibasiertes Debug-Log mit gepuffertem Schreiben. `dbgf`/`dbg`/`dbgmsg` puffern im Speicher, `dbgreturn` flusht auf die Platte (open/append/close).
|
||||||
@@ -248,6 +284,21 @@ Der Omniflo-CSV-Export (Bogen/Weiche/Gerade, inkl. Merkmale-Aufbau und Sum-Zeile
|
|||||||
seit Entfernung von `c:OMNI_EXPORT` ausschließlich über `c:EXPORTCSV` → `lib/export_csv.py`
|
seit Entfernung von `c:OMNI_EXPORT` ausschließlich über `c:EXPORTCSV` → `lib/export_csv.py`
|
||||||
(`build_bogen_merkmale`, `build_weiche_merkmale`, `build_gerade_merkmale`, `build_omni_sum_merkmale`).
|
(`build_bogen_merkmale`, `build_weiche_merkmale`, `build_gerade_merkmale`, `build_omni_sum_merkmale`).
|
||||||
|
|
||||||
|
**Ausgabeordner:** `c:EXPORTSIVAS`/`c:EXPORTCSV` schreiben immer nach `DXFM_RESULTS`.
|
||||||
|
`TEST_EXPORT_ALL` (siehe `tests/test_export_all.lsp`) leitet waehrend des Testlaufs stattdessen
|
||||||
|
nach `DXFM_TESTOUT` um, über die reine Lisp-Sitzungsvariable `*export-test-override*` (wird von
|
||||||
|
`csv:run-export` zusaetzlich zu `DXFM_RESULTS` abgefragt und danach garantiert wieder auf `nil`
|
||||||
|
zurueckgesetzt, auch bei einem Fehler, ueber `vl-catch-all-apply`).
|
||||||
|
|
||||||
|
**Wichtig:** Der Umweg über `*export-test-override*` ist bewusst gewaehlt und **kein**
|
||||||
|
`(setenv "DXFM_RESULTS" ...)`. In BricsCAD/AutoCAD schreibt `(setenv ...)` nicht nur in den
|
||||||
|
Windows-Prozess, sondern dauerhaft in die Profil-Registry der Anwendung – der Wert überlebt
|
||||||
|
damit jeden Neustart und jedes `setenv.bat`, bis er erneut per `(setenv)` überschrieben wird.
|
||||||
|
Ein einziger `(setenv "DXFM_RESULTS" ...)`-Aufruf (z. B. ein frueherer, unvollstaendiger
|
||||||
|
Testlauf) würde `DXFM_RESULTS` für alle künftigen Sitzungen unwiderruflich auf den Testordner
|
||||||
|
umbiegen. Falls das bereits passiert ist, hilft nur ein manuelles
|
||||||
|
`(setenv "DXFM_RESULTS" "<richtiger Pfad>")` in BricsCAD, um den Profil-Wert zu korrigieren.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### `tests.lsp` – Testbefehle
|
### `tests.lsp` – Testbefehle
|
||||||
@@ -289,9 +340,9 @@ 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 |
|
| 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) |
|
| 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 |
|
| Geraden | `OMNI_AP60`, `OMNI_AP110`, `OMNI_APG110` | Omniflo-Geradenstuecke |
|
||||||
| TEF | `OMNI_TEF_UmlenkR/L`, `OMNI_TEF_AntriebL/R`, `OMNI_TEF_Gerade` | Omniflo-TEF-Elemente |
|
| TEF ⚠️ | `OMNI_TEF_UmlenkR/L`, `OMNI_TEF_AntriebL/R`, `OMNI_TEF_Gerade`, `OMNI_KettenFoerderer` | **Dummy** (noch nicht implementiert, im Menue ausgegraut) |
|
||||||
| Transferwagen | `OMNI_TV_*` | Transferwagen-Komponenten und Schaltwerke |
|
| Transferwagen ⚠️ | `OMNI_TV_*` | **Dummy** (noch nicht implementiert, im Menue ausgegraut) |
|
||||||
| Bogenweichen | `OMNI_APBW_*` | Omniflo-Bogenweichen (diverse Radien/Winkel) |
|
| Bogenweichen ⚠️ | `OMNI_APBW_*` | **Dummy** (noch nicht implementiert, im Menue ausgegraut) |
|
||||||
| Bearbeiten | `OMNI_EDIT` | Omniflo-Block selektieren und Attribute bearbeiten |
|
| Bearbeiten | `OMNI_EDIT` | Omniflo-Block selektieren und Attribute bearbeiten |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -299,6 +350,8 @@ AutoLISP-Implementierung fuer alle Omniflo-Komponenten: Boegen, Weichen, Verbind
|
|||||||
### `SSG_LIB_Commands.lsp` – Dummy-Befehle und SSG_BLOCKEDIT
|
### `SSG_LIB_Commands.lsp` – Dummy-Befehle und SSG_BLOCKEDIT
|
||||||
|
|
||||||
Platzhalter-Definitionen fuer noch nicht implementierte Menueintraege. Gibt beim Aufruf eine Meldung aus.
|
Platzhalter-Definitionen fuer noch nicht implementierte Menueintraege. Gibt beim Aufruf eine Meldung aus.
|
||||||
|
Alle zugehoerigen Menueintraege sind in `menu/SSG_LIB.mnu` mit `~` ausgegraut (siehe
|
||||||
|
Abschnitt ["Status: noch offene Menueintraege"](#status-noch-offene-menueintraege-im-menue-ausgegraut)).
|
||||||
|
|
||||||
Registrierte Dummy-Befehle:
|
Registrierte Dummy-Befehle:
|
||||||
|
|
||||||
@@ -311,6 +364,13 @@ Registrierte Dummy-Befehle:
|
|||||||
|
|
||||||
> `FOERDERANLAGE` ist nicht hier definiert – dieser Befehl ist in `VarioFoerderer.lsp` implementiert.
|
> `FOERDERANLAGE` ist nicht hier definiert – dieser Befehl ist in `VarioFoerderer.lsp` implementiert.
|
||||||
|
|
||||||
|
**Konfigurationsbefehle** (Menue → Konfiguration):
|
||||||
|
|
||||||
|
| Befehl | Beschreibung |
|
||||||
|
| --- | --- |
|
||||||
|
| `SSG_DIM_SWITCH` | Schaltet zwischen 2D/3D-Bloecken um (setzt `DXFM_DIM`, `DXFM_BLOCKS`, `DXFM_OMNIFLO`) |
|
||||||
|
| `SSG_SPRACHE` | Oeffnet Dialog `sprache.dcl`, setzt `*ssg-lang*` und persistiert via `DXFM_LANG` (siehe [`ssg_lang.lsp`](#ssg_langlsp--sprachumschaltung-deutschenglisch)) |
|
||||||
|
|
||||||
**SSG_BLOCKEDIT** – Doppelklick/Kontextmenue-Dispatcher:
|
**SSG_BLOCKEDIT** – Doppelklick/Kontextmenue-Dispatcher:
|
||||||
|
|
||||||
Erkennt den Blocktyp des selektierten INSERT-Blocks und ruft den passenden Bearbeitungsbefehl auf:
|
Erkennt den Blocktyp des selektierten INSERT-Blocks und ruft den passenden Bearbeitungsbefehl auf:
|
||||||
|
|||||||
+42
-10
@@ -132,9 +132,41 @@
|
|||||||
(setenv "DXFM_DIM" dim-neu)
|
(setenv "DXFM_DIM" dim-neu)
|
||||||
(setenv "DXFM_BLOCKS" (strcat basis "\\data\\ils\\" dim-neu))
|
(setenv "DXFM_BLOCKS" (strcat basis "\\data\\ils\\" dim-neu))
|
||||||
(setenv "DXFM_OMNIFLO" (strcat basis "\\data\\omniflo\\" dim-neu))
|
(setenv "DXFM_OMNIFLO" (strcat basis "\\data\\omniflo\\" dim-neu))
|
||||||
(princ (strcat "\nModus umgeschaltet auf: " dim-neu))
|
(princ (ssg-textf "dim-switch-modus" (list dim-neu)))
|
||||||
(princ (strcat "\n DXFM_BLOCKS = " (getenv "DXFM_BLOCKS")))
|
(princ (ssg-textf "dim-switch-blocks" (list (getenv "DXFM_BLOCKS"))))
|
||||||
(princ (strcat "\n DXFM_OMNIFLO = " (getenv "DXFM_OMNIFLO")))
|
(princ (ssg-textf "dim-switch-omniflo" (list (getenv "DXFM_OMNIFLO"))))
|
||||||
|
(princ)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; ============================================================
|
||||||
|
;; SSG_SPRACHE - Sprache umschalten (Deutsch/Englisch)
|
||||||
|
;; Setzt *ssg-lang* live und persistiert ueber DXFM_LANG
|
||||||
|
;; ============================================================
|
||||||
|
|
||||||
|
(defun ssg-sprache-init ( / idx)
|
||||||
|
(start_list "sprache")
|
||||||
|
(add_list "Deutsch")
|
||||||
|
(add_list "Englisch")
|
||||||
|
(end_list)
|
||||||
|
(setq idx (if (= *ssg-lang* "en_GB") "1" "0"))
|
||||||
|
(set_tile "sprache" idx)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun ssg-sprache-accept ( / idx neu)
|
||||||
|
(setq idx (get_tile "sprache"))
|
||||||
|
(setq neu (if (= idx "1") "en_GB" "de_DE"))
|
||||||
|
(setq *ssg-lang* neu)
|
||||||
|
(setenv "DXFM_LANG" neu)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun c:SSG_SPRACHE ()
|
||||||
|
(ssg-dialog-run
|
||||||
|
(strcat (getenv "DXFM_DCL") "/sprache.dcl")
|
||||||
|
"sprache"
|
||||||
|
'ssg-sprache-init
|
||||||
|
'ssg-sprache-accept
|
||||||
|
)
|
||||||
|
(princ (ssg-textf "sprache-gewechselt" (list *ssg-lang*)))
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -149,13 +181,13 @@
|
|||||||
(setq ss (ssget "I"))
|
(setq ss (ssget "I"))
|
||||||
(if (or (null ss) (/= (sslength ss) 1))
|
(if (or (null ss) (/= (sslength ss) 1))
|
||||||
(progn
|
(progn
|
||||||
(princ "\nBlock auswaehlen: ")
|
(princ (ssg-text "cmd-block-auswaehlen"))
|
||||||
(setq ss (ssget ":S" '((0 . "INSERT"))))
|
(setq ss (ssget ":S" '((0 . "INSERT"))))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(if (null ss)
|
(if (null ss)
|
||||||
(progn
|
(progn
|
||||||
(princ "\nKein Block ausgewaehlt.")
|
(princ (ssg-text "cmd-kein-block-ausgewaehlt"))
|
||||||
(princ)
|
(princ)
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
@@ -166,7 +198,7 @@
|
|||||||
|
|
||||||
(if (/= (cdr (assoc 0 ed)) "INSERT")
|
(if (/= (cdr (assoc 0 ed)) "INSERT")
|
||||||
(progn
|
(progn
|
||||||
(princ "\nKein Block ausgewaehlt.")
|
(princ (ssg-text "cmd-kein-block-ausgewaehlt"))
|
||||||
(princ)
|
(princ)
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
@@ -177,13 +209,13 @@
|
|||||||
(cond
|
(cond
|
||||||
;; Kreisel-Bloecke -> KreiselEdit
|
;; Kreisel-Bloecke -> KreiselEdit
|
||||||
((wcmatch bname "KREISEL_*")
|
((wcmatch bname "KREISEL_*")
|
||||||
(princ (strcat "\nKreisel bearbeiten: " bname))
|
(princ (ssg-textf "cmd-kreisel-bearbeiten" (list bname)))
|
||||||
(c:KreiselEdit)
|
(c:KreiselEdit)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; Eckrad-Bloecke -> BEDIT (kein eigener Edit-Dialog in LISP)
|
;; Eckrad-Bloecke -> BEDIT (kein eigener Edit-Dialog in LISP)
|
||||||
((wcmatch bname "ECKRAD_*")
|
((wcmatch bname "ECKRAD_*")
|
||||||
(princ (strcat "\nEckrad bearbeiten: " bname))
|
(princ (ssg-textf "cmd-eckrad-bearbeiten" (list bname)))
|
||||||
(command "_.BEDIT" bname)
|
(command "_.BEDIT" bname)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -198,13 +230,13 @@
|
|||||||
(wcmatch bname "#*")
|
(wcmatch bname "#*")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\nOmniflo Element bearbeiten: " bname))
|
(princ (ssg-textf "cmd-omniflo-bearbeiten" (list bname)))
|
||||||
(c:OMNI_EDIT)
|
(c:OMNI_EDIT)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; Unbekannter Blocktyp -> natives EATTEDIT (Attribut-Editor)
|
;; Unbekannter Blocktyp -> natives EATTEDIT (Attribut-Editor)
|
||||||
(t
|
(t
|
||||||
(princ (strcat "\nAttribute bearbeiten: " bname))
|
(princ (ssg-textf "cmd-attribute-bearbeiten" (list bname)))
|
||||||
(command "_.EATTEDIT")
|
(command "_.EATTEDIT")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -17,5 +17,5 @@
|
|||||||
)
|
)
|
||||||
(if *vf-core-datei*
|
(if *vf-core-datei*
|
||||||
(load *vf-core-datei*)
|
(load *vf-core-datei*)
|
||||||
(princ "\n[VarioFoerderer] WARNUNG: vf_core.lsp nicht gefunden - Befehle nicht verfuegbar.")
|
(princ (ssg-text "vfstart-core-nicht-gefunden"))
|
||||||
)
|
)
|
||||||
|
|||||||
+38
-16
@@ -19,7 +19,7 @@
|
|||||||
(setq cfg-pfad (strcat (getenv "DXFM_CFG") "/export.cfg"))
|
(setq cfg-pfad (strcat (getenv "DXFM_CFG") "/export.cfg"))
|
||||||
(setq *export-cfg* (ssg-load-ini cfg-pfad))
|
(setq *export-cfg* (ssg-load-ini cfg-pfad))
|
||||||
(if (null *export-cfg*)
|
(if (null *export-cfg*)
|
||||||
(princ (strcat "\n[export] WARNUNG: " cfg-pfad " nicht gefunden/leer, verwende Vorgaben."))
|
(princ (ssg-textf "exp-cfg-not-found" (list cfg-pfad)))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -41,6 +41,14 @@
|
|||||||
;; Beim Laden des Moduls einmalig einlesen (Lazy-Loading via ssg-ensure "export")
|
;; Beim Laden des Moduls einmalig einlesen (Lazy-Loading via ssg-ensure "export")
|
||||||
(export:load-cfg)
|
(export:load-cfg)
|
||||||
|
|
||||||
|
;; --- Test-Override fuer den Ausgabeordner (nur Lisp-Sitzungsspeicher) ---
|
||||||
|
;; Wird ausschliesslich von TEST_EXPORT_ALL (tests/test_export_all.lsp)
|
||||||
|
;; waehrend des Testlaufs auf DXFM_TESTOUT gesetzt und danach garantiert
|
||||||
|
;; wieder auf nil zurueckgesetzt. Bewusst KEIN (setenv "DXFM_RESULTS" ...):
|
||||||
|
;; (setenv ...) schreibt in BricsCAD dauerhaft in die Profil-Registry und
|
||||||
|
;; ueberlebt damit jeden Neustart.
|
||||||
|
(setq *export-test-override* nil)
|
||||||
|
|
||||||
|
|
||||||
;; --- Feste Datei-/Skriptnamen dieses Moduls (keine Config, direkt im Code) ---
|
;; --- Feste Datei-/Skriptnamen dieses Moduls (keine Config, direkt im Code) ---
|
||||||
(setq *export-filenames*
|
(setq *export-filenames*
|
||||||
@@ -196,32 +204,46 @@
|
|||||||
;; py-name = Python-Skript-Name (z.B. "export_csv.py")
|
;; py-name = Python-Skript-Name (z.B. "export_csv.py")
|
||||||
;; csv-name = Ergebnis-CSV-Name (z.B. "export.csv")
|
;; csv-name = Ergebnis-CSV-Name (z.B. "export.csv")
|
||||||
(defun csv:run-export (label py-name csv-name / ss i ename fh out-pfad
|
(defun csv:run-export (label py-name csv-name / ss i ename fh out-pfad
|
||||||
py-skript ergebnis-pfad cmd first-block count)
|
py-skript ergebnis-pfad cmd first-block count out-dir)
|
||||||
;; Vor dem Export: IDs aller Bloecke sicherstellen und Duplikate korrigieren
|
;; Vor dem Export: IDs aller Bloecke sicherstellen und Duplikate korrigieren
|
||||||
(princ (strcat "\n[" label "] Pruefe und vergebe IDs..."))
|
(princ (ssg-textf "exp-check-ids" (list label)))
|
||||||
(ssg-id-check-all)
|
(ssg-id-check-all)
|
||||||
;; Vor dem Export HOEHE/DREHUNG aller Omniflo-Elemente aktualisieren
|
;; Vor dem Export HOEHE/DREHUNG aller Omniflo-Elemente aktualisieren
|
||||||
(princ (strcat "\n[" label "] Aktualisiere Hoehe/Drehung..."))
|
(princ (ssg-textf "exp-update-hoehe-drehung" (list label)))
|
||||||
(omni:update-all-attribs)
|
(omni:update-all-attribs)
|
||||||
(princ (strcat "\n[" label "] Sammle relevante Bloecke..."))
|
(princ (ssg-textf "exp-collect-blocks" (list label)))
|
||||||
|
|
||||||
(setq ss (csv:collect-export-blocks))
|
(setq ss (csv:collect-export-blocks))
|
||||||
(if (null ss)
|
(if (null ss)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n[" label "] Keine relevanten Bloecke gefunden."))
|
(princ (ssg-textf "exp-no-blocks-found" (list label)))
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(setq count (sslength ss))
|
(setq count (sslength ss))
|
||||||
(princ (strcat "\n[" label "] " (itoa count) " Bloecke gefunden."))
|
(princ (ssg-textf "exp-blocks-found" (list label count)))
|
||||||
|
|
||||||
|
;; Ausgabeordner: DXFM_RESULTS, ausser *export-test-override* ist gesetzt
|
||||||
|
;; (nur waehrend TEST_EXPORT_ALL, siehe tests/test_export_all.lsp).
|
||||||
|
;; WICHTIG: Hier bewusst KEIN (setenv "DXFM_RESULTS" ...) verwenden!
|
||||||
|
;; (setenv ...) schreibt in BricsCAD dauerhaft in die Profil-Registry
|
||||||
|
;; und ueberlebt damit jeden Neustart - ein einziger Testlauf wuerde
|
||||||
|
;; DXFM_RESULTS fuer alle zukuenftigen Sitzungen unwiderruflich auf den
|
||||||
|
;; Testordner umbiegen. *export-test-override* ist eine reine
|
||||||
|
;; Lisp-Variable (nur Prozess-/Sitzungsspeicher) und daher sicher.
|
||||||
|
(setq out-dir (if *export-test-override*
|
||||||
|
*export-test-override*
|
||||||
|
(getenv "DXFM_RESULTS")))
|
||||||
|
(if (not (vl-file-directory-p out-dir)) (vl-mkdir out-dir))
|
||||||
|
(princ (ssg-textf "exp-output-dir" (list label out-dir)))
|
||||||
|
|
||||||
;; JSON-Datei zusammenbauen
|
;; JSON-Datei zusammenbauen
|
||||||
(setq out-pfad (strcat (getenv "DXFM_RESULTS") "/"
|
(setq out-pfad (strcat out-dir "/"
|
||||||
(export:filename "raw_json_datei")))
|
(export:filename "raw_json_datei")))
|
||||||
(setq fh (open out-pfad "w"))
|
(setq fh (open out-pfad "w"))
|
||||||
(if (null fh)
|
(if (null fh)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n[" label "] FEHLER: Kann Datei nicht oeffnen: " out-pfad))
|
(princ (ssg-textf "exp-file-open-error" (list label out-pfad)))
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
@@ -238,22 +260,22 @@
|
|||||||
)
|
)
|
||||||
(write-line "]" fh)
|
(write-line "]" fh)
|
||||||
(close fh)
|
(close fh)
|
||||||
(princ (strcat "\n[" label "] JSON geschrieben: " out-pfad))
|
(princ (ssg-textf "exp-json-written" (list label out-pfad)))
|
||||||
|
|
||||||
;; Python-Skript aufrufen
|
;; Python-Skript aufrufen
|
||||||
(setq py-skript (strcat (getenv "DXFM_LIB") "/" py-name))
|
(setq py-skript (strcat (getenv "DXFM_LIB") "/" py-name))
|
||||||
(if (findfile py-skript)
|
(if (findfile py-skript)
|
||||||
(progn
|
(progn
|
||||||
(setq ergebnis-pfad (strcat (getenv "DXFM_RESULTS") "/" csv-name))
|
(setq ergebnis-pfad (strcat out-dir "/" csv-name))
|
||||||
(setq cmd (strcat "python \"" py-skript "\""
|
(setq cmd (strcat "python \"" py-skript "\""
|
||||||
" \"" out-pfad "\""
|
" \"" out-pfad "\""
|
||||||
" \"" (getenv "DXFM_DATA") "\""
|
" \"" (getenv "DXFM_DATA") "\""
|
||||||
" \"" ergebnis-pfad "\""))
|
" \"" ergebnis-pfad "\""))
|
||||||
(princ (strcat "\n[" label "] Rufe Python auf..."))
|
(princ (ssg-textf "exp-calling-python" (list label)))
|
||||||
(startapp "cmd" (strcat "/c " cmd))
|
(startapp "cmd" (strcat "/c " cmd))
|
||||||
(princ (strcat "\n[" label "] Export gestartet: " ergebnis-pfad))
|
(princ (ssg-textf "exp-export-started" (list label ergebnis-pfad)))
|
||||||
)
|
)
|
||||||
(princ (strcat "\n[" label "] FEHLER: Python-Skript nicht gefunden: " py-skript))
|
(princ (ssg-textf "exp-python-not-found" (list label py-skript)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -377,7 +399,7 @@
|
|||||||
(defun c:OMNI_UPDATE_ATTRIBS ( / ss i ename ed bname teileart count)
|
(defun c:OMNI_UPDATE_ATTRIBS ( / ss i ename ed bname teileart count)
|
||||||
(setq ss (ssget "X" (list (cons 0 "INSERT"))))
|
(setq ss (ssget "X" (list (cons 0 "INSERT"))))
|
||||||
(if (null ss)
|
(if (null ss)
|
||||||
(princ "\n[OMNI_UPDATE] Keine INSERT-Bloecke in der Zeichnung.")
|
(princ (ssg-text "exp-omni-no-inserts"))
|
||||||
(progn
|
(progn
|
||||||
(setq count 0)
|
(setq count 0)
|
||||||
(setq i 0)
|
(setq i 0)
|
||||||
@@ -396,7 +418,7 @@
|
|||||||
)
|
)
|
||||||
(setq i (1+ i))
|
(setq i (1+ i))
|
||||||
)
|
)
|
||||||
(princ (strcat "\n[OMNI_UPDATE] " (itoa count) " Elemente aktualisiert (HOEHE, DREHUNG)."))
|
(princ (ssg-textf "exp-omni-updated" (list count)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
|
|||||||
@@ -17,12 +17,12 @@
|
|||||||
(setq fh (open return-datei "r"))
|
(setq fh (open return-datei "r"))
|
||||||
(setq zeile (read-line fh))
|
(setq zeile (read-line fh))
|
||||||
(close fh)
|
(close fh)
|
||||||
(princ (strcat "\n[SSG_LIB] Python Rueckgabe: " zeile))
|
(princ (ssg-textf "extcall-python-rueckgabe" (list zeile)))
|
||||||
)
|
)
|
||||||
(princ "\n[SSG_LIB] WARNUNG: Keine Rueckgabe von Python erhalten.")
|
(princ (ssg-text "extcall-keine-rueckgabe"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n[SSG_LIB] FEHLER: " py-skript " nicht gefunden!"))
|
(princ (ssg-textf "extcall-skript-nicht-gefunden" (list py-skript)))
|
||||||
)
|
)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
|
|||||||
+68
-8
@@ -35,7 +35,7 @@
|
|||||||
(setvar "CMDECHO" 0)
|
(setvar "CMDECHO" 0)
|
||||||
(command "_undo" "_G")
|
(command "_undo" "_G")
|
||||||
(graphscr)
|
(graphscr)
|
||||||
(if titel (prompt (strcat "\n***** " titel " *****\n")))
|
(if titel (prompt (ssg-textf "core-start-titel" (list titel))))
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
(defun ssg-errhan (em)
|
(defun ssg-errhan (em)
|
||||||
(if (= em "Function cancelled")
|
(if (= em "Function cancelled")
|
||||||
(princ)
|
(princ)
|
||||||
(progn (princ "\nFehler: ") (princ em))
|
(progn (princ (ssg-text "core-errhan-fehler")) (princ em))
|
||||||
)
|
)
|
||||||
(command)
|
(command)
|
||||||
(command)
|
(command)
|
||||||
@@ -85,11 +85,11 @@
|
|||||||
(if defa
|
(if defa
|
||||||
(progn
|
(progn
|
||||||
(initget 1 "Yes No Yes")
|
(initget 1 "Yes No Yes")
|
||||||
(= (getkword (strcat "\n" prompt-text " Y/N <Y>: ")) "No")
|
(= (getkword (strcat "\n" prompt-text (ssg-text "ques-yn-default-yes"))) "No")
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(initget 1 "Yes No No")
|
(initget 1 "Yes No No")
|
||||||
(= (getkword (strcat "\n" prompt-text " Y/N <N>: ")) "Yes")
|
(= (getkword (strcat "\n" prompt-text (ssg-text "ques-yn-default-no"))) "Yes")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -225,7 +225,7 @@
|
|||||||
(command "_insert" bname pt "" "" rotation)
|
(command "_insert" bname pt "" "" rotation)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(alert (strcat "Blockname '" bname "' existiert bereits - wird uebersprungen."))
|
(alert (ssg-textf "core-blockname-exists" (list bname)))
|
||||||
(setq bname (strcat "x" bname))
|
(setq bname (strcat "x" bname))
|
||||||
(command "_block" bname pt ss "")
|
(command "_block" bname pt ss "")
|
||||||
(command "_insert" bname pt "" "" rotation)
|
(command "_insert" bname pt "" "" rotation)
|
||||||
@@ -384,6 +384,66 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
;; ============================================================
|
||||||
|
;; GEMEINSAMES ATTRIBUT-SCHEMA FUER STRECKEN-BLOECKE
|
||||||
|
;; (Gefaellestrecke + VarioFoerderer, feste Reihenfolge)
|
||||||
|
;; ============================================================
|
||||||
|
;; Vorderteil (immer vorhanden). Bezeichnung = Blockname (GF_n/VF_n),
|
||||||
|
;; Artinr. fest 6220 (alle GF/VF). TYP-Wert wird zur Laufzeit gesetzt.
|
||||||
|
;; ID zuerst (global, jeder eingefuegte Baustein - Kreisel/GF/VF - erhaelt eine
|
||||||
|
;; neue ID), danach Bezeichnung (= Blockname). Hoehen/Delta mit Einheit _mm.
|
||||||
|
(setq *strecke-attr-front*
|
||||||
|
'(("ID" "")
|
||||||
|
("Bezeichnung" "")
|
||||||
|
("Artinr." "6220")
|
||||||
|
("MONTAGEHOEHE_m" "0.000")
|
||||||
|
("HOEHE_VON_mm" "0")
|
||||||
|
("HOEHE_BIS_mm" "0")
|
||||||
|
("DELTA_H_mm" "0")
|
||||||
|
("DELTA_L_mm" "0")
|
||||||
|
("TYP" "Streckengruppe")
|
||||||
|
("SEITE_AS" "rechts")
|
||||||
|
("SEITE_ES" "rechts")
|
||||||
|
("ANZAHL_GF" "0")
|
||||||
|
("L_GF_m" "0.000")
|
||||||
|
("GF_WINKEL" "0.0")))
|
||||||
|
|
||||||
|
;; Mittelteil - nur fuer TYP "Streckengruppe" (mehrsegmentig/mit Bogen bzw. VF).
|
||||||
|
;; Eine einsegmentige Gefaellestrecke ohne Bogen ("Gefaellestrecke") bekommt
|
||||||
|
;; diese Attribute NICHT.
|
||||||
|
(setq *strecke-attr-gruppe*
|
||||||
|
'(("GF_Bogen_L_90" "0")
|
||||||
|
("GF_Bogen_L_60" "0")
|
||||||
|
("GF_Bogen_L_30" "0")
|
||||||
|
("GF_Bogen_R_90" "0")
|
||||||
|
("GF_Bogen_R_60" "0")
|
||||||
|
("GF_Bogen_R_30" "0")
|
||||||
|
("ANZAHL_VF" "0")
|
||||||
|
("MOTORSEITE" "")
|
||||||
|
("L_VF_m" "0.000")
|
||||||
|
("ANTRIEBFAHRTRICHTUNG" "Auf")
|
||||||
|
("VF_WINKEL" "0")
|
||||||
|
("VF_Bogen_A_90" "0")
|
||||||
|
("VF_Bogen_A_60" "0")
|
||||||
|
("VF_Bogen_A_30" "0")
|
||||||
|
("VF_Bogen_I_90" "0")
|
||||||
|
("VF_Bogen_I_60" "0")
|
||||||
|
("VF_Bogen_I_30" "0")))
|
||||||
|
|
||||||
|
;; Hinterteil (immer vorhanden). ANZAHL_SEPARATOR-Wert wird zur Laufzeit gesetzt
|
||||||
|
;; (einsegmentige Gefaellestrecke: 1; Streckengruppe: gezaehlt).
|
||||||
|
(setq *strecke-attr-hinten*
|
||||||
|
'(("ANZAHL_SEPARATOR" "1")
|
||||||
|
("ANZAHL_SCANNER" "0")))
|
||||||
|
|
||||||
|
;; Geordnete ATTDEF-Definitionsliste fuer einen Strecken-Block-Typ.
|
||||||
|
;; typ "Gefaellestrecke" -> Vorderteil + Hinterteil (reduziert)
|
||||||
|
;; sonst ("Streckengruppe") -> Vorderteil + Mittelteil + Hinterteil (voll)
|
||||||
|
(defun ssg-strecke-attrib-defs (typ)
|
||||||
|
(if (= typ "Gefaellestrecke")
|
||||||
|
(append *strecke-attr-front* *strecke-attr-hinten*)
|
||||||
|
(append *strecke-attr-front* *strecke-attr-gruppe* *strecke-attr-hinten*)))
|
||||||
|
|
||||||
;; Assoziationsliste in ATTDEF-Definitionsliste konvertieren.
|
;; Assoziationsliste in ATTDEF-Definitionsliste konvertieren.
|
||||||
;; alist = (("TAG" . "Wert") ...) -> ((TAG Wert) ...)
|
;; alist = (("TAG" . "Wert") ...) -> ((TAG Wert) ...)
|
||||||
;; Passend fuer ssg-attrib-make-defs.
|
;; Passend fuer ssg-attrib-make-defs.
|
||||||
@@ -400,7 +460,7 @@
|
|||||||
(defun ssg-attrib-read-dwg (dwg-pfad / tmpEnt srcAttribs oldAttreq oldAttdia)
|
(defun ssg-attrib-read-dwg (dwg-pfad / tmpEnt srcAttribs oldAttreq oldAttdia)
|
||||||
(if (not (findfile dwg-pfad))
|
(if (not (findfile dwg-pfad))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\nFEHLER: Block nicht gefunden: " dwg-pfad))
|
(princ (ssg-textf "core-dwg-not-found" (list dwg-pfad)))
|
||||||
nil
|
nil
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
@@ -476,8 +536,8 @@
|
|||||||
(if (not (new_dialog dialog-name dat))
|
(if (not (new_dialog dialog-name dat))
|
||||||
(progn (alert "Dialog konnte nicht geladen werden.") (exit))
|
(progn (alert "Dialog konnte nicht geladen werden.") (exit))
|
||||||
)
|
)
|
||||||
(if init-fn (init-fn))
|
(if init-fn (apply init-fn nil))
|
||||||
(action_tile "accept" "(if accept-fn (accept-fn)) (done_dialog 1)")
|
(action_tile "accept" "(if accept-fn (apply accept-fn nil)) (done_dialog 1)")
|
||||||
(action_tile "cancel" "(done_dialog 0)")
|
(action_tile "cancel" "(done_dialog 0)")
|
||||||
(start_dialog)
|
(start_dialog)
|
||||||
(unload_dialog dat)
|
(unload_dialog dat)
|
||||||
|
|||||||
+2
-2
@@ -67,7 +67,7 @@
|
|||||||
aktuell start-val
|
aktuell start-val
|
||||||
)
|
)
|
||||||
(if (not (new_dialog dialog-id dat))
|
(if (not (new_dialog dialog-id dat))
|
||||||
(progn (alert "Dialog nicht verfuegbar.") (exit))
|
(progn (alert (ssg-text "dialog-nicht-verfuegbar")) (exit))
|
||||||
)
|
)
|
||||||
(set_tile select-tile start-val)
|
(set_tile select-tile start-val)
|
||||||
(if (and preview-tile slide-lib slide-list)
|
(if (and preview-tile slide-lib slide-list)
|
||||||
@@ -116,7 +116,7 @@
|
|||||||
;; ------------------------------------------------------------
|
;; ------------------------------------------------------------
|
||||||
(defun ssg-insert-modul (lay-name lay-color blk-pfad attrib-alist rotation / pt)
|
(defun ssg-insert-modul (lay-name lay-color blk-pfad attrib-alist rotation / pt)
|
||||||
(ssg-make-layer lay-name lay-color T)
|
(ssg-make-layer lay-name lay-color T)
|
||||||
(setq pt (getpoint "\nEinfuegepunkt waehlen: "))
|
(setq pt (getpoint (ssg-text "dialog-einfuegepunkt-waehlen")))
|
||||||
(command "_insert" blk-pfad pt "" "" rotation)
|
(command "_insert" blk-pfad pt "" "" rotation)
|
||||||
(if attrib-alist
|
(if attrib-alist
|
||||||
(ssg-attrib-set-many attrib-alist)
|
(ssg-attrib-set-many attrib-alist)
|
||||||
|
|||||||
+12
-12
@@ -93,11 +93,11 @@
|
|||||||
(setq new-id (1+ max-id))
|
(setq new-id (1+ max-id))
|
||||||
(setq new-id-str (ssg-id-format new-id))
|
(setq new-id-str (ssg-id-format new-id))
|
||||||
(ssg-attrib-set-on ent (list (cons "ID" new-id-str)))
|
(ssg-attrib-set-on ent (list (cons "ID" new-id-str)))
|
||||||
(princ (strcat "\n[ID] Neue ID zugewiesen: " new-id-str))
|
(princ (ssg-textf "id-new-assigned" (list new-id-str)))
|
||||||
new-id-str
|
new-id-str
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n[ID] FEHLER: Kein gueltiger INSERT-Block!")
|
(princ (ssg-text "id-invalid-block"))
|
||||||
nil
|
nil
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -113,7 +113,7 @@
|
|||||||
(setq ss (ssg-id-collect-blocks))
|
(setq ss (ssg-id-collect-blocks))
|
||||||
(if (null ss)
|
(if (null ss)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n[IDSCHECK] Keine relevanten Bloecke gefunden.")
|
(princ (ssg-text "id-check-no-blocks"))
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
@@ -141,8 +141,8 @@
|
|||||||
(setq max-id (1+ max-id))
|
(setq max-id (1+ max-id))
|
||||||
(setq new-id-str (ssg-id-format max-id))
|
(setq new-id-str (ssg-id-format max-id))
|
||||||
(ssg-attrib-set-on ename (list (cons "ID" new-id-str)))
|
(ssg-attrib-set-on ename (list (cons "ID" new-id-str)))
|
||||||
(princ (strcat "\n[IDSCHECK] Fehlende ID gesetzt: " new-id-str
|
(princ (ssg-textf "id-check-missing-set"
|
||||||
" (Block " (cdr (assoc 2 (entget ename))) ")"))
|
(list new-id-str (cdr (assoc 2 (entget ename))))))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(setq i (1+ i))
|
(setq i (1+ i))
|
||||||
@@ -158,16 +158,16 @@
|
|||||||
(setq max-id (1+ max-id))
|
(setq max-id (1+ max-id))
|
||||||
(setq new-id-str (ssg-id-format max-id))
|
(setq new-id-str (ssg-id-format max-id))
|
||||||
(ssg-attrib-set-on ename (list (cons "ID" new-id-str)))
|
(ssg-attrib-set-on ename (list (cons "ID" new-id-str)))
|
||||||
(princ (strcat "\n[IDSCHECK] Duplikat ID " (ssg-id-format (car entry))
|
(princ (ssg-textf "id-check-duplicate"
|
||||||
" -> neue ID " new-id-str
|
(list (ssg-id-format (car entry)) new-id-str
|
||||||
" (Block " (cdr (assoc 2 (entget ename))) ")"))
|
(cdr (assoc 2 (entget ename))))))
|
||||||
(setq fixed-count (1+ fixed-count))
|
(setq fixed-count (1+ fixed-count))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
(princ (strcat "\n[IDSCHECK] Fertig. " (itoa fixed-count) " Duplikate korrigiert."))
|
(princ (ssg-textf "id-check-done" (list fixed-count)))
|
||||||
fixed-count
|
fixed-count
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -179,7 +179,7 @@
|
|||||||
(defun c:IDSCHECK ( / count)
|
(defun c:IDSCHECK ( / count)
|
||||||
(ssg-start "IDSCHECK" nil)
|
(ssg-start "IDSCHECK" nil)
|
||||||
(setq count (ssg-id-check-all))
|
(setq count (ssg-id-check-all))
|
||||||
(princ (strcat "\n[IDSCHECK] " (itoa count) " IDs korrigiert."))
|
(princ (ssg-textf "id-check-corrected" (list count)))
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
@@ -188,10 +188,10 @@
|
|||||||
;; Fordert den Benutzer auf, einen Block zu waehlen und weist eine neue ID zu.
|
;; Fordert den Benutzer auf, einen Block zu waehlen und weist eine neue ID zu.
|
||||||
(defun c:IDGENERATE ( / ent ed)
|
(defun c:IDGENERATE ( / ent ed)
|
||||||
(ssg-start "IDGENERATE" nil)
|
(ssg-start "IDGENERATE" nil)
|
||||||
(setq ent (car (entsel "\nBlock waehlen: ")))
|
(setq ent (car (entsel (ssg-text "id-select-block-prompt"))))
|
||||||
(if (and ent (= (cdr (assoc 0 (entget ent))) "INSERT"))
|
(if (and ent (= (cdr (assoc 0 (entget ent))) "INSERT"))
|
||||||
(ssg-id-generate ent)
|
(ssg-id-generate ent)
|
||||||
(princ "\n[IDGENERATE] Kein gueltiger Block gewaehlt.")
|
(princ (ssg-text "id-generate-invalid"))
|
||||||
)
|
)
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
(princ)
|
(princ)
|
||||||
|
|||||||
@@ -0,0 +1,148 @@
|
|||||||
|
;; ============================================================
|
||||||
|
;; SSG_LANG.LSP - Sprachumschaltung (Deutsch/Englisch)
|
||||||
|
;; Zentrale Textverwaltung fuer benutzersichtbare Meldungen.
|
||||||
|
;; Kern-Modul, wird direkt nach ssg_core geladen.
|
||||||
|
;;
|
||||||
|
;; Die Texte liegen extern in lang/de_DE.json und lang/en_GB.json.
|
||||||
|
;; Diese Datei ist reiner Lade-/Zugriffscode. Beim Laden wird
|
||||||
|
;; *ssg-texts* aus den JSON-Dateien befuellt - Format wie bisher:
|
||||||
|
;; (key (cons "de_DE" wert) (cons "en_GB" wert))
|
||||||
|
;; Die JSON-Dateien werden aus Lisp/ssg_lang.lsp einmalig per
|
||||||
|
;; tools/migrate_lang_to_json.py erzeugt und danach direkt gepflegt.
|
||||||
|
;; ============================================================
|
||||||
|
|
||||||
|
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
;; Alle Vorkommen von alt in str durch neu ersetzen.
|
||||||
|
;; Frueh definiert, da ssg-lang-unescape es beim Laden braucht.
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
(defun ssg-str-replace-all (neu alt str / pos ergebnis)
|
||||||
|
(setq ergebnis "")
|
||||||
|
(while (setq pos (vl-string-search alt str))
|
||||||
|
(setq ergebnis (strcat ergebnis (substr str 1 pos) neu))
|
||||||
|
(setq str (substr str (+ pos 1 (strlen alt))))
|
||||||
|
)
|
||||||
|
(strcat ergebnis str)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
;; Sprachordner ermitteln: 1) DXFMAKRO env, 2) *ssg-lisp-pfad*, 3) nil.
|
||||||
|
;; Gleiches Fallback-Muster wie in Gefaellestrecke.lsp/KreiselInsert.lsp.
|
||||||
|
;; DXFM_LANG bleibt der Sprachcode und wird hier NICHT als Pfad genutzt.
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
(defun ssg-lang-dir ( / )
|
||||||
|
(cond
|
||||||
|
((and (getenv "DXFMAKRO") (= (type (getenv "DXFMAKRO")) 'STR)
|
||||||
|
(> (strlen (getenv "DXFMAKRO")) 0))
|
||||||
|
(strcat (vl-string-right-trim "/" (vl-string-translate "\\" "/" (getenv "DXFMAKRO")))
|
||||||
|
"/lang"))
|
||||||
|
((and (boundp '*ssg-lisp-pfad*) (= (type *ssg-lisp-pfad*) 'STR)
|
||||||
|
(vl-string-search "/Lisp" *ssg-lisp-pfad*))
|
||||||
|
(strcat (substr *ssg-lisp-pfad* 1 (vl-string-search "/Lisp" *ssg-lisp-pfad*))
|
||||||
|
"/lang"))
|
||||||
|
(t nil)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
;; Escapes aus einem JSON-Rohwert aufloesen: \n -> Zeilenumbruch.
|
||||||
|
;; Der JSON-Parser (ssg-cfg-parse-nested) liefert \n als literale
|
||||||
|
;; 2-Zeichen-Folge (Backslash + n) zurueck; hier wird sie in einen
|
||||||
|
;; echten Zeilenumbruch gewandelt. Suchmuster ist "\\n" (= die zwei
|
||||||
|
;; Zeichen Backslash+n); "\n" waere bereits ein Zeilenumbruch.
|
||||||
|
;; Andere Escapes kommen in den Sprachdateien nicht vor.
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
(defun ssg-lang-unescape (wert)
|
||||||
|
(if wert
|
||||||
|
(ssg-str-replace-all (chr 10) "\\n" wert)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
;; Beide Sprachdateien laden und *ssg-texts* im bisherigen Format
|
||||||
|
;; befuellen: (key (cons "de_DE" ...) (cons "en_GB" ...)).
|
||||||
|
;; Fehlt eine Datei oder ein Key, bleibt der jeweilige Wert nil -
|
||||||
|
;; die Fallback-Kette in ssg-text greift dann automatisch
|
||||||
|
;; (en_GB -> de_DE -> Key). BricsCAD startet in jedem Fall.
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
(defun ssg-lang-load ( / dir de-datei en-datei de-sec en-sec
|
||||||
|
key wert-de wert-en ergebnis)
|
||||||
|
(setq *ssg-texts* nil)
|
||||||
|
(setq dir (ssg-lang-dir))
|
||||||
|
(if (null dir)
|
||||||
|
(princ "\n[LANG] WARNUNG: Sprachordner nicht ermittelbar (DXFMAKRO nicht gesetzt).")
|
||||||
|
(progn
|
||||||
|
(setq de-datei (strcat dir "/de_DE.json")
|
||||||
|
en-datei (strcat dir "/en_GB.json"))
|
||||||
|
(if (findfile de-datei)
|
||||||
|
(setq de-sec (cdr (assoc "texts"
|
||||||
|
(ssg-cfg-parse-nested (ssg-read-file-lines de-datei)))))
|
||||||
|
(princ (strcat "\n[LANG] WARNUNG: " de-datei " nicht gefunden."))
|
||||||
|
)
|
||||||
|
(if (findfile en-datei)
|
||||||
|
(setq en-sec (cdr (assoc "texts"
|
||||||
|
(ssg-cfg-parse-nested (ssg-read-file-lines en-datei)))))
|
||||||
|
(princ (strcat "\n[LANG] WARNUNG: " en-datei " nicht gefunden."))
|
||||||
|
)
|
||||||
|
(foreach paar de-sec
|
||||||
|
(setq key (car paar)
|
||||||
|
wert-de (ssg-lang-unescape (cdr paar))
|
||||||
|
wert-en (ssg-lang-unescape (cdr (assoc key en-sec))))
|
||||||
|
(setq ergebnis
|
||||||
|
(cons (list key (cons "de_DE" wert-de) (cons "en_GB" wert-en)) ergebnis))
|
||||||
|
)
|
||||||
|
(setq *ssg-texts* (reverse ergebnis))
|
||||||
|
(princ (strcat "\n[LANG] " (itoa (length *ssg-texts*)) " Texte geladen."))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(princ)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
;; AKTUELLE SPRACHE
|
||||||
|
;; Default de_DE, Init aus DXFM_LANG. Ein erneutes Laden dieses
|
||||||
|
;; Moduls ueberschreibt eine zur Laufzeit gesetzte Sprache nicht.
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
(if (null *ssg-lang*)
|
||||||
|
(setq *ssg-lang* (getenv "DXFM_LANG"))
|
||||||
|
)
|
||||||
|
(if (or (null *ssg-lang*) (= *ssg-lang* ""))
|
||||||
|
(setq *ssg-lang* "de_DE")
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Texttabelle aus den JSON-Sprachdateien befuellen
|
||||||
|
(ssg-lang-load)
|
||||||
|
|
||||||
|
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
;; ssg-text - Text zu einem Key in der aktuellen Sprache liefern
|
||||||
|
;; Fallback-Kette: *ssg-lang* -> de_DE -> Key selbst
|
||||||
|
;; ------------------------------------------------------------
|
||||||
|
(defun ssg-text (key / eintrag wert)
|
||||||
|
(setq eintrag (assoc key *ssg-texts*))
|
||||||
|
(if eintrag
|
||||||
|
(progn
|
||||||
|
(setq wert (cdr (assoc *ssg-lang* (cdr eintrag))))
|
||||||
|
(if (null wert)
|
||||||
|
(setq wert (cdr (assoc "de_DE" (cdr eintrag))))
|
||||||
|
)
|
||||||
|
(if (null wert) key wert)
|
||||||
|
)
|
||||||
|
key
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; ssg-textf - Text mit Platzhaltern %1 %2 ... aus einer Werteliste fuellen
|
||||||
|
(defun ssg-textf (key werte / txt i platzhalter)
|
||||||
|
(setq txt (ssg-text key))
|
||||||
|
(setq i 1)
|
||||||
|
(foreach w werte
|
||||||
|
(setq platzhalter (strcat "%" (itoa i)))
|
||||||
|
(setq txt (ssg-str-replace-all (vl-princ-to-string w) platzhalter txt))
|
||||||
|
(setq i (1+ i))
|
||||||
|
)
|
||||||
|
txt
|
||||||
|
)
|
||||||
|
|
||||||
|
(princ)
|
||||||
+33
-33
@@ -75,12 +75,12 @@
|
|||||||
;; Rueckgabe: neuer Layername oder nil bei Abbruch
|
;; Rueckgabe: neuer Layername oder nil bei Abbruch
|
||||||
(defun c:SSG-LayerSet (/ sel lay)
|
(defun c:SSG-LayerSet (/ sel lay)
|
||||||
(ssg-start "Layer setzen" nil)
|
(ssg-start "Layer setzen" nil)
|
||||||
(if (setq lay (ssg-get-layer "\nObjekt auf dem Ziel-Layer waehlen: "))
|
(if (setq lay (ssg-get-layer (ssg-text "layer-prompt-ziel-layer")))
|
||||||
(progn
|
(progn
|
||||||
(command "_LAYER" "_SET" lay "")
|
(command "_LAYER" "_SET" lay "")
|
||||||
(prompt (strcat "\nAktiver Layer: " lay))
|
(prompt (ssg-textf "layer-aktiver-layer" (list lay)))
|
||||||
)
|
)
|
||||||
(ssg-emsg "Kein Objekt gewaehlt.")
|
(ssg-emsg (ssg-text "layer-err-kein-objekt"))
|
||||||
)
|
)
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
lay
|
lay
|
||||||
@@ -89,9 +89,9 @@
|
|||||||
;; Layer eines Objektes anzeigen
|
;; Layer eines Objektes anzeigen
|
||||||
(defun c:SSG-LayerInfo (/ sel lay)
|
(defun c:SSG-LayerInfo (/ sel lay)
|
||||||
(ssg-start "Layer-Info" nil)
|
(ssg-start "Layer-Info" nil)
|
||||||
(if (setq lay (ssg-get-layer "\nObjekt waehlen: "))
|
(if (setq lay (ssg-get-layer (ssg-text "layer-prompt-objekt")))
|
||||||
(prompt (strcat "\nObjekt liegt auf Layer: " lay))
|
(prompt (ssg-textf "layer-objekt-auf-layer" (list lay)))
|
||||||
(ssg-emsg "Kein Objekt gewaehlt.")
|
(ssg-emsg (ssg-text "layer-err-kein-objekt"))
|
||||||
)
|
)
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
lay
|
lay
|
||||||
@@ -101,11 +101,11 @@
|
|||||||
(defun c:SSG-LayerMove (/ elem ziel-lay)
|
(defun c:SSG-LayerMove (/ elem ziel-lay)
|
||||||
(ssg-start "Layer wechseln" nil)
|
(ssg-start "Layer wechseln" nil)
|
||||||
(if (setq elem (ssget))
|
(if (setq elem (ssget))
|
||||||
(if (setq ziel-lay (ssg-get-layer "\nObjekt auf dem Ziel-Layer waehlen: "))
|
(if (setq ziel-lay (ssg-get-layer (ssg-text "layer-prompt-ziel-layer")))
|
||||||
(command "_CHANGE" elem "" "_PROP" "_LA" ziel-lay "")
|
(command "_CHANGE" elem "" "_PROP" "_LA" ziel-lay "")
|
||||||
(ssg-emsg "Kein Ziel-Layer gewaehlt.")
|
(ssg-emsg (ssg-text "layer-err-kein-ziel-layer"))
|
||||||
)
|
)
|
||||||
(ssg-emsg "Kein Objekt gewaehlt.")
|
(ssg-emsg (ssg-text "layer-err-kein-objekt"))
|
||||||
)
|
)
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
)
|
)
|
||||||
@@ -114,11 +114,11 @@
|
|||||||
(defun c:SSG-LayerCopy (/ elem ziel-lay)
|
(defun c:SSG-LayerCopy (/ elem ziel-lay)
|
||||||
(ssg-start "Layer-Kopie" nil)
|
(ssg-start "Layer-Kopie" nil)
|
||||||
(if (setq elem (ssget))
|
(if (setq elem (ssget))
|
||||||
(if (setq ziel-lay (ssg-get-layer "\nObjekt auf dem Ziel-Layer waehlen: "))
|
(if (setq ziel-lay (ssg-get-layer (ssg-text "layer-prompt-ziel-layer")))
|
||||||
(command "_COPY" elem "" "@" "@" "_CHANGE" elem "" "_PROP" "_LA" ziel-lay "")
|
(command "_COPY" elem "" "@" "@" "_CHANGE" elem "" "_PROP" "_LA" ziel-lay "")
|
||||||
(ssg-emsg "Kein Ziel-Layer gewaehlt.")
|
(ssg-emsg (ssg-text "layer-err-kein-ziel-layer"))
|
||||||
)
|
)
|
||||||
(ssg-emsg "Kein Objekt gewaehlt.")
|
(ssg-emsg (ssg-text "layer-err-kein-objekt"))
|
||||||
)
|
)
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
)
|
)
|
||||||
@@ -127,34 +127,34 @@
|
|||||||
;; (nach Auswahl eines Referenz-Objektes dieses Typs)
|
;; (nach Auswahl eines Referenz-Objektes dieses Typs)
|
||||||
(defun c:SSG-LayerMoveType (/ ref-lay ref-typ elem ziel-lay ss ref-sel)
|
(defun c:SSG-LayerMoveType (/ ref-lay ref-typ elem ziel-lay ss ref-sel)
|
||||||
(ssg-start "Layer-Typ verschieben" nil)
|
(ssg-start "Layer-Typ verschieben" nil)
|
||||||
(if (setq ref-lay (ssg-get-layer "\nReferenz-Objekt waehlen (bestimmt Typ und Layer): "))
|
(if (setq ref-lay (ssg-get-layer (ssg-text "layer-prompt-referenz-objekt")))
|
||||||
(progn
|
(progn
|
||||||
(setq ref-sel (entsel "\nNochmals fuer Typ-Ermittlung anklicken: "))
|
(setq ref-sel (entsel (ssg-text "layer-prompt-typ-ermittlung")))
|
||||||
(if ref-sel
|
(if ref-sel
|
||||||
(progn
|
(progn
|
||||||
(setq ref-typ (cdr (assoc 0 (entget (car ref-sel))))
|
(setq ref-typ (cdr (assoc 0 (entget (car ref-sel))))
|
||||||
ss (ssg-layer-ss ref-lay ref-typ)
|
ss (ssg-layer-ss ref-lay ref-typ)
|
||||||
)
|
)
|
||||||
(if ss
|
(if ss
|
||||||
(if (setq ziel-lay (ssg-get-layer "\nObjekt auf dem Ziel-Layer waehlen: "))
|
(if (setq ziel-lay (ssg-get-layer (ssg-text "layer-prompt-ziel-layer")))
|
||||||
(progn
|
(progn
|
||||||
(ssg-zoom-save)
|
(ssg-zoom-save)
|
||||||
(ssg-ss-redraw ss 3)
|
(ssg-ss-redraw ss 3)
|
||||||
(if (not (ssg-ques (strcat "Layer dieser " ref-typ "-Objekte wechseln?") nil))
|
(if (not (ssg-ques (ssg-textf "layer-ques-typ-wechseln" (list ref-typ)) nil))
|
||||||
(command "_CHANGE" ss "" "_PROP" "_LA" ziel-lay "")
|
(command "_CHANGE" ss "" "_PROP" "_LA" ziel-lay "")
|
||||||
(ssg-ss-redraw ss 4)
|
(ssg-ss-redraw ss 4)
|
||||||
)
|
)
|
||||||
(ssg-zoom-restore)
|
(ssg-zoom-restore)
|
||||||
)
|
)
|
||||||
(ssg-emsg "Kein Ziel-Layer.")
|
(ssg-emsg (ssg-text "layer-err-kein-ziel-layer-kurz"))
|
||||||
)
|
)
|
||||||
(ssg-emsg "Keine passenden Objekte gefunden.")
|
(ssg-emsg (ssg-text "layer-err-keine-passenden-objekte"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(ssg-emsg "Abgebrochen.")
|
(ssg-emsg (ssg-text "layer-abgebrochen"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(ssg-emsg "Kein Referenz-Objekt gewaehlt.")
|
(ssg-emsg (ssg-text "layer-err-kein-referenz-objekt"))
|
||||||
)
|
)
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
)
|
)
|
||||||
@@ -167,10 +167,10 @@
|
|||||||
;; Layer durch Anklicken ausschalten
|
;; Layer durch Anklicken ausschalten
|
||||||
(defun c:SSG-LayerOff (/ lay)
|
(defun c:SSG-LayerOff (/ lay)
|
||||||
(ssg-start "Layer ausschalten" nil)
|
(ssg-start "Layer ausschalten" nil)
|
||||||
(while (setq lay (ssg-get-layer "\nLayer zum Ausblenden anklicken (Enter=Ende): "))
|
(while (setq lay (ssg-get-layer (ssg-text "layer-prompt-ausblenden")))
|
||||||
(if (ssg-layer-safe-p lay nil)
|
(if (ssg-layer-safe-p lay nil)
|
||||||
(command "_LAYER" "_OFF" lay "")
|
(command "_LAYER" "_OFF" lay "")
|
||||||
(ssg-emsg "Aktiven Layer nicht ausschalten!")
|
(ssg-emsg (ssg-text "layer-err-aktiv-nicht-ausschalten"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
@@ -179,10 +179,10 @@
|
|||||||
;; Layer durch Anklicken einfrieren
|
;; Layer durch Anklicken einfrieren
|
||||||
(defun c:SSG-LayerFreeze (/ lay)
|
(defun c:SSG-LayerFreeze (/ lay)
|
||||||
(ssg-start "Layer einfrieren" nil)
|
(ssg-start "Layer einfrieren" nil)
|
||||||
(while (setq lay (ssg-get-layer "\nLayer zum Einfrieren anklicken (Enter=Ende): "))
|
(while (setq lay (ssg-get-layer (ssg-text "layer-prompt-einfrieren")))
|
||||||
(if (ssg-layer-safe-p lay nil)
|
(if (ssg-layer-safe-p lay nil)
|
||||||
(command "_LAYER" "_FR" lay "")
|
(command "_LAYER" "_FR" lay "")
|
||||||
(ssg-emsg "Aktiven Layer nicht einfrieren!")
|
(ssg-emsg (ssg-text "layer-err-aktiv-nicht-einfrieren"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
@@ -191,13 +191,13 @@
|
|||||||
;; Alle Layer ausser dem aktiven einfrieren
|
;; Alle Layer ausser dem aktiven einfrieren
|
||||||
(defun c:SSG-FreezeAll (/ aktiv)
|
(defun c:SSG-FreezeAll (/ aktiv)
|
||||||
(ssg-start "Alle anderen Layer einfrieren" nil)
|
(ssg-start "Alle anderen Layer einfrieren" nil)
|
||||||
(setq aktiv (ssg-get-layer "\nObjekt auf dem Layer waehlen, der AKTIV bleibt: "))
|
(setq aktiv (ssg-get-layer (ssg-text "layer-prompt-aktiv-bleibt")))
|
||||||
(if aktiv
|
(if aktiv
|
||||||
(progn
|
(progn
|
||||||
(command "_LAYER" "_SET" aktiv "_FR" "*" "")
|
(command "_LAYER" "_SET" aktiv "_FR" "*" "")
|
||||||
(prompt (strcat "\nNur Layer '" aktiv "' ist sichtbar."))
|
(prompt (ssg-textf "layer-nur-layer-sichtbar" (list aktiv)))
|
||||||
)
|
)
|
||||||
(ssg-emsg "Abgebrochen.")
|
(ssg-emsg (ssg-text "layer-abgebrochen"))
|
||||||
)
|
)
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
)
|
)
|
||||||
@@ -278,34 +278,34 @@
|
|||||||
(defun c:SSG-LayerDelete (/ lay ss)
|
(defun c:SSG-LayerDelete (/ lay ss)
|
||||||
(ssg-start "Layer loeschen" nil)
|
(ssg-start "Layer loeschen" nil)
|
||||||
(initget 1)
|
(initget 1)
|
||||||
(setq lay (getstring "\nLayername zum Loeschen: "))
|
(setq lay (getstring (ssg-text "layer-prompt-name-loeschen")))
|
||||||
(if (tblsearch "LAYER" lay)
|
(if (tblsearch "LAYER" lay)
|
||||||
(progn
|
(progn
|
||||||
(setq ss (ssg-layer-ss lay nil))
|
(setq ss (ssg-layer-ss lay nil))
|
||||||
(if ss
|
(if ss
|
||||||
(progn
|
(progn
|
||||||
(ssg-ss-redraw ss 4)
|
(ssg-ss-redraw ss 4)
|
||||||
(if (not (ssg-ques (strcat "Alle Objekte auf Layer '" lay "' loeschen?") nil))
|
(if (not (ssg-ques (ssg-textf "layer-ques-alle-loeschen" (list lay)) nil))
|
||||||
(progn
|
(progn
|
||||||
(command "_ERASE" ss "")
|
(command "_ERASE" ss "")
|
||||||
(command "_LAYER" "_OFF" lay "")
|
(command "_LAYER" "_OFF" lay "")
|
||||||
(command "_PURGE" "_LA" lay "N")
|
(command "_PURGE" "_LA" lay "N")
|
||||||
(prompt (strcat "\nLayer '" lay "' geloescht."))
|
(prompt (ssg-textf "layer-geloescht" (list lay)))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(ssg-ss-redraw ss 0)
|
(ssg-ss-redraw ss 0)
|
||||||
(prompt "\nAbgebrochen.")
|
(prompt (strcat "\n" (ssg-text "layer-abgebrochen")))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(command "_LAYER" "_OFF" lay "")
|
(command "_LAYER" "_OFF" lay "")
|
||||||
(command "_PURGE" "_LA" lay "N")
|
(command "_PURGE" "_LA" lay "N")
|
||||||
(prompt (strcat "\nLeerer Layer '" lay "' geloescht."))
|
(prompt (ssg-textf "layer-leerer-geloescht" (list lay)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(ssg-emsg (strcat "Layer '" lay "' existiert nicht."))
|
(ssg-emsg (ssg-textf "layer-existiert-nicht" (list lay)))
|
||||||
)
|
)
|
||||||
(ssg-end)
|
(ssg-end)
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-1
@@ -24,6 +24,7 @@
|
|||||||
)
|
)
|
||||||
(load (strcat base-path "ssg_core.lsp") "ssg_core.lsp nicht gefunden")
|
(load (strcat base-path "ssg_core.lsp") "ssg_core.lsp nicht gefunden")
|
||||||
(ssg-load-config)
|
(ssg-load-config)
|
||||||
|
(load (strcat base-path "ssg_lang.lsp") "ssg_lang.lsp nicht gefunden")
|
||||||
(load (strcat base-path "ssg_dbg.lsp") "ssg_dbg.lsp nicht gefunden")
|
(load (strcat base-path "ssg_dbg.lsp") "ssg_dbg.lsp nicht gefunden")
|
||||||
(load (strcat base-path "ssg_dialog.lsp") "ssg_dialog.lsp nicht gefunden")
|
(load (strcat base-path "ssg_dialog.lsp") "ssg_dialog.lsp nicht gefunden")
|
||||||
(load (strcat base-path "ssg_layer.lsp") "ssg_layer.lsp nicht gefunden")
|
(load (strcat base-path "ssg_layer.lsp") "ssg_layer.lsp nicht gefunden")
|
||||||
@@ -34,7 +35,7 @@
|
|||||||
(load (strcat base-path "tests.lsp") "tests.lsp nicht gefunden")
|
(load (strcat base-path "tests.lsp") "tests.lsp nicht gefunden")
|
||||||
(load (strcat base-path "OmniModulInsert.lsp") "OmniModulInsert.lsp nicht gefunden")
|
(load (strcat base-path "OmniModulInsert.lsp") "OmniModulInsert.lsp nicht gefunden")
|
||||||
(load (strcat base-path "SSG_LIB_Commands.lsp") "SSG_LIB_Commands.lsp nicht gefunden")
|
(load (strcat base-path "SSG_LIB_Commands.lsp") "SSG_LIB_Commands.lsp nicht gefunden")
|
||||||
(prompt "\nSSG-Bibliotheken geladen: ssg_core, ssg_dbg, ssg_dialog, ssg_layer, KreiselInsert, VarioFoerderer, Gefaellestrecke, export, tests, OmniModulInsert, SSG_LIB_Commands")
|
(prompt "\nSSG-Bibliotheken geladen: ssg_core, ssg_lang, ssg_dbg, ssg_dialog, ssg_layer, KreiselInsert, VarioFoerderer, Gefaellestrecke, export, tests, OmniModulInsert, SSG_LIB_Commands")
|
||||||
(princ)
|
(princ)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+340
-197
@@ -2,7 +2,7 @@
|
|||||||
;; VF_CORE - VarioFoerderer Kern-Modul
|
;; VF_CORE - VarioFoerderer Kern-Modul
|
||||||
;; Version: 26.0
|
;; Version: 26.0
|
||||||
;; Architektur: Plugin/Dispatcher
|
;; Architektur: Plugin/Dispatcher
|
||||||
;; Laedt automatisch: vf_standard.lsp, vf_etage.lsp
|
;; Laedt automatisch: vf_standard.lsp, vf_etage.lsp, vf_linienzug.lsp
|
||||||
;; Befehle: VarioFoerderer (Alias: FOERDERANLAGE, ETAGEVARIOFOERDERER)
|
;; Befehle: VarioFoerderer (Alias: FOERDERANLAGE, ETAGEVARIOFOERDERER)
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
|
|
||||||
@@ -87,35 +87,9 @@
|
|||||||
(setq *ks-cache* nil)
|
(setq *ks-cache* nil)
|
||||||
(setq grad-zeichen (chr 176))
|
(setq grad-zeichen (chr 176))
|
||||||
|
|
||||||
;; 26 Attribut-Definitionen fuer VF_*-Block (alle Typen)
|
;; Attribut-Definitionen fuer VF_*-Bloecke kommen aus dem gemeinsamen
|
||||||
(setq *vf-attrib-defs*
|
;; Strecken-Schema in ssg_core.lsp (ssg-strecke-attrib-defs). VarioFoerderer
|
||||||
'(("NUMMER" "0")
|
;; ist immer TYP "Streckengruppe" -> voller Attributsatz.
|
||||||
("MONTAGEHOEHE_m" "0.000")
|
|
||||||
("HOEHE_VON" "0")
|
|
||||||
("HOEHE_BIS" "0")
|
|
||||||
("DELTA_H" "0")
|
|
||||||
("DELTA_L" "0")
|
|
||||||
("L_VF_m" "0.000")
|
|
||||||
("L_GF_m" "0.000")
|
|
||||||
("ANTRIEBFAHRTRICHTUNG" "Auf")
|
|
||||||
("WINKEL" "0")
|
|
||||||
("ANZAHL_SEPARATOR" "2")
|
|
||||||
("ANZAHL_SCANNER" "0")
|
|
||||||
("TYP" "standard")
|
|
||||||
("SEITE" "rechts")
|
|
||||||
("GF_Bogen_L_90" "0")
|
|
||||||
("GF_Bogen_L_60" "0")
|
|
||||||
("GF_Bogen_L_30" "0")
|
|
||||||
("GF_Bogen_R_90" "0")
|
|
||||||
("GF_Bogen_R_60" "0")
|
|
||||||
("GF_Bogen_R_30" "0")
|
|
||||||
("VF_Bogen_A_90" "0")
|
|
||||||
("VF_Bogen_A_60" "0")
|
|
||||||
("VF_Bogen_A_30" "0")
|
|
||||||
("VF_Bogen_I_90" "0")
|
|
||||||
("VF_Bogen_I_60" "0")
|
|
||||||
("VF_Bogen_I_30" "0")
|
|
||||||
("ID" "")))
|
|
||||||
|
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
;; TEIL 4: HILFSFUNKTIONEN
|
;; TEIL 4: HILFSFUNKTIONEN
|
||||||
@@ -131,6 +105,15 @@
|
|||||||
((and (> len 2.5) (< len 3.5)) "Z")
|
((and (> len 2.5) (< len 3.5)) "Z")
|
||||||
(t nil)))
|
(t nil)))
|
||||||
|
|
||||||
|
;; Normalisiert die verschiedenen KS-Blocknamen auf "KS_EIN"/"KS_AUS".
|
||||||
|
;; Die aelteren Bloecke (AS/ES/Gefaellebogen) verwenden KS_EIN/KS_AUS, die
|
||||||
|
;; Vario_Kurve-Bloecke KSYS_EIN/KSYS_AUS. Rueckgabe nil, wenn kein KS-Block.
|
||||||
|
(defun ks-normalize-name (nm)
|
||||||
|
(cond
|
||||||
|
((or (= nm "KS_EIN") (= nm "KSYS_EIN")) "KS_EIN")
|
||||||
|
((or (= nm "KS_AUS") (= nm "KSYS_AUS")) "KS_AUS")
|
||||||
|
(t nil)))
|
||||||
|
|
||||||
(defun fmt (x)
|
(defun fmt (x)
|
||||||
(if (and (numberp x) (not (equal x nil))) (rtos x 2 2) "---"))
|
(if (and (numberp x) (not (equal x nil))) (rtos x 2 2) "---"))
|
||||||
|
|
||||||
@@ -232,6 +215,35 @@
|
|||||||
(setq zu (vec3-cross xu-unit yu))
|
(setq zu (vec3-cross xu-unit yu))
|
||||||
(list P xu-unit yu zu))
|
(list P xu-unit yu zu))
|
||||||
|
|
||||||
|
;; --- Bruecke Frame <-> (hz, winkel) ---
|
||||||
|
;; Fuer vf-linienzug (gemischte GF/VF-Ketten, vf_linienzug.lsp): Gefaellestrecke
|
||||||
|
;; traegt den Kettenzustand als Frame (Position + Richtungsvektor xu) weiter,
|
||||||
|
;; waehrend die aelteren VF-Einfuegefunktionen (insert-block-by-ks,
|
||||||
|
;; insert-rotated-block-with-ks, insert-inclined-scaled-block) Position+hz+winkel
|
||||||
|
;; getrennt erwarten. Beide nutzen dieselbe Rz(hz)*Ry(winkel)-Rotation
|
||||||
|
;; (winkel positiv = abwaerts, xu = (cos(hz)cos(v), sin(hz)cos(v), -sin(v))),
|
||||||
|
;; daher sind Frame und (hz winkel) verlustfrei ineinander umrechenbar.
|
||||||
|
(defun frame->hz-winkel (frame / xu horiz-len)
|
||||||
|
(setq xu (cadr frame))
|
||||||
|
(setq horiz-len (sqrt (+ (* (car xu)(car xu)) (* (cadr xu)(cadr xu)))))
|
||||||
|
(list
|
||||||
|
(* (atan (cadr xu) (car xu)) (/ 180.0 pi))
|
||||||
|
(* (atan (- (caddr xu)) horiz-len) (/ 180.0 pi))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun hz-winkel->xu (hz winkel / rad-h rad-v)
|
||||||
|
(setq rad-h (* (float hz) (/ pi 180.0)))
|
||||||
|
(setq rad-v (* (float winkel) (/ pi 180.0)))
|
||||||
|
(list (* (cos rad-h)(cos rad-v))
|
||||||
|
(* (sin rad-h)(cos rad-v))
|
||||||
|
(- (sin rad-v)))
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun punkt-hz-winkel->frame (punkt hz winkel)
|
||||||
|
(make-frame-from-dir punkt (hz-winkel->xu hz winkel))
|
||||||
|
)
|
||||||
|
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
;; TEIL 5: KS_EIN/KS_AUS EXTRAKTION
|
;; TEIL 5: KS_EIN/KS_AUS EXTRAKTION
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
@@ -241,14 +253,14 @@
|
|||||||
(setq block-datei (strcat block-pfad blockname ".dwg"))
|
(setq block-datei (strcat block-pfad blockname ".dwg"))
|
||||||
(if (findfile block-datei)
|
(if (findfile block-datei)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n Lade Block: " blockname " ..."))
|
(princ (ssg-textf "vfc-lade-block" (list blockname)))
|
||||||
(setq temp-obj (vla-InsertBlock modelspace
|
(setq temp-obj (vla-InsertBlock modelspace
|
||||||
(vlax-3D-point '(0 0 0))
|
(vlax-3D-point '(0 0 0))
|
||||||
block-datei 1.0 1.0 1.0 0))
|
block-datei 1.0 1.0 1.0 0))
|
||||||
(vla-Delete temp-obj)
|
(vla-Delete temp-obj)
|
||||||
(princ " OK")
|
(princ (ssg-text "vfc-status-ok"))
|
||||||
)
|
)
|
||||||
(princ (strcat "\n FEHLER: Block-Datei nicht gefunden: " block-datei))
|
(princ (ssg-textf "vfc-fehler-block-datei-fehlt" (list block-datei)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -260,12 +272,13 @@
|
|||||||
(setq ks-results '())
|
(setq ks-results '())
|
||||||
(setq sub-entities (vlax-invoke block-obj 'Explode))
|
(setq sub-entities (vlax-invoke block-obj 'Explode))
|
||||||
(foreach sub-obj sub-entities
|
(foreach sub-obj sub-entities
|
||||||
(if (and (not (vlax-erased-p sub-obj))
|
(setq ks-ref
|
||||||
(= (vla-get-ObjectName sub-obj) "AcDbBlockReference")
|
(if (and (not (vlax-erased-p sub-obj))
|
||||||
(or (= (vla-get-Name sub-obj) "KS_EIN")
|
(= (vla-get-ObjectName sub-obj) "AcDbBlockReference"))
|
||||||
(= (vla-get-Name sub-obj) "KS_AUS")))
|
(ks-normalize-name (vla-get-Name sub-obj))
|
||||||
|
nil))
|
||||||
|
(if ks-ref
|
||||||
(progn
|
(progn
|
||||||
(setq ks-ref (vla-get-Name sub-obj))
|
|
||||||
(setq inner-entities (vlax-invoke sub-obj 'Explode))
|
(setq inner-entities (vlax-invoke sub-obj 'Explode))
|
||||||
(setq origin nil x-end nil y-end nil z-end nil)
|
(setq origin nil x-end nil y-end nil z-end nil)
|
||||||
(foreach inner-obj inner-entities
|
(foreach inner-obj inner-entities
|
||||||
@@ -328,7 +341,7 @@
|
|||||||
;; ============================================================
|
;; ============================================================
|
||||||
(defun get-3d-point-from-object (msg / ent obj pt variant)
|
(defun get-3d-point-from-object (msg / ent obj pt variant)
|
||||||
(princ msg)
|
(princ msg)
|
||||||
(princ "\n >> Objekt (Block) waehlen: ")
|
(princ (ssg-text "vfc-objekt-block-waehlen"))
|
||||||
(setq ent (entsel))
|
(setq ent (entsel))
|
||||||
(if ent
|
(if ent
|
||||||
(progn
|
(progn
|
||||||
@@ -337,17 +350,17 @@
|
|||||||
(progn
|
(progn
|
||||||
(setq variant (vla-get-InsertionPoint obj))
|
(setq variant (vla-get-InsertionPoint obj))
|
||||||
(setq pt (vlax-safearray->list (vlax-variant-value variant)))
|
(setq pt (vlax-safearray->list (vlax-variant-value variant)))
|
||||||
(princ (strcat "\n Block-Einfuegepunkt: X=" (rtos (car pt) 2 3)
|
(princ (ssg-textf "vfc-block-einfuegepunkt"
|
||||||
" Y=" (rtos (cadr pt) 2 3) " Z=" (rtos (caddr pt) 2 3)))
|
(list (rtos (car pt) 2 3) (rtos (cadr pt) 2 3) (rtos (caddr pt) 2 3))))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(setq pt (cadr ent))
|
(setq pt (cadr ent))
|
||||||
(princ (strcat "\n Punkt auf Objekt: Z=" (rtos (caddr pt) 2 2) " mm"))
|
(princ (ssg-textf "vfc-punkt-auf-objekt" (list (rtos (caddr pt) 2 2))))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n Kein Objekt gewaehlt.")
|
(princ (ssg-text "vfc-kein-objekt-gewaehlt"))
|
||||||
(setq pt nil)
|
(setq pt nil)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -356,7 +369,7 @@
|
|||||||
|
|
||||||
(defun get-line-start-end-points (msg / ent obj obj-name start-pt end-pt)
|
(defun get-line-start-end-points (msg / ent obj obj-name start-pt end-pt)
|
||||||
(princ msg)
|
(princ msg)
|
||||||
(princ "\n >> 3D-Linie oder Polylinie waehlen: ")
|
(princ (ssg-text "vfc-linie-polylinie-waehlen"))
|
||||||
(setq ent (entsel))
|
(setq ent (entsel))
|
||||||
(if ent
|
(if ent
|
||||||
(progn
|
(progn
|
||||||
@@ -368,29 +381,24 @@
|
|||||||
(vlax-variant-value (vla-get-StartPoint obj))))
|
(vlax-variant-value (vla-get-StartPoint obj))))
|
||||||
(setq end-pt (vlax-safearray->list
|
(setq end-pt (vlax-safearray->list
|
||||||
(vlax-variant-value (vla-get-EndPoint obj))))
|
(vlax-variant-value (vla-get-EndPoint obj))))
|
||||||
(princ (strcat "\n 3D-Linie:"
|
(princ (ssg-textf "vfc-3dlinie-start-ende"
|
||||||
"\n Start: X=" (rtos (car start-pt) 2 2)
|
(list (rtos (car start-pt) 2 2) (rtos (cadr start-pt) 2 2) (rtos (caddr start-pt) 2 2)
|
||||||
" Y=" (rtos (cadr start-pt) 2 2)
|
(rtos (car end-pt) 2 2) (rtos (cadr end-pt) 2 2) (rtos (caddr end-pt) 2 2))))
|
||||||
" Z=" (rtos (caddr start-pt) 2 2)
|
|
||||||
"\n Ende: X=" (rtos (car end-pt) 2 2)
|
|
||||||
" Y=" (rtos (cadr end-pt) 2 2)
|
|
||||||
" Z=" (rtos (caddr end-pt) 2 2)))
|
|
||||||
)
|
)
|
||||||
((= obj-name "AcDbPolyline")
|
((= obj-name "AcDbPolyline")
|
||||||
(setq start-pt (vlax-curve-getStartPoint obj))
|
(setq start-pt (vlax-curve-getStartPoint obj))
|
||||||
(setq end-pt (vlax-curve-getEndPoint obj))
|
(setq end-pt (vlax-curve-getEndPoint obj))
|
||||||
(princ (strcat "\n 3D-Polylinie:"
|
(princ (ssg-textf "vfc-3dpolylinie-start-ende"
|
||||||
"\n Start Z=" (rtos (caddr start-pt) 2 2)
|
(list (rtos (caddr start-pt) 2 2) (rtos (caddr end-pt) 2 2))))
|
||||||
" Ende Z=" (rtos (caddr end-pt) 2 2)))
|
|
||||||
)
|
)
|
||||||
(t
|
(t
|
||||||
(princ "\n FEHLER: Keine Linie oder Polylinie ausgewaehlt!")
|
(princ (ssg-text "vfc-fehler-keine-linie"))
|
||||||
(setq start-pt nil end-pt nil)
|
(setq start-pt nil end-pt nil)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n Kein Objekt gewaehlt.")
|
(princ (ssg-text "vfc-kein-objekt-gewaehlt"))
|
||||||
(setq start-pt nil end-pt nil)
|
(setq start-pt nil end-pt nil)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -400,22 +408,18 @@
|
|||||||
;; ============================================================
|
;; ============================================================
|
||||||
;; TEIL 7: VF-NUMMERIERUNG
|
;; TEIL 7: VF-NUMMERIERUNG
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
(defun vf-next-number ( / ss i nr maxnr attribs)
|
;; Naechste freie VF-Nummer aus den Blocknamen VF_<n> ableiten (der Blockname
|
||||||
|
;; ist die Bezeichnung/Zaehlung; ein separates NUMMER-Attribut gibt es nicht mehr).
|
||||||
|
(defun vf-next-number ( / ss i nr maxnr bname)
|
||||||
(setq maxnr 0)
|
(setq maxnr 0)
|
||||||
(setq ss (ssget "X" '((0 . "INSERT") (2 . "VF_*"))))
|
(setq ss (ssget "X" '((0 . "INSERT") (2 . "VF_*"))))
|
||||||
(if ss
|
(if ss
|
||||||
(progn
|
(progn
|
||||||
(setq i 0)
|
(setq i 0)
|
||||||
(while (< i (sslength ss))
|
(while (< i (sslength ss))
|
||||||
(setq attribs (ssg-attrib-read (ssname ss i)))
|
(setq bname (cdr (assoc 2 (entget (ssname ss i)))))
|
||||||
(foreach pair attribs
|
(setq nr (atoi (substr bname 4))) ; "VF_" = 3 Zeichen -> ab Position 4
|
||||||
(if (= (car pair) "NUMMER")
|
(if (> nr maxnr) (setq maxnr nr))
|
||||||
(progn
|
|
||||||
(setq nr (atoi (cdr pair)))
|
|
||||||
(if (> nr maxnr) (setq maxnr nr))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(setq i (1+ i))
|
(setq i (1+ i))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -428,21 +432,26 @@
|
|||||||
;; ============================================================
|
;; ============================================================
|
||||||
;; TEIL 8: BLOCK-EINFUEGEFUNKTIONEN (gemeinsam fuer alle Typen)
|
;; TEIL 8: BLOCK-EINFUEGEFUNKTIONEN (gemeinsam fuer alle Typen)
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
(defun insert-block-by-ks (blockname einfuegepunkt / block-obj temp-obj ks-data ks-ein ks-aus offset ausgang)
|
;; hz: horizontale Fahrtrichtung in Grad (0=Ost/+X, 90=Nord/+Y, ...). Block
|
||||||
|
;; hat sonst keine Neigung, daher nur Rz-Rotation (keine Ry-Komponente).
|
||||||
|
(defun insert-block-by-ks (blockname einfuegepunkt hz / block-obj temp-obj ks-data ks-ein ks-aus
|
||||||
|
rad-h chv shv ein-x ein-y ein-z dx-loc dy-loc dz-loc offset ausgang)
|
||||||
(if (or (null einfuegepunkt) (not (listp einfuegepunkt)))
|
(if (or (null einfuegepunkt) (not (listp einfuegepunkt)))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Ungueltiger Einfuegepunkt fuer '" blockname "'"))
|
(princ (ssg-textf "vfc-fehler-ungueltiger-einfuegepunkt" (list blockname)))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Block '" blockname "' nicht in Bibliothek - abgebrochen"))
|
(princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek-abgebrochen" (list blockname)))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n Fuege Block '" blockname "' ein..."))
|
(princ (ssg-textf "vfc-fuege-block-ein-hz" (list blockname (rtos (float hz) 2 1) (chr 176))))
|
||||||
|
(setq rad-h (* (float hz) (/ pi 180.0)))
|
||||||
|
(setq chv (cos rad-h) shv (sin rad-h))
|
||||||
;; KS_EIN/KS_AUS ueber eigenes Temp-Objekt am Ursprung ermitteln (nicht am
|
;; KS_EIN/KS_AUS ueber eigenes Temp-Objekt am Ursprung ermitteln (nicht am
|
||||||
;; spaeter tatsaechlich platzierten block-obj - extract-ks-from-block
|
;; spaeter tatsaechlich platzierten block-obj - extract-ks-from-block
|
||||||
;; exploded das uebergebene Objekt intern), siehe insert-block-ks-to-ks.
|
;; exploded das uebergebene Objekt intern), siehe insert-block-ks-to-ks.
|
||||||
@@ -453,28 +462,44 @@
|
|||||||
(if (not (vlax-erased-p temp-obj)) (vla-Delete temp-obj))
|
(if (not (vlax-erased-p temp-obj)) (vla-Delete temp-obj))
|
||||||
(setq ks-ein (cadr (assoc "KS_EIN" ks-data)))
|
(setq ks-ein (cadr (assoc "KS_EIN" ks-data)))
|
||||||
(setq ks-aus (cadr (assoc "KS_AUS" ks-data)))
|
(setq ks-aus (cadr (assoc "KS_AUS" ks-data)))
|
||||||
|
;; Block am Ursprung einfuegen (nicht direkt am einfuegepunkt), damit die
|
||||||
|
;; Rz-Rotation um den Block-Ursprung dreht, nicht um die Weltachse.
|
||||||
(setq block-obj (vla-InsertBlock modelspace
|
(setq block-obj (vla-InsertBlock modelspace
|
||||||
(vlax-3D-point einfuegepunkt)
|
(vlax-3D-point '(0 0 0))
|
||||||
blockname 1.0 1.0 1.0 0))
|
blockname 1.0 1.0 1.0 0))
|
||||||
|
(if (> (abs hz) 0.0001)
|
||||||
|
(vla-TransformBy block-obj (vlax-tmatrix
|
||||||
|
(list (list chv (- shv) 0 0)
|
||||||
|
(list shv chv 0 0)
|
||||||
|
(list 0 0 1 0)
|
||||||
|
(list 0 0 0 1))))
|
||||||
|
)
|
||||||
(if (and ks-ein ks-aus)
|
(if (and ks-ein ks-aus)
|
||||||
(progn
|
(progn
|
||||||
;; offset verschiebt block-obj so, dass KS_EIN (aktuell bei
|
(setq ein-x (car (car ks-ein)) ein-y (cadr (car ks-ein)) ein-z (caddr (car ks-ein)))
|
||||||
;; einfuegepunkt+lokalerVersatz) exakt auf einfuegepunkt zu liegen kommt.
|
;; Block-Ursprung so verschieben, dass das ROTIERTE KS_EIN exakt auf
|
||||||
(setq offset (list (- (car (car ks-ein)))
|
;; einfuegepunkt zu liegen kommt: Ursprung = einfuegepunkt - Rz(hz)*ks_ein_lokal
|
||||||
(- (cadr (car ks-ein)))
|
(setq offset (list
|
||||||
(- (caddr (car ks-ein)))))
|
(- (car einfuegepunkt) (- (* chv ein-x) (* shv ein-y)))
|
||||||
|
(- (cadr einfuegepunkt) (+ (* shv ein-x) (* chv ein-y)))
|
||||||
|
(- (caddr einfuegepunkt) ein-z)))
|
||||||
(vla-Move block-obj
|
(vla-Move block-obj
|
||||||
(vlax-3D-point '(0 0 0))
|
(vlax-3D-point '(0 0 0))
|
||||||
(vlax-3D-point offset))
|
(vlax-3D-point offset))
|
||||||
(setq ausgang (list (+ (car einfuegepunkt) (car (car ks-aus)) (car offset))
|
;; KS_AUS = einfuegepunkt + Rz(hz)*(ks_aus_lokal - ks_ein_lokal)
|
||||||
(+ (cadr einfuegepunkt) (cadr (car ks-aus)) (cadr offset))
|
(setq dx-loc (- (car (car ks-aus)) ein-x))
|
||||||
(+ (caddr einfuegepunkt) (caddr (car ks-aus)) (caddr offset))))
|
(setq dy-loc (- (cadr (car ks-aus)) ein-y))
|
||||||
(princ (strcat "\n KS_AUS: X=" (rtos (car ausgang) 2 2)
|
(setq dz-loc (- (caddr (car ks-aus)) ein-z))
|
||||||
" Z=" (rtos (caddr ausgang) 2 2)))
|
(setq ausgang (list
|
||||||
|
(+ (car einfuegepunkt) (- (* chv dx-loc) (* shv dy-loc)))
|
||||||
|
(+ (cadr einfuegepunkt) (+ (* shv dx-loc) (* chv dy-loc)))
|
||||||
|
(+ (caddr einfuegepunkt) dz-loc)))
|
||||||
|
(princ (ssg-textf "vfc-ks-aus-xyz"
|
||||||
|
(list (rtos (car ausgang) 2 2) (rtos (cadr ausgang) 2 2) (rtos (caddr ausgang) 2 2))))
|
||||||
ausgang
|
ausgang
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n WARNUNG: KS_EIN/KS_AUS nicht gefunden!")
|
(princ (ssg-text "vfc-warnung-ks-nicht-gefunden"))
|
||||||
einfuegepunkt
|
einfuegepunkt
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -492,7 +517,7 @@
|
|||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Block '" blockname "' nicht in Bibliothek"))
|
(princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek" (list blockname)))
|
||||||
(exit)))
|
(exit)))
|
||||||
;; Ziel-Rahmen auspacken
|
;; Ziel-Rahmen auspacken
|
||||||
(setq P-t (car target-frame)
|
(setq P-t (car target-frame)
|
||||||
@@ -512,7 +537,7 @@
|
|||||||
(setq ks-aus-raw (cadr (assoc "KS_AUS" ks-data)))
|
(setq ks-aus-raw (cadr (assoc "KS_AUS" ks-data)))
|
||||||
(if (not (and ks-ein-raw ks-aus-raw))
|
(if (not (and ks-ein-raw ks-aus-raw))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: KS_EIN/KS_AUS fehlen in '" blockname "'"))
|
(princ (ssg-textf "vfc-fehler-ks-fehlen" (list blockname)))
|
||||||
(exit)))
|
(exit)))
|
||||||
;; Block am Ursprung einfuegen (Rotation=0, Massstab=1) - dieses Objekt
|
;; Block am Ursprung einfuegen (Rotation=0, Massstab=1) - dieses Objekt
|
||||||
;; bleibt tatsaechlich in der Zeichnung.
|
;; bleibt tatsaechlich in der Zeichnung.
|
||||||
@@ -552,10 +577,8 @@
|
|||||||
(setq xu-out (mat3-mul-vec3 R xu-aus)
|
(setq xu-out (mat3-mul-vec3 R xu-aus)
|
||||||
yu-out (mat3-mul-vec3 R yu-aus)
|
yu-out (mat3-mul-vec3 R yu-aus)
|
||||||
zu-out (mat3-mul-vec3 R zu-aus))
|
zu-out (mat3-mul-vec3 R zu-aus))
|
||||||
(princ (strcat "\n '" blockname "' eingefuegt"
|
(princ (ssg-textf "vfc-block-eingefuegt-ksaus"
|
||||||
"\n KS_AUS: X=" (rtos (car P-out) 2 2)
|
(list blockname (rtos (car P-out) 2 2) (rtos (cadr P-out) 2 2) (rtos (caddr P-out) 2 2))))
|
||||||
" Y=" (rtos (cadr P-out) 2 2)
|
|
||||||
" Z=" (rtos (caddr P-out) 2 2)))
|
|
||||||
(list P-out xu-out yu-out zu-out))
|
(list P-out xu-out yu-out zu-out))
|
||||||
|
|
||||||
;; Fuegt Block ein: Orientierung wie insert-block-ks-to-ks (KS_EIN-Achsen werden
|
;; Fuegt Block ein: Orientierung wie insert-block-ks-to-ks (KS_EIN-Achsen werden
|
||||||
@@ -582,7 +605,7 @@
|
|||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Block '" blockname "' nicht in Bibliothek"))
|
(princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek" (list blockname)))
|
||||||
(exit)))
|
(exit)))
|
||||||
;; Ziel-Rahmen auspacken
|
;; Ziel-Rahmen auspacken
|
||||||
(setq P-t (car target-frame)
|
(setq P-t (car target-frame)
|
||||||
@@ -602,7 +625,7 @@
|
|||||||
(setq ks-aus-raw (cadr (assoc "KS_AUS" ks-data)))
|
(setq ks-aus-raw (cadr (assoc "KS_AUS" ks-data)))
|
||||||
(if (not (and ks-ein-raw ks-aus-raw))
|
(if (not (and ks-ein-raw ks-aus-raw))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: KS_EIN/KS_AUS fehlen in '" blockname "'"))
|
(princ (ssg-textf "vfc-fehler-ks-fehlen" (list blockname)))
|
||||||
(exit)))
|
(exit)))
|
||||||
;; Block am Ursprung einfuegen (Rotation=0, Massstab=1) - dieses Objekt
|
;; Block am Ursprung einfuegen (Rotation=0, Massstab=1) - dieses Objekt
|
||||||
;; bleibt tatsaechlich in der Zeichnung.
|
;; bleibt tatsaechlich in der Zeichnung.
|
||||||
@@ -650,49 +673,55 @@
|
|||||||
(setq xu-out (mat3-mul-vec3 R xu-aus)
|
(setq xu-out (mat3-mul-vec3 R xu-aus)
|
||||||
yu-out (mat3-mul-vec3 R yu-aus)
|
yu-out (mat3-mul-vec3 R yu-aus)
|
||||||
zu-out (mat3-mul-vec3 R zu-aus))
|
zu-out (mat3-mul-vec3 R zu-aus))
|
||||||
(princ (strcat "\n '" blockname "' eingefuegt (XY:" (if xy-ref xy-ref "Ursprung")
|
(princ (ssg-textf "vfc-block-eingefuegt-xyzref-ksaus"
|
||||||
" Z:" (if z-ref z-ref "Ursprung") ")"
|
(list blockname
|
||||||
"\n KS_AUS: X=" (rtos (car P-out) 2 2)
|
(if xy-ref xy-ref (ssg-text "vfc-ursprung"))
|
||||||
" Y=" (rtos (cadr P-out) 2 2)
|
(if z-ref z-ref (ssg-text "vfc-ursprung"))
|
||||||
" Z=" (rtos (caddr P-out) 2 2)))
|
(rtos (car P-out) 2 2) (rtos (cadr P-out) 2 2) (rtos (caddr P-out) 2 2))))
|
||||||
(list P-out xu-out yu-out zu-out))
|
(list P-out xu-out yu-out zu-out))
|
||||||
|
|
||||||
(defun insert-inclined-scaled-block (blockname startpunkt laenge winkel /
|
;; hz: horizontale Fahrtrichtung in Grad (0=Ost/+X, 90=Nord/+Y, ...),
|
||||||
rad matrix block-obj endpunkt scale)
|
;; winkel: vertikale Neigung in Grad. Rotation = Rz(hz)*Ry(winkel).
|
||||||
|
(defun insert-inclined-scaled-block (blockname startpunkt laenge winkel hz /
|
||||||
|
rad-v rad-h chv shv cvv svv matrix block-obj endpunkt scale)
|
||||||
(if (<= laenge 0.1)
|
(if (<= laenge 0.1)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n Laenge=" (rtos laenge 2 2) " mm -> uebersprungen"))
|
(princ (ssg-textf "vfc-laenge-uebersprungen" (list (rtos laenge 2 2))))
|
||||||
startpunkt
|
startpunkt
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Block '" blockname "' nicht in Bibliothek - abgebrochen"))
|
(princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek-abgebrochen" (list blockname)))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n Fuege '" blockname "' ein"
|
(princ (ssg-textf "vfc-fuege-ein-lwhz"
|
||||||
" (L=" (rtos laenge 2 2) " mm, W=" (itoa winkel) (chr 176) ")"))
|
(list blockname (rtos laenge 2 2) (itoa winkel) (chr 176) (rtos (float hz) 2 1) (chr 176))))
|
||||||
(setq scale (/ laenge (ssg-cfg-or "vario" "skalierung_basis" 1000.0)))
|
(setq scale (/ laenge (ssg-cfg-or "vario" "skalierung_basis" 1000.0)))
|
||||||
(setq rad (* winkel (/ pi 180.0)))
|
(setq rad-v (* (float winkel) (/ pi 180.0)))
|
||||||
|
(setq rad-h (* (float hz) (/ pi 180.0)))
|
||||||
|
(setq chv (cos rad-h) shv (sin rad-h) cvv (cos rad-v) svv (sin rad-v))
|
||||||
(setq block-obj (vla-InsertBlock modelspace
|
(setq block-obj (vla-InsertBlock modelspace
|
||||||
(vlax-3D-point '(0 0 0))
|
(vlax-3D-point '(0 0 0))
|
||||||
blockname scale 1.0 1.0 0))
|
blockname scale 1.0 1.0 0))
|
||||||
(setq matrix (list
|
(setq matrix (list
|
||||||
(list (cos rad) 0 (sin rad) 0)
|
(list (* chv cvv) (- shv) (* chv svv) 0)
|
||||||
(list 0 1 0 0)
|
(list (* shv cvv) chv (* shv svv) 0)
|
||||||
(list (- (sin rad)) 0 (cos rad) 0)
|
(list (- svv) 0 cvv 0)
|
||||||
(list 0 0 0 1)
|
(list 0 0 0 1)
|
||||||
))
|
))
|
||||||
(vla-TransformBy block-obj (vlax-tmatrix matrix))
|
(vla-TransformBy block-obj (vlax-tmatrix matrix))
|
||||||
(vla-Move block-obj
|
(vla-Move block-obj
|
||||||
(vlax-3D-point '(0 0 0))
|
(vlax-3D-point '(0 0 0))
|
||||||
(vlax-3D-point startpunkt))
|
(vlax-3D-point startpunkt))
|
||||||
(setq endpunkt (list (+ (car startpunkt) (* laenge (cos rad)))
|
(setq endpunkt (list
|
||||||
(cadr startpunkt)
|
(+ (car startpunkt) (* laenge chv cvv))
|
||||||
(+ (caddr startpunkt) (* (- (sin rad)) laenge))))
|
(+ (cadr startpunkt) (* laenge shv cvv))
|
||||||
(princ (strcat "\n Endpunkt: Z=" (rtos (caddr endpunkt) 2 2)))
|
(+ (caddr startpunkt) (* laenge (- svv)))))
|
||||||
|
(princ (ssg-textf "vfc-endpunkt-xyz"
|
||||||
|
(list (rtos (car endpunkt) 2 2) (rtos (cadr endpunkt) 2 2) (rtos (caddr endpunkt) 2 2))))
|
||||||
endpunkt
|
endpunkt
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -711,27 +740,31 @@
|
|||||||
;; vorhanden, wird der ECHTE gemessene Versatz KS_AUS-KS_EIN verwendet -
|
;; vorhanden, wird der ECHTE gemessene Versatz KS_AUS-KS_EIN verwendet -
|
||||||
;; das schuetzt vor veralteten Config-Zahlen, die nicht mehr zur
|
;; das schuetzt vor veralteten Config-Zahlen, die nicht mehr zur
|
||||||
;; tatsaechlichen Blockgeometrie passen (z.B. nach einer DWG-Bereinigung).
|
;; tatsaechlichen Blockgeometrie passen (z.B. nach einer DWG-Bereinigung).
|
||||||
(defun insert-rotated-block-with-ks (blockname startpunkt winkel block-dx block-dz /
|
;; hz: horizontale Fahrtrichtung in Grad (0=Ost/+X, 90=Nord/+Y, ...),
|
||||||
rad matrix block-obj temp-obj ks-data
|
;; winkel: vertikale Neigung in Grad. Rotation = Rz(hz)*Ry(winkel).
|
||||||
|
(defun insert-rotated-block-with-ks (blockname startpunkt winkel block-dx block-dz hz /
|
||||||
|
rad-v rad-h chv shv cvv svv matrix block-obj temp-obj ks-data
|
||||||
ks-ein-raw ks-aus-raw
|
ks-ein-raw ks-aus-raw
|
||||||
ein-x ein-y ein-z aus-x aus-y aus-z
|
ein-x ein-y ein-z aus-x aus-y aus-z
|
||||||
dx dz ins-pt endpunkt)
|
dx dz ins-pt endpunkt)
|
||||||
(if (or (null startpunkt) (not (listp startpunkt)))
|
(if (or (null startpunkt) (not (listp startpunkt)))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Ungueltiger Einfuegepunkt fuer '" blockname "'"))
|
(princ (ssg-textf "vfc-fehler-ungueltiger-einfuegepunkt" (list blockname)))
|
||||||
startpunkt
|
startpunkt
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Block '" blockname "' nicht in Bibliothek - abgebrochen"))
|
(princ (ssg-textf "vfc-fehler-block-nicht-in-bibliothek-abgebrochen" (list blockname)))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n Fuege Block '" blockname "' ein"
|
(princ (ssg-textf "vfc-fuege-block-ein-rotation-hz"
|
||||||
" (Rotation " (itoa winkel) (chr 176) ")"))
|
(list blockname (itoa winkel) (chr 176) (rtos (float hz) 2 1) (chr 176))))
|
||||||
(setq rad (* winkel (/ pi 180.0)))
|
(setq rad-v (* winkel (/ pi 180.0)))
|
||||||
|
(setq rad-h (* (float hz) (/ pi 180.0)))
|
||||||
|
(setq chv (cos rad-h) shv (sin rad-h) cvv (cos rad-v) svv (sin rad-v))
|
||||||
;; Lokale KS_EIN/KS_AUS-Position ueber EIGENES Temp-Objekt ermitteln
|
;; Lokale KS_EIN/KS_AUS-Position ueber EIGENES Temp-Objekt ermitteln
|
||||||
;; (nicht am spaeter tatsaechlich platzierten block-obj -
|
;; (nicht am spaeter tatsaechlich platzierten block-obj -
|
||||||
;; extract-ks-from-block exploded das uebergebene Objekt intern; das
|
;; extract-ks-from-block exploded das uebergebene Objekt intern; das
|
||||||
@@ -765,28 +798,28 @@
|
|||||||
(vlax-3D-point '(0 0 0))
|
(vlax-3D-point '(0 0 0))
|
||||||
blockname 1.0 1.0 1.0 0))
|
blockname 1.0 1.0 1.0 0))
|
||||||
(setq matrix (list
|
(setq matrix (list
|
||||||
(list (cos rad) 0 (sin rad) 0)
|
(list (* chv cvv) (- shv) (* chv svv) 0)
|
||||||
(list 0 1 0 0)
|
(list (* shv cvv) chv (* shv svv) 0)
|
||||||
(list (- (sin rad)) 0 (cos rad) 0)
|
(list (- svv) 0 cvv 0)
|
||||||
(list 0 0 0 1)
|
(list 0 0 0 1)
|
||||||
))
|
))
|
||||||
(vla-TransformBy block-obj (vlax-tmatrix matrix))
|
(vla-TransformBy block-obj (vlax-tmatrix matrix))
|
||||||
;; Block-Ursprung so verschieben, dass das ROTIERTE KS_EIN exakt auf
|
;; Block-Ursprung so verschieben, dass das ROTIERTE KS_EIN exakt auf
|
||||||
;; startpunkt liegt: Ursprung = startpunkt - Rot(ks_ein_lokal)
|
;; startpunkt liegt: Ursprung = startpunkt - Rz(hz)*Ry(winkel)*ks_ein_lokal
|
||||||
(setq ins-pt (list
|
(setq ins-pt (list
|
||||||
(- (car startpunkt) (+ (* ein-x (cos rad)) (* ein-z (sin rad))))
|
(- (car startpunkt) (+ (* ein-x chv cvv) (* ein-y (- shv)) (* ein-z chv svv)))
|
||||||
(- (cadr startpunkt) ein-y)
|
(- (cadr startpunkt) (+ (* ein-x shv cvv) (* ein-y chv) (* ein-z shv svv)))
|
||||||
(- (caddr startpunkt) (+ (* (- (sin rad)) ein-x) (* (cos rad) ein-z)))))
|
(- (caddr startpunkt) (+ (* ein-x (- svv)) (* ein-z cvv)))))
|
||||||
(vla-Move block-obj
|
(vla-Move block-obj
|
||||||
(vlax-3D-point '(0 0 0))
|
(vlax-3D-point '(0 0 0))
|
||||||
(vlax-3D-point ins-pt))
|
(vlax-3D-point ins-pt))
|
||||||
(setq endpunkt (list
|
(setq endpunkt (list
|
||||||
(+ (car startpunkt) (+ (* dx (cos rad)) (* dz (sin rad))))
|
(+ (car startpunkt) (+ (* dx chv cvv) (* dz chv svv)))
|
||||||
(cadr startpunkt)
|
(+ (cadr startpunkt) (+ (* dx shv cvv) (* dz shv svv)))
|
||||||
(+ (caddr startpunkt) (+ (* (- (sin rad)) dx) (* (cos rad) dz)))))
|
(+ (caddr startpunkt) (+ (* dx (- svv)) (* dz cvv)))))
|
||||||
(princ (strcat "\n Endpunkt: X=" (rtos (car endpunkt) 2 2)
|
(princ (ssg-textf "vfc-endpunkt-xyz-dxdz"
|
||||||
" Z=" (rtos (caddr endpunkt) 2 2)
|
(list (rtos (car endpunkt) 2 2) (rtos (cadr endpunkt) 2 2) (rtos (caddr endpunkt) 2 2)
|
||||||
" (dx=" (rtos dx 2 1) " dz=" (rtos dz 2 1) ")"))
|
(rtos dx 2 1) (rtos dz 2 1))))
|
||||||
endpunkt
|
endpunkt
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -796,25 +829,25 @@
|
|||||||
;; TEIL 9: GEMEINSAME EINGABE-ABFRAGE
|
;; TEIL 9: GEMEINSAME EINGABE-ABFRAGE
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
(defun vf-eingabe-abfragen ( / eingabe-modus line-points startpunkt endpunkt differenz
|
(defun vf-eingabe-abfragen ( / eingabe-modus line-points startpunkt endpunkt differenz
|
||||||
deltaL deltaH deltaX deltaY richtung antwort)
|
deltaL deltaH deltaX deltaY richtung antwort hz-winkel)
|
||||||
(princ "\n\nEingabemodus waehlen:")
|
(princ (ssg-text "vfc-eingabemodus-header"))
|
||||||
(princ "\n 1 - 3D-Linie auswaehlen (Start- und Endpunkt mit Hoehe)")
|
(princ (ssg-text "vfc-eingabemodus-3dlinie"))
|
||||||
(princ "\n 2 - Werte manuell eingeben")
|
(princ (ssg-text "vfc-eingabemodus-werte"))
|
||||||
(setq antwort (getstring "\nIhre Wahl (1/2): "))
|
(setq antwort (getstring (ssg-text "vfc-prompt-wahl-1-2-ohne-default")))
|
||||||
(cond
|
(cond
|
||||||
((= antwort "1") (setq eingabe-modus "Linie"))
|
((= antwort "1") (setq eingabe-modus "Linie"))
|
||||||
((= antwort "2") (setq eingabe-modus "Wert"))
|
((= antwort "2") (setq eingabe-modus "Wert"))
|
||||||
(t (setq eingabe-modus "Linie") (princ "\nModus: 3D-Linie"))
|
(t (setq eingabe-modus "Linie") (princ (ssg-text "vfc-modus-3dlinie-fallback")))
|
||||||
)
|
)
|
||||||
(if (= eingabe-modus "Linie")
|
(if (= eingabe-modus "Linie")
|
||||||
(progn
|
(progn
|
||||||
(princ "\n\n>>> MODUS: 3D-Linie auswaehlen <<<")
|
(princ (ssg-text "vfc-modus-3dlinie-header"))
|
||||||
(command "BKS" "W")
|
(command "BKS" "W")
|
||||||
(princ "\n BKS auf Weltkoordinaten gesetzt.")
|
(princ (ssg-text "vfc-bks-weltkoordinaten"))
|
||||||
(setq line-points
|
(setq line-points
|
||||||
(get-line-start-end-points "\nBitte 3D-Linie fuer die Foerderstrecke auswaehlen:"))
|
(get-line-start-end-points (ssg-text "vfc-bitte-3dlinie-foerderstrecke")))
|
||||||
(if (null line-points)
|
(if (null line-points)
|
||||||
(progn (alert "Keine gueltige Linie ausgewaehlt!") (exit))
|
(progn (alert (ssg-text "vfc-alert-keine-gueltige-linie")) (exit))
|
||||||
)
|
)
|
||||||
(setq startpunkt (car line-points)
|
(setq startpunkt (car line-points)
|
||||||
endpunkt (cadr line-points))
|
endpunkt (cadr line-points))
|
||||||
@@ -823,51 +856,94 @@
|
|||||||
deltaY (abs (cadr differenz))
|
deltaY (abs (cadr differenz))
|
||||||
deltaH (caddr differenz))
|
deltaH (caddr differenz))
|
||||||
(setq deltaL (max deltaX deltaY))
|
(setq deltaL (max deltaX deltaY))
|
||||||
(princ (strcat "\n △L=" (rtos deltaL 2 2) " mm"
|
;; Fahrtrichtung aus der Linie ableiten (0=Ost, 90=Nord, ...)
|
||||||
" △H=" (rtos deltaH 2 2) " mm"))
|
(setq hz-winkel
|
||||||
|
(* (angle '(0.0 0.0) (list (car differenz) (cadr differenz))) (/ 180.0 pi)))
|
||||||
|
(princ (ssg-textf "vfc-delta-l-h-richtung"
|
||||||
|
(list (chr 916) (rtos deltaL 2 2) (rtos deltaH 2 2) (rtos hz-winkel 2 1) grad-zeichen)))
|
||||||
(if (>= deltaH 0)
|
(if (>= deltaH 0)
|
||||||
(progn (setq richtung "Auf") (princ "\n Foerderrichtung: AUF"))
|
(progn (setq richtung "Auf") (princ (ssg-text "vfc-foerderrichtung-auf")))
|
||||||
(progn (setq richtung "Ab") (setq deltaH (abs deltaH))
|
(progn (setq richtung "Ab") (setq deltaH (abs deltaH))
|
||||||
(princ "\n Foerderrichtung: AB"))
|
(princ (ssg-text "vfc-foerderrichtung-ab")))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n\n>>> MODUS: Manuelle Werteingabe <<<")
|
(princ (ssg-text "vfc-modus-werteingabe-header"))
|
||||||
(setq deltaL (getreal "\n△L - Horizontale Distanz (mm): "))
|
(setq deltaL (getreal (ssg-textf "vfc-prompt-delta-l" (list (chr 916)))))
|
||||||
(if (null deltaL) (setq deltaL 15000))
|
(if (null deltaL) (setq deltaL 15000))
|
||||||
(setq deltaH (getreal "\n△H - Hoehenunterschied (mm): "))
|
(setq deltaH (getreal (ssg-textf "vfc-prompt-delta-h" (list (chr 916)))))
|
||||||
(if (null deltaH) (setq deltaH 3000))
|
(if (null deltaH) (setq deltaH 3000))
|
||||||
(princ "\nFoerderrichtung:\n 1 - AUF\n 2 - AB")
|
;; Foerderrichtung bleibt eine einfache Auf/Ab-Frage - die horizontale
|
||||||
(setq antwort (getstring "\nIhre Wahl (1/2): "))
|
;; Zwischenstrecke ist geometrisch NUR bei "Ab" ueberhaupt erreichbar
|
||||||
|
;; (die festen 3-Grad-Elemente wirken immer absenkend) und wird daher
|
||||||
|
;; erst SPAETER, nach Bibliotheks-Init, als Zusatzoption in der
|
||||||
|
;; Winkel-Auswahl angeboten (siehe c:VarioFoerderer) - einheitlich fuer
|
||||||
|
;; Werteingabe UND 3D-Linie.
|
||||||
|
(princ (ssg-text "vfc-foerderrichtung-menu"))
|
||||||
|
(setq antwort (getstring (ssg-text "vfc-prompt-wahl-1-2-ohne-default")))
|
||||||
(if (= antwort "2") (setq richtung "Ab") (setq richtung "Auf"))
|
(if (= antwort "2") (setq richtung "Ab") (setq richtung "Auf"))
|
||||||
(setq startpunkt (getpoint "\nStartpunkt fuer AUS_Element waehlen: "))
|
(setq startpunkt (getpoint (ssg-text "vfc-prompt-startpunkt-aus")))
|
||||||
(if (null startpunkt) (setq startpunkt '(0 0 0)))
|
(if (null startpunkt) (setq startpunkt '(0 0 0)))
|
||||||
|
;; Horizontale Fahrtrichtung waehlen (analog Gefaellestrecke Modus 1)
|
||||||
|
(princ (ssg-text "vfc-fahrtrichtung-header"))
|
||||||
|
(princ (ssg-textf "vfc-fahrtrichtung-0" (list grad-zeichen)))
|
||||||
|
(princ (ssg-textf "vfc-fahrtrichtung-90" (list grad-zeichen)))
|
||||||
|
(princ (ssg-textf "vfc-fahrtrichtung-180" (list grad-zeichen)))
|
||||||
|
(princ (ssg-textf "vfc-fahrtrichtung-270" (list grad-zeichen)))
|
||||||
|
(setq antwort (getstring (ssg-text "prompt-wahl-1-2-3-4")))
|
||||||
|
(cond
|
||||||
|
((= antwort "2") (setq hz-winkel 90.0))
|
||||||
|
((= antwort "3") (setq hz-winkel 180.0))
|
||||||
|
((= antwort "4") (setq hz-winkel 270.0))
|
||||||
|
(t (setq hz-winkel 0.0))
|
||||||
|
)
|
||||||
|
(princ (ssg-textf "vfc-fahrtrichtung-ergebnis" (list (rtos hz-winkel 2 1) grad-zeichen)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(list deltaL deltaH richtung startpunkt)
|
(list deltaL deltaH richtung startpunkt hz-winkel eingabe-modus)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
;; TEIL 10: VF_*-BLOCK-SYSTEM (gemeinsam fuer alle Typen)
|
;; TEIL 10: VF_*-BLOCK-SYSTEM (gemeinsam fuer alle Typen)
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
(defun vf-make-label (vf-nummer hoehe-von hoehe-bis deltaH deltaL L_VF L_GF
|
;; hz: horizontale Fahrtrichtung in Grad (0=Ost/+X, 90=Nord/+Y, ...) - siehe
|
||||||
richtung best-winkel n-separator n-scanner startpunkt /
|
;; variofoerderer-einfuegen. Beschriftungsposition wird ENTLANG dieser
|
||||||
label-txt label-pt L_VF_str L_GF_str delta-sym)
|
;; Richtung (halbe deltaL) und SENKRECHT dazu (200mm) versetzt, statt fest
|
||||||
|
;; von +X auszugehen. Der Textwinkel rastet wie bei Gefaellestrecke immer
|
||||||
|
;; auf 0 Grad (X-Achse) oder 90 Grad (Y-Achse) ein, damit er nie auf dem
|
||||||
|
;; Kopf steht - unabhaengig von der tatsaechlichen Fahrtrichtung.
|
||||||
|
;; L_GF1/L_GF2: die beiden Gefaellestrecken-Segmente (vorne/hinten) - werden
|
||||||
|
;; als kommagetrennte Meter-Werte dargestellt (Punkt=Dezimaltrennzeichen,
|
||||||
|
;; Komma=Segment-Trenner, analog L-gf-str in Gefaellestrecke.lsp), damit
|
||||||
|
;; beide Werte eindeutig unterscheidbar bleiben.
|
||||||
|
(defun vf-make-label (vf-nummer hoehe-von hoehe-bis deltaH deltaL L_VF L_GF1 L_GF2
|
||||||
|
richtung best-winkel n-separator n-scanner startpunkt hz /
|
||||||
|
label-txt label-pt L_VF_str L_GF_str delta-sym
|
||||||
|
chz-l shz-l halb basis-winkel)
|
||||||
(setq delta-sym (chr 916))
|
(setq delta-sym (chr 916))
|
||||||
(setq L_VF_str (vl-string-subst "," "." (rtos (/ L_VF 1000.0) 2 3)))
|
(setq L_VF_str (vl-string-subst "," "." (rtos (/ L_VF 1000.0) 2 3)))
|
||||||
(setq L_GF_str (vl-string-subst "," "." (rtos (/ L_GF 1000.0) 2 3)))
|
(setq L_GF_str (strcat (rtos (/ L_GF1 1000.0) 2 3) "," (rtos (/ L_GF2 1000.0) 2 3)))
|
||||||
(setq label-txt
|
(setq label-txt
|
||||||
(strcat "VF" (itoa vf-nummer)
|
(strcat "VF" (itoa vf-nummer)
|
||||||
": von " (itoa (fix hoehe-von)) "mm bis " (itoa (fix hoehe-bis)) "mm, "
|
(ssg-textf "vfc-label-von-bis" (list (itoa (fix hoehe-von)) (itoa (fix hoehe-bis))))
|
||||||
delta-sym "H=" (itoa (fix deltaH)) "mm; "
|
delta-sym "H=" (itoa (fix deltaH)) "mm; "
|
||||||
delta-sym "L=" (itoa (fix deltaL)) "mm; "
|
delta-sym "L=" (itoa (fix deltaL)) "mm; "
|
||||||
"VF:" L_VF_str "m; GF:" L_GF_str "m; "
|
"VF:" L_VF_str "m; GF:" L_GF_str "m; "
|
||||||
richtung ": " (itoa best-winkel) grad-zeichen "; "
|
richtung ": " (itoa best-winkel) grad-zeichen "; "
|
||||||
"Sep: " (itoa n-separator) "; Scan: " (itoa n-scanner)))
|
"Sep: " (itoa n-separator) "; Scan: " (itoa n-scanner)))
|
||||||
|
(setq chz-l (cos (* (float hz) (/ pi 180.0))))
|
||||||
|
(setq shz-l (sin (* (float hz) (/ pi 180.0))))
|
||||||
|
(setq halb (/ (float deltaL) 2.0))
|
||||||
(setq label-pt (list
|
(setq label-pt (list
|
||||||
(+ (car startpunkt) (/ deltaL 2.0))
|
(+ (car startpunkt) (* halb chz-l) (* 200.0 shz-l))
|
||||||
(- (cadr startpunkt) 200.0)
|
(+ (cadr startpunkt) (* halb shz-l) (* -200.0 chz-l))
|
||||||
(caddr startpunkt)))
|
(caddr startpunkt)))
|
||||||
|
;; Textwinkel auf 0/90 Grad einrasten (nie kopfueber, unabhaengig von hz)
|
||||||
|
(setq basis-winkel (float hz))
|
||||||
|
(while (< basis-winkel 0.0) (setq basis-winkel (+ basis-winkel 360.0)))
|
||||||
|
(while (>= basis-winkel 360.0) (setq basis-winkel (- basis-winkel 360.0)))
|
||||||
|
(if (>= basis-winkel 180.0) (setq basis-winkel (- basis-winkel 180.0)))
|
||||||
|
(setq basis-winkel (if (or (< basis-winkel 45.0) (>= basis-winkel 135.0)) 0.0 90.0))
|
||||||
(entmake (list
|
(entmake (list
|
||||||
'(0 . "TEXT")
|
'(0 . "TEXT")
|
||||||
(cons 8 "VF_Beschriftung")
|
(cons 8 "VF_Beschriftung")
|
||||||
@@ -875,7 +951,7 @@
|
|||||||
(cons 10 label-pt)
|
(cons 10 label-pt)
|
||||||
(cons 40 100.0)
|
(cons 40 100.0)
|
||||||
(cons 1 label-txt)
|
(cons 1 label-txt)
|
||||||
(cons 50 0.0)
|
(cons 50 (* basis-winkel (/ pi 180.0)))
|
||||||
'(72 . 1)
|
'(72 . 1)
|
||||||
'(73 . 2)
|
'(73 . 2)
|
||||||
(cons 11 label-pt)
|
(cons 11 label-pt)
|
||||||
@@ -905,16 +981,18 @@
|
|||||||
;; Erstellt VF_N-Block aus allen seit lastEnt erzeugten Entities.
|
;; Erstellt VF_N-Block aus allen seit lastEnt erzeugten Entities.
|
||||||
;; Setzt Attributwerte entsprechend Typ, Seite und Geometrieparametern.
|
;; Setzt Attributwerte entsprechend Typ, Seite und Geometrieparametern.
|
||||||
(defun vf-block-erstellen (anlage-typ seite vf-nummer n-scanner
|
(defun vf-block-erstellen (anlage-typ seite vf-nummer n-scanner
|
||||||
hoehe-von hoehe-bis deltaH deltaL L_VF L_GF
|
hoehe-von hoehe-bis deltaH deltaL L_VF L_GF1 L_GF2
|
||||||
richtung best-winkel startpunkt lastEnt
|
richtung best-winkel startpunkt lastEnt hz
|
||||||
/ vf-bname vf-ss vf-e vf-insert montagehoehe-m attdef-ypos)
|
/ vf-bname vf-ss vf-e vf-insert montagehoehe-m attdef-ypos L_GF_m-str)
|
||||||
|
(if (null hz) (setq hz 0.0))
|
||||||
;; Beschriftungstext erzeugen
|
;; Beschriftungstext erzeugen
|
||||||
(vf-make-label vf-nummer hoehe-von hoehe-bis deltaH deltaL L_VF L_GF
|
(vf-make-label vf-nummer hoehe-von hoehe-bis deltaH deltaL L_VF L_GF1 L_GF2
|
||||||
richtung best-winkel 2 n-scanner startpunkt)
|
richtung best-winkel 2 n-scanner startpunkt hz)
|
||||||
|
|
||||||
;; Unsichtbare ATTDEFs am Startpunkt erzeugen
|
;; Unsichtbare ATTDEFs am Startpunkt erzeugen (gemeinsames Strecken-Schema;
|
||||||
|
;; VarioFoerderer ist immer TYP "Streckengruppe" -> voller Attributsatz).
|
||||||
(setq attdef-ypos (cadr startpunkt))
|
(setq attdef-ypos (cadr startpunkt))
|
||||||
(foreach def *vf-attrib-defs*
|
(foreach def (ssg-strecke-attrib-defs "Streckengruppe")
|
||||||
(entmake (list
|
(entmake (list
|
||||||
'(0 . "ATTDEF")
|
'(0 . "ATTDEF")
|
||||||
'(8 . "0")
|
'(8 . "0")
|
||||||
@@ -951,22 +1029,33 @@
|
|||||||
(setvar "ATTREQ" 1)
|
(setvar "ATTREQ" 1)
|
||||||
(setq vf-insert (entlast))
|
(setq vf-insert (entlast))
|
||||||
(setq montagehoehe-m (/ (+ hoehe-von hoehe-bis) 2000.0))
|
(setq montagehoehe-m (/ (+ hoehe-von hoehe-bis) 2000.0))
|
||||||
|
;; L_GF_m: kommagetrennte Segmentlaengen in Metern (vorne,hinten),
|
||||||
|
;; analog L_GF_m in Gefaellestrecke.lsp.
|
||||||
|
(setq L_GF_m-str (strcat (rtos (/ L_GF1 1000.0) 2 3) "," (rtos (/ L_GF2 1000.0) 2 3)))
|
||||||
(ssg-attrib-set-on vf-insert
|
(ssg-attrib-set-on vf-insert
|
||||||
(list
|
(list
|
||||||
(cons "NUMMER" (itoa vf-nummer))
|
(cons "Bezeichnung" vf-bname)
|
||||||
|
;; Artinr. bleibt auf Schema-Vorgabe "6220"
|
||||||
(cons "MONTAGEHOEHE_m" (rtos montagehoehe-m 2 3))
|
(cons "MONTAGEHOEHE_m" (rtos montagehoehe-m 2 3))
|
||||||
(cons "HOEHE_VON" (itoa (fix hoehe-von)))
|
(cons "HOEHE_VON_mm" (itoa (fix hoehe-von)))
|
||||||
(cons "HOEHE_BIS" (itoa (fix hoehe-bis)))
|
(cons "HOEHE_BIS_mm" (itoa (fix hoehe-bis)))
|
||||||
(cons "DELTA_H" (itoa (fix deltaH)))
|
(cons "DELTA_H_mm" (itoa (fix deltaH)))
|
||||||
(cons "DELTA_L" (itoa (fix deltaL)))
|
(cons "DELTA_L_mm" (itoa (fix deltaL)))
|
||||||
|
(cons "TYP" "Streckengruppe")
|
||||||
|
(cons "SEITE_AS" seite)
|
||||||
|
(cons "SEITE_ES" seite)
|
||||||
|
(cons "ANZAHL_GF" "2") ; GF1 + GF2
|
||||||
|
(cons "L_GF_m" L_GF_m-str)
|
||||||
|
;; GF_WINKEL: Neigung je GF-Segment (GF1,GF2 - beide feste Grundneigung)
|
||||||
|
(cons "GF_WINKEL" (strcat (rtos (float (ssg-cfg-or "vario" "gefaelle_winkel" 3)) 2 1)
|
||||||
|
"," (rtos (float (ssg-cfg-or "vario" "gefaelle_winkel" 3)) 2 1)))
|
||||||
|
(cons "ANZAHL_VF" "1") ; ein VF-Koerper
|
||||||
|
(cons "MOTORSEITE" "rechts")
|
||||||
(cons "L_VF_m" (rtos (/ L_VF 1000.0) 2 3))
|
(cons "L_VF_m" (rtos (/ L_VF 1000.0) 2 3))
|
||||||
(cons "L_GF_m" (rtos (/ L_GF 1000.0) 2 3))
|
|
||||||
(cons "ANTRIEBFAHRTRICHTUNG" richtung)
|
(cons "ANTRIEBFAHRTRICHTUNG" richtung)
|
||||||
(cons "WINKEL" (itoa best-winkel))
|
(cons "VF_WINKEL" (itoa best-winkel))
|
||||||
(cons "ANZAHL_SEPARATOR" "2")
|
(cons "ANZAHL_SEPARATOR" "2")
|
||||||
(cons "ANZAHL_SCANNER" (itoa n-scanner))
|
(cons "ANZAHL_SCANNER" (itoa n-scanner))
|
||||||
(cons "TYP" anlage-typ)
|
|
||||||
(cons "SEITE" seite)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
;; Typ-spezifische Bogen-Zaehler (Etage: 2x Gefaellebogen je Seite)
|
;; Typ-spezifische Bogen-Zaehler (Etage: 2x Gefaellebogen je Seite)
|
||||||
@@ -976,6 +1065,9 @@
|
|||||||
(ssg-attrib-set-on vf-insert (list (cons "GF_Bogen_L_60" "2")))
|
(ssg-attrib-set-on vf-insert (list (cons "GF_Bogen_L_60" "2")))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
;; Aufsteigende, eindeutige ID vergeben (wie beim Kreisel), falls verfuegbar.
|
||||||
|
(if (car (atoms-family 1 '("SSG-ID-GENERATE")))
|
||||||
|
(ssg-id-generate vf-insert))
|
||||||
(princ (strcat "\n>>> Block '" vf-bname "' erstellt und eingefuegt."))
|
(princ (strcat "\n>>> Block '" vf-bname "' erstellt und eingefuegt."))
|
||||||
)
|
)
|
||||||
(princ "\n>>> FEHLER: Keine Entities fuer Block gefunden!")
|
(princ "\n>>> FEHLER: Keine Entities fuer Block gefunden!")
|
||||||
@@ -1003,6 +1095,7 @@
|
|||||||
(progn
|
(progn
|
||||||
(load (strcat *vf-lisp-pfad* "/vf_standard.lsp"))
|
(load (strcat *vf-lisp-pfad* "/vf_standard.lsp"))
|
||||||
(load (strcat *vf-lisp-pfad* "/vf_etage.lsp"))
|
(load (strcat *vf-lisp-pfad* "/vf_etage.lsp"))
|
||||||
|
(load (strcat *vf-lisp-pfad* "/vf_linienzug.lsp"))
|
||||||
(setq *ssg-vf-submodule-loaded* t)
|
(setq *ssg-vf-submodule-loaded* t)
|
||||||
)
|
)
|
||||||
(princ "\n[vf_core] WARNUNG: DXFM_LISP nicht gesetzt - Untermodule konnten nicht geladen werden!")
|
(princ "\n[vf_core] WARNUNG: DXFM_LISP nicht gesetzt - Untermodule konnten nicht geladen werden!")
|
||||||
@@ -1014,8 +1107,9 @@
|
|||||||
;; TEIL 12: DISPATCHER c:VarioFoerderer
|
;; TEIL 12: DISPATCHER c:VarioFoerderer
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
(defun c:VarioFoerderer ( / typ-eintr anlage-typ berechne-fn einfuege-fn
|
(defun c:VarioFoerderer ( / typ-eintr anlage-typ berechne-fn einfuege-fn
|
||||||
eingabe deltaL deltaH richtung startpunkt seite
|
eingabe deltaL deltaH richtung startpunkt seite hz
|
||||||
ergebnis ergebnis-liste gueltige-winkel
|
eingabe-modus ergebnis ergebnis-liste gueltige-winkel
|
||||||
|
horizontal-info
|
||||||
best-winkel L_GF L_GF1 L_GF2 L_VF
|
best-winkel L_GF L_GF1 L_GF2 L_VF
|
||||||
idx eintrag wahl antwort verteilung-modus
|
idx eintrag wahl antwort verteilung-modus
|
||||||
n-scanner vf-nummer hoehe-von hoehe-bis lastEnt
|
n-scanner vf-nummer hoehe-von hoehe-bis lastEnt
|
||||||
@@ -1059,16 +1153,30 @@
|
|||||||
(setq einfuege-fn (nth 2 typ-eintr))
|
(setq einfuege-fn (nth 2 typ-eintr))
|
||||||
(princ (strcat "\n>>> Typ: " anlage-typ))
|
(princ (strcat "\n>>> Typ: " anlage-typ))
|
||||||
|
|
||||||
|
;; Sonderfall "linienzug": eigener Befehlsablauf (interaktive Mehrsegment-
|
||||||
|
;; Kette mit gemischten GF/VF-Segmenten), passt nicht in das berechne-fn/
|
||||||
|
;; einfuege-fn-Schema fuer ein einzelnes durchgehendes Segment - siehe
|
||||||
|
;; vf_linienzug.lsp. Dispatcht hier direkt und beendet den Standard-Ablauf.
|
||||||
|
(if (= anlage-typ "linienzug")
|
||||||
|
(progn
|
||||||
|
(vf-linienzug-modus)
|
||||||
|
(exit)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
;; 2. VF-Nummer automatisch ermitteln
|
;; 2. VF-Nummer automatisch ermitteln
|
||||||
(setq vf-nummer (vf-next-number))
|
(setq vf-nummer (vf-next-number))
|
||||||
(princ (strcat "\n>>> Naechste VF-Nummer: VF" (itoa vf-nummer)))
|
(princ (strcat "\n>>> Naechste VF-Nummer: VF" (itoa vf-nummer)))
|
||||||
|
|
||||||
;; 3. Gemeinsame Eingabe (deltaL, deltaH, richtung, startpunkt)
|
;; 3. Gemeinsame Eingabe (deltaL, deltaH, richtung, startpunkt) - richtung
|
||||||
|
;; steht bei beiden Eingabemodi (Werteingabe UND 3D-Linie) bereits fest.
|
||||||
(setq eingabe (vf-eingabe-abfragen))
|
(setq eingabe (vf-eingabe-abfragen))
|
||||||
(setq deltaL (nth 0 eingabe)
|
(setq deltaL (nth 0 eingabe)
|
||||||
deltaH (nth 1 eingabe)
|
deltaH (nth 1 eingabe)
|
||||||
richtung (nth 2 eingabe)
|
richtung (nth 2 eingabe)
|
||||||
startpunkt (nth 3 eingabe))
|
startpunkt (nth 3 eingabe)
|
||||||
|
hz (nth 4 eingabe)
|
||||||
|
eingabe-modus (nth 5 eingabe))
|
||||||
|
|
||||||
;; 4. Seite-Auswahl (vor Berechnung, weil Etage-Typ sie fuer Geometrie braucht)
|
;; 4. Seite-Auswahl (vor Berechnung, weil Etage-Typ sie fuer Geometrie braucht)
|
||||||
(princ "\n\nSeite waehlen:")
|
(princ "\n\nSeite waehlen:")
|
||||||
@@ -1078,11 +1186,31 @@
|
|||||||
(if (= antwort "2") (setq seite "links") (setq seite "rechts"))
|
(if (= antwort "2") (setq seite "links") (setq seite "rechts"))
|
||||||
(princ (strcat "\n>>> Seite: " seite))
|
(princ (strcat "\n>>> Seite: " seite))
|
||||||
|
|
||||||
;; 5. Typ-spezifische Berechnung (init + berechne)
|
;; 5. Typ-spezifische Berechnung (init + Winkelsuche)
|
||||||
(setq ergebnis (apply berechne-fn (list deltaL deltaH richtung seite)))
|
(setq ergebnis (apply berechne-fn (list deltaL deltaH richtung seite)))
|
||||||
(setq ergebnis-liste (cadddr ergebnis))
|
(setq ergebnis-liste (cadddr ergebnis))
|
||||||
|
|
||||||
;; 6. Konfiguration (nach ssg_core-Init verfuegbar)
|
;; 5b. Horizontale Zwischenstrecke als Zusatzoption: geometrisch NUR bei
|
||||||
|
;; "Ab" ueberhaupt erreichbar (die festen 3-Grad-Elemente wirken immer
|
||||||
|
;; absenkend) - "Auf" wird deshalb gar nicht erst geprueft. Gilt einheitlich
|
||||||
|
;; fuer Werteingabe UND 3D-Linie, da richtung hier in jedem Fall feststeht.
|
||||||
|
;; Bibliothek ist durch den berechne-fn-Aufruf oben bereits initialisiert.
|
||||||
|
(if (and (= anlage-typ "standard") (= richtung "Ab"))
|
||||||
|
(progn
|
||||||
|
(setq horizontal-info (berechne-horizontale-mitte deltaL deltaH "Ab"))
|
||||||
|
(if (and horizontal-info (caddr horizontal-info))
|
||||||
|
(progn
|
||||||
|
(setq ergebnis-liste
|
||||||
|
(append ergebnis-liste
|
||||||
|
(list (list 0 (car horizontal-info) (cadr horizontal-info) T))))
|
||||||
|
(princ "\n\n>>> Hinweis: Ein horizontale Variofoerderer ( 0°) ist bei diesem △L/△H zusaetzlich moeglich!")
|
||||||
|
)
|
||||||
|
(setq horizontal-info nil)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Konfiguration (nach ssg_core-Init verfuegbar).
|
||||||
(setq staustrecke-basis (ssg-cfg-or "vario" "staustrecke_basis" 1000))
|
(setq staustrecke-basis (ssg-cfg-or "vario" "staustrecke_basis" 1000))
|
||||||
|
|
||||||
;; 7. Gueltige Winkel ermitteln
|
;; 7. Gueltige Winkel ermitteln
|
||||||
@@ -1103,22 +1231,33 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
;; 8. Winkelauswahl (automatisch oder interaktiv)
|
;; 8. Winkelauswahl (automatisch oder interaktiv)
|
||||||
|
;; Sentinel-Winkel 0 = horizontale Zwischenstrecke (Schritt 6/11 bei 0
|
||||||
|
;; Grad, Boegen fest auf_3/ab_3) - siehe berechne-horizontale-mitte.
|
||||||
(if (= (length gueltige-winkel) 1)
|
(if (= (length gueltige-winkel) 1)
|
||||||
(progn
|
(progn
|
||||||
(setq best-winkel (car gueltige-winkel))
|
(setq best-winkel (car gueltige-winkel))
|
||||||
(setq eintrag (assoc best-winkel ergebnis-liste))
|
(setq eintrag (assoc best-winkel ergebnis-liste))
|
||||||
(setq L_GF (nth 1 eintrag) L_VF (nth 2 eintrag))
|
(setq L_GF (nth 1 eintrag) L_VF (nth 2 eintrag))
|
||||||
(princ (strcat "\n\n>>> Einziger gueltiger Winkel: "
|
(if (= best-winkel 0)
|
||||||
(itoa best-winkel) (chr 176)))
|
(princ "\n\n>>> Einzige gueltige Variante: Horizontale Variofoerderer")
|
||||||
|
(princ (strcat "\n\n>>> Einziger gueltiger Winkel: "
|
||||||
|
(itoa best-winkel) (chr 176)))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n\nMehrere gueltige Winkel verfuegbar. Bitte waehlen:")
|
(princ "\n\nMehrere gueltige Winkel verfuegbar. Bitte waehlen:")
|
||||||
(setq idx 1)
|
(setq idx 1)
|
||||||
(foreach w gueltige-winkel
|
(foreach w gueltige-winkel
|
||||||
(setq eintrag (assoc w ergebnis-liste))
|
(setq eintrag (assoc w ergebnis-liste))
|
||||||
(princ (strcat "\n " (itoa idx) " - " (itoa w) (chr 176)
|
(if (= w 0)
|
||||||
" (L_GF=" (rtos (nth 1 eintrag) 2 1)
|
(princ (strcat "\n " (itoa idx) " - Horizontale Variofoerderer (0"
|
||||||
" mm, L_VF=" (rtos (nth 2 eintrag) 2 1) " mm)"))
|
(chr 176) ")"
|
||||||
|
" (L_GF=" (rtos (nth 1 eintrag) 2 1)
|
||||||
|
" mm, L_VF=" (rtos (nth 2 eintrag) 2 1) " mm)"))
|
||||||
|
(princ (strcat "\n " (itoa idx) " - " (itoa w) (chr 176)
|
||||||
|
" (L_GF=" (rtos (nth 1 eintrag) 2 1)
|
||||||
|
" mm, L_VF=" (rtos (nth 2 eintrag) 2 1) " mm)"))
|
||||||
|
)
|
||||||
(setq idx (1+ idx))
|
(setq idx (1+ idx))
|
||||||
)
|
)
|
||||||
(setq wahl (getint (strcat "Winkel waehlen (1-"
|
(setq wahl (getint (strcat "Winkel waehlen (1-"
|
||||||
@@ -1131,9 +1270,14 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ "\n\n=========================================")
|
(princ "\n\n=========================================")
|
||||||
(princ (strcat "\n>>> Winkel: " (itoa best-winkel) (chr 176)
|
(if (= best-winkel 0)
|
||||||
" L_GF: " (rtos L_GF 2 2) " mm"
|
(princ (strcat "\n>>> Horizontale Variofoerderer"
|
||||||
" L_VF: " (rtos L_VF 2 2) " mm"))
|
" L_GF: " (rtos L_GF 2 2) " mm"
|
||||||
|
" L_VF: " (rtos L_VF 2 2) " mm"))
|
||||||
|
(princ (strcat "\n>>> Winkel: " (itoa best-winkel) (chr 176)
|
||||||
|
" L_GF: " (rtos L_GF 2 2) " mm"
|
||||||
|
" L_VF: " (rtos L_VF 2 2) " mm"))
|
||||||
|
)
|
||||||
(princ "\n=========================================")
|
(princ "\n=========================================")
|
||||||
|
|
||||||
;; 9. L_GF Verteilung
|
;; 9. L_GF Verteilung
|
||||||
@@ -1164,9 +1308,8 @@
|
|||||||
(princ (strcat "\n>>> L_GF1=" (rtos L_GF1 2 2)
|
(princ (strcat "\n>>> L_GF1=" (rtos L_GF1 2 2)
|
||||||
" mm L_GF2=" (rtos L_GF2 2 2) " mm"))
|
" mm L_GF2=" (rtos L_GF2 2 2) " mm"))
|
||||||
|
|
||||||
;; 10. Anzahl Scanner
|
;; Scanner-Anzahl wird nicht mehr abgefragt (Attribut ANZAHL_SCANNER bleibt 0).
|
||||||
(setq n-scanner (getint "\nAnzahl Scanner [0]: "))
|
(setq n-scanner 0)
|
||||||
(if (null n-scanner) (setq n-scanner 0))
|
|
||||||
|
|
||||||
;; 11. Bestaetigung
|
;; 11. Bestaetigung
|
||||||
(princ "\n\nMoechten Sie die Foerderanlage einfuegen?")
|
(princ "\n\nMoechten Sie die Foerderanlage einfuegen?")
|
||||||
@@ -1187,12 +1330,12 @@
|
|||||||
|
|
||||||
;; Typ-spezifische Einfuegung
|
;; Typ-spezifische Einfuegung
|
||||||
(apply einfuege-fn
|
(apply einfuege-fn
|
||||||
(list deltaL deltaH richtung best-winkel L_GF1 L_GF2 L_VF startpunkt seite))
|
(list deltaL deltaH richtung best-winkel L_GF1 L_GF2 L_VF startpunkt seite hz))
|
||||||
|
|
||||||
;; Gemeinsame VF_*-Block-Erstellung
|
;; Gemeinsame VF_*-Block-Erstellung
|
||||||
(vf-block-erstellen anlage-typ seite vf-nummer n-scanner
|
(vf-block-erstellen anlage-typ seite vf-nummer n-scanner
|
||||||
hoehe-von hoehe-bis deltaH deltaL L_VF L_GF
|
hoehe-von hoehe-bis deltaH deltaL L_VF L_GF1 L_GF2
|
||||||
richtung best-winkel startpunkt lastEnt)
|
richtung best-winkel startpunkt lastEnt hz)
|
||||||
|
|
||||||
(princ "\n=========================================")
|
(princ "\n=========================================")
|
||||||
)
|
)
|
||||||
|
|||||||
+86
-91
@@ -21,7 +21,7 @@
|
|||||||
(if *vf-etage-core-pfad*
|
(if *vf-etage-core-pfad*
|
||||||
(load (strcat *vf-etage-core-pfad* "/vf_core.lsp"))
|
(load (strcat *vf-etage-core-pfad* "/vf_core.lsp"))
|
||||||
(progn
|
(progn
|
||||||
(princ "\n[vf_etage] WARNUNG: Lisp-Pfad nicht ermittelbar - vf_core.lsp nicht ladbar!")
|
(princ (ssg-text "vfe-warn-lisp-pfad"))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -50,9 +50,9 @@
|
|||||||
(if (and *etage-lib-initialized* (not (tblsearch "BLOCK" "AS_Element_30_rechts")))
|
(if (and *etage-lib-initialized* (not (tblsearch "BLOCK" "AS_Element_30_rechts")))
|
||||||
(setq *etage-lib-initialized* nil))
|
(setq *etage-lib-initialized* nil))
|
||||||
(if *etage-lib-initialized*
|
(if *etage-lib-initialized*
|
||||||
(progn (princ "\n Etage-Bibliothek bereits initialisiert.") t)
|
(progn (princ (ssg-text "vfe-bib-bereits-init")) t)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n Initialisiere Etage-Bibliothek...")
|
(princ (ssg-text "vfe-bib-initialisiere"))
|
||||||
|
|
||||||
;; Standard-Bogen-Daten laden (bogen-auf/bogen-ab benoetigt)
|
;; Standard-Bogen-Daten laden (bogen-auf/bogen-ab benoetigt)
|
||||||
(if (not *lib-initialized*)
|
(if (not *lib-initialized*)
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
;; AS_30_rechts Masse extrahieren
|
;; AS_30_rechts Masse extrahieren
|
||||||
(princ "\n Extrahiere AS_30_rechts Masse...")
|
(princ (ssg-text "vfe-extrahiere-as30"))
|
||||||
(ensure-block-loaded "AS_Element_30_rechts")
|
(ensure-block-loaded "AS_Element_30_rechts")
|
||||||
(ensure-block-loaded "AS_Element_30_links")
|
(ensure-block-loaded "AS_Element_30_links")
|
||||||
(if (tblsearch "BLOCK" "AS_Element_30_rechts")
|
(if (tblsearch "BLOCK" "AS_Element_30_rechts")
|
||||||
@@ -79,23 +79,22 @@
|
|||||||
(progn
|
(progn
|
||||||
(setq etage-aus-dx (- (caar ks-aus-pos) (caar ks-ein-pos)))
|
(setq etage-aus-dx (- (caar ks-aus-pos) (caar ks-ein-pos)))
|
||||||
(setq etage-aus-dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
(setq etage-aus-dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
||||||
(princ (strcat "\n AS_30_rechts: dx=" (rtos etage-aus-dx 2 1)
|
(princ (ssg-textf "vfe-as30-mass" (list (rtos etage-aus-dx 2 1) (rtos etage-aus-dz 2 1))))
|
||||||
" mm, dz=" (rtos etage-aus-dz 2 1) " mm"))
|
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n WARNUNG: KS fehlt - Standardwerte")
|
(princ (ssg-text "vfe-warn-ks-fehlt-standard"))
|
||||||
(setq etage-aus-dx 525.8 etage-aus-dz -72.9)
|
(setq etage-aus-dx 525.8 etage-aus-dz -72.9)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n WARNUNG: Block AS_Element_30_rechts fehlt - Standardwerte")
|
(princ (ssg-text "vfe-warn-block-as30-fehlt"))
|
||||||
(setq etage-aus-dx 525.8 etage-aus-dz -72.9)
|
(setq etage-aus-dx 525.8 etage-aus-dz -72.9)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; ES_30_rechts Masse extrahieren
|
;; ES_30_rechts Masse extrahieren
|
||||||
(princ "\n Extrahiere ES_30_rechts Masse...")
|
(princ (ssg-text "vfe-extrahiere-es30"))
|
||||||
(ensure-block-loaded "ES_Element_30_rechts")
|
(ensure-block-loaded "ES_Element_30_rechts")
|
||||||
(ensure-block-loaded "ES_Element_30_links")
|
(ensure-block-loaded "ES_Element_30_links")
|
||||||
(if (tblsearch "BLOCK" "ES_Element_30_rechts")
|
(if (tblsearch "BLOCK" "ES_Element_30_rechts")
|
||||||
@@ -114,24 +113,23 @@
|
|||||||
(progn
|
(progn
|
||||||
(setq etage-ein-dx (- (caar ks-aus-pos) (caar ks-ein-pos)))
|
(setq etage-ein-dx (- (caar ks-aus-pos) (caar ks-ein-pos)))
|
||||||
(setq etage-ein-dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
(setq etage-ein-dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
||||||
(princ (strcat "\n ES_30_rechts: dx=" (rtos etage-ein-dx 2 1)
|
(princ (ssg-textf "vfe-es30-mass" (list (rtos etage-ein-dx 2 1) (rtos etage-ein-dz 2 1))))
|
||||||
" mm, dz=" (rtos etage-ein-dz 2 1) " mm"))
|
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n WARNUNG: KS fehlt - Standardwerte")
|
(princ (ssg-text "vfe-warn-ks-fehlt-standard"))
|
||||||
(setq etage-ein-dx 576.2 etage-ein-dz -54.6)
|
(setq etage-ein-dx 576.2 etage-ein-dz -54.6)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n WARNUNG: Block ES_Element_30_rechts fehlt - Standardwerte")
|
(princ (ssg-text "vfe-warn-block-es30-fehlt"))
|
||||||
(setq etage-ein-dx 576.2 etage-ein-dz -54.6)
|
(setq etage-ein-dx 576.2 etage-ein-dz -54.6)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; Gefaellebogen_links_60 Masse extrahieren
|
;; Gefaellebogen_links_60 Masse extrahieren
|
||||||
(setq gefaelle-blockname "Gefaellebogen_links_60_R500")
|
(setq gefaelle-blockname "Gefaellebogen_links_60_R500")
|
||||||
(princ (strcat "\n Extrahiere " gefaelle-blockname " Masse..."))
|
(princ (ssg-textf "vfe-extrahiere-block-mass" (list gefaelle-blockname)))
|
||||||
(ensure-block-loaded gefaelle-blockname)
|
(ensure-block-loaded gefaelle-blockname)
|
||||||
(if (tblsearch "BLOCK" gefaelle-blockname)
|
(if (tblsearch "BLOCK" gefaelle-blockname)
|
||||||
(progn
|
(progn
|
||||||
@@ -150,22 +148,21 @@
|
|||||||
(setq etage-gef-dz-links (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
(setq etage-gef-dz-links (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n WARNUNG: kein KS - Standardwerte (links)")
|
(princ (ssg-text "vfe-warn-kein-ks-links"))
|
||||||
(setq etage-gef-dx-links 0.0 etage-gef-dz-links -10.0)
|
(setq etage-gef-dx-links 0.0 etage-gef-dz-links -10.0)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n WARNUNG: Block fehlt - Standardwerte (links)")
|
(princ (ssg-text "vfe-warn-block-fehlt-links"))
|
||||||
(setq etage-gef-dx-links 0.0 etage-gef-dz-links -10.0)
|
(setq etage-gef-dx-links 0.0 etage-gef-dz-links -10.0)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n Gefaellebogen links: dx=" (rtos etage-gef-dx-links 2 2)
|
(princ (ssg-textf "vfe-gefaellebogen-links-mass" (list (rtos etage-gef-dx-links 2 2) (rtos etage-gef-dz-links 2 2))))
|
||||||
" dz=" (rtos etage-gef-dz-links 2 2) " mm"))
|
|
||||||
|
|
||||||
;; Gefaellebogen_rechts_60 Masse extrahieren
|
;; Gefaellebogen_rechts_60 Masse extrahieren
|
||||||
(setq gefaelle-blockname "Gefaellebogen_rechts_60_R500")
|
(setq gefaelle-blockname "Gefaellebogen_rechts_60_R500")
|
||||||
(princ (strcat "\n Extrahiere " gefaelle-blockname " Masse..."))
|
(princ (ssg-textf "vfe-extrahiere-block-mass" (list gefaelle-blockname)))
|
||||||
(ensure-block-loaded gefaelle-blockname)
|
(ensure-block-loaded gefaelle-blockname)
|
||||||
(if (tblsearch "BLOCK" gefaelle-blockname)
|
(if (tblsearch "BLOCK" gefaelle-blockname)
|
||||||
(progn
|
(progn
|
||||||
@@ -184,21 +181,20 @@
|
|||||||
(setq etage-gef-dz-rechts (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
(setq etage-gef-dz-rechts (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n WARNUNG: kein KS - Standardwerte (rechts)")
|
(princ (ssg-text "vfe-warn-kein-ks-rechts"))
|
||||||
(setq etage-gef-dx-rechts 0.0 etage-gef-dz-rechts -10.0)
|
(setq etage-gef-dx-rechts 0.0 etage-gef-dz-rechts -10.0)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ "\n WARNUNG: Block fehlt - Standardwerte (rechts)")
|
(princ (ssg-text "vfe-warn-block-fehlt-rechts"))
|
||||||
(setq etage-gef-dx-rechts 0.0 etage-gef-dz-rechts -10.0)
|
(setq etage-gef-dx-rechts 0.0 etage-gef-dz-rechts -10.0)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n Gefaellebogen rechts: dx=" (rtos etage-gef-dx-rechts 2 2)
|
(princ (ssg-textf "vfe-gefaellebogen-rechts-mass" (list (rtos etage-gef-dx-rechts 2 2) (rtos etage-gef-dz-rechts 2 2))))
|
||||||
" dz=" (rtos etage-gef-dz-rechts 2 2) " mm"))
|
|
||||||
|
|
||||||
(setq *etage-lib-initialized* t)
|
(setq *etage-lib-initialized* t)
|
||||||
(princ "\n Etage-Bibliothek erfolgreich initialisiert.")
|
(princ (ssg-text "vfe-bib-init-erfolg"))
|
||||||
t
|
t
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -223,7 +219,7 @@
|
|||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Block '" blockname "' nicht in Bibliothek - abgebrochen"))
|
(princ (ssg-textf "vfe-block-fehlt-abbruch" (list blockname)))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -241,10 +237,11 @@
|
|||||||
(+ (car startpunkt) (* laenge chz cv))
|
(+ (car startpunkt) (* laenge chz cv))
|
||||||
(+ (cadr startpunkt) (* laenge shz cv))
|
(+ (cadr startpunkt) (* laenge shz cv))
|
||||||
(+ (caddr startpunkt) (* (- sv) laenge))))
|
(+ (caddr startpunkt) (* (- sv) laenge))))
|
||||||
(princ (strcat "\n HzIncl " blockname " L=" (rtos laenge 2 0)
|
(princ (ssg-textf "vfe-hz-incl-status"
|
||||||
" hz=" (rtos hz-winkel 2 0) (chr 176)
|
(list blockname (rtos laenge 2 0)
|
||||||
" v=" (rtos vert-winkel 2 0) (chr 176)
|
(strcat (rtos hz-winkel 2 0) (chr 176))
|
||||||
" -> Z=" (rtos (caddr endpunkt) 2 1)))
|
(strcat (rtos vert-winkel 2 0) (chr 176))
|
||||||
|
(rtos (caddr endpunkt) 2 1))))
|
||||||
endpunkt
|
endpunkt
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -258,7 +255,7 @@
|
|||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Block '" blockname "' nicht in Bibliothek - abgebrochen"))
|
(princ (ssg-textf "vfe-block-fehlt-abbruch" (list blockname)))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -276,10 +273,11 @@
|
|||||||
(+ (car startpunkt) (+ (* block-dx chz cv) (* block-dz chz sv)))
|
(+ (car startpunkt) (+ (* block-dx chz cv) (* block-dz chz sv)))
|
||||||
(+ (cadr startpunkt) (+ (* block-dx shz cv) (* block-dz shz sv)))
|
(+ (cadr startpunkt) (+ (* block-dx shz cv) (* block-dz shz sv)))
|
||||||
(+ (caddr startpunkt) (+ (* (- sv) block-dx) (* cv block-dz)))))
|
(+ (caddr startpunkt) (+ (* (- sv) block-dx) (* cv block-dz)))))
|
||||||
(princ (strcat "\n HzRot " blockname
|
(princ (ssg-textf "vfe-hz-rot-status"
|
||||||
" hz=" (rtos hz-winkel 2 0) (chr 176)
|
(list blockname
|
||||||
" v=" (rtos vert-winkel 2 0) (chr 176)
|
(strcat (rtos hz-winkel 2 0) (chr 176))
|
||||||
" -> Z=" (rtos (caddr endpunkt) 2 1)))
|
(strcat (rtos vert-winkel 2 0) (chr 176))
|
||||||
|
(rtos (caddr endpunkt) 2 1))))
|
||||||
endpunkt
|
endpunkt
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -291,7 +289,7 @@
|
|||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Block '" blockname "' nicht in Bibliothek - abgebrochen"))
|
(princ (ssg-textf "vfe-block-fehlt-abbruch" (list blockname)))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -335,13 +333,14 @@
|
|||||||
(setq ausgang (list (+ (car p-aus-rot) (car offset))
|
(setq ausgang (list (+ (car p-aus-rot) (car offset))
|
||||||
(+ (cadr p-aus-rot) (cadr offset))
|
(+ (cadr p-aus-rot) (cadr offset))
|
||||||
(+ (caddr p-aus-rot) (caddr offset))))
|
(+ (caddr p-aus-rot) (caddr offset))))
|
||||||
(princ (strcat "\n HzRotKS " blockname
|
(princ (ssg-textf "vfe-hz-rotks-status"
|
||||||
" hz=" (rtos hz-winkel 2 0) (chr 176)
|
(list blockname
|
||||||
" -> Z=" (rtos (caddr ausgang) 2 1)))
|
(strcat (rtos hz-winkel 2 0) (chr 176))
|
||||||
|
(rtos (caddr ausgang) 2 1))))
|
||||||
ausgang
|
ausgang
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n WARNUNG: KS fehlt in '" blockname "' - verwende Startpunkt"))
|
(princ (ssg-textf "vfe-ks-fehlt-startpunkt" (list blockname)))
|
||||||
startpunkt
|
startpunkt
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -355,7 +354,7 @@
|
|||||||
(ensure-block-loaded blockname)
|
(ensure-block-loaded blockname)
|
||||||
(if (not (tblsearch "BLOCK" blockname))
|
(if (not (tblsearch "BLOCK" blockname))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: Block '" blockname "' nicht in Bibliothek - abgebrochen"))
|
(princ (ssg-textf "vfe-block-fehlt-abbruch" (list blockname)))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -403,14 +402,14 @@
|
|||||||
(setq ausgang (list (+ (car p-aus-rot) (car offset))
|
(setq ausgang (list (+ (car p-aus-rot) (car offset))
|
||||||
(+ (cadr p-aus-rot) (cadr offset))
|
(+ (cadr p-aus-rot) (cadr offset))
|
||||||
(+ (caddr p-aus-rot) (caddr offset))))
|
(+ (caddr p-aus-rot) (caddr offset))))
|
||||||
(princ (strcat "\n HzScaleKS " blockname
|
(princ (ssg-textf "vfe-hz-scaleks-status"
|
||||||
" " (rtos laenge 2 0) "mm"
|
(list blockname (rtos laenge 2 0)
|
||||||
" hz=" (rtos hz-winkel 2 0) (chr 176)
|
(strcat (rtos hz-winkel 2 0) (chr 176))
|
||||||
" -> Z=" (rtos (caddr ausgang) 2 1)))
|
(rtos (caddr ausgang) 2 1))))
|
||||||
ausgang
|
ausgang
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n WARNUNG: KS fehlt in '" blockname "' - verwende Startpunkt"))
|
(princ (ssg-textf "vfe-ks-fehlt-startpunkt" (list blockname)))
|
||||||
startpunkt
|
startpunkt
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -432,7 +431,7 @@
|
|||||||
|
|
||||||
(if (not *etage-lib-initialized*)
|
(if (not *etage-lib-initialized*)
|
||||||
(progn
|
(progn
|
||||||
(alert "Etage-Bibliothek nicht initialisiert!")
|
(alert (ssg-text "vfe-alert-bib-nicht-init"))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -452,11 +451,9 @@
|
|||||||
(setq schraeg-cos (* (cos schraeg-hz-rad) cos3))
|
(setq schraeg-cos (* (cos schraeg-hz-rad) cos3))
|
||||||
|
|
||||||
(princ "\n\n=========================================")
|
(princ "\n\n=========================================")
|
||||||
(princ "\n ETAGE-BERECHNUNG FUER ALLE WINKEL")
|
(princ (ssg-text "vfe-berechnung-header"))
|
||||||
(princ "\n=========================================")
|
(princ "\n=========================================")
|
||||||
(princ (strcat "\n△L=" (rtos deltaL 2 2) " mm"
|
(princ (ssg-textf "vfe-delta-info" (list (rtos deltaL 2 2) (rtos deltaH 2 2) richtung)))
|
||||||
" △H=" (rtos deltaH 2 2) " mm"
|
|
||||||
" Richtung=" richtung))
|
|
||||||
|
|
||||||
(foreach winkel winkel-list
|
(foreach winkel winkel-list
|
||||||
(if (= richtung "Auf")
|
(if (= richtung "Auf")
|
||||||
@@ -471,7 +468,7 @@
|
|||||||
)
|
)
|
||||||
(if (or (null mass1) (null mass2))
|
(if (or (null mass1) (null mass2))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n " (itoa winkel) (chr 176) " -> Bogen nicht vorhanden"))
|
(princ (ssg-textf "vfe-bogen-nicht-vorhanden" (list (strcat (itoa winkel) (chr 176)))))
|
||||||
(setq ergebnis-liste (cons (list winkel nil nil nil) ergebnis-liste))
|
(setq ergebnis-liste (cons (list winkel nil nil nil) ergebnis-liste))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
@@ -540,9 +537,9 @@
|
|||||||
(setq ergebnis-liste (reverse ergebnis-liste))
|
(setq ergebnis-liste (reverse ergebnis-liste))
|
||||||
|
|
||||||
(princ "\n\n=================================================================================")
|
(princ "\n\n=================================================================================")
|
||||||
(princ "\n ERGEBNISTABELLE (L_GF = gesamt beider GF-Strecken)")
|
(princ (ssg-text "vfe-ergebnistabelle-header"))
|
||||||
(princ "\n=================================================================================")
|
(princ "\n=================================================================================")
|
||||||
(princ "\n Winkel L_GF (mm) L_VF (mm) Status")
|
(princ (ssg-text "vfe-tabelle-spalten"))
|
||||||
(princ "\n=================================================================================")
|
(princ "\n=================================================================================")
|
||||||
|
|
||||||
(setq best-winkel nil best-L_GF nil best-L_VF nil)
|
(setq best-winkel nil best-L_GF nil best-L_VF nil)
|
||||||
@@ -553,26 +550,25 @@
|
|||||||
gueltig (cadddr item))
|
gueltig (cadddr item))
|
||||||
(if (and (numberp L_GF) (numberp L_VF))
|
(if (and (numberp L_GF) (numberp L_VF))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n " (itoa winkel) (chr 176)
|
(princ (ssg-textf "vfe-tabelle-zeile"
|
||||||
" " (fmt L_GF) " mm " (fmt L_VF) " mm "))
|
(list (strcat (itoa winkel) (chr 176)) (fmt L_GF) (fmt L_VF))))
|
||||||
(if gueltig
|
(if gueltig
|
||||||
(progn
|
(progn
|
||||||
(princ "GUELTIG")
|
(princ (ssg-text "vfe-status-gueltig"))
|
||||||
(if (or (null best-winkel) (< winkel best-winkel))
|
(if (or (null best-winkel) (< winkel best-winkel))
|
||||||
(setq best-winkel winkel best-L_GF L_GF best-L_VF L_VF)
|
(setq best-winkel winkel best-L_GF L_GF best-L_VF L_VF)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ "UNGUELTIG (negative Laenge)")
|
(princ (ssg-text "vfe-status-ungueltig"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n " (itoa winkel) (chr 176)
|
(princ (ssg-textf "vfe-tabelle-zeile-fehler" (list (strcat (itoa winkel) (chr 176)))))
|
||||||
" --- --- FEHLER"))
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ "\n=================================================================================")
|
(princ "\n=================================================================================")
|
||||||
(if best-winkel
|
(if best-winkel
|
||||||
(princ (strcat "\n>>> Empfohlener Winkel: " (itoa best-winkel) (chr 176)))
|
(princ (ssg-textf "vfe-empfohlener-winkel" (list (strcat (itoa best-winkel) (chr 176)))))
|
||||||
(princ "\n>>> KEIN passender Winkel gefunden!")
|
(princ (ssg-text "vfe-kein-winkel-gefunden"))
|
||||||
)
|
)
|
||||||
(list best-winkel best-L_GF best-L_VF ergebnis-liste)
|
(list best-winkel best-L_GF best-L_VF ergebnis-liste)
|
||||||
)
|
)
|
||||||
@@ -592,8 +588,7 @@
|
|||||||
(setq etage-gef-dx etage-gef-dx-links)
|
(setq etage-gef-dx etage-gef-dx-links)
|
||||||
(setq etage-gef-dz etage-gef-dz-links))
|
(setq etage-gef-dz etage-gef-dz-links))
|
||||||
)
|
)
|
||||||
(princ (strcat "\n Gefaellebogen " seite
|
(princ (ssg-textf "vfe-gefaellebogen-seite-dx" (list seite (rtos etage-gef-dx 2 2))))
|
||||||
": dx=" (rtos etage-gef-dx 2 2) " mm"))
|
|
||||||
(berechne-winkel-etage deltaL deltaH richtung)
|
(berechne-winkel-etage deltaL deltaH richtung)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -602,9 +597,14 @@
|
|||||||
;; ============================================================
|
;; ============================================================
|
||||||
;; Gibt endpunkt zurueck.
|
;; Gibt endpunkt zurueck.
|
||||||
;; VF_*-Block-Erstellung erfolgt zentral im Dispatcher (vf_core.lsp).
|
;; VF_*-Block-Erstellung erfolgt zentral im Dispatcher (vf_core.lsp).
|
||||||
|
;; hz: Parameter fuer Registry-Kompatibilitaet mit variofoerderer-einfuegen
|
||||||
|
;; (siehe c:VarioFoerderer) - wird hier NICHT verwendet: die Etage-Anlage hat
|
||||||
|
;; bereits eine eigene, fest verdrahtete horizontale Geometrie (hz-anfang/
|
||||||
|
;; hz-ende fuer den 60-Grad-Uebereinander-Versatz) und unterstuetzt aktuell
|
||||||
|
;; keine zusaetzliche globale Fahrtrichtung.
|
||||||
(defun etage-foerderanlage-einfuegen (deltaL deltaH richtung
|
(defun etage-foerderanlage-einfuegen (deltaL deltaH richtung
|
||||||
best-winkel L_GF1 L_GF2 L_VF
|
best-winkel L_GF1 L_GF2 L_VF
|
||||||
startpunkt seite
|
startpunkt seite hz
|
||||||
/ aktueller-punkt bogen-name endpunkt
|
/ aktueller-punkt bogen-name endpunkt
|
||||||
bogen-mass bogen-dx bogen-dz
|
bogen-mass bogen-dx bogen-dz
|
||||||
as-block es-block gefaelle-blockname
|
as-block es-block gefaelle-blockname
|
||||||
@@ -629,43 +629,40 @@
|
|||||||
(if (not *etage-lib-initialized*) (init-bibliothek-etage))
|
(if (not *etage-lib-initialized*) (init-bibliothek-etage))
|
||||||
|
|
||||||
;; 1. AS_30
|
;; 1. AS_30
|
||||||
(princ (strcat "\n\n1/15: " as-block " (0 Grad)"))
|
(princ (ssg-textf "vfe-step1-as30" (list as-block)))
|
||||||
(setq aktueller-punkt (insert-block-by-ks as-block aktueller-punkt))
|
(setq aktueller-punkt (insert-block-by-ks as-block aktueller-punkt 0.0))
|
||||||
|
|
||||||
;; 2. Staustrecke 400mm (hz-anfang, 3 Grad vert, KS_EIN)
|
;; 2. Staustrecke 400mm (hz-anfang, 3 Grad vert, KS_EIN)
|
||||||
(princ (strcat "\n\n2/15: Staustrecke 400mm ("
|
(princ (ssg-textf "vfe-step2" (list (itoa hz-anfang))))
|
||||||
(itoa hz-anfang) " Grad hz, 3 Grad vert, KS_EIN)"))
|
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-hz-scaled-block-by-ks "Staustrecke_SP_1000_mm" aktueller-punkt
|
(insert-hz-scaled-block-by-ks "Staustrecke_SP_1000_mm" aktueller-punkt
|
||||||
400 hz-anfang 3))
|
400 hz-anfang 3))
|
||||||
|
|
||||||
;; 3. Separator (hz-anfang, 3 Grad vert)
|
;; 3. Separator (hz-anfang, 3 Grad vert)
|
||||||
(princ (strcat "\n\n3/15: Separator (300mm, "
|
(princ (ssg-textf "vfe-step3" (list (itoa hz-anfang))))
|
||||||
(itoa hz-anfang) " Grad hz, 3 Grad vert)"))
|
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-hz-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt
|
(insert-hz-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt
|
||||||
hz-anfang 3 300 0))
|
hz-anfang 3 300 0))
|
||||||
|
|
||||||
;; 4. Gefaellebogen Anfang (hz-anfang, 0 Grad vert, KS_EIN)
|
;; 4. Gefaellebogen Anfang (hz-anfang, 0 Grad vert, KS_EIN)
|
||||||
(princ (strcat "\n\n4/15: " gefaelle-blockname
|
(princ (ssg-textf "vfe-step4" (list gefaelle-blockname (itoa hz-anfang))))
|
||||||
" (Anfang, " (itoa hz-anfang) " Grad hz, 0 Grad vert, KS_EIN)"))
|
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-hz-rotated-block-by-ks gefaelle-blockname aktueller-punkt hz-anfang 0))
|
(insert-hz-rotated-block-by-ks gefaelle-blockname aktueller-punkt hz-anfang 0))
|
||||||
|
|
||||||
;; 5. L_GF1 (3 Grad geneigt)
|
;; 5. L_GF1 (3 Grad geneigt)
|
||||||
(if (> L_GF1 0.1)
|
(if (> L_GF1 0.1)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n\n5/15: Gefaellestrecke (3 Grad, L=" (rtos L_GF1 2 2) " mm)"))
|
(princ (ssg-textf "vfe-step5-strecke" (list (rtos L_GF1 2 2))))
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt L_GF1 3))
|
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt L_GF1 3 0.0))
|
||||||
)
|
)
|
||||||
(princ "\n\n5/15: L_GF1 (uebersprungen)")
|
(princ (ssg-text "vfe-step5-skip"))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 6. Umlenkstation (3 Grad geneigt)
|
;; 6. Umlenkstation (3 Grad geneigt)
|
||||||
(princ "\n\n6/15: Umlenkstation (500mm, 3 Grad geneigt)")
|
(princ (ssg-text "vfe-step6"))
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-rotated-block-with-ks "Vario_Umlenkstation_500mm" aktueller-punkt 3 500 0))
|
(insert-rotated-block-with-ks "Vario_Umlenkstation_500mm" aktueller-punkt 3 500 0 0.0))
|
||||||
|
|
||||||
;; 7. 1. Vertikalbogen (3 Grad geneigt)
|
;; 7. 1. Vertikalbogen (3 Grad geneigt)
|
||||||
(if (= richtung "Auf")
|
(if (= richtung "Auf")
|
||||||
@@ -679,31 +676,29 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
(setq bogen-dx (car bogen-mass) bogen-dz (caddr bogen-mass))
|
(setq bogen-dx (car bogen-mass) bogen-dz (caddr bogen-mass))
|
||||||
(princ (strcat "\n\n7/15: " bogen-name " (3 Grad geneigt)"))
|
(princ (ssg-textf "vfe-step7" (list bogen-name)))
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-rotated-block-with-ks bogen-name aktueller-punkt 3 bogen-dx bogen-dz))
|
(insert-rotated-block-with-ks bogen-name aktueller-punkt 3 bogen-dx bogen-dz 0.0))
|
||||||
|
|
||||||
;; 8. Variable Strecke L_VF
|
;; 8. Variable Strecke L_VF
|
||||||
(if (> L_VF 0.1)
|
(if (> L_VF 0.1)
|
||||||
(progn
|
(progn
|
||||||
(if (= richtung "Auf")
|
(if (= richtung "Auf")
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n\n8/15: Steigungsstrecke ("
|
(princ (ssg-textf "vfe-step8-auf" (list (itoa (- (- best-winkel 3))) (rtos L_VF 2 2))))
|
||||||
(itoa (- (- best-winkel 3))) " Grad, L=" (rtos L_VF 2 2) " mm)"))
|
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
||||||
L_VF (- (- best-winkel 3))))
|
L_VF (- (- best-winkel 3)) 0.0))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n\n8/15: Gefaellestrecke ("
|
(princ (ssg-textf "vfe-step8-ab" (list (itoa (+ best-winkel 3)) (rtos L_VF 2 2))))
|
||||||
(itoa (+ best-winkel 3)) " Grad, L=" (rtos L_VF 2 2) " mm)"))
|
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
||||||
L_VF (+ best-winkel 3)))
|
L_VF (+ best-winkel 3) 0.0))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ "\n\n8/15: L_VF (uebersprungen)")
|
(princ (ssg-text "vfe-step8-skip"))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 9. 2. Vertikalbogen
|
;; 9. 2. Vertikalbogen
|
||||||
@@ -724,35 +719,35 @@
|
|||||||
" (" (itoa (- 3 best-winkel)) " Grad geneigt)"))
|
" (" (itoa (- 3 best-winkel)) " Grad geneigt)"))
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-rotated-block-with-ks bogen-name aktueller-punkt
|
(insert-rotated-block-with-ks bogen-name aktueller-punkt
|
||||||
(- 3 best-winkel) bogen-dx bogen-dz))
|
(- 3 best-winkel) bogen-dx bogen-dz 0.0))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n\n9/15: " bogen-name
|
(princ (strcat "\n\n9/15: " bogen-name
|
||||||
" (" (itoa (+ best-winkel 3)) " Grad geneigt)"))
|
" (" (itoa (+ best-winkel 3)) " Grad geneigt)"))
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-rotated-block-with-ks bogen-name aktueller-punkt
|
(insert-rotated-block-with-ks bogen-name aktueller-punkt
|
||||||
(+ best-winkel 3) bogen-dx bogen-dz))
|
(+ best-winkel 3) bogen-dx bogen-dz 0.0))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 10. Motorstation (3 Grad geneigt)
|
;; 10. Motorstation (3 Grad geneigt)
|
||||||
(princ "\n\n10/15: Motorstation (500mm, 3 Grad geneigt)")
|
(princ "\n\n10/15: Motorstation (500mm, 3 Grad geneigt)")
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-rotated-block-with-ks "Vario_Motorstation_500mm" aktueller-punkt 3 500 0))
|
(insert-rotated-block-with-ks "Vario_Motorstation_500mm" aktueller-punkt 3 500 0 0.0))
|
||||||
|
|
||||||
;; 11. L_GF2 (3 Grad geneigt)
|
;; 11. L_GF2 (3 Grad geneigt)
|
||||||
(if (> L_GF2 0.1)
|
(if (> L_GF2 0.1)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n\n11/15: Gefaellestrecke (3 Grad, L=" (rtos L_GF2 2 2) " mm)"))
|
(princ (strcat "\n\n11/15: Gefaellestrecke (3 Grad, L=" (rtos L_GF2 2 2) " mm)"))
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt L_GF2 3))
|
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt L_GF2 3 0.0))
|
||||||
)
|
)
|
||||||
(princ "\n\n11/15: L_GF2 (uebersprungen)")
|
(princ "\n\n11/15: L_GF2 (uebersprungen)")
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 12. Gefaellebogen Ende (via KS_EIN, 0 Grad vert)
|
;; 12. Gefaellebogen Ende (via KS_EIN, 0 Grad vert)
|
||||||
(princ (strcat "\n\n12/15: " gefaelle-blockname " (Ende, KS_EIN)"))
|
(princ (strcat "\n\n12/15: " gefaelle-blockname " (Ende, KS_EIN)"))
|
||||||
(setq aktueller-punkt (insert-block-by-ks gefaelle-blockname aktueller-punkt))
|
(setq aktueller-punkt (insert-block-by-ks gefaelle-blockname aktueller-punkt 0.0))
|
||||||
|
|
||||||
;; 13. Separator Ende (hz-ende, 3 Grad vert)
|
;; 13. Separator Ende (hz-ende, 3 Grad vert)
|
||||||
(princ (strcat "\n\n13/15: Separator (300mm, "
|
(princ (strcat "\n\n13/15: Separator (300mm, "
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
+277
-124
@@ -21,7 +21,7 @@
|
|||||||
(if *vf-std-core-pfad*
|
(if *vf-std-core-pfad*
|
||||||
(load (strcat *vf-std-core-pfad* "/vf_core.lsp"))
|
(load (strcat *vf-std-core-pfad* "/vf_core.lsp"))
|
||||||
(progn
|
(progn
|
||||||
(princ "\n[vf_standard] WARNUNG: Lisp-Pfad nicht ermittelbar - vf_core.lsp nicht ladbar!")
|
(princ (ssg-text "vfs-warn-lisppfad"))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -77,10 +77,10 @@
|
|||||||
)
|
)
|
||||||
(if missing
|
(if missing
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n FEHLER: DXFM_BLOCKS = " block-pfad))
|
(princ (ssg-textf "vfs-block-fehler-pfad" (list block-pfad)))
|
||||||
(princ "\n Folgende Block-Dateien fehlen:")
|
(princ (ssg-text "vfs-block-fehlende-header"))
|
||||||
(foreach f (reverse missing)
|
(foreach f (reverse missing)
|
||||||
(princ (strcat "\n - " f))
|
(princ (ssg-textf "vfs-block-fehlende-item" (list f)))
|
||||||
)
|
)
|
||||||
nil
|
nil
|
||||||
)
|
)
|
||||||
@@ -95,9 +95,13 @@
|
|||||||
;; ============================================================
|
;; ============================================================
|
||||||
(defun init-bibliothek ( / temp-obj bogen-winkel ks-data ks-ein-pos ks-aus-pos
|
(defun init-bibliothek ( / temp-obj bogen-winkel ks-data ks-ein-pos ks-aus-pos
|
||||||
dx dy dz bogen-name)
|
dx dy dz bogen-name)
|
||||||
(if (and *lib-initialized* (tblsearch "BLOCK" "AS_Element_90_links"))
|
;; "bereits initialisiert" nur, wenn das Flag gesetzt UND die Bogen-Tabelle
|
||||||
|
;; tatsaechlich befuellt ist. Sonst (Stuck-State: Flag gesetzt, aber bogen-auf
|
||||||
|
;; leer - z.B. nach einer fehlgeschlagenen Extraktion) neu initialisieren.
|
||||||
|
(if (and *lib-initialized* bogen-auf bogen-ab
|
||||||
|
(tblsearch "BLOCK" "AS_Element_90_links"))
|
||||||
(progn
|
(progn
|
||||||
(princ "\n Standard-Bibliothek bereits initialisiert.")
|
(princ (ssg-text "vfs-lib-bereits-init"))
|
||||||
t
|
t
|
||||||
)
|
)
|
||||||
(if (not (vf-check-required-blocks))
|
(if (not (vf-check-required-blocks))
|
||||||
@@ -105,10 +109,10 @@
|
|||||||
(progn
|
(progn
|
||||||
(setq *lib-initialized* nil)
|
(setq *lib-initialized* nil)
|
||||||
(setq *ks-cache* nil)
|
(setq *ks-cache* nil)
|
||||||
(princ "\n Initialisiere Standard-Bibliothek...")
|
(princ (ssg-text "vfs-lib-init-start"))
|
||||||
|
|
||||||
;; AS_90 Masse extrahieren
|
;; AS_90 Masse extrahieren
|
||||||
(princ "\n Extrahiere AUS_Element Masse...")
|
(princ (ssg-text "vfs-extrahiere-aus"))
|
||||||
(ensure-block-loaded "AS_Element_90_links")
|
(ensure-block-loaded "AS_Element_90_links")
|
||||||
(ensure-block-loaded "AS_Element_90_rechts")
|
(ensure-block-loaded "AS_Element_90_rechts")
|
||||||
(if (tblsearch "BLOCK" "AS_Element_90_links")
|
(if (tblsearch "BLOCK" "AS_Element_90_links")
|
||||||
@@ -128,17 +132,16 @@
|
|||||||
(setq aus-dx (- (caar ks-aus-pos) (caar ks-ein-pos)))
|
(setq aus-dx (- (caar ks-aus-pos) (caar ks-ein-pos)))
|
||||||
(setq aus-dy (- (cadr (car ks-aus-pos)) (cadr (car ks-ein-pos))))
|
(setq aus-dy (- (cadr (car ks-aus-pos)) (cadr (car ks-ein-pos))))
|
||||||
(setq aus-dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
(setq aus-dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
||||||
(princ (strcat "\n AS_90: dx=" (rtos aus-dx 2 0)
|
(princ (ssg-textf "vfs-as90-mass" (list (rtos aus-dx 2 0) (rtos aus-dz 2 0))))
|
||||||
" dz=" (rtos aus-dz 2 0)))
|
|
||||||
)
|
)
|
||||||
(princ "\n FEHLER: KS_EIN/KS_AUS fehlt im AS_90!")
|
(princ (ssg-text "vfs-fehler-ks-as90"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ "\n FEHLER: Block AS_Element_90_links nicht geladen!")
|
(princ (ssg-text "vfs-fehler-block-as90"))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; ES_90 Masse extrahieren
|
;; ES_90 Masse extrahieren
|
||||||
(princ "\n Extrahiere EIN_Element Masse...")
|
(princ (ssg-text "vfs-extrahiere-ein"))
|
||||||
(ensure-block-loaded "ES_Element_90_links")
|
(ensure-block-loaded "ES_Element_90_links")
|
||||||
(ensure-block-loaded "ES_Element_90_rechts")
|
(ensure-block-loaded "ES_Element_90_rechts")
|
||||||
(if (tblsearch "BLOCK" "ES_Element_90_links")
|
(if (tblsearch "BLOCK" "ES_Element_90_links")
|
||||||
@@ -158,17 +161,16 @@
|
|||||||
(setq ein-dx (- (caar ks-aus-pos) (caar ks-ein-pos)))
|
(setq ein-dx (- (caar ks-aus-pos) (caar ks-ein-pos)))
|
||||||
(setq ein-dy (- (cadr (car ks-aus-pos)) (cadr (car ks-ein-pos))))
|
(setq ein-dy (- (cadr (car ks-aus-pos)) (cadr (car ks-ein-pos))))
|
||||||
(setq ein-dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
(setq ein-dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
||||||
(princ (strcat "\n ES_90: dx=" (rtos ein-dx 2 0)
|
(princ (ssg-textf "vfs-es90-mass" (list (rtos ein-dx 2 0) (rtos ein-dz 2 0))))
|
||||||
" dz=" (rtos ein-dz 2 0)))
|
|
||||||
)
|
)
|
||||||
(princ "\n FEHLER: KS_EIN/KS_AUS fehlt im ES_90!")
|
(princ (ssg-text "vfs-fehler-ks-es90"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ "\n FEHLER: Block ES_Element_90_links nicht geladen!")
|
(princ (ssg-text "vfs-fehler-block-es90"))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; Bogen-Masse extrahieren
|
;; Bogen-Masse extrahieren
|
||||||
(princ "\n Extrahiere Bogen-Masse...")
|
(princ (ssg-text "vfs-extrahiere-bogen"))
|
||||||
(setq bogen-auf '())
|
(setq bogen-auf '())
|
||||||
(setq bogen-ab '())
|
(setq bogen-ab '())
|
||||||
(setq bogen-winkel (ssg-cfg-or "vario" "bogen_winkel"
|
(setq bogen-winkel (ssg-cfg-or "vario" "bogen_winkel"
|
||||||
@@ -194,13 +196,12 @@
|
|||||||
(setq dy (- (cadr (car ks-aus-pos)) (cadr (car ks-ein-pos))))
|
(setq dy (- (cadr (car ks-aus-pos)) (cadr (car ks-ein-pos))))
|
||||||
(setq dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
(setq dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
||||||
(setq bogen-auf (cons (list w dx dy dz) bogen-auf))
|
(setq bogen-auf (cons (list w dx dy dz) bogen-auf))
|
||||||
(princ (strcat "\n OK auf_" (itoa w)
|
(princ (ssg-textf "vfs-bogen-auf-ok" (list (itoa w) (rtos dx 2 0) (rtos dz 2 0))))
|
||||||
": dx=" (rtos dx 2 0) " dz=" (rtos dz 2 0)))
|
|
||||||
)
|
)
|
||||||
(princ (strcat "\n FEHLER auf_" (itoa w) ": KS fehlt!"))
|
(princ (ssg-textf "vfs-bogen-auf-ks-fehlt" (list (itoa w))))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n FEHLER auf_" (itoa w) ": Block nicht geladen!"))
|
(princ (ssg-textf "vfs-bogen-auf-block-fehlt" (list (itoa w))))
|
||||||
)
|
)
|
||||||
;; Abwaertsbogen
|
;; Abwaertsbogen
|
||||||
(setq bogen-name (strcat "Vario_Bogen_ab_" (itoa w)))
|
(setq bogen-name (strcat "Vario_Bogen_ab_" (itoa w)))
|
||||||
@@ -222,19 +223,18 @@
|
|||||||
(setq dy (- (cadr (car ks-aus-pos)) (cadr (car ks-ein-pos))))
|
(setq dy (- (cadr (car ks-aus-pos)) (cadr (car ks-ein-pos))))
|
||||||
(setq dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
(setq dz (- (caddr (car ks-aus-pos)) (caddr (car ks-ein-pos))))
|
||||||
(setq bogen-ab (cons (list w dx dy dz) bogen-ab))
|
(setq bogen-ab (cons (list w dx dy dz) bogen-ab))
|
||||||
(princ (strcat "\n OK ab_" (itoa w)
|
(princ (ssg-textf "vfs-bogen-ab-ok" (list (itoa w) (rtos dx 2 0) (rtos dz 2 0))))
|
||||||
": dx=" (rtos dx 2 0) " dz=" (rtos dz 2 0)))
|
|
||||||
)
|
)
|
||||||
(princ (strcat "\n FEHLER ab_" (itoa w) ": KS fehlt!"))
|
(princ (ssg-textf "vfs-bogen-ab-ks-fehlt" (list (itoa w))))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n FEHLER ab_" (itoa w) ": Block nicht geladen!"))
|
(princ (ssg-textf "vfs-bogen-ab-block-fehlt" (list (itoa w))))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(setq bogen-auf (reverse bogen-auf))
|
(setq bogen-auf (reverse bogen-auf))
|
||||||
(setq bogen-ab (reverse bogen-ab))
|
(setq bogen-ab (reverse bogen-ab))
|
||||||
(setq *lib-initialized* t)
|
(setq *lib-initialized* t)
|
||||||
(princ "\n Standard-Bibliothek erfolgreich initialisiert.")
|
(princ (ssg-text "vfs-lib-init-erfolg"))
|
||||||
t
|
t
|
||||||
) ;; end progn (Initialisierung)
|
) ;; end progn (Initialisierung)
|
||||||
) ;; end (if not vf-check-required-blocks)
|
) ;; end (if not vf-check-required-blocks)
|
||||||
@@ -250,8 +250,7 @@
|
|||||||
(if (= (car item) winkel) (setq result (cdr item)))
|
(if (= (car item) winkel) (setq result (cdr item)))
|
||||||
)
|
)
|
||||||
(if (null result)
|
(if (null result)
|
||||||
(princ (strcat "\n FEHLER: Winkel " (itoa winkel)
|
(princ (ssg-textf "vfs-fehler-winkel-tabelle" (list (itoa winkel))))
|
||||||
" nicht in Bogen-Tabelle!"))
|
|
||||||
)
|
)
|
||||||
result
|
result
|
||||||
)
|
)
|
||||||
@@ -259,7 +258,10 @@
|
|||||||
;; ============================================================
|
;; ============================================================
|
||||||
;; TEIL 4: WINKELBERECHNUNG
|
;; TEIL 4: WINKELBERECHNUNG
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
(defun berechne-alle-winkel (deltaL deltaH richtung /
|
;; feste-hz: horizontales Budget der festen Elemente (Umlenk+Motor+Separatoren).
|
||||||
|
;; nil => Standardwert FESTE_HORIZONTAL (1600, Standard-VF mit 2 Separatoren).
|
||||||
|
;; Der Linienzug uebergibt 1300 (nur 1 Separator am Einlauf, siehe vf_linienzug).
|
||||||
|
(defun berechne-alle-winkel (deltaL deltaH richtung feste-hz /
|
||||||
winkel-list ergebnis-liste A B cos3 sin3
|
winkel-list ergebnis-liste A B cos3 sin3
|
||||||
bogen-x1 bogen-z1 bogen-x2 bogen-z2
|
bogen-x1 bogen-z1 bogen-x2 bogen-z2
|
||||||
abs-dz-AUS abs-dz-EIN L_GF L_VF cosα sinα
|
abs-dz-AUS abs-dz-EIN L_GF L_VF cosα sinα
|
||||||
@@ -269,10 +271,11 @@
|
|||||||
|
|
||||||
(if (or (not *lib-initialized*) (null aus-dz) (null ein-dz))
|
(if (or (not *lib-initialized*) (null aus-dz) (null ein-dz))
|
||||||
(progn
|
(progn
|
||||||
(princ "\n FEHLER: Bibliothek nicht korrekt initialisiert (AUS/EIN-Masse fehlen)!")
|
(princ (ssg-text "vfs-fehler-lib-nicht-init"))
|
||||||
(exit)
|
(exit)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
(if (null feste-hz) (setq feste-hz FESTE_HORIZONTAL))
|
||||||
|
|
||||||
(setq abs-dz-AUS (abs aus-dz) abs-dz-EIN (abs ein-dz))
|
(setq abs-dz-AUS (abs aus-dz) abs-dz-EIN (abs ein-dz))
|
||||||
(setq winkel-list (ssg-cfg-or "vario" "bogen_winkel"
|
(setq winkel-list (ssg-cfg-or "vario" "bogen_winkel"
|
||||||
@@ -282,11 +285,10 @@
|
|||||||
sin3 (sin (* (ssg-cfg-or "vario" "gefaelle_winkel" 3) (/ pi 180.0))))
|
sin3 (sin (* (ssg-cfg-or "vario" "gefaelle_winkel" 3) (/ pi 180.0))))
|
||||||
|
|
||||||
(princ "\n\n=========================================")
|
(princ "\n\n=========================================")
|
||||||
(princ "\n BERECHNUNG FUER ALLE WINKEL (Standard)")
|
(princ (ssg-text "vfs-berechnung-header"))
|
||||||
(princ "\n=========================================")
|
(princ "\n=========================================")
|
||||||
(princ (strcat "\n△L=" (rtos deltaL 2 2) " mm"
|
(princ (ssg-textf "vfs-berechnung-parameter"
|
||||||
" △H=" (rtos deltaH 2 2) " mm"
|
(list (rtos deltaL 2 2) (rtos deltaH 2 2) richtung)))
|
||||||
" Richtung=" richtung))
|
|
||||||
|
|
||||||
(foreach winkel winkel-list
|
(foreach winkel winkel-list
|
||||||
(if (= richtung "Auf")
|
(if (= richtung "Auf")
|
||||||
@@ -312,16 +314,16 @@
|
|||||||
(setq cosα (cos (* winkel (/ pi 180.0)))
|
(setq cosα (cos (* winkel (/ pi 180.0)))
|
||||||
sinα (sin (* winkel (/ pi 180.0))))
|
sinα (sin (* winkel (/ pi 180.0))))
|
||||||
(setq A (- deltaL aus-dx ein-dx bogen-x1 bogen-x2
|
(setq A (- deltaL aus-dx ein-dx bogen-x1 bogen-x2
|
||||||
(* FESTE_HORIZONTAL cos3)))
|
(* feste-hz cos3)))
|
||||||
(setq winkel-eff (if (= richtung "Auf") (- winkel 3) (+ winkel 3)))
|
(setq winkel-eff (if (= richtung "Auf") (- winkel 3) (+ winkel 3)))
|
||||||
(setq cosEff (cos (* winkel-eff (/ pi 180.0)))
|
(setq cosEff (cos (* winkel-eff (/ pi 180.0)))
|
||||||
sinEff (sin (* winkel-eff (/ pi 180.0))))
|
sinEff (sin (* winkel-eff (/ pi 180.0))))
|
||||||
(if (= richtung "Auf")
|
(if (= richtung "Auf")
|
||||||
(setq B (+ deltaH abs-dz-AUS abs-dz-EIN
|
(setq B (+ deltaH abs-dz-AUS abs-dz-EIN
|
||||||
(- bogen-z1) (- bogen-z2)
|
(- bogen-z1) (- bogen-z2)
|
||||||
(* FESTE_HORIZONTAL sin3)))
|
(* feste-hz sin3)))
|
||||||
(setq B (+ (- deltaH abs-dz-AUS abs-dz-EIN
|
(setq B (+ (- deltaH abs-dz-AUS abs-dz-EIN
|
||||||
(* FESTE_HORIZONTAL sin3))
|
(* feste-hz sin3))
|
||||||
bogen-z1 bogen-z2))
|
bogen-z1 bogen-z2))
|
||||||
)
|
)
|
||||||
(if (> (abs sinα) 0.0001)
|
(if (> (abs sinα) 0.0001)
|
||||||
@@ -349,9 +351,9 @@
|
|||||||
(setq ergebnis-liste (reverse ergebnis-liste))
|
(setq ergebnis-liste (reverse ergebnis-liste))
|
||||||
|
|
||||||
(princ "\n\n=================================================================================")
|
(princ "\n\n=================================================================================")
|
||||||
(princ "\n ERGEBNISTABELLE")
|
(princ (ssg-text "vfs-ergebnistabelle-header"))
|
||||||
(princ "\n=================================================================================")
|
(princ "\n=================================================================================")
|
||||||
(princ "\n Winkel L_GF (mm) L_VF (mm) Status")
|
(princ (ssg-text "vfs-tabelle-spalten"))
|
||||||
(princ "\n=================================================================================")
|
(princ "\n=================================================================================")
|
||||||
|
|
||||||
(setq best-winkel nil best-L_GF nil best-L_VF nil)
|
(setq best-winkel nil best-L_GF nil best-L_VF nil)
|
||||||
@@ -359,40 +361,89 @@
|
|||||||
(setq winkel (car item) L_GF (cadr item) L_VF (caddr item) gueltig (cadddr item))
|
(setq winkel (car item) L_GF (cadr item) L_VF (caddr item) gueltig (cadddr item))
|
||||||
(if (and (numberp L_GF) (numberp L_VF))
|
(if (and (numberp L_GF) (numberp L_VF))
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n " (itoa winkel) (chr 176)
|
(princ (ssg-textf "vfs-tabelle-zeile"
|
||||||
" " (fmt L_GF) " mm " (fmt L_VF) " mm "))
|
(list (itoa winkel) (chr 176) (fmt L_GF) (fmt L_VF))))
|
||||||
(if gueltig
|
(if gueltig
|
||||||
(progn
|
(progn
|
||||||
(princ "GUELTIG")
|
(princ (ssg-text "vfs-status-gueltig"))
|
||||||
(if (or (null best-winkel) (< winkel best-winkel))
|
(if (or (null best-winkel) (< winkel best-winkel))
|
||||||
(setq best-winkel winkel best-L_GF L_GF best-L_VF L_VF)
|
(setq best-winkel winkel best-L_GF L_GF best-L_VF L_VF)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ "UNGUELTIG (negative Laenge)")
|
(princ (ssg-text "vfs-status-ungueltig"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ (strcat "\n " (itoa winkel) (chr 176)
|
(princ (ssg-textf "vfs-tabelle-zeile-fehler" (list (itoa winkel) (chr 176))))
|
||||||
" --- --- FEHLER"))
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(princ "\n=================================================================================")
|
(princ "\n=================================================================================")
|
||||||
(if best-winkel
|
(if best-winkel
|
||||||
(princ (strcat "\n>>> Empfohlener Winkel: " (itoa best-winkel) (chr 176)))
|
(princ (ssg-textf "vfs-empfohlener-winkel" (list (itoa best-winkel) (chr 176))))
|
||||||
(princ "\n>>> KEIN passender Winkel gefunden!")
|
(princ (ssg-text "vfs-kein-winkel-gefunden"))
|
||||||
)
|
)
|
||||||
(list best-winkel best-L_GF best-L_VF ergebnis-liste)
|
(list best-winkel best-L_GF best-L_VF ergebnis-liste)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
;; Prueft/berechnet die Variante mit HORIZONTALER Zwischenstrecke (Schritt
|
||||||
|
;; 6/11 bei 0 Grad statt geneigt). Die beiden Vertikalboegen sind dabei
|
||||||
|
;; IMMER auf 3 Grad fixiert (Vario_Bogen_auf_3 / Vario_Bogen_ab_3), weil sie
|
||||||
|
;; nur zwischen der festen 3-Grad-Neigung von Umlenk-/Motorstation und der
|
||||||
|
;; horizontalen Mitte vermitteln muessen - unabhaengig von Auf/Ab.
|
||||||
|
;; WICHTIG (geometrische Konsequenz): GF1+GF2 (an AS/ES-Seite, ebenfalls
|
||||||
|
;; fest bei 3 Grad geneigt) sind die einzige nennenswerte Quelle fuer
|
||||||
|
;; Hoehenaenderung, da sich die beiden Boegen gegenseitig fast vollstaendig
|
||||||
|
;; kompensieren. Die feste 3-Grad-Neigung wirkt IMMER absenkend:
|
||||||
|
;; - "Ab": passt zur gewuenschten Absenkung -> deltaH praktisch beliebig
|
||||||
|
;; erreichbar (im Rahmen von deltaL), GF1+GF2 werden einfach laenger.
|
||||||
|
;; - "Auf": wirkt der gewuenschten Steigung entgegen -> nur fuer SEHR
|
||||||
|
;; KLEINE deltaH ueberhaupt gueltig (wenige cm).
|
||||||
|
;; Rueckgabe: (GF_total L_VF gueltig) oder nil falls Boegen nicht messbar.
|
||||||
|
(defun berechne-horizontale-mitte (deltaL deltaH richtung /
|
||||||
|
mass1 mass2 rad3 bogen-x1 bogen-z1
|
||||||
|
bogen-x2 bogen-z2 deltaH-signiert
|
||||||
|
A-hz B-hz GF_total L_VF-hz gueltig)
|
||||||
|
(setq mass1 (get-bogen-mass bogen-auf 3))
|
||||||
|
(setq mass2 (get-bogen-mass bogen-ab 3))
|
||||||
|
(if (or (null mass1) (null mass2))
|
||||||
|
nil
|
||||||
|
(progn
|
||||||
|
(setq rad3 (* 3.0 (/ pi 180.0)))
|
||||||
|
;; Bogen1 (immer auf_3): Eintritt bei 3 Grad (von Umlenkstation), biegt auf 0 Grad
|
||||||
|
(setq bogen-x1 (+ (* (car mass1) (cos rad3)) (* (caddr mass1) (sin rad3))))
|
||||||
|
(setq bogen-z1 (+ (* (- (car mass1)) (sin rad3)) (* (caddr mass1) (cos rad3))))
|
||||||
|
;; Bogen2 (immer ab_3): Eintritt bei 0 Grad (von der horizontalen Mitte), biegt auf 3 Grad
|
||||||
|
(setq bogen-x2 (car mass2))
|
||||||
|
(setq bogen-z2 (caddr mass2))
|
||||||
|
;; Signierte Ziel-Hoehenaenderung: Auf=+deltaH, Ab=-deltaH
|
||||||
|
(setq deltaH-signiert (if (= richtung "Auf") deltaH (- deltaH)))
|
||||||
|
;; Horizontal-Budget: deltaL minus AS/ES minus beide Boegen minus feste Stationen (bei 3 Grad)
|
||||||
|
(setq A-hz (- deltaL aus-dx ein-dx bogen-x1 bogen-x2
|
||||||
|
(* FESTE_HORIZONTAL (cos rad3))))
|
||||||
|
;; Hoehen-Budget: was GF1+GF2 (bei 3 Grad) noch beitragen muessen
|
||||||
|
(setq B-hz (- (+ aus-dz ein-dz (- (* FESTE_HORIZONTAL (sin rad3)))
|
||||||
|
bogen-z1 bogen-z2)
|
||||||
|
deltaH-signiert))
|
||||||
|
(setq GF_total (/ B-hz (sin rad3)))
|
||||||
|
(setq L_VF-hz (- A-hz (* GF_total (cos rad3))))
|
||||||
|
(setq gueltig (and (>= GF_total 0) (>= L_VF-hz 0)))
|
||||||
|
(list GF_total L_VF-hz gueltig)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
;; TEIL 5: BERECHNE-WRAPPER (Schnittstelle fuer Registry)
|
;; TEIL 5: BERECHNE-WRAPPER (Schnittstelle fuer Registry)
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
;; Initialisiert Standard-Bibliothek und berechnet Winkel.
|
;; Initialisiert Standard-Bibliothek und berechnet Winkel.
|
||||||
;; seite-Parameter wird fuer Standard-Typ nicht benoetigt (keine Vorab-Geometrie).
|
;; seite-Parameter wird fuer Standard-Typ nicht benoetigt (keine Vorab-Geometrie).
|
||||||
|
;; Die Machbarkeitspruefung fuer die horizontale Zwischenstrecke passiert
|
||||||
|
;; separat und VORAB in c:VarioFoerderer (vor der Foerderrichtung-Abfrage),
|
||||||
|
;; deshalb liefert diese Funktion nur noch die normale Winkelsuche zurueck.
|
||||||
(defun berechne-standard (deltaL deltaH richtung seite)
|
(defun berechne-standard (deltaL deltaH richtung seite)
|
||||||
(setq FESTE_HORIZONTAL (ssg-cfg-or "vario" "feste_horizontal" 1600))
|
(setq FESTE_HORIZONTAL (ssg-cfg-or "vario" "feste_horizontal" 1600))
|
||||||
(setq staustrecke-basis (ssg-cfg-or "vario" "staustrecke_basis" 1000))
|
(setq staustrecke-basis (ssg-cfg-or "vario" "staustrecke_basis" 1000))
|
||||||
(init-bibliothek)
|
(init-bibliothek)
|
||||||
(berechne-alle-winkel deltaL deltaH richtung)
|
(berechne-alle-winkel deltaL deltaH richtung nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
@@ -400,81 +451,121 @@
|
|||||||
;; ============================================================
|
;; ============================================================
|
||||||
;; Gibt endpunkt zurueck (letzter KS_AUS nach ES_90).
|
;; Gibt endpunkt zurueck (letzter KS_AUS nach ES_90).
|
||||||
;; VF_*-Block-Erstellung erfolgt zentral im Dispatcher (vf_core.lsp).
|
;; VF_*-Block-Erstellung erfolgt zentral im Dispatcher (vf_core.lsp).
|
||||||
(defun variofoerderer-einfuegen (deltaL deltaH richtung best-winkel
|
;; hz: horizontale Fahrtrichtung in Grad (0=Ost/+X, 90=Nord/+Y, 180=West/-X,
|
||||||
L_GF1 L_GF2 L_VF startpunkt seite
|
;; 270=Sued/-Y). Default 0, falls vom Aufrufer nicht mitgegeben (Etage-
|
||||||
/ aktueller-punkt bogen-name endpunkt
|
;; Registry-Kompatibilitaet - siehe c:VarioFoerderer).
|
||||||
bogen-mass bogen-dx bogen-dz
|
;; --- Teil 1/3: AS-Element (Kettenanfang) ---
|
||||||
as-block es-block)
|
;; Eigenstaendig, damit vf-linienzug (Gemischte GF/VF-Kette) ein VF-Segment
|
||||||
(setq aktueller-punkt startpunkt)
|
;; auch OHNE eigenes AS/ES mitten in der Kette einfuegen kann (vfs-mitte-teil
|
||||||
|
;; alleine), waehrend ein normaler Standard-VarioFoerderer weiterhin alle 3
|
||||||
|
;; Teile nacheinander durchlaeuft (siehe variofoerderer-einfuegen unten).
|
||||||
|
(defun vfs-as-teil (startpunkt seite hz / as-block)
|
||||||
|
(if (null hz) (setq hz 0.0))
|
||||||
|
(setq hz (float hz))
|
||||||
(setq as-block (strcat "AS_Element_90_" seite))
|
(setq as-block (strcat "AS_Element_90_" seite))
|
||||||
(setq es-block (strcat "ES_Element_90_" seite))
|
|
||||||
(if (not *lib-initialized*) (init-bibliothek))
|
(if (not *lib-initialized*) (init-bibliothek))
|
||||||
|
(princ (ssg-textf "vfs-schritt-as" (list as-block (rtos hz 2 1) grad-zeichen)))
|
||||||
|
(insert-block-by-ks as-block startpunkt hz)
|
||||||
|
)
|
||||||
|
|
||||||
;; 1. AUS_Element
|
;; --- Teil 2a: VF-Eingang (GF1 + Separator + Umlenkstation) ---
|
||||||
(princ (strcat "\n\n1/11: " as-block " (0 Grad)"))
|
;; Beginnt eine reine VF-Einheit: bringt die Kette von der (3-Grad-geneigten)
|
||||||
(setq aktueller-punkt (insert-block-by-ks as-block aktueller-punkt))
|
;; AS-Seite ueber GF1 + Separator bis zur Umlenkstation. Wird pro VF-Einheit
|
||||||
|
;; GENAU EINMAL aufgerufen (auch wenn danach mehrere Sub-Segmente folgen).
|
||||||
;; 2. 1. Gefaellestrecke
|
(defun vfs-vf-entry (aktueller-punkt L_GF1 hz)
|
||||||
|
(if (null hz) (setq hz 0.0))
|
||||||
|
(setq hz (float hz))
|
||||||
|
;; 1. Gefaellestrecke GF1 (verbindet AS-Neigung mit Umlenkstation)
|
||||||
(if (> L_GF1 0.1)
|
(if (> L_GF1 0.1)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n\n2/11: Gefaellestrecke (3 Grad, L=" (rtos L_GF1 2 2) " mm)"))
|
(princ (ssg-textf "vfs-vf-eingang-gf1" (list (rtos L_GF1 2 2))))
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
||||||
L_GF1 (ssg-cfg-or "vario" "gefaelle_winkel" 3)))
|
L_GF1 (ssg-cfg-or "vario" "gefaelle_winkel" 3) hz))
|
||||||
)
|
)
|
||||||
(princ "\n\n2/11: (uebersprungen)")
|
(princ (ssg-text "vfs-vf-eingang-gf1-skip"))
|
||||||
)
|
)
|
||||||
|
;; 2. Separator (am GF1-Ende / vor Umlenkstation)
|
||||||
;; 3. Separator
|
(princ (ssg-text "vfs-vf-eingang-separator"))
|
||||||
(princ "\n\n3/11: Separator (300 mm, 3 Grad geneigt)")
|
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt
|
(insert-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt
|
||||||
(ssg-cfg-or "vario" "gefaelle_winkel" 3)
|
(ssg-cfg-or "vario" "gefaelle_winkel" 3)
|
||||||
(ssg-cfg-or "vario" "separator_block_dx" 300)
|
(ssg-cfg-or "vario" "separator_block_dx" 300)
|
||||||
(ssg-cfg-or "vario" "separator_block_dz" 0)))
|
(ssg-cfg-or "vario" "separator_block_dz" 0) hz))
|
||||||
|
;; 3. Umlenkstation
|
||||||
;; 4. Umlenkstation
|
(princ (ssg-text "vfs-vf-eingang-umlenk"))
|
||||||
(princ "\n\n4/11: Umlenkstation (500 mm, 3 Grad geneigt)")
|
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-rotated-block-with-ks "Vario_Umlenkstation_500mm" aktueller-punkt
|
(insert-rotated-block-with-ks "Vario_Umlenkstation_500mm" aktueller-punkt
|
||||||
(ssg-cfg-or "vario" "gefaelle_winkel" 3)
|
(ssg-cfg-or "vario" "gefaelle_winkel" 3)
|
||||||
(ssg-cfg-or "vario" "station_block_dx" 500)
|
(ssg-cfg-or "vario" "station_block_dx" 500)
|
||||||
(ssg-cfg-or "vario" "station_block_dz" 0)))
|
(ssg-cfg-or "vario" "station_block_dz" 0) hz))
|
||||||
|
aktueller-punkt
|
||||||
|
)
|
||||||
|
|
||||||
|
;; --- Teil 2b: VF-Koerper (Vertikalbogen + L_VF + Vertikalbogen) ---
|
||||||
|
;; EIN reines VF-Sub-Segment. Wichtig: es BEGINNT und ENDET auf der
|
||||||
|
;; 3-Grad-Basisneigung, weil Ein- und Ausgangsbogen denselben Winkel haben.
|
||||||
|
;; Dadurch lassen sich mehrere Sub-Segmente (und Vario-Kurven dazwischen)
|
||||||
|
;; beliebig aneinanderreihen (siehe doc/VarioFoerderer_Linienzug_Prinzipien.md).
|
||||||
|
;; best-winkel=0 => horizontales Sub-Segment (Boegen fest auf_3/ab_3).
|
||||||
|
(defun vfs-vf-koerper (aktueller-punkt richtung best-winkel L_VF hz /
|
||||||
|
bogen-name bogen-mass bogen-dx bogen-dz)
|
||||||
|
(if (null hz) (setq hz 0.0))
|
||||||
|
(setq hz (float hz))
|
||||||
|
|
||||||
;; 5. 1. Vertikalbogen
|
;; 5. 1. Vertikalbogen
|
||||||
(if (= richtung "Auf")
|
;; Sonderfall best-winkel=0 (horizontale Zwischenstrecke, siehe
|
||||||
|
;; berechne-horizontale-mitte): Boegen IMMER auf_3/ab_3, unabhaengig von
|
||||||
|
;; Auf/Ab, da sie nur zwischen der festen 3-Grad-Neigung und der
|
||||||
|
;; horizontalen Mitte vermitteln muessen.
|
||||||
|
(if (= best-winkel 0)
|
||||||
(progn
|
(progn
|
||||||
(setq bogen-name (strcat "Vario_Bogen_auf_" (itoa best-winkel)))
|
(setq bogen-name "Vario_Bogen_auf_3")
|
||||||
(setq bogen-mass (get-bogen-mass bogen-auf best-winkel))
|
(setq bogen-mass (get-bogen-mass bogen-auf 3))
|
||||||
)
|
)
|
||||||
(progn
|
(if (= richtung "Auf")
|
||||||
(setq bogen-name (strcat "Vario_Bogen_ab_" (itoa best-winkel)))
|
(progn
|
||||||
(setq bogen-mass (get-bogen-mass bogen-ab best-winkel))
|
(setq bogen-name (strcat "Vario_Bogen_auf_" (itoa best-winkel)))
|
||||||
|
(setq bogen-mass (get-bogen-mass bogen-auf best-winkel))
|
||||||
|
)
|
||||||
|
(progn
|
||||||
|
(setq bogen-name (strcat "Vario_Bogen_ab_" (itoa best-winkel)))
|
||||||
|
(setq bogen-mass (get-bogen-mass bogen-ab best-winkel))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(setq bogen-dx (car bogen-mass) bogen-dz (caddr bogen-mass))
|
(setq bogen-dx (car bogen-mass) bogen-dz (caddr bogen-mass))
|
||||||
(princ (strcat "\n\n5/11: " bogen-name " (3 Grad geneigt)"))
|
(princ (ssg-textf "vfs-schritt5-bogen1" (list bogen-name)))
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-rotated-block-with-ks bogen-name aktueller-punkt
|
(insert-rotated-block-with-ks bogen-name aktueller-punkt
|
||||||
(ssg-cfg-or "vario" "gefaelle_winkel" 3) bogen-dx bogen-dz))
|
(ssg-cfg-or "vario" "gefaelle_winkel" 3) bogen-dx bogen-dz hz))
|
||||||
|
|
||||||
;; 6. Variable Strecke L_VF
|
;; 6. Variable Strecke L_VF
|
||||||
(if (> L_VF 0.1)
|
(if (> L_VF 0.1)
|
||||||
(progn
|
(progn
|
||||||
(if (= richtung "Auf")
|
(if (= best-winkel 0)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n\n6/11: Steigungsstrecke ("
|
(princ (strcat "\n\n6/11: Horizontale Zwischenstrecke (0 Grad, L="
|
||||||
(itoa (- (- best-winkel 3))) " Grad, L=" (rtos L_VF 2 2) " mm)"))
|
(rtos L_VF 2 2) " mm)"))
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
||||||
L_VF (- (- best-winkel 3))))
|
L_VF 0 hz))
|
||||||
)
|
)
|
||||||
(progn
|
(if (= richtung "Auf")
|
||||||
(princ (strcat "\n\n6/11: Gefaellestrecke ("
|
(progn
|
||||||
(itoa (+ best-winkel 3)) " Grad, L=" (rtos L_VF 2 2) " mm)"))
|
(princ (strcat "\n\n6/11: Steigungsstrecke ("
|
||||||
(setq aktueller-punkt
|
(itoa (- (- best-winkel 3))) " Grad, L=" (rtos L_VF 2 2) " mm)"))
|
||||||
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
(setq aktueller-punkt
|
||||||
L_VF (+ best-winkel 3)))
|
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
||||||
|
L_VF (- (- best-winkel 3)) hz))
|
||||||
|
)
|
||||||
|
(progn
|
||||||
|
(princ (strcat "\n\n6/11: Gefaellestrecke ("
|
||||||
|
(itoa (+ best-winkel 3)) " Grad, L=" (rtos L_VF 2 2) " mm)"))
|
||||||
|
(setq aktueller-punkt
|
||||||
|
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
||||||
|
L_VF (+ best-winkel 3) hz))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -482,64 +573,126 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
;; 7. 2. Vertikalbogen
|
;; 7. 2. Vertikalbogen
|
||||||
(if (= richtung "Auf")
|
(if (= best-winkel 0)
|
||||||
(progn
|
(progn
|
||||||
(setq bogen-name (strcat "Vario_Bogen_ab_" (itoa best-winkel)))
|
(setq bogen-name "Vario_Bogen_ab_3")
|
||||||
(setq bogen-mass (get-bogen-mass bogen-ab best-winkel))
|
(setq bogen-mass (get-bogen-mass bogen-ab 3))
|
||||||
)
|
)
|
||||||
(progn
|
(if (= richtung "Auf")
|
||||||
(setq bogen-name (strcat "Vario_Bogen_auf_" (itoa best-winkel)))
|
(progn
|
||||||
(setq bogen-mass (get-bogen-mass bogen-auf best-winkel))
|
(setq bogen-name (strcat "Vario_Bogen_ab_" (itoa best-winkel)))
|
||||||
|
(setq bogen-mass (get-bogen-mass bogen-ab best-winkel))
|
||||||
|
)
|
||||||
|
(progn
|
||||||
|
(setq bogen-name (strcat "Vario_Bogen_auf_" (itoa best-winkel)))
|
||||||
|
(setq bogen-mass (get-bogen-mass bogen-auf best-winkel))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(setq bogen-dx (car bogen-mass) bogen-dz (caddr bogen-mass))
|
(setq bogen-dx (car bogen-mass) bogen-dz (caddr bogen-mass))
|
||||||
(if (= richtung "Auf")
|
(if (= best-winkel 0)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n\n7/11: " bogen-name
|
(princ (strcat "\n\n7/11: " bogen-name " (3 Grad geneigt)"))
|
||||||
" (" (itoa (- 3 best-winkel)) " Grad geneigt)"))
|
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-rotated-block-with-ks bogen-name aktueller-punkt
|
(insert-rotated-block-with-ks bogen-name aktueller-punkt
|
||||||
(- 3 best-winkel) bogen-dx bogen-dz))
|
0 bogen-dx bogen-dz hz))
|
||||||
)
|
)
|
||||||
(progn
|
(if (= richtung "Auf")
|
||||||
(princ (strcat "\n\n7/11: " bogen-name
|
(progn
|
||||||
" (" (itoa (+ best-winkel 3)) " Grad geneigt)"))
|
(princ (strcat "\n\n7/11: " bogen-name
|
||||||
(setq aktueller-punkt
|
" (" (itoa (- 3 best-winkel)) " Grad geneigt)"))
|
||||||
(insert-rotated-block-with-ks bogen-name aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(+ best-winkel 3) bogen-dx bogen-dz))
|
(insert-rotated-block-with-ks bogen-name aktueller-punkt
|
||||||
|
(- 3 best-winkel) bogen-dx bogen-dz hz))
|
||||||
|
)
|
||||||
|
(progn
|
||||||
|
(princ (strcat "\n\n7/11: " bogen-name
|
||||||
|
" (" (itoa (+ best-winkel 3)) " Grad geneigt)"))
|
||||||
|
(setq aktueller-punkt
|
||||||
|
(insert-rotated-block-with-ks bogen-name aktueller-punkt
|
||||||
|
(+ best-winkel 3) bogen-dx bogen-dz hz))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; 8. Motorstation
|
aktueller-punkt
|
||||||
(princ "\n\n8/11: Motorstation (500 mm, 3 Grad geneigt)")
|
)
|
||||||
|
|
||||||
|
;; --- Teil 2c: VF-Ausgang (Motorstation [+ GF2] [+ Separator]) ---
|
||||||
|
;; Schliesst eine reine VF-Einheit mit der Motorstation.
|
||||||
|
;; L_GF2 > 0.1 => GF2 (3 Grad) wird angehaengt (verbindet Motorstation
|
||||||
|
;; mit der Auslauf-Neigung).
|
||||||
|
;; mit-separator T => Separator (300 mm) am Ende (Standard-VF: vor ES).
|
||||||
|
;; Standard-VF: L_GF2 = L_GF/2, mit-separator = t.
|
||||||
|
;; Linienzug: Separator wird NICHT hier gebaut (er sitzt erst vor dem ES bzw.
|
||||||
|
;; optional zwischen Foerderern) -> mit-separator = nil; GF2 je nach Wahl.
|
||||||
|
(defun vfs-vf-exit (aktueller-punkt L_GF2 hz mit-separator)
|
||||||
|
(if (null hz) (setq hz 0.0))
|
||||||
|
(setq hz (float hz))
|
||||||
|
;; Motorstation
|
||||||
|
(princ "\n\n[VF-Ausgang] Motorstation (500 mm, 3 Grad geneigt)")
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-rotated-block-with-ks "Vario_Motorstation_500mm" aktueller-punkt
|
(insert-rotated-block-with-ks "Vario_Motorstation_500mm" aktueller-punkt
|
||||||
(ssg-cfg-or "vario" "gefaelle_winkel" 3)
|
(ssg-cfg-or "vario" "gefaelle_winkel" 3)
|
||||||
(ssg-cfg-or "vario" "station_block_dx" 500)
|
(ssg-cfg-or "vario" "station_block_dx" 500)
|
||||||
(ssg-cfg-or "vario" "station_block_dz" 0)))
|
(ssg-cfg-or "vario" "station_block_dz" 0) hz))
|
||||||
|
;; GF2 (optional, verbindet Motorstation mit der Auslauf-Neigung)
|
||||||
;; 9. 2. Gefaellestrecke
|
|
||||||
(if (> L_GF2 0.1)
|
(if (> L_GF2 0.1)
|
||||||
(progn
|
(progn
|
||||||
(princ (strcat "\n\n9/11: Gefaellestrecke (3 Grad, L=" (rtos L_GF2 2 2) " mm)"))
|
(princ (strcat "\n[VF-Ausgang] Gefaellestrecke GF2 (3 Grad, L=" (rtos L_GF2 2 2) " mm)"))
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt
|
||||||
L_GF2 (ssg-cfg-or "vario" "gefaelle_winkel" 3)))
|
L_GF2 (ssg-cfg-or "vario" "gefaelle_winkel" 3) hz))
|
||||||
)
|
)
|
||||||
(princ "\n\n9/11: (uebersprungen)")
|
(princ "\n[VF-Ausgang] GF2 (kein / uebersprungen)")
|
||||||
)
|
)
|
||||||
|
;; Separator (optional, nur Standard-VF)
|
||||||
|
(if mit-separator
|
||||||
|
(progn
|
||||||
|
(princ "\n[VF-Ausgang] Separator (300 mm, 3 Grad geneigt)")
|
||||||
|
(setq aktueller-punkt
|
||||||
|
(insert-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt
|
||||||
|
(ssg-cfg-or "vario" "gefaelle_winkel" 3)
|
||||||
|
(ssg-cfg-or "vario" "separator_block_dx" 300)
|
||||||
|
(ssg-cfg-or "vario" "separator_block_dz" 0) hz))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
aktueller-punkt
|
||||||
|
)
|
||||||
|
|
||||||
;; 10. Separator 2
|
;; --- Teil 2 (Zusammensetzung): Kettenmitte fuer den Standard-VF ---
|
||||||
(princ "\n\n10/11: Separator (300 mm, 3 Grad geneigt)")
|
;; Entry + EIN Koerper + Exit. Verhalten identisch zur bisherigen Fassung.
|
||||||
|
(defun vfs-mitte-teil (aktueller-punkt richtung best-winkel L_GF1 L_GF2 L_VF hz)
|
||||||
|
(if (null hz) (setq hz 0.0))
|
||||||
|
(setq hz (float hz))
|
||||||
|
(setq aktueller-punkt (vfs-vf-entry aktueller-punkt L_GF1 hz))
|
||||||
|
(setq aktueller-punkt (vfs-vf-koerper aktueller-punkt richtung best-winkel L_VF hz))
|
||||||
|
(setq aktueller-punkt (vfs-vf-exit aktueller-punkt L_GF2 hz t))
|
||||||
|
aktueller-punkt
|
||||||
|
)
|
||||||
|
|
||||||
|
;; --- Teil 3/3: ES-Element (Kettenende) ---
|
||||||
|
(defun vfs-es-teil (aktueller-punkt seite hz / es-block)
|
||||||
|
(if (null hz) (setq hz 0.0))
|
||||||
|
(setq hz (float hz))
|
||||||
|
(setq es-block (strcat "ES_Element_90_" seite))
|
||||||
|
(princ (strcat "\n\n11/11: " es-block " (hz=" (rtos hz 2 1) grad-zeichen ")"))
|
||||||
|
(insert-block-by-ks es-block aktueller-punkt hz)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; --- Zusammensetzung: kompletter Standard-VarioFoerderer ---
|
||||||
|
;; Reine Verkettung von Teil 1+2+3, Verhalten identisch zur bisherigen
|
||||||
|
;; monolithischen Fassung. deltaL/deltaH werden hier nicht gebraucht (Teil
|
||||||
|
;; der einfuege-fn-Schnittstelle der Typ-Registry, siehe vf-typ-registrieren).
|
||||||
|
(defun variofoerderer-einfuegen (deltaL deltaH richtung best-winkel
|
||||||
|
L_GF1 L_GF2 L_VF startpunkt seite hz
|
||||||
|
/ aktueller-punkt endpunkt)
|
||||||
|
(if (null hz) (setq hz 0.0))
|
||||||
|
(setq hz (float hz))
|
||||||
|
(setq aktueller-punkt (vfs-as-teil startpunkt seite hz))
|
||||||
(setq aktueller-punkt
|
(setq aktueller-punkt
|
||||||
(insert-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt
|
(vfs-mitte-teil aktueller-punkt richtung best-winkel L_GF1 L_GF2 L_VF hz))
|
||||||
(ssg-cfg-or "vario" "gefaelle_winkel" 3)
|
(setq endpunkt (vfs-es-teil aktueller-punkt seite hz))
|
||||||
(ssg-cfg-or "vario" "separator_block_dx" 300)
|
|
||||||
(ssg-cfg-or "vario" "separator_block_dz" 0)))
|
|
||||||
|
|
||||||
;; 11. EIN_Element
|
|
||||||
(princ (strcat "\n\n11/11: " es-block " (0 Grad)"))
|
|
||||||
(setq endpunkt (insert-block-by-ks es-block aktueller-punkt))
|
|
||||||
|
|
||||||
(princ "\n\n=========================================")
|
(princ "\n\n=========================================")
|
||||||
(princ "\n>>> Standard VarioFoerderer eingefuegt!")
|
(princ "\n>>> Standard VarioFoerderer eingefuegt!")
|
||||||
|
|||||||
@@ -59,6 +59,9 @@ SSG_LIB
|
|||||||
│ │ ├── Antriebst. rechts → OMNI_TEF_AntriebR
|
│ │ ├── Antriebst. rechts → OMNI_TEF_AntriebR
|
||||||
│ │ └── TEF Gerade → OMNI_TEF_Gerade
|
│ │ └── TEF Gerade → OMNI_TEF_Gerade
|
||||||
│ └── KettenFoerderer → OMNI_KettenFoerderer
|
│ └── KettenFoerderer → OMNI_KettenFoerderer
|
||||||
|
├── Konfiguration
|
||||||
|
│ ├── Umschalten 2D und 3D → SSG_DIM_SWITCH
|
||||||
|
│ └── Sprache → SSG_SPRACHE
|
||||||
└── External
|
└── External
|
||||||
├── Call Python → CALLPYTHON
|
├── Call Python → CALLPYTHON
|
||||||
├── Export Sivas → EXPORTSIVAS
|
├── Export Sivas → EXPORTSIVAS
|
||||||
@@ -127,6 +130,13 @@ Unterstuetzte Bogenwinkel: 3, 9, 12, 15, 24, 36, 48 Grad
|
|||||||
| `SSG-LayerOnAll` | Alle ausgeschalteten Layer einschalten |
|
| `SSG-LayerOnAll` | Alle ausgeschalteten Layer einschalten |
|
||||||
| `SSG-LayerDelete` | Layer und alle Objekte darauf loeschen (mit Bestaetigung) |
|
| `SSG-LayerDelete` | Layer und alle Objekte darauf loeschen (mit Bestaetigung) |
|
||||||
|
|
||||||
|
### SSG_LIB_Commands.lsp - Konfiguration
|
||||||
|
|
||||||
|
| Befehl | Beschreibung |
|
||||||
|
| --- | --- |
|
||||||
|
| `SSG_DIM_SWITCH` | Schaltet zwischen 2D- und 3D-Bloecken um |
|
||||||
|
| `SSG_SPRACHE` | Sprache umschalten (Deutsch/Englisch), persistiert ueber `DXFM_LANG` |
|
||||||
|
|
||||||
### tests.lsp - Export und Python-Integration
|
### tests.lsp - Export und Python-Integration
|
||||||
|
|
||||||
| Befehl | Beschreibung |
|
| Befehl | Beschreibung |
|
||||||
@@ -140,6 +150,7 @@ Unterstuetzte Bogenwinkel: 3, 9, 12, 15, 24, 36, 48 Grad
|
|||||||
| Datei | Beschreibung |
|
| Datei | Beschreibung |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `ssg_core.lsp` | Kernel: Umgebung, Layer-Ops, Block-Ops, Attribut-Ops, Fehlerbehandlung |
|
| `ssg_core.lsp` | Kernel: Umgebung, Layer-Ops, Block-Ops, Attribut-Ops, Fehlerbehandlung |
|
||||||
|
| `ssg_lang.lsp` | Sprachumschaltung Deutsch/Englisch (`ssg-text`, `ssg-textf`, `*ssg-lang*`) |
|
||||||
| `ssg_dialog.lsp` | Dialog-Vorlagen: Slide-Preview, Modul-Dialog, Block-Einfuegesequenz |
|
| `ssg_dialog.lsp` | Dialog-Vorlagen: Slide-Preview, Modul-Dialog, Block-Einfuegesequenz |
|
||||||
| `ssg_layer.lsp` | Layer-Verwaltungsbefehle |
|
| `ssg_layer.lsp` | Layer-Verwaltungsbefehle |
|
||||||
| `ssg_load.lsp` | Loader: Laedt alle SSG-Bibliotheken in korrekter Reihenfolge |
|
| `ssg_load.lsp` | Loader: Laedt alle SSG-Bibliotheken in korrekter Reihenfolge |
|
||||||
@@ -180,6 +191,7 @@ dxfmakros/
|
|||||||
| `DXFM_CFG` | Konfigurationsdateien |
|
| `DXFM_CFG` | Konfigurationsdateien |
|
||||||
| `DXFM_TESTS` | Testverzeichnis |
|
| `DXFM_TESTS` | Testverzeichnis |
|
||||||
| `DXFM_DATA` | Datenverzeichnis |
|
| `DXFM_DATA` | Datenverzeichnis |
|
||||||
|
| `DXFM_LANG` | Aktive Sprache (`de_DE`/`en_GB`), persistiert von `SSG_SPRACHE`; Default `de_DE` |
|
||||||
| `BRICSCAD` | Pfad zur BricsCAD-Executable |
|
| `BRICSCAD` | Pfad zur BricsCAD-Executable |
|
||||||
|
|
||||||
## Einrichtung
|
## Einrichtung
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ REM Pfade fuer verschiedene Komponenten
|
|||||||
set "DXFM_BIN=%DXFMAKRO%\bin"
|
set "DXFM_BIN=%DXFMAKRO%\bin"
|
||||||
set "DXFM_LIB=%DXFMAKRO%\lib"
|
set "DXFM_LIB=%DXFMAKRO%\lib"
|
||||||
set "DXFM_DATA=%DXFMAKRO%\data"
|
set "DXFM_DATA=%DXFMAKRO%\data"
|
||||||
|
set "DXFM_LANG=%DXFMAKRO%\lang"
|
||||||
set "DXFM_TESTS=%DXFMAKRO%\tests"
|
set "DXFM_TESTS=%DXFMAKRO%\tests"
|
||||||
set "DXFM_TESTDATA=%DXFM_TESTS%\testdata"
|
set "DXFM_TESTDATA=%DXFM_TESTS%\testdata"
|
||||||
set "DXFM_TESTOUT=%DXFM_TESTS%\output"
|
set "DXFM_TESTOUT=%DXFM_TESTS%\output"
|
||||||
@@ -60,6 +61,7 @@ if not exist "%DXFM_BIN%" mkdir "%DXFM_BIN%"
|
|||||||
if not exist "%DXFM_CFG%" mkdir "%DXFM_CFG%"
|
if not exist "%DXFM_CFG%" mkdir "%DXFM_CFG%"
|
||||||
if not exist "%DXFM_LIB%" mkdir "%DXFM_LIB%"
|
if not exist "%DXFM_LIB%" mkdir "%DXFM_LIB%"
|
||||||
if not exist "%DXFM_DATA%" mkdir "%DXFM_DATA%"
|
if not exist "%DXFM_DATA%" mkdir "%DXFM_DATA%"
|
||||||
|
if not exist "%DXFM_LANG%" mkdir "%DXFM_LANG%"
|
||||||
if not exist "%DXFM_BLOCKS%" mkdir "%DXFM_BLOCKS%"
|
if not exist "%DXFM_BLOCKS%" mkdir "%DXFM_BLOCKS%"
|
||||||
if not exist "%DXFM_OMNIFLO%" mkdir "%DXFM_OMNIFLO%"
|
if not exist "%DXFM_OMNIFLO%" mkdir "%DXFM_OMNIFLO%"
|
||||||
if not exist "%DXFM_LISP%" mkdir "%DXFM_LISP%"
|
if not exist "%DXFM_LISP%" mkdir "%DXFM_LISP%"
|
||||||
@@ -77,6 +79,7 @@ if /i "%1"=="--persist" (
|
|||||||
setx DXFMAKRO "%DXFMAKRO%" >nul
|
setx DXFMAKRO "%DXFMAKRO%" >nul
|
||||||
setx DXFM_LISP "%DXFM_LISP%" >nul
|
setx DXFM_LISP "%DXFM_LISP%" >nul
|
||||||
setx DXFM_DATA "%DXFM_DATA%" >nul
|
setx DXFM_DATA "%DXFM_DATA%" >nul
|
||||||
|
setx DXFM_LANG "%DXFM_LANG%" >nul
|
||||||
setx DXFM_DCL "%DXFM_DCL%" >nul
|
setx DXFM_DCL "%DXFM_DCL%" >nul
|
||||||
setx DXFM_CFG "%DXFM_CFG%" >nul
|
setx DXFM_CFG "%DXFM_CFG%" >nul
|
||||||
setx DXFM_LOG "%DXFM_LOG%" >nul
|
setx DXFM_LOG "%DXFM_LOG%" >nul
|
||||||
|
|||||||
+31
-2
@@ -32,9 +32,31 @@ weiche_45 = "A-2"
|
|||||||
# Weichenbatterien / Parallel (KurvenWinkel=0)
|
# Weichenbatterien / Parallel (KurvenWinkel=0)
|
||||||
weichenbatterie = "A-2"
|
weichenbatterie = "A-2"
|
||||||
# Weichenkombinationen (Deltaweiche, Sternweiche, Dreifachweiche)
|
# Weichenkombinationen (Deltaweiche, Sternweiche, Dreifachweiche)
|
||||||
weichenkombination = "L-2"
|
weichenkombination = "A-2"
|
||||||
# Weichenkoerper (KurvenWinkel=22.5)
|
# Weichenkoerper (KurvenWinkel=22.5)
|
||||||
weichenkoerper = "L-2"
|
weichenkoerper = "A-2"
|
||||||
|
# Kreuzungsweichen (800, 300) - Layer L für Stahlstrecke (alt)
|
||||||
|
kreuzungsweiche = "L-2"
|
||||||
|
|
||||||
|
# PNEUMATISCH GESCHALTET
|
||||||
|
# Weichen pneumatisch 90 Grad (Einzelweiche/Doppelweiche/Dreiwegeweiche, KurvenWinkel=90)
|
||||||
|
weiche_pn_90 = "A-3"
|
||||||
|
# Weichen 45 Grad (Einzelweiche/Doppelweiche/Dreiwegeweiche, KurvenWinkel=45)
|
||||||
|
weiche_pn_45 = "A-3"
|
||||||
|
# Weichenbatterien / Parallel (KurvenWinkel=0)
|
||||||
|
weichenbatterie_pn = "A-3"
|
||||||
|
# Weichenkombinationen (Deltaweiche, Sternweiche, Dreifachweiche)
|
||||||
|
weichenkombination_pn = "A-3"
|
||||||
|
# Weichenkoerper (KurvenWinkel=22.5)
|
||||||
|
weichenkoerper_pn = "A-3"
|
||||||
|
# Kreuzungsweichen (300) - Layer L für Stahlstrecke (alt)
|
||||||
|
kreuzungsweiche_pn = "L-3"
|
||||||
|
|
||||||
|
# TEF Förderer
|
||||||
|
TEF_gerade = "F-1"
|
||||||
|
TEF_bogen = "F-1"
|
||||||
|
TEF_antriebstation = "F-1"
|
||||||
|
TEF_umlenkspannstation = "F-1"
|
||||||
|
|
||||||
[bogen]
|
[bogen]
|
||||||
BESCHR = ProfilTyp
|
BESCHR = ProfilTyp
|
||||||
@@ -74,3 +96,10 @@ LAYER = "A-2"
|
|||||||
HOEHE = ""
|
HOEHE = ""
|
||||||
DREHUNG = ""
|
DREHUNG = ""
|
||||||
|
|
||||||
|
|
||||||
|
[container]
|
||||||
|
0_BG071090 = 0_B10071, 0_B10090, 0_B10090
|
||||||
|
0_BG080090 = 0_B10080, 0_B10090,
|
||||||
|
0_BG081090 = 0_B10081, 0_B10090,
|
||||||
|
0_BG090090 = 0_B10090, 0_B10090,
|
||||||
|
0_BG190090 = 0_B10090, 0_B10090
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user