Тема: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)
Программа установки лимитов, отрисовки рамки, вставки штампов, назначения системных переменных, размерных стилей, текстовых стилей, вставки таблиц "Спецификация", "Экспликация".
Файл диалогового окна dsetup.dcl
dsetup : dialog { label = "Рабочие параметры чертежа."; : row { : column { : boxed_row { label = "Платформа"; : edit_box { key = "plat"; width = "24"; } } : boxed_row { label = "Версия AutoCAD'а"; : edit_box { key = "ver"; width = "24"; } } : boxed_row { label = "Ориентация листа"; : radio_button { key = "portrait"; label = "Портрет "; } : radio_button { key = "landscape"; label = "Пейзаж"; } } :row { fixed_width = true; : boxed_column { label = "Формат в мм "; fixed_width = true; : popup_list { key = "size"; edit_width =10; } } : boxed_column { label="Масштаб"; fixed_width = true; : popup_list { key = "scale"; edit_width = 8; } } } : boxed_row { label = "Размеры листа в мм"; children_fixed_width = true; :edit_box { label="По X"; key = "x"; } :edit_box { label="По Y"; key = "y"; } } } : boxed_column { label = "Установить"; children_fixed_width = true; : toggle { label = "РАМКА"; key = "ram"; } : toggle { label = "(Штамп)"; key = "hta"; } : toggle { label = "СЛОИ"; key = "slo"; } : toggle { label = "СТИЛИ ТЕКСТА"; key = "gar"; } : toggle { label = "РАЗМЕРНЫЕ СТИЛИ"; key = "rzm"; } : toggle { label = "(Спецификация)"; key = "spe"; } : toggle { label = "(Экспликация)"; key = "exp"; } : toggle { label = "Резерв"; key = "r3"; } } } : row { ok_cancel; } : errtile { width = 20; } }
Файл программы dsetup.lsp
;;************* dsetup.lsp ************************************************ ;; Программа отрисовки рамки, штампа и устаноки ;; параметров рисунка. Работает с диалоговым окном. ;; Отрасль - строительство. ;; Разработал Владимир Громов. ;; (defun set_rp () ; Задание размерных переменных. (setvar "cmdecho" 0) (command "_osnap" "_none") (command "_snap" "_off") (command "_STYLE" "RAZMER" "romans" "" "" "" "_N" "_N" "_N") (setvar "DIMASSOC" 1) ; Ассоциативные размеры включены (setvar "DIMUNIT" 2) ; Десятичная система единиц (setvar "DIMASZ" 2) ; Размер стрелки (засечки) (setvar "DIMBLK" "_Oblique") ; Вместо стрелок - засечки ("Oblique") (setvar "DIMDEC" 0) ; Число знаков после запятой (setvar "DIMTXSTY" "RAZMER") ; Стиль размерного текста (setvar "DIMTXT" 2) ; Высота размерного текста (setvar "DIMTOFL" 1) ; Размерная линия всегда рисуется между выносными линиями (setvar "DIMTIH" 0) ; Размерный текст параллелен размерной линии (внутри) (setvar "DIMTOH" 0) ; Размерный текст параллелен размерной линии (снаружи) (setvar "DIMTIX" 1) ; Размерный текст всегда размещается между выносными линиями (setvar "DIMDLE" 2) ; Размерная линия выступает за выносную на 2 единицы (setvar "DIMTAD" 1) ; Текст размещается над размерной линией (setvar "DIMGAP" 1) ; Текст выше размерной линиии на 1 единицы (setvar "DIMEXO" 2) ; Смещение выносных линий относительно заданных точек равно нулю (setvar "DIMEXE" 2) ; Выносные линии выступает за размерные на 2 единицы (setvar "DIMTMOVE" 2) ; Размерный текст перемещается свободно (command "_DIMSTYLE" "_SAVE" "PROKAT") (setvar "DIMEXE" 0) ; Выносные линии выступает за размерные на 0 единиц (setvar "DIMSE1" 1) (setvar "DIMSE2" 1) (command "_DIMSTYLE" "_SAVE" "Цепочка") (command "_DIMSTYLE" "_R" "PROKAT") ) (defun set_gr () ; Создание стилей (гарнитур) текста. (setvar "cmdecho" 0) (command "_STYLE" "ROMANS" "romans" "" "" "" "_N" "_N" "_N") (command "_STYLE" "ROMAND" "romand" "" "" "" "_N" "_N" "_N") (command "_STYLE" "ROMANC" "romanc" "" "" "" "_N" "_N" "_N") (command "_STYLE" "ROMANT" "romant" "" "" "" "_N" "_N" "_N") (command "_STYLE" "ITALIC" "italic" "" "" "" "_N" "_N" "_N") (command "_STYLE" "ITALICC" "italicc" "" "" "" "_N" "_N" "_N") (command "_STYLE" "ITALICT" "italict" "" "" "" "_N" "_N" "_N") (command "_STYLE" "MONOTXT" "monotxt" "" "" "" "_N" "_N" "_N") (command "_TEXT" "_S" "ROMANS" "0,0" (* c 3) "0" " ППП 'ПРОКАТ'") ) (defun set_sl () ; Установка слоев. (setvar "cmdecho" 0) (command "_LAYER" "_N" "Площади" "_C" 4 "Площади" "_P" "_N" "Площади" "") (command "_LAYER" "_N" "Оси" "_C" 6 "Оси" "_L" "Center2" "Оси" "_LW" 0.15 "Оси" "") (command "_LAYER" "_N" "Колонны" "_C" 40 "Колонны" "_LW" 0.6 "Колонны" "") (command "_LAYER" "_N" "Стены" "_C" 40 "Стены" "_LW" 0.6 "Стены" "") (command "_LAYER" "_N" "Перегородки" "_C" 1 "Перегородки" "_LW" 0.35 "Перегородки" "") (command "_LAYER" "_N" "Помещения" "_C" 2 "Помещения" "") (command "_LAYER" "_N" "Размеры" "_C" 4 "Размеры" "_LW" 0.2 "Размеры" "") (command "_LAYER" "_N" "Осевые_размеры" "_C" 140 "Осевые_размеры" "_LW" 0.2 "Осевые_размеры" "") (command "_LAYER" "_N" "Маркировка" "_C" 1 "Маркировка" "") (command "_LAYER" "_N" "Узел" "_C" 3 "Узел" "_P" "_N" "Узел" "") (command "_LAYER" "_N" "Спецификация" "_C" 1 "Спецификация" "") (command "_LAYER" "_N" "Экспликация" "_C" 7 "Экспликация" "") (command "_LAYER" "_N" "Двери" "_C" 7 "Двери" "") (command "_LAYER" "_N" "Окна" "_C" 7 "Окна" "") (command "_LAYER" "_N" "Формат" "_C" 7 "Формат" "") (command "_LAYER" "_N" "Сантехника" "_C" 3 "Сантехника" "_LW" 0.2 "Сантехника" "") (command "_LAYER" "_N" "Технология" "_C" 4 "Технология" "") (command "_LAYER" "_N" "Отметки" "_C" 7 "Отметки" "") (command "_LAYER" "_N" "Текст" "_C" 7 "Текст" "") ; (command "_LAYER" "_N" "Штриховка" "_C" 7 "Штриховка" "") ) (defun set_ht () ; Установка штампа в чертеж. (setvar "cmdecho" 0) (command "_LAYER" "_M" "Штамп" "") (setq c (getvar "DIMSCALE")) (setq x (car (getvar "LIMMAX")) y (cadr (getvar "LIMMAX")) ) (setq pt1 (list (- x (* c 5.0)) (* c 5.0))) (command "_INSERT" "ht1" pt1 c "" "0") (command "_INSERT" "ht1b" (list (* c 20) (* c 5)) c "" "0") (setq pt1 nil) ) (defun set_spe () ; Установка спецификации в чертеж. (setvar "cmdecho" 0) (command "_LAYER" "_S" "Спецификация" "") (setq c (getvar "DIMSCALE")) (setq x (car (getvar "LIMMAX")) y (cadr (getvar "LIMMAX")) ) (setq pt1 (list (- x (* c 10.0)) (- y (* c 25.0)))) (command "_INSERT" "spec1" pt1 c "" "0") (setq pt1 nil) ) (defun set_exp () ; Установка экспликации в чертеж. (setvar "cmdecho" 0) (command "_LAYER" "_S" "Экспликация" "") (setq c (getvar "DIMSCALE")) (setq x (car (getvar "LIMMAX")) y (cadr (getvar "LIMMAX")) ) (setq pt1 (list (- x (* c 220.0)) (- y (* c 25.0)))) (command "_INSERT" "explik" pt1 c "" "0") (setq pt1 nil) ) (defun set_rm () ; Отрисовка рамки чертежа. (setvar "cmdecho" 0) (command "_LAYER" "_M" "Формат" "") (setq xx x yy y ) (setq a1 (list 0.0 0.0)) (setq a2 (list 0.0 yy)) (setq a3 (list xx yy)) (setq a4 (list xx 0.0)) (command "_PLINE" a1 "_W" (* c 0.3) "" a2 a3 a4 "_c") ; Отрисовка внешней рамки (setq a1 (list (* c 20.0) (* c 5.0))) (setq a2 (list (* c 20.0) (- yy (* c 5.0)))) (setq a3 (list (- xx (* c 5.0)) (- yy (* c 5.0)))) (setq a4 (list (- xx (* c 5.0)) (* c 5.0))) (command "_PLINE" a1 "_W" (* c 0.5) "" a2 a3 a4 "_c") ; внутренней рамки (setq xx (rtos xx 2 0) yy (rtos yy 2 0) ) (setq b "мм") (if (not c) (setq c (getvar "dimscale")) ) (setq cc (itoa (fix c))) (princ (strcat " М: 1 = " cc ". Лимиты: " xx b " на " yy b ". ") ) (command "_zoom" "_all") (setq a1 nil a2 nil a3 nil a4 nil cc nil b nil xx nil yy nil ) ) (defun do_scale () (cond ((= scale 0) (setq c 1)) ((= scale 1) (setq c 5)) ((= scale 2) (setq c 10)) ((= scale 3) (setq c 20)) ((= scale 4) (setq c 25)) ((= scale 5) (setq c 50)) ((= scale 6) (setq c 100)) ((= scale 7) (setq c 200)) ((= scale 8) (setq c 400)) ((= scale 9) (setq c 500)) ((= scale 10) (setq c 1000)) ((= scale 11) (setq c 2000)) ) ;end cond ) ;end defun do_scale (defun do_size () (if (= orient "p") (cond ((= size 1) (setq xx 210) (setq yy 297) ) ((= size 2) (setq xx 297) (setq yy 420) ) ((= size 3) (setq xx 420) (setq yy 594) ) ((= size 4) (setq xx 594) (setq yy 841) ) ((= size 5) (mode_tile "x" 0) (mode_tile "y" 0) ) ) ;end cond ) ;end if1 (if (= orient "l") (cond ((= size 1) (setq xx 297) (setq yy 210) ) ((= size 2) (setq xx 420) (setq yy 297) ) ((= size 3) (setq xx 594) (setq yy 420) ) ((= size 4) (setq xx 841) (setq yy 594) ) ((= size 5) (mode_tile "x" 0) (mode_tile "y" 0) ) ) ;end cond ) ;end if1 ) ;end defun (defun get_scale () (setq l_scl (list " 1:1" " 1:5" " 1:10" " 1:20" " 1:25" " 1:50" " 1:100" " 1:200" " 1:400" " 1:500" " 1:1000" " 1:2000" ) ) (start_list "scale") (mapcar 'add_list l_scl) (end_list) (setq c1 (fix (getvar "DIMSCALE"))) (cond ((= c1 1) (setq sc_indx "0")) ((= c1 5) (setq sc_indx "1")) ((= c1 10) (setq sc_indx "2")) ((= c1 20) (setq sc_indx "3")) ((= c1 25) (setq sc_indx "4")) ((= c1 50) (setq sc_indx "5")) ((= c1 100) (setq sc_indx "6")) ((= c1 200) (setq sc_indx "7")) ((= c1 400) (setq sc_indx "8")) ((= c1 500) (setq sc_indx "9")) ((= c1 1000) (setq sc_indx "10")) ((= c1 2000) (setq sc_indx "11")) ) (if (and (/= c1 1) (/= c1 5) (/= c1 10) (/= c1 20) (/= c1 25) (/= c1 50) (/= c1 100) (/= c1 200) (/= c1 400) (/= c1 500) (/= c1 1000) (/= c1 2000) ) (progn (setq sc_indx "12") (mode_tile "accept" 1) (set_tile "error" " Неграмотный рисунок. Отмена.") ) ) (if (not sc_indx) (setq sc_indx "0") ) (set_tile "scale" sc_indx) (mode_tile "scale" 2) ) (defun get_size () (if (= orient "l") (setq l_size (list " Прежний" " 297x210" " 420x297" " 594x420" " 841x594" " ДРУГОЙ" ) ) ) (if (= orient "p") (setq l_size (list " Прежний" " 210x297" " 297x420" " 420x594" " 594x841" " ДРУГОЙ" ) ) ) (start_list "size") (mapcar 'add_list l_size) (end_list) (if (not s_indx) (setq s_indx "0") ) (set_tile "size" s_indx) (mode_tile "size" 2) ) ; end defun (defun rez (val) (if (= val "0") (set_tile "error" " В скобках - необязательные параметры.") ) (if (= val "1") (set_tile "error" " Резервный переключатель") ) ) (defun C:DSETUP () (setvar "cmdecho" 0) (command "_osnap" "_none") (setq orient "l") (setq dcl_id (load_dialog "dsetup.dcl") ) (if (not (new_dialog "dsetup" dcl_id)) (exit) ) (if (= orient "l") (set_tile "landscape" "1") (set_tile "portrait" "1") ) (get_scale) (get_size) (set_tile "plat" (getvar "platform")) (mode_tile "plat" 1) (set_tile "ver" (getvar "acadver")) (mode_tile "ver" 1) (setq x1 (rtos (/ (car (getvar "LIMMAX")) (getvar "DIMSCALE")) 2 0) ) (setq y1 (rtos (/ (cadr (getvar "LIMMAX")) (getvar "DIMSCALE")) 2 0) ) (setq val "0") (set_tile "x" x1) (set_tile "y" y1) (mode_tile "x" 1) (mode_tile "y" 1) (set_tile "error" " В скобках - необязательные параметры.") (action_tile "landscape" "(setq orient \"l\") (get_size)") (action_tile "portrait" "(setq orient \"p\") (get_size)") (action_tile "scale" "(setq scale (read (setq sc_indx $value)))" ) (action_tile "size" "(setq size (read (setq s_indx $value)))(do_size)" ) (action_tile "x" "(setq other 1)(setq xx (read $value))") (action_tile "y" "(setq other 1)(setq yy (read $value))") (action_tile "ram" "(setq r (read $value))") (action_tile "hta" "(setq h (read $value))") (action_tile "slo" "(setq s (read $value))") (action_tile "gar" "(setq g (read $value))") (action_tile "rzm" "(setq rz (read $value))") (action_tile "spe" "(setq sp (read $value))") (action_tile "exp" "(setq ex (read $value))") (action_tile "r3" "(rez $value)") (action_tile "accept" "(setq f_done 1)(done_dialog)") (action_tile "cancel" "(setq f_done 2)(done_dialog)") (action_tile "help" "(do_help)") (start_dialog) (unload_dialog dcl_id) (do_scale) (if (not c) (setq c (getvar "DIMSCALE")) ) (if (not other) (progn (do_size) (if (and (not xx) (not yy)) (setq xx (/ (car (getvar "LIMMAX")) c) yy (/ (cadr (getvar "LIMMAX")) c) ) ) ) ) (setq m 1.0 u 2 ) (setq x (* c xx)) (setq y (* c yy)) (if (not r) (setq r 0) ) (if (not h) (setq h 0) ) (if (not s) (setq s 0) ) (if (not g) (setq g 0) ) (if (not rz) (setq rz 0) ) (if (not sp) (setq sp 0) ) (if (not ex) (setq ex 0) ) (setq rm r ht h sl s gr g rp rz spe sp exp ex ) (if (= f_done 1) (progn (setvar "blipmode" 0) (setvar "lunits" 2) (setvar "dimscale" c) (setvar "PDMODE" 3) (setvar "PDSIZE" -1) (command "_UNITS" "2" "0" "" "" "" "" "_LTSCALE" c "_LIMITS" "0,0" (list x y) ) (if (= sl 1) (set_sl) ) (if (= gr 1) (progn (set_gr) (setvar "textsize" (* 3 c)) (setvar "textstyle" "romans") ) ) (if (= rp 1) (set_rp) ) (if (= rm 1) (set_rm) ) (if (= ht 1) (set_ht) ) (if (= spe 1) (set_spe) ) (if (= exp 1) (set_exp) ) (command "_LAYER" "_S" "0" "") (setq a1 nil a2 nil a3 nil a4 nil cc nil b nil xx nil yy nil) (princ "\n Параметры установлены. \n") (princ) ) ) (if (= f_done 2) (setq m nil u nil x nil y nil r nil h nil s nil g nil rz nil rm nil ht nil sl nil gr nil rp nil sp nil spe nil exp nil ex nil) ) (setq scale nil orient nil xx nil yy nil size nil l_scl nil sc_indx nil l_size nil s_indx nil dcl_id nil plat nil other nil xx nil yy nil c1 nil c nil m nil u nil x nil y nil r nil h nil s nil g nil rz nil rm nil ht nil sl nil gr nil rp nil) (princ) )
Возможный макрос для кнопки или пункта меню:
^C^C^P(if (not C:DSETUP) (load "dsetup")) DSETUP
Файлы штампов и таблиц в самораспаковывающемся архиве RAR (EXE) можно взять здесь:
Файл dsetup.exe (размер 81 кбайт)
доступен по адресу: webfile.ru/459280
в течение 7 дней до 12:54 22.08.2005.
Все файлы должны находиться на пути доступа AutoCAD'а к файлам поддержки.