3d8831aad8
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>
207 lines
6.7 KiB
Common Lisp
207 lines
6.7 KiB
Common Lisp
;; ============================================================
|
|
;; 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)
|