;; ============================================================ ;; 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)