[ADD] DIN_FORMATE: Zeichnungsrahmen + Schriftkopf einfuegen

Ersatz fuer das alte ACADSST-Makro DINFORM.LSP/.DCL (SSG2 "DIN-FORMATE..."):
neues Werkzeuge-Menue "Din Formate" fuegt einen DIN-Rahmen (A0-A3, A4 quer/
hoch) und optional einen Schriftkopf (Kopf11, DE/EN/FR/IT) per Dialog ein.

Block-DWGs liegen flach in cfg/rahmen/ (kopiert aus
\infor-ln\SSG_Tools\ACADSST\KOEPFE - nur die von DINFORM.LSP tatsaechlich
referenzierten Dateien). Das Laden der Blockdefinitionen laeuft ueber
vla-InsertBlock+vla-Delete (COM-Weg wie ssg-ils-block-laden-dim), da ein
command-basiertes "_.-INSERT ... _X" in der interaktiven Befehlskette haengen
bleibt und nachfolgende getpoint-Aufrufe blockiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-09 16:17:42 +02:00
parent c353c34f2c
commit 3d8831aad8
16 changed files with 274 additions and 5 deletions
+206
View File
@@ -0,0 +1,206 @@
;; ============================================================
;; DinFormate.lsp - Zeichnungsrahmen + Schriftkopf einfuegen
;;
;; Ersatz fuer das alte ACADSST-Makro DINFORM.LSP/.DCL (SSG2-Menue
;; "DIN-FORMATE..."): fuegt einen DIN-Rahmen (A0-A4, A4 quer/hoch) und
;; optional einen Schriftkopf (KOPF11, vier Sprachen) ein. Die Block-DWGs
;; liegen flach in cfg/rahmen/ (kopiert aus \\infor-ln\SSG_Tools\ACADSST\KOEPFE,
;; nur die tatsaechlich von DINFORM.LSP referenzierten Dateien):
;; A0.DWG, A1.DWG, A2.DWG, A3.DWG, A4Q.DWG, A4H.DWG
;; Kopf11.dwg, Kopf11e.dwg, Kopf11f.dwg, Kopf11i.dwg (DE/EN/FR/IT)
;;
;; Aufruf: Menue SSG_LIB > Werkzeuge > Din Formate, oder direkt DIN_FORMATE.
;;
;; Rahmen wird im Massstabsfaktor eingefuegt (Skalierung = Zeichenmassstab,
;; wie im Original), der Kopf im Faktor/100 (Rahmen-DWGs sind im Format
;; 1:1 bei realer Papiergroesse gezeichnet, der Kopf 100x groesser angelegt -
;; unveraendert aus DINFORM.LSP uebernommen).
;;
;; Setzt ssg_core.lsp (ssg-start/ssg-end) und ssg_lang.lsp (ssg-text/-textf)
;; voraus, die ssg-ensure als Kern-Abhaengigkeit laedt.
;; ============================================================
(setq *dinformate-rahmen-liste*
(list
(cons "A0" "A0")
(cons "A1" "A1")
(cons "A2" "A2")
(cons "A3" "A3")
(cons "A4 Quer" "A4Q")
(cons "A4 Hoch" "A4H")
)
)
(setq *dinformate-sprachen-liste*
(list
(cons (ssg-text "dinformate-sprache-de") "Kopf11")
(cons (ssg-text "dinformate-sprache-en") "Kopf11e")
(cons (ssg-text "dinformate-sprache-fr") "Kopf11f")
(cons (ssg-text "dinformate-sprache-it") "Kopf11i")
)
)
(setq *dinformate-massstab-liste*
(list
(cons "1:1" 1.0)
(cons "1:10" 10.0)
(cons "1:20" 20.0)
(cons "1:25" 25.0)
(cons "1:50" 50.0)
(cons "1:75" 75.0)
(cons "1:100" 100.0)
(cons "1:200" 200.0)
(cons "1:500" 500.0)
(cons "1:1000" 1000.0)
)
)
;; ------------------------------------------------------------
;; Verzeichnis der Rahmen-/Kopf-DWGs (cfg/rahmen)
;; ------------------------------------------------------------
(defun dinformate-verzeichnis ( / cfg)
(setq cfg (getenv "DXFM_CFG"))
(if cfg
(strcat (vl-string-translate "\\" "/" cfg) "/rahmen")
"rahmen"
)
)
;; ------------------------------------------------------------
;; Block aus cfg/rahmen laden (falls nicht schon in der Zeichnung).
;; Laedt die Definition ohne Interaktion/Prompts ueber vla-InsertBlock am
;; Ursprung + sofortiges vla-Delete (COM-Weg, wie ssg-ils-block-laden-dim in
;; ssg_core.lsp) - ein command-basiertes "_.-INSERT ... _X" bleibt sonst in
;; der interaktiven Befehlskette haengen und blockiert nachfolgende getpoint-
;; Aufrufe.
;; ------------------------------------------------------------
(defun dinformate-block-laden (name / pfad temp-obj ms)
(if (not (tblsearch "BLOCK" name))
(progn
(setq pfad (strcat (dinformate-verzeichnis) "/" name ".dwg"))
(if (findfile pfad)
(progn
(setq ms (vla-get-ModelSpace
(vla-get-ActiveDocument (vlax-get-acad-object))))
(setq temp-obj (vla-InsertBlock ms
(vlax-3D-point '(0 0 0)) pfad 1.0 1.0 1.0 0))
(vla-Delete temp-obj)
)
(alert (ssg-textf "dinformate-datei-fehlt" (list pfad)))
)
)
)
)
;; ------------------------------------------------------------
;; C:DIN_FORMATE - Dialog + Einfuegen von Rahmen und Schriftkopf
;; ------------------------------------------------------------
(defun c:DIN_FORMATE ( / dcl-pfad dat ergebnis
rahmen-idx rahmen-key
sprache-idx sprache-key
massstab-idx massstab-key faktor
mit-kopf pt1 pt2 oldcmdecho oldblipmode oldlimcheck)
(ssg-start "DIN_FORMATE" nil)
(setq dcl-pfad (strcat (getenv "DXFM_DCL") "/dinformate.dcl"))
(setq dat (load_dialog dcl-pfad))
(if (not (new_dialog "dinformate" dat))
(progn
(alert (ssg-textf "dinformate-dialog-fehlt" (list dcl-pfad)))
(ssg-end)
(exit)
)
)
(start_list "rahmen")
(foreach eintrag *dinformate-rahmen-liste* (add_list (car eintrag)))
(end_list)
(set_tile "rahmen" "0")
(start_list "massstab")
(foreach eintrag *dinformate-massstab-liste* (add_list (car eintrag)))
(end_list)
(set_tile "massstab" "6") ; Vorgabe 1:100
(start_list "sprache")
(foreach eintrag *dinformate-sprachen-liste* (add_list (car eintrag)))
(end_list)
(set_tile "sprache" "0") ; Vorgabe Deutsch
(setq rahmen-idx 0 massstab-idx 6 sprache-idx 0 mit-kopf "1")
(action_tile "rahmen" "(setq rahmen-idx (atoi $value))")
(action_tile "massstab" "(setq massstab-idx (atoi $value))")
(action_tile "sprache" "(setq sprache-idx (atoi $value))")
(action_tile "kopf" "(setq mit-kopf $value)")
(action_tile "accept"
(strcat
"(setq rahmen-idx (atoi (get_tile \"rahmen\"))"
" massstab-idx (atoi (get_tile \"massstab\"))"
" sprache-idx (atoi (get_tile \"sprache\"))"
" mit-kopf (get_tile \"kopf\"))"
"(done_dialog 1)"))
(action_tile "cancel" "(done_dialog 0)")
(setq ergebnis (start_dialog))
(unload_dialog dat)
(if (/= ergebnis 1)
(progn (ssg-end) (exit))
)
(setq rahmen-key (cdr (nth rahmen-idx *dinformate-rahmen-liste*))
massstab-key (cdr (nth massstab-idx *dinformate-massstab-liste*))
sprache-key (cdr (nth sprache-idx *dinformate-sprachen-liste*))
faktor massstab-key)
;; --- Umgebung sichern -----------------------------------------------
(setq oldcmdecho (getvar "CMDECHO")
oldblipmode (getvar "BLIPMODE")
oldlimcheck (getvar "LIMCHECK"))
(setvar "CMDECHO" 0)
(setvar "BLIPMODE" 0)
(setvar "LIMCHECK" 0)
;; --- Rahmen einfuegen --------------------------------------------------
(dinformate-block-laden rahmen-key)
(setq pt1 (getpoint (ssg-text "dinformate-prompt-rahmen")))
(if (null pt1)
(progn
(setvar "CMDECHO" oldcmdecho)
(setvar "BLIPMODE" oldblipmode)
(setvar "LIMCHECK" oldlimcheck)
(ssg-end)
(exit)
)
)
(command "_.INSERT" rahmen-key pt1 faktor "" 0)
;; --- Schriftkopf einfuegen (optional) -----------------------------------
(if (= mit-kopf "1")
(progn
(dinformate-block-laden sprache-key)
(setq pt2 (getpoint (ssg-text "dinformate-prompt-kopf")))
(if pt2
(command "_.INSERT" sprache-key pt2 (/ faktor 100.0) "" 0)
)
)
)
;; --- Umgebung wiederherstellen ------------------------------------------
(setvar "CMDECHO" oldcmdecho)
(setvar "BLIPMODE" oldblipmode)
(setvar "LIMCHECK" oldlimcheck)
(princ (ssg-textf "dinformate-eingefuegt" (list rahmen-key)))
(ssg-end)
(princ)
)
(prompt "\nDinFormate.lsp geladen - Befehl: DIN_FORMATE")
(princ)