Показать сообщение отдельно
Старый 18.07.2010, 22:23   #16
1986Pavel
Местный
 
Аватар для 1986Pavel
 
Регистрация: 19.10.2008
Сообщений: 183
Сказал(а) спасибо: 54
Поблагодарили 72 раз(а) в 30 сообщениях
Вес репутации: 222
1986Pavel скоро придёт к известности
По умолчанию

Автоматический перенос размеров, текстов и т.д. на соответствующий слой. Вообще отличный LISP

Код:
;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку 
(vl-load-com) 
(setq *OldLayer* (getvar "CLAYER")) 
(vl-cmdf "_layer" "_make" "Размеры" "_color" 142 "" "_lw" 0.18 "" "") ;_Создаем слой размеры и задаем цвет 142 ... 
(vl-cmdf "_layer" "_make" "Штриховка" "_color" 5 "" "_lw" 0.30 "" "") ;_Создаем слой штриховка и задаем цвет 5 
(vl-cmdf "_layer" "_make" "Текст" "_color" 152 "" "_lw" 0.30 "" "")     ;_Создаем слой текст и задаем цвет 126
(vl-cmdf "_layer" "_make" "Таблицы" "_color" 152 "" "_lw" 0.30 "" "")   ;_Создаем слой таблицы и задаем цвет 126
(vl-cmdf "_layer" "_make" "Выноски" "_color" 126 "" "_lw" 0.18 "" "")   ;_Создаем слой выноски и задаем цвет 126
(setvar "clayer" *OldLayer*) 
(setq *OldLayer* nil) 
;;;;;;По аналогии добавить создание своего слоя 
;;; ... 
;;;;;; 
;;;;;;------------------------------------------------------------- 
(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if
(if (not *vlr-cmd*)
  (setq    *vlr-cmd* (vlr-command-reactor "cmd"
            '((:vlr-commandwillstart . cmd-start)
              (:vlr-commandended . cmd-end)
              (:vlr-commandcancelled . cmd-end)
              (:vlr-commandfailed . cmd-end)))))
;;;;;;------------------------------------------------------------- 
(defun cmd-start (calling-reactor startcommandInfo / thecommandstart) 
   (setq thecommandstart (nth 0 startcommandInfo))
  (if (null *OldLayer*)(setq *OldLayer* (getvar "CLAYER")))
  (cond 
 ;;;_Реакция на начало команды DIM* (DIMALIGNED DIMLINEAR и все что начинается с DIM)    
    ((wcmatch thecommandstart "DIM*")  ;_Если выполняется команда DIM* 
     (setvar "clayer" "размеры")       ;_Слой размеры должен быть создан выше (vl-cmdf "_layer" ... 
    ) 
 ;;; Конец реакции на DIM*    
    ((wcmatch thecommandstart "*HATCH*") ;_Если выполняется команда *HATCH* 
     (setvar "clayer" "штриховка") 
    ) 
    ((wcmatch thecommandstart "*TEXT") ;_Если выполняется команда *TEXT (TEXT DTEXT) 
     (setvar "clayer" "Текст") 
    )
    ((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда *TABLE
     (setvar "clayer" "Таблицы") 
    )
    ((wcmatch thecommandstart "*LEADER") ;_Если выполняется команда *QLEADER MLEADER
     (setvar "clayer" "Выноски") 
    )
    (t (setq *OldLayer* nil)) ;;_Если не наша команда, чистим список текущих слоев
;;;См http://forum.dwg.ru/showpost.php?p=318806&postcount=139
;;;и http://forum.dwg.ru/showpost.php?p=318806&postcount=143
    )
  (princ)) 
 ;;;------------------------------------------------------------- 
(defun cmd-end (calling-reactor cmd / cmd_name)
(setq cmd_name (strcase (car cmd)))
(if (or
      (wcmatch cmd_name "*HATCH*") ;_Если выполняется команда DIM*
      (wcmatch cmd_name "DIM*")    ;_Если выполняется команда *HATCH*
      (wcmatch cmd_name "*TEXT")   ;_Если выполняется команда *TEXT (TEXT DTEXT)
      (wcmatch cmd_name "*TABLE")   ;_Если выполняется команда ТАБЛИЦА
      (wcmatch cmd_name "*LEADER")   ;_Если выполняется команда *QLEADER или MLEADER
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))
Для использование сего ЛИСПа (кто не знает) делаем так. Создаем текстовый файл, копируем код и сохраняем с расширением .lsp. Название делаем любое, но лучше назвать информативно, так как в последствии подобных файлов может накопиться много и запутаетесь. Далее создаем папку на диске. Например D:\adsk\MyLisp. Сохраняем туда этот лисп файл.
Запускаем автокад, если не запущен. Вводим Команду "_appload" и добавляем этот файл в автозагрузку. Все. Теперь, как только вы проставляете какой-либо размер он автоматически переносится на слой "Размеры", текст на слой "Текст" и т.д.
1986Pavel вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Drono (27.04.2018)