# 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.