Der SSG_LIB-Start gab ~50 Zeilen aus (mehrzeilige >>> ...geladen <<<-Banner mit Befehlslisten/Block-Pfaden, ===-Trenner, Core-Modul-Auflistung, VarioFoerderer- Typenliste). Fuer einen einfachen _QNEW-Start zu viel Rauschen. Gekuerzt (nur die dicksten Bloecke, je Modul bleibt EINE knappe Zeile; Fehler/Warnungen ALLE unveraendert erhalten): - Kern-Module (ssg_core/dbg/dialog/layer/id): reine "X geladen"-Zeilen entfernt. - Feature-Module: KreiselInsert/Gefaellestrecke/VarioFoerderer je auf eine ">>> X geladen"-Zeile; Befehlslisten, Modus-/Typen-Aufzaehlungen, Block-Pfade und ===-Trenner raus. VF-Submodule (vf_konstanten/standard/etage/linienzug/ spec) Lade-Banner ganz entfernt (der Sammel-Header deckt sie ab). - SSG_LIB_Commands "Dummy-Befehle registriert" entfernt. - menu/SSG_LIB.mnl: ===-Trenner + Core-Auflistung raus; die doppelte "Einfuege-Modus 3D"-Zeile entfernt (S:STARTUP gibt sie ohnehin einmal aus). Behalten (informativ / diagnostisch): [CFG] Config geladen: N Sektionen, [LANG] N Texte geladen, alle FEHLER/WARNUNG-Zeilen, die Abschlusszeilen "Alle Module geladen. Menue aktiv." + "Einfuege-Modus: 3D". Reine Ausgabe-Reduktion, keine Logik geaendert. 243/243 LISP-Unit-Tests gruen; alle Module laden fehlerfrei (Klammerbalance gegen HEAD unveraendert). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
165 lines
5.9 KiB
Common Lisp
165 lines
5.9 KiB
Common Lisp
;; ============================================================
|
|
;; SSG_DIALOG.LSP - Standard-Pattern fuer Modul-Einfuege-Dialoge
|
|
;; Kapselt das wiederkehrende Muster aus den ACADSST-Makros:
|
|
;; - DCL-Dialog mit Vorschaubild
|
|
;; - Radio-/List-Auswahl -> Blockname + Parameter setzen
|
|
;; - Block einfuegen + Attribute befuellen
|
|
;;
|
|
;; Setzt ssg_core.lsp voraus.
|
|
;; Ursprung: ILS2100/*.lsp, HFS/hfs_mod.lsp (Schoenenberger)
|
|
;; Bereinigt und verallgemeinert: 2025
|
|
;; ============================================================
|
|
|
|
|
|
;; ------------------------------------------------------------
|
|
;; VORSCHAU-BILD im Dialog aktualisieren
|
|
;; tile-name = Name des image-Tiles im DCL (z.B. "anzeige")
|
|
;; slide-lib = Pfad zur .slb-Datei ohne Erweiterung (z.B. "m:/acadsst/ils2100")
|
|
;; slide-name = Name des Slides in der Bibliothek
|
|
;; Hintergrundfarbe -18 = AutoCAD-Grafik-Hintergrund
|
|
;; ------------------------------------------------------------
|
|
(defun ssg-dia-show-slide (tile-name slide-lib slide-name / breite hoehe)
|
|
(setq breite (dimx_tile tile-name)
|
|
hoehe (dimy_tile tile-name)
|
|
)
|
|
(start_image tile-name)
|
|
(fill_image 0 0 breite hoehe (ssg-cfg-or "infrastruktur" "dialog_preview_bg_color" -18))
|
|
(slide_image 0 0 breite hoehe (strcat slide-lib "(" slide-name ")"))
|
|
(end_image)
|
|
)
|
|
|
|
;; Vorschau mit Index-basierter Auswahl aktualisieren
|
|
;; tile-name = image-Tile-Name
|
|
;; idx-str = aktueller Auswahlindex als String (wie get_tile liefert)
|
|
;; slide-lib = Pfad zur Slide-Bibliothek
|
|
;; slide-list = Liste der Slide-Namen, Index entspricht dem Radio-Index
|
|
(defun ssg-dia-update-preview (tile-name idx-str slide-lib slide-list / idx)
|
|
(setq idx (atoi idx-str))
|
|
(if (and (>= idx 0) (< idx (length slide-list)))
|
|
(ssg-dia-show-slide tile-name slide-lib (nth idx slide-list))
|
|
)
|
|
)
|
|
|
|
|
|
;; ------------------------------------------------------------
|
|
;; GENERISCHER MODUL-DIALOG
|
|
;; Vereinfacht das haeufige Muster:
|
|
;; 1. DCL laden, Tiles initialisieren
|
|
;; 2. ACTION_TILE fuer Auswahl-Tile (aktualisiert Vorschau)
|
|
;; 3. accept/cancel
|
|
;; 4. Rueckgabe: ausgewaehlter Index oder nil bei Abbruch
|
|
;;
|
|
;; dcl-pfad = vollstaendiger Pfad zur .dcl-Datei
|
|
;; dialog-id = Name des Dialogs in der .dcl
|
|
;; select-tile= Name des List/Radio-Tiles fuer die Auswahl
|
|
;; start-val = Start-Auswahl als String (z.B. "0")
|
|
;; preview-tile= Name des image-Tiles (nil = kein Vorschaubild)
|
|
;; slide-lib = Pfad der Slide-Bibliothek (nil = kein Vorschaubild)
|
|
;; slide-list = Liste der Slide-Namen entsprechend Auswahl-Index
|
|
;; extra-init = Funktion fuer weitere Tile-Initialisierungen (nil = keine)
|
|
;; extra-read = Funktion zum Auslesen weiterer Tiles bei accept (nil = keine)
|
|
;; ------------------------------------------------------------
|
|
(defun ssg-modul-dialog (dcl-pfad dialog-id select-tile start-val
|
|
preview-tile slide-lib slide-list
|
|
extra-init extra-read
|
|
/ dat ergebnis aktuell)
|
|
(setq dat (load_dialog dcl-pfad)
|
|
aktuell start-val
|
|
)
|
|
(if (not (new_dialog dialog-id dat))
|
|
(progn (alert (ssg-text "dialog-nicht-verfuegbar")) (exit))
|
|
)
|
|
(set_tile select-tile start-val)
|
|
(if (and preview-tile slide-lib slide-list)
|
|
(ssg-dia-update-preview preview-tile start-val slide-lib slide-list)
|
|
)
|
|
(if extra-init (extra-init))
|
|
(action_tile select-tile
|
|
(strcat
|
|
"(setq aktuell (get_tile \"" select-tile "\"))"
|
|
(if (and preview-tile slide-lib slide-list)
|
|
(strcat "(ssg-dia-update-preview \"" preview-tile "\" aktuell \""
|
|
slide-lib "\" slide-list)")
|
|
""
|
|
)
|
|
)
|
|
)
|
|
(action_tile "accept"
|
|
(strcat
|
|
"(setq ergebnis aktuell)"
|
|
(if extra-read "(extra-read)" "")
|
|
"(done_dialog 1)"
|
|
)
|
|
)
|
|
(action_tile "cancel" "(done_dialog 0)")
|
|
(start_dialog)
|
|
(unload_dialog dat)
|
|
ergebnis
|
|
)
|
|
|
|
|
|
;; ------------------------------------------------------------
|
|
;; BLOCK-MODUL EINFUEGEN - Standardsequenz
|
|
;; Kapselt das immer gleiche Muster:
|
|
;; 1. Layer anlegen
|
|
;; 2. Einfuegepunkt abfragen
|
|
;; 3. Block-Kennung (eindeutiger Name) erstellen
|
|
;; 4. Block einfuegen (mit Winkel-Abfrage oder fest)
|
|
;; 5. Attribute setzen
|
|
;;
|
|
;; lay-name = Ziel-Layer
|
|
;; lay-color = Layerfarbe als String
|
|
;; blk-pfad = vollstaendiger Blockpfad (Laufwerk + Verzeichnis + Dateiname)
|
|
;; attrib-alist= Assoziationsliste der Attribute '(("TAG" . "Wert") ...)
|
|
;; rotation = Drehwinkel als String oder pause fuer Benutzerabfrage
|
|
;; Rueckgabe = Einfuegepunkt
|
|
;; ------------------------------------------------------------
|
|
(defun ssg-insert-modul (lay-name lay-color blk-pfad attrib-alist rotation / pt)
|
|
(ssg-make-layer lay-name lay-color T)
|
|
(setq pt (getpoint (ssg-text "dialog-einfuegepunkt-waehlen")))
|
|
(command "_insert" blk-pfad pt "" "" rotation)
|
|
(if attrib-alist
|
|
(ssg-attrib-set-many attrib-alist)
|
|
)
|
|
pt
|
|
)
|
|
|
|
|
|
;; ------------------------------------------------------------
|
|
;; HAUPT-MAKRO TEMPLATE
|
|
;; Vorlage fuer c:BEFEHL-Definitionen nach dem SSG-Muster.
|
|
;; Kopieren und anpassen.
|
|
;;
|
|
;; Beispiel-Aufruf eines konkreten Moduls (nicht ausfuehren):
|
|
;;
|
|
;; (defun c:MEIN_MODUL ( / pt ergebnis)
|
|
;; (ssg-start "MEIN MODUL" '(("OSMODE")))
|
|
;; (setq ergebnis
|
|
;; (ssg-modul-dialog
|
|
;; (strcat lw "/acadsst/pfad/mein_dialog.dcl")
|
|
;; "DIALOG_NAME"
|
|
;; "DWG_NAME" ; Radio/List-Tile
|
|
;; (if (null m_DWG_NAME) "0" m_DWG_NAME)
|
|
;; "anzeige" ; Vorschau-Tile
|
|
;; (strcat lw "/acadsst/pfad/slb_bibliothek")
|
|
;; '("slide0" "slide1" "slide2")
|
|
;; nil ; extra-init
|
|
;; nil ; extra-read
|
|
;; )
|
|
;; )
|
|
;; (if ergebnis
|
|
;; (progn
|
|
;; (setq m_DWG_NAME ergebnis)
|
|
;; (setq pt (ssg-insert-modul "LAYER-NAME" "3"
|
|
;; (strcat lw "/acadsst/pfad/block_" ergebnis)
|
|
;; (list (cons "GRUPPE" "G1") (cons "ARTINR" "123456"))
|
|
;; pause))
|
|
;; )
|
|
;; )
|
|
;; (ssg-end)
|
|
;; )
|
|
;; ------------------------------------------------------------
|
|
|
|
|
|
(princ)
|