[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
+5 -1
View File
File diff suppressed because one or more lines are too long
+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)
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
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.
+38
View File
@@ -0,0 +1,38 @@
// ============================================================
// dinformate.dcl - Zeichnungsrahmen + Schriftkopf einfuegen
// Aufruf ueber c:DIN_FORMATE (Lisp/DinFormate.lsp).
// ============================================================
dinformate : dialog {
label = "DIN-Format";
: column {
: popup_list {
key = "rahmen";
label = "Rahmen:";
width = 30;
}
: popup_list {
key = "massstab";
label = "Massstab:";
width = 30;
}
: toggle {
key = "kopf";
label = "Schriftkopf einfuegen";
value = "1";
}
: popup_list {
key = "sprache";
label = "Sprache Schriftkopf:";
width = 30;
}
}
ok_cancel;
}
+10 -1
View File
@@ -1063,6 +1063,15 @@
"tt-geaendert": "\n%1 Text(e) geaendert.", "tt-geaendert": "\n%1 Text(e) geaendert.",
"tt-stil": "\nTextstil", "tt-stil": "\nTextstil",
"tt-stil-fehlt": "\nTextstil %1 existiert nicht in der Zeichnung.", "tt-stil-fehlt": "\nTextstil %1 existiert nicht in der Zeichnung.",
"tt-stil-titel": "Textstil aendern" "tt-stil-titel": "Textstil aendern",
"dinformate-dialog-fehlt": "DIN-Formate-Dialog nicht gefunden: %1",
"dinformate-datei-fehlt": "DIN-Formate: Datei nicht gefunden: %1",
"dinformate-prompt-rahmen": "\nEinfuegepunkt Rahmen (untere linke Ecke): ",
"dinformate-prompt-kopf": "\nEinfuegepunkt Schriftkopf (untere rechte Ecke): ",
"dinformate-eingefuegt": "\nDIN-Format eingefuegt: %1",
"dinformate-sprache-de": "Deutsch",
"dinformate-sprache-en": "Englisch",
"dinformate-sprache-fr": "Franzoesisch",
"dinformate-sprache-it": "Italienisch"
} }
} }
+10 -1
View File
@@ -1063,6 +1063,15 @@
"tt-geaendert": "\n%1 text(s) changed.", "tt-geaendert": "\n%1 text(s) changed.",
"tt-stil": "\nText style", "tt-stil": "\nText style",
"tt-stil-fehlt": "\nText style %1 does not exist in the drawing.", "tt-stil-fehlt": "\nText style %1 does not exist in the drawing.",
"tt-stil-titel": "Change text style" "tt-stil-titel": "Change text style",
"dinformate-dialog-fehlt": "DIN formats dialog not found: %1",
"dinformate-datei-fehlt": "DIN formats: file not found: %1",
"dinformate-prompt-rahmen": "\nBorder insertion point (lower left corner): ",
"dinformate-prompt-kopf": "\nHeader insertion point (lower right corner): ",
"dinformate-eingefuegt": "\nDIN format inserted: %1",
"dinformate-sprache-de": "German",
"dinformate-sprache-en": "English",
"dinformate-sprache-fr": "French",
"dinformate-sprache-it": "Italian"
} }
} }
+5 -2
View File
@@ -32,7 +32,7 @@
[aus 3D-Linie]^C^C(ssg-ensure "Gefaellestrecke") GEFAELLESTRECKE_3DLINIE [aus 3D-Linie]^C^C(ssg-ensure "Gefaellestrecke") GEFAELLESTRECKE_3DLINIE
[aus Linienzug (LINE + ARC)]^C^C(ssg-ensure "Gefaellestrecke") GEFAELLESTRECKE_LINIENZUG [aus Linienzug (LINE + ARC)]^C^C(ssg-ensure "Gefaellestrecke") GEFAELLESTRECKE_LINIENZUG
[QC Linie mit GF (automatische Auf-Ab-Berechnung)]^C^C(ssg-ensure "VarioFoerderer") QcLinieMitGf [QC Linie mit GF (automatische Auf-Ab-Berechnung)]^C^C(ssg-ensure "VarioFoerderer") QcLinieMitGf
[<-QC Linie mit GF und U-Form]^C^C(ssg-ensure "VarioFoerderer") QcLinieMitGfUForm [<-<-QC Linie mit GF und U-Form]^C^C(ssg-ensure "VarioFoerderer") QcLinieMitGfUForm
[->Omniflo] [->Omniflo]
[->Boegen APB110] [->Boegen APB110]
[90]^C^C(ssg-ensure "OmniModulInsert") OMNI_APB_630_90 [90]^C^C(ssg-ensure "OmniModulInsert") OMNI_APB_630_90
@@ -154,7 +154,10 @@
[Text ersetzen]^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_ERSETZEN [Text ersetzen]^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_ERSETZEN
[Text parallel beschriften]^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_PARALLEL [Text parallel beschriften]^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_PARALLEL
[Texthoehe aendern]^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_HOEHE [Texthoehe aendern]^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_HOEHE
[<-Textstil aendern]^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_STIL [Textstil aendern]^C^C(ssg-ensure "ssg_texttools") SSG_TEXT_STIL
[--]
[Faehnchen + Stueckliste aus Zeichnung]^C^C(ssg-ensure "ssg_stueckliste") SSG_FAEHNCHEN_STUECKLISTE
[<-Din Formate]^C^C(ssg-ensure "DinFormate") DIN_FORMATE
[->Tests] [->Tests]
[alle Tests ausfuehren und exportieren]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) (c:SSG_RUN_ALL_TESTS_EXPORT) [alle Tests ausfuehren und exportieren]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) (c:SSG_RUN_ALL_TESTS_EXPORT)
[Tests ausfuehren und stehen lassen]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) (c:SSG_RUN_ALL_TESTS_OFFEN) [Tests ausfuehren und stehen lassen]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) (c:SSG_RUN_ALL_TESTS_OFFEN)