Тема: 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'а к файлам поддержки.

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

Нехорошо здесь вставился код. В начале файла dsetup.lsp не должно быть разрывов в строках коментариев.

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

Здравствуйте!!!
Программа хорошая, но только она не хочет полноценно работать. С ее помощью чертиться только рамка ,а все остальное нет. У меня стоит 2005AutoCad может ли это повлиять на ее работу? И если да то как ее переделать под мою версию AutoCadа?
Заранее благодарю!!!

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Людмила
Посмотрите, пожалуйста, почту.

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

Большое вам спасибо!!
Программа заработала :))
Если вам не трудно, то подскажите как дописать программу чтобы заполнения спецификации происходило из диалогового окна???
(другими словами как вставить текст из диалогового окна в таблицу???)

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

2 Владимир Громов: пришлите пожалуйста файл штампов и таблиц или выложите где-нибудь для скачивания если такое возможно. Спасибо.

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Людмила
В этом я не смогу вам помочь. Здесь надо не дописывать программу, а создавать новую. Этого у меня нет в планах. А вот как вставить текст в центр прямоугольной ячейки, можно посмотреть здесь:
https://www.caduser.ru/forum/topic20466.html

> ВитаЛ
Файлы штампов и таблиц в самораспаковывающемся архиве RAR (EXE) можно взять здесь:
Файл setup.exe (размер 121 Кбайт)
доступен по адресу: webfile.ru/614656
в течение 7 дней до 12.11.2005 15:17.

Все файлы должны находиться на пути доступа AutoCAD'а к файлам поддержки

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

спасибо

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Владимир
Громов
повторите, пожалуйста, этот файл Setup
спасибо

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

Файлы штампов и таблиц в самораспаковывающемся архиве RAR (EXE) можно взять здесь:
Имя файла - SETUP.exe , размер 121 Кбайт. Файлу присвоен номер 660471, он будет доступен
по адресу webfile.ru/660471
до 06.12.2005 06:27.

Все файлы должны находиться на пути доступа AutoCAD'а к файлам поддержки

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Владимир Громов
Большое спасибо за Ваш труд!
Нет ли у Вас планов написать программу (или готовых решений) для создания layout'ов и vport'ов с заданными параметрами? Имеется несущная потребность программной настройки печати модели 1:1 на листы А3.

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Людмила
ИМХО: Поскольку кад 2005, можно попробовать использовать его таблицы для формирования спецификаций. Только надо заранее оговорить, какие данные и с каких примитивов читать.

> Владимир Громов
Маленькое предложение - грузить типы линий не просто так, а, например, такой функцией (типы линий для официальных локализаций тоже переведены):

;|=============================================================================
*    Функция подгрузки типа линии в текущий файл. Учитывает возможную
* локализацию системы.
*    Параметры вызова:
*    ltype-name    имя типа линии для английской версии
*    ltype-file    имя файла описания типа линии. nil -> "acadiso.lin"ю
*            Если файл с описанием типа линии не лежит по путям
*            поддержки када, надо указывать полный путь к нему.
*    Примеры вызова:
(_kpblc-linetype-load "center" nil)    ; для русской версии подгружает Осевая
***  Соответствие наименований линий обеспечивается огромным списком ltype_list
*** который можно и нужно дополнять :) Только надо либо все делать мелкими
*** буквами, либо жестко соблюдать регистр в моменты вызовов.
***  Тип линии "Continuous" обработке не подвергается - он есть во всех версиях
=============================================================================|;
(defun _kpblc-linetype-load
       (ltype-name ltype-file / ltype_normal ltype_list)
  (vl-load-com)
  (setq    ltype_list '(("center" . "осевая")
             ("center2" . "осевая2")
             ("hidden" . "скрытая")
             ("hidden2" . "скрытая2")
             )
    ltype-name (strcase ltype-name t)
    ) ;_ end of setq
  (if (not ltype-file)
    (setq ltype-file "acadiso.lin")
    ) ;_ end of if
  (if (vl-string-search "419" (vlax-product-key))
    ;; Русская версия, меняем имя типа линии
    (setq ltype_normal (cdr (assoc ltype-name ltype_list)))
    (setq ltype_normal ltype-name)
    ) ;_ end of if
  (if (not (tblsearch "ltype" ltype_normal))
    ;; тип линии не найден, надо его загрузить. Тип линии должен быть
    ;; описан в файле
    (vl-catch-all-error-p
      (vl-catch-all-apply
    'vla-load
    (list
      (vlax-get-property
        (vla-get-activedocument (vlax-get-acad-object))
        'linetypes
        ) ;_ end of vlax-get-property
      ltype_normal
      ltype-file
      ) ;_ end of list
    ) ;_ end of vl-catch-all-apply
      ) ;_ end of vl-catch-all-error-p
    ) ;_ end of if
  ) ;_ end of defun

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

Функцию можно доработать на предмет возвращения успешности загрузки, но это не есть проблема, думаю.

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Любознательный
Нет, в ближайшее время таких планов нет, sorry.

> kpblc
Насчет типов линий - да, это проблема. Локализация, конечно делалась в лоб (в лом). У себя я просто объединил файлы *.lin из русской и английской версий в один файл и скопировал на все компьютеры. А здесь я ожидал вопросов по поводу типа линии Center2 от пользователей русской версии и предполагал предложить им просто заменить в коде для слоя "Оси" тип Center2 на свой тип линии. Код ведь открытый, а у меня на работе эта программа скомпилирована в FAS.
Но сама твоя программа, может, заинтересует пользователей. Так не стоит ли ее выделить в отдельную тему?

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Владимир Громов
Ну можно... https://www.caduser.ru/forum/topic22816.html

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

Здравствуйте!
Я слегка позно заинтересовался лиспом и не могу найти:
Файл dsetup.exe (размер 81 кбайт)
доступен по адресу: webfile.ru/459280
в течение 7 дней до 12:54 22.08.2005.
Программа хорошая, хотелось бы посмотреть ее в деле полностью;)
Если не затруднит скиньте мне этот dsetup.exe
Заранее благодарен!

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Serega
Скинул.

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

Здравствуйте! Если не трудно продублируйте программку на мыло. Хорошая, но не в открытом доступе... Нужна. Заренее благодарен

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Sasha
Что именно продублировать?

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

Я прошу прощения, но что то не могу понять как программа запускается?. Если не трудно объясните

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

>Владимир Громов
В последней строке Вашей программы EXP - функция LISP (assignment to protected symbol)

     (setq rm  r
      ht  h
      sl  s
      gr  g
      rp  rz
      spe  sp
      exp  ex )

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> ИВ
И что, программа не работает? Вообще-то надо бы вместо exp записать expl.

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Владимир Громов
Выводит сообщение об ошибке. Видимо это зависит от версии.

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Владимир Громов
У меня эта программа работает c версии 13 по 2007 и я как-то не подумал об exp.

Re: LISP, DCL. Установка параметров рисунка (рамка, штамп и т.д.)

> Владимир Громов
Это уже совсем интересно smile
В разделе tools, environment option, general options нашел настройку: SETQ to protected symbols. У меня стоит Prompt to Enter Break loop.
Эффекта от подобной ошибки может и не быть...
А вот, если будет эффект, отловить его в большой программе сложно. Как то целый день отлавливал глюк связанный с неправильной расстановкой скобок.