136 lines
6.2 KiB
Markdown
136 lines
6.2 KiB
Markdown
# Lisp – AutoLISP-Standardbibliotheken
|
||
|
||
Allgemeingültige AutoLISP-Routinen für AutoCAD, destilliert aus den historischen ACADSST-Makros (Schönenberger Systeme GmbH). Die drei `ssg_`-Bibliotheken sind projektunabhängig einsetzbar.
|
||
|
||
---
|
||
|
||
## Ladereihenfolge
|
||
|
||
```lisp
|
||
(load "pfad/ssg_load.lsp") ; lädt core → dialog → layer
|
||
```
|
||
|
||
Oder einzeln (Abhängigkeit beachten: `ssg_dialog` und `ssg_layer` setzen `ssg_core` voraus):
|
||
|
||
```lisp
|
||
(load "pfad/ssg_core.lsp")
|
||
(load "pfad/ssg_dialog.lsp")
|
||
(load "pfad/ssg_layer.lsp")
|
||
```
|
||
|
||
---
|
||
|
||
## Dateien
|
||
|
||
### `ssg_core.lsp` – Kernbibliothek
|
||
|
||
Grundfunktionen für Umgebungssicherung, Benutzerinteraktion, Layer, Blöcke und Attribute.
|
||
|
||
| Funktion | Beschreibung |
|
||
|---|---|
|
||
| `ssg-start titel vars` | Systemvariablen sichern, CMDECHO aus, Undo-Gruppe öffnen |
|
||
| `ssg-end` | Systemvariablen wiederherstellen, Undo-Gruppe schließen |
|
||
| `ssg-errhan em` | Fehlerhandler – räumt auf und ruft `ssg-end` auf |
|
||
| `ssg-ques text defa` | Ja/Nein-Abfrage; `defa=T` → Default Ja, `nil` → Default Nein |
|
||
| `ssg-emsg text` | Fehlermeldung mit optionalem Signalton (`ssg-bell`) |
|
||
| `ssg-get-layer text` | Layer eines angeklickten Objektes ermitteln |
|
||
| `ssg-layer-ss name typ` | Auswahlsatz aller Objekte eines Layers (optional nach Typ filtern) |
|
||
| `ssg-make-layer name farbe aktiv` | Layer anlegen (falls nicht vorhanden) und optional aktivieren |
|
||
| `ssg-ss-foreach ss func` | Iteration über Auswahlsatz – `func` wird für jeden Entity-Name aufgerufen |
|
||
| `ssg-ss-redraw ss modus` | Alle Elemente eines Auswahlsatzes hervorheben (3), invertieren (4) oder normal (0) |
|
||
| `ssg-ss-add src dest` | Auswahlsatz `src` zu `dest` hinzufügen (in-place, mit Highlight) |
|
||
| `ssg-make-blockname pt` | Eindeutigen Blocknamen aus Einfügepunkt + Zeitstempel erzeugen |
|
||
| `ssg-insert-block layer farbe pfad pt xs ys rot` | Layer anlegen und Block einfügen |
|
||
| `ssg-make-block pt rotation ss` | Auswahlsatz als Block definieren und gleich einfügen; Name aus `ssg-make-blockname` |
|
||
| `ssg-attrib-set tag wert ersetzen` | Ein Attribut der letzten Einfügung setzen oder anfügen |
|
||
| `ssg-attrib-set-many alist` | Mehrere Attribute auf einmal setzen (`'(("TAG" . "Wert") ...)`) |
|
||
| `ssg-attrib-by-handle handle tag wert ersetzen` | Attribut eines Blocks anhand seines Entity-Handles suchen und ändern |
|
||
| `ssg-dialog-run dcl id init-fn accept-fn` | Generischer DCL-Dialog: laden, initialisieren, starten, entladen |
|
||
| `ssg-zoom-save` | Aktuelle View-Größe merken |
|
||
| `ssg-zoom-restore` | Auf gemerkte View-Größe zurückschalten (nur wenn verändert) |
|
||
|
||
---
|
||
|
||
### `ssg_dialog.lsp` – Dialog-Pattern für Modul-Einfüge-Makros
|
||
|
||
Kapselt das wiederkehrende DCL-Muster: Dialog mit Vorschaubild, Radio-Auswahl, Block einfügen, Attribute setzen.
|
||
|
||
| Funktion | Beschreibung |
|
||
|---|---|
|
||
| `ssg-dia-show-slide tile lib name` | Vorschau-Slide im image-Tile aktualisieren (Bibliothek + Slide-Name) |
|
||
| `ssg-dia-update-preview tile idx lib liste` | Vorschau anhand Index-String aus Radio-/List-Tile aktualisieren |
|
||
| `ssg-modul-dialog dcl id sel-tile start-val prev-tile lib slides extra-init extra-read` | Vollständiger Modul-Dialog: lädt DCL, setzt Tiles, verknüpft Vorschau, liefert gewählten Index zurück |
|
||
| `ssg-insert-modul layer farbe pfad attribs rotation` | Standardsequenz: Layer anlegen → Punkt abfragen → Block einfügen → Attribute setzen |
|
||
|
||
Die Datei enthält außerdem ein auskommentiertes **Template** für neue `c:BEFEHL`-Definitionen nach dem SSG-Muster.
|
||
|
||
---
|
||
|
||
### `ssg_layer.lsp` – Interaktive Layer-Verwaltung
|
||
|
||
Benutzerfreundliche AutoCAD-Befehle für Layer-Operationen. Alle Befehle sichern die Umgebung über `ssg-start`/`ssg-end`.
|
||
|
||
**Hilfsfunktionen (intern):**
|
||
|
||
| Funktion | Beschreibung |
|
||
|---|---|
|
||
| `ssg-layer-list-all` | Alle Layernamen als Liste |
|
||
| `ssg-layer-info-all` | Alle Layer als Assoziationslisten (Name, Farbe, Linientyp, Flags) |
|
||
| `ssg-layer-visible-p name` | Sichtbarkeitsstatus prüfen (T = sichtbar) |
|
||
| `ssg-layer-safe-p name gruppe` | Prüfen ob Layer ausgeschaltet werden darf (nicht aktiver Layer) |
|
||
| `ssg-layer-group name` | Gruppen-Kennung aus Layernahme extrahieren (Position 2–3) |
|
||
| `ssg-layer-rename-group name neu` | Neuen Layernamen mit geänderter Gruppen-Kennung berechnen |
|
||
| `ssg-layer-group-move alt neu` | Alle Objekte einer Layergruppe auf neue Gruppen-Kennung verschieben |
|
||
|
||
**AutoCAD-Befehle:**
|
||
|
||
| Befehl | Beschreibung |
|
||
|---|---|
|
||
| `c:SSG-LayerSet` | Layer des angeklickten Objektes als aktiven Layer setzen |
|
||
| `c:SSG-LayerInfo` | Layer des angeklickten Objektes anzeigen |
|
||
| `c:SSG-LayerMove` | Auswahlsatz auf Layer eines anderen Objektes verschieben |
|
||
| `c:SSG-LayerCopy` | Auswahlsatz kopieren und Kopie auf Ziel-Layer legen |
|
||
| `c:SSG-LayerMoveType` | Alle Objekte des gleichen Typs auf dem gleichen Layer verschieben |
|
||
| `c:SSG-LayerOff` | Layer durch Anklicken ausschalten (Schleife bis Enter) |
|
||
| `c:SSG-LayerFreeze` | Layer durch Anklicken einfrieren (Schleife bis Enter) |
|
||
| `c:SSG-FreezeAll` | Alle Layer außer einem einfrieren |
|
||
| `c:SSG-ThawAll` | Alle Layer auftauen |
|
||
| `c:SSG-LayerOnAll` | Alle ausgeschalteten Layer einschalten |
|
||
| `c:SSG-LayerDelete` | Layer mit Sicherheitsabfrage löschen (Objekte + Layer) |
|
||
|
||
---
|
||
|
||
### `ssg_load.lsp` – Laderoutine
|
||
|
||
Lädt alle drei Bibliotheken in der richtigen Reihenfolge. Ermittelt den Pfad automatisch über `findfile`.
|
||
|
||
---
|
||
|
||
### `SSG_LIB_Commands.lsp` – Dummy-Befehle für das SSG-Menü
|
||
|
||
Platzhalter-Definitionen für alle Menüeinträge des SSG-Menüsystems (ILS-Module, Kurven, Gefällestrecken). Gibt beim Aufruf eine Meldung aus. Wird durch echte Implementierungen ersetzt sobald die jeweiligen Blöcke und DCL-Dialoge vorliegen.
|
||
|
||
---
|
||
|
||
### `ILSModulInsert.lsp` – ILS Kreisel-Modul-Einfügung
|
||
|
||
Einfügen von ILS-Kreisel-Modulen mit Abstand- und Typ-Konfiguration (mit/ohne PIN). Enthält Smart-Connect-Logik für automatische Positionierung. Befehl: `c:KreiselInsert`.
|
||
|
||
---
|
||
|
||
### `OmniModulInsert.lsp` – Omni-Modul-Einfügung
|
||
|
||
Einfügen von Omni-Modulen. Befehl analog zu `ILSModulInsert`.
|
||
|
||
---
|
||
|
||
### `VarioFoerderer.lsp` – Vario-Förderer
|
||
|
||
Umfangreiche Routinen für den Vario-Förderer (Strecken, Kurven, Sonderelemente). Größte Einzeldatei im Projekt.
|
||
|
||
---
|
||
|
||
### `tests.lsp` – Testskript
|
||
|
||
Manuelle Tests für die Bibliotheksfunktionen. Nicht für den Produktiveinsatz laden.
|