Автоматический перенос размеров на слой размеры. Break макро
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Автоматический перенос размеров на слой размеры. Break макро

Автоматический перенос размеров на слой размеры. Break макро

Ответ
Поиск в этой теме
Непрочитано 01.03.2005, 12:58 #1
Автоматический перенос размеров на слой размеры. Break макро
Piton
 
Инженер строитель
 
Москва
Регистрация: 24.02.2005
Сообщений: 396

Подскажите макрос на кнопку чтоб команда break разрывала в двух указанных точках (First point, second break point). ACAD2005
---
Добавлено (спасибо VVA): Рабочие варианты
#25
#190
#272
#273

Последний раз редактировалось Кулик Алексей aka kpblc, 16.11.2012 в 13:42.
Просмотров: 187611
 
Непрочитано 01.03.2005, 13:10
#2
X-DeViL

Бизнес-шмизнес
 
Регистрация: 26.05.2004
Питер
Сообщений: 1,911


Код:
С тебя пиво
X-DeViL вне форума  
 
Автор темы   Непрочитано 01.03.2005, 13:17
#3
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


Не так, чтоб опцию first не надо было с клавы вводить
Piton вне форума  
 
Непрочитано 01.03.2005, 13:21
#4
Lenich

Опер дир
 
Регистрация: 28.04.2004
Москва
Сообщений: 291


Код:
[Выделить все]
*^C^C_break \f \@
Списано со штатной кнопки кад 2002.
Lenich вне форума  
 
Автор темы   Непрочитано 01.03.2005, 13:31
#5
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


догнал в 2005, надо так *^C^C_break \f; \@
Piton вне форума  
 
Непрочитано 01.03.2005, 13:39
#6
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Если не в лайт версии, тогда можно так:
^C^C^P(defun c:break2 () (vl-cmdf "break" pause "f" pause pause)(princ))(c:break2)
Тогда будет работать повтор по правой правой кнопке.
Torino вне форума  
 
Автор темы   Непрочитано 01.03.2005, 13:50
#7
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


Torino, не работает-повтор просто команнда break (не LT у меня)
Piton вне форума  
 
Непрочитано 01.03.2005, 13:53
#8
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Тогда вот так:

Код:
[Выделить все]
^C^C^P(defun c:break2 () (vl-cmdf "break" pause "f" pause pause)(princ));break2;
Torino вне форума  
 
Автор темы   Непрочитано 01.03.2005, 14:09
#9
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


Torino - кудесник, все ок
Есть еще вопрос
Для размеров пользуюсь макросом
Код:
[Выделить все]
^C^C_-layer;m;размеры;c;151;;;_DIMALIGNED;\\\_layerp
,но повтор по правой кнопке не срабатывает
Piton вне форума  
 
Непрочитано 01.03.2005, 16:06
#10
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Код:
[Выделить все]
;;;Просто добавь этот файл в автозагрузку
(vl-load-com)


(setq layers (vla-get-layers
	       (vla-get-activedocument
		 (vlax-get-acad-object)
	       )
	     )
)
(setq OldLayer (getvar "CLAYER"))
(vl-cmdf "layer" "m" "размеры" "c" 151 "" "") ;Да простят меня гуру...

(setvar "clayer" OldLayer)


(vlr-command-reactor
  nil
  '((:vlr-commandWillStart . startCommand))
)
(vlr-command-reactor
  nil
  '((:vlr-commandEnded . endCommand))
)
(vlr-command-reactor
  nil
  '((:vlr-commandCancelled . cancelCommand))
)


(defun startCommand (calling-reactor
		     startcommandInfo
		     /
		     thecommandstart
		    )
  (setq OldLayer (getvar "CLAYER"))
  (setq thecommandstart (nth 0 startcommandInfo))

  (if (wcmatch thecommandstart "DIM*")
    (setvar "clayer" "размеры")
  )


  (princ)
)


(defun endCommand (calling-reactor
		   endcommandInfo
		   /
		   thecommandend
		  )
  (setq thecommandend (nth 0 endcommandInfo))

  (if
    (wcmatch thecommandend "DIM*")
     (setvar "clayer" OldLayer)
  )


  (princ)
)


(defun cancelCommand (calling-reactor
		      cancelcommandInfo
		      /
		      thecommandcancel
		     )
  (setq thecommandcancel (nth 0 cancelcommandInfo))

  (if
    (wcmatch thecommandcancel "DIM*")
     (setvar "clayer" OldLayer)
  )


  (princ)
)


(princ)
Torino вне форума  
 
Автор темы   Непрочитано 01.03.2005, 18:50
#11
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


Не срабатывает
Piton вне форума  
 
Непрочитано 01.03.2005, 18:55
#12
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Что пишет?
Torino вне форума  
 
Непрочитано 02.03.2005, 09:02
#13
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


2Piton:

По поводу твоего макроса могу предложить поставить * в начале кода:
  • *^C^C_-layer;m;размеры;c;151;;;_DIMALIGNED;\\\_layerp
тогда и правая клавиша не нужна, единственное, выход только по ESC, и соответственно не возвращает на предыдущий слой
plaz вне форума  
 
Автор темы   Непрочитано 02.03.2005, 09:51
#14
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


При запуске пишет :
AutoCAD menu utilities loaded.layer
Current layer: "0"
Enter an option
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]:
m
Enter name for new layer (becomes the current layer) <0>: размеры Enter an
option
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]:
c
New color [Truecolor/COlorbook] : 151
Enter name list of layer(s) for color 151 <размеры>: Enter an option
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]:
Piton вне форума  
 
Непрочитано 02.03.2005, 11:25
#15
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Все правильно. А теперь создай размер обычным способом и посмотри на каком слое он окажется.
Torino вне форума  
 
Автор темы   Непрочитано 02.03.2005, 12:20
#16
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


2 Torino Все ок. Просто я запускал команду через предыдущий макрос, а надо было запускать обычно без модиффикации
Piton вне форума  
 
Автор темы   Непрочитано 02.03.2005, 13:53
#17
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


2Torino Подскажи тогда и для штриховки
^C^C_-layer;m;ШТРИХОВКА;c;5;;;_bhatch;\\\_layerp
Piton вне форума  
 
Непрочитано 03.03.2005, 13:55
#18
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Ну вот общими усилиями мы это сделали:

Код:
[Выделить все]
;;;Автоматический перенос размеров на слой "размеры"
;;;и заливки на слой "заливка"


;;;Просто добавь этот файл в автозагрузку
(vl-load-com)


(setq layers (vla-get-layers
	       (vla-get-activedocument
		 (vlax-get-acad-object)
	       )
	     )
)
(setq OldLayer (getvar "CLAYER"))

(vl-cmdf "layer" "m" "размеры" "c" 151 "" "") ;Да простят меня гуру...
(vl-cmdf "layer" "m" "штриховка" "c" 5 "" "")

(setvar "clayer" OldLayer)


(vlr-command-reactor
  nil
  '((:vlr-commandWillStart . startCommand))
)
(vlr-command-reactor
  nil
  '((:vlr-commandEnded . endCommand))
)
(vlr-command-reactor
  nil
  '((:vlr-commandCancelled . cancelCommand))
)


(defun startCommand (calling-reactor
		     startcommandInfo
		     /
		     thecommandstart
		    )
  (setq OldLayer (getvar "CLAYER"))
  (setq thecommandstart (nth 0 startcommandInfo))

  (cond
    ((wcmatch thecommandstart "DIM*")
     (setvar "clayer" "размеры")
    )
    ((wcmatch thecommandstart "*HATCH*")
     (setvar "clayer" "штриховка")
    )
  )
;;;  (if (wcmatch thecommandstart "DIM*")
;;;    (setvar "clayer" "размеры")
;;;  )


  (princ)
)


(defun endCommand (calling-reactor
		   endcommandInfo
		   /
		   thecommandend
		  )
  (setq thecommandend (nth 0 endcommandInfo))

  (cond
    ((wcmatch thecommandend "DIM*")
     (setvar "clayer" OldLayer)
    )
    ((wcmatch thecommandend "*HATCH*")
     (setvar "clayer" OldLayer)
    )
  )




  (princ)
)


(defun cancelCommand (calling-reactor
		      cancelcommandInfo
		      /
		      thecommandcancel
		     )
  (setq thecommandcancel (nth 0 cancelcommandInfo))

  (cond
    ((wcmatch thecommandcancel "DIM*")
     (setvar "clayer" OldLayer)
    )
    ((wcmatch thecommandcancel "*HATCH*")
     (setvar "clayer" OldLayer)
    )
  )



  (princ)
)


(princ)
Torino вне форума  
 
Непрочитано 03.03.2005, 14:14
#19
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Или лучше так:
Код:
[Выделить все]
;;;Автоматический перенос размеров на слой "размеры"
;;;и заливки на слой "заливка"

;;;Просто добавь этот файл в автозагрузку
(vl-load-com)
(setq layers (vla-get-layers
	       (vla-get-activedocument
		 (vlax-get-acad-object)
	       )
	     )
)

;;;-------------------------------------------------------------

(setq OldLayer (getvar "CLAYER"))
(vl-cmdf "layer" "m" "размеры" "c" 151 "" "") ;Да простят меня гуру...
(vl-cmdf "layer" "m" "штриховка" "c" 5 "" "")
(setvar "clayer" OldLayer)

;;;-------------------------------------------------------------

(vlr-command-reactor
  nil
  '((:vlr-commandWillStart . startCommand))
)
(vlr-command-reactor
  nil
  '((:vlr-commandEnded . endCommand))
)
(vlr-command-reactor
  nil
  '((:vlr-commandCancelled . endCommand))
)

;;;-------------------------------------------------------------

(defun startCommand (calling-reactor
		     startcommandInfo
		     /
		     thecommandstart
		    )
  (setq OldLayer (getvar "CLAYER"))
  (setq thecommandstart (nth 0 startcommandInfo))

  (cond
    ((wcmatch thecommandstart "DIM*")
     (setvar "clayer" "размеры")
    )
    ((wcmatch thecommandstart "*HATCH*")
     (setvar "clayer" "штриховка")
    )
  )
  (princ)
)

;;;-------------------------------------------------------------

(defun endCommand (calling-reactor
		   endcommandInfo
		   /
		   thecommandend
		  )
  (setq thecommandend (nth 0 endcommandInfo))

  (cond
    ((wcmatch thecommandend "DIM*")
     (setvar "clayer" OldLayer)
    )
    ((wcmatch thecommandend "*HATCH*")
     (setvar "clayer" OldLayer)
    )
  )
  (princ)
)

;;;-------------------------------------------------------------

(princ)

;;;-------------------------------------------------------------
Torino вне форума  
 
Автор темы   Непрочитано 03.03.2005, 14:33
#20
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


2Torino СУПЕР об этом мечтал 2 года 8)
Piton вне форума  
 
Непрочитано 24.02.2006, 11:00
#21
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


Действительно СУПЕР! Начал пользоваться.А нельзя ли файл доработать так,чтобы при испоьзовании комманд Mtext и Dtext текст также бы ложился в свой слой,скажем-"Текст"?
getr вне форума  
 
Непрочитано 24.02.2006, 12:54
#22
Кочетков Андрей

Java/Kotlin/Go
 
Регистрация: 03.02.2006
Сообщений: 5,786


Код:
[Выделить все]
;;;Автоматический перенос размеров на слой "размеры",
;;;заливки на слой "заливка" и  текста на слой "текст"

;;;Просто добавь этот файл в автозагрузку
(vl-load-com)
(setq layers (vla-get-layers
	       (vla-get-activedocument
		 (vlax-get-acad-object)
	       )
	     )
)

;;;-------------------------------------------------------------

(setq OldLayer (getvar "CLAYER"))
(vl-cmdf "layer" "m" "размеры" "c" 151 "" "") ;Да простят меня гуру...
(vl-cmdf "layer" "m" "штриховка" "c" 5 "" "")
(vl-cmdf "layer" "m" "текст" "c" 2 "" "")
(setvar "clayer" OldLayer)

;;;-------------------------------------------------------------

(vlr-command-reactor
  nil
  '((:vlr-commandWillStart . startCommand))
)
(vlr-command-reactor
  nil
  '((:vlr-commandEnded . endCommand))
)
(vlr-command-reactor
  nil
  '((:vlr-commandCancelled . endCommand))
)

;;;-------------------------------------------------------------

(defun startCommand (calling-reactor
		     startcommandInfo
		     /
		     thecommandstart
		    )
  (setq OldLayer (getvar "CLAYER"))
  (setq thecommandstart (nth 0 startcommandInfo))

  (cond
    ((wcmatch thecommandstart "DIM*")
     (setvar "clayer" "размеры")
    )
    ((wcmatch thecommandstart "*HATCH*")
     (setvar "clayer" "штриховка")
    )
    ((wcmatch thecommandstart "*TEXT")
     (setvar "clayer" "текст")
    )
  )
  (princ)
)

;;;-------------------------------------------------------------

(defun endCommand (calling-reactor
		   endcommandInfo
		   /
		   thecommandend
		  )
  (setq thecommandend (nth 0 endcommandInfo))

  (cond
    ((wcmatch thecommandend "DIM*")
     (setvar "clayer" OldLayer)
    )
    ((wcmatch thecommandend "*HATCH*")
     (setvar "clayer" OldLayer)
    )
    ((wcmatch thecommandend "*TEXT")
     (setvar "clayer" OldLayer)
    )
  )
  (princ)
)

;;;-------------------------------------------------------------

(princ)

;;;-------------------------------------------------------------
Кочетков Андрей вне форума  
 
Непрочитано 24.02.2006, 13:39
#23
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Позволю себе несколько модернизировать текст. При вызове команды идет вызов реакторов несколько раз и Oldlayer не восстанавливает слой до вызова команды. А если его сделать списком и восставливать 0-й, то вроде все ок. Плюс добавил комментарии, так что добавить, чтобы любой другой примитив ложился на свой слой не составит труда.

Код:
[Выделить все]
;;; Автор идеи Torino, он же Кочетков Андрей 
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку 
(vl-load-com) 
(setq *OldLayer* (getvar "CLAYER")) 
(vl-cmdf "_layer" "_make" "размеры" "_color" 151 "" "") ;_Создаем слой размеры и задаем цвет 151 ... 
(vl-cmdf "_layer" "_make" "штриховка" "_color" 5 "" "") ;_Создаем слой штриховка и задаем цвет 5 
(vl-cmdf "_layer" "_make" "Текст" "_color" 6 "" "")     ;_Создаем слой текст и задаем цвет 6 
(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" "Текст") 
    ) 
    (t nil)) 
  (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) 
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))
VVA вне форума  
 
Непрочитано 24.02.2006, 14:28
#24
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


->VVA
Попробовал ваш вариант.Все отлично!Единственное пожелание,чтобы при открытии чертежа текущим слоем был бы последний используемый.В данный момент текущим сразу становится слой "Текст".
getr вне форума  
 
Непрочитано 24.02.2006, 15:01
#25
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку 
(vl-load-com) 
(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if
(setq *OldLayer* (getvar "CLAYER")) 
(vl-cmdf "_layer" "_make" "Размеры" "_color" 151 "" "") ;_Создаем слой размеры и задаем цвет 151 ... 
(vl-cmdf "_layer" "_make" "Штриховка" "_color" 5 "" "") ;_Создаем слой штриховка и задаем цвет 5 
(vl-cmdf "_layer" "_make" "Текст" "_color" 6 "" "")     ;_Создаем слой текст и задаем цвет 6
(vl-cmdf "_layer" "_make" "Таблицы" "_color" 6 "" "")   ;_Создаем слой таблицы и задаем цвет 6
(vl-cmdf "_layer" "_make" "Выноски" "_color" 6 "" "")   ;_Создаем слой выноски и задаем цвет 6
(setvar "clayer" *OldLayer*) 
(setq *OldLayer* nil) 
;;;;;;По аналогии добавить создание своего слоя 
;;; ... 
;;;;;; 
;;;;;;------------------------------------------------------------- 

(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))
***Добавлено 30.11.2008 Внесены изменения (красным) в соответствии с проблемой, описанной в #139 и решением #143

Автор Lee Mac. Опубликовано здесь (требуется регистрация)
Код:
[Выделить все]
;; Пояснения на русском добавлены VVA (Владимир Азарко)
;; Для активации / деактивации командных реакторов
;; необходимо набрать в командной строке LD
;;При аткивности реактора в строке MODEMACRO (левый нижний угол) будет надпись "LD+"
;;--------------------=={ Layer Director }==------------------;;
;;                                                            ;;
;;  Uses a command reactor to automatically set the layer     ;;
;;  upon the user invoking certain commands.                  ;;
;;                                                            ;;
;;  Layer settings are stored in the list at the top of the   ;;
;;  program. The first entry in the list is the command on    ;;
;;  which the reactor will trigger, it may use wildcards.     ;;
;;  The second entry is the designated layer for the command  ;;
;;  entered, this layer will be created if non-existent.      ;;
;;  The third entry is the layer colour that will be used if  ;;
;;  the layer is to be created in the drawing.                ;;
;;                                                            ;;
;;  The Reactor is set to be enabled upon loading the program ;;
;;  it can furthermore be toggled on and off using by typing  ;;
;;  'LD' at the command line.                                 ;;
;;------------------------------------------------------------;;
;;  Author: Lee McDonnell, 2010                               ;;
;;                                                            ;;
;;  Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
;;  Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
;;------------------------------------------------------------;;

(defun c:LD nil (LM:LayerDirector T))

(defun LM:LayerDirector ( msg )
  (vl-load-com)
  ;; © Lee Mac 2010

;;;;;;Здесь в виде списка задаем: команду, имя слоя, цвет
  (setq *LayerData*
   '(
     ("*TEXT"           "TEXT"       2) ;_ "*TEXT" - команда (DTEXT или MTEXT)
                                                ;_ "TEXT" - имя слоя
                                                ;_ 2 - цвет
     ("*DIM*,*LEADER"  "DIMENSIONS" 2)
     ("*VPORT*"         "DEFPOINTS"  7)
     ("*EXECUTETOOL"    "4"          4)
    )
  )
  ;;;

  (
    (lambda ( data callback1 callback2 / react )
      (if
        (setq react
          (vl-some
            (function
              (lambda ( reactor )
                (if (eq data (vlr-data reactor))
                  reactor
                )
              )
            )
            (cdar (vlr-reactors :vlr-command-reactor))
          )
        )
        (if (vlr-added-p react)
          (vlr-remove react)
          (vlr-add react)
        )
        (setq react
          (vlr-command-reactor data
            (list
              (cons :vlr-commandWillStart callback1)
              (cons :vlr-commandEnded     callback2)
              (cons :vlr-commandCancelled callback2)
            )
          )
        )
      )

      (if msg
        (if (and react (vlr-added-p react))
	  (progn
 	    (princ "\n<< Layer Director Enabled >>" )
	    (setvar
	      "Modemacro"
	      (strcat "LD+ "
		      (VL-STRING-LEFT-TRIM "LD+ " (getvar "modemacro"))
	      )
	    )
	    )
	  (progn
	    (princ "\n<< Layer Director Disabled >>")
	    (setvar
	      "Modemacro"
	       (VL-STRING-LEFT-TRIM "LD+ " (getvar "modemacro"))
	    )
	    )
        )
      )
    )

    "LayerDirector"
    'LayerDirectorSet
    'LayerDirectorReset
  )
  (princ)
)

(defun LM:MakeLayer ( name colour )
  (or (tblsearch "LAYER" name)
    (entmakex
      (list
        (cons 0   "LAYER")
        (cons 100 "AcDbSymbolTableRecord")
        (cons 100 "AcDbLayerTableRecord")
        (cons 2   name)
        (cons 62  colour)
        (cons 70  0)
      )
    )
  )
)

(defun LayerDirectorSet ( reactor arguments / layerdetails layer )
  (vl-load-com)
  ;; © Lee Mac 2010

  (if
    (and
      (setq layerdetails
        (vl-some
          (function
            (lambda ( x )
              (if (wcmatch (strcase (car arguments)) (car x))
                (cdr x)
              )
            )
          )
          *LayerData*
        )
      )
      (LM:MakeLayer (setq layer (car layerdetails)) (cadr layerdetails))
      (zerop
        (logand 1
          (cdr
            (assoc 70
              (tblsearch "LAYER" layer)
            )
          )
        )
      )
    )
    (progn
      (setq *oldlayer* (getvar 'CLAYER))      
      (setvar 'CLAYER layer)
    )
  )

  (princ)
)

(defun LayerDirectorReset ( reactor arguments )
  (vl-load-com)
  ;; © Lee Mac 2010

  (if
    (and (not (wcmatch (strcase (car arguments)) "*UNDO")) *oldlayer*
      (tblsearch "LAYER" *oldlayer*)
      (zerop
        (logand 1
          (cdr
            (assoc 70
              (tblsearch "LAYER" *oldlayer*)
            )
          )
        )
      )
    )
    (progn
      (setvar 'CLAYER *oldlayer*)
      (setq *oldlayer* nil)
    )
  )
  
  (princ)
)

(princ)
(LM:LayerDirector t)
(princ "\nДля активации / деактивации наберите в командной строке LD")

Последний раз редактировалось VVA, 21.10.2010 в 20:30. Причина: Новый вариант от Lee Mac
VVA вне форума  
 
Непрочитано 24.02.2006, 16:03
#26
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


->VVA
Так быстро,-ну просто нет слов! Теперь все как хотелось.
С П А С И Б О !
getr вне форума  
 
Автор темы   Непрочитано 24.02.2006, 16:50
#27
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


Еще раз спасибо Torino aka Кочетков Андрей ( :wink: ) и VVA
АДМИНИСТРАТОР РАЗДЕЛИ ТЕМУ НА 2-Е сам искал и не мог найти, нашел только через просмотр всех своих сообщений
Piton вне форума  
 
Непрочитано 24.02.2006, 19:20
#28
Кочетков Андрей

Java/Kotlin/Go
 
Регистрация: 03.02.2006
Сообщений: 5,786


Хочу уточнить насчет авторства:
Впервые решение этой задачи мне показал Эдуард.
Потом я увидел аналогичную задачу у Kenny Ramage.
А мой код - очередная интерпретация идеи.

Последний раз редактировалось Кочетков Андрей, 31.03.2015 в 10:10.
Кочетков Андрей вне форума  
 
Непрочитано 24.02.2006, 22:52
#29
Dima

инженер
 
Регистрация: 30.08.2003
Одесса-Мама
Сообщений: 176
<phrase 1= Отправить сообщение для Dima с помощью Skype™


Ну, господа, даёте! :shock:
Браво!
Примите и мое Спасибо!
Учиться учиться и еще раз учиться!!!
__________________
vinum
Dima вне форума  
 
Непрочитано 01.03.2006, 10:05
#30
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


Поработал несколько дней и тут выявился один досадный момент.При наличии в автозагрузке этого файла невозможноустановить(через комстроку)текущим какой-либо слой посредством команды -Layer с опцией Set.Почему досадный?При наличии программ на Лиспе,употребляющих эту команду для установки текущего слоя перед отрисовкой чего-либо,отрисовка идет не на устанавливаемом слое,а на текущем перед выполнением лиспа.Просьба к знатокам Лиспа довести таки этот файл для автозагрузки,чтобы не было влияния на другие лисп-программы.
getr вне форума  
 
Непрочитано 01.03.2006, 11:16
#31
gadfly

конструктор
 
Регистрация: 28.02.2006
москва
Сообщений: 21


ИМХО. Лучше создать шаблон со всеми этими слоями, а не создавать их каждый раз при открытии. Чужие чертежи изменяются...
__________________
Кто не думает о конце, ошибется в начале.
gadfly вне форума  
 
Непрочитано 01.03.2006, 11:28
#32
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Вот как надо делать слои по-гурийски, чтобы не было заморочек с текущими установками:
Код:
[Выделить все]
(vl-load-com) 
  (setq lyrs (vlax-get (vla-get-activedocument (vlax-get-acad-object)) 'Layers)
        nlrs (mapcar '(lambda (x) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list lyrs x)));Проверяем наличие слоя в файле
              (vla-add lyrs x))) '("Dims" "Text" "Hatch")));Добавляем, если надо
  (foreach lyr nlrs
    (mapcar '(lambda (x y) (if (= (vla-get-name lyr) x) (vla-put-color lyr y)))
      '("Dims" "Text" "Hatch") '(151 6 5)));Присваиваем цвет ноывм слоям, а существующие - не трогаем
-----------------------------
Далее - реактор по-торински (что-то уж больно по кулинарному получилось)
Кроме указаных, можно добвлять в список слоев любые другие, так же, как и свойства и их значения в соотв. список.
Лентяй вне форума  
 
Непрочитано 01.03.2006, 12:16
#33
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


->Лентяй
Не работает.Если нажать F12,то можно прочитать следующее:
AutoCAD menu utilities loaded.; error: bad argument type: VLA-OBJECT nil
Как быть?
getr вне форума  
 
Непрочитано 01.03.2006, 20:22
#34
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Странно, при загрузке моего фрагмента из VLISP-редактора все слои образуются, как надо. Проврерно на ACAD-2005 и АDТ-2005. А в каком именно мест у вас происходит сбой? Судя по сообщению об ошибке, объекты с примитивами, как обычно, "твоя моя не понимай".
Лентяй вне форума  
 
Непрочитано 01.03.2006, 23:13
#35
stim

просто ГИП.
 
Регистрация: 18.11.2005
Московская обл
Сообщений: 54
<phrase 1=


Даю простой совет. В опциях открываешь вкладку Files, в древе каталогов находишь Support File Search Path, копируешь путь (первая строка) у меня это
C:\Documents and Settings\1\Application Data\Autodesk\AutoCAD 2006\R16.2\enu\support
лезешь туда находишь файл acad.pjp, открываешь его блокнотом находишь команду break, через поиск, изменяешь первые буквы(у) в строке на любую другую(ие), но не трогай буквы после *, сохраняешь файл. Если надо вызвать команду вводишь с клавы эти буквы(у), а дальше выполняй действия согласно командной строки ( укажи т.1, укажи т.2)
Этот метод применяется к любой команде, и не надо рисовать макросы на лист.
Можешь заменить стандартный файл acad.pjp на мой и в Word посмотреть таблицу команд.
[ATTACH]1141244011.rar[/ATTACH]
__________________
Сергей Юрьевич
stim вне форума  
 
Непрочитано 01.03.2006, 23:16
#36
stim

просто ГИП.
 
Регистрация: 18.11.2005
Московская обл
Сообщений: 54
<phrase 1=


Вот acad.pjp и таблица команд
[ATTACH]1141244217.rar[/ATTACH]
__________________
Сергей Юрьевич
stim вне форума  
 
Непрочитано 02.03.2006, 01:49
#37
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


>getr
Разобрался. Проблема оказалась сугубо языковая в снысле, что имена слоев должны быть на одном языке. Ниже - англоязычный вариант.
Код:
[Выделить все]
(vl-load-com) 
  (setq lyrs (vlax-get (vla-get-activedocument (vlax-get-acad-object)) 'Layers) 
        nlrs (mapcar '(lambda (x) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list lyrs x)));Проверяем наличие слоя в файле 
              (vla-add lyrs x))) '("Dims" "Text" "Hatch")));Добавляем, если надо 
  (foreach lyr nlrs 
    (mapcar '(lambda (x y) (if (= (vla-get-name lyr) x) (vla-put-color lyr y))) 
      '("Dims" "Text" "Hatch") '(151 6 5)))
;
(vlr-command-reactor nil '((:vlr-commandWillStart . startCommand))) 
(vlr-command-reactor nil '((:vlr-commandEnded . endCommand))) 
(vlr-command-reactor nil '((:vlr-commandCancelled . endCommand))) 
;
(defun startCommand (calling-reactor startcommandInfo / thecommandstart)
  (setq thecommandstart (nth 0 startcommandInfo)) 
  (setq *OldLayer* (append *OldLayer* (list (getvar "CLAYER")))) 
  (cond ((wcmatch thecommandstart "DIM*") (setvar "clayer" "Dims"))
	((wcmatch thecommandstart "*HATCH*") (setvar "clayer" "Hatch"))
	((wcmatch thecommandstart "*TEXT") (setvar "clayer" "Text"))
	(t nil));cond 
  (princ)
);startCommand
;
(defun endCommand (calling-reactor endcommandInfo) 
 (if *OldLayer* (setvar "clayer" (nth 0 *OldLayer*))) 
 (setq *OldLayer* nil) 
 (princ) 
);endCommand
Лентяй вне форума  
 
Непрочитано 02.03.2006, 06:17
#38
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


> Лентяй
Цитата:
Проблема оказалась сугубо языковая в снысле, что имена слоев должны быть на одном языке.
Не в этом проблема. У меня тоже самое выдает:
Цитата:
error: bad argument type: VLA-OBJECT nil
Все слои названы одинаково. Если начинать работать с новым (чистым) файлом без заранее заданными слоями, тогда выдается та-же ошибка, но все работает и нужные слои создаются. Если использовать шаблон, где енти слои уже забиты, то не работает.
Krieger вне форума  
 
Непрочитано 02.03.2006, 10:36
#39
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


->Лентяй
Ваш вариант работает при открытии нового файла.Но все равно оказывает влияние на работу лисп-программ,как писал выше.
При повторном открытии этого-же файла работать не хочет,выдает ту же ошибку "error: bad argument type: VLA-OBJECT nil ".
getr вне форума  
 
Непрочитано 02.03.2006, 11:25
#40
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


А теперь - после введения проверки на существоание измененного слоя?
Код:
[Выделить все]
(vl-load-com) 
  (setq lyrs (vlax-get (vla-get-activedocument (vlax-get-acad-object)) 'Layers) 
        nlrs (mapcar '(lambda (x) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list lyrs x)));Ïðîâåðÿåì íàëè÷èå ñëîÿ â ôàéëå 
              (vla-add lyrs x))) '("Dims" "Text" "Hatch")));Äîáàâëÿåì, åñëè íàäî 
  (foreach lyr nlrs 
    (if lyr (mapcar '(lambda (x y) (if (= (vla-get-name lyr) x) (vla-put-color lyr y))) 
      '("Dims" "Text" "Hatch") '(151 6 5))))
; 
(vlr-command-reactor nil '((:vlr-commandWillStart . startCommand))) 
(vlr-command-reactor nil '((:vlr-commandEnded . endCommand))) 
(vlr-command-reactor nil '((:vlr-commandCancelled . endCommand))) 
; 
(defun startCommand (calling-reactor startcommandInfo / thecommandstart) 
  (setq thecommandstart (nth 0 startcommandInfo)) 
  (setq *OldLayer* (append *OldLayer* (list (getvar "CLAYER")))) 
  (cond ((wcmatch thecommandstart "DIM*") (setvar "clayer" "Dims")) 
   ((wcmatch thecommandstart "*HATCH*") (setvar "clayer" "Hatch")) 
   ((wcmatch thecommandstart "*TEXT") (setvar "clayer" "Text")) 
   (t nil));cond 
  (princ) 
);startCommand 
; 
(defun endCommand (calling-reactor endcommandInfo) 
 (if *OldLayer* (setvar "clayer" (nth 0 *OldLayer*))) 
 (setq *OldLayer* nil) 
 (princ) 
);endCommand
Лентяй вне форума  
 
Непрочитано 02.03.2006, 14:02
#41
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


->Лентяй
Теперь сообщения об ошибке нет.Работает как и вариант VVA+Кочетков.Но влияние на работу других лиспов осталось.
getr вне форума  
 
Непрочитано 02.03.2006, 21:19
#42
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Подробнее, плз! Какое "влияние", какие лиспы, совпадают ли имена переменных м т.д. Потому как в конкретных условиях возможно все, что угодно.
Лентяй вне форума  
 
Непрочитано 03.03.2006, 07:34
#43
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


> Лентяй
Цитата:
невозможноустановить(через комстроку)текущим какой-либо слой посредством команды -Layer с опцией Set.
Ни set ни make не срабатывают, т.е. даже такой макрос (был в начале темы)
Код:
[Выделить все]
^C^C_-layer;m;размеры;c;151;;;_DIMALIGNED;\\\_layerp
работать не будет
Krieger вне форума  
 
Непрочитано 03.03.2006, 10:09
#44
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


Да.именно об этом идет речь.Если в лиспах применяется -Layer с опциями Set или Make (или (vl-cmdf "_'layer" "_S" "Осевые")),то эти команды не выполняются.Отрисовка идет на текущем слое.
getr вне форума  
 
Непрочитано 03.03.2006, 11:07
#45
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


А если такое попробовать?
Код:
[Выделить все]
(if (not *kpblc-activedoc*)
  (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
  ) ;_ end of if

(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-cancel)
		      (:vlr-commandfailed . cmd-fail)
		      )
		    ) ;_ end of VLR-Command-Reactor
	) ;_ end of setq
  ) ;_ end of if
;; Функция подгрузки типа линии - на http://www.autocad.ru/cgi-bin/f1/board.cgi?t=22730iW

;|=============================================================================
*    Создание слоя с указанными параметрами.
*    Параметры вызова:
*	layer-list	список параметров слоя вида:
	'(("name" . "TestLayer")	; имя слоя. Не может быть пропущено
	("color" . 3)			; номер цвета. nil -> 7
	("lw" . 50)			; вес линии слоя. nil -> 25
	("lt" . "hidden")		; тип линии слоя. nil -> Continuous
					; Если описания типа линии в acadiso.lin
					; нет, обязательно указывать следующий
					; параметр
	("ltfile" . "c:\\cad\\ltypes\\lt.lin")	; полный путь к файлу с описанием
					; типа линии. Если файл находится в путях
					; поддержки, путь можно не указывать
	("plot" . "y")			; Печатать ("y") или нет ("n") слой.
					; nil -> "y"
	)
*    Возвращает vla-указатель на созданный слой. Если слой существует, его
* настройки приводятся в соответствие с переданным списком.
*    Слой размораживается, разблокируется и включается. Не активируется.
|;
(defun _kpblc-layer-create (layer-list / vla_layer)
  (setq	vla_layer
	 (vla-add
	   (vla-get-layers *kpblc-activedoc*)
	   (cdr (assoc "name" layer-list))
	   ) ;_ end of vla-add
	) ;_ end of setq
  (vla-put-color
    vla_layer
    (if	(cdr (assoc "color" layer-list))
      (cdr (assoc "color" layer-list))
      7
      ) ;_ end of if
    ) ;_ end of vla-put-color
  (vla-put-lineweight
    vla_layer
    (if	(cdr (assoc "lw" layer-list))
      (cdr (assoc "lw" layer-list))
      aclnwt025
      ) ;_ end of if
    ) ;_ end of vla-put-lineweight
  (if (and (cdr (assoc "lt" layer-list))
	   (_kpblc-linetype-load
	     (cdr (assoc "lt" layer-list))
	     (cdr (assoc "ltfile" layer-list))
	     ) ;_ end of _kpblc-linetype-load
	   ) ;_ end of and
    (vla-put-linetype vla_layer (cdr (assoc "lt" layer-list)))
    (vla-put-linetype vla_layer "Continuous")
    ) ;_ end of if
  (vla-put-plottable
    vla_layer
    (if	(= (cdr (assoc "plot" layer-list)) "n")
      :vlax-false
      :vlax-true
      ) ;_ end of if
    ) ;_ end of vla-put-Plottable
  (vla-put-lock vla_layer :vlax-false)
  (vla-put-layeron vla_layer :vlax-true)
  (if (not (equal (vla-get-activelayer *kpblc-activedoc*)
		  vla_layer
		  ) ;_ end of equal
	   ) ;_ end of not
    (vla-put-freeze vla_layer :vlax-false)
    ) ;_ end of if
  vla_layer
  ) ;_ end of defun

(defun cmd-start (react	   cmd	    /	     selset   cmd_name ent
		  svr	   res	    tag	     text     index    _attreq_
		  _attdia_
		  )
  (setq cmd_name (strcase (car cmd) t))
  (cond
    ((vl-string-search "dim" cmd_name)
     (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer *kpblc-activedoc*)
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer
       *kpblc-activedoc*
       (_kpblc-layer-create
	 '(("name" . "Размеры")
	   ("color" . 2)
	   ("lw" . 25)
	   )
	 ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar
	     '("cecolor" "celweight" "celtype")
	     '("bylayer" -1 "bylayer")
	     ) ;_ end of mapcar
     )
    ((vl-string-search "hatch" cmd_name)
     (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer *kpblc-activedoc*)
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer
       *kpblc-activedoc*
       (_kpblc-layer-create
	 '(("name" . "Штриховки")
	   ("color" . 3)
	   ("lw" . 00)
	   )
	 ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar
	     '("cecolor" "celweight" "celtype")
	     '("bylayer" -1 "bylayer")
	     ) ;_ end of mapcar
     )
    ((vl-string-search "text" cmd_name)
     (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer *kpblc-activedoc*)
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer
       *kpblc-activedoc*
       (_kpblc-layer-create
	 '(("name" . "Тексты")
	   ("color" . 6)
	   ("lw" . 25)
	   )
	 ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar
	     '("cecolor" "celweight" "celtype")
	     '("bylayer" -1 "bylayer")
	     ) ;_ end of mapcar
     )
    ) ;_ end of cond
  ) ;_ end of defun

(defun cmd-end (react	     cmd	  /	       list_obj
		selset	     item	  counter      leader_item
		cmd_name     leader_item_list	       up_string
		low_string
		)
  (setq	cmd_name (strcase cmd_name t)
	counter	 0
	) ;_ end of setq
  (cond
    ((or (vl-string-search "dim" cmd_name)
	 (vl-string-search "text" cmd_name)
	 (vl-string-search "hatch" cmd_name)
	 ) ;_ end of or
     (if *vlr-settings*
       (progn
	 (vla-put-activelayer
	   *kpblc-activedoc*
	   (cdr (assoc "layer" *vlr-settings*))
	   ) ;_ end of vla-put-ActiveLayer
	 (mapcar 'setvar
		 '("cecolor" "celweight" "celtype")
		 (list (cdr (assoc "color" *vlr-settings*))
		       (cdr (assoc "lw" *vlr-settings*))
		       (cdr (assoc "lt" *vlr-settings*))
		       ) ;_ end of list
		 ) ;_ end of mapcar
	 (setq *vlr-settings* nil)
	 ) ;_ end of progn
       ) ;_ end of if
     )
    ) ;_ end of cond
  ) ;_ end of defun

(defun cmd-cancel (react cmd / cmd_name)
  (setq cmd_name (strcase (car cmd) t))
  (cond
    ((or (vl-string-search "dim" cmd_name)
	 (vl-string-search "text" cmd_name)
	 (vl-string-search "hatch" cmd_name)
	 ) ;_ end of or
     (if *vlr-settings*
       (progn
	 (vla-put-activelayer
	   *kpblc-activedoc*
	   (cdr (assoc "layer" *vlr-settings*))
	   ) ;_ end of vla-put-ActiveLayer
	 (mapcar 'setvar
		 '("cecolor" "celweight" "celtype")
		 (list (cdr (assoc "color" *vlr-settings*))
		       (cdr (assoc "lw" *vlr-settings*))
		       (cdr (assoc "lt" *vlr-settings*))
		       ) ;_ end of list
		 ) ;_ end of mapcar
	 (setq *vlr-settings* nil)
	 ) ;_ end of progn
       ) ;_ end of if
     )
    ) ;_ end of cond
  ) ;_ end of defun
Я четко понимаю, что на меня сейчас накинутся, что "функцию дополнительную можно было бы вколотить", что "указывать надо весь код, а не раскидывать его по просторам инета" и т.д.
Говорю сразу - писалось "на коленке". Со всеми вытекающими.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.03.2006, 11:51
#46
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


Попробывал,получил следующее:при загрузке-Command: _appload ; error: bad argument type: stringp nil,
проигнорировав и при попыке проставить размер-
Command: _dimradius ; error: no function definition: VLA-PUT-00000

Select arc or circle:
Dimension text = 24.5
Specify dimension line location or [Mtext/Text/Angle]: ; error: bad argument
type: stringp nil
getr вне форума  
 
Непрочитано 03.03.2006, 12:03
#47
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


1. Функцию подгрузки типа линии закинул? Ссылка: http://www.autocad.ru/cgi-bin/f1/board.cgi?t=22730iW
2. Почему-то в коде после копирования вместо vla-put-freеze получилось vla-put-00000.
В общем, чтоб не было мучительно больно - см. приложение.
[ATTACH]1141376632.rar[/ATTACH]
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.03.2006, 14:10
#48
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


Пусть будет сначала "мучительно больно",главное чтобы потом было приятно. Попробовал еще раз-на первый взгляд все отлично,но надо бы поработать подольше,-вдруг вылезет какая-нито бяка.Но внутренний голос говорит,что все нормалек.Спасибо,kpblc!!!
P.S.Видимо незря ник-крыс,-крысы они очень умные животные.Даже по гороскопу есть умные крысы(напр.рожденные в 1960году).Не удержался и подольстился.Уж очень хотелось,чтобы эта идея с распределением по слоям нашла реальное решение.
getr вне форума  
 
Непрочитано 03.03.2006, 14:18
#49
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Хехе, тут на самом деле до дури еще доделывать по идее надо. Смотри. Настройки слоев сейчас задаются напрямую в реакторе, что не есть гуд. Такие вещи лучше хранить где-нибудь в отдельном месте, докуда легко добраться и программисту, и пользователю. Да еще и сохранять их тоже где-то надо. И, потом, там сейчас отслеживаются только размерные команды, команды штриховок и простановки текста. А этого мало.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.03.2006, 15:05
#50
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


Насчет доделать-это уже сложнее.О лиспе у меня лишь самые элементарные понятия.Вот заметил,как мне кажется,очепятку там где настраивается слой штриховки:LW стоит 00,а япоставил 20,-и то уже хорошо.А вот зачем подгружать линии я не понимаю,ведь и размеры и текст и штриховка испоьзует Continuous,но раз надо так надо.А насчет того,что мало отслеживается команд,для меня это основные и пока хватит надолго.Спасибо еще раз.
getr вне форума  
 
Непрочитано 03.03.2006, 15:33
#51
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Ну вот захотелось мне показать такой вариант, это просто левая пятка не вовремя зачесалась
Насчет команд - смотри, а если, допустим, ты все рисуешь полилиниями, а отрезками - осевые? Тогда на команду "line" (это полное имя команды) создаешь новый слой с подгрузкой типа линии center из текущего lin-файла.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.03.2006, 16:27
#52
Valuta


 
Регистрация: 10.02.2006
Екатеринбург
Сообщений: 18


Спасибо создателям и всем, приложившим руку, от наших теток за возможность не думая, раскидывать размеры и штриховку в нужный слой... :!:
Пищат от восторга...
(Жаль только с текстом не совсем подходит...)
Valuta вне форума  
 
Непрочитано 03.03.2006, 16:32
#53
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


А что такого с текстом не проходит?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.03.2006, 17:15
#54
pyatifan


 
Регистрация: 29.10.2005
Нижегородская обл.
Сообщений: 219
<phrase 1=


От меня тож спасибо...уверен наши тётьки тож будут рады, да и самому пригодится. Самый успешный вариант в 47 посте. Загрузил файл и вырезал оттуда код про линии, ато 2 инструмента в одном получается. Проблемы getr у меня нет, т.к. лиспов, использующих свои установленные слои в моей коллекции нет.

>kpblc, этот код к линиям наверняка хорош, но у меня не получается им воспользоваться в полной мере. Тока типа таких линий (_kpblc-linetype-load "center" nil) и грузит из файла acadiso.lin Если не трудно расскажи поподробнее как фигануть линии из своего файла; в поддержку я его положил. Вообще была идея пользоваться макросом типа "^C^C-linetype s имя_лини", но линии должны быть уже подгружены в чертёж. И вообще такой макрос фигня, т.к. бывает нужна тока пара тройка линий сварки из десятка. Есть идея сделать вариант выбора линии: типа если линия есть в чертеже, то вставить-если нет в чертеже, то подгрузить. А каждый раз тянуться за ними как в слои для размеров к примеру тож не хоца.

на том сайте сложности с регистрацией...
pyatifan вне форума  
 
Непрочитано 06.03.2006, 10:16
#55
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


> pyatifan : На каком сайте сложности с регистрацией?
Так, насчет линий. Например, есть файлы defined.lin и defined.sh*, лежащие в одном месте. К примеру, у тебя там болтается описание типа линии "ГП-КранПуть" (имя от балды взял). Тогда вызвать функцию для подгрузки типа линии можно так:
(_kpblc-linetype-load "ГП-КранПуть" "defined.lin")
В качестве внутреннего списка (который лежит внутри определения функции) можно не прописывать пары соответствия для английской и русской версий - имена-то одинаковые.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.03.2006, 10:17
#56
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 361
<phrase 1=


->kpblc
Насчет реакции на команду Line,-врядли это удобно.Если например надо начертить штриховую,то она тогда тоже окажется на слое осевых.А вот если будет программа реагировать на тип выбираемой линии из Linetype Control и разносить послоям,тогда есть смысл.Выбрал штриховую,начертил ее с помощью Line или PLine,-легла в свой слой;выбрал сварку,-также легла куда надо(но тут уже надо будет реакция на несколько типов линий).Программа усложнится и вряд ли захочется (или найдется время) ее усовершенствовать.Но уже на этом этапе,как показывают отзывы,народ доволен и даже очень.Впрочем как и я.
getr вне форума  
 
Непрочитано 06.03.2006, 10:33
#57
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


> getr : Ну я ж так, для примеру... На самом деле смотри - можно поставить реактор на начало команды сохранения (SAVE, QSAVE) - с выполнением полной чистки чертежа, например. И назначения всем примитивам одного текстового и размерного стиля, к примеру.
На DWGPROPS - вызов собстсвенного окна, к примеру. Да мало ли что можно сделать...
А насчет линии на свой слой тут имхо проще надо сделать - делаем слой, запоминаем текущие установки, делаем свой слой со своим типом линии, цветом и весом; рисуем; возвращаем все обратно.
Такие вещи проще всего повесить в отдельный лисп, а инструмент закинуть на toolpalette (ЯТД). И множить инструменты, меняя 1-2-3 входных параметра. Естественно, что требуется дополнительно прописывать обработчик ошибок, назначать его и прочая.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.03.2006, 22:02
#58
pyatifan


 
Регистрация: 29.10.2005
Нижегородская обл.
Сообщений: 219
<phrase 1=


Клёво. Спасиб И чё я сразу не догадался...в файле вроде чёрным по-белому написано (defun _kpblc-linetype-load
(ltype-name ltype-file
Соответствие наименований линий как я понял это замена на русские названия линий в файле, но не получается:
(_kpblc-linetype-load "скрытая" nil)
выводит nil, но это в принципе не особо страшно, т.к. всё равно на кнопке что угодно можно фигануть.
Я всётаки хотел довести ету идею до ума...т.е. пока получается мне нужно совершить 2 действия:
-загрузить линию из файла в чертёж (за что ещё раз спасибо),
-и вставить её в чертёж глупым макросом;
Хотелось бы одним щелчком, не знаю как грамотно дописать это всё...т.е. эхо вывод фигануть и т.п. да и lisp пока для меня не початый край.
Как ни крути, одна фигня за лисп садиться надо
pyatifan вне форума  
 
Непрочитано 07.03.2006, 09:38
#59
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


> pyatifan : А в acadiso.lin есть описание линии "скрытая"? Если нет, то в качестве второго параметра передавай имя lin-файла с описанием этого типа линии.
Теперь насчет остального. Как пример. Пишу на коленке, т.к. работы много. За корявость прошу не судить особо строго.
Код:
[Выделить все]
;|=============================================================================
*    Функция рисования полилинии по точкам, указанным пользователем.
*    Параметры вызова:
*	param-list	список точечных пар вида
*			'("name" . "LayerName")	; имя слоя, на котором рисуется
*						; полилиния. Если слоя нет, он
*						; создается. Если слой есть,
*						; выполняются его настройки
*						; слой размораживается
*			("color" . 3)		; цвет слоя. nil -> 7
*			("lt" . "hidden")	; тип линии слоя. nil -> Continuous
*			("ltfile" . "defined.lin")	; имя файла с определением
*						; типа линии. nil -> acadiso.lin
*			("lw" . aclnwt050)	; вес линии слоя. nil 0> aclnwt025
*		)
*    Если один из параметров пропущен, он устанавливается в текущее значение.
*    Недостающие функции можно взять, например, здесь:
* http://www.arcada.com.ua/forum/viewtopic.php?t=445
=============================================================================|;
(defun _kpblc-draw-pline (param-list / adoc *error* layer_list)
  (vl-load-com)
  (setq	adoc	(vla-get-activedocument (vlax-get-acad-object))
	*error*	kpblc-error
	) ;_ end of setq
  (vla-startundomark adoc)
  (if (assoc "layer" param-list)
    (progn
      (setq layer_list (cdr (assoc "layer" param-list)))
					; сделано для собственного удобства.
					; Многим не понравится :)
      (kpblc-error-save-sysvar
	(list (list "clayer"
		    (if	(cdr (assoc "name" layer_list))
		      (vla-get-name (_kpblc-layer-create layer_list))
		      (getvar "clayer")
		      ) ;_ end of if
		    ) ;_ end of list
	      (list "cecolor"
		    (if	(cdr (assoc "color" layer_list))
		      (vla-get-color (_kpblc-layer-create layer_list))
		      (getvar "cecolor")
		      ) ;_ end of if
		    ) ;_ end of list
	      (list "celtype"
		    (if	(cdr (assoc "lt" layer_list))
		      (vla-get-linetype (_kpblc-layer-create layer_list))
		      (getvar "celtype")
		      ) ;_ end of if
		    ) ;_ end of list
;;; Ну и так далее. Просто не пишу, поскольку со временем напряг.
	      ) ;_ end of list
	) ;_ end of kpblc-error-save-sysvar
      ) ;_ end of progn
    ) ;_ end of if
  (command "_.pline")
  (while (/= (logand (getvar "cmdactive") 31) 0)
    (command pause)
    ) ;_ end of while
  (kpblc-error-restore-sysvar)
  (vla-endundomark adoc)
  ) ;_ end of defun
Обрати внимание, что параметры вызова функции этой и функции _kpblc-layer-create совпадают! Без этого нормальной работы так легко будет уже не добиться.
Теперь собственно вкусности: макрос на выполнение:
Код:
[Выделить все]
^C^C(defun c:m-pline() (_kpblc-draw-pline '(("name" . "Скрытые") ("color" . 4) ("lt" . "Скрытые") ("ltfile" . "c:\\cad\\adds\\defined.linЭ))));m-pline;
Пишу в запарке и мыле, так что если что не сработает, обязательно сообщи, попробую исправить (код проверять на полную работоспособность нет времени совсем :().
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.03.2006, 16:29
#60
SkiFF

ГИПую, Конструирую, считаю, черчу
 
Регистрация: 18.01.2006
В поиске места работы и жительства
Сообщений: 143
<phrase 1= Отправить сообщение для SkiFF с помощью Skype™


Из 25-го сообщения

Цитата:
Сообщение от VVA
[code];;; Автор идеи Torino, он же Кочетков Андрей
;;;Автоматический перенос размеров на слой "размеры"
;;;и заливки на слой "заливка"
................................................................
Не могу понять. При установки лиспа в автозагрузку отключается команда UNDO. Вернее отмена происходит только один раз. Изменение установок команды UNDO к результату не приводит. Только удаление из автозагрузки лиспа востанавливает положение дел. Что делать? лисп то хороший.
__________________
Строишь завод, проводишь реактора испытание?
грохнется иль долбанет - дважды проверь заранее!
SkiFF вне форума  
 
Непрочитано 12.03.2006, 17:19
#61
Серёга - Bilder

проектирование гидротехнических сооружений
 
Регистрация: 20.02.2006
Москва
Сообщений: 5,022


Люди, я в LISPе полный 0, но почитав тут Ваши посты меня заинтересовала тема... Посоветуйте, что почитать можно по LISPу для просвещения и возможно практического применения?

Ещё вопрос: т.к. я всегда работаю с одним набором слоёв, стилями текста и размеров - возможно-ли сделать как-нибудь чтоб автоматически при создани нового файла там создавались требуемые стили текста и размеров, ну и слои разумеется? - если не сложно, объясните мне-чайнику (ох губищи-то я раскатал )
Серёга - Bilder вне форума  
 
Непрочитано 12.03.2006, 20:12
#62
Aragorn

Продажа навыков и умений
 
Регистрация: 20.11.2004
Сибирь
Сообщений: 2,498


Если совсе просто, то без знания лиспа можно сделать блок, в котором есть все необходимые слои, занести его на tool pallete и при создании чертежа просто вставлять его. (Ну это если совсем просто)
[ATTACH]1142183579.dwg[/ATTACH]
Aragorn вне форума  
 
Непрочитано 12.03.2006, 20:17
#63
Серёга - Bilder

проектирование гидротехнических сооружений
 
Регистрация: 20.02.2006
Москва
Сообщений: 5,022


Ну в том-то и дело, что сейчас я так и поступаю... а всё-таки охота быть не совсем чайником Если не сложно - объясните что к чему
Серёга - Bilder вне форума  
 
Непрочитано 13.03.2006, 08:38
#64
Кочетков Андрей

Java/Kotlin/Go
 
Регистрация: 03.02.2006
Сообщений: 5,786


>>Серёга - Bilder
Если совсем просто, то надо создавать чертеж из шаблона с предустановленными параметрами
А на тему изучения Лиспа уже было. Поищи.
Примерные названия тем: "Литература по Лиспу", "Начинаю изучать Лисп" и т.д.
Кочетков Андрей вне форума  
 
Непрочитано 13.03.2006, 08:48
#65
Valuta


 
Регистрация: 10.02.2006
Екатеринбург
Сообщений: 18


Для 2004 - "Undo" работает на последнюю коменду, а в 2005-2006 - все нормально....
И при выходе из AutoCADa, даже если save давил, все равно запрашивает о сохранении файла...
Valuta вне форума  
 
Непрочитано 13.03.2006, 08:50
#66
Valuta


 
Регистрация: 10.02.2006
Екатеринбург
Сообщений: 18


Цитата:
Сообщение от kpblc
А что такого с текстом не проходит?
Просто слоев с тексом порядка 3 штук....
Valuta вне форума  
 
Непрочитано 13.03.2006, 09:06
#67
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Хе, так там тогда в коде надо снимать обработку команды *text - чтоб на это дело не реагировало.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.03.2006, 10:47
#68
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


>SkiFF №60
>Valuta
Цитата:
Для 2004 - "Undo" работает на последнюю коменду, а в 2005-2006 - все нормально....
Похоже, что это глюк 2004. Т.к. в 2002, 2005-2006 все нормальню.
>SkiFF №60 Или мириться, или менять версию...
ЗЫ Причем слет команды UNDO получается на этот код
Цитата:
(vlr-command-reactor nil '((:vlr-commandEnded . endCommand)))
ЗЫЗЫ Пока экспериментировал лисп с №47 начал работать. Undo в 2004 отменяется [sm2100]
VVA вне форума  
 
Непрочитано 13.03.2006, 10:52
#69
Valuta


 
Регистрация: 10.02.2006
Екатеринбург
Сообщений: 18


Цитата:
Сообщение от kpblc
Хе, так там тогда в коде надо снимать обработку команды *text - чтоб на это дело не реагировало.
Пришлось так сделать...А в остальном - очь-очь хорошо
Valuta вне форума  
 
Непрочитано 13.03.2006, 10:54
#70
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Ну народ, я ж писал под конкретную задачу...
> VVA : А это на моем коде было? В смысле - некорректная обработка окончания команды? Или там несколько реакторов было, и они между собой все договориться не могли?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.03.2006, 11:24
#71
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


>kpblc В 2004 при использовании лиспа №25 слетает UNDOCTL в 1, причем если закоментарить (vlr-command-reactor nil '((:vlr-commandEnded . endCommand))), то все нормально. Я когда убедился, закрыл документ с загруженным №25 (не автокад), открыл новый, загрузил №47 - точно также. Возможно, надо было закрыть Acad. Т.к. потом у меня №47 отрабатывает без проблем.
VVA вне форума  
 
Непрочитано 13.03.2006, 11:53
#72
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


На уровне предположения - мои функции обрабатывают одни и те же команды, что и прописывается внутри. У тебя же - все вместе. Попробуй в своих дополнительную проверку поставить на выполняемые команды.
А вообще-то UNDOCTL, судя по документации, read-only, так что каким таким манером оно поменялось, до меня не доходит.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.03.2006, 13:29
#73
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


>SkiFF №60 Подправил лисп в посте №25. Теперь UNDO в 2004 должно отрабатывать по полной программе (по крайней мере у меня работает)
>kpblc и всем кому интересно, этот глюк происходил, если в ф-ции, отрабатывающей на окончание команды слой восстанавливался без анализа имени команды, а при налии глобальной переменной.
Как только вставил if и проверку на имя команды все заработало :evil: Ты был прав [sm206]
Цитата:
(if (or
(wcmatch cmd_name "*HATCH*") ;_Если выполнается команда DIM*
(wcmatch cmd_name "DIM*") ;_Если выполнается команда *HATCH*
(wcmatch cmd_name "*TEXT") ;_Если выполнается команда *TEXT (TEXT DTEXT)
)
(progn
(if *OldLayer* (setvar "clayer" *OldLayer*))
(setq *OldLayer* nil)
))
VVA вне форума  
 
Непрочитано 31.03.2006, 08:53
#74
Valuta


 
Регистрация: 10.02.2006
Екатеринбург
Сообщений: 18


Еще один нюансик при автопереносе размеров в свой слой: при выполнении команды "qdim"(быстрый размер) вся размерная цепочка помещается в текущий слой, а хотелось, чтобы в нужный...
Valuta вне форума  
 
Непрочитано 31.03.2006, 09:18
#75
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Для какого кода не срабатывает? Только что специально проверил код из №47, все нормально проходит, даже на пустом файле
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.03.2006, 10:17
#76
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


>kpblc,
Я тут с вашей подачи начал баловаться реакторами и добаловался до интересной задачки. Требуется перевести блок, имя которого входит в заранее определенный список на специфический слой, определяемый другим примитивом, с котоым этот блок обретает общую точку. Проблема - в идетнификации последнего измененного объекта. Если блок вставляется insert-ом или копируется - проблем нет, потому как entlast [sm154]. А вот если он просто передвинут (move) или использован для удлинения/обрезания линии, то тады ой [sm2100]. Короче - люди добрые [sm1400].
Лентяй вне форума  
 
Непрочитано 31.03.2006, 10:23
#77
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Может быть, попробовать (vla-pickfirstselectionset) - он же хранит в себе выделенные объекты?
И я не очень понял необходимости применения именно реакторов для такой задачи. Хотя... Если на команды _.move, _.copy, _.insert повесить, то можно и использовать. А вставку блока все одно производить можно выполнять лиспом и сразу на него давать все необходимое. Я бы, по крайней мере, так поступал.
---
P.S. Хм, кажется, я начинаю клонироваться - меня становится много
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.03.2006, 11:02
#78
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


[quote="kpblc"]Может быть, попробовать (vla-pickfirstselectionset) - он же хранит в себе выделенные объекты?
Мерси, завтра попробую.
Цитата:
И я не очень понял необходимости применения именно реакторов для такой задачи. Хотя... Если на команды _.move, _.copy, _.insert повесить, то можно и использовать.
А еще "TRIM" и "EXTEND".
Цитата:
А вставку блока все одно производить можно выполнять лиспом и сразу на него давать все необходимое. Я бы, по крайней мере, так поступал.
Ответы на простые вопросы я знаю сам
---
Цитата:
P.S. Хм, кажется, я начинаю клонироваться - меня становится много
Хорошего человекв должно быть много [sm155]
Лентяй вне форума  
 
Непрочитано 31.03.2006, 11:12
#79
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Цитата:
Сообщение от Лентяй
Ответы на простые вопросы я знаю сам
Я не сумлеваюсь ни единой секунды. И не только на простые, я полагаю, а?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.11.2006, 09:19
#80
wolt


 
Регистрация: 28.08.2006
Новосибирск
Сообщений: 17


А каким образом добавить вес линии вот в такую команду?
(vl-cmdf "_layer" "_make" "ШТРИХОВКА" "_color" 50 "" "") ;_Создаем слой и задаем цвет 50
wolt вне форума  
 
Непрочитано 15.11.2006, 09:29
#81
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Вес линии для слоя? Или установить celweight?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.11.2006, 09:37
#82
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


wolt
Код:
[Выделить все]
(vl-cmdf "_layer" "_make" "ШТРИХОВКА" "_color" 50 "" "LWeight" 0.25 "" "")
Krieger вне форума  
 
Непрочитано 15.11.2006, 09:41
#83
wolt


 
Регистрация: 28.08.2006
Новосибирск
Сообщений: 17


Цитата:
Сообщение от Krieger
wolt
Код:
[Выделить все]
(vl-cmdf "_layer" "_make" "ШТРИХОВКА" "_color" 50 "" "LWeight" 0.25 "" "")
Открыл автокад -руганулся при создании файла
Говорит:"Неправильное ключевое слово."

Автокад с официальной русской локализацией

Понял почему, надо подчёркивание добавить: "_LWeight" 0.25 тогда не ругается

Большое спасибо!
wolt вне форума  
 
Непрочитано 15.11.2006, 09:43
#84
wolt


 
Регистрация: 28.08.2006
Новосибирск
Сообщений: 17


Цитата:
Сообщение от kpblc
Вес линии для слоя? Или установить celweight?
Да, наверно вес линии, чтобы при создании он был не "Обычный", а например толщиной 0.13
wolt вне форума  
 
Непрочитано 15.11.2006, 10:06
#85
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


> wolt : ты пожалуйста, не обижайся, но диалог наш с тобой выглядит примерно:
Цитата:
"Как писать - так или так?"
"Да!"
Вес линии должен быть на слой установлен? Тогда рецепт от Krieger. Вес линии для новых объектов должен быть назначен, независимо от слоя? Тогда играйся с celweight.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.11.2006, 10:16
#86
wolt


 
Регистрация: 28.08.2006
Новосибирск
Сообщений: 17


Цитата:
Сообщение от kpblc
> wolt : ты пожалуйста, не обижайся, но диалог наш с тобой выглядит примерно:
Цитата:
"Как писать - так или так?"
"Да!"
Вес линии для новых объектов должен быть назначен, независимо от слоя? Тогда играйся с celweight.
О как, просто не знал что и так можно... Ну а про то, что не очень понятно ответил... я просто не знаю за что отвечает команда celweight.
wolt вне форума  
 
Непрочитано 15.11.2006, 10:21
#87
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Из справки:
Цитата:
CELWEIGHT Системная переменная
Тип: целый
Сохранен в: рисунок
Начальное значение: -1
Установка вес линий для новых объектов. .
-1 Установка значения "ПОСЛОЮ" для веса линий.
-2 Установка значения "ПОБЛОКУ" для веса линий.
-3 Установка значения "ОБЫЧНЫЙ" для веса линий. Значение веса "ОБЫЧНЫЙ" контролируется системной переменной LWDEFAULT.
Другие допустимые значения 0, 5, 9, 13, 15, 18, 20, 25, 30, 35, 40, 50, 53, 60, 70, 80, 90, 100, 106, 120, 140, 158, 200 и 211.
Значения выражаются в сотых долях миллиметра. Для преобразования веса линий, выраженного в британской системе единиц, необходимо умножить его значение на коэффициент 2.54.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.11.2006, 10:26
#88
wolt


 
Регистрация: 28.08.2006
Новосибирск
Сообщений: 17


Цитата:
Сообщение от kpblc
Из справки:
Цитата:
CELWEIGHT Системная переменная .....
Спасиба.
wolt вне форума  
 
Непрочитано 16.10.2007, 15:23
#89
СерJант

Инженер
 
Регистрация: 12.10.2007
Россия, Энгельс
Сообщений: 27


Всем здрасте. Спасибо за вашу работу, очень классно!!!! Особое спасибо за посты 23 и 25!
Не совсем понял вот эту концовку:

(wcmatch cmd_name "*HATCH*") ;_Если выполнается команда DIM*
(wcmatch cmd_name "DIM*") ;_Если выполнается команда *HATCH*
(wcmatch cmd_name "*TEXT") ;_Если выполнается команда *TEXT (TEXT DTEXT)

Почему такое следование, HATCH когда выполнается команда DIM
DIM Если выполнается команда *HATCH*

Со звездочками разобрался

Еще вопрос! Можноли назначать теже функции, настройки по слоям на кнопки СПДС и Прожект Студио? Наблидается некоторая несовместимость Прожект Студио с СПДС, можноли програмными методами убрать это, т.е может кто нибудь написать лисп, а именно что хотелосьбы,
1. убрать панель масштаба Прожект студио, чтобы не просто вид его пропал а просто убрять его функционал. Чтобы масштаб использовался только СПДСный.
2. Убрать размерные стили Прожекта полностью, чтобы все размерные стили использовались от СПДС
3. Отключить в Прожекте функцию округления десятичных значение, т.е. по умолчанию в Автокаде стоит четыре нуля после запятой, а прожек показывает только целочисленные значения

Сие дело возможно реализовать???

Последний раз редактировалось СерJант, 19.10.2007 в 12:33.
СерJант вне форума  
 
Непрочитано 16.10.2007, 16:24
#90
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


по п.1 просто перепутаны коментарии
Сию конструкцию
Код:
[Выделить все]
(or
      (wcmatch cmd_name "*HATCH*") ;_Если выполнается команда *HATCH*
      (wcmatch cmd_name "DIM*")    ;_Если выполнается команда DIM
      (wcmatch cmd_name "*TEXT")   ;_Если выполнается команда *TEXT (TEXT DTEXT) 
      )
Можно заменить
Код:
[Выделить все]
(wcmatch cmd_name "*HATCH*,DIM*,*TEXT")
VVA вне форума  
 
Непрочитано 19.10.2007, 11:30
#91
СерJант

Инженер
 
Регистрация: 12.10.2007
Россия, Энгельс
Сообщений: 27


Ребят а если использовать в качестве изменения типа линий команду _LineType
Что нибудь можно придумать, а то ког больно сложный , не разобрался.
Пробовал прописать в код из поста №45 _LineType, не чего не получилось , пишет ошибку, помогите пожалуста.
СерJант вне форума  
 
Непрочитано 07.11.2007, 10:01
#92
nazarkoo


 
Регистрация: 27.10.2007
Сообщений: 45


Я полный "0" в LISPе. Пожалуйста разьясните по шагово как ето зделать. (Что куда записать, что как открыть)
Заранее очень благодарный.
nazarkoo вне форума  
 
Непрочитано 07.11.2007, 10:26
#93
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


dwg.ru/art/8
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.11.2007, 08:40
#94
nazarkoo


 
Регистрация: 27.10.2007
Сообщений: 45


>Кулик Алексей aka kpblc : Очень благодарный!!!
nazarkoo вне форума  
 
Непрочитано 09.11.2007, 09:08
#95
nazarkoo


 
Регистрация: 27.10.2007
Сообщений: 45


Подскажите как можна к даному LISPу подключить команди и функции СПДС.
nazarkoo вне форума  
 
Непрочитано 12.09.2008, 15:32
#96
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


Здравствуйте.
Я давно пользуюсь лиспом из #47, за что огромное спасибо его содателям. Как то в инете нашел похожий лисп и вот решил поднять старую тему. В этом лиспе есть некоторые полезные функции, которые не реализованы в программе kpblcа, а так хотелось бы их иметь. Например перенос автокадовской выноски на слой Dim2. Проблема только в том, что этот липс создает слои с англ. названиями и типом линий по умолчанию. Что бы не плодить новые слои в старых чертежах хотелось бы иметь возможность изменить настройки слоя: цвет, вес линий, название слоя. Пробывал просто переписать в тексте программы название слоя (в лиспе из #47 это проходит) - автокад выводит на экран палитру цветов и просит указать цвет, только после этого лисп начинает работать. Вопрос: как изменить код чтобы можно было менять настройки создаваемых слоев. Подозреваю, что придется править (или создать новый) файл VRL-Manager.fas, но как - я не знаю.
В принципе, можно добавить эти функции (перенос выноски, видовых экранов и маркера центра на свои слои) из этого лиспа в код kpblса, отличная программа получится.
Вложения
Тип файла: zip autolay.zip (6.7 Кб, 220 просмотров)
andrew_ro вне форума  
 
Непрочитано 12.09.2008, 19:05
#97
Красин


 
Регистрация: 05.09.2008
Сообщений: 24


Я не думаю, что тут нужно программирование и всякие там замороченые реакторы.
Для таких целей применяйте Tool Palettes (инструментальные палитры)
Я все графические примитивы, блоки и размеры и почти все лиспы ввожу с Tool Palettes (окно инструментальных палитр CRL+3). Можно задать все свойства: от слоя до динамических свойств динамических блоков. Начните копировать и вставлять инструменты с палитры под названием "инструменты-команды" (command tools). Там имеется рисовальные команды меню "рисование", штриховки, таблица, размеры и даже выражение Lisp и что примечательно: примитивы, которые создаются этим Lisp-ом автоматически наследуют все свойста от свойств команды. Настройка команды - по правому щелчку мыши выбираете "Свойства" (properties).
Читайте справку по Tool Palettes , потому что это удивительно удобная и мощная вещь, с помощью которой я помещаю все объекты на свои слои. На каждый слой - по палитре.
Для блоков можно задать масштаб и его зависимость от переменной dimscale, что обеспечивает автоматическое масштабирование блоков в зависимости от масштаба вывода на печать.
Мне также нравится возможность помещать любое лисп-выражение, макрокоманду - это моментальное создание своей кнопки.
Любому инструменту на палитре можно задать свою картинку.
Красин вне форума  
 
Непрочитано 12.09.2008, 19:47
#98
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Ну, это не для "клавишников".
Profan вне форума  
 
Непрочитано 12.09.2008, 20:21
#99
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от Красин Посмотреть сообщение
это удивительно удобная и мощная вещь, с помощью которой я помещаю все объекты на свои слои. На каждый слой - по палитре.
Например, меня сотня слоев. Значит, сотня палитр... Параллельно делается другой чертеж. В нем своя сотня, не всегда совпадающая с первой сотней. Ну, сутрировал немного, как и ты, верно?
.
Цитата:
Любому инструменту на палитре можно задать свою картинку.
Опиши технологию, пож. А еще лучше если создашь тему о палитрах и продублируешь свое сообщение туда, и мой вопрос тоже захвати
Vova вне форума  
 
Непрочитано 12.09.2008, 20:52
#100
Красин


 
Регистрация: 05.09.2008
Сообщений: 24


Цитата:
Сообщение от Vova Посмотреть сообщение
Например, меня сотня слоев. Значит, сотня палитр... Параллельно делается другой чертеж. В нем своя сотня, не всегда совпадающая с первой сотней. Ну, сутрировал немного, как и ты, верно?
Абсолютно верно, за ислкючением того, что на палитре можно размещать flyoutы - кнопки с треугольничком, которые вмещают определенную панель инструментов. И при этом именно через палитры реализован интерфейс в Autodesk Building Systems 2006, MEP 2008. Там для каждого направления свой набор палитр: архитектурные, ОВэшные, ВК-шные. Создать свой набор палитр можно в настройках: правой клавишей по синей полоске, Custromize palettes, в правой половине диалога - наборы палитр. Переключаться между наборам тоже по правому клику ставишь галочку напротив своего.
С реакторами тоже не все просто будет, если число слоев перевалит за сотню, мне так кажется
Цитата:
Сообщение от Vova Посмотреть сообщение
Опиши технологию, пож. А еще лучше если создашь тему о палитрах и продублируешь свое сообщение туда, и мой вопрос тоже захвати
Если будет время, с большим удовольствием это сделаю, пусть я и не эксперт, вдруг кому пригодится.
Цитата:
Ну, это не для "клавишников".
Ну может быть, но мы все, даже самые закоренелые клавишники, указываем точки и примитивы на чертеже с помощью мыши, не так ли?
Красин вне форума  
 
Непрочитано 12.09.2008, 22:55
#101
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


На палитрах штатными средствами AutoCAD можно разместить строго определенные Flyout'ы. Для создания собственных надо капитально ломать голову и, по-моему, использовать как минимум dll, подгружаемые через _.netload или ObjectARX. И, по-моему, в "чистом" autoCAD'e далеко не каждому инструменту можно назначить "любую" кнопку.
Ты, по-моему, немного не договариваешь о группировке палитр. Кстати, все эти вопросы уже поднимались на форуме (по-моему, в теме по играм с CUI).
---
По #96 : увы и ах, сейчас капитально не хватает времени на исправление. Может, кто из зубров подключится...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.09.2008, 10:05
#102
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


Да, видимо работы у всех действительно много. Будем ждать зимы.
Всем спасибо.
andrew_ro вне форума  
 
Непрочитано 20.09.2008, 16:30
#103
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от Красин Посмотреть сообщение
Если будет время, с большим удовольствием это сделаю, пусть я и не эксперт, вдруг кому пригодится.
Я напоминаю о твоем обещании и надеюсь, что время найдется. Итак, как сделать в палитре вылетающие кнопки? Как сделать картинки? Я знаю про картинки только через CUI
Vova вне форума  
 
Непрочитано 20.09.2008, 18:20
#104
Красин


 
Регистрация: 05.09.2008
Сообщений: 24


Цитата:
Сообщение от Vova Посмотреть сообщение
Я напоминаю о твоем обещании и надеюсь, что время найдется. Итак, как сделать в палитре вылетающие кнопки? Как сделать картинки? Я знаю про картинки только через CUI
Про создание картинок:
1) Если есть талант художника: рисуете квадрат в Автокаде, в этот квадрат вписываете свою картинку обычными примитивами автокада.
2) создаете из того, что вы вписали в квадрат, блок с характерным названием <название>, чтобы потом его найти.
3) сохраняете чертеж
4) перетаскиваете вхождение созданого вами блока на палитру. По успешному помещению этого блока на палитру автокад создает в папке ToolPallette\Pallettes\Images два рисунка в формате PNG с названиями <название>32.png и <название>64.png. Путь к ToolPallette можно посмотеть в Options на вкладке Files->Tool Pallettes File Location.
5)выделяте на tool pallette свой lisp, правым кликом вызываете контекстное меню, выбираете пункт Specify image.. - должен появиться стандартный диалог выбора файла с допустимыми расширениями gif,jpeg,bmp,png и открыться по умолчанию он должен именно в папке ToolPallette\Pallettes\Images. Указываете любую из созданных в п.4 картинок - и все: вместо стандартной картинки с листом бумаги со скобками и надписью LISP на нем появляется ваша иконка.

В принципе, картинку можно подготовить в любом графическом редакторе, но так как вы владеете авткадом, проще нарисовать в нем.
Блок нужен только для генерации картинки.

С вылетающими кнопками я погорячился, похоже, в автокаде все два предустановленных флайоута - с командами рисования и с размерами. Я даже не знаю пока, есть ли возможность создать дополнительные.
Я также думаю, что народ, который постился в теме "игры с CUI" знаем по-более моего, так что следите за новыми сообщениями там.


Чтобы создать свой лисп на палитре, перетащите туда любой примитив типа линии, текста из риснунка, зайдете в свойства созданного инструмента (properties в контекстном меню по правому клику ), выставьте use flyout в No, а Command string - ваш лисп или макрос. Можно перетащить на палитру команду из диалога настройки CUI

Последний раз редактировалось Красин, 20.09.2008 в 18:33.
Красин вне форума  
 
Непрочитано 09.10.2008, 04:22
#105
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


VVA, а можно дополнить лисп №25 еще 2 элементами:
Перенос _table в слой "Таблицы"
Перенос _mleader в слой "_Выноски"?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 09.10.2008, 10:16
#106
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


wetr, Обновил #25. С цветами слоев думаю сам разберешься
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 09.10.2008, 10:57
#107
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


VVA, отлично все работает!!!
Но есть 2 момента.
1) Реактор не срабатывает при вставке таблицы с помощью лиспа "vrc.lsp"
2) Реактор не срабатывает при вставке таблицы с помощью _dataextraction
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 09.10.2008, 12:39
#108
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


wetr, Реактор срабатывает на команду (например _table), а таблица в vrc вставляется с помощью vla-* методов. Реактор никоим способом ее не видит. Здесь нужно назначать слой таблицы в vrc.
Предлагаю использовать или ф-цибю Алексея _kpblc-layer-create из #47 или ее модификацию _dwgru-layer-create
Отличия
Цитата:
* Добавлен новый параметр suff - суффикс слоя, если он есть, то имя слоя получаестся путем
* добавления к имени существующего слоя суффикса suff
Подробнее вызов описан в примечаниях
Тогда код из #25 может выглядеть так
Важно Необходима ф-ция _dwgru-layer-create отсюда http://dwg.ru/f/showpost.php?p=93168&postcount=3
Код:
[Выделить все]
;;;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;;; Необходима ф-ция _dwgru-layer-create отсюда http://dwg.ru/f/showpost.php?p=93168&postcount=3
;;; Автор идеи Torino, он же Кочетков Андрей 
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку

(vl-load-com)
(_dwgru-layer-create '(("name" . "Размеры")("color" . 1)))
(_dwgru-layer-create '(("name" . "Штриховка")("color" . 5)))
(_dwgru-layer-create '(("name" . "Текст")("color" . 6)))
(_dwgru-layer-create '(("name" . "Таблицы")("color" . 2)))
(_dwgru-layer-create '(("name" . "Выноски")("color" . 3)))
(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") ;_Если выполняется команда *TEXT (TEXT DTEXT) 
     (setvar "clayer" "Таблицы") 
    )
    ((wcmatch thecommandstart "*LEADER") ;_Если выполняется команда *QLEADER MLEADER
     (setvar "clayer" "Выноски") 
    )
    (t nil)) 
  (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))
А в vrc нужно добавить что-то типа такого :
Код:
[Выделить все]
;;; В переменной table vla-указатель на добавленную таблицу
(vla-put-layer table (vla-get-name(_dwgru-layer-create '(("name" . "Таблицы")))))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 09.10.2008, 13:48
#109
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Дело в том, что функция Алексея не работает в 2009 каде. Ну или я ее не смог запустить. Поместил в автогагрузку, а при создании нового файла пишет
Код:
[Выделить все]
AutoCAD menu utilities loaded.; error: no function definition: 
VLAX-GET-ACAD-OBJECT
Проверил в 2006 - код Алексея работает
Твой код работает на ура. Я потому к тебе и обратился.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 09.10.2008, 13:52
#110
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


wetr, Добавь в начало (vl-load-com) (лучше самой первой строкой автозагрузки (mnl или lsp файла)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 09.10.2008, 14:13
#111
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
wetr, Добавь в начало (vl-load-com) (лучше самой первой строкой автозагрузки (mnl или lsp файла)
ага, заработало.
И в эту функцию _dwgru-layer-create, тоже добавить пришлось.
Цитата:
Предлагаю использовать или ф-цию Алексея
Владимир, как скажешь!

А в чем отличия? Я заметил только, что реактор крыса создает слои только после выполнения команды, а твой сразу при загрузке нового файла
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 09.10.2008, 14:20
#112
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Про реакторы не скажу, не смотрел.
_dwgru-layer-create отличается от ф-ции Алексея только
Цитата:
* Добавлен новый параметр suff - суффикс слоя, если он есть, то имя слоя получаестся путем
* добавления к имени существующего слоя суффикса suff
Выполни
Код:
[Выделить все]
(_dwgru-layer-create '(("suff" . "_Проба")))
Запомни имя текущего слоя и посмотри на созданные слои
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 09.10.2008 в 17:56.
VVA вне форума  
 
Непрочитано 09.10.2008, 16:38
#113
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Спасибо, VVA. Теперь я знаю для кого пишут коменты в лиспах
Вот здесь попробовал - все получилось. Добавил еще непечатаемый слой "_Вспомогательные" реагирует на простановку _xline. И добавил обработку команды _dataextraction. Все работает вроде. Тьфу-тьфу, штоб не сглазить
В общем с меня пыво
Код:
[Выделить все]
(vl-load-com)
;;;================== Сервисные ф-ции BEGIN

;|
* Ф-ция str-str-lst
* Сервисная ф-ция извлечения из строки данных, разделенных
* каким либо символом или строкой символов
* Возвращает список строк
* Аргументы [Type]:
  str - строка для разбора [STRING]
  pat - разделитель [STRING]
*  Пример запуска
  (setq str "мы;изучаем;рекурсии" pat ";")
  (setq str "мы — изучаем — рекурсии" pat " — ")
  (str-str-lst str pat)
* Читать подробнее http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25113OT
|;
(defun str-str-lst (str pat / i)
  (cond ((= str "") nil)
        ((setq i (vl-string-search pat str))
         (cons (substr str 1 i)
               (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
         ) ;_  cons
        )
        (t (list str))
  ) ;_  cond
) ;_  defun
;|=============================================================================
*   На основе ф-ции _kpblc-layer-create
*   http://dwg.ru/forum/viewtopic.php?t=3116&start=45&sid=fab803bd4dbda125ffdc6c07563f682a
*   пост № 47
*   Добавлен новый  параметр  suff - суффикс слоя, если он есть, то имя слоя получаестся путем
*   добавления к имени существующего слоя суффикса suff
*   Создание слоя с указанными параметрами.
*   Параметры вызова:
*   layer-list   список параметров слоя вида:
   '(("name" . "TestLayer")   ; имя слоя. может быть пропущено, если указан suff
     ("color" . 3)         ; номер цвета. nil -> 7
     ("lw" . 50)         ; вес линии слоя. nil -> 25
*                          Оно выражается в сотых долях миллиметра и может быть любым
*                          из следующего ряда: 0, 5, 9, 13, 15, 18, 20, 25, 30, 35, 40, 50, 53, 60, 70,
*                          80, 90, 100, 106, 120, 140, 158, 200 и 211.
     ("lt" . "hidden")      ; тип линии слоя. nil -> Continuous
               ; Если описания типа линии в acadiso.lin
               ; нет, обязательно указывать следующий
               ; параметр
   ("ltfile" . "c:\\cad\\ltypes\\lt.lin")   ; полный путь к файлу с описанием
               ; типа линии. Если файл находится в путях
               ; поддержки, путь можно не указывать
   ("plot" . "y")         ; Печатать ("y") или нет ("n") слой.
               ; nil -> "y"
   ("suff" . "_Размеры")  ;_Добавляемый суффикс с текущему слою. Если задан, поле "name" игнорируется            
   )
*    Возвращает vla-указатель на созданный слой. Если слой существует, его
* настройки приводятся в соответствие с переданным списком.
*    Слой размораживается, разблокируется и включается. Не активируется.
* Примеры:
  (_dwgru-layer-create '(("name" . "Test")("color" . 1)("lw" . 50)))
* создать если нет и слой Test цветом 1 (красный) весом линии 0.5

=========================================================================|;

(defun _dwgru-layer-create (layer-list / vla_layer buf)
       (setq *MIP-CLAYER-PROP-SETTING*
     (list (cons "layer"
   (vla-get-activelayer (vla-get-activedocument (vlax-get-acad-object)))
   ) ;_ end of cons
    (cons "color" (getvar "cecolor"))
    (cons "lw" (getvar "celweight"))
    (cons "lt" (getvar "celtype"))
    ) ;_ end of list
    ) ;_ end of setq

  ;;;Если есть suff добавляем в начало списка,
  ;;;чтобы assoc нашел раньше
  (if (cdr(assoc "suff" layer-list))
    (progn
     (setq layer-list (vl-remove (assoc "name" layer-list) layer-list))
     (setq layer-list (append (list(cons "name" (strcat (getvar "clayer") (cdr(assoc "suff" layer-list))))) layer-list))
    )
  )
  (setq vla_layer
  (vla-add
    (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
    (if (snvalid (cdr (assoc "name" layer-list)))
        (cdr (assoc "name" layer-list))
        "0"
      )
    ) ;_ end of vla-add
 ) ;_ end of setq
  (vla-put-color
    vla_layer
    (if (setq buf (cdr (assoc "color" layer-list)))
      buf
      7
      ) ;_ end of if
    ) ;_ end of vla-put-color
  (vla-put-lineweight
    vla_layer
    (if (setq buf (cdr (assoc "lw" layer-list)))
      (if (member buf (list acLnWt000  acLnWt030  acLnWt090
    acLnWt005  acLnWt035  acLnWt100
    acLnWt009  acLnWt040  acLnWt106
    acLnWt013  acLnWt050  acLnWt120
    acLnWt015  acLnWt053  acLnWt140
    acLnWt018  acLnWt060  acLnWt158
    acLnWt020  acLnWt070  acLnWt200
    acLnWt025  acLnWt080  acLnWt211
    )
    )
    buf
    acLnWtByLwDefault
 )
      acLnWtByLwDefault
      ) ;_ end of if
    ) ;_ end of vla-put-lineweight
  (if (and (setq buf (cdr (assoc "lt" layer-list)))
    (_kpblc-linetype-load
      buf
      (cdr (assoc "ltfile" layer-list))
      ) ;_ end of _kpblc-linetype-load
    ) ;_ end of and
    (vla-put-linetype vla_layer (cdr (assoc "lt" layer-list)))
    (vla-put-linetype vla_layer "Continuous")
    ) ;_ end of if
  (vla-put-plottable
    vla_layer
    (if (= (cdr (assoc "plot" layer-list)) "n")
      :vlax-false
      :vlax-true
      ) ;_ end of if
    ) ;_ end of vla-put-Plottable
  (vla-put-lock vla_layer :vlax-false)
  (vla-put-layeron vla_layer :vlax-true)
  (if (not (equal (vla-get-activelayer (vla-get-activedocument (vlax-get-acad-object)))
    vla_layer
    ) ;_ end of equal
    ) ;_ end of not
    (vla-put-freeze vla_layer :vlax-false)
    ) ;_ end of if
  vla_layer
  ) ;_ end of defun

;;;================== Сервисные ф-ции END

;;; Реактор

(or *kpblc-activedoc*
  (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))))

(setq VLR-react (VLR-SysVar-Reactor nil (list '(:VLR-sysVarChanged . chrzmstyle)))) 
(defun chrzmstyle (name event / nstyle)
  (if (= (car event) "DIMSTYLE")
    (progn
      (setq nstyle (getvar "DIMSTYLE")
	    nstyle (str-str-lst nstyle "_")
	    nstyle (VL-STRING-RIGHT-TRIM "_" (apply 'strcat (mapcar '(lambda (x) (strcat x "_"))(cdr nstyle)))))
      (if (snvalid nstyle)
	(progn
	  (setq nstyle (strcat "Размерные_" nstyle))
	  (vla-put-activelayer *kpblc-activedoc*
          (_dwgru-layer-create (list (cons "name" nstyle))))
	  )
	)
      )
    )
  (princ) 
  )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Автор идеи Torino, он же Кочетков Андрей 
;;;Автоматическая простановка размеров в слое "_Размеры", 
;;;штриховки в слое "_Штриховки", текстов в слое "_Тексты", 
;;;таблиц в слое "_Таблицы", лидеров в слое "_Выноски", прямых
;;;в слое "_Вспомогательный". Реактор работает только с указанными
;;;командами. 
;;;Просто добавь этот файл в автозагрузку

(vl-load-com)
(_dwgru-layer-create '(("name" . "_Размеры")("color" . 150)("lw" . 13)))
(_dwgru-layer-create '(("name" . "_Штриховки")("color" . 5)("lw" . 9)))
(_dwgru-layer-create '(("name" . "_Тексты")("color" . 6)("lw" . 15)))
(_dwgru-layer-create '(("name" . "_Таблицы")("color" . 2)("lw" . 20)))
(_dwgru-layer-create '(("name" . "_Выноски")("color" . 3)("lw" . 15)))
(_dwgru-layer-create '(("name" . "_Вспомогательные")("color" . 1)("lw" . 15)("plot" . "n")))
(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 DTEXT 
     (setvar "clayer" "_Тексты") 
    )
    ((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда TABLE 
     (setvar "clayer" "_Таблицы") 
    )
    ((wcmatch thecommandstart "*LEADER") ;_Если выполняется команда QLEADER MLEADER
     (setvar "clayer" "_Выноски")
    )
    ((wcmatch thecommandstart "*XLINE") ;_Если выполняется команда XLINE
     (setvar "clayer" "_Вспомогательные")
    )
    ((wcmatch thecommandstart "*DATAEXTRACTION") ;_Если выполняется команда dataextraction
     (setvar "clayer" "_Таблицы")
    )
    (t nil)) 
  (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
      (wcmatch cmd_name "*XLINE")   ;_Если выполняется команда *XLINE
      (wcmatch cmd_name "*DATAEXTRACTION")   ;_Если выполняется команда *DATAEXTRACTION
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 09.10.2008 в 16:47.
wetr вне форума  
 
Непрочитано 11.10.2008, 11:39
#114
gipro

лайсенсед инжиниа
 
Регистрация: 15.04.2006
город-герой Волгоград (Сталинград)
Сообщений: 1,158


VVA, у меня возникает следующая проблема... Код из поста 25 работает, но после завершения команды часто возвращается не на предыдущий слой, а на сохраненный по умолчанию текущим в шаблоне чертежа. Иногда вообще не возвращается. У меня стоит AutoCAD 2008 русский + СПДС. Может это в ней дело?
Прикладываю ролики...
Вложения
Тип файла: rar video.rar (957.8 Кб, 202 просмотров)
gipro вне форума  
 
Непрочитано 11.10.2008, 18:35
#115
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


gipro, Вполне возможно. У меня нет опыта эксплуатации #25. Скорее это нужно спросить у wetr (про возвращение слоя). Там все простою: при старте команды слой запоминается в переменной и устанавливается текущим, по окончании восстанавливается сохраненный.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 11.10.2008 в 23:02.
VVA вне форума  
 
Непрочитано 11.10.2008, 20:34 Автоматический перенос размеров на слой размеры. Break макро
#116
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


VVA, wetr: ну просто супер!
Однако есть одно несущественное неудобство. Допустим нужно открыть файл только чтобы просмотреть его содержимое не производя никаких действий. В этом случае при закрытии файла AutoCAD выдает запрос о сохранении изменений. А если таких файлов нужно открыть и закрыть несколько подряд (мне иногда приходится просматривать каталоги алюминиевых профилей в dwg-формате) - появляется много рутины.
В связм с этим вопрос: нельзя ли создание слоя повесить не на открытие чертежа, а на ту или иную команду, как это сделано у kpblca в #47.
Буду очень благодарен
andrew_ro вне форума  
 
Непрочитано 11.10.2008, 23:25
#117
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


andrew_ro, Вариант из #25 (вариант с функциями _dwgru-layer-create в коментариях, сама ф-ция по ссылке #108 или в #113)
Две команды:
CRON - Command Reactor ON Включает командный реактор
CROFF - Command Reactor OFF Отключает командный реактор.
Можно в процессе работы приостанавливать разнос примитивов по слоям и снова включать
Код:
[Выделить все]
;;; Автор идеи Torino, он же Кочетков Андрей 
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 

(vl-load-com)
;;;Команда включает реактор
;;; CrOn - Command Reactor On
(defun C:CrOn ()
(setq *OldLayer* (getvar "CLAYER")) 
(vl-cmdf "_layer" "_make" "Размеры" "_color" 151 "" "") ;_Создаем слой размеры и задаем цвет 151 ... 
(vl-cmdf "_layer" "_make" "Штриховка" "_color" 5 "" "") ;_Создаем слой штриховка и задаем цвет 5 
(vl-cmdf "_layer" "_make" "Текст" "_color" 6 "" "")     ;_Создаем слой текст и задаем цвет 6
(vl-cmdf "_layer" "_make" "Таблицы" "_color" 6 "" "")     ;_Создаем слой таблицы и задаем цвет 6
(vl-cmdf "_layer" "_make" "Выноски" "_color" 6 "" "")     ;_Создаем слой таблицы и задаем цвет 6
;;;;;;По аналогии добавить создание своего слоя 
;;; ...
;;; Вариант с функцией _dwgru-layer-create
;;; отсюда   http://forum.dwg.ru/showpost.php?p=294776&postcount=108
;;;===============================================================
;;;
;;;(_dwgru-layer-create '(("name" . "Размеры")("color" . 1)))
;;;(_dwgru-layer-create '(("name" . "Штриховка")("color" . 5)))
;;;(_dwgru-layer-create '(("name" . "Текст")("color" . 6)))
;;;(_dwgru-layer-create '(("name" . "Таблицы")("color" . 2)))
;;;(_dwgru-layer-create '(("name" . "Выноски")("color" . 3)))
;;;
;;;==============================================================
  
(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)))))
)
;;;Выключает командный реактор
;;;CrOff - Command reactor off
(defun C:CrOff ()
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
  )
;;;;;;------------------------------------------------------------- 
(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") ;_Если выполняется команда *TEXT (TEXT DTEXT) 
     (setvar "clayer" "Таблицы") 
    )
    ((wcmatch thecommandstart "*LEADER") ;_Если выполняется команда *QLEADER MLEADER
     (setvar "clayer" "Выноски") 
    )
    (t nil)) 
  (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))
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 12.10.2008 в 15:38. Причина: орфография
VVA вне форума  
 
Непрочитано 11.10.2008, 23:59
#118
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


VVA, спасибо. Возможность откл/вкл реактор добавляет универсальность программе.
И еще я не пойму как задать суффикс имени слоя. Если я правильно понял, при открытии чертежа, в котором есть слой "Размеры", имя слоя изменится на "_Размеры" без создания нового слоя? Какую строку и в какое место в коде нужно добавить? Перепробовал несколько вариантов с учетом #112, но в результате: например, если говорить о нулевом слое, появляется слой с именем "0_Размеры". Что я делаю не так?
andrew_ro вне форума  
 
Непрочитано 12.10.2008, 11:21
#119
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


VVA,
Цитата:
CRON - Command Reactor ON Включает командный ректор
CROFF - Command Reactor OFF Отключает командный ректор
работает именно так:
Цитата:
...процессе работы приостанавливать разнос примитивов по слоям и снова включать
.
А хотелось бы из открытого чертежа отключать создание слоев во вновь открываемых файлах.
P.S. Я извиняюсь за навязчивось, уж больно полезная программа и хочется отшлифовать ее.
andrew_ro вне форума  
 
Непрочитано 12.10.2008, 13:53
#120
MichaelBY


 
Регистрация: 09.12.2007
Минск
Сообщений: 22
<phrase 1= Отправить сообщение для MichaelBY с помощью Skype™


Всема большое спасибо за сие создание

Последний раз редактировалось MichaelBY, 12.10.2008 в 14:04.
MichaelBY вне форума  
 
Непрочитано 12.10.2008, 15:38
#121
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


VVA, а спдсные объекты можно разносить?
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 12.10.2008, 15:40
#122
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Цитата:
Сообщение от dextron3 Посмотреть сообщение
VVA, а спдсные объекты можно разносить?
Так там же автоматом можно и так.
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 12.10.2008, 16:08
#123
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


andrew_ro,
Цитата:
появляется слой с именем "0_Размеры". Что я делаю не так?
Цитата:
* Добавлен новый параметр suff - суффикс слоя, если он есть, то имя слоя получаестся путем
* добавления к имени текущего слоя суффикса suff
Работает так как и было задумано. То, что хочешь ты называется переименование (команда _rename)
Цитата:
А хотелось бы из открытого чертежа отключать создание слоев во вновь открываемых файлах.
Код из #117 так и делает, пока не наберешь CRON никаких реакторов не загрузится. Может у тебя по прежнему болтается код из #25 в автозагрузке?
dextron3, Здесь реакторы на команды. Поэтому теоретически можно, но сам СПДС может менять слой своих объетов после создания vla или arx методами. Тем более, что у СПДС есть родные инструменты.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 12.10.2008 в 19:34.
VVA вне форума  
 
Непрочитано 12.10.2008, 16:50
#124
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


VVA, все получилось. Код из #25 действительно висел в атозагрузке: я думал что код из #117 дополнение, а не самостоятельная программа.
Спасибо ну просто ОГРОМНОЕ! Это даже больше, чем я хотел здесь.
andrew_ro вне форума  
 
Непрочитано 12.10.2008, 16:53
#125
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


andrew_ro, насколько я понял тебе и нужен код Алексея.
попробуй
*добавлено по сравнению с №47
- слой "_Таблицы" для таблиц (включая _dataextraction)
- слой "_Выноски" для лидеров
- слой "_Вспомог" для прямой

*Добавлено*
"И тут Остапа понесло..."
- слой "VPORTS" для вьюпортов

Слои и толщины настраивай под себя

Код:
[Выделить все]
(vl-load-com)
(if (not *kpblc-activedoc*)
  (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
  ) ;_ end of if

(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-cancel)
		      (:vlr-commandfailed . cmd-fail)
		      )
		    ) ;_ end of VLR-Command-Reactor
	) ;_ end of setq
  ) ;_ end of if
;; Функция подгрузки типа линии - на http://www.autocad.ru/cgi-bin/f1/board.cgi?t=22730iW

;|=============================================================================
*    Создание слоя с указанными параметрами.
*    Параметры вызова:
*   layer-list   список параметров слоя вида:
   '(("name" . "TestLayer")   ; имя слоя. Не может быть пропущено
   ("color" . 3)         ; номер цвета. nil -> 7
   ("lw" . 50)         ; вес линии слоя. nil -> 25
   ("lt" . "hidden")      ; тип линии слоя. nil -> Continuous
               ; Если описания типа линии в acadiso.lin
               ; нет, обязательно указывать следующий
               ; параметр
   ("ltfile" . "c:\\cad\\ltypes\\lt.lin")   ; полный путь к файлу с описанием
               ; типа линии. Если файл находится в путях
               ; поддержки, путь можно не указывать
   ("plot" . "y")         ; Печатать ("y") или нет ("n") слой.
               ; nil -> "y"
   )
*    Возвращает vla-указатель на созданный слой. Если слой существует, его
* настройки приводятся в соответствие с переданным списком.
*    Слой размораживается, разблокируется и включается. Не активируется.
|;
(defun _kpblc-layer-create (layer-list / vla_layer)
  (setq	vla_layer
	 (vla-add
	   (vla-get-layers *kpblc-activedoc*)
	   (cdr (assoc "name" layer-list))
	   ) ;_ end of vla-add
	) ;_ end of setq
  (vla-put-color
    vla_layer
    (if	(cdr (assoc "color" layer-list))
      (cdr (assoc "color" layer-list))
      7
      ) ;_ end of if
    ) ;_ end of vla-put-color
  (vla-put-lineweight
    vla_layer
    (if	(cdr (assoc "lw" layer-list))
      (cdr (assoc "lw" layer-list))
      aclnwt025
      ) ;_ end of if
    ) ;_ end of vla-put-lineweight
  (if (and (cdr (assoc "lt" layer-list))
	   (_kpblc-linetype-load
	     (cdr (assoc "lt" layer-list))
	     (cdr (assoc "ltfile" layer-list))
	     ) ;_ end of _kpblc-linetype-load
	   ) ;_ end of and
    (vla-put-linetype vla_layer (cdr (assoc "lt" layer-list)))
    (vla-put-linetype vla_layer "Continuous")
    ) ;_ end of if
  (vla-put-plottable
    vla_layer
    (if	(= (cdr (assoc "plot" layer-list)) "n")
      :vlax-false
      :vlax-true
      ) ;_ end of if
    ) ;_ end of vla-put-Plottable
  (vla-put-lock vla_layer :vlax-false)
  (vla-put-layeron vla_layer :vlax-true)
  (if (not (equal (vla-get-activelayer *kpblc-activedoc*)
		  vla_layer
		  ) ;_ end of equal
	   ) ;_ end of not
    (vla-put-freeze vla_layer :vlax-false)
    ) ;_ end of if
  vla_layer
  ) ;_ end of defun

(defun cmd-start (react	   cmd	    /	     selset   cmd_name ent
		  svr	   res	    tag	     text     index    _attreq_
		  _attdia_
		  )
  (setq cmd_name (strcase (car cmd) t))
  (cond
    ((vl-string-search "dim" cmd_name)
     (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer *kpblc-activedoc*)
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer
       *kpblc-activedoc*
       (_kpblc-layer-create
	 '(("name" . "_Размеры")
	   ("color" . 165)
	   ("lw" . 13)
	   )
	 ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar
	     '("cecolor" "celweight" "celtype")
	     '("bylayer" -1 "bylayer")
	     ) ;_ end of mapcar
     )
    ((vl-string-search "hatch" cmd_name)
     (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer *kpblc-activedoc*)
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer
       *kpblc-activedoc*
       (_kpblc-layer-create
	 '(("name" . "_Штриховки")
	   ("color" . 175)
	   ("lw" . 09)
	   )
	 ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar
	     '("cecolor" "celweight" "celtype")
	     '("bylayer" -1 "bylayer")
	     ) ;_ end of mapcar
     )
    ((vl-string-search "text" cmd_name)
     (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer *kpblc-activedoc*)
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer
       *kpblc-activedoc*
       (_kpblc-layer-create
	 '(("name" . "_Тексты")
	   ("color" . 190)
	   ("lw" . 15)
	   )
	 ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar
	     '("cecolor" "celweight" "celtype")
	     '("bylayer" -1 "bylayer")
	     ) ;_ end of mapcar
     )
    ((vl-string-search "table" cmd_name)
     (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer *kpblc-activedoc*)
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer
       *kpblc-activedoc*
       (_kpblc-layer-create
	 '(("name" . "_Таблицы")
	   ("color" . 7)
	   ("lw" . 09)
	   )
	 ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar
	     '("cecolor" "celweight" "celtype")
	     '("bylayer" -1 "bylayer")
	     ) ;_ end of mapcar
     )
    ((vl-string-search "leader" cmd_name)
     (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer *kpblc-activedoc*)
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer
       *kpblc-activedoc*
       (_kpblc-layer-create
	 '(("name" . "_Выноски")
	   ("color" . 150)
	   ("lw" . 13)
	   )
	 ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar
	     '("cecolor" "celweight" "celtype")
	     '("bylayer" -1 "bylayer")
	     ) ;_ end of mapcar
     )
    ((vl-string-search "dataextraction" cmd_name)
     (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer *kpblc-activedoc*)
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer
       *kpblc-activedoc*
       (_kpblc-layer-create
	 '(("name" . "_Таблицы")
	   ("color" . 7)
	   ("lw" . 09)
	   )
	 ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar
	     '("cecolor" "celweight" "celtype")
	     '("bylayer" -1 "bylayer")
	     ) ;_ end of mapcar
     )
     ((vl-string-search "xline" cmd_name)
     (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer *kpblc-activedoc*)
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer
       *kpblc-activedoc*
       (_kpblc-layer-create
	 '(("name" . "_Вспомог")
	   ("color" . 1)
	   ("lw" . 09)
	   ("plot" . "n")
	   )
	 ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar
	     '("cecolor" "celweight" "celtype")
	     '("bylayer" -1 "bylayer")
	     ) ;_ end of mapcar
     )
    ((vl-string-search "vports" cmd_name)
     (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer *kpblc-activedoc*)
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer
       *kpblc-activedoc*
       (_kpblc-layer-create
	 '(("name" . "VPORTS")
	   ("color" . 81)
	   ("lw" . 13)
	   ("plot" . "n")
	   )
	 ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar
	     '("cecolor" "celweight" "celtype")
	     '("bylayer" -1 "bylayer")
	     ) ;_ end of mapcar
     )
    ) ;_ end of cond
  ) ;_ end of defun

(defun cmd-end (react	     cmd	  /	       list_obj
		selset	     item	  counter      leader_item
		cmd_name     leader_item_list	       up_string
		low_string
		)
  (setq	cmd_name (strcase (car cmd) t)
	counter	 0
	) ;_ end of setq
  (cond
    ((or (vl-string-search "dim" cmd_name)
	 (vl-string-search "text" cmd_name)
	 (vl-string-search "hatch" cmd_name)
	 (vl-string-search "dataextraction" cmd_name)
	 (vl-string-search "leader" cmd_name)
	 (vl-string-search "table" cmd_name)
	 (vl-string-search "xline" cmd_name)
         (vl-string-search "vports" cmd_name)
	 ) ;_ end of or
     (if *vlr-settings*
       (progn
	 (vla-put-activelayer
	   *kpblc-activedoc*
	   (cdr (assoc "layer" *vlr-settings*))
	   ) ;_ end of vla-put-ActiveLayer
	 (mapcar 'setvar
		 '("cecolor" "celweight" "celtype")
		 (list (cdr (assoc "color" *vlr-settings*))
		       (cdr (assoc "lw" *vlr-settings*))
		       (cdr (assoc "lt" *vlr-settings*))
		       ) ;_ end of list
		 ) ;_ end of mapcar
	 (setq *vlr-settings* nil)
	 ) ;_ end of progn
       ) ;_ end of if
     )
    ) ;_ end of cond
  ) ;_ end of defun

(defun cmd-cancel (react cmd / cmd_name)
  (setq cmd_name (strcase (car cmd) t))
  (cond
    ((or (vl-string-search "dim" cmd_name)
	 (vl-string-search "text" cmd_name)
	 (vl-string-search "hatch" cmd_name)
         (vl-string-search "dataextraction" cmd_name)
	 (vl-string-search "leader" cmd_name)
	 (vl-string-search "table" cmd_name)
	 (vl-string-search "xline" cmd_name)
         (vl-string-search "vports" cmd_name)
	 ) ;_ end of or
     (if *vlr-settings*
       (progn
	 (vla-put-activelayer
	   *kpblc-activedoc*
	   (cdr (assoc "layer" *vlr-settings*))
	   ) ;_ end of vla-put-ActiveLayer
	 (mapcar 'setvar
		 '("cecolor" "celweight" "celtype")
		 (list (cdr (assoc "color" *vlr-settings*))
		       (cdr (assoc "lw" *vlr-settings*))
		       (cdr (assoc "lt" *vlr-settings*))
		       ) ;_ end of list
		 ) ;_ end of mapcar
	 (setq *vlr-settings* nil)
	 ) ;_ end of progn
       ) ;_ end of if
     )
    ) ;_ end of cond
  ) ;_ end of defun

;|=============================================================================
*    Функция подгрузки типа линии в текущий файл. Учитывает возможную
* локализацию системы.
*    Параметры вызова:
*  ltype-name  имя типа линии для английской версии
*  ltype-file  имя файла описания типа линии. nil -> "acadiso.lin"ю
*      Если файл с описанием типа линии не лежит по путям
*      поддержки када, надо указывать полный путь к нему.
*    Примеры вызова:
(_kpblc-linetype-load "center" nil)  ; для русской версии подгружает Осевая и возвращает
                                     ; t при успехе
***  Соответствие наименований линий обеспечивается огромным списком ltype_list
*** который можно и нужно дополнять :) Только надо либо все делать мелкими
*** буквами, либо жестко соблюдать регистр в моменты вызовов.
***  Тип линии "Continuous" обработке не подвергается — он есть во всех версиях
=============================================================================|;
(defun _kpblc-linetype-load
       (ltype-name ltype-file / ltype_normal ltype_list result)
  (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))
    ;; тип линии не найден, надо его загрузить. Тип линии должен быть
    ;; описан в файле
    (setq result (not (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 not
	  ) ;_ end of setq
    ) ;_ end of if
  result
  ) ;_ end of defun
Отличие этого кода от кода в №113 (для простого юзера)
В №113 слои создаются сразу при открытии файла - даже нового (авторы Кочетков Андрей, VVA, krblc)
В этом коде слои создаются только при вызове соответствующей команды (автор krblc)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 13.10.2008 в 05:27.
wetr вне форума  
 
Непрочитано 17.10.2008, 14:11
#126
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 692


Не подскажете, возможно автоматически относить штриховки созданные с помощью палитр, к слою штриховка?
gest вне форума  
 
Непрочитано 17.10.2008, 14:50
#127
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


настройка через ПК мыши
Миниатюры
Нажмите на изображение для увеличения
Название: 3.jpg
Просмотров: 466
Размер:	54.2 Кб
ID:	11200  
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 17.10.2008, 15:00
#128
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 692


Это понятно нужно прописывать, хотелось бы по теме обсуждения автоматический перенос.
gest вне форума  
 
Непрочитано 17.10.2008, 16:08
#129
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


При вставке из палитр выполняется команда EXECUTETOOL. Как на команду реактор поставить можно (скорее всего), но понять что в данный момент вставляется (штриховка или блок) не возможно. Так что на слой штриховки будут попадать и блоки. Правильнее как в #127.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.10.2008, 16:16
#130
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


wetr, спасибо.
Я давно не заглядывал в ветку, потому что сам методом проб и ошибок (ну их практически не было) переделал код Алексея из #47 "под себя". Сейчас тестирую.Только почемуто он не работает в версиях AutoCAD выше 2007. Заодно поэкспериментирую и с твоим из #125.
Еще раз спасибо.
andrew_ro вне форума  
 
Непрочитано 17.10.2008, 16:25
#131
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от andrew_ro Посмотреть сообщение
Только почемуто он не работает в версиях AutoCAD выше 2007.
м.б. надо подгрузить visual lisp ? (vl-load-com)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 17.10.2008, 16:35
#132
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


Цитата:
м.б. надо подгрузить visual lisp ? (vl-load-com)
Возможно, но я пока не понимаю механизма работы программы. Пока-что меня хватило только на то, чтобы найти в коде однотипные блоки и добавить по аналогии свои.
andrew_ro вне форума  
 
Непрочитано 17.10.2008, 17:52
#133
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


andrew_ro, я делаю точно также
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 17.10.2008, 23:22
#134
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Цитата:
Сообщение от andrew_ro Посмотреть сообщение
wetr, спасибо.
Я давно не заглядывал в ветку, потому что сам методом проб и ошибок (ну их практически не было) переделал код Алексея из #47 "под себя". Сейчас тестирую.Только почемуто он не работает в версиях AutoCAD выше 2007. Заодно поэкспериментирую и с твоим из #125.
Еще раз спасибо.
У меня код с реакторами (ну, конечно, со своими добавлениями) успешно работает в ADT2008Eng.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.10.2008, 12:17
#135
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


Действительно нужно было
Цитата:
подгрузить visual lisp (vl-load-com)
. Протестировал в Civil 3D 2008 (rus) и в AutoCAD 2009 (eng). Все работает.
andrew_ro вне форума  
 
Непрочитано 25.11.2008, 12:30
#136
Tony_Chu

ИК
 
Регистрация: 28.03.2006
Архангельск
Сообщений: 170
<phrase 1= Отправить сообщение для Tony_Chu с помощью Skype™


Код:
[Выделить все]
("name" . "size")
("color" . 1)
("lw" . 20)
Подскажите пож-ста как задать толщину линии не 0,20, а по умолчанию, а то я в лиспе ни черта не соображаю.
Tony_Chu вне форума  
 
Непрочитано 25.11.2008, 12:40
#137
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
acLnWtByLayer = -1
acLnWtByBlock = -2
acLnWtByLwDefault = -3
Т.е так должно работать
Код:
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 25.11.2008, 14:16
#138
Tony_Chu

ИК
 
Регистрация: 28.03.2006
Архангельск
Сообщений: 170
<phrase 1= Отправить сообщение для Tony_Chu с помощью Skype™


to VVA

Спасибо большое, всё работает
Tony_Chu вне форума  
 
Непрочитано 25.11.2008, 20:47 код работает не так как нужно в 2009-м акаде
#139
beholder

Конструктор (МК)
 
Регистрация: 27.11.2007
Львів
Сообщений: 456
<phrase 1=


Скачал здесь на форуме код, который загоняет размеры и текст на нужные слои, переделал его под себя, вроде бы все было чудесно на 2007-м акаде, но когда попробовал загрузить у сотрудника на 2009-м возникла следующая ситуация. Допустим, у меня активен другой слои, не размеры. Я проставляю размер (он проставляется в нужном мне слое РАЗМЕРЫ), дальше активным вновь становится мой текущий слой, но (!) после этого я уже не могу сделать активным любой другой слой кроме того, который был до проставления размера, назначить любой слой объекту могу, а сделать слой текущим нет. Такой глюк появился только в 2009-й версии акада.

Прилагаю этот самый код:

Код:
[Выделить все]
(vl-load-com) 
  (setq lyrs (vlax-get (vla-get-activedocument (vlax-get-acad-object)) 'Layers) 
        nlrs (mapcar '(lambda (x) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list lyrs x)));Проверяем наличие слоя в файле 
              (vla-add lyrs x))) '("РАЗМЕРНАЯ" "ТЕКСТ")));

(vlr-command-reactor nil '((:vlr-commandWillStart . startCommand))) 
(vlr-command-reactor nil '((:vlr-commandEnded . endCommand))) 
(vlr-command-reactor nil '((:vlr-commandCancelled . endCommand))) 
;
(defun startCommand (calling-reactor startcommandInfo / thecommandstart)
  (setq thecommandstart (nth 0 startcommandInfo)) 
  (setq *OldLayer* (append *OldLayer* (list (getvar "CLAYER")))) 
  (cond ((wcmatch thecommandstart "DIM*") (setvar "clayer" "РАЗМЕРНАЯ"))
	((wcmatch thecommandstart "*TEXT") (setvar "clayer" "ТЕКСТ"))
	(t nil));cond 
  (princ)
);startCommand
;
(defun endCommand (calling-reactor endcommandInfo) 
 (if *OldLayer* (setvar "clayer" (nth 0 *OldLayer*))) 
 (setq *OldLayer* nil) 
 (princ) 
);endCommand

Прошу знатоков лиспа подсказать мне в чем может быть дело. Я сам на данный момент только начал изучать лисп по скачанных тут уроках (автолисп в восьми уроках), со временем, может буду что-то посерьезнее читать, а пока только знакомлюсь с основными понятиями.

Последний раз редактировалось beholder, 26.11.2008 в 00:01. Причина: Тэги code кто проставлять будет?
beholder вне форума  
 
Непрочитано 25.11.2008, 23:33
#140
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Скорее всего, реакторы загружаются несколько раз и поэтому "хамят". Попробуй такой код:
Код:
[Выделить все]
(vl-load-com)

(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
           "-command-reactor"
           '(
             (:vlr-commandwillstart . startcommand)
             (:vlr-commandended . endcommand)
             (:vlr-commandcancelled . endcommand)
             (:vlr-commandfailed . endcommand)
             )
           ) ;_ end of VLR-Command-Reactor
        ) ;_ end of setq
  ) ;_ end of if

(setq lyrs (vlax-get (vla-get-activedocument (vlax-get-acad-object)) 'layers)
      nlrs (mapcar '(lambda (x)
                      (if (vl-catch-all-error-p
                            (vl-catch-all-apply 'vla-item (list lyrs x))
                            ) ;Проверяем наличие слоя в файле 
                        (vla-add lyrs x)
                        ) ;_ end of if
                      ) ;_ end of lambda
                   '("РАЗМЕРНАЯ" "ТЕКСТ")
                   ) ;_ end of mapcar
      ) ;_ end of setq

(defun startcommand (calling-reactor startcommandinfo / thecommandstart)
  (setq thecommandstart (car startcommandinfo))
  (setq *oldlayer* (getvar "CLAYER"))
  (cond ((wcmatch thecommandstart "DIM*") (setvar "clayer" "РАЗМЕРНАЯ"))
        ((wcmatch thecommandstart "*TEXT") (setvar "clayer" "ТЕКСТ"))
        ) ;_ end of cond
  ) ;_ end of defun

(defun endcommand (calling-reactor endcommandinfo)
  (if *oldlayer*
    (setvar "clayer" *oldlayer*)
    ) ;_ end of if
  (setq *oldlayer* nil)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.11.2008, 23:59
#141
beholder

Конструктор (МК)
 
Регистрация: 27.11.2007
Львів
Сообщений: 456
<phrase 1=


Кулик Алексей aka kpblc, большое спасибо, завтра на работе попробую.
beholder вне форума  
 
Непрочитано 27.11.2008, 23:42
#142
beholder

Конструктор (МК)
 
Регистрация: 27.11.2007
Львів
Сообщений: 456
<phrase 1=


Кулик Алексей aka kpblc, попробовал твой код, - результат точто такой же, как и с моим, причем пробовал на разных машинах, так же как и было - после загрузки невозможно установить текущим ни одного другого слоя, назначить же слой объекту удается... Если может кому-нибудь другому у кого стоит 2009-й акад попробовать как работает данный код у него на машине, буду очень благодарен.p.s. Код в посте №140, нужен обязательно 2009-й акад (на других, по крайней мере на 2007-м и 2006-м проблем не возникает).

Последний раз редактировалось beholder, 28.11.2008 в 09:12.
beholder вне форума  
 
Непрочитано 28.11.2008, 10:51
#143
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


beholder, То что показал Алексей не лишне. Вскрытие показало наличие грубейшей ошибки в логике. Непоянтно почему это работало в предыдущих версиях ??? К коду №140 Добавил исправление ошибки (выделил красным) и добавил 2 команды (CMDS и CMDE) на аткивации и остановки командных реакторов в сеансе работы
Код:
[Выделить все]
(vl-load-com)
  (setq lyrs (vlax-get (vla-get-activedocument (vlax-get-acad-object)) 'Layers) 
        nlrs (mapcar '(lambda (x) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list lyrs x)));Проверяем наличие слоя в файле 
              (vla-add lyrs x))) '("РАЗМЕРНАЯ" "ТЕКСТ")));
(defun cmdr-remove ()
(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if
  )
(defun cmdr-create ()
(if (not *vlr-cmd*)
  (setq *vlr-cmd*
         (vlr-command-reactor
           "-command-reactor"
           '(
             (:vlr-commandwillstart . startcommand)
             (:vlr-commandended . endcommand)
             (:vlr-commandcancelled . endcommand)
             (:vlr-commandfailed . endcommand)
             )
           ) ;_ end of VLR-Command-Reactor
        ) ;_ end of setq
  ) ;_ end of if
  )
(defun startCommand (calling-reactor startcommandInfo / thecommandstart)
  (setq thecommandstart (nth 0 startcommandInfo))
  (setq *OldLayer* (append *OldLayer* (list (getvar "CLAYER"))))
      (cond ((wcmatch thecommandstart "DIM*") (setvar "clayer" "РАЗМЕРНАЯ"))
            ((wcmatch thecommandstart "*TEXT") (setvar "clayer" "ТЕКСТ"))
            (t (setq *OldLayer* nil)) ;;_Если не наша команда, чистим список текущих слоев
            );cond
      (princ)
);startCommand
(defun endCommand (calling-reactor endcommandInfo) 
 (if *OldLayer* (setvar "clayer" (nth 0 *OldLayer*))) 
 (setq *OldLayer* nil)
;;; (cmdr-remove)
;;;(cmdr-create)
 
 (princ) 
);endCommand
;;;Активировать командный реактор
;;;CoMmanD reactor Start
(defun C:CMDS ()
(cmdr-remove)
(cmdr-create)
  )
;;;Удалить командный реактор
;;;CoMmanD reactor End
(defun C:CMDE ()(cmdr-remove))
(cmdr-remove)
(cmdr-create)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.11.2008, 23:47
#144
beholder

Конструктор (МК)
 
Регистрация: 27.11.2007
Львів
Сообщений: 456
<phrase 1=


Спасибо, VVA, теперь код чудесно работает на любой версии ))) Буду теперь постепенно распространять среди сотрудников.
beholder вне форума  
 
Непрочитано 30.11.2008, 12:31
#145
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Отредактировал код в #25
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 30.11.2008, 16:53
#146
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


VVA, Хотел спросить можно ли с помощью лиспа менять у текста Justify ? (центральный, левый и правый, путем выделения прямоугольником автокада)
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 30.11.2008, 18:08
#147
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


dextron3, А _justifytext чем не устраивает?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 30.11.2008, 18:49
#148
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


VVA, спасибо, а что вы делаете когда у вас кнопки на экране уже в три ряда и все нужные, места где рисовать не осталось
посоветуйте, пробовал включающие кнопки для панелей назначить так позиционирование на экране не удобно...
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 30.11.2008, 21:05
#149
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
что вы делаете когда у вас кнопки на экране уже в три ряда и все нужные
У меня нет 3 рядов кнопок. Некоторые команды набираю в ком. строке или знаю где они находятся в меню.
Наиболее частые - алиасы и tool palette
Например, команда _justifytext находится в меню Редактировать->Объект->Текст->Выравнивание
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.12.2008, 09:26
#150
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


VVA, а выпадающими кнопками пользуетесь? или они 2 секунды тратять времени пока выпадают поэтому не прижились...
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 01.12.2008, 10:33
#151
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


пользуюсь
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.12.2008, 22:41
#152
Mäher

инженер
 
Регистрация: 03.12.2008
I live in Moscow
Сообщений: 111


Всем привет! Подскажите пожайлуста, возможно ли автоматически присваивать разрмеру слой "разрмеры", если вызывать команду с клавы?
Mäher вне форума  
 
Непрочитано 07.12.2008, 22:52
#153
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Можно. Вся эта тема как раз решению этого вопроса и посвящена.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.12.2008, 23:01
#154
Mäher

инженер
 
Регистрация: 03.12.2008
I live in Moscow
Сообщений: 111


А можно узнать по подробнее, т.к. в лиспе не силен. Я пробовал макросы опубликованные в разделе "Статьи", но они работают, только если размер проставлять с помощью соответствующей кнопки в панели.
Mäher вне форума  
 
Непрочитано 07.12.2008, 23:11
#155
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Попробуй код с http://forum.dwg.ru/showpost.php?p=60065&postcount=47
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.12.2008, 23:29
#156
Mäher

инженер
 
Регистрация: 03.12.2008
I live in Moscow
Сообщений: 111


А куда этот код нужно внести? Извеняюсь, что на ночь глядя напрягаю.
Mäher вне форума  
 
Непрочитано 07.12.2008, 23:33
#157
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


http://dwg.ru/art/8
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.12.2008, 23:39
#158
Mäher

инженер
 
Регистрация: 03.12.2008
I live in Moscow
Сообщений: 111


Все понял, спасибо огромное за помощь.
Mäher вне форума  
 
Непрочитано 08.12.2008, 16:41
#159
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от Mäher Посмотреть сообщение
Всем привет! Подскажите пожайлуста, возможно ли автоматически присваивать разрмеру слой "разрмеры", если вызывать команду с клавы?
Можно если использовать Temporary Override key, но я забыл, как
Vova вне форума  
 
Непрочитано 11.12.2008, 22:09
#160
dREYb


 
Регистрация: 15.10.2008
Сообщений: 64


А есть код для русского 2006 када? У меня не начал работать только в английской версии
dREYb вне форума  
 
Непрочитано 11.12.2008, 22:22
#161
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


dREYb, какой код не работает-то?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.12.2008, 22:49
#162
dREYb


 
Регистрация: 15.10.2008
Сообщений: 64


Кулик Алексей aka kpblc Я брал из этой ветки! потом запустил у друга в 2006 рус не покатило! я так понял! команды не прокатывают! может тыкните носом где взять последний стабильный код для 2006! Оч благодарен!
dREYb вне форума  
 
Непрочитано 11.12.2008, 23:17
#163
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Все коды подряд я не отслеживал. Мой код (который в #47, кажется), у меня корректно работал везде где только можно (AutoCAD'ы начиная с версии 2002 по 2008, разные локализации и разные вертикальные решения). Ткни пальцем в пост, про который ты говоришь!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.12.2008, 11:05
#164
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


dREYb, Точно рабочие см. посты #47 и #25
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.12.2008, 22:52
#165
dREYb


 
Регистрация: 15.10.2008
Сообщений: 64


#25 попробовал! прокатил! У меня был какой-то допотопный! 47 не пробовал не разобрался что к чему!
dREYb вне форума  
 
Непрочитано 16.12.2008, 13:25
#166
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 42
<phrase 1=


Большое спасибо за код! Сам пищу, а кому показал из теток пищат еще громче! Подскажите пожалуйста, что надо изменить в коде #25, чтобы задать вес линии и ее тип при создании слоев? Заранее спасибо!
SergAM243 вне форума  
 
Непрочитано 17.12.2008, 14:30
#167
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


SergAM243,
Находишь в тексте программы строку
Цитата:
(vl-cmdf "_layer" "_make" "Размеры" "_color" 151 "" "") ;_Создаем слой размеры и задаем цвет 151 ...
и дополняешь ее таким образом
Цитата:
(vl-cmdf "_layer" "_make" "Размеры" "_color" 151 "" "_lw" 0.13 "" "") ;_Создаем слой размеры и задаем цвет 151 ...
Можно посмотреть коментарии в коде Алексея (#47), там оформление немного другое, но достаточно подробно расписано, что к чему.
andrew_ro вне форума  
 
Непрочитано 17.12.2008, 14:57
#168
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 42
<phrase 1=


Спасибо за ответ! Код #47 я просматривал, про "_lw" догадался, но пытался вставить команду внутрь одной из пары двойных заключительных кавычек. В результате я получил почти то, что хотел. Только по окончанию кода он (АКад) на меня ругался и требовал завершения команды.После Вашего ответа понял, что я неправильно делал. Еще раз спасибо!!!
SergAM243 вне форума  
 
Непрочитано 18.12.2008, 09:06
#169
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


Цитата:
Сообщение от SergAM243,
Сам пищу, а кому показал из теток пищат еще громче!
Есть у меня еще задумка соединить код #25 (или #47) с кодами из этой темы. Но боюсь эта задача подсилу только мэтрам программирования. Думаю ваши тетки запищат еще сильнее.

Последний раз редактировалось andrew_ro, 18.12.2008 в 12:43.
andrew_ro вне форума  
 
Непрочитано 18.12.2008, 09:48
#170
bridgeconst

проектирование
 
Регистрация: 29.11.2007
Москва
Сообщений: 311


Мне кажется, что пора переименовывать тему в "Как заставить теток сильно пищать?"
bridgeconst вне форума  
 
Непрочитано 18.12.2008, 14:07
#171
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 42
<phrase 1=


Считаю это явно излишним менять цвет курсора под слой! Для мэтров - это конечно интересная задача! А для работы, когда курсор меняет цвет , как ... простите не знаю как обозвать, думаю не будет большой информативности. А если слоев не 22, как у меня, а, как некоторые здесь указывали, за 100? В этих ста оттенках курсора разобраться и запомнить их , по-моему нереально!
SergAM243 вне форума  
 
Непрочитано 18.12.2008, 15:59
#172
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


Цитата:
Сообщение от SergAM243,
...А если слоев не 22, как у меня, а, как некоторые здесь указывали, за 100?
Вообще можно слои с оттенками одного цвета назначать однотипным объектам и при помощи курсора контролировать работу над той или иной группой объектов. Все зависит от привычки. Но в целом согласен - при большом количестве слоев преимущества спорны.
andrew_ro вне форума  
 
Непрочитано 18.12.2008, 16:14
#173
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 42
<phrase 1=


А пользу от #25 и #47(в котором я не смог правда разобраться) вижу в том, что можно их (даже насильно) подсунуть в автозагрузку "тетушке", один день выслушать все-все-все, пожимая плечами, и наблюдать как через неделю-другую они привыкнут к хорошему. И будет положено начало хоть какого-то порядка в чертежах! А то все слой 0 и стили текста и размеров STANDARD (под которыми скрывается все,что хочешь)!
SergAM243 вне форума  
 
Непрочитано 18.12.2008, 16:15
#174
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 42
<phrase 1=


Правда это уже другая тема!!!
SergAM243 вне форума  
 
Непрочитано 18.12.2008, 16:29
#175
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Offtop:
Цитата:
Сообщение от SergAM243 Посмотреть сообщение
А пользу от #25 и #47(в котором я не смог правда разобраться) вижу в том, что можно их (даже насильно) подсунуть в автозагрузку "тетушке", один день выслушать все-все-все, пожимая плечами, и наблюдать как через неделю-другую они привыкнут к хорошему. И будет положено начало хоть какого-то порядка в чертежах! А то все слой 0 и стили текста и размеров STANDARD (под которыми скрывается все,что хочешь)!
а после того как привыкнут, поотрубать нахрен, дабы прочуствовали
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon на форуме  
 
Непрочитано 22.12.2008, 00:31
#176
Михаил055

Конструктор
 
Регистрация: 16.01.2006
Москва
Сообщений: 68


Раньше при простановке размеров они сами создавались на слое "Dim". Но размеры написал сам. Теперь некоторые использую штатные. Линейные и угловые. Чтобы они тоже были на слое "Dim" сделал пунккт меню, с помощью которого запускаю функцию пересылающую все размеры на этот слой. Делаю это периодически или в конце работы.

Функция вот такая:

(defun CHGL_dim ()
(setvar "cmdecho" 0)
(setq Ss1 (ssget "X"'((0 . "DIMENSION"))))

(setq $lay (getvar "CLAYER"))

(command "_layer" "_m" "dim" "")
(command "_change" Ss1 "" "_prop" "_layer" "dim" "")

(command "_layer" "_set" $lay "")
(princ)
);end CHGL_dim
Михаил055 вне форума  
 
Непрочитано 11.06.2009, 03:53
#177
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Кулик Алексей aka kpblc, не хочешь улучшить свой реактор? Лисп отличный, тестирую уже 2 год, никаких проблем не было. Ему не хватает только настроек слоев в диалоговом окне.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 11.06.2009, 08:25
#178
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


И как это должно выглядеть? Само окно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.06.2009, 09:18
#179
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Список элементов, для которых нужно "подставлять" слои.
Каждый элемент списка по умолчанию - "погашен".
Чтобы активировать, нужно поставить галочку напротив. Когда активировали, становится активной вся строка напротив элемента, как в менеджере слоев. Там можно задать настройки и ИМЯ слоя. Если сделаешь - можно смело (рядом с веткадом) выставлять на продажу. Без шуток.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 11.06.2009, 09:47
#180
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Тогда получается, что надо предлагать обработку для следующих примитивов:
  • Отрезок (_.line)
  • Дуга (_.arc)
  • Полилиния (_.pline)
  • Полигон (_.polygon)
  • 3d-полилиния (_.3dpoly)
  • Мультилиния (_.mline)
  • Окружность (_.circle)
  • Эллипс (_.ellipse)
  • Область (_.region)
  • Штриховка (_.hatch / _.bhatch)
  • Однострочный текст (_.text / _.dtext). Дополнительно настройки текстового стиля - требуются или нет?
  • Многострочный текст (_.mtext). Дополнительно настройки текстового стиля - нужны?
  • Выноски (_.leader / _.qleader)
  • Многострочные выноски (_.mleader)
  • Таблица (_.table)
  • Извлечение данных (_.dataextraction)
  • Размеры. Что с настройками размерного стиля?
    • Линейные размеры
    • Ортогональные размеры
    • Параллельные размеры
    • Угловые размеры
    • Радиусы
    • Диаметры
    • Выноски и допуски
Определись, какие надо команды обрабатывать и, самое главное - как. Потом уже можно и голову ломать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.06.2009, 10:08
#181
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Тогда получается, что надо предлагать обработку для следующих примитивов:
  • Отрезок (_.line)
  • Дуга (_.arc)
  • Полилиния (_.pline)
  • Полигон (_.polygon)
  • 3d-полилиния (_.3dpoly)
  • Мультилиния (_.mline)
  • Окружность (_.circle)
  • Эллипс (_.ellipse)
  • Область (_.region)
  • Штриховка (_.hatch / _.bhatch)
  • Однострочный текст (_.text / _.dtext). Дополнительно настройки текстового стиля - требуются или нет?
  • Многострочный текст (_.mtext). Дополнительно настройки текстового стиля - нужны?
  • Выноски (_.leader / _.qleader)
  • Многострочные выноски (_.mleader)
  • Таблица (_.table)
  • Извлечение данных (_.dataextraction)
  • Размеры. Что с настройками размерного стиля?
    • Линейные размеры
    • Ортогональные размеры
    • Параллельные размеры
    • Угловые размеры
    • Радиусы
    • Диаметры
    • Выноски и допуски
Определись, какие надо команды обрабатывать и, самое главное - как. Потом уже можно и голову ломать
тогда уж так
  • Отрезок (_.line) - не нужно обрабатывать
  • Дуга (_.arc) - не нужно обрабатывать
  • Полилиния (_.pline) - не нужно обрабатывать
  • Полигон (_.polygon) - не нужно обрабатывать
  • 3d-полилиния (_.3dpoly) - не нужно обрабатывать
  • Мультилиния (_.mline) - не нужно обрабатывать
  • Окружность (_.circle) - не нужно обрабатывать
  • Эллипс (_.ellipse) - не нужно обрабатывать
  • Область (_.region) - не нужно обрабатывать
  • Штриховка (_.hatch / _.bhatch) - обрабатывать
  • Однострочный текст (_.text / _.dtext). Дополнительно настройки текстового стиля - требуются или нет? - обрабатывать, можно и дополнительнительные настройки ввести, ежели время будет.
  • Многострочный текст (_.mtext). Дополнительно настройки текстового стиля - нужны? - обрабатывать, можно и дополнительнительные настройки ввести, ежели время будет.
  • Выноски (_.leader / _.qleader) - обрабатывать
  • Многострочные выноски (_.mleader) - обрабатывать
  • Таблица (_.table) - обрабатывать, а можно и оставить на совести юзера
  • Извлечение данных (_.dataextraction) - обрабатывать, а можно и оставить на совести юзера
  • Размеры. Что с настройками размерного стиля?
    • - - обрабатывать, а вот по настройкам..., думаю можно и позаморачитваться, хотя лучше это все через шаблон оставить на откуп юзеру
    • Линейные размеры
    • Ортогональные размеры
    • Параллельные размеры
    • Угловые размеры
    • Радиусы
    • Диаметры
    • Выноски и допуски
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon на форуме  
 
Непрочитано 11.06.2009, 10:09
#182
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Ок, попробую на выходных время выкроить...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.06.2009, 12:55
#183
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


Как вариант программа FLAY
http://www.xanadu.cz/dl_file.asp?ID=860
Piton вне форума  
 
Непрочитано 11.06.2009, 14:18
#184
gipro

лайсенсед инжиниа
 
Регистрация: 15.04.2006
город-герой Волгоград (Сталинград)
Сообщений: 1,158


Кстати, об VetCAD... Я активно пользуюсь его инструментами "сварка" (считаю их куда более удачными, чем СПДС). Помогите заставить их отрисовываться на соответствующем слое... Сам пользуюсь кодом из 25-го поста. Подскажите, что и куда там добавить.

Последний раз редактировалось gipro, 11.06.2009 в 14:29.
gipro вне форума  
 
Непрочитано 11.06.2009, 14:50
#185
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Кулик Алексей aka kpblc, еще можно вьюпорты обрабатывать. На вырост, можно и мультилинии добавлять. Если имя слоя брать из Стиля мультилинии.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 05.01.2010, 15:25
#186
Positron


 
Регистрация: 25.06.2009
Сообщений: 147


Добрый день!

Хотел спросить, а как в код добавить авто определение стиля размера:
чтоб определяло какой именно стиль размера и тогда кидало на заданный слой.

Причиной тому есть то что я работаю имея для каждого стиля свой слой.
Positron вне форума  
 
Непрочитано 05.01.2010, 21:05
#187
nik_mb

конструктор
 
Регистрация: 23.03.2009
Волгоград
Сообщений: 120


Цитата:
Сообщение от Positron Посмотреть сообщение
Хотел спросить, а как в код добавить авто определение стиля размера:
чтоб определяло какой именно стиль размера и тогда кидало на заданный слой.
Причиной тому есть то что я работаю имея для каждого стиля свой слой.
Просто. Вставить такой кусок кода вместо написанного:
Код:
[Выделить все]
 (defun cmd-start (react	cmd / selset   cmd_name ent
		  svr res tag text index _attreq_  _attdia_
		  )
  (setq cmd_name (strcase (car cmd) t))
(setq *dim_style* (strcase (getvar "dimstyle")));;ДОБАВИТЬ ЭТУ СТРОКУ
;; для определения текущего размерного стиля
(cond
 ((vl-string-search "dim" cmd_name)
  (setq *vlr-settings*
	(list (cons "layer"
		    (vla-get-activelayer *kpblc-activedoc*)
		    ) ;_ end of cons
  	(cons "color" (getvar "cecolor"))
	(cons "lw" (getvar "celweight"))
	(cons "lt" (getvar "celtype")) ) ;_ end of list
	   ) ;_ end of setq
;;НАЧАЛО ВСТАВКИ. "DIM_ONE", "DIM_TWO" и "DIM_THREE" - имеющиеся размерные стили
(cond
((= *dim_style* "DIM_ONE") ;; для первого стиля размеров, писать всеми заглавными
 (vla-put-activelayer *kpblc-activedoc*
   (_kpblc-layer-create
     '(("name" . "Размеры_one");;Имя слоя для первого стиля размеров "dim_one"
       ("color" . 140)
       ("lw" . 20) )
     )
   )
 )
((= *dim_style* "DIM_TWO") ;; для второго стиля
 (vla-put-activelayer *kpblc-activedoc*
   (_kpblc-layer-create
     '(("name" . "Размеры_two")
       ("color" . 140)
       ("lw" . 20)
       )
     )
   )
 )
((= *dim_style* "DIM_THREE") ;; и еще для одного
 (vla-put-activelayer *kpblc-activedoc*
   (_kpblc-layer-create
     '(("name" . "Размеры_three")
       ("color" . 140)
       ("lw" . 20)
       )
     )
   )
 )
;; и т.д и т.п. сколько есть стилей
);;cond 
;; КОНЕЦ ВСТАВКИ
 (mapcar 'setvar
	 '("cecolor" "celweight" "celtype")
	 '("bylayer" -1 "bylayer")
	 ) ;_ end of mapcar
...
__________________
Мой сайт ingnmb.wixsite.com/acad-s

Последний раз редактировалось Кулик Алексей aka kpblc, 16.11.2012 в 13:44.
nik_mb вне форума  
 
Непрочитано 06.01.2010, 18:11
#188
Positron


 
Регистрация: 25.06.2009
Сообщений: 147


Цитата:
Сообщение от nik_mb Посмотреть сообщение
Просто. Вставить такой кусок кода вместо написанного:
Код:
[Выделить все]
(defun cmd-start (react	cmd / selset   cmd_name ent
		  svr res tag text index _attreq_  _attdia_
		  )
  (setq cmd_name (strcase (car cmd) t))
(setq *dim_style* (strcase (getvar "dimstyle")));;ДОБАВИТЬ ЭТУ СТРОКУ
;; для определения текущего размерного стиля
(cond
 ((vl-string-search "dim" cmd_name)
  (setq *vlr-settings*
	(list (cons "layer"
		    (vla-get-activelayer *kpblc-activedoc*)
		    ) ;_ end of cons
  	(cons "color" (getvar "cecolor"))
	(cons "lw" (getvar "celweight"))
	(cons "lt" (getvar "celtype")) ) ;_ end of list
	   ) ;_ end of setq
;;НАЧАЛО ВСТАВКИ. "DIM_ONE", "DIM_TWO" и "DIM_THREE" - имеющиеся размерные стили
(cond
((= *dim_style* "DIM_ONE") ;; для первого стиля размеров, писать всеми заглавными
 (vla-put-activelayer *kpblc-activedoc*
   (_kpblc-layer-create
     '(("name" . "Размеры_one");;Имя слоя для первого стиля размеров "dim_one"
       ("color" . 140)
       ("lw" . 20) )
     )
   )
 )
((= *dim_style* "DIM_TWO") ;; для второго стиля
 (vla-put-activelayer *kpblc-activedoc*
   (_kpblc-layer-create
     '(("name" . "Размеры_two")
       ("color" . 140)
       ("lw" . 20)
       )
     )
   )
 )
((= *dim_style* "DIM_THREE") ;; и еще для одного
 (vla-put-activelayer *kpblc-activedoc*
   (_kpblc-layer-create
     '(("name" . "Размеры_three")
       ("color" . 140)
       ("lw" . 20)
       )
     )
   )
 )
;; и т.д и т.п. сколько есть стилей
);;cond 
;; КОНЕЦ ВСТАВКИ
 (mapcar 'setvar
	 '("cecolor" "celweight" "celtype")
	 '("bylayer" -1 "bylayer")
	 ) ;_ end of mapcar
...
Спасибо что откликнулся!

Проверил, но почемуто не работает, говорю что делал:
Закинул в автозапуск, создал как в примере
слой DIM_TWO и стиль Размеры_two
чтоб проверить работоспособность...
подставлял и свои, но не работает ни один.

Возможно я чо не так сделал?
Positron вне форума  
 
Непрочитано 06.01.2010, 22:25
#189
nik_mb

конструктор
 
Регистрация: 23.03.2009
Волгоград
Сообщений: 120


Полностью исправленный лисп-файл (правда, мною немного поковерканый) и чертеж-двг, как пример.
Пробуй. У меня работает.
Вложения
Тип файла: zip lay_jump.zip (23.8 Кб, 161 просмотров)
__________________
Мой сайт ingnmb.wixsite.com/acad-s
nik_mb вне форума  
 
Непрочитано 09.02.2010, 14:18
#190
Positron


 
Регистрация: 25.06.2009
Сообщений: 147


Цитата:
Сообщение от nik_mb Посмотреть сообщение
Полностью исправленный лисп-файл (правда, мною немного поковерканый) и чертеж-двг, как пример.
Пробуй. У меня работает.
Запустил чертёж, там работают твои слоя и стили, но как непойму, я перед этим лисп даже не загрузил в автокад...
Когда загрузил в автозагрузку лисп со своими натсройками(красным), то оно неработает:

Код:
[Выделить все]
 ;; Перенесение заданных примитивов (размеры, штриховка, текст) на заданный слой

(if (not ActiveDocument)
  (setq ActiveDocument (vla-get-ActiveDocument (vlax-get-acad-object)))
 ) ;_ end of if

(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-cancel)
		      (:vlr-commandfailed . cmd-fail)
		      )
		    ) ;_ end of VLR-Command-Reactor
	) ;_ end of setq
  ) ;_ end of if
;; Функция подгрузки типа линии - на http://www.autocad.ru/cgi-bin/f1/board.cgi?t=22730iW

;|=============================================================================
*    Создание слоя с указанными параметрами.
*    Возвращает vla-указатель на созданный слой. Если слой существует, его
* настройки приводятся в соответствие с переданным списком.
*   layer-list   список параметров слоя вида:
   '(("name" . "TestLayer")   ; имя слоя. Не может быть пропущено
   ("color" . 3)         ; номер цвета. nil -> 7
   ("lw" . 50)         ; вес линии слоя. nil -> 25
   ("lt" . "hidden")      ; тип линии слоя. nil -> Continuous
               ; Если описания типа линии в acadiso.lin
               ; нет, обязательно указывать следующий
               ; параметр
   ("ltfile" . "c:\\cad\\ltypes\\lt.lin")   ; полный путь к файлу с описанием
               ; типа линии. Если файл находится в путях
               ; поддержки, путь можно не указывать
   ("plot" . "y")         ; Печатать ("y") или нет ("n") слой.
               ; nil -> "y"
   )
*    Слой размораживается, разблокируется и включается. Не активируется.
|;
(defun _kpblc-layer-create (layer-list / vla_layer)
(setq vla_layer (vla-add (vla-get-layers ActiveDocument)
	   (cdr (assoc "name" layer-list))
	   ) ;_ end of vla-add
	) ;_ end of setq
  (vla-put-color vla_layer 
    (if	(cdr (assoc "color" layer-list))
      (cdr (assoc "color" layer-list))
      7
      ) ;_ end of if
    ) ;_ end of vla-put-color
  (vla-put-lineweight
    vla_layer
    (if	(cdr (assoc "lw" layer-list))
      (cdr (assoc "lw" layer-list))
      aclnwt025
      ) ;_ end of if
    ) ;_ end of vla-put-lineweight
  (if (and (cdr (assoc "lt" layer-list))
	   (_kpblc-linetype-load
	     (cdr (assoc "lt" layer-list))
	     (cdr (assoc "ltfile" layer-list))
	     ) ;_ end of _kpblc-linetype-load
	   ) ;_ end of and
    (vla-put-linetype vla_layer (cdr (assoc "lt" layer-list)))
    (vla-put-linetype vla_layer "Continuous")
    ) ;_ end of if
  (vla-put-plottable
    vla_layer
    (if	(= (cdr (assoc "plot" layer-list)) "n")
      :vlax-false
      :vlax-true
      ) ;_ end of if
    ) ;_ end of vla-put-Plottable
  (vla-put-lock vla_layer :vlax-false)
  (vla-put-layeron vla_layer :vlax-true)
  (if (not (equal (vla-get-activelayer ActiveDocument)
		  vla_layer
		  ) ;_ end of equal
	   ) ;_ end of not
    (vla-put-freeze vla_layer :vlax-false)
    ) ;_ end of if
  vla_layer
  ) ;_ end of defun

(defun cmd-start (react	cmd / selset   cmd_name ent
		  svr res tag text index _attreq_  _attdia_
		  )
  (setq cmd_name (strcase (car cmd) t))
(setq *dim_style* (strcase (getvar "dimstyle")))
(cond
((vl-string-search "dim" cmd_name)(setq *vlr-settings* (list (cons "layer" (vla-get-activelayer ActiveDocument)) ;_ end of cons
  	(cons "color" (getvar "cecolor"))
	(cons "lw" (getvar "celweight"))
	(cons "lt" (getvar "celtype")) ) ;_ end of list
	   ) ;_ end of setq
(cond
((= *dim_style* "01_1x1")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1x1)")("color" . 140)("lw" . 20)))))
((= *dim_style* "02_1x2")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1x2)")("color" . 140)("lw" . 20)))))
((= *dim_style* "03_1x4")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1x4-5)")("color" . 140)("lw" . 20)))))
((= *dim_style* "04_1x5")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1x4-5)")("color" . 140)("lw" . 20)))))
((= *dim_style* "05_1x8")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1х08-10)")("color" . 140)("lw" . 20)))))
((= *dim_style* "06_1x10")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1х08-10)")("color" . 140)("lw" . 20)))))
((= *dim_style* "07_1x16")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1х16-20)")("color" . 140)("lw" . 20)))))
((= *dim_style* "08_1x20")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1х16-20)")("color" . 140)("lw" . 20)))))
((= *dim_style* "09_1x30")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM")("color" . 140)("lw" . 20)))))
((= *dim_style* "10_1x40")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM")("color" . 140)("lw" . 20)))))
((= *dim_style* "11_G1x1")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM")("color" . 140)("lw" . 20)))))
);;cond
(mapcar 'setvar '("cecolor" "celweight" "celtype") '("bylayer" -1 "bylayer")) ;_ end of mapcar
     )
    ((vl-string-search "hatch" cmd_name)(setq *vlr-settings*
	    (list (cons	"layer" (vla-get-activelayer ActiveDocument)	) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "Штриховка")("color" . 190)("lw" . 15)) ) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar '("cecolor" "celweight" "celtype")'("bylayer" -1 "bylayer")) ;_ end of mapcar
     )
    ((vl-string-search "text" cmd_name)
     (setq *vlr-settings* (list (cons	"layer" (vla-get-activelayer ActiveDocument)	) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq
     (vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "Текст")("color" . 150)("lw" . 25))) ;_ end of _kpblc-layer-create
       ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar '("cecolor" "celweight" "celtype") '("bylayer" -1 "bylayer")) ;_ end of mapcar
     )
    ) ;_ end of cond
  ) ;_ end of defun

(defun cmd-end (react  cmd  / list_obj selset  item counter leader_item cmd_name
		leader_item_list up_string low_string )
  (setq	cmd_name (strcase (car cmd) t) 	counter	 0 ) ;_ end of setq
  (cond
    ((or (vl-string-search "dim" cmd_name)
	 (vl-string-search "text" cmd_name)
	 (vl-string-search "hatch" cmd_name)
	 ) ;_ end of or
     (if *vlr-settings*
       (progn
	 (vla-put-activelayer
	   ActiveDocument
	   (cdr (assoc "layer" *vlr-settings*))
	   ) ;_ end of vla-put-ActiveLayer
	 (mapcar 'setvar
		 '("cecolor" "celweight" "celtype")
		 (list (cdr (assoc "color" *vlr-settings*))
		       (cdr (assoc "lw" *vlr-settings*))
		       (cdr (assoc "lt" *vlr-settings*))
		       ) ;_ end of list
		 ) ;_ end of mapcar
	 (setq *vlr-settings* nil)
	 ) ;_ end of progn
       ) ;_ end of if
     )
    ) ;_ end of cond
  ) ;_ end of defun

(defun cmd-cancel (react cmd / cmd_name)
  (setq cmd_name (strcase (car cmd) t))
  (cond
    ((or (vl-string-search "dim" cmd_name)
	 (vl-string-search "text" cmd_name)
	 (vl-string-search "hatch" cmd_name)
	 ) ;_ end of or
     (if *vlr-settings*
       (progn
	 (vla-put-activelayer
	   ActiveDocument
	   (cdr (assoc "layer" *vlr-settings*))
	   ) ;_ end of vla-put-ActiveLayer
	 (mapcar 'setvar
		 '("cecolor" "celweight" "celtype")
		 (list (cdr (assoc "color" *vlr-settings*))
		       (cdr (assoc "lw" *vlr-settings*))
		       (cdr (assoc "lt" *vlr-settings*))
		       ) ;_ end of list
		 ) ;_ end of mapcar
	 (setq *vlr-settings* nil)
	 ) ;_ end of progn
       ) ;_ end of if
     )
    ) ;_ end of cond
  ) ;_ end of defun

;|=============================================================================
*    Функция подгрузки типа линии в текущий файл. Учитывает возможную
* локализацию системы.
*    Параметры вызова:
*  ltype-name  имя типа линии для английской версии
*  ltype-file  имя файла описания типа линии. nil -> "acadiso.lin"ю
*      Если файл с описанием типа линии не лежит по путям
*      поддержки када, надо указывать полный путь к нему.
*    Примеры вызова:
(_kpblc-linetype-load "center" nil)  ; для русской версии подгружает Осевая и возвращает
                                     ; t при успехе
***  Соответствие наименований линий обеспечивается огромным списком ltype_list
*** который можно и нужно дополнять :) Только надо либо все делать мелкими
*** буквами, либо жестко соблюдать регистр в моменты вызовов.
***  Тип линии "Continuous" обработке не подвергается — он есть во всех версиях
=============================================================================|;
(defun _kpblc-linetype-load
       (ltype-name ltype-file / ltype_normal ltype_list result)
  (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))
    ;; тип линии не найден, надо его загрузить. Тип линии должен быть
    ;; описан в файле
    (setq result (not (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 not
	  ) ;_ end of setq
    ) ;_ end of if
  result
  ) ;_ end of defun

Последний раз редактировалось Кулик Алексей aka kpblc, 16.11.2012 в 13:46.
Positron вне форума  
 
Непрочитано 10.02.2010, 20:49
#191
nik_mb

конструктор
 
Регистрация: 23.03.2009
Волгоград
Сообщений: 120


Так писать нельзя. Надо, что бы в программе название слоев были заглавными буквами от того, что строчка у kpblc такая:
Код:
[Выделить все]
(setq *dim_style* (strcase (getvar "dimstyle")))
Поэтому в коде выглядеть должно так:
Код:
[Выделить все]
;; "X" - заглавная латинская икс
((= *dim_style* "01_1X1")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1x1)")("color" . 140)("lw" . 20)))))
((= *dim_style* "02_1X2")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1x2)")("color" . 140)("lw" . 20)))))
((= *dim_style* "03_1X4")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1x4-5)")("color" . 140)("lw" . 20)))))
((= *dim_style* "04_1X5")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1x4-5)")("color" . 140)("lw" . 20)))))
((= *dim_style* "05_1X8")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1х08-10)")("color" . 140)("lw" . 20)))))
((= *dim_style* "06_1X10")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1х08-10)")("color" . 140)("lw" . 20)))))
((= *dim_style* "07_1X16")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1х16-20)")("color" . 140)("lw" . 20)))))
((= *dim_style* "08_1X20")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM (1х16-20)")("color" . 140)("lw" . 20)))))
((= *dim_style* "09_1X30")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM")("color" . 140)("lw" . 20)))))
((= *dim_style* "10_1X40")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM")("color" . 140)("lw" . 20)))))
((= *dim_style* "11_G1X1")(vla-put-activelayer ActiveDocument (_kpblc-layer-create '(("name" . "02 DIM")("color" . 140)("lw" . 20)))))
В самом файле можно называть размерные стили какими угодно буквами

ЗЫ. Как говорил Жванецкий: "Тщательнее надо ребята..."
__________________
Мой сайт ingnmb.wixsite.com/acad-s
nik_mb вне форума  
 
Непрочитано 11.02.2010, 14:06
#192
Positron


 
Регистрация: 25.06.2009
Сообщений: 147


Спасибо, исправил, работает замечательно.

Есть ещо 1-н вопросик, а возможно штоб текст в зависимости от высоты перемещался на слои.

вот по таким параметрам (первый столбик высота текста, после "-слой->" название слоя):


2.5, 3, 4 -слой-> 02 DIM (1x1)
__________________________________________
5, 6, 8 -слой-> 02 DIM (1x2)
__________________________________________
10,12.5,16 -слой-> 02 DIM (1x4-5)
__________________________________________
20, 25 -слой-> 02 DIM (1х08-10)
__________________________________________
40, 50 -слой-> 02 DIM (1х16-20)
__________________________________________
любые другие высоты -слой-> 10 Text

Последний раз редактировалось Positron, 11.02.2010 в 14:24. Причина: Вопрос по высотам текста на слоя
Positron вне форума  
 
Непрочитано 11.02.2010, 16:43
#193
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Такое (в общем случае) будет возможно только по завершении команды. Или писать переопределенную команду.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.02.2010, 17:01
#194
Positron


 
Регистрация: 25.06.2009
Сообщений: 147


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Такое (в общем случае) будет возможно только по завершении команды. Или писать переопределенную команду.
а если забить каждую высоту в определённый стиль текста?
может так?
Positron вне форума  
 
Непрочитано 11.02.2010, 19:27
#195
nik_mb

конструктор
 
Регистрация: 23.03.2009
Волгоград
Сообщений: 120


Я, в своем "строителе" сделал для текста высотой 2,5мм (команда "текст_м") такой программный перевод на нужный слой (он настраивается). Но прежде небольшое пояснение.
Не нравится мне чертить в видовых экранах на листах (layout). Разбиваю чертеж в пространстве модели на масштабные зоны, управляемые программой через блок с скрытыми атрибутами. В этом блоке записаны масштаб и координаты зоны этого масштаба. Рисуя в той или иной зоне, происходит автоматический переход масштабов для отрисовки оформительских элементов "строителя", текста и размерных стилей (для каждого масштаба определяю свой размерный стиль с заданным глобально масштабом).

Код:
[Выделить все]
(defun c:текст_м (/ pt1 htet1 pr_te prm_te)
  (setvar "cmdecho" 0)
  (vlax-invoke-method activedocument "StartUndoMark")
  (setq old_lay (getvar "clayer"))
  (setvar "celweight" tolsh_29)
  (у_сл_те)
  ;; установка слоя текста
  (if (not msh)
    (progn (masht))
  ) ;_ конец if
  ;; установка заданного масштаба
  (p_mash)
  (setq	pr_te nil
	prm_te nil
  ) ;_ конец setq
  (setq
    pt1	(getpoint "\nНачальная точка текста [Enter - Выравнивание]: ")
  ) ;_ конец setq
  (princ "\n")
  (if pt1
    (progn
      (setq ptum pt1)
      ;; если точка попадает в масштабную зону то переустановить масштаб
      (zmash);; функция определения масштаба по координатам точки pt1
      (setq htet1 (* mshv 2.5));; установить высоту по масштабу
      (setvar "cmdecho" 1)
      (command "_dtext" pt1 htet1 pause)
    ) ;_ конец progn
    (progn
      ;;если не указана точка начала текста
      (initget
	32
	"вписанный поширине центр середина вправо ВЛ ВЦ ВП СЛ СЦ СП НЛ НЦ НП И и П п Ц ц Е е Р р вл вп сл сц сп нл нц нп"
      ) ;_ конец initget
      (setq pr_te
	     (getkword
	       (strcat
		 "\nЗадайте параметр "
		 "\n[впИсанный/Поширине/Центр/сЕредина/впРаво/ВЛ/ВЦ/ВП/СЛ/СЦ/СП/НЛ/НЦ/НП]: "
	       ) ;_ конец strcat
	     ) ;_ конец getkword
      ) ;_ конец setq
      (if pr_te
	(setq prm_te pr_te)
	(setq prm_te "_bl")
      ) ;_ конец if
      (while (not pt1)
	(setq pt1 (getpoint "\nНачальная точка текста: "))
      ) ;_ конец while
      (princ "\n")
      (setq ptum pt1)
      ;; если точка попадает в масштабную зону то переустановить масштаб
      (zmash)
      (setq htet1 (* mshv 2.5))
      (setvar "cmdecho" 1)
      (command "_dtext" "_j" prm_te pt1 htet1 pause)
    ) ;_ конец progn
  ) ;_ конец if
  (setvar "clayer" old_lay)
  (setvar "celweight" old_wgt)
  (vlax-invoke-method activedocument "EndUndoMark")
) ;_ конец defun

(defun у_сл_те ( / s_layer lay_cr v_col)
  ;; установка слоя текста
  (if (and (not (tblsearch "layer" lay_29)) (/= lay_29 "_ByLayer"))
    (progn ;; если такого слоя нет то создать
	   (if (not l_col_te)
	     (progn
	       (princ "\nЦвет слоя ")
	       (princ lay_29)
	       ;; установка настроенного слоя 
	       (princ " голубой <140>?: ")
	       (setq v_col (getint))
	       (if v_col
		 (setq l_col_te v_col)
		 (setq l_col_te 140)
	       ) ;_ конец if
	     ) ;_ конец progn
	   ) ;_ конец if
	   (setq s_layer (vla-get-layers activedocument))
	   (setq lay_cr (vlax-invoke-method s_layer "add" lay_29))
	   (vla-put-color lay_cr l_col_te)
	   (setvar "clayer" lay_29)
    ) ;_ конец progn
    (if	(/= lay_29 "_ByLayer")
      (setvar "clayer" lay_29)
    ) ;_ конец if
    ;; переход на нужный слой
  ) ;_ конец if
) ;_ конец defun
Наделать таких программок для каждой высоты текста можно сколько угодно.

С масшатабными зонами пока не все дается просто. По части переключения размерных стилей, в тех, где требуется выбрать примитив - круг, дугу или линии (размеры угла или радиуса).
__________________
Мой сайт ingnmb.wixsite.com/acad-s
nik_mb вне форума  
 
Непрочитано 26.02.2010, 09:15
#196
milamu

конструктор
 
Регистрация: 30.04.2009
Красноярск
Сообщений: 53
<phrase 1=


С недавних пор задалась проблемой, а можно ли командам присвоить слои..Прочитала ваше обсуждение данной проблемы с самого начала и до конца...
Скажу честно, програмист из меня никакой, я ничего не поняла в ваших кодах и лиспах, что и куда вставлять надо....
Ответьте мне пожлста, можно ли профану, такому как я, без кодов и подобных ему..., присваивать командам слои в 2009 акаде?
milamu вне форума  
 
Непрочитано 26.02.2010, 09:28
#197
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Можно. С помощью палитры инструментов.
Profan вне форума  
 
Непрочитано 26.02.2010, 09:35
#198
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


.. или так (см. .doc файл). Там по выделению цветом все понятно.
Вложения
Тип файла: doc kpblc-vlr_modif.doc (71.0 Кб, 275 просмотров)
andrew_ro вне форума  
 
Непрочитано 26.02.2010, 09:38
#199
milamu

конструктор
 
Регистрация: 30.04.2009
Красноярск
Сообщений: 53
<phrase 1=


Цитата:
Сообщение от Profan Посмотреть сообщение
Можно. С помощью палитры инструментов.
напишите пжлста как, только по русски, я в английских названиях не разбираюсь
milamu вне форума  
 
Непрочитано 26.02.2010, 09:52
#200
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Содаете новую палитру инструментов с помощью контекстного меню по щелчку правой кнопкой мыши на пустом месте существующей палитры инструментов. С помощью контекстного меню запускаете Адаптацию палитр. Удерживая нажатой клавишу Ctrl, перетаскиваете любую кнопку с панелей на новую палитру. Далее смотрите и редактируете свойства этого инструмента по правой кнопке мыши.
Profan вне форума  
 
Непрочитано 26.02.2010, 10:37
#201
milamu

конструктор
 
Регистрация: 30.04.2009
Красноярск
Сообщений: 53
<phrase 1=


это работает если СПДС установлен, а в голом акаде нет
milamu вне форума  
 
Непрочитано 26.02.2010, 10:42
#202
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


В голом 2006 работает.
Do$ вне форума  
 
Непрочитано 26.02.2010, 10:44
#203
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Это работает в любом AutoCAD независимо ни от чего.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.02.2010, 10:44
#204
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


milamu, при чем тут СПДС? Палитра инструментов не имеет отношения к СПДС
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon на форуме  
 
Непрочитано 26.02.2010, 10:59
#205
milamu

конструктор
 
Регистрация: 30.04.2009
Красноярск
Сообщений: 53
<phrase 1=


то есть, вы хотите сказать что выбирая команду "размеры" они у меня будут в слое "КМ_размеры", не зависимо от того какой текущий слой стоит?
milamu вне форума  
 
Непрочитано 26.02.2010, 11:01
#206
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Да. Запустите команду с палитры, размеры проставятся на заданном слое и после завершения команды установится текущим прежний слой.
Profan вне форума  
 
Непрочитано 26.02.2010, 11:07
#207
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Я (за всех говорить не буду) имел в виду, что:
а) методология создания палитр инструментов "вшита" в AutoCAD
б) если на палитру инструментов поместить, например, команду "_.dimlinear" и соответствующим образом ее настроить, то при вызове этой команды будет выполняться создание / активация слоя.
в) если палитры инструментов не устраивают, то надо подгружать соответствующее расширение - либо бесплатное (как в этой теме), либо платное (например, СПДС GraphiCS / MechaniCS etc)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.02.2010, 11:27
#208
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


А установка слоя в СПДС не конфликтует с установкой в палитре? Кто главнее получится?
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 26.02.2010, 11:33
#209
milamu

конструктор
 
Регистрация: 30.04.2009
Красноярск
Сообщений: 53
<phrase 1=


это наверно, если использовать ваши коды, тогда возможно? потому что у меня ничего не выходит, либо я вас не понимаю и делаю не правильно, либо я не так задаю вопрос....
либо я блондинка
milamu вне форума  
 
Непрочитано 05.03.2010, 17:48
#210
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,179
<phrase 1=


Подскажите, а как сделать lisp для выделения только размеров из выбираемого мной множества объектов

Что-то типа _filter , в нем Dimension, но БЕЗ ВЫЗОВА диалогового окна, может можно макросом обойтись?
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Непрочитано 05.03.2010, 18:30
#211
andrew_ro

Светопрозрачные конструкции, проектирование
 
Регистрация: 29.07.2008
Сообщений: 47


можно так

(sssetfirst nil (ssget '((0 . "DIMENSION,ARC_DIMENSION,LARGE_RADIAL_DIMENSION"))))
andrew_ro вне форума  
 
Непрочитано 05.03.2010, 19:37
#212
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,179
<phrase 1=


andrew_ro, Ух, как просто, БОЛЬШОЕ СПАСИБО!
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Непрочитано 08.03.2010, 10:51
#213
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от sasha_lif Посмотреть сообщение
а как сделать lisp для выделения только размеров из выбираемого мной множества объекто
Вариан чуть-чуть покороче
Код:
[Выделить все]
(sssetfirst nil (ssget '((0 . "*DIMENSION")) ))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.05.2010, 12:53
#214
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от VVA Посмотреть сообщение
Код:
[Выделить все]
;;; Автор идеи 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" 151 "" "") ;_Создаем слой размеры и задаем цвет 151 ... 
(vl-cmdf "_layer" "_make" "Штриховка" "_color" 5 "" "") ;_Создаем слой штриховка и задаем цвет 5 
(vl-cmdf "_layer" "_make" "Текст" "_color" 6 "" "")     ;_Создаем слой текст и задаем цвет 6
(vl-cmdf "_layer" "_make" "Таблицы" "_color" 6 "" "")   ;_Создаем слой таблицы и задаем цвет 6
(vl-cmdf "_layer" "_make" "Выноски" "_color" 6 "" "")   ;_Создаем слой выноски и задаем цвет 6
(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))
***Добавлено 30.11.2008 Внесены изменения (красным) в соответствии с проблемой, описанной в #139 и решением #143
Не нравится мне чтойто (vlr-remove-all :vlr-command-reactor)
зачем выключать все реакторы? А если там есть реакторы от сторонних производителей, которые тоже делают полезное дело?
А если юзер грузит лисп по 200 раз это его проблемы. Если обезьяна с гранатой проникла на склад взрывчатых веществ то лучше ее пристрелить чем поймать.
mmax вне форума  
 
Непрочитано 16.05.2010, 23:01
#215
МИНЗДРАВ

Oxypropane welder
 
Регистрация: 29.01.2008
Unix
Сообщений: 770


Цитата:
Сообщение от VVA Посмотреть сообщение
;;;Просто добавь этот файл в автозагрузку (vl-load-com)
А в какую автозагрузку надо добавлять? и какой файл? Текстовый, с содержанием цитированного кода?
МИНЗДРАВ вне форума  
 
Непрочитано 16.05.2010, 23:11
#216
grachev.p

конструктор мебели
 
Регистрация: 28.02.2010
г. Гатчина
Сообщений: 27


Цитата:
Сообщение от МИНЗДРАВ Посмотреть сообщение
А в какую автозагрузку надо добавлять? и какой файл? Текстовый, с содержанием цитированного кода?
Сохранить этот текст в файл "имя_файла.lsp"

Команда _appload. От туда либо загружаешь его, либо добавляешь в автозагрузку.
grachev.p вне форума  
 
Непрочитано 17.05.2010, 00:03
#217
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


http://dwg.ru/pub/9
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.05.2010, 09:51
#218
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от mmax Посмотреть сообщение
Не нравится мне чтойто (vlr-remove-all :vlr-command-reactor)
Ну так никто секретов и не делает. Код можно поправить по своему усмотрению
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.05.2010, 19:07
#219
2pic


 
Регистрация: 20.05.2010
Сообщений: 1


Уважаемые, Гуру, подскажите пожалуйста как сделать реактор отслеживающий изменение значения размера при редактировании его средствами СПДС GraphiCS. В частности, если значение размера при редактировании стало отличным от действительного (созданного автокадом и имеющего <>), то он приобретает другой цвет, если значение осталось прежним (пользователь вышел из диалогового окна редактирования размера без внесения изменений, или вернул действительное значение уже окрашенному размеру) цвет возвращается на изначально заданный по сою для размеров. Заранее благодарен за внимание.
2pic вне форума  
 
Непрочитано 20.05.2010, 19:24
#220
МИНЗДРАВ

Oxypropane welder
 
Регистрация: 29.01.2008
Unix
Сообщений: 770


А почему цитированный код, после помещения в автозагрузку, имеет цвет неактивного?
МИНЗДРАВ вне форума  
 
Непрочитано 22.05.2010, 22:41
#221
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от МИНЗДРАВ Посмотреть сообщение
А почему цитированный код, после помещения в автозагрузку, имеет цвет неактивного?
Потому как лисп-приложения не могут быть выгружены
gomer вне форума  
 
Непрочитано 24.05.2010, 09:22
1 | 1 #222
TuDim


 
Регистрация: 22.02.2006
Минск
Сообщений: 80


Автоперенос размера в слой (Vetcad)
Вложения
Тип файла: rar Автоперенос размера в слой.rar (1.70 Мб, 224 просмотров)
TuDim вне форума  
 
Непрочитано 20.10.2010, 01:03
#223
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Поговорили... поговорили... а слой после простановки размера в #25 так и не возвращается обратно
gomer вне форума  
 
Непрочитано 20.10.2010, 07:06
#224
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Ты тему не перепутал?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.10.2010, 10:24
#225
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Кулик Алексей aka kpblc, а можно сделать настройку в лиспе, для выбора помещать/не помещать объекты на слой?
Я добавил лисп в корпоративный cuix-файл, но некоторым пользователям не нужно разносить тексты в слой "Текст". Они имеют больше слоев. Очень не хочется дублировать корпоративную панель, только чтобы подружать другой lisp. М.б. конструкцию типа
Код:
[Выделить все]
(if (*username* USER)(лисп работай!))
можно добавить в код?
А еще лучше, чтобы в виде диалогового окна выскакивали опции, где нужно ставить галочки
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 20.10.2010, 18:50
#226
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ты тему не перепутал?
Отнюдь
gomer вне форума  
 
Непрочитано 20.10.2010, 19:40
#227
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Цитата:
Сообщение от gomer Посмотреть сообщение
Отнюдь
Ты посмотри на #25 этой темы.
> wetr: теоретически такое сделать можно, но уж больно долго... Сейчас просто нет времени и возможности подобным заниматься
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.10.2010, 19:53
#228
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


посмотрел... там это...
Цитата:
Сообщение от VVA Посмотреть сообщение
Код:
[Выделить все]
;;; Автор идеи 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" 151 "" "") ;_Создаем слой размеры и задаем цвет 151 ... 
(vl-cmdf "_layer" "_make" "Штриховка" "_color" 5 "" "") ;_Создаем слой штриховка и задаем цвет 5 
(vl-cmdf "_layer" "_make" "Текст" "_color" 6 "" "")     ;_Создаем слой текст и задаем цвет 6
(vl-cmdf "_layer" "_make" "Таблицы" "_color" 6 "" "")   ;_Создаем слой таблицы и задаем цвет 6
(vl-cmdf "_layer" "_make" "Выноски" "_color" 6 "" "")   ;_Создаем слой выноски и задаем цвет 6
(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))
***Добавлено 30.11.2008 Внесены изменения (красным) в соответствии с проблемой, описанной в #139 и решением #143
gomer вне форума  
 
Непрочитано 20.10.2010, 20:08
#229
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от gomer Посмотреть сообщение
Поговорили... поговорили... а слой после простановки размера в #25 так и не возвращается обратно
А у меня возвращается. Подробнее: версия Автокада, сервиспаки, наличие прочих приложений и т.п.
Цитата:
а можно сделать настройку в лиспе, для выбора помещать/не помещать объекты на слой?
Раз есть копроративное меню, то есть (или можно создать) корпоративный mnl файл. Пользователе, которым не нужно разносить текст будем брать из системной переменной USERNAME. Список пользователей создатим как глобальныю переменную *USER* в mnl файле
Код:
[Выделить все]
(setq *USER* '("IVANOV" "PETROV" "SIDORIFF"))
А сам код (на примере из #25) немного подкорректируем так:
Код:
[Выделить все]
;;;;;;------------------------------------------------------------- 
(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)
     (if (not(member (strcase(getenv "USERNAME")) *USER*))
       (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))
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 20.10.2010 в 20:23.
VVA вне форума  
 
Непрочитано 20.10.2010, 20:44
#230
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


странно... попробовал только что... возвращается
Но есть и другая проблема: при повторной загрузке лиспа... вылетает ошибка...
Цитата:
ошибка: Настройка переменной AutoCAD отвергнута: "clayer" nil
gomer вне форума  
 
Непрочитано 20.10.2010, 20:51
#231
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


gomer, Код следует грузить 1 раз в сеансе, т.к. там активизируются реакторы и они действуют и работают. Если есть необходимость грузить посторно, то перемести этот фрагмент
Код:
[Выделить все]
(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if
сразу после (vl-load-com) или скопируй код из #25 заново

*** Добавлено В #25 пост добавил вариант от Lee MAC (более правильный на мой взгляд)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 20.10.2010 в 22:25.
VVA вне форума  
 
Непрочитано 20.10.2010, 22:46
#232
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


VVA, решил эту задачку по другому немного...
Код:
[Выделить все]
;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Версия от gomer
;;; Автоматический перенос:
;;; размеров на слой "Размеры" 
;;; штриховки на слой "Штриховка" 
;;; текста на слой "Текст" 
;;; таблиц на слой "Таблицы"
;;; выносок на слой "Выноски"


(vl-load-com)

(setq *LayerData*
	'(("*TEXT"  "Текст"       6)
	 ("*TABLE"  "Таблицы"     6)
	 ("*LEADER" "Выноски"     6) ; именно в такой последовательности!
	 ("DIM*"    "Размеры"   151) ; именно в такой последовательности :(
	 ("*HATCH*" "Штриховка"   5)
	 ("*VPORT*" "DEFPOINTS"   7)
	)
)

(defun cmd-start (calling-reactor startcommandInfo / tmp1 tmp2 Lrs)
;;; функция откклика в начале команды
  (setq Lrs (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))))
  (or *OldLayer* (setq *OldLayer* (getvar "CLAYER")))
  (cond
	((setq tmp1 (cmd-check startcommandInfo))
	  (if (not (tblsearch "LAYER" (cadr (setq tmp2 (assoc tmp1 *LayerData*)))))
		(vla-put-Color (vla-Add Lrs (cadr tmp2)) (caddr tmp2))
	  )
	  (if (= :vlax-True (vla-get-Freeze (vla-Item Lrs (cadr tmp2))))
		(alert (strcat "Слой "(cadr tmp2) " заморожен!"))
		(setvar "clayer" (cadr tmp2))
	  )
	)
	(T (setq *OldLayer* nil))
  )
)

(defun cmd-end (calling-reactor endcommandInfo)
;;; функция откклика в конце команды
  (cond
	((cmd-check endcommandInfo)
	 (if *OldLayer* (setvar "clayer" *OldLayer*))
	 (setq *OldLayer* nil)
	)
  )
  (princ)
)

(defun cmd-check (cmdi)
;;; Проверка команды на "пригодность"
  (car (vl-remove-if-not
	'(lambda (x) (wcmatch (strcase (car cmdi)) x))
	(mapcar 'car *LayerData*))
  )
)

(defun C:ALEND ()
  (cond (*vlr-cmd* (setq *vlr-cmd* nil)
	 (vlr-remove-all :vlr-command-reactor))
  )
  (princ)
)

(defun C:ALSTART ()
  (or *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)
		)
	  )
	)
  )
  (princ)
)
1. не люблю все автозагружаемое... во всем нужен контроль
2. не создаются "ненужные" слои (они создаются, когда это необходимо)
3. реактор не удаляется при перезагрузке (зачем?)
зы еще раз убедился реакторы + команды - штука "взрывоопасная"

***Добавлено***
2010 10 21 - Если слой заморожен выдается сообщение об этом...

Последний раз редактировалось gomer, 21.10.2010 в 21:32.
gomer вне форума  
 
Непрочитано 21.10.2010, 11:12
#233
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


gomer, Я в #25 добавил код от Lee Mac. Он решен более корректно. Там одна команда LD, работающая по принципу : если реакторы выключены - включает и наоборот
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.10.2010, 11:54
#234
avrubtsov

Инженер-конструктор
 
Регистрация: 25.08.2009
Красноярск
Сообщений: 470
Отправить сообщение для avrubtsov с помощью Skype™


У меня в Страче Детайлинге 2011 после постановки размеров слой тоже не возвращается
avrubtsov вне форума  
 
Непрочитано 21.10.2010, 12:04
#235
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


VVA, спасибо, уже практически настроил под себя такой вариант. Немного смущают ваши высказывания
Цитата:
В #25 пост добавил вариант от Lee MAC (более правильный на мой взгляд)
Цитата:
еще раз убедился реакторы + команды - штука "взрывоопасная"
Чем опасен и неправилен вариант с командными методами???
VVA, в новых версиях mnl файл не создается. Могу ли я создать его вручную и прописать в нем все что захочу, как раньше? Те с cuix файл mnl должен подгружаться?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 21.10.2010, 12:17
#236
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Я верно понял лисп из поста 25 - в предлагаемом решении разнос объектов по слоям происходит на основе команды, с помощью которой был создан объект?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 21.10.2010, 12:32
#237
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Как такового "разноса" нет. Просто перед началом работы определенных команд текущий слой изменяется на нужный. После завершения работы команды возвращается исходный слой.
Do$ вне форума  
 
Непрочитано 21.10.2010, 12:38
#238
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Do$ Посмотреть сообщение
еред началом работы определенных команд текущий слой изменяется на нужный. После завершения работы команды возвращается исходный слой.
В таком случае предложенное решение можно смело выбрасывать в ведро, ибо:
Цитата:
Указанный алгоритм решения (ориентация на вызываемую команду) будет неплохо работать только в том случае, когда объекты создаются пользователем в процессе работы AutoCAD с помощью стандартных команд, или же с помощью функций AutoLisp, использующий команду "command".

Однако если такие объекты создавать с помощью плагинов, написанных на .Net или C++ (с использованием объектной модели), то в таких ситуациях предложенное решение не сработает (к сожалению).
Для решения этой проблемы (размещения разных объектов на соответствующих слоях) следует обрабатывать событие ObjectAppended класса Database (не знаю, как они именуются в терминах лиспа).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 21.10.2010 в 12:45.
hwd вне форума  
 
Непрочитано 21.10.2010, 12:43
#239
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от wetr Посмотреть сообщение
VVA, Немного смущают ваши высказывания
Второе высказывание не мое, но отвечу - на используемые команды так же реагирует реактор, поэтому можно получить то, что получили в #230
Цитата:
Сообщение от wetr Посмотреть сообщение
VVA
VVA, в новых версиях mnl файл не создается. Могу ли я создать его вручную и прописать в нем все что захочу, как раньше? Те с cuix файл mnl должен подгружаться?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.10.2010, 12:49
#240
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Люди пользуются, людям нравится - так что ведро подождет
Другое дело, что при черчении с грамотно настроеной палитры, надобность в такой программе отпадает сама собой. Но тут уж кому как нравится...
Цитата:
Для решения этой проблемы (размещения разных объектов на соответствующих слоях) следует обрабатывать событие ObjectAppended класса Database (не знаю, как они именуются в терминах лиспа).
При работе с реакторами из лиспа невозможно в функции обработки события модифицировать объект, вызвавший событие. Поэтому приходится выкручиваться.
Do$ вне форума  
 
Непрочитано 21.10.2010, 13:10
#241
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Do$ Посмотреть сообщение
При работе с реакторами из лиспа невозможно в функции обработки события модифицировать объект, вызвавший событие. Поэтому приходится выкручиваться.
Значит подобные задачи нужно решать не с помощью лиспа.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 21.10.2010, 13:45
#242
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Но задача то уже решена и как раз с помощью лиспа
Do$ вне форума  
 
Непрочитано 21.10.2010, 14:09
#243
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Do$ Посмотреть сообщение
Но задача то уже решена и как раз с помощью лиспа
"Решена" - это когда решение будет корректно работать в любой ситуации. Выше я указал случаи, когда это решение не пройдёт. Т.о. это условное решение (т.е. решение, которое будет работать только при соблюдении ряда условий).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 21.10.2010, 15:13
#244
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Ну а на какое еще можно рассчитывать на общедоступном форуме?
Можно, в принципе, и на лиспе обрабатывать добавление объекта в базу чертежа, запоминать такие объекты и при наступлении какого-нибудь другого события (завершения команды, завершения работы приложения) раскидывать запомненные объекты по слоям.
Написать-то можно, но что-то мне подсказывает, что тем, кто будет пользоваться этой программой, достаточно и того, что уже написано.
Do$ вне форума  
 
Непрочитано 21.10.2010, 20:03
#245
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от VVA Посмотреть сообщение
в #25 добавил код от Lee Mac. Он решен более корректно. Там одна команда LD, работающая по принципу : если реакторы выключены - включает и наоборот
VVA, все бы хорошо, но есть команда _leader, _mleader, а в bricscad - dimleader, которые не будут обрабатываться командой LD...
По-поводу одной команды: как узнать активен ли сейчас реактор или нет без простановки размера? Итак, ИМХО, нужна кнопка в меню с галкой... вопрос в в том, как сделать макрос для кнопки...
gomer вне форума  
 
Непрочитано 21.10.2010, 20:13
#246
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от gomer Посмотреть сообщение
VVA, все бы хорошо, но есть команда _leader, _mleader, а в bricscad - dimleader, которые не будут обрабатываться командой LD...
А самому поправить? Где править выделено красным
Находишь строчку
Цитата:
("*DIM*,*QLEADER" "DIMENSIONS" 2)
И меняешь на
Цитата:
("*DIM*,*LEADER" "DIMENSIONS" 2)
Я поправил маску в #25
*** Добавлено
При аткивности реактора в строке MODEMACRO (левый нижний угол) будет надпись "LD+"
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 21.10.2010 в 20:33.
VVA вне форума  
 
Непрочитано 21.10.2010, 21:15
#247
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от VVA Посмотреть сообщение
При аткивности реактора в строке MODEMACRO (левый нижний угол) будет надпись "LD+"
не отображается Но надеюсь это пройдет
3ы По #25/2
Не смог воспроизвести ситуацию когда предыдущий слой заморожен...
Но мысль правильная)))
не пойму пока игнор UNDO...

Последний раз редактировалось gomer, 21.10.2010 в 21:40.
gomer вне форума  
 
Непрочитано 21.10.2010, 22:10
#248
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


gomer, Скопируй еще раз. Я немного позже добавил надпись LD+
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.10.2010, 22:19
#249
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от VVA Посмотреть сообщение
Я немного позже добавил надпись LD+
Ага... теперь работает... однако же modemacro - такой "гадюшник", в него кто хочет, тот и пишет... а думать дизель для кнопки моя голова отказывается
gomer вне форума  
 
Непрочитано 21.10.2010, 22:30
#250
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Можно всесто MODEMACRO "писать" в пользовательские переменные USERI1 ... USERI5; USERR1...USERR5; USERS1 ... USERS5 и проверять дизелем.
Но туда так же могут писать все кому не лень.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 22.10.2010, 03:13
#251
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от VVA Посмотреть сообщение
А у меня возвращается. Подробнее: версия Автокада, сервиспаки, наличие прочих приложений и т.п.

Раз есть копроративное меню, то есть (или можно создать) корпоративный mnl файл. Пользователе, которым не нужно разносить текст будем брать из системной переменной USERNAME. Список пользователей создатим как глобальныю переменную *USER* в mnl файле
Код:
[Выделить все]
(setq *USER* '("IVANOV" "PETROV" "SIDORIFF"))
А сам код (на примере из #25) немного подкорректируем так:
Код:
[Выделить все]
;;;;;;------------------------------------------------------------- 
(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)
     (if (not(member (strcase(getenv "USERNAME")) *USER*))
       (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))
VVA, не срабатывает такой вариант. М.б. лисп с реактором загружается раньше, чем определяется глобальная переменная *USERNOAUTOLAYER*?
У меня автозагрузка LISP_ов осуществляется через *.cuix
Наверно имеет смысл автозагрузку всех программ переписать в MNL и глобальную переменную *USERNOAUTOLAYER* оперделять в самом начале файла?


***Добавлено***
Не прокатывает такой вариант(((

Вот содержание файла MNL
Код:
[Выделить все]
(setq *USERNOAUTOLAYER* '("ngorovaya" "vvasyuk" ))
(Load "layerM.lsp")
и кусок лиспа
Код:
[Выделить все]
;;; Конец реакции на DIM*    
    ((wcmatch thecommandstart "*HATCH*") ;_Если выполняется команда *HATCH* 
     (setvar "clayer" "_Штриховка") 
    ) 
    ((wcmatch thecommandstart "*TEXT") ;_Если выполняется команда *TEXT (TEXT DTEXT) 
     (if (not(member (strcase(getenv "USERNAME")) *USERNOAUTOLAYER*))
       (setvar "clayer" "_Текст")
     )
    )
    ((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда *TABLE
     (setvar "clayer" "_Таблица") 
    )
Все равно текст помещается на слой "_Текст". Старый реактор удалил, его нет в "Загруженных приложениях". Новый реактор и MNL файл есть в загруженных приложениях...
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 22.10.2010 в 03:37.
wetr вне форума  
 
Непрочитано 22.10.2010, 10:00
1 | #252
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


wetr,
Проблема в регистрах. У тебя в *USERNOAUTOLAYER*в нижнем, а в сравнении (if (not(member (strcase(getenv "USERNAME"))
Попробуй заменить этим фрагментом
Код:
[Выделить все]
((wcmatch thecommandstart "*TEXT") ;_Если выполняется команда *TEXT (TEXT DTEXT) 
     (if (not(member (strcase(getenv "USERNAME")) (mapcar 'strcase *USERNOAUTOLAYER*)))
       (setvar "clayer" "_Текст")
     )
    )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 25.10.2010, 02:22
#253
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


VVA, спасибо, все получилось! Только вот "хвосты" вываливаются в командной строке, несмотря на
Код:
[Выделить все]
(setvar "CMDECHO" 0)
но м.б. это связано с VetCAD_ом...
Цитата:
Regenerating layout.
Regenerating model.

Загрузка VetCAD++ ...Enter an option
[?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/MATerial/Plot/Freeze/Thaw/LOck
/Unlock/stAte/Description/rEconcile]: *Cancel*
Enter an option
[?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/MATerial/Plot/Freeze/Thaw/LOck
/Unlock/stAte/Description/rEconcile]:
Command:
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 25.10.2010 в 03:01.
wetr вне форума  
 
Непрочитано 25.10.2010, 10:24
#254
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


wetr,
В загрузке Vetcad++ CMDECHO может включаться. Прошерсти тамошние (Vetcad) lisp'ы и mnl файл
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 25.10.2010, 19:57
#255
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от wetr Посмотреть сообщение
"хвосты" вываливаются в командной строке
Для того чтоб такое не происходило, нужно просто избавиться от командных методов, как это сделано в #25/2 и #232
gomer вне форума  
 
Непрочитано 26.10.2010, 01:39
#256
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


gomer, еще бы я что-нибудь соображал в не командных методах!
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 07.01.2011, 14:17
#257
EgorS

Архитектура, 3D
 
Регистрация: 16.01.2010
Минск, РБ
Сообщений: 65


не понмиаю куда закидывать эти файлы - вы туу пишете "Просто добавь этот файл в автозагрузку.." что это значит ? в какую автозагрузку ? ... с Лиспом не дружу сразу говорю
EgorS вне форума  
 
Непрочитано 07.01.2011, 22:22
#258
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Как использовать lisp, опубликованный на форуме
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.01.2011, 18:07
#259
EgorS

Архитектура, 3D
 
Регистрация: 16.01.2010
Минск, РБ
Сообщений: 65


Спасибо за наводку! - пошел разбираться )
EgorS вне форума  
 
Непрочитано 31.01.2011, 16:32
#260
pgs112

конструктор
 
Регистрация: 02.12.2008
Москва
Сообщений: 32


Спасибо VVA за лисп из поста 25, вариант 1. Очень удобно!
Можно попросить автора подправить программу так, что бы размеры переносились на слой размер, текст на слой текст, а таблицы, выноски и штриховку она не трогала? сам поыпытался удалять часть кода. результат - вообще ничего не работает(
pgs112 вне форума  
 
Непрочитано 31.01.2011, 17:15
#261
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


pgs112, Попробуй все-таки настроить ее самостоятельно. Удалять код не нужно, нужно комментировать.
Все действия на команды подписаны коментариями типа "Если выполняется команда XXX" Находим нужную и коментируем (ставим символ ; впереди). Например что нужно сделать для таблиц:
Ищем "Если выполняется команда *TABLE"
Находим кусок из 3 строк
Код:
[Выделить все]
  ((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда *TABLE
     (setvar "clayer" "Таблицы") 
    )
Коментируем
Код:
[Выделить все]
;    ((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда *TABLE
;     (setvar "clayer" "Таблицы") 
;    )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 31.01.2011, 22:40
#262
pgs112

конструктор
 
Регистрация: 02.12.2008
Москва
Сообщений: 32


А,...так стирать не нужно.
Всё получилось, благодарю!

Последний раз редактировалось pgs112, 01.02.2011 в 22:18.
pgs112 вне форума  
 
Непрочитано 04.03.2011, 11:19
#263
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Доброе всем время суток!
подскажите пожалуйста можно ли сделать команду которая бы включала и отключала режим прибавления суффикса к имени текущего слоя, а при отключенном режиме чтобы размеры шли в слой "_Размеры"?(остальные реакторы оставить без изменений) лисп из #113


Код:
[Выделить все]
 (vl-load-com)
;;;================== Сервисные ф-ции BEGIN

;|
* Ф-ция str-str-lst
* Сервисная ф-ция извлечения из строки данных, разделенных
* каким либо символом или строкой символов
* Возвращает список строк
* Аргументы [Type]:
  str - строка для разбора [STRING]
  pat - разделитель [STRING]
*  Пример запуска
  (setq str "мы;изучаем;рекурсии" pat ";")
  (setq str "мы — изучаем — рекурсии" pat " — ")
  (str-str-lst str pat)
* Читать подробнее http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25113OT
|;
(defun str-str-lst (str pat / i)
  (cond ((= str "") nil)
        ((setq i (vl-string-search pat str))
         (cons (substr str 1 i)
               (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
         ) ;_  cons
        )
        (t (list str))
  ) ;_  cond
) ;_  defun
;|=============================================================================
*   На основе ф-ции _kpblc-layer-create
*   http://dwg.ru/forum/viewtopic.php?t=3116&start=45&sid=fab803bd4dbda125ffdc6c07563f682a
*   пост № 47
*   Добавлен новый  параметр  suff - суффикс слоя, если он есть, то имя слоя получаестся путем
*   добавления к имени существующего слоя суффикса suff
*   Создание слоя с указанными параметрами.
*   Параметры вызова:
*   layer-list   список параметров слоя вида:
   '(("name" . "TestLayer")   ; имя слоя. может быть пропущено, если указан suff
     ("color" . 3)         ; номер цвета. nil -> 7
     ("lw" . 50)         ; вес линии слоя. nil -> 25
*                          Оно выражается в сотых долях миллиметра и может быть любым
*                          из следующего ряда: 0, 5, 9, 13, 15, 18, 20, 25, 30, 35, 40, 50, 53, 60, 70,
*                          80, 90, 100, 106, 120, 140, 158, 200 и 211.
     ("lt" . "hidden")      ; тип линии слоя. nil -> Continuous
               ; Если описания типа линии в acadiso.lin
               ; нет, обязательно указывать следующий
               ; параметр
   ("ltfile" . "c:\\cad\\ltypes\\lt.lin")   ; полный путь к файлу с описанием
               ; типа линии. Если файл находится в путях
               ; поддержки, путь можно не указывать
   ("plot" . "y")         ; Печатать ("y") или нет ("n") слой.
               ; nil -> "y"
   ("suff" . "_Размеры")  ;_Добавляемый суффикс с текущему слою. Если задан, поле "name" игнорируется            
   )
*    Возвращает vla-указатель на созданный слой. Если слой существует, его
* настройки приводятся в соответствие с переданным списком.
*    Слой размораживается, разблокируется и включается. Не активируется.
* Примеры:
  (_dwgru-layer-create '(("name" . "Test")("color" . 1)("lw" . 50)))
* создать если нет и слой Test цветом 1 (красный) весом линии 0.5

=========================================================================|;

(defun _dwgru-layer-create (layer-list / vla_layer buf)
       (setq *MIP-CLAYER-PROP-SETTING*
     (list (cons "layer"
   (vla-get-activelayer (vla-get-activedocument (vlax-get-acad-object)))
   ) ;_ end of cons
    (cons "color" (getvar "cecolor"))
    (cons "lw" (getvar "celweight"))
    (cons "lt" (getvar "celtype"))
    ) ;_ end of list
    ) ;_ end of setq

  ;;;Если есть suff добавляем в начало списка,
  ;;;чтобы assoc нашел раньше
  (if (cdr(assoc "suff" layer-list))
    (progn
     (setq layer-list (vl-remove (assoc "name" layer-list) layer-list))
     (setq layer-list (append (list(cons "name" (strcat (getvar "clayer") (cdr(assoc "suff" layer-list))))) layer-list))
    )
  )
  (setq vla_layer
  (vla-add
    (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
    (if (snvalid (cdr (assoc "name" layer-list)))
        (cdr (assoc "name" layer-list))
        "0"
      )
    ) ;_ end of vla-add
 ) ;_ end of setq
  (vla-put-color
    vla_layer
    (if (setq buf (cdr (assoc "color" layer-list)))
      buf
      7
      ) ;_ end of if
    ) ;_ end of vla-put-color
  (vla-put-lineweight
    vla_layer
    (if (setq buf (cdr (assoc "lw" layer-list)))
      (if (member buf (list acLnWt000  acLnWt030  acLnWt090
    acLnWt005  acLnWt035  acLnWt100
    acLnWt009  acLnWt040  acLnWt106
    acLnWt013  acLnWt050  acLnWt120
    acLnWt015  acLnWt053  acLnWt140
    acLnWt018  acLnWt060  acLnWt158
    acLnWt020  acLnWt070  acLnWt200
    acLnWt025  acLnWt080  acLnWt211
    )
    )
    buf
    acLnWtByLwDefault
 )
      acLnWtByLwDefault
      ) ;_ end of if
    ) ;_ end of vla-put-lineweight
  (if (and (setq buf (cdr (assoc "lt" layer-list)))
    (_kpblc-linetype-load
      buf
      (cdr (assoc "ltfile" layer-list))
      ) ;_ end of _kpblc-linetype-load
    ) ;_ end of and
    (vla-put-linetype vla_layer (cdr (assoc "lt" layer-list)))
    (vla-put-linetype vla_layer "Continuous")
    ) ;_ end of if
  (vla-put-plottable
    vla_layer
    (if (= (cdr (assoc "plot" layer-list)) "n")
      :vlax-false
      :vlax-true
      ) ;_ end of if
    ) ;_ end of vla-put-Plottable
  (vla-put-lock vla_layer :vlax-false)
  (vla-put-layeron vla_layer :vlax-true)
  (if (not (equal (vla-get-activelayer (vla-get-activedocument (vlax-get-acad-object)))
    vla_layer
    ) ;_ end of equal
    ) ;_ end of not
    (vla-put-freeze vla_layer :vlax-false)
    ) ;_ end of if
  vla_layer
  ) ;_ end of defun

;;;================== Сервисные ф-ции END

;;; Реактор

(or *kpblc-activedoc*
  (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))))

(setq VLR-react (VLR-SysVar-Reactor nil (list '(:VLR-sysVarChanged . chrzmstyle)))) 
(defun chrzmstyle (name event / nstyle)
  (if (= (car event) "DIMSTYLE")
    (progn
      (setq nstyle (getvar "DIMSTYLE")
	    nstyle (str-str-lst nstyle "_")
	    nstyle (VL-STRING-RIGHT-TRIM "_" (apply 'strcat (mapcar '(lambda (x) (strcat x "_"))(cdr nstyle)))))
      (if (snvalid nstyle)
	(progn
	  (setq nstyle (strcat "Размерные_" nstyle))
	  (vla-put-activelayer *kpblc-activedoc*
          (_dwgru-layer-create (list (cons "name" nstyle))))
	  )
	)
      )
    )
  (princ) 
  )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Автор идеи Torino, он же Кочетков Андрей 
;;;Автоматическая простановка размеров в слое "_Размеры", 
;;;штриховки в слое "_Штриховки", текстов в слое "_Тексты", 
;;;таблиц в слое "_Таблицы", лидеров в слое "_Выноски", прямых
;;;в слое "_Вспомогательный". Реактор работает только с указанными
;;;командами. 
;;;Просто добавь этот файл в автозагрузку

(vl-load-com)
(_dwgru-layer-create '(("name" . "_Размеры")("color" . 150)("lw" . 13)))
(_dwgru-layer-create '(("name" . "_Штриховки")("color" . 5)("lw" . 9)))
(_dwgru-layer-create '(("name" . "_Тексты")("color" . 6)("lw" . 15)))
(_dwgru-layer-create '(("name" . "_Таблицы")("color" . 2)("lw" . 20)))
(_dwgru-layer-create '(("name" . "_Выноски")("color" . 3)("lw" . 15)))
(_dwgru-layer-create '(("name" . "_Вспомогательные")("color" . 1)("lw" . 15)("plot" . "n")))
(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 DTEXT 
     (setvar "clayer" "_Тексты") 
    )
    ((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда TABLE 
     (setvar "clayer" "_Таблицы") 
    )
    ((wcmatch thecommandstart "*LEADER") ;_Если выполняется команда QLEADER MLEADER
     (setvar "clayer" "_Выноски")
    )
    ((wcmatch thecommandstart "*XLINE") ;_Если выполняется команда XLINE
     (setvar "clayer" "_Вспомогательные")
    )
    ((wcmatch thecommandstart "*DATAEXTRACTION") ;_Если выполняется команда dataextraction
     (setvar "clayer" "_Таблицы")
    )
    (t nil)) 
  (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
      (wcmatch cmd_name "*XLINE")   ;_Если выполняется команда *XLINE
      (wcmatch cmd_name "*DATAEXTRACTION")   ;_Если выполняется команда *DATAEXTRACTION
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))
kshatriy вне форума  
 
Непрочитано 04.03.2011, 12:22
#264
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Держи. Здесь более "правильная" _dwgru-layer-create
Изменения выделил красным
Добавлены команды SUFFON и SUFFOFF
При включенном режиме SUFFON в строке MODEMACRO будет надпись *SUFFON*
Код:
[Выделить все]
 (vl-load-com)
;;;================== Сервисные ф-ции BEGIN

;|
* Ф-ция str-str-lst
* Сервисная ф-ция извлечения из строки данных, разделенных
* каким либо символом или строкой символов
* Возвращает список строк
* Аргументы [Type]:
  str - строка для разбора [STRING]
  pat - разделитель [STRING]
*  Пример запуска
  (setq str "мы;изучаем;рекурсии" pat ";")
  (setq str "мы — изучаем — рекурсии" pat " — ")
  (str-str-lst str pat)
* Читать подробнее http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25113OT
|;
(defun str-str-lst (str pat / i)
  (cond ((= str "") nil)
        ((setq i (vl-string-search pat str))
         (cons (substr str 1 i)
               (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
         ) ;_  cons
        )
        (t (list str))
  ) ;_  cond
) ;_  defun
;;;================== Сервисные ф-ции
    ;|=============================================================================
*   На основе ф-ции _kpblc-layer-create
*   http://dwg.ru/f/showthread.php?t=2721
*   пост № 47
*   Опубликована http://dwg.ru/f/showthread.php?p=294715#post294715
*   Добавлен новый  параметр  suff - суффикс слоя, если он есть, то имя слоя получаестся путем
*   добавления к имени существующего слоя суффикса suff
*   Создание слоя с указанными параметрами.
*   Параметры вызова:
*   layer-list   список параметров слоя вида:
   '(("name" . "TestLayer")   ; имя слоя. может быть пропущено, если указан suff
     ("color" . 3)         ; номер цвета. nil -> 7
     ("lw" . 50)         ; вес линии слоя. nil -> 25
*                          Оно выражается в сотых долях миллиметра и может быть любым
*                          из следующего ряда: 0, 5, 9, 13, 15, 18, 20, 25, 30, 35, 40, 50, 53, 60, 70,
*                          80, 90, 100, 106, 120, 140, 158, 200 и 211.
     ("lt" . "hidden")      ; тип линии слоя. nil -> Continuous
               ; Если описания типа линии в acadiso.lin
               ; нет, обязательно указывать следующий
               ; параметр
   ("ltfile" . "c:\\cad\\ltypes\\lt.lin")   ; полный путь к файлу с описанием
               ; типа линии. Если файл находится в путях
               ; поддержки, путь можно не указывать
   ("plot" . "y")         ; Печатать ("y") или нет ("n") слой.
                  ; nil -> "y"
   ("lock" . t)         ; Блокировать t  или нет nil слой.
   ("suff" . "_Размеры")  ;_Добавляемый суффикс с текущему слою. Если задан, поле "name" игнорируется            
   )
*    Возвращает vla-указатель на созданный слой. Если слой существует, его
* настройки приводятся в соответствие с переданным списком.
*    Слой размораживается, разблокируется и включается. Не активируется.
* Примеры:
  (_dwgru-layer-create '(("name" . "Test")("color" . 1)("lw" . 50)))
* создать если нет и слой Test цветом 1 (красный) весом линии 0.5
;;;(_dwgru-layer-create layer-list)
=========================================================================|;

    (defun _dwgru-layer-create (layer-list / vla_layer buf)
      (setq layer-list
             (mapcar
               '(lambda (x) (cons (strcase (car x) t) (cdr x)))
               layer-list
             ) ;_ end of mapcar
      ) ;_ end of setq
      (setq *MIP-LAYER-PROP-SETTING*
             (list (cons "layer"
                         (vla-get-activelayer
                           (vla-get-activedocument (vlax-get-acad-object))
                         ) ;_ end of vla-get-activelayer
                   ) ;_ end of cons 
                   (cons "color" (getvar "cecolor"))
                   (cons "lw" (getvar "celweight"))
                   (cons "lt" (getvar "celtype"))
             ) ;_ end of list 
      ) ;_ end of setq 

;;;Если есть suff добавляем в начало списка, 
;;;чтобы assoc нашел раньше 
      (if (cdr (assoc "suff" layer-list))
        (progn
          (setq layer-list
                 (vl-remove (assoc "name" layer-list) layer-list)
          ) ;_ end of setq
          (setq layer-list
                 (append
                   (list
                     (cons "name"
                           (strcat (getvar "clayer")
                                   (cdr (assoc "suff" layer-list))
                           ) ;_ end of strcat
                     ) ;_ end of cons
                   ) ;_ end of list
                   layer-list
                 ) ;_ end of append
          ) ;_ end of setq
        ) ;_ end of progn
      ) ;_ end of if
      (setq buf (if (snvalid (cdr (assoc "name" layer-list)))
                 (cdr (assoc "name" layer-list))
                 (getvar "CLAYER")
               ) ;_ end of if
            )
      (if (member (strcase buf)(mapcar 'strcase (tablelist "Layer")))
        (setq vla_layer (vla-item (vla-get-layers
                 (vla-get-activedocument (vlax-get-acad-object))
               ) ;_ end of vla-get-layers
                                  buf))
      (setq vla_layer
             (vla-add
               (vla-get-layers
                 (vla-get-activedocument (vlax-get-acad-object))
               ) ;_ end of vla-get-layers
                buf
             ) ;_ end of vla-add 
      ) ;_ end of setq
        )
      (if (setq buf (cdr (assoc "color" layer-list)))
        (vla-put-color
          vla_layer
          (if buf
            buf
            7
          ) ;_ end of if
        ) ;_ end of vla-put-color
      ) ;_ end of if
      (if (setq buf (cdr (assoc "lw" layer-list)))
        (vla-put-lineweight
          vla_layer
          (if buf
            (if (member buf
                        (list aclnwt000     aclnwt030     aclnwt090
                              aclnwt005     aclnwt035     aclnwt100
                              aclnwt009     aclnwt040     aclnwt106
                              aclnwt013     aclnwt050     aclnwt120
                              aclnwt015     aclnwt053     aclnwt140
                              aclnwt018     aclnwt060     aclnwt158
                              aclnwt020     aclnwt070     aclnwt200
                              aclnwt025     aclnwt080     aclnwt211
                             ) ;_ end of list
                ) ;_ end of member
              buf
              aclnwtbylwdefault
            ) ;_ end of if
            aclnwtbylwdefault
          ) ;_ end of if 
        ) ;_ end of vla-put-lineweight 
      ) ;_ end of if
      (if (and (setq buf (cdr (assoc "lt" layer-list)))
               (setq buf
                      (_kpblc-linetype-load
                        buf
                        (cdr (assoc "ltfile" layer-list))
                      ) ;_ end of _kpblc-linetype-load
               ) ;_ end of setq
          ) ;_ end of and 
        (vla-put-linetype vla_layer (vla-get-name buf))
        (vla-put-linetype vla_layer "Continuous")
      ) ;_ end of if 
      (if (setq buf (cdr (assoc "plot" layer-list)))
        (vla-put-plottable
          vla_layer
          (if (= (cdr (assoc "plot" layer-list)) "n")
            :vlax-false
            :vlax-true
          ) ;_ end of if 
        ) ;_ end of vla-put-Plottable 
      ) ;_ end of if
      (setq buf (cdr (assoc "lock" layer-list)))
      (vla-put-lock
        vla_layer
        (if buf
          :vlax-true
          :vlax-false
        ) ;_ end of if
      ) ;_ end of vla-put-lock
      (vla-put-layeron vla_layer :vlax-true)
      (if (and
            (not
              (equal (vla-get-activelayer
                       (vla-get-activedocument (vlax-get-acad-object))
                     ) ;_ end of vla-get-activelayer
                     vla_layer
              ) ;_ end of equal 
            ) ;_ end of not
            (equal (vla-get-freeze vla_layer) :vlax-true)
          ) ;_ end of and
        (vla-put-freeze vla_layer :vlax-false)
      ) ;_ end of if 
      vla_layer
    ) ;_ end of defun
;;;================================================================================
;;;Written By Michael Puckett. 
;;;Список элементов символьных таблиц АвтоКАДа 
;;; - s- имя таблицы
;;;Пример - список всех слоев - (setq all_layers (tablelist "LAYER"))
;;;(setq all_layers (tablelist "LAYER"))
;;;
;;;AutoLisp should return something like this :
;;;Start Coding Here 
    (defun tablelist (s / d r)
      (while (setq d (tblnext s (null d)))
        (setq r (cons (cdr (assoc 2 d)) r))
      )                                           ;while
    )                                             ;defun

;;;================== Сервисные ф-ции END

;;; Реактор

(or *kpblc-activedoc*
  (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))))

(setq VLR-react (VLR-SysVar-Reactor nil (list '(:VLR-sysVarChanged . chrzmstyle)))) 
(defun chrzmstyle (name event / nstyle)
  (if (= (car event) "DIMSTYLE")
    (progn
      (setq nstyle (getvar "DIMSTYLE")
	    nstyle (str-str-lst nstyle "_")
	    nstyle (VL-STRING-RIGHT-TRIM "_" (apply 'strcat (mapcar '(lambda (x) (strcat x "_"))(cdr nstyle)))))
      (if (snvalid nstyle)
	(progn
	  (setq nstyle (strcat "Размерные_" nstyle))
	  (vla-put-activelayer *kpblc-activedoc*
          (_dwgru-layer-create (list (cons "name" nstyle))))
	  )
	)
      )
    )
  (princ) 
  )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Автор идеи Torino, он же Кочетков Андрей 
;;;Автоматическая простановка размеров в слое "_Размеры", 
;;;штриховки в слое "_Штриховки", текстов в слое "_Тексты", 
;;;таблиц в слое "_Таблицы", лидеров в слое "_Выноски", прямых
;;;в слое "_Вспомогательный". Реактор работает только с указанными
;;;командами. 
;;;Просто добавь этот файл в автозагрузку

(vl-load-com)
(_dwgru-layer-create '(("name" . "_Размеры")("color" . 150)("lw" . 13)))
(_dwgru-layer-create '(("name" . "_Штриховки")("color" . 5)("lw" . 9)))
(_dwgru-layer-create '(("name" . "_Тексты")("color" . 6)("lw" . 15)))
(_dwgru-layer-create '(("name" . "_Таблицы")("color" . 2)("lw" . 20)))
(_dwgru-layer-create '(("name" . "_Выноски")("color" . 3)("lw" . 15)))
(_dwgru-layer-create '(("name" . "_Вспомогательные")("color" . 1)("lw" . 15)("plot" . "n")))
(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*
     (if *SUFFON*
     (setvar "clayer" (vla-get-name(_dwgru-layer-create '(("suff" . "_Размеры")))))
     (setvar "clayer" "_Размеры")       ;_Слой размеры должен быть создан выше (vl-cmdf "_layer" ...
       )
    ) 
 ;;; Конец реакции на DIM*    
    ((wcmatch thecommandstart "*HATCH*") ;_Если выполняется команда HATCH 
     (setvar "clayer" "_Штриховки") 
    ) 
    ((wcmatch thecommandstart "*TEXT") ;_Если выполняется команда TEXT DTEXT 
     (setvar "clayer" "_Тексты") 
    )
    ((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда TABLE 
     (setvar "clayer" "_Таблицы") 
    )
    ((wcmatch thecommandstart "*LEADER") ;_Если выполняется команда QLEADER MLEADER
     (setvar "clayer" "_Выноски")
    )
    ((wcmatch thecommandstart "*XLINE") ;_Если выполняется команда XLINE
     (setvar "clayer" "_Вспомогательные")
    )
    ((wcmatch thecommandstart "*DATAEXTRACTION") ;_Если выполняется команда dataextraction
     (setvar "clayer" "_Таблицы")
    )
    (t nil)) 
  (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
      (wcmatch cmd_name "*XLINE")   ;_Если выполняется команда *XLINE
      (wcmatch cmd_name "*DATAEXTRACTION")   ;_Если выполняется команда *DATAEXTRACTION
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))
(defun C:SUFFON ()(setvar "MODEMACRO" "*SUFFON*")(setq *SUFFON* t))
(defun C:SUFFOFF ()(setvar "MODEMACRO" "")(setq *SUFFON* nil))
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 04.03.2011 в 12:28.
VVA вне форума  
 
Непрочитано 04.03.2011, 13:57
#265
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Цитата:
Сообщение от VVA Посмотреть сообщение
Держи. Здесь более "правильная" _dwgru-layer-create
Изменения выделил красным
Добавлены команды SUFFON и SUFFOFF
При включенном режиме SUFFON в строке MODEMACRO будет надпись *SUFFON*
спасибо огромное!все работает)
kshatriy вне форума  
 
Непрочитано 08.06.2011, 16:48
#266
Татьяна С


 
Регистрация: 08.06.2011
Сообщений: 11


Помогите, подскажите, как использовать все эти липсы (желательно пошаговую инструкцию). Мне много не надо. Чтоб размеры, штриховка, Мтекст и текст шли на свои слои. ОООООчень надо. Но оооочень сложно написано.
Татьяна С вне форума  
 
Непрочитано 08.06.2011, 17:00
#267
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Татьяна С, подпись у товарища VVA, уже не прочитать? Али буквовок не видно?
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon на форуме  
 
Непрочитано 08.06.2011, 17:51
#268
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от zenon Посмотреть сообщение
Помогите, подскажите, как использовать все эти липсы (желательно пошаговую инструкцию). Мне много не надо. Чтоб размеры, штриховка, Мтекст и текст шли на свои слои. ОООООчень надо. Но оооочень сложно написано.
забросьте в портфель
gomer вне форума  
 
Непрочитано 08.06.2011, 18:09
#269
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Offtop: gomer, я этого не озвучивал
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon на форуме  
 
Непрочитано 08.06.2011, 18:18
#270
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


zenon, ой
gomer вне форума  
 
Непрочитано 22.12.2011, 06:51
#271
Astartes

Котло- и реакторостроение
 
Регистрация: 25.02.2010
Барнаул
Сообщений: 824


Приветствую. Вопрос такой. Брал лисп из этой темы что бы размеры переносились на слой размеры и т.д. Добавлял свои элементы, все работает. Но единственное когда подключаю подправленный лисп, выдается ошибка.

Команда: _appload
reactor.lsp успешно загружено.

Команда: ; ошибка: лишняя закрывающая скобка на входе

Как уже сказал все работает, но эта ошибка напрягает. Сравнивал коды, но так и не нашел эту лишнюю скобку. Как найти эту лишнюю скобку?
Вложения
Тип файла: lsp reactor.lsp (14.6 Кб, 57 просмотров)

Последний раз редактировалось Astartes, 22.12.2011 в 07:11.
Astartes вне форума  
 
Непрочитано 22.12.2011, 09:46
1 | #272
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Вроде так. Тестируй
Вложения
Тип файла: lsp react1.LSP (14.5 Кб, 289 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.02.2012, 14:35
#273
Positron


 
Регистрация: 25.06.2009
Сообщений: 147


Цитата:
Сообщение от Михаил055 Посмотреть сообщение
Раньше при простановке размеров они сами создавались на слое "Dim". Но размеры написал сам. Теперь некоторые использую штатные. Линейные и угловые. Чтобы они тоже были на слое "Dim" сделал пунккт меню, с помощью которого запускаю функцию пересылающую все размеры на этот слой. Делаю это периодически или в конце работы.

Функция вот такая:

(defun CHGL_dim ()
(setvar "cmdecho" 0)
(setq Ss1 (ssget "X"'((0 . "DIMENSION"))))

(setq $lay (getvar "CLAYER"))

(command "_layer" "_m" "dim" "")
(command "_change" Ss1 "" "_prop" "_layer" "dim" "")

(command "_layer" "_set" $lay "")
(princ)
);end CHGL_dim
1. Возникла такая трудность, есть много "старых чертежей" и новых, при копии из "старых чертежей" возникает наложение (смешение) стилей из "старых чертежей" и новых.
2. Каждый стиль имеет свой слой соответственно добавляются ненужные "старые слоя".
Вобщем каша...
Помогите плиз, чтоб старые стили заменялись новыми и слоя тоже.
Замена
Стиль - "01_1 X 1" на "01_1X1"
и Слой "02 DIM (1x5)" на "02 DIM (1x4-5)"



;; Перенесение заданных примитивов (размеры, штриховка, текст) на заданный слой
Код:
[Выделить все]
 (if (not activedocument)
  (setq activedocument (vla-get-activedocument (vlax-get-acad-object)))
  ) ;_ end of if

(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-cancel)
                                (:vlr-commandfailed . cmd-fail)
                                )
                              ) ;_ end of VLR-Command-Reactor
        ) ;_ end of setq
  ) ;_ end of if
;; Функция подгрузки типа линии - на http://www.autocad.ru/cgi-bin/f1/board.cgi?t=22730iW

;|=============================================================================
*    Создание слоя с указанными параметрами.
*    Возвращает vla-указатель на созданный слой. Если слой существует, его
* настройки приводятся в соответствие с переданным списком.
*   layer-list   список параметров слоя вида:
   '(("name" . "TestLayer")   ; имя слоя. Не может быть пропущено
   ("color" . 3)         ; номер цвета. nil -> 7
   ("lw" . 50)         ; вес линии слоя. nil -> 25
   ("lt" . "hidden")      ; тип линии слоя. nil -> Continuous
               ; Если описания типа линии в acadiso.lin
               ; нет, обязательно указывать следующий
               ; параметр
   ("ltfile" . "c:\\cad\\ltypes\\lt.lin")   ; полный путь к файлу с описанием
               ; типа линии. Если файл находится в путях
               ; поддержки, путь можно не указывать
   ("plot" . "y")         ; Печатать ("y") или нет ("n") слой.
               ; nil -> "y"
   )
*    Слой размораживается, разблокируется и включается. Не активируется.
|;
(defun _kpblc-layer-create (layer-list / vla_layer)
  (setq vla_layer (vla-add (vla-get-layers activedocument)
                           (cdr (assoc "name" layer-list))
                           ) ;_ end of vla-add
        ) ;_ end of setq
  (vla-put-color vla_layer
                 (if (cdr (assoc "color" layer-list))
                   (cdr (assoc "color" layer-list))
                   7
                   ) ;_ end of if
                 ) ;_ end of vla-put-color
  (vla-put-lineweight
    vla_layer
    (if (cdr (assoc "lw" layer-list))
      (cdr (assoc "lw" layer-list))
      aclnwt025
      ) ;_ end of if
    ) ;_ end of vla-put-lineweight
  (if (and (cdr (assoc "lt" layer-list))
           (_kpblc-linetype-load
             (cdr (assoc "lt" layer-list))
             (cdr (assoc "ltfile" layer-list))
             ) ;_ end of _kpblc-linetype-load
           ) ;_ end of and
    (vla-put-linetype vla_layer (cdr (assoc "lt" layer-list)))
    (vla-put-linetype vla_layer "Continuous")
    ) ;_ end of if
  (vla-put-plottable
    vla_layer
    (if (= (cdr (assoc "plot" layer-list)) "n")
      :vlax-false
      :vlax-true
      ) ;_ end of if
    ) ;_ end of vla-put-Plottable
  (vla-put-lock vla_layer :vlax-false)
  (vla-put-layeron vla_layer :vlax-true)
  (if (not (equal (vla-get-activelayer activedocument)
                  vla_layer
                  ) ;_ end of equal
           ) ;_ end of not
    (vla-put-freeze vla_layer :vlax-false)
    ) ;_ end of if
  vla_layer
  ) ;_ end of defun

(defun cmd-start (react cmd / selset cmd_name ent svr res tag text index _attreq_ _attdia_)
  (setq cmd_name (strcase (car cmd) t))
  (setq *dim_style* (strcase (getvar "dimstyle")))
  (cond
    ((vl-string-search "dim" cmd_name)
     (setq *vlr-settings* (list (cons "layer" (vla-get-activelayer activedocument)) ;_ end of cons
                                (cons "color" (getvar "cecolor"))
                                (cons "lw" (getvar "celweight"))
                                (cons "lt" (getvar "celtype"))
                                ) ;_ end of list
           ) ;_ end of setq
     (cond
       ((= *dim_style* "00_5X1")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (05X1)"))))
        )
       ((= *dim_style* "01_1X1")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1x1)"))))
        )
       ((= *dim_style* "02_1X2")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1x2)"))))
        )
       ((= *dim_style* "03_1X4")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1x4-5)"))))
        )
       ((= *dim_style* "04_1X5")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1x4-5)"))))
        )
       ((= *dim_style* "05_1X8")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1х08-10)"))))
        )
       ((= *dim_style* "06_1X10")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1х08-10)"))))
        )
       ((= *dim_style* "07_1X16")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1х16-20)"))))
        )
       ((= *dim_style* "08_1X20")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1х16-20)"))))
        )
       ((= *dim_style* "09_1X30")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1х30-40)"))))
        )
       ((= *dim_style* "10_1X40")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1х30-40)"))))
        )
       ((= *dim_style* "11_1X75")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1х75-100)"))))
        )
       ((= *dim_style* "12_1X100")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM (1х75-100)"))))
        )
       ((= *dim_style* "Annotative")
        (vla-put-activelayer activedocument (_kpblc-layer-create '(("name" . "02 DIM"))))
        )
       ) ;_ end of cond
     ;;cond
     (mapcar 'setvar '("cecolor" "celweight" "celtype") '("bylayer" -1 "bylayer")) ;_ end of mapcar
     )
    ((vl-string-search "hatch" cmd_name)
     (setq *vlr-settings*
            (list (cons "layer" (vla-get-activelayer activedocument)) ;_ end of cons
                  (cons "color" (getvar "cecolor"))
                  (cons "lw" (getvar "celweight"))
                  (cons "lt" (getvar "celtype"))
                  ) ;_ end of list
           ) ;_ end of setq
     (vla-put-activelayer activedocument
                          (_kpblc-layer-create '(("name" . "03 HATCH") ("color" . 253) ("lw" . 0))) ;_ end of _kpblc-layer-create
                          ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar '("cecolor" "celweight" "celtype") '("bylayer" -1 "bylayer")) ;_ end of mapcar
     )
    ((vl-string-search "text" cmd_name)
     (setq *vlr-settings* (list (cons "layer" (vla-get-activelayer activedocument)) ;_ end of cons
                                (cons "color" (getvar "cecolor"))
                                (cons "lw" (getvar "celweight"))
                                (cons "lt" (getvar "celtype"))
                                ) ;_ end of list
           ) ;_ end of setq
     (vla-put-activelayer activedocument
                          (_kpblc-layer-create '(("name" . "10 Text"))) ;_ end of _kpblc-layer-create
                          ) ;_ end of vla-put-ActiveLayer
     (mapcar 'setvar '("cecolor" "celweight" "celtype") '("bylayer" -1 "bylayer")) ;_ end of mapcar
     )
    ) ;_ end of cond
  ) ;_ end of defun

(defun cmd-end (react cmd / list_obj selset item counter leader_item cmd_name leader_item_list up_string low_string)
  (setq cmd_name (strcase (car cmd) t)
        counter  0
        ) ;_ end of setq
  (cond
    ((or (vl-string-search "dim" cmd_name)
         (vl-string-search "text" cmd_name)
         (vl-string-search "hatch" cmd_name)
         ) ;_ end of or
     (if *vlr-settings*
       (progn
         (vla-put-activelayer
           activedocument
           (cdr (assoc "layer" *vlr-settings*))
           ) ;_ end of vla-put-ActiveLayer
         (mapcar 'setvar
                 '("cecolor" "celweight" "celtype")
                 (list (cdr (assoc "color" *vlr-settings*))
                       (cdr (assoc "lw" *vlr-settings*))
                       (cdr (assoc "lt" *vlr-settings*))
                       ) ;_ end of list
                 ) ;_ end of mapcar
         (setq *vlr-settings* nil)
         ) ;_ end of progn
       ) ;_ end of if
     )
    ) ;_ end of cond
  ) ;_ end of defun

(defun cmd-cancel (react cmd / cmd_name)
  (setq cmd_name (strcase (car cmd) t))
  (cond
    ((or (vl-string-search "dim" cmd_name)
         (vl-string-search "text" cmd_name)
         (vl-string-search "hatch" cmd_name)
         ) ;_ end of or
     (if *vlr-settings*
       (progn
         (vla-put-activelayer
           activedocument
           (cdr (assoc "layer" *vlr-settings*))
           ) ;_ end of vla-put-ActiveLayer
         (mapcar 'setvar
                 '("cecolor" "celweight" "celtype")
                 (list (cdr (assoc "color" *vlr-settings*))
                       (cdr (assoc "lw" *vlr-settings*))
                       (cdr (assoc "lt" *vlr-settings*))
                       ) ;_ end of list
                 ) ;_ end of mapcar
         (setq *vlr-settings* nil)
         ) ;_ end of progn
       ) ;_ end of if
     )
    ) ;_ end of cond
  ) ;_ end of defun

;|=============================================================================
*    Функция подгрузки типа линии в текущий файл. Учитывает возможную
* локализацию системы.
*    Параметры вызова:
*  ltype-name  имя типа линии для английской версии
*  ltype-file  имя файла описания типа линии. nil -> "acadiso.lin"ю
*      Если файл с описанием типа линии не лежит по путям
*      поддержки када, надо указывать полный путь к нему.
*    Примеры вызова:
(_kpblc-linetype-load "center" nil)  ; для русской версии подгружает Осевая и возвращает
                                     ; t при успехе
***  Соответствие наименований линий обеспечивается огромным списком ltype_list
*** который можно и нужно дополнять :) Только надо либо все делать мелкими
*** буквами, либо жестко соблюдать регистр в моменты вызовов.
***  Тип линии "Continuous" обработке не подвергается — он есть во всех версиях
=============================================================================|;
(defun _kpblc-linetype-load
                            (ltype-name ltype-file / ltype_normal ltype_list result)
  (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))
    ;; тип линии не найден, надо его загрузить. Тип линии должен быть
    ;; описан в файле
    (setq result (not (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 not
          ) ;_ end of setq
    ) ;_ end of if
  result
  ) ;_ end of defun

Последний раз редактировалось Кулик Алексей aka kpblc, 16.11.2012 в 13:48.
Positron вне форума  
 
Непрочитано 16.03.2012, 12:07
#274
voverrr

гастарбайтер понаехал
 
Регистрация: 07.12.2009
Маскво
Сообщений: 272


подскажите пожалуйста неграмотному крестьянину?
вот эта, например, строчка:
(_dwgru-layer-create '(("name" . "_Вспомогательные")("color" . 1)("lw" . 15)("plot" . "n")))
здесь мы задаём последовательно сначала имя для слоя, затем цвет, затем вес линии и в конце - plot - не выводить на печать.
это всё понятно.

а как задать с этой строке тип линии? Константа lt - вроде бы отвечает за тип, но как именно нужно её задавать - никак не соображу.

рассчитываю на принцип интернета: как только ты развернёшь на каком-нибудь форуме тему, и выставив себыя полным чайником, распишешь вопрос, так сразу же решение подвернётся в первом же результате поиска по гуглу.
voverrr вне форума  
 
Непрочитано 16.03.2012, 13:11
#275
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Найди в коде описание этой ф-ции, там есть перечень возможных ключей
Код:
[Выделить все]
 
    ;|=============================================================================
*   На основе ф-ции _kpblc-layer-create
*   http://dwg.ru/f/showthread.php?t=2721
*   пост № 47
*   Опубликована http://dwg.ru/f/showthread.php?p=294715#post294715
*   Добавлен новый  параметр  suff - суффикс слоя, если он есть, то имя слоя получаестся путем
*   добавления к имени существующего слоя суффикса suff
*   Создание слоя с указанными параметрами.
*   Параметры вызова:
*   layer-list   список параметров слоя вида:
   '(("name" . "TestLayer")   ; имя слоя. может быть пропущено, если указан suff
     ("color" . 3)         ; номер цвета. nil -> 7
     ("lw" . 50)         ; вес линии слоя. nil -> 25
*                          Оно выражается в сотых долях миллиметра и может быть любым
*                          из следующего ряда: 0, 5, 9, 13, 15, 18, 20, 25, 30, 35, 40, 50, 53, 60, 70,
*                          80, 90, 100, 106, 120, 140, 158, 200 и 211.
     ("lt" . "hidden")      ; тип линии слоя. nil -> Continuous
               ; Если описания типа линии в acadiso.lin
               ; нет, обязательно указывать следующий
               ; параметр
   ("ltfile" . "c:\\cad\\ltypes\\lt.lin")   ; полный путь к файлу с описанием
               ; типа линии. Если файл находится в путях
               ; поддержки, путь можно не указывать
   ("plot" . "y")         ; Печатать ("y") или нет ("n") слой.
                  ; nil -> "y"
   ("lock" . t)         ; Блокировать t  или нет nil слой.
   ("suff" . "_Размеры")  ;_Добавляемый суффикс с текущему слою. Если задан, поле "name" игнорируется            
   )
*    Возвращает vla-указатель на созданный слой. Если слой существует, его
* настройки приводятся в соответствие с переданным списком.
*    Слой размораживается, разблокируется и включается. Не активируется.
* Примеры:
  (_dwgru-layer-create '(("name" . "Test")("color" . 1)("lw" . 50)))
* создать если нет и слой Test цветом 1 (красный) весом линии 0.5

Пример
Код:
[Выделить все]
(_dwgru-layer-create '(("name" . "Test")("color" . 1)("lw" . 50)("lt" . "пути")("ltfile" . "acadiso.lin")))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.03.2012, 14:13
#276
voverrr

гастарбайтер понаехал
 
Регистрация: 07.12.2009
Маскво
Сообщений: 272


чот не работает.
(_dwgru-layer-create '(("name" . "_Невидимая")("color" . 3)("lw" . 13)("lt" . "штриховая")("ltfile" . "C:\Program Files\AutoCAD 2010\UserDataCache\Support\acadiso.lin")))

может путь к acadiso.lin неправильно указываю?
я уж и полный путь прописываю или просто указываю файл без пути - слой создаёт, с указанным именем/весом/цветом, но тип линии не хочет.
ну что такое?
voverrr вне форума  
 
Непрочитано 16.03.2012, 14:19
#277
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Если файл *.lin находится в путях поддержки AutoCAD, то указывать полный путь не надо.
При указании полного пути надо менять слеш "/" либо на двойной "//", либо на обратный "\".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.03.2012, 15:33
#278
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Поправлю Алексея
Либо на двойной "\\", либо на обратный "/"
В данном случае просто укажи "acadiso.lin"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.03.2012, 15:34
#279
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Тьфу ты, действительно...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.03.2012, 17:53
#280
voverrr

гастарбайтер понаехал
 
Регистрация: 07.12.2009
Маскво
Сообщений: 272


не получается всёрно...
хоть ты чо делай
voverrr вне форума  
 
Непрочитано 16.03.2012, 20:32
#281
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Попробуй сделать так:
Код:
[Выделить все]
(_dwgru-layer-create '(("name" . "_Невидимая")("color" . 3)("lw" . 13)("lt" . "hidden")))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.03.2012, 21:58
#282
voverrr

гастарбайтер понаехал
 
Регистрация: 07.12.2009
Маскво
Сообщений: 272


дудки.
на работе пробовал на автокаде 2010 и винда семёрка. Думал, что это может быть особенность системы.
Дома винда ХР, автокад 2009 - та же самая история(также не работает)

Причём, если вставляешь эту строку, то не работает весь лисп. Только слои создаёт, но на слои при построениях не перекидывает.
Слой "невидимые" создаёт, но тип линии - continuous, а никакой не hidden

пойду повешусь
voverrr вне форума  
 
Непрочитано 16.03.2012, 22:39
#283
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


voverrr, в ближайшие 3 дня помочь не смогу вообще никак. Есть, конечно, вариант - попытаться через TeamViewer сконтачиться. Если устраивает - во вторник напиши мне в ЛС, попробуем разобраться. Чудес, как правило, не бывает...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.03.2012, 22:44
#284
voverrr

гастарбайтер понаехал
 
Регистрация: 07.12.2009
Маскво
Сообщений: 272


спасибо, напишу после выходных. ещё помучаю его немного.
мне вроде бы не к спеху, могу если что, и врукопашную этот пунктир назначить))
пока что разведаю что такое TeamViewer...
voverrr вне форума  
 
Непрочитано 17.03.2012, 11:58
#285
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


нужно не ныть, а использовать отладку срдствами vlide, тогда все понятно будет, причем практически сразу
gomer вне форума  
 
Непрочитано 28.03.2012, 14:03
#286
99xt1

нефтепереработка
 
Регистрация: 17.11.2009
Мозырь, Республика Беларусь
Сообщений: 77


Цитата:
Сообщение от VVA Посмотреть сообщение
Автор Lee Mac. Опубликовано здесь (требуется регистрация)
Код:
[Выделить все]
;; Пояснения на русском добавлены VVA (Владимир Азарко)
;; Для активации / деактивации командных реакторов
;; необходимо набрать в командной строке LD
;;При аткивности реактора в строке MODEMACRO (левый нижний угол) будет надпись "LD+"
;;--------------------=={ Layer Director }==------------------;;
;;                                                            ;;
;;  Uses a command reactor to automatically set the layer     ;;
;;  upon the user invoking certain commands.                  ;;
;;                                                            ;;
;;  Layer settings are stored in the list at the top of the   ;;
;;  program. The first entry in the list is the command on    ;;
;;  which the reactor will trigger, it may use wildcards.     ;;
;;  The second entry is the designated layer for the command  ;;
;;  entered, this layer will be created if non-existent.      ;;
;;  The third entry is the layer colour that will be used if  ;;
;;  the layer is to be created in the drawing.                ;;
;;                                                            ;;
;;  The Reactor is set to be enabled upon loading the program ;;
;;  it can furthermore be toggled on and off using by typing  ;;
;;  'LD' at the command line.                                 ;;
;;------------------------------------------------------------;;
;;  Author: Lee McDonnell, 2010                               ;;
;;                                                            ;;
;;  Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
;;  Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
;;------------------------------------------------------------;;

(defun c:LD nil (LM:LayerDirector T))

(defun LM:LayerDirector ( msg )
  (vl-load-com)
  ;; © Lee Mac 2010

;;;;;;Здесь в виде списка задаем: команду, имя слоя, цвет
  (setq *LayerData*
   '(
     ("*TEXT"           "TEXT"       2) ;_ "*TEXT" - команда (DTEXT или MTEXT)
                                                ;_ "TEXT" - имя слоя
                                                ;_ 2 - цвет
     ("*DIM*,*LEADER"  "DIMENSIONS" 2)
     ("*VPORT*"         "DEFPOINTS"  7)
     ("*EXECUTETOOL"    "4"          4)
    )
  )
  ;;;

  (
    (lambda ( data callback1 callback2 / react )
      (if
        (setq react
          (vl-some
            (function
              (lambda ( reactor )
                (if (eq data (vlr-data reactor))
                  reactor
                )
              )
            )
            (cdar (vlr-reactors :vlr-command-reactor))
          )
        )
        (if (vlr-added-p react)
          (vlr-remove react)
          (vlr-add react)
        )
        (setq react
          (vlr-command-reactor data
            (list
              (cons :vlr-commandWillStart callback1)
              (cons :vlr-commandEnded     callback2)
              (cons :vlr-commandCancelled callback2)
            )
          )
        )
      )

      (if msg
        (if (and react (vlr-added-p react))
	  (progn
 	    (princ "\n<< Layer Director Enabled >>" )
	    (setvar
	      "Modemacro"
	      (strcat "LD+ "
		      (VL-STRING-LEFT-TRIM "LD+ " (getvar "modemacro"))
	      )
	    )
	    )
	  (progn
	    (princ "\n<< Layer Director Disabled >>")
	    (setvar
	      "Modemacro"
	       (VL-STRING-LEFT-TRIM "LD+ " (getvar "modemacro"))
	    )
	    )
        )
      )
    )

    "LayerDirector"
    'LayerDirectorSet
    'LayerDirectorReset
  )
  (princ)
)

(defun LM:MakeLayer ( name colour )
  (or (tblsearch "LAYER" name)
    (entmakex
      (list
        (cons 0   "LAYER")
        (cons 100 "AcDbSymbolTableRecord")
        (cons 100 "AcDbLayerTableRecord")
        (cons 2   name)
        (cons 62  colour)
        (cons 70  0)
      )
    )
  )
)

(defun LayerDirectorSet ( reactor arguments / layerdetails layer )
  (vl-load-com)
  ;; © Lee Mac 2010

  (if
    (and
      (setq layerdetails
        (vl-some
          (function
            (lambda ( x )
              (if (wcmatch (strcase (car arguments)) (car x))
                (cdr x)
              )
            )
          )
          *LayerData*
        )
      )
      (LM:MakeLayer (setq layer (car layerdetails)) (cadr layerdetails))
      (zerop
        (logand 1
          (cdr
            (assoc 70
              (tblsearch "LAYER" layer)
            )
          )
        )
      )
    )
    (progn
      (setq *oldlayer* (getvar 'CLAYER))      
      (setvar 'CLAYER layer)
    )
  )

  (princ)
)

(defun LayerDirectorReset ( reactor arguments )
  (vl-load-com)
  ;; © Lee Mac 2010

  (if
    (and (not (wcmatch (strcase (car arguments)) "*UNDO")) *oldlayer*
      (tblsearch "LAYER" *oldlayer*)
      (zerop
        (logand 1
          (cdr
            (assoc 70
              (tblsearch "LAYER" *oldlayer*)
            )
          )
        )
      )
    )
    (progn
      (setvar 'CLAYER *oldlayer*)
      (setq *oldlayer* nil)
    )
  )
  
  (princ)
)

(princ)
(LM:LayerDirector t)
(princ "\nДля активации / деактивации наберите в командной строке LD")
Возможно ли добавить в этот вариант перенос маскировок на свой слой?
99xt1 вне форума  
 
Непрочитано 28.03.2012, 15:36
1 | #287
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


99xt1, Там же в примечании все расписано
В твоем случае
Код:
[Выделить все]
;;;;;;Здесь в виде списка задаем: команду, имя слоя, цвет
  (setq *LayerData*
   '(
     ("*TEXT"           "TEXT"       2) ;_ "*TEXT" - команда (DTEXT или MTEXT)
                                                ;_ "TEXT" - имя слоя
                                                ;_ 2 - цвет
     ("WIPEOUT" "Слой_Wipeout" 1)
     ("*DIM*,*LEADER"  "DIMENSIONS" 2)
     ("*VPORT*"         "DEFPOINTS"  7)
     ("*EXECUTETOOL"    "4"          4)
    )
  )
  ;;;
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.03.2012, 10:41
#288
99xt1

нефтепереработка
 
Регистрация: 17.11.2009
Мозырь, Республика Беларусь
Сообщений: 77


Цитата:
Сообщение от VVA Посмотреть сообщение
99xt1, Там же в примечании все расписано
Я пытался, но у меня не получалось ни с WIPOEOUT, ни с XLINE.
Просто забыл перезагрузить Автокад
Все в порядке. Спасибо.
99xt1 вне форума  
 
Непрочитано 13.11.2012, 22:12
#289
vade


 
Регистрация: 09.01.2010
Сообщений: 36


Подскажите пожалуйста, можно ли в данный лисп добавить следующее.
Есть в палитре блок Выноска с названием Выноска, хотелось бы чтобы при вставке данного блока, он вставлялся автоматически в слой Выноска, как это реализовано с командами QLEADER и MLEADER/
Или может быть другие варианты
vade вне форума  
 
Непрочитано 13.11.2012, 22:23
#290
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


ИМХО это проще будет сделать, настроив палитру...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.11.2012, 22:31
#291
vade


 
Регистрация: 09.01.2010
Сообщений: 36


Спасибо, попробую
vade вне форума  
 
Непрочитано 13.11.2012, 22:40
#292
PashaStr

инженер-конструктор
 
Регистрация: 24.04.2011
Минск
Сообщений: 320


я далеко не гуру lisp, но я для себя я решал схожую задачу (единственное вставка идёт из внешнего файла (моей библиотеки), а не из палитры). Вешал на сочетание клавиш. (использовал наработки VVA lib:add-block-to-doc-from-lib и kpblc _kpblc-layer-create)
Код:
[Выделить все]
 (defun c:r1 (/ pt)
  (_kpblc-layer-create '(("name" . "_Dyn_block")("color" . 171)("lw" . 25)("plot" . "y")))
  (lib:add-block-to-doc-from-lib
    "D:\\AutoCAD\\Block library\\pk_block_preparation_of_drawings.dwg"
    "pk_break_line"
  )
  (prompt "\nPlease click a point: ")
  (setq pt (getpoint))
  (command "_.insert" "pk_break_line" pt "0.01" "0.01" "0")
  (command "_chprop" "_last" "" "_layer" "_Dyn_block" "")
)
Или простым языком вставлял блок и менял после вставки его слой на нужный мне.
Под свои нужны можно сделать что-то подобное.
PashaStr вне форума  
 
Непрочитано 14.11.2012, 20:56
#293
vade


 
Регистрация: 09.01.2010
Сообщений: 36


Тоже вариант. Спасибо.
Получается для каждого блока свой лисп?
vade вне форума  
 
Непрочитано 14.11.2012, 23:46
#294
PashaStr

инженер-конструктор
 
Регистрация: 24.04.2011
Минск
Сообщений: 320


vade, да, правда забивал всё в один файл для удобства
PashaStr вне форума  
 
Непрочитано 04.05.2013, 23:29
#295
voverrr

гастарбайтер понаехал
 
Регистрация: 07.12.2009
Маскво
Сообщений: 272


А возможно ли добавить в этот лисп, чтобы он создавал размерный стиль, с определёнными размерами стрелок, высотами текстов, расположениями по центру/над линией, подавлениями хвостовых и т.п.?
А мультивыноски?
А текстовые стили?

Это я хочу попробовать обойтись вовсе без создания шаблона .dwt
voverrr вне форума  
 
Непрочитано 05.05.2013, 19:37
#296
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


voverrr, см. http://forum.dwg.ru/showthread.php?t=3253 и http://autolisp.ru/2009/11/02/dimstyle-create/
Вообще-то поиск рулит: http://www.google.ru/cse?cx=partner-...%8F&gsc.page=1
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.05.2013, 11:10
#297
elnino


 
Регистрация: 08.02.2013
Сообщений: 41


Здравствуйте.
Я подстроил немножко программу под себя, но один момент не работает. Проблема в том, что я хочу LINE, XLINE и PLINE вывести на один слой а SPLINE на другой, но не хочу писать 4 строчки по отдельности. Как добавить исключение к *LINE?
Ниже в коде я выделил красным конфликтные строчки.
Заранее благодарю.
PS: В программировании я ноль, если что
Код:
[Выделить все]
;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку 
(vl-load-com) 
(if *vlr-cmd*
(progn
(setq *vlr-cmd* nil)
(vlr-remove-all :vlr-command-reactor)
) ;_ end of progn
) ;_ end of if
(setq *OldLayer* (getvar "CLAYER")) 
(vl-cmdf "_layer" "_make" "Размеры" "_color" 130 "" "") ;_Создаем слой размеры и задаем цвет 130 ... 
(vl-cmdf "_layer" "_make" "Штриховка" "_color" 160 "" "") ;_Создаем слой штриховка и задаем цвет 160 
(vl-cmdf "_layer" "_make" "Текст" "_color" 80 "" "") ;_Создаем слой текст и задаем цвет 80
(vl-cmdf "_layer" "_make" "Формат.Таблица" "_color" 213 "" "") ;_Создаем слой таблицы и задаем цвет 213
(vl-cmdf "_layer" "_make" "Волнистые линии" "_color" 10 "" "") ;_Создаем слой волнистые линии и задаем цвет 10
(vl-cmdf "_layer" "_make" "Видимый контур (ГОСТ)" "_color" 7 "" "") ;_Создаем слой Видимый контур (ГОСТ) и задаем цвет 7
(setvar "clayer" *OldLayer*) 
(setq *OldLayer* nil) 
;;;;;;По аналогии добавить создание своего слоя 
;;; ... 
;;;;;; 
;;;;;;------------------------------------------------------------- 

(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* HATCH
(setvar "clayer" "штриховка") 
) 
((wcmatch thecommandstart "ARC") ;_Если выполняется команда ARC
(setvar "clayer" "штриховка") 
) 
((wcmatch thecommandstart "*TEXT") ;_Если выполняется команда *TEXT (TEXT DTEXT) 
(setvar "clayer" "Текст") 
)
((wcmatch thecommandstart "*LINE") ;_Если выполняется команда *LINE (LINE XLINE PLINE) 
(setvar "clayer" "Видимый контур (ГОСТ)") 
) 
((wcmatch thecommandstart "RECTANG") ;_Если выполняется команда RECTANG
(setvar "clayer" "Видимый контур (ГОСТ)") 
)
((wcmatch thecommandstart "CIRCLE") ;_Если выполняется команда CIRCLE
(setvar "clayer" "Видимый контур (ГОСТ)") 
)
((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда *TABLE
(setvar "clayer" "Формат.Таблица") 
)
((wcmatch thecommandstart "*LEADER") ;_Если выполняется команда QLEADER MLEADER
(setvar "clayer" "Волнистые линии") 
)
((wcmatch thecommandstart "SPLINE") ;_Если выполняется команда SPLINE
(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*") ;_Если выполняется команда *HATCH*
(wcmatch cmd_name "DIM*") ;_Если выполняется команда DIM*
(wcmatch cmd_name "*TEXT") ;_Если выполняется команда *TEXT (TEXT DTEXT)
(wcmatch cmd_name "*TABLE") ;_Если выполняется команда ТАБЛИЦА
(wcmatch cmd_name "*LEADER") ;_Если выполняется команда QLEADER или MLEADER
(wcmatch cmd_name "ARC") ;_Если выполняется команда ARC
(wcmatch cmd_name "RECTANG") ;_Если выполняется команда RECTANG
(wcmatch cmd_name "*LINE") ;_Если выполняется команда *LINE (LINE XLINE PLINE)
(wcmatch cmd_name "CIRCLE") ;_Если выполняется команда CIRCLE
(wcmatch cmd_name "SPLINE") ;_Если выполняется команда SPLINE
)
(progn
(if *OldLayer* (setvar "clayer" *OldLayer*)) 
(setq *OldLayer* nil)
))
(princ))
)

Последний раз редактировалось elnino, 16.05.2013 в 11:40.
elnino вне форума  
 
Непрочитано 16.05.2013, 11:12
1 | #298
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


(wcmatch thecommandstart "LINE,XLINE,PLINE")
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.05.2013, 11:56
#299
elnino


 
Регистрация: 08.02.2013
Сообщений: 41


И все-таки, как добавить исключение, а то мысль пошла дальше, но натолкнулся на большое количество перечислений, наверняка должно быть проще.
Нужно посадить MC* на один слой а MCWLEG и MCWELD на другой. Что я делаю не так?
Код:
[Выделить все]
 (if (null *OldLayer*)
  (setq *OldLayer* (getvar "CLAYER"))
)
(cond 
((wcmatch thecommandstart "DIM*")
(setvar "clayer" "размеры")
) 
((wcmatch thecommandstart "*HATCH*,ARC*")
(setvar "clayer" "штриховка") 
) 
((wcmatch thecommandstart "*TEXT")
(setvar "clayer" "Текст") 
)
((wcmatch thecommandstart "LINE,XLINE,PLINE,RECTANG,CIRCLE,POLYGON,ELLIPSE")
(setvar "clayer" "Видимый контур (ГОСТ)") 
) 
((wcmatch thecommandstart "*TABLE")
(setvar "clayer" "Формат.Таблица") 
)
((wcmatch thecommandstart "*LEADER,SPLINE")
(setvar "clayer" "Волнистые линии") 
)
((AND
(wcmatch thecommandstart "MC*")
(wcmatch thecommandstart "~MCWLEG,~MCWELD")
)
(setvar "clayer" "Волнистые линии") 
)
((wcmatch thecommandstart "MCWLEG,MCWELD")
(setvar "clayer" "штриховка") 
)
(t (setq *OldLayer* nil))
(princ))
И еще вопросик.
Можно как нибудь добавить диалог с выбором из трех слоев для команды _line? Для толстых, тонких, и соответственно штрихпунктирных.
Извиняюсь, если уже задавали такой вопрос.

Последний раз редактировалось elnino, 16.05.2013 в 14:30.
elnino вне форума  
 
Непрочитано 17.05.2013, 17:54
1 | #300
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


поменяй перечисление команд местами.
Код:
[Выделить все]
 (if (null *OldLayer*)
  (setq *OldLayer* (getvar "CLAYER"))
)
(cond 
((wcmatch thecommandstart "DIM*")
(setvar "clayer" "размеры")
) 
((wcmatch thecommandstart "*HATCH*,ARC*")
(setvar "clayer" "штриховка") 
) 
((wcmatch thecommandstart "*TEXT")
(setvar "clayer" "Текст") 
)
((wcmatch thecommandstart "LINE,XLINE,PLINE,RECTANG,CIRCLE,POLYGON,ELLIPSE")
(setvar "clayer" "Видимый контур (ГОСТ)") 
) 
((wcmatch thecommandstart "*TABLE")
(setvar "clayer" "Формат.Таблица") 
)
((wcmatch thecommandstart "*LEADER,SPLINE")
(setvar "clayer" "Волнистые линии") 
)
((wcmatch thecommandstart "MCWLEG,MCWELD")
(setvar "clayer" "штриховка") 
)
((wcmatch thecommandstart "MC*")
(setvar "clayer" "Волнистые линии") 
)
)
(t (setq *OldLayer* nil))
(princ))
Пишу без проверки в редакторе, за баланс скобок не отвечаю
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.07.2013, 13:59
#301
elnino


 
Регистрация: 08.02.2013
Сообщений: 41


Подскажите пожалуйста как добавить тип линии в эту строку?
Код:
[Выделить все]
(vl-load-com) 
(if *vlr-cmd*
(progn
(setq *vlr-cmd* nil)
(vlr-remove-all :vlr-command-reactor)
) ;_ end of progn
) ;_ end of if
(setq *OldLayer* (getvar "CLAYER")) 
(vl-cmdf "_layer" "_make" "Размер (ГОСТ)" "_color" 4 "" "") 
(vl-cmdf "_layer" "_make" "Штриховка (ГОСТ)" "_color" 5 "" "") 
(vl-cmdf "_layer" "_make" "Текст" "_color" 3 "" "")
(vl-cmdf "_layer" "_make" "Линия обрыва (ГОСТ)" "_color" 1 "" "")
(vl-cmdf "_layer" "_make" "Видимый контур (ГОСТ)" "_color" 7 "" "")
(vl-cmdf "_layer" "_make" "Видимые тонкие (ГОСТ)" "_color" 5 "" "")
(vl-cmdf "_layer" "_make" "Осевая линия (ГОСТ)" "_color" 30 "" "")
я пробовал (vl-cmdf "_layer" "_make" "Осевая линия (ГОСТ)" "_color" 30 "_lt" JIS_08_15 ""), но что то ничего не выходит.
Заранее благодарю.
elnino вне форума  
 
Непрочитано 26.07.2013, 14:18
#302
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
(vl-cmdf "_layer" "_make" "Осевая линия (ГОСТ)" "_color" 30 "_lt" "JIS_08_15" "")
Тип линии должен быть загружен. См команду _linetype
или функцию _kpblc-linetype-load из #190
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.10.2013, 12:23
#303
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 692


Не подскажете где косяк
Цитата:
Команда: _appload layers.lsp успешно загружено.
Команда: ; ошибка: неверно расположенная точка на входе
Autocad 2014 sp1
Вложения
Тип файла: lsp layers.lsp (3.7 Кб, 65 просмотров)

Последний раз редактировалось gest, 17.10.2013 в 12:35.
gest вне форума  
 
Непрочитано 17.10.2013, 13:55
#304
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
(vl-cmdf "_layer" "_make" ".РИТ_размеры" "_color" 161 "_lw" .13 "")
Вместо .13 нужно записать 0.13 и так со всеми числами
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.10.2013, 14:09
#305
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 692


Исправил, теперь такое
Цитата:
_make .РИТ_размеры _color 161 _lw 0.130000000000000
Неправильное ключевое слово.
_layer _make .РИТ_штрих _color 253 _lw 0.130000000000000
Неправильное ключевое слово.
_layer _make .РИТ_текст _color 31 _lw 0.130000000000000
Неправильное ключевое слово.
_layer _make .РИТ_0.13 _color 6 _lw 0.130000000000000
Неправильное ключевое слово.
_layer _make .РИТ_0.13_нев. _color 6 _lw 0.130000000000000
Неправильное ключевое слово.
_ltfile
Неправильное ключевое слово.
GOST2.303.4
Неправильное ключевое слово.
_layer _make .РИТ_0.30 _color 6 _lw 0.300000000000000
Неправильное ключевое слово.
_layer _make .РИТ_0.50 _color 6 _lw 0.500000000000000
Неправильное ключевое слово.
_layer _make .РИТ_огр.анкера _color 6 _lw 0.300000000000000
Неправильное ключевое слово.
_layer _make .РИТ_огр.бровка _color 94 _lw 0.300000000000000
Неправильное ключевое слово.
_layer _make .РИТ_огр.трубы _color 6 _lw 0.300000000000000
Неправильное ключевое слово.
_layer _make .РИТ_огр.ось _color 44 _lw 0.130000000000000
Неправильное ключевое слово.
_layer _make .РИТ_оси _color 4 _lw 0.130000000000000
Неправильное ключевое слово.
_layer _make .РИТ_сваи _color 6 _lw 0.130000000000000
Неправильное ключевое слово.
Я так понимаю, что это появляется при совпадении слоев с уже существующими?
При открытии чертежа (без указанных слоев) нет задания цвета, типа линии, веса слоев и не переносятся размеры и.т.п.
gest вне форума  
 
Непрочитано 17.10.2013, 18:45
#306
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


gest Внимательно изучи порядок запросов команды _layer
Сравни 2 строчки
твоя
Код:
[Выделить все]
(vl-cmdf "_layer" "_make" ".РИТ_размеры" "_color" 161 "_lw" 0.13 "")
правильная
Код:
[Выделить все]
(vl-cmdf "_-layer" "_make" ".РИТ_размеры" "_color" 161 "" "_lw" 0.13 "" "")
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.10.2013, 01:38
#307
kga82

Инженер (неуч)
 
Регистрация: 12.03.2013
Сообщений: 482


Доброго времени суток. Уважаемый VVA пользуюсь вашей программой уже давно, классная программа, огромнейшее вам спасибо. Я в лиспе чайник у меня вопрос можно ли сделать автоматическое включение слоя для отрисовки сварных швов програмка Weld. Заранее благадарю.
Вложения
Тип файла: lsp На свои слои.LSP 2.LSP (3.1 Кб, 71 просмотров)
Тип файла: lsp weld.lsp (30.1 Кб, 51 просмотров)
kga82 вне форума  
 
Непрочитано 18.10.2013, 11:02
#308
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 692


VVA

спасибо за помощь,
никак не пойму как задать свой тип линии:

Код:
[Выделить все]
(vl-cmdf "_-layer" "_make" ".РИТ_0.13_нев." "_color" 7 "" "_lw" 0.13 "_lt" "GOST2.303.4" "_ltfile" "c:\\Program Files\\CSoft\\СПДС GraphiCS 8\\DataRO\Fonts\\GOST 2.303-68.lin")
Однако даже если этот слой исключить, при открытии чертежа, все равно, не размеры, не текст не переносится на заданные слои. И еще возможно ли сделать запуск переноса примитивов по определенным слоям по команде?

Последний раз редактировалось gest, 18.10.2013 в 11:33.
gest вне форума  
 
Непрочитано 18.10.2013, 16:36
#309
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


kga82,
Добавь в weld.lsp создание слоя в каждой команде по аналогии с кодом
Код:
[Выделить все]
(defun c:weld1 ()
(setvar "cmdecho" 0) ;подавляем болтливость автокада
(vl-cmdf "_layer" "_make" "Выноски" "_color" 242 "" "") ;_Создаем слой выноски и задаем цвет 242 <<<Добавить эту строку
Цитата:
все равно, не размеры, не текст не переносится на заданные слои.
У меня переносятся
PS weld.lsp для kga82
layers.lsp - для gest
Вложения
Тип файла: lsp weld.lsp (31.0 Кб, 70 просмотров)
Тип файла: lsp layers.lsp (3.8 Кб, 82 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.10.2013, 23:52
#310
kga82

Инженер (неуч)
 
Регистрация: 12.03.2013
Сообщений: 482


Спасибо огромное работает))), есть только одно но - после включения команды и ее выполнения текущий слой не возвращается, а остается слой выноски(
kga82 вне форума  
 
Непрочитано 25.10.2013, 09:38
#311
kga82

Инженер (неуч)
 
Регистрация: 12.03.2013
Сообщений: 482


VVA отклинитесь!!!!
kga82 вне форума  
 
Непрочитано 25.10.2013, 11:46
#312
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Откликнулся. Надо переработать все команды. Пока у меня на это времени нет
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.10.2013, 10:36
#313
kga82

Инженер (неуч)
 
Регистрация: 12.03.2013
Сообщений: 482


Так и знал что из за этого будет проблема, пытался сам что то сделать по аналогии но чем глубже лез чем больше понимал что чавойто будет не так все простенько Спа большое за отклик ждемс с нетерпением
kga82 вне форума  
 
Непрочитано 02.06.2015, 13:10
#314
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Подскажите.
Есть лисп, который помещает размеры в размерный слой
Цитата:
(defun c:р ()
(command "РЗМЛИНЕЙНЫЙ" pause pause pause)
(command "изменить" "последний" "" "с" "с" "размеры" "")
(prin1)
)
(defun c:рр ()
(command "РЗМРАДИУС" pause pause pause)
(command "изменить" "последний" "" "с" "с" "размеры" "")
(prin1)
)
почему, когда ставлю простой размер, помещается в слой "размеры" сразу, а когда ставлю радиальный размер, то он не помещается в слой "размеры", а остается в текущем, нужно дополнительно нажать ЛКМ на поставленный размер, только тогда поместится, если нажать на пустом месте, то радиальный размер так и останется в текущем слое
posetitel на форуме  
 
Непрочитано 02.06.2015, 16:23
#315
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Потому что в строке (command "РЗМРАДИУС" pause pause pause)
последнее pause лишнее
Код:
[Выделить все]
(defun c:рр ()
 (command "РЗМРАДИУС" pause pause)
 (command "изменить" "последний" "" "с" "с" "размеры" "")
 (prin1)
 )

Код:
[Выделить все]
;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку 
(vl-load-com) 
(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if
(setq *OldLayer* (getvar "CLAYER")) 
(vl-cmdf "_layer" "_make" "КР_П_01_ВЭ" "_color" 130 "" "_plot"  "_no" "" "") ;_Создаем слой видовых экранов noprint и задаем цвет 7 ... 
(vl-cmdf "_layer" "_make" "КР_П_02_Вспом_постр-1" "_color" 210 "" "") ;_Создаем слой вспомогательных построений noprint 
(vl-cmdf "_layer" "_make" "КР_П_03_Вспом_постр-2" "_color" 150 "" "")     ;_Создаем слой вспомогательных построений noprint
(vl-cmdf "_layer" "_make" "КР_П_041_Рамка_Штамп" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_042_Рамка_Штамп_Текст" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_05_Узлы_Разрезы_Сечения" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_1_Контур-1" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_1_Контур-2" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_1_Контур-3" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_1_Контур-4" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_2_Размеры-1" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_2_Размеры-2" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_3_Выноски-1" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_3_Выноски-2" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_4_Текст-1" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_4_Текст-2" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_5_Сварка-1" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_5_Сварка-2" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_6_Штриховка-1" "_color" 7 "" "")   ;
(vl-cmdf "_layer" "_make" "КР_П_6_Штриховка-2" "_color" 7 "" "")   ;


(setvar "clayer" *OldLayer*) 
(setq *OldLayer* nil) 
;;;;;;По аналогии добавить создание своего слоя 
;;; ... 
;;;;;; 
;;;;;;------------------------------------------------------------- 

(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" (Layer?(strcat "КР_П_2_Размеры-" (itoa(getvar "USERI1")))))       ;_Слой размеры должен быть создан выше (vl-cmdf "_layer" ... 
    ) 
 ;;; Конец реакции на DIM*    
    ((wcmatch thecommandstart "*HATCH*") ;_Если выполняется команда *HATCH* 
     (setvar "clayer" (Layer?(strcat "КР_П_6_Штриховка-" (getvar "USERI1"))))
    ) 
    ((wcmatch thecommandstart "*TEXT") ;_Если выполняется команда *TEXT (TEXT DTEXT) 
     (setvar "clayer" (Layer?(strcat "КР_П_4_Текст-" (getvar "USERI1"))))
    )
    ((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда *TABLE
     (setvar "clayer" (Layer?"Таблицы"))
    )
    ((wcmatch thecommandstart "*LEADER") ;_Если выполняется команда *QLEADER MLEADER
     (setvar "clayer" (Layer?(strcat "КР_П_3_Выноски-" (getvar "USERI1"))))
    )
    ((wcmatch thecommandstart "*VPORTS*") ;_Если выполняется команда *VPORTS
     (setvar "clayer" (Layer? "КР_П_01_ВЭ"))
    )
    (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
      (wcmatch cmd_name "*VPORTS*")   ;_Если выполняется команда *VPORTS*  
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))
(defun Layer? (Nme)
  ;;;Функция проверяет есть ли слой с именем Nme
  ;;;Если его нет - создает
  (if (not(TBLSEARCH "LAYER" Nme))
  (entmake (list (cons 0 "LAYER")
                 (cons 100 "AcDbSymbolTableRecord")
                 (cons 100 "AcDbLayerTableRecord")
                 (cons 2 Nme)
                 (cons 70 0)))
    )
  (if (TBLSEARCH "LAYER" Nme) Nme "0")
    )
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 09.09.2015 в 08:04.
VVA вне форума  
 
Непрочитано 02.06.2015, 17:35
#316
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


спасибо
posetitel на форуме  
 
Непрочитано 02.09.2015, 23:08
#317
betonolom


 
Регистрация: 15.10.2013
Сообщений: 30


Доброго времени суток!
Имеется следующая проблема:
К примеру, у меня n-ое количество слоев для размеров: Размеры_1, Размеры_2, ..... , Размеры_n.
Я сделал кнопку, которой присваиваю значение пользовательской переменной useri1.
Можно ли в лисп добавить эту переменную в лисп автоматического переноса. Хочется что-то типа этого (я понимаю что это в корне не верно, но так проще объяснить что я хочу от лиспа):
;;;_Реакция на начало команды *DIM* (DIMALIGNED DIMLINEAR и все что начинается с DIM)
((wcmatch thecommandstart "*DIM*") ;_Если выполняется команда DIM*
(setvar "clayer" "Размеры_$m=$(Getvar,Useri1)")

Спасибо за внимание!
betonolom вне форума  
 
Непрочитано 28.08.2016, 05:18
#318
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Доброго. Подниму тему.
Возникло небольшое затруднение при использовании реакторов с #25.
При вставке hatch, если изменять в ходе команды параметры штриховки из ribbon то работа реакторов не совсем корректна.
Вариант 1 (с командными методами) работает, но после завершения действия не меняет слой на прежний а остается на слое штриховки.
Вариант 2 (от Lee Mac) при этом перестает работать вовсе, и штриховки попадает на текущий слой вместо требуемого.

Последний раз редактировалось Red Nova, 28.08.2016 в 05:48.
Red Nova вне форума  
 
Непрочитано 17.01.2017, 12:27
#319
omsksn


 
Регистрация: 17.07.2009
Сообщений: 9


Уважаемые форумчане, а нет ли у кого подобного лиспа для НаноКада? Этот лисп там не работает (выдает ошибки), а сам я в лиспах не бум бум. В нанокаде можно по умолчанию задать чтобы размеры были в слое "размеры", а вот остальное не работает ((
omsksn вне форума  
 
Непрочитано 13.03.2017, 18:16
#320
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 759


Здравствуйте, гуру автокада и лиспа!
Сам я в лиспе не разбираюсь, поэтому хватило ума только взять представленный в этой теме код и переправить для пометочного облака.
Код:
[Выделить все]
 
(vl-load-com) 
(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if
(setq *OldLayer* (getvar "CLAYER")) 

;;;;;;(vl-cmdf "_layer" "_make" "Замечания" "_color" 90 "" "")   ;_Создаем слой выноски и задаем цвет 90
(setvar "clayer" *OldLayer*) 
(setq *OldLayer* nil) 

(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 
 
    ((wcmatch thecommandstart "REVCLOUD") ;_Если выполняется команда REVCLOUD
     (setvar "clayer" "Замечания") 
    )
    (t (setq *OldLayer* nil)) ;;_Если не наша команда, чистим список текущих слоев

    )
  (princ)) 
 ;;;------------------------------------------------------------- 
(defun cmd-end (calling-reactor cmd / cmd_name)
(setq cmd_name (strcase (car cmd)))
(if (or
      
      (wcmatch cmd_name "REVCLOUD")   ;_Если выполняется команда REVCLOUD
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))
Подскажите пожалуйста, есть ли возможность при создании слоя добавлять текущую дату?

Последний раз редактировалось Кулик Алексей aka kpblc, 13.03.2017 в 23:15.
AMDen вне форума  
 
Непрочитано 13.03.2017, 23:34
#321
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Как вариант, без особого тестирования:
Код:
[Выделить все]
 (vl-load-com)
(if *vlr-cmd*
  (progn (setq *vlr-cmd* nil) (vlr-remove-all :vlr-command-reactor))
  ) ;_ 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)
                      )
                    ) ;_ end of vlr-command-reactor
        ) ;_ end of setq
  ) ;_ end of if
(defun cmd-start (calling-reactor startcommandinfo / thecommandstart obj name)
  (setq thecommandstart (car startcommandinfo))
  (if (null *oldlayer*)
    (setq *oldlayer* (getvar "CLAYER"))
    ) ;_ end of if
  (cond ((wcmatch (strcase thecommandstart) "REVCLOUD")
         (setq obj (vla-add (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
                            (setq name (strcat "Замечания_" (itoa (fix (getvar "cdate")))))
                            ) ;_ end of vla-add
               ) ;_ end of setq
         (vla-put-lineweight obj aclnwt025)
         (vla-put-color obj 1)
         (vla-put-linetype obj "Continuous")
         (vla-put-plottable obj :vlax-true)
         (vl-catch-all-apply (function (lambda () (vla-put-freeze obj :vlax-false))))
         (vla-put-layeron obj :vlax-true)
         (vla-put-lock obj :vlax-false)
         (setq *oldsysvar*
                (mapcar (function (lambda (x / tmp)
                                    (if (setq tmp (getvar (car x)))
                                      (progn (setvar (car x)
                                                     (cond ((cdr x))
                                                           (t tmp)
                                                           ) ;_ end of cond
                                                     ) ;_ end of setvar
                                             (cons (car x) tmp)
                                             ) ;_ end of progn
                                      ) ;_ end of if
                                    ) ;_ end of LAMBDA
                                  ) ;_ end of function
                        (list (cons "clayer" name) '("cecolor") '("celweight") '("celtype"))
                        ) ;_ end of mapcar
               ) ;_ end of setq
         )
        (t (setq *oldsysvar* nil))
        ) ;_ end of cond
  ) ;_ end of defun
;;;------------------------------------------------------------- 
(defun cmd-end (calling-reactor cmd / obj cmd_name)
  (setq cmd_name (strcase (car cmd)))
  (cond ((wcmatch cmd_name "REVCLOUD") (foreach item *oldsysvar* (setvar (car item) (cdr item)))))
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.03.2017, 09:54
#322
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 759


Алексей, большое спасибо! Работает. )
AMDen вне форума  
 
Непрочитано 21.12.2017, 13:32 Диспетчер слоев
#323
Умяр

Инженер-проектировщик
 
Регистрация: 12.05.2016
Пенза
Сообщений: 5
Отправить сообщение для Умяр с помощью Skype™


Добрый день, форумчане! Использую первый лисп из #25.
Со своей задачей справляется.
При открытии документов автоматом выплывает Диспетчер слоев.
Мешает. Недавно подключилась и Справка. Теперь они вдвоем раздражают.
С чем может быть связано? Перечитал всю ветку, так и не догадался.

upd. Проблема решена
__________________
Начинающий

Последний раз редактировалось Умяр, 21.12.2017 в 13:42. Причина: Разобрался с проблемой
Умяр вне форума  
 
Непрочитано 21.12.2017, 13:43
#324
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Проверь другие подключаемые приложения - возможно, там проблемы.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.09.2018, 10:42
#325
Папаё

архитектор
 
Регистрация: 17.03.2015
респ. Коми
Сообщений: 55


Обратный вопрос, а как вычислить такой лисп, отправляющий все размеры на слой размеры?
На 17 кад ставил прежние липсы, веткад и тд. Попробовал их настройки- упорно размеры переносятся в тот слой.
__________________
архитектор
дома, эскизы
санаторий, дымоходы
Папаё вне форума  
 
Непрочитано 26.09.2018, 12:26
#326
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


локализовать - загружать по одной надстройке и пробовать
Сергей812 вне форума  
 
Непрочитано 27.03.2020, 15:17
#327
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 42
<phrase 1=


Уважаемые гуру!
Можно ли в строке изменить цвет линии и или как это сделать правильно
Код:
[Выделить все]
 (vl-cmdf "_layer" "_make" "АР_Оси" "_color" 10 "" "_lt"  "CENTER2" "" "_lw" 0.15 "" "")     ;_Создаем слой Оси и задаем цвет 10 тип линии штрихпунктирная вес 0,15
на
Код:
[Выделить все]
 (vl-cmdf "_layer" "_make" "АР_Оси" "_color" "255,1,1" "" "_lt"  "CENTER2" "" "_lw" 0.15 "" "")     ;_Создаем слой Оси и задаем цвет "255,1,1" тип линии штрихпунктирная вес 0,15
Требуется в монохроме печатать оси красным, устал менять вручную. Частенько забываю и приходится перепечатывать.
SergAM243 вне форума  
 
Непрочитано 01.04.2020, 20:34
#328
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Можно ли в строке изменить цвет линии и или как это сделать правильно
В вопросе говорится о цвете линиии, а в строке кода речь идет о цвете слоя.
Если правильно понял, нужно создать слой "АР Оси", цвет которого должен быть из палитры RGB.

Если это так, то нужно обеспечить загрузку лиспа:
Код:
[Выделить все]
 (defun create_layer 
;;; Функция создания слоя.
;;; Аргументы:
	(layer_name ;;; имя слоя (строка)
	 color      ;;; цвет слоя подложки. Варианты:
					;;;   - целое число, например: 1 - красный... 
					;;;	  - список целых чисел, соответствующих цвету RGB, например '(255 255 1)
	 linetype   ;;; тип линии (строка). nil - по умолчанию ("Continuous")
	 lineweight ;;; вес линии (вещественное число, например, 0.25). nil - по умолчанию
	 no_print   ;;; если T, то слой непечатаемый
	 /
	)	


	(if (and linetype (not (tblobjname "LType" linetype)))
		(vla-load (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object))) linetype "acadiso.lin")
	)
	(if	(null (tblsearch "layer" layer_name))
		(entmakex 
			(list 
				(vl-list* 0   "LAYER") 
				(vl-list* 100 "AcDbSymbolTableRecord") 
				(vl-list* 100 "AcDbLayerTableRecord") 
				(vl-list* 2 layer_name)
				(vl-list* 70 0)
				(if	(listp color)
					(vl-list* 420 
						(+
							(lsh (car  color) 16) ; R
							(lsh (cadr color)  8) ; G
							(caddr color)	      ; B
						) 
					) 
					(vl-list* 62 color)
				)
				(if	linetype
					(vl-list* 6 linetype)
					(vl-list* 6 "Continuous")
				)
				(if lineweight		 
					(vl-list* 370 (fix (* lineweight 100)))
					(vl-list* 370 -3); вес по умолчанию	
				)
				(if no_print
					(vl-list* 290 0) ; непечатаемый
					(vl-list* 290 1) ; печатаемый
				)
			)
		)

	)
)
, предварительно заменив в строке 16 имя файла типа линий с "acadiso.lin" на свой. Также нужно убедиться, что данный файл лежит в путях доступа.
а затем заменить строку:
Код:
[Выделить все]
 (vl-cmdf "_layer" "_make" "АР_Оси" "_color" 10 "" "_lt"  "CENTER2" "" "_lw" 0.15 "" "")     ;_Создаем слой Оси и задаем цвет 10 тип линии штрихпунктирная вес 0,15
на
Код:
[Выделить все]
 (create_layer "АР_Оси" '(255 1 1) "CENTER2" 0.15 nil)

Последний раз редактировалось skkkk, 07.04.2020 в 13:48.
skkkk вне форума  
 
Непрочитано 01.04.2020, 21:08
#329
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Может, я дальтоник? Кто мне скажет, отличаются ли визуально цвета "1", "10" и "255,1,1"?

И что это за проверяющие, для которых настолько критична разница между ними?
Миниатюры
Нажмите на изображение для увеличения
Название: 41141.PNG
Просмотров: 230
Размер:	7.7 Кб
ID:	224590  
skkkk вне форума  
 
Непрочитано 02.04.2020, 06:50
#330
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,298
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от skkkk Посмотреть сообщение
Кто мне скажет, отличаются ли визуально цвета "1", "10" и "255,1,1"?
очевидно, что после печати с монохромным стилем индексированные цвета будут черные, а 255,1,1 красным
убедиться легко вывести в на Dwg to PDF монохром
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 02.04.2020, 12:37
#331
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


doctorraz, спасибо. Не знал.
Хотя, мог бы быть повнимательнее, учитывая это:
Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Требуется в монохроме печатать оси красным, устал менять вручную.
skkkk вне форума  
 
Непрочитано 02.04.2020, 17:30
#332
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,298
Отправить сообщение для doctorraz с помощью Skype™


мы так подписи иногда раскрашиваем... знаю что низзя, но иногда очень нада)))
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 05.04.2020, 22:44
#333
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 42
<phrase 1=


Цитата:
Сообщение от skkkk Посмотреть сообщение
Если правильно понял, нужно создать слой "АР Оси", цвет которого должен быть из палитры RGB.

Если это так, то нужно обеспечить загрузку лиспа: ...
Спасибо за попытку помочь. Но я же как чукча-читатель, а не писатель. Привел только понятную и нужную мне строчку мне строчку. Но у меня по подсказке ничего не получилось.
Вот мой код, на основе кода №25:
Код:
[Выделить все]
 ;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку 
;;;Команда в Палитре_Инструментов:
;;;^C^C^P(load "01_Zagr_layer_АР-018.lsp")
(vl-load-com) 
;;;----------------------------------------
 (defun create_layer 
;;; Функция создания слоя.
;;; Аргументы:
	(layer_name ;;; имя слоя (строка)
	 color      ;;; цвет слоя подложки. Варианты:
					;;;   - целое число, например: 1 - красный... 
					;;;	  - список целых чисел, соответствующих цвету RGB, например '(255 255 1)
	 linetype   ;;; тип линии (строка). nil - по умолчанию ("Continuous")
	 lineweight ;;; вес линии (вещественное число, например, 0.25). nil - по умолчанию
	 no_print   ;;; если T, то слой непечатаемый
	 /
	)	


	(if (and linetype (not (tblobjname "LType" linetype)))
		(vla-load (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object)) linetype "acadiso.lin"))
	)
	(if	(null (tblsearch "layer" layer_name))
		(entmakex 
			(list 
				(vl-list* 0   "LAYER") 
				(vl-list* 100 "AcDbSymbolTableRecord") 
				(vl-list* 100 "AcDbLayerTableRecord") 
				(vl-list* 2 layer_name)
				(vl-list* 70 0)
				(if	(listp color)
					(vl-list* 420 
						(+
							(lsh (car  color) 16) ; R
							(lsh (cadr color)  8) ; G
							(caddr color)	      ; B
						) 
					) 
					(vl-list* 62 color)
				)
				(if	linetype
					(vl-list* 6 linetype)
					(vl-list* 6 "Continuous")
				)
				(if lineweight		 
					(vl-list* 370 (fix (* lineweight 100)))
					(vl-list* 370 -3); вес по умолчанию	
				)
				(if no_print
					(vl-list* 290 0) ; непечатаемый
					(vl-list* 290 1) ; печатаемый
				)
			)
		)

	)
)
;;;----------------------------------------
(vl-cmdf "_layer" "_make" "АР_Размеры" "_color" 150 "" "_lw" 0.15 "" "") ;_Создаем слой Размеры и задаем цвет 150 
(vl-cmdf "_layer" "_make" "АР_Размеры осевые" "_color" 26 "" "_lw" 0.15 "" "") ;_Создаем слой Размеры осевые и задаем цвет 26
(vl-cmdf "_layer" "_make" "АР_Штриховка" "_color" 176 "" "_lw" 0.09 "" "") ;_Создаем слой Штриховка и задаем цвет 176 
(vl-cmdf "_layer" "_make" "АР_Основ" "_color" 2 "" "_lw" 0.60 "" "") ;_Создаем слой АР_Осн и задаем цвет 2
(vl-cmdf "_layer" "_make" "АР_Армат" "_color" 1 "" "_lw" 0.15 "" "") ;_Создаем слой Армат и задаем цвет 1
(vl-cmdf "_layer" "_make" "АР_Окна_двери" "_color" 5 "" "_lw" 0.15 "" "") ;_Создаем слой Окна_двери и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Перегородки" "_color" 73 "" "_lw" 0.15 "" "") ;_Создаем слой Перегородки и задаем цвет 73
(vl-cmdf "_layer" "_make" "АР_Стены" "_color" 115 "" "_lw" 0.35 "" "") ;_Создаем слой Стены и задаем цвет 115
(vl-cmdf "_layer" "_make" "АР_Земля" "_color" 155 "" "_lw" 0.90 "" "") ;_Создаем слой АР_Земля и задаем цвет 155
(vl-cmdf "_layer" "_make" "АР_Текст" "_color" 5 "" "_lw" 0.15 "" "")     ;_Создаем слой Текст и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Штрихдветочки" "_color" 42 "" "_lt"  "ACAD_ISO12W100" "" "_lw" 0.15 "" "")     ;_Создаем слой штрихдветочки и задаем цвет 42 тип линии ACAD_ISO12W100 вес 0,15
(vl-cmdf "_layer" "_make" "АР_Пунктир" "_color" 5 "" "_lt"  "Штриховая" "" "_lw" 0.15 "" "")     ;_Создаем слой Пунктир и задаем цвет 6 тип линии штриховая вес 0,15
(vl-cmdf "_layer" "_make" "АР_Рамка" "_color" 151 "" "")     ;_Создаем слой Рамка и задаем цвет 151
(vl-cmdf "_layer" "_make" "АР_Непечат" "_color" 205 "" "_lw" 0.15 "" "_plot" "_n" "" "")   ;_Создаем слой Вспомогат и задаем цвет 205 непечатаемый
(vl-cmdf "_layer" "_make" "АР_Таблицы" "_color" 33 "" "")   ;_Создаем слой Таблицы и задаем цвет 33
(vl-cmdf "_layer" "_make" "АР_Сантехника" "_color" 6 "" "_lw" 0.15 "" "")   ;_Создаем слой Сантехника и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Выноски" "_color" 5 "" "_lw" 0.15 "" "")   ;_Создаем слой Выноски и задаем цвет 6
(vl-cmdf "_layer" "_make" "АР_Оборуд" "_color" 3 "" "_lw" 0.40 "" "")   ;_Создаем слой Оборуд и задаем цвет 3
(setvar "clayer" *OldLayer*) 
(setq *OldLayer* nil) 
(setq *OldLayer* (getvar "CLAYER"))
;;;;;;По аналогии добавить создание своего слоя 
;;; ... 
;;;;;; 
;;;;;;------------------------------------------------------------- 
(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" "АР_Выноски") 
    )
	   ((wcmatch thecommandstart "*XLINE") ;_Если выполняется команда XLINE
     (setvar "clayer" "АР_Непечат")
    )
	((wcmatch thecommandstart "*RAY") ;_Если выполняется команда_ray RAY -ЛУЧ-
     (setvar "clayer" "АР_Непечат")
    )
	((wcmatch thecommandstart "*ЛУЧ") ;_Если выполняется команда ЛУЧ
     (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
	  (wcmatch cmd_name "*XLINE") ;_Если выполняется команда XLINE
	  (wcmatch cmd_name "*RAY") ;_Если выполняется команда RAY
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))
;;;----------------------------------------
 (create_layer "АР_Оси" '(255 1 1) "CENTER2" 0.15 nil)     ;_Создаем слой Оси и задаем цвет "255,1,1" тип линии штрихпунктирная вес 0,15
Загрузку лиспа вставил после (vl-load-com). А строчку (create_layer "АР_Оси" '(255 1 1) "CENTER2" 0.15 nil)
вставлял и сразу после лиспа, и в списке создаваемых слоев, и как в приведенном варианте, в самом конце кода.

Но все время выдает ошибку:
Команда: ; ошибка: Настройка переменной AutoCAD отвергнута: "clayer" nil

Система Вин-7про-32, Кад-18_ру чистый со стандартной установкой СПДС и Експрессов.
Если есть возможность, то прошу внести изменения в этот код, чтобы запускать один лисп.
Если нет такой возможности, то отдельный лисп, чтобы они запускались по очереди.
SergAM243 вне форума  
 
Непрочитано 06.04.2020, 20:46
#334
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Загрузку лиспа вставил после (vl-load-com)
Можно туда, да.


Цитата:
Сообщение от SergAM243 Посмотреть сообщение
А строчку (create_layer "АР_Оси" '(255 1 1) "CENTER2" 0.15 nil)
вставлял и сразу после лиспа, и в списке создаваемых слоев, и как в приведенном варианте, в самом конце кода.
А вот эту строку правильнее и логичнее вставить между 81-й и 82-й строкой в коде в #333. Я так делал, у меня срабатывало - слой создавался, правда для пробы я прописывал тип линий из имеющихся у меня, а перед публикацией кода поменял на CENTER2.

Плюс, напоминаю, что нужно обеспечить либо наличие в файле типа линий CENTER2, либо переименовать в коде имя файла с "acadiso.lin" на свой, в котором описан данный тип линий. Также файл должен находиться в путях доступа.

К тому же в коде (#333) я не увидел, какой из типов объектов должен добавляться на слой "АР_Оси"? Либо код просто используется для создания слоя, сами оси (полагаю, блоки) переносятся на слой вручную?
skkkk вне форума  
 
Непрочитано 06.04.2020, 22:51
#335
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 42
<phrase 1=


skkkk, спасибо за помощь!
Вставил, как советовали.


CENTER2 в файле "acadiso.lin" есть. Во всяком случае, если создавать слой по подобию 79 или 80 строки с цветом 10, слой создается.
Для пробы менял на "осевая". она тоже есть в файле "acadiso.lin".

В обоих случаях сейчас другая ошибка:
Цитата:
Введите имя нового слоя (этот слой станет текущим) <АР_Выноски>: АР_Оборуд Задайте параметр [?/Создать/Установить/Новый/ПЕРеименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/пРозрачность/Материал/пеЧать/Заморозить/РАзморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать/ВНешняя ссылка]: _color
Новый цвет [изПалитры/Альбом] : 3
Список имен слоев для присвоения цвета 3 (зеленый) <АР_Оборуд>: Задайте параметр [?/Создать/Установить/Новый/ПЕРеименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/пРозрачность/Материал/пеЧать/Заморозить/РАзморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать/ВНешняя ссылка]: _lw
Вес линий (0.0мм - 2.11мм): 0.4
Список имен слоев для присвоения веса линий 0.40мм <АР_Оборуд>: Задайте параметр [?/Создать/Установить/Новый/ПЕРеименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/пРозрачность/Материал/пеЧать/Заморозить/РАзморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать/ВНешняя ссылка]:
Команда: ; ошибка: Слишком много фактических параметров
Т.е. слой по строке 81 создается, а дальше ступор.

Файл создаю новый, каждый раз загружаю КАД заново. А слой нужен просто, чтобы был. Не для "автоматики".
SergAM243 вне форума  
 
Непрочитано 07.04.2020, 13:10
#336
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,298
Отправить сообщение для doctorraz с помощью Skype™


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

----- добавлено через ~2 мин. -----
ЗЫ для автоматизации создания слоев весьма рекомендую LayerDirector благо он теперь умеет создавать слои с заданными свойствами не только объектам-примитивам, но и на команды
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 07.04.2020, 13:55
#337
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от SergAM243 Посмотреть сообщение
ошибка: Слишком много фактических параметров
SergAM243, попробуйте так:
Код:
[Выделить все]
  ;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку 
;;;Команда в Палитре_Инструментов:
;;;^C^C^P(load "01_Zagr_layer_АР-018.lsp")
(vl-load-com) 
;;;----------------------------------------
 (defun create_layer 
;;; Функция создания слоя.
;;; Аргументы:
	(layer_name ;;; имя слоя (строка)
	 color      ;;; цвет слоя подложки. Варианты:
					;;;   - целое число, например: 1 - красный... 
					;;;	  - список целых чисел, соответствующих цвету RGB, например '(255 255 1)
	 linetype   ;;; тип линии (строка). nil - по умолчанию ("Continuous")
	 lineweight ;;; вес линии (вещественное число, например, 0.25). nil - по умолчанию
	 no_print   ;;; если T, то слой непечатаемый
	 /
	)	


	(if (and linetype (not (tblobjname "LType" linetype)))
		(vla-load (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object))) linetype "acadiso.lin")
	)
	(if	(null (tblsearch "layer" layer_name))
		(entmakex 
			(list 
				(vl-list* 0   "LAYER") 
				(vl-list* 100 "AcDbSymbolTableRecord") 
				(vl-list* 100 "AcDbLayerTableRecord") 
				(vl-list* 2 layer_name)
				(vl-list* 70 0)
				(if	(listp color)
					(vl-list* 420 
						(+
							(lsh (car  color) 16) ; R
							(lsh (cadr color)  8) ; G
							(caddr color)	      ; B
						) 
					) 
					(vl-list* 62 color)
				)
				(if	linetype
					(vl-list* 6 linetype)
					(vl-list* 6 "Continuous")
				)
				(if lineweight		 
					(vl-list* 370 (fix (* lineweight 100)))
					(vl-list* 370 -3); вес по умолчанию	
				)
				(if no_print
					(vl-list* 290 0) ; непечатаемый
					(vl-list* 290 1) ; печатаемый
				)
			)
		)

	)
)
;;;----------------------------------------
(vl-cmdf "_layer" "_make" "АР_Размеры" "_color" 150 "" "_lw" 0.15 "" "") ;_Создаем слой Размеры и задаем цвет 150 
(vl-cmdf "_layer" "_make" "АР_Размеры осевые" "_color" 26 "" "_lw" 0.15 "" "") ;_Создаем слой Размеры осевые и задаем цвет 26
(vl-cmdf "_layer" "_make" "АР_Штриховка" "_color" 176 "" "_lw" 0.09 "" "") ;_Создаем слой Штриховка и задаем цвет 176 
(vl-cmdf "_layer" "_make" "АР_Основ" "_color" 2 "" "_lw" 0.60 "" "") ;_Создаем слой АР_Осн и задаем цвет 2
(vl-cmdf "_layer" "_make" "АР_Армат" "_color" 1 "" "_lw" 0.15 "" "") ;_Создаем слой Армат и задаем цвет 1
(vl-cmdf "_layer" "_make" "АР_Окна_двери" "_color" 5 "" "_lw" 0.15 "" "") ;_Создаем слой Окна_двери и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Перегородки" "_color" 73 "" "_lw" 0.15 "" "") ;_Создаем слой Перегородки и задаем цвет 73
(vl-cmdf "_layer" "_make" "АР_Стены" "_color" 115 "" "_lw" 0.35 "" "") ;_Создаем слой Стены и задаем цвет 115
(vl-cmdf "_layer" "_make" "АР_Земля" "_color" 155 "" "_lw" 0.90 "" "") ;_Создаем слой АР_Земля и задаем цвет 155
(vl-cmdf "_layer" "_make" "АР_Текст" "_color" 5 "" "_lw" 0.15 "" "")     ;_Создаем слой Текст и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Штрихдветочки" "_color" 42 "" "_lt"  "ACAD_ISO12W100" "" "_lw" 0.15 "" "")     ;_Создаем слой штрихдветочки и задаем цвет 42 тип линии ACAD_ISO12W100 вес 0,15
(vl-cmdf "_layer" "_make" "АР_Пунктир" "_color" 5 "" "_lt"  "Штриховая" "" "_lw" 0.15 "" "")     ;_Создаем слой Пунктир и задаем цвет 6 тип линии штриховая вес 0,15
(vl-cmdf "_layer" "_make" "АР_Рамка" "_color" 151 "" "")     ;_Создаем слой Рамка и задаем цвет 151
(vl-cmdf "_layer" "_make" "АР_Непечат" "_color" 205 "" "_lw" 0.15 "" "_plot" "_n" "" "")   ;_Создаем слой Вспомогат и задаем цвет 205 непечатаемый
(vl-cmdf "_layer" "_make" "АР_Таблицы" "_color" 33 "" "")   ;_Создаем слой Таблицы и задаем цвет 33
(vl-cmdf "_layer" "_make" "АР_Сантехника" "_color" 6 "" "_lw" 0.15 "" "")   ;_Создаем слой Сантехника и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Выноски" "_color" 5 "" "_lw" 0.15 "" "")   ;_Создаем слой Выноски и задаем цвет 6
(vl-cmdf "_layer" "_make" "АР_Оборуд" "_color" 3 "" "_lw" 0.40 "" "")   ;_Создаем слой Оборуд и задаем цвет 3
(create_layer "АР_Оси" '(255 1 1) "CENTER2" 0.15 nil)     ;_Создаем слой Оси и задаем цвет "255,1,1" тип линии штрихпунктирная вес 0,15(setvar "clayer" *OldLayer*) 
(setq *OldLayer* nil) 
(setq *OldLayer* (getvar "CLAYER"))
;;;;;;По аналогии добавить создание своего слоя 
;;; ... 
;;;;;; 
;;;;;;------------------------------------------------------------- 
(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" "АР_Выноски") 
    )
	   ((wcmatch thecommandstart "*XLINE") ;_Если выполняется команда XLINE
     (setvar "clayer" "АР_Непечат")
    )
	((wcmatch thecommandstart "*RAY") ;_Если выполняется команда_ray RAY -ЛУЧ-
     (setvar "clayer" "АР_Непечат")
    )
	((wcmatch thecommandstart "*ЛУЧ") ;_Если выполняется команда ЛУЧ
     (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
	  (wcmatch cmd_name "*XLINE") ;_Если выполняется команда XLINE
	  (wcmatch cmd_name "*RAY") ;_Если выполняется команда RAY
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))
;;;----------------------------------------
skkkk вне форума  
 
Непрочитано 07.04.2020, 21:33
#338
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 42
<phrase 1=


Цитата:
Сообщение от skkkk Посмотреть сообщение
SergAM243, попробуйте так:
Спасибо! Попробовал.
Слой "АР_Оси" с цветом 255,1,1 в новом чистом файле создается, но если в файле уже есть слой "АР_Оси" с цветом 10, то он так 10-кой и остается.
После отработки лиспа добросовестно выводится "Команда: CMD-END", но текущим остается созданный "АР-Оборуд", а не стоявший перед применением лиспа.
И даже не последний созданый "АР-Оси".
Может легче программно просто менять имеющийся "АР-Оси" - 10 на "АР-Оси" - 255,1,1.
Т.е. создавать, как у меня и было, "АР-Оси" - 10 по аналогии с другими слоями, а потом отдельно искать "АР-Оси" и менять ему цвет?

Цитата:
Сообщение от doctorraz Посмотреть сообщение
в стиле печати монохром назначить этому индексированному цвету цвет пера который возжелал видеть нормоконтроллер или какой другой проверяющий
А вот за это простейшее и очевиднейшее решение моей задачи огромное и нижайшее СПАСИБО!
Ничуть не меньше такого же огромного и нижайшего СПАСИБО для skkkk, помогающего решить эту задачу программно!

LayerDirector обязательно посмотрю.

Для skkkk
В принципе моя проблемка решена. Но если есть желание и возможность решать и решить эту задачку на программном уровне,
то обязуюсь быть ответственным тестером до получения удовлетворяющих не только меня результатов.

Еще раз Большое спасибо всем откликнувшимся и помогавшим в решении проблеммы!

Последний раз редактировалось SergAM243, 07.04.2020 в 21:56.
SergAM243 вне форума  
 
Непрочитано 08.04.2020, 10:03
1 | #339
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


Цитата:
Сообщение от doctorraz Посмотреть сообщение
имха задача назначить при создании слоя ему цвет RGB нетривиальна
да как бы нет
Код:
[Выделить все]
 (defun add_layer (layer_name_string rgb_string / color_list layer_being_added dwg_layers_collection color_object)
	(setq color_list (read (strcat "(" rgb_string ")")))
	(if (vl-catch-all-error-p
			(setq layer_being_added (vl-catch-all-apply 'vla-item
														(list
															(setq dwg_layers_collection (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))))
															layer_name_string
														)
									)
			)
		)
			(setq layer_being_added (vla-add dwg_layers_collection layer_name_string))
	)
	(setq color_object (vlax-create-object (strcat "AutoCAD.AcCmColor." (substr (getvar "ACADVER") 1 2))))
	(vla-put-colormethod (vla-get-truecolor layer_being_added) acColorMethodByRGB)
    (vla-setrgb color_object (car color_list) (cadr color_list) (caddr color_list))
	(vla-put-truecolor layer_being_added color_object)
	(princ)
)
koMon вне форума  
 
Непрочитано 08.04.2020, 11:44
#340
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,298
Отправить сообщение для doctorraz с помощью Skype™


Offtop:
Цитата:
Сообщение от koMon Посмотреть сообщение
да как бы нет
по сравнению с назначить индексированный цвет...))))
как спутник в космос запускать
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 08.04.2020, 11:55
#341
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


Offtop: holy fucking shitty shit
Offtop: сказал илон маск, и начал строить ракеты

Последний раз редактировалось koMon, 08.04.2020 в 12:04.
koMon вне форума  
 
Непрочитано 08.04.2020, 13:29
#342
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,298
Отправить сообщение для doctorraz с помощью Skype™


Offtop:
Цитата:
Сообщение от koMon Посмотреть сообщение
и начал строить ракеты
90% этих ракет запускаются в космос штатным функционалом
еще 8% ракет построены дабы подстроиться под кривые бизнесс процессы пользователей, либо пользователи не подозревают, что в базе это уже сделано
но без 2% не обойтись.. надо запускать)))
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 08.04.2020 в 13:36.
doctorraz вне форума  
 
Непрочитано 08.04.2020, 14:04
#343
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809



Offtop: соглашусь согласиться
koMon вне форума  
 
Непрочитано 09.04.2020, 02:04
#344
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Файл создаю новый, каждый раз загружаю КАД заново. А слой нужен просто, чтобы был. Не для "автоматики".
Так есть ли смысл использовать программу, которая использует РЕАКТОРЫ и "заставляет" новые размеры независимо от текущего слоя попадать на слой "Размеры" (условно), новые штриховки - на слой "Штриховки" и т.д. - использовать просто для создания набора слоев в новом чертеже автоматически? Можно просто использовать функцию create_layer и задать нужных слоев сколько влезет с нужными настройками. Или все-таки нужен этот функционал для переброски размеров на слой размеры? Просто я попробовал в коде из #333 поудалять "свои" фрагменты - слой не восстанавливается, и
Цитата:
Сообщение от SergAM243 Посмотреть сообщение
После отработки лиспа добросовестно выводится "Команда: CMD-END"
То есть, мой код в этом никак не участвует (и, вообще-то не должен по задумке).

Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Слой "АР_Оси" с цветом 255,1,1 в новом чистом файле создается, но если в файле уже есть слой "АР_Оси" с цветом 10, то он так 10-кой и остается.
Исправил свою функцию create_layer, чтобы она принудительно изменяла настройки слоя, если он уже существует, на указанные в аргументах:
Код:
[Выделить все]
 (defun create_layer 
;;; Функция создания слоя. При наличии слоя в чертеже меняет ему настройки (цвет, тип, вес линий) на указанные в аргументах
;;; Аргументы:
	(layer_name ;;; имя слоя (строка)
	 color      ;;; цвет слоя подложки. Варианты:
					;;;   - целое число, например: 1 - красный... 
					;;;	  - список целых чисел, соответствующих цвету RGB, например '(255 255 1)
	 linetype   ;;; тип линии (строка). nil - по умолчанию ("Continuous")
	 lineweight ;;; вес линии (вещественное число, например, 0.25). nil - по умолчанию
	 no_print   ;;; если T, то слой непечатаемый
	 /
	 entlist entlay
	)	


	(if (and linetype (not (tblobjname "LType" linetype)))
		(vla-load (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object))) linetype "acadiso.lin")
	)
	(setq entlist
		(list 
			(vl-list* 0   "LAYER") 
			(vl-list* 100 "AcDbSymbolTableRecord") 
			(vl-list* 100 "AcDbLayerTableRecord") 
			(vl-list* 2 layer_name)
			(vl-list* 70 0)
			(if	(listp color)
				(vl-list* 420 
					(+
						(lsh (car  color) 16) ; R
						(lsh (cadr color)  8) ; G
						(caddr color)	      ; B
					) 
				) 
				(vl-list* 62 color)
			)
			(if	linetype
				(vl-list* 6 linetype)
				(vl-list* 6 "Continuous")
			)
			(if lineweight		 
				(vl-list* 370 (fix (* lineweight 100)))
				(vl-list* 370 -3); вес по умолчанию	
			)
			(if no_print
				(vl-list* 290 0) ; непечатаемый
				(vl-list* 290 1) ; печатаемый
			)
		)
	)
	
	
	(if	(null (setq entlay (tblobjname "LAYER" layer_name)))
		(entmakex entlist)
		(entmod (append (list (assoc -1 (entget entlay))) entlist))
	)
)
В общем, если от проги нужно просто создание слоев, добавляете в автозапуск этот код, и дописываете туда сколько надо слоев по примеру:
Код:
[Выделить все]
 (create_layer "АР_Оси" '(255 1 1) "CENTER2" 0.15 nil)     ;_Создаем слой Оси и задаем цвет "255,1,1" тип линии штрихпунктирная вес 0,15
Код:
[Выделить все]
 (create_layer "АР_ЧТО_ТО_ЕЩЕ" 7 "Continuous" 0.40 nil)     ;_Создаем слой "АР_ЧТО_ТО_ЕЩЕ" и задаем цвет "7" тип линии Continuous вес 0,40
Код:
[Выделить все]
 (create_layer "АР_NOPRINT" 5 "Continuous" 0.40 T)     ;_Создаем слой "АР_NOPRINT " и задаем цвет "5" тип линии Continuous вес 0,40 "НЕПЕЧАТАЕМЫЙ"
и т.д.

Если все же нужны реакторы, то рекомендую еще раз внести нужные изменения в код из #25 повнимательнее - очевидно, там произошла ошибка при редактировании "под себя", вникать в которую не хочется.
Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Но если есть желание и возможность решать и решить эту задачку на программном уровне,
то обязуюсь быть ответственным тестером до получения удовлетворяющих не только меня результатов.
Дополнить парой строчек свой код мне не сложно. Тем более, что я его не писал с нуля, а поделился тем, что уже было. Лучше, конечно, если ТЗ изначально и сразу подразумевает решение всех задач (например, менять цвет слоя, если он уже существует), однако, я мог бы и сам догадаться в такой нужде. Просто, никак не смог предположить интуитивно, что командные методы при наличии слоя в чертеже меняют-таки его настройки на прописанные в коде (не пользовался таким методом никогда). Это я так - просто поворчать - на будущее .


Цитата:
Сообщение от koMon Посмотреть сообщение
да как бы нет
Поленился в свое время лезть в RGB через VLA, поэтому, спасибо за шпаргалочку .

Последний раз редактировалось skkkk, 09.04.2020 в 12:04.
skkkk вне форума  
 
Непрочитано 09.04.2020, 10:10
#345
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


Цитата:
Сообщение от skkkk Посмотреть сообщение
сегодня в 02:12

Цитата:
Сообщение от skkkk Посмотреть сообщение
спасибо за шпаргалочку
koMon вне форума  
 
Непрочитано 10.04.2020, 23:37
#346
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 42
<phrase 1=


skkkk писал:
Цитата:
Так есть ли смысл использовать программу...
Да, этот функционал для переброски размеров &K на свои слои мне нужен. Все и затевалось из-за этого. Просто попутно создаю еще дополнительные слои. АР_Оси в том числе.

Попробовал новый вариант кода. Да, это то, что мне было нужно. Ошибку в своем коде нашел. Закопипастил одну лишнюю строчку, т.е. затер ее. Сравнил с исходным и нашел разницу.
На всякий случай выкладываю свою последнюю версию, Вдруг кому-то пригодится.

Код:
[Выделить все]
   ;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку 
;;;Команда в Палитре_Инструментов:
;;;^C^C^P(load "01_Zagr_layer_АР-018.lsp")
(vl-load-com)
(setq *OldLayer* (getvar "CLAYER")) 
;;;----------------------------------------
 (defun create_layer 
;;; Функция создания слоя. При наличии слоя в чертеже меняет ему настройки (цвет, тип, вес линий) на указанные в аргументах
;;; Аргументы:
	(layer_name ;;; имя слоя (строка)
	 color      ;;; цвет слоя подложки. Варианты:
					;;;   - целое число, например: 1 - красный... 
					;;;	  - список целых чисел, соответствующих цвету RGB, например '(255 255 1)
	 linetype   ;;; тип линии (строка). nil - по умолчанию ("Continuous")
	 lineweight ;;; вес линии (вещественное число, например, 0.25). nil - по умолчанию
	 no_print   ;;; если T, то слой непечатаемый
	 /
	 entlist entlay
	)	


	(if (and linetype (not (tblobjname "LType" linetype)))
		(vla-load (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object))) linetype "acadiso.lin")
	)
	(setq entlist
		(list 
			(vl-list* 0   "LAYER") 
			(vl-list* 100 "AcDbSymbolTableRecord") 
			(vl-list* 100 "AcDbLayerTableRecord") 
			(vl-list* 2 layer_name)
			(vl-list* 70 0)
			(if	(listp color)
				(vl-list* 420 
					(+
						(lsh (car  color) 16) ; R
						(lsh (cadr color)  8) ; G
						(caddr color)	      ; B
					) 
				) 
				(vl-list* 62 color)
			)
			(if	linetype
				(vl-list* 6 linetype)
				(vl-list* 6 "Continuous")
			)
			(if lineweight		 
				(vl-list* 370 (fix (* lineweight 100)))
				(vl-list* 370 -3); вес по умолчанию	
			)
			(if no_print
				(vl-list* 290 0) ; непечатаемый
				(vl-list* 290 1) ; печатаемый
			)
		)
	)
	
	
	(if	(null (setq entlay (tblobjname "LAYER" layer_name)))
		(entmakex entlist)
		(entmod (append (list (assoc -1 (entget entlay))) entlist))
	)
)

;;;----------------------------------------
(vl-cmdf "_layer" "_make" "АР_Размеры" "_color" 150 "" "_lw" 0.15 "" "") ;_Создаем слой Размеры и задаем цвет 150 
(vl-cmdf "_layer" "_make" "АР_Размеры осевые" "_color" 26 "" "_lw" 0.15 "" "") ;_Создаем слой Размеры осевые и задаем цвет 26
(vl-cmdf "_layer" "_make" "АР_Штриховка" "_color" 176 "" "_lw" 0.09 "" "") ;_Создаем слой Штриховка и задаем цвет 176 
(vl-cmdf "_layer" "_make" "АР_Основ" "_color" 2 "" "_lw" 0.60 "" "") ;_Создаем слой АР_Осн и задаем цвет 2
(vl-cmdf "_layer" "_make" "АР_Армат" "_color" 1 "" "_lw" 0.15 "" "") ;_Создаем слой Армат и задаем цвет 1
(vl-cmdf "_layer" "_make" "АР_Окна_двери" "_color" 5 "" "_lw" 0.15 "" "") ;_Создаем слой Окна_двери и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Перегородки" "_color" 73 "" "_lw" 0.15 "" "") ;_Создаем слой Перегородки и задаем цвет 73
(vl-cmdf "_layer" "_make" "АР_Стены" "_color" 115 "" "_lw" 0.35 "" "") ;_Создаем слой Стены и задаем цвет 115
(vl-cmdf "_layer" "_make" "АР_Земля" "_color" 155 "" "_lw" 0.90 "" "") ;_Создаем слой АР_Земля и задаем цвет 155
(vl-cmdf "_layer" "_make" "АР_Текст" "_color" 5 "" "_lw" 0.15 "" "")     ;_Создаем слой Текст и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Штрихдветочки" "_color" 42 "" "_lt"  "ACAD_ISO12W100" "" "_lw" 0.15 "" "")     ;_Создаем слой штрихдветочки и задаем цвет 42 тип линии ACAD_ISO12W100 вес 0,15
(vl-cmdf "_layer" "_make" "АР_Пунктир" "_color" 5 "" "_lt"  "Штриховая" "" "_lw" 0.15 "" "")     ;_Создаем слой Пунктир и задаем цвет 5 тип линии штриховая вес 0,15
(vl-cmdf "_layer" "_make" "АР_Рамка" "_color" 151 "" "")     ;_Создаем слой Рамка и задаем цвет 151
(vl-cmdf "_layer" "_make" "АР_Непечат" "_color" 205 "" "_lw" 0.15 "" "_plot" "_n" "" "")   ;_Создаем слой АР_Непечат и задаем цвет 205 непечатаемый
(vl-cmdf "_layer" "_make" "АР_Таблицы" "_color" 33 "" "")   ;_Создаем слой Таблицы и задаем цвет 33
(vl-cmdf "_layer" "_make" "АР_Сантехника" "_color" 6 "" "_lw" 0.15 "" "")   ;_Создаем слой Сантехника и задаем цвет 6
(vl-cmdf "_layer" "_make" "АР_Выноски" "_color" 5 "" "_lw" 0.15 "" "")   ;_Создаем слой Выноски и задаем цвет 5
(vl-cmdf "_layer" "_make" "АР_Оборуд" "_color" 3 "" "_lw" 0.40 "" "")   ;_Создаем слой Оборуд и задаем цвет 3
(create_layer "АР_Оси" '(255 1 1) "CENTER2" 0.15 nil)     ;_Создаем слой Оси и задаем цвет "255,1,1" тип линии штрихпунктирная вес 0,15(setvar "clayer" *OldLayer*) 
(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" "АР_Выноски") 
    )
	   ((wcmatch thecommandstart "*XLINE") ;_Если выполняется команда XLINE
     (setvar "clayer" "АР_Непечат")
    )
	((wcmatch thecommandstart "*RAY") ;_Если выполняется команда_ray RAY -ЛУЧ-
     (setvar "clayer" "АР_Непечат")
    )
	((wcmatch thecommandstart "*ЛУЧ") ;_Если выполняется команда ЛУЧ
     (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
	  (wcmatch cmd_name "*XLINE") ;_Если выполняется команда XLINE
	  (wcmatch cmd_name "*RAY") ;_Если выполняется команда RAY
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))
;;;----------------------------------------
Функцию принудительного изменения настройки слоя, если он уже существует, на указанные в аргументах в лиспе применяю для исправления своих старых чертежей.
Еще использую эту функцию для изменения цветов слоев под белый или черный экран. Для черчения использую черный экран, но начальник любит смотреть на белом.
Приходится выкручиваться. Благо дело на форуме Апельсинов выкладывал лисп для быстрой смены цвета экрана.
Вот так меняешь цвет экрана, меняешь цвета слоев и начальнику нравится. Как только отошел, возвращаешь все в исходное.

Вопрос!
Можно ли в строчке:

(create_layer "АР_ЧТО_ТО_ЕЩЕ" 7 "Continuous" 0.40 nil)

сделать такие изменения: (create_layer "АР_ЧТО_ТО_ЕЩЕ" 7 nil 0.40 nil)

Судя по коду лиспа - можно, но лучше спросить!

skkkk
В любом случае еще раз благодарю за оказанную помощь

----- добавлено через ~25 мин. -----
doctorraz
LayerDirector посмотрел. Попытался вникнуть, но там не такое очевидное создание слоев и отработки команд.
Моих познаний не хватает для его подгонки под свои нужды.
Он,LayerDirector, очень похож на код от Кулик Алексей aka kpblc, которым я пользовался раньше.
Но в том коде у меня не получилось впихнуть штриховую линию. И хоть есть у Алексея функция подгрузки линий, но не пошла она,не пошла.
Получилось на этом коде №25. Вот я и пользуюсь им.
Может LayerDirector и лучше, но я не знаю и не понимаю ЧЕМ? Поэтому меня этот вопрос и не парит.
Еще раз спасибо за помощь, но пользоваться буду программным вариантом. Что такое ФОРМКОМПЛЕКТ практически никто не знает и не пользуется.
Мой переделаный Монохром канет в лету.
SergAM243 вне форума  
 
Непрочитано 11.04.2020, 04:02
#347
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Вопрос!
Можно ли в строчке:

(create_layer "АР_ЧТО_ТО_ЕЩЕ" 7 "Continuous" 0.40 nil)

сделать такие изменения: (create_layer "АР_ЧТО_ТО_ЕЩЕ" 7 nil 0.40 nil)
Можно. В данном контексте эти две строки равнозначны. В коде прописано, что если тип линий не задан (nil), то использовать "Continuous".


Код:
[Выделить все]
 			(if	linetype ;если задан тип линий в аргументе (3-й аргумент)
				(vl-list* 6 linetype) ; то назначаем слою этот тип линии
				(vl-list* 6 "Continuous")  ; если нет (т.е. nil), то "Continuous"
			)
skkkk вне форума  
 
Непрочитано 11.04.2020, 13:05
#348
SergAM243

инженерю чуть
 
Регистрация: 14.07.2008
Севастополь
Сообщений: 42
<phrase 1=


Цитата:
Сообщение от skkkk Посмотреть сообщение
если тип линий не задан (nil), то использовать "Continuous"
Да, на это я и ссылался.
Просто хотелось понять для чего вместо 3-х символов набрано 12. Вдруг хитрость какая?
SergAM243 вне форума  
 
Непрочитано 11.04.2020, 17:50
#349
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,298
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от SergAM243 Посмотреть сообщение
Что такое ФОРМКОМПЛЕКТ практически никто не знает и не пользуется.
Мой переделаный Монохром канет в лету.
об этом и речь.. любая эффективная технология убивается об "мы так всегда делали"
без административного поджопника ничо не взлетит
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 02.05.2024, 12:10
#350
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Я добавляю новые слои по аналогии для Line и PLine в реактор из поста #25
Слои создаются, но отрезки и линии чертятся текущим слоем.
Код обновлен, причину см. пост #352
Код:
[Выделить все]
 ;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;; Автоматический перенос размеров на слой "размеры" 
;;; и заливки на слой "заливка" 
;;; Просто добавь этот файл в автозагрузку 
(vl-load-com) 
(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if
(setq *OldLayer* (getvar "CLAYER")) 
(vl-cmdf "_layer" "_make" "Размеры" "_color" 144 "" "") ;_Создаем слой размеры и задаем цвет 144 ... 
(vl-cmdf "_layer" "_make" "Штриховка" "_color" 95 "" "") ;_Создаем слой штриховка и задаем цвет 95 
(vl-cmdf "_layer" "_make" "Текст" "_color" 152 "" "")     ;_Создаем слой текст и задаем цвет 152
(vl-cmdf "_layer" "_make" "Таблицы" "_color" 24 "" "")   ;_Создаем слой таблицы и задаем цвет 24
(vl-cmdf "_layer" "_make" "Выноски" "_color" 182 "" "")   ;_Создаем слой выноски и задаем цвет 182
(vl-cmdf "_layer" "_make" "Полилиния" "_color" 6 "" "")   ;_Создаем слой полилиния и задаем цвет 6
(vl-cmdf "_layer" "_make" "Отрезок" "_color" 5 "" "")   ;_Создаем слой отрезок и задаем цвет 5
(setvar "clayer" *OldLayer*) 
(setq *OldLayer* nil) 
;;;;;;По аналогии добавить создание своего слоя 
;;; ... 
;;;;;; 
;;;;;;------------------------------------------------------------- 

(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" "Выноски") 
    )
    ((wcmatch thecommandstart "*PLINE*") ;_Если выполняется команда *PLINE* 
     (setvar "clayer" "Полилиния") 
    )
   ((wcmatch thecommandstart "*LINE*") ;_Если выполняется команда *LINE* 
     (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
      (wcmatch cmd_name "*PLINE")   ;_Если выполняется команда PLINE
      (wcmatch cmd_name "*LINE")   ;_Если выполняется команда LINE
      )
  (progn
    (if *OldLayer* (setvar "clayer" *OldLayer*)) 
    (setq *OldLayer* nil)
    ))
 (princ))

Последний раз редактировалось Ingpro, 02.05.2024 в 13:52.
Ingpro вне форума  
 
Непрочитано 02.05.2024, 12:21
#351
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Ingpro Посмотреть сообщение
((wcmatch thecommandstart "*Line*") ;_Если выполняется команда *Line* 58 (setvar "clayer" "Отрезок")59 )60((wcmatch thecommandstart "*PLine*") ;_Если выполняется команда *PLine* 61 (setvar "clayer" "Полилиния")
а точно в командном реакторе такие названия команд?
Сергей812 вне форума  
 
Непрочитано 02.05.2024, 13:50
#352
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а точно в командном реакторе такие названия команд?
Да нужно записывать PLINE и LINE. Код в посте #350 обновлен и работает...
И ещё одна деталь, сначала создать слой для PLINE потом для LINE, в обратном случае и отрезки и полилинии
чертятся слоем "Отрезок". Не знаю, почему так...
Ingpro вне форума  
 
Непрочитано 02.05.2024, 14:49
#353
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Вариант попроще и ИМХО чуть поустойчивее - слои создаются только когда понадобятся.
Код:
[Выделить все]
 ;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;; Автоматический перенос размеров на слой "размеры" 
;;; и заливки на слой "заливка" 
;;; Просто добавь этот файл в автозагрузку 
(vl-load-com) 
(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 . vlr-cmd-start)
                                         (:vlr-commandended . vlr-cmd-end)
                                         (:vlr-commandcancelled . vlr-cmd-end)
                                         (:vlr-commandfailed . vlr-cmd-end)
                                        )
                  )
  )
)

(defun _kpblc-layer-create-and-set (name prop-list / adoc res current_layer) 
  (setq adoc          (vla-get-activedocument (vlax-get-acad-object))
        current_layer (getvar "clayer")
        res           (vla-add 
                        (vla-get-layers adoc)
                        name
                      )
  )
  (foreach prop prop-list 
    (vl-catch-all-apply 
      (function 
        (lambda () 
          (vlax-put-property res (car prop) (cdr prop))
        )
      )
    )
  )
  (vla-put-activelayer adoc res)
  current_layer
)

(defun vlr-cmd-start (reactor cmd) 
  (setq cmd (strcase (car cmd)))
  (setq *old-layer* (cond 
                      ((wcmatch cmd "DIM*")
                       (_kpblc-layer-create-and-set "Размеры" '(("color" . 144)))
                      )
                      ((wcmatch cmd "*HATCH*")
                       (_kpblc-layer-create-and-set "Штриховка" '(("color" . 95)))
                      )
                      ((wcmatch cmd "*TEXT")
                       (_kpblc-layer-create-and-set "Текст" '(("color" . 152)))
                      )
                      ((wcmatch cmd "*TABLE")
                       (_kpblc-layer-create-and-set "Таблицы" '(("color" . 24)))
                      )
                      ((wcmatch cmd "*LEADER")
                       (_kpblc-layer-create-and-set "Выноски" '(("color" . 182)))
                      )
                      ((wcmatch cmd "*PLINE")
                       (_kpblc-layer-create-and-set "Полилиния" '(("color" . 6)))
                      )
                      ((wcmatch cmd "LINE")
                       (_kpblc-layer-create-and-set "Отрезок" '(("color" . 5)))
                      )
                    )
  )
)

(defun vlr-cmd-end (reactor cmd) 
  (if *old-layer* 
    (progn 
      (setvar "clayer" *old-layer*)
      (setq *old-layer* nil)
    )
  )
)
----- добавлено через ~2 мин. -----
Правда, dimlayer перекроет этот реактор.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.05.2024, 15:54
#354
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Правда, dimlayer перекроет этот реактор.
Это как? Какой dimlayer?
Ingpro вне форума  
 
Непрочитано 02.05.2024, 15:58
#355
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Системная переменная https://help.autodesk.com/view/ACD/2...4-93E7623BEB6B
Достаточно мерзопакостная штука ИМХО
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.05.2024, 16:08
#356
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Системная переменная https://help.autodesk.com/view/ACD/2...4-93E7623BEB6B
Достаточно мерзопакостная штука ИМХО
Команда: DIMLAYER Неизвестная команда "DIMLAYER" в AutoCAD 2015 rus???
Ingpro вне форума  
 
Непрочитано 02.05.2024, 16:22
#357
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Цитата:
Сообщение от Ingpro Посмотреть сообщение
Команда: DIMLAYER Неизвестная команда "DIMLAYER" в AutoCAD 2015 rus???
Размещение размеров на отдельном слое
В AutoCAD 2016 появилась возможность автоматически размещать все наносимые размеры на отдельном слое, при чем слой может быть любым, который задаст пользователь.
Переменная DIMLAYER определяет, на каком слое размещать все вновь наносимые размеры. Просто введите имя слоя и все, если требуется размещение на текущем слое, то введите . (точку).
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon на форуме  
 
Непрочитано 02.05.2024, 17:43
#358
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Системная переменная https://help.autodesk.com/view/ACD/2...4-93E7623BEB6B
Достаточно мерзопакостная штука ИМХО
а если ее сбросить в командном реакторе?
Сергей812 вне форума  
 
Непрочитано 02.05.2024, 19:21
#359
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Можно, наверное. Но а) мне лениво; б) для Ingpro будет неплохой тренировкой
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.05.2024, 19:39
#360
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
для Ingpro будет неплохой тренировкой
ну если он сейчас на
Цитата:
Сообщение от Ingpro Посмотреть сообщение
AutoCAD 2015 rus
то не будет)

Ну и ничто не мешает в более свежих версиях акада занести DimLayer в монитор системных переменных.
Сергей812 вне форума  
 
Непрочитано 02.05.2024, 19:47
#361
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Можно, наверное. Но а) мне лениво; б) для Ingpro будет неплохой тренировкой
Т.е. я в 2015 могу не тренироваться...
Ingpro вне форума  
 
Непрочитано 02.05.2024, 20:10
#362
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Ну согласен, в глобальную переменную можно будет много всякого напихать Заодно и поиграться с subst / cons / append
Offtop: Господи, как же в лиспе под акад все просто по сравнению с шарпом!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.05.2024, 21:39
#363
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


Ingpro,
можно просто отслеживать последний созданный командно примитив и переназначать ему слой без всяких предварительных слоевых фигли-мигли)
Код:
[Выделить все]
 
;****************************************************************************************************************

(if (/= 'vlr-command-reactor  (type command_ended_reactor))
	(setq command_ended_reactor (vlr-command-reactor nil '((:vlr-commandended . command_ended))))
)

;****************************************************************************************************************

(defun command_ended (reactor_object parameter_list / dim_layer dim_dxf)
	(setq dim_Layer "Dimension")
	(if (wcmatch (cdr (assoc 0 (setq dim_dxf (entget (entlast))))) "*DIMENSION*")
			(entmod (subst (cons 8 dim_Layer) (assoc 8 dim_dxf) dim_dxf))
	)
)

;****************************************************************************************************************
__________________
K Lisp
koMon вне форума  
 
Непрочитано 03.05.2024, 09:34
#364
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от koMon Посмотреть сообщение
можно просто отслеживать последний созданный командно примитив и переназначать ему слой без всяких предварительных слоевых фигли-мигли)
По аналогии можно добавить и для линий, штриховок и т.д.?

Последний раз редактировалось Ingpro, 03.05.2024 в 15:22.
Ingpro вне форума  
 
Непрочитано 03.05.2024, 13:01
#365
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,298
Отправить сообщение для doctorraz с помощью Skype™


вдруг кто то не видел
https://lee-mac.com/layerdirector.html
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 03.05.2024, 14:59
#366
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от doctorraz Посмотреть сообщение
вдруг кто то не видел
https://lee-mac.com/layerdirector.html
Тоже хороший реактор, но при использовании двух реакторов lee-mac, один глушит другой, т.е. если активен layerdirector, то MTEditReactorV1-1 нужно запускать принудительно (и наоборот), поэтому пришлось отказаться в пользу MTEditReactorV1-1, а реактор слоёв из #25 дружит с MTEditReactorV1-1.
Ingpro вне форума  
 
Непрочитано 03.05.2024, 19:54
#367
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Ingpro Посмотреть сообщение
MTEditReactorV1-1 нужно запускать принудительно (и наоборот), поэтому пришлось отказаться в пользу MTEditReactorV1-1
а хоткей Ctrl+А чем не подходит?
Сергей812 вне форума  
 
Непрочитано 03.05.2024, 19:56
#368
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а хоткей Ctrl+А чем не подходит?
Это к чему?
Из справки:
Ctrl+A Выбор всех объектов на чертеже, которые не являются заблокированными или замороженными
Я.т.д. реакторы должны работать без всяких дополнительных манипуляций...

Последний раз редактировалось Ingpro, 03.05.2024 в 20:04.
Ingpro вне форума  
 
Непрочитано 03.05.2024, 20:04
#369
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Цитата:
Сообщение от Ingpro Посмотреть сообщение
Я.т.д. реакторы должны работать без всяких дополнительных манипуляций...
Ну, если ты их не сносишь все и чохом - то да, должны.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.05.2024, 20:17
#370
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Ingpro Посмотреть сообщение
Это к чему?
ну читаю описание к MTEditReactorV1-1: автоматическое выделение всего содержимого мультитекста двойным кликом, да и в описании автор пишет - что пытался изначально через Ctrl+A сделать, но что-то не срослось. Т.е. этот остронеобходимый реактор заменяет движение руки с "вилкой" пальцев на клавиши Ctrl+A двойным кликом мышью. Может еще на Esc реактор навесить, например?)
Сергей812 вне форума  
 
Непрочитано 05.05.2024, 15:17
#371
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


Цитата:
Сообщение от Ingpro Посмотреть сообщение
По аналогии можно добавить и для линий, штриховок и т.д.?
почему нет?
__________________
K Lisp
koMon вне форума  
 
Непрочитано 13.05.2024, 11:58
#372
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Код:
[Выделить все]
 ;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку 
(vl-load-com) 
(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if
(setq *OldLayer* (getvar "CLAYER")) 
(vl-cmdf "_layer" "_make" "Размеры" "_color" 151 "" "") ;_Создаем слой размеры и задаем цвет 151 ... 
(vl-cmdf "_layer" "_make" "Штриховка" "_color" 5 "" "") ;_Создаем слой штриховка и задаем цвет 5 
(vl-cmdf "_layer" "_make" "Текст" "_color" 6 "" "")     ;_Создаем слой текст и задаем цвет 6
(vl-cmdf "_layer" "_make" "Таблицы" "_color" 6 "" "")   ;_Создаем слой таблицы и задаем цвет 6
(vl-cmdf "_layer" "_make" "Выноски" "_color" 6 "" "")   ;_Создаем слой выноски и задаем цвет 6
(setvar "clayer" *OldLayer*) 
(setq *OldLayer* nil) 
;;;;;;По аналогии добавить создание своего слоя 
;;; ... 
;;;;;; 
;;;;;;------------------------------------------------------------- 

(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))
При использовании этого кода в командной строке появляется запись при каждом открытии чертежа:
_layer _make Размеры _color 151 _layer _make Штриховка _color 5 _layer _make Текст _color 6 _layer _make Таблицы _color 6 _layer _make Выноски _color 6

А это можно как-то отключить?
Ingpro вне форума  
 
Непрочитано 13.05.2024, 12:02
#373
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Можно. Либо поигравшись с переменными типа cmdecho / menuecho / nomutt, либо переделав создание слоев на некомандные методы.
Мне вот интересно, а никто не пробовал сначала в чистый файл загрузить лисп, потом выполнить очистку файла - тот же _.purge, и после этого уже начать ставить размеры? Я не просто так писал код в #353
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.05.2024, 12:21
#374
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


ну если некоторые так любят чтобы все прямо автоматически-автоматически работало через те же реакторы, но при этом собирают зоопарк из чужих кодов - то вообще не лишним каждый раз проверить слой - включен ли, не заблокирован и т.д, имхо)
Сергей812 вне форума  
 
Непрочитано 13.05.2024, 12:30
#375
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Мне вот интересно, а никто не пробовал сначала в чистый файл загрузить лисп, потом выполнить очистку файла - тот же _.purge, и после этого уже начать ставить размеры? Я не просто так писал код в #353
По-моему, одинаково работают коды из #25 и #353? Слои создаются при вводе команд. Или я чего-то не понимаю?
Ingpro вне форума  
 
Непрочитано 13.05.2024, 12:33
#376
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Цитата:
Сообщение от Ingpro Посмотреть сообщение
По-моему, одинаково работают коды из #25 и #353? Слои создаются при вводе команд. Или я чего-то не понимаю?
Ну реально попробуй провернуть ту последовательность, которую я предложил. Только используй свои коды.

----- добавлено через 22 сек. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну если некоторые так любят чтобы все прямо автоматически-автоматически работало через те же реакторы, но при этом собирают зоопарк из чужих кодов - то вообще не лишним каждый раз проверить слой - включен ли, не заблокирован и т.д, имхо)
М-да, про эти тонкости я как бы не сильно подумал, грешен...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.05.2024, 13:41
#377
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
сначала в чистый файл загрузить лисп, потом выполнить очистку файла - тот же _.purge, и после этого уже начать ставить размеры
Реально так и делаю: открыть-DWG-PURGE-команда Отрезок-слой Отрезок и т.д.
В командной строке при открытии файла слои не перечисляются для кода #353... Это плюс, спасибо, Алексей!

Последний раз редактировалось Ingpro, 13.05.2024 в 13:56.
Ingpro вне форума  
 
Непрочитано 13.05.2024, 13:55
#378
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Ты меня не услышал. Делай прямо по шагам:
  1. Открой новый пустой файл
  2. Удали вообще все, включая пространства листов, установи текущий слой "0"
  3. Загрузи свой код
  4. Выполни очистку файла
  5. Начни рисовать отрезок
  6. Проверь, на каком слое будет отрезок
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.05.2024, 14:05
#379
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ты меня не услышал. Делай прямо по шагам:
Делаю... Результат такой же, как #377... А на каком слое он должен быть, если запущен реактор?..

Последний раз редактировалось Ingpro, 19.05.2024 в 21:51.
Ingpro вне форума  
 
Непрочитано 13.05.2024, 16:03
#380
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


А в каком слое он должен быть, если слоя "Отрезок" в файле нет? Я тебе третий раз повторяю - выполни очистку файла прежде чем вызывать любую из обрабатываемых команд!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.05.2024, 16:23
#381
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я тебе третий раз повторяю - выполни очистку файла
Делаю все так (3-й раз!), очищаю, но в новом файле итак один слой 0, объясните что должно, по-вашему, произойти???
Ingpro вне форума  
 
Непрочитано 13.05.2024, 16:27
#382
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


При подгруженном реакторе и попытке вызова команды dim* получишь ошибку. Слой "Размеры" не создастся сам по себе. Проверял на ACAD2013 Eng, 2021 Eng
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.05.2024, 16:39
#383
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 756


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
При подгруженном реакторе и попытке вызова команды dim* получишь ошибку. Слой "Размеры" не создастся сам по себе. Проверял на ACAD2013, 2021
У меня ACAD 2015, код #353 четко работает, создает слой Размер, после команды Размер...

Последний раз редактировалось Ingpro, 19.05.2024 в 21:50.
Ingpro вне форума  
 
Непрочитано 13.05.2024, 16:58
#384
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Кхм... Последний код был от тебя, и вопрос был по нему. Твоей правки в 13:56 я не увидел.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Автоматический перенос размеров на слой размеры. Break макро