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

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

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

Ответ
Поиск в этой теме
Непрочитано 01.03.2005, 12:58
Автоматический перенос размеров на слой размеры. 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.
Просмотров: 171281
 
Непрочитано 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 Мб, 219 просмотров)
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
С.-Петербург
Сообщений: 39,787


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

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,535
<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
С.-Петербург
Сообщений: 39,787


Цитата:
Сообщение от 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,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от 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,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


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,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


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,535
<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,702
Отправить сообщение для 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,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от 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,702
Отправить сообщение для Do$ с помощью Skype™


Люди пользуются, людям нравится - так что ведро подождет
Другое дело, что при черчении с грамотно настроеной палитры, надобность в такой программе отпадает сама собой. Но тут уж кому как нравится...
Цитата:
Для решения этой проблемы (размещения разных объектов на соответствующих слоях) следует обрабатывать событие ObjectAppended класса Database (не знаю, как они именуются в терминах лиспа).
При работе с реакторами из лиспа невозможно в функции обработки события модифицировать объект, вызвавший событие. Поэтому приходится выкручиваться.
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Автоматический перенос размеров на слой размеры. Break макро

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск