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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Переключение слоёв в AutoCAD с помощью клавиш.

Переключение слоёв в AutoCAD с помощью клавиш.

Ответ
Поиск в этой теме
Непрочитано 17.12.2007, 00:07
Переключение слоёв в AutoCAD с помощью клавиш.
Pavel Tesko
 
Машиностроение
 
Tallinn
Регистрация: 27.11.2007
Сообщений: 30

В AutoCAD я обычно использую в среднем 8 слоёв. Уважаемые форумчани, подскажите пожалуйста есть ли возможность в AutoCAD, выбирать слой не курсором мышки, а с помощью клавиатуры. Например следующим образом: нажимается какая-то базовая или сочетания клавиш запускающая команду выбрать слой, а затем выбирается слой посредствам ввода порядкового номера присвоенного индивидуально каждому из используемых слоёв. Возможно ли это?
Просмотров: 63668
 
Непрочитано 04.09.2014, 10:49
#81
Paranoik27


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



Спасибо.
Paranoik27 вне форума  
 
Непрочитано 05.09.2014, 00:30
#82
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Paranoik27 Посмотреть сообщение
Не плохо бы переключать слои по типу "Ctrl+Tad".
Цитата:
Сообщение от Paranoik27 Посмотреть сообщение
Так вообще в идеале было бы)))
Это сделать можно, даже довольно легко. Надо только уточнить пожелания пользователей. Как надо? Чтоб одно сочетание меняло слои по списку вниз, а другое (может, то же +Shift) - вверх? Или первое нажатие вниз, а второе - обратно вверх? В общем, хотелось бы как можно более полного описания желаемого процесса с максимальным продумыванием всех возможных деталей, неявных на первый взгляд. Ну например, что делать, если слой, на который мы переключились отключен или заморожен? Вывести предупреждение? Предложить разблокировать? Ну и так далее... Думаю, это будет две команды, одна переключит на следующий по списку слой, вторая - на предыдущий. На каждую из них вешаем горячие клавиши - и всего делов. Не уверен, можно ли переназначить в Автокаде именно Ctrl+Tab (да и надо ли?) - нет возможности сейчас проверить, но любое другое из доступных сочетаний - не вопрос.
Правда сделать я это смогу только на лиспе, поэтому нужно будет попросить модераторов перенести тему в Программирование, тем более, предложенные решения - уже на программной основе.
skkkk вне форума  
 
Непрочитано 05.09.2014, 07:12
#83
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Цитата:
Сообщение от skkkk Посмотреть сообщение
Чтоб одно сочетание меняло слои по списку вниз, а другое (может, то же +Shift) - вверх
А если слоёв сотня, и перебирать их по одному нажимая клавишу. Предложение просто супер. Открыл меннежер слоёв и выбрал тот что нужно.
А функция _Laymcur установить слой по объекту совсем не катит, посади её на клавишу если так хочется.
Valery Brelovsky вне форума  
 
Непрочитано 05.09.2014, 09:34
#84
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Цитата:
Сообщение от Valery Brelovsky Посмотреть сообщение
А если слоёв сотня, и перебирать их по одному нажимая клавишу. Предложение просто супер. Открыл меннежер слоёв и выбрал тот что нужно.
А если слоев сотня то клавишами можно и не пользоваться (думаю ругать ни кто не будет).
Цитата:
Сообщение от Valery Brelovsky Посмотреть сообщение
А функция _Laymcur установить слой по объекту совсем не катит, посади её на клавишу если так хочется.
А если в слое еще нет объектов?
Да и вообще, жалко что ли?
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн
Jonas вне форума  
 
Непрочитано 05.09.2014, 10:20
#85
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Цитата:
Сообщение от Jonas Посмотреть сообщение
А если слоев сотня то клавишами можно и не пользоваться
А смысл тогда всей затеии?

Цитата:
Сообщение от Jonas Посмотреть сообщение
А если в слое еще нет объектов?
Тогда клавишей и переключать нечего.

Вообще если смыл вей работы что бы переключать слоя то есть смыл и можно даже зациклить, утром пришёл на работу включил вером уходя выключил, а можно и не выключать......
Но вообще за включением и переключением должено стоять последующее действием. Исходя из этого нужно и формировать решение.
К примеру макрос для вставки блока содаёт слой активизирует его и блок вставляется на соответсвующий слой.

У автора правда восемь слоёв,

Цитата:
Сообщение от Pavel Tesko Посмотреть сообщение
В AutoCAD я обычно использую в среднем 8 слоёв.
Но при восьми слоях заморачиваться с клавишей, ну сделалбы восемь кнопок нажал и установился нужный слой.

^C^C_-layer New 1; ^C^C_-layer Color 11 1;^C^C_-layer Set 1;
Примерно так.
Valery Brelovsky вне форума  
 
Непрочитано 05.09.2014, 12:51
#86
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Я что-то не понял, прогу-то писать? Где ТЗ?
skkkk вне форума  
 
Непрочитано 05.09.2014, 14:16
#87
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Конечно писать.
Требования простые:
- переключение вверх и вниз,
- на замороженное, изолированное, блокированное и пр. состояние слоев не обращать внимание.
Заранее спасибо.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн
Jonas вне форума  
 
Непрочитано 05.09.2014, 14:45
#88
Кулик Алексей aka kpblc
Moderator

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


Ну-ну, попробуйте переключиться на замороженный слой
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.09.2014, 15:45
#89
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ну-ну, попробуйте переключиться на замороженный слой
Да и бог с ним, пойдем далее (всего лишь лишний щелчек).
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн
Jonas вне форума  
 
Непрочитано 06.09.2014, 01:01
#90
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Jonas Посмотреть сообщение
на замороженное, изолированное, блокированное и пр. состояние слоев не обращать внимание
Это как понять? Не обращать внимания, что слой отключен, заблокирован, и все равно активировать его, или не обращать внимания и пропускать, активируя следующий включенный и разблокированный?
skkkk вне форума  
 
Непрочитано 08.09.2014, 04:29
#91
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Цитата:
Сообщение от skkkk Посмотреть сообщение
не обращать внимания и пропускать, активируя следующий включенный и разблокированный
Думаю что да.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн
Jonas вне форума  
 
Непрочитано 08.09.2014, 13:44
#92
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Когда уже большую часть кода написал, нашел вот эту тему...
Думаю, ладно, есть решение и есть, я все равно, в академических целях за это взялся, даже интересно было посмотреть, как решил эту задачу Алексей Кулик в #7 (после объединения тем #52), но вот пост #9 (ныне #54) меня удивил.
Jonas, как так-то?
Раз уж написал, выложу его тут:
Код:
[Выделить все]
 (defun lay-down () (lay-switch T))
(defun lay-up () (lay-switch nil))
;;; Функция переключает слои в активном чертеже.
;;; Если аргумент flag задан, переключает на следующий слой, если нет - на предыдущий. 
;;; Сортировка слоев в диспетчере свойств не учитывается, переключение идет в алфавитном порядке.
;;; Замороженные, блокированные и отключенные слои, а также слой Defpoints пропускаются.
;;; Не учитываются фильтры слоев.
(defun lay-switch (flag / Table adoc c-lay lay-lst i next-lay item)
	(defun Table (s / d r)
		(while (setq d (tblnext s (null d)))
			(setq r (append r (list (cdr (assoc 2 d)))))
		)
	) ;end of defun (Table)
	(setq adoc (vla-get-activedocument (vlax-get-acad-object)) ;;; Текущий документ.
		  c-lay (getvar "CLAYER") ;;; Текущий слой (STR).
		  lay-lst ;;; Список слоев чертежа (LIST of STR): 
				(if flag ;;; если аргумент flag (SYM) задан,
				   (acad_strlsort (table "LAYER")) ;;; то отсортированный по алфавиту от А до Я,
				   (reverse (acad_strlsort (table "LAYER"))) ;;; или от Я до А, если nil. 
				) ;end of if
		  lay-lst (vl-remove-if '(lambda (x) (wcmatch x "*|*")) lay-lst) ;;; Убираем из списка слои, зависящие от внешних ссылок.
		  i (vl-position c-lay lay-lst) ;;; Номер слоя в списке (INT).
		  next-lay ;;; Следующий по списку слой
					(if (= c-lay (last lay-lst)) ;;; если он последний в списке, 
						(nth (setq i 0) lay-lst) ;;; то начинаем с начала списка,
						(nth (setq i (1+ i)) lay-lst) ;;; если нет, продолжаем остаток списка.
					) ;end of if 
		  item (vla-item (vla-get-Layers adoc) next-lay) ;;; Указатель на VLA-объект следующего слоя.
	) ;end of setq
	(while  (or (= (vla-get-Freeze item) :vlax-true) ;;; Если следующий слой ИЛИ заморожен,
				(= (vla-get-Lock item) :vlax-true)   ;;; ИЛИ заблокирован,
				(= (vla-get-LayerOn item) :vlax-false) ;;; ИЛИ отключен,
				(= (vla-get-Name item) "Defpoints") ;;; ИЛИ это слой "Defpoints",
			) ;end of or
		(princ
			(strcat "\nПропущен "  ;;; то сообщаем об этом в командной строке
					(if (= (vla-get-Freeze item) :vlax-true)
						"ЗАМОРОЖЕННЫЙ "
						""
					)
					(if (= (vla-get-Lock item) :vlax-true)
						"ЗАБЛОКИРОВАННЫЙ "
						""
					)
					(if (= (vla-get-LayerOn item) :vlax-false)
						"ОТКЛЮЧЕННЫЙ "
						""
					)
					"слой \"" next-lay "\". "
			) ;end of strcat
		) ;end of princ
		(setq next-lay ;;; и проверяем следующие, до тех пор, пока какой-то из них не окажется И размороженным, И разблокированным, И включенным.
					(if (= next-lay (last lay-lst)) ;;; если он последний в списке, 
						(nth (setq i 0) lay-lst) ;;; то начинаем с начала списка,
						(nth (setq i (1+ i)) lay-lst) ;;; если нет, продолжаем остаток списка.
					) ;end of if 
			  item (vla-item (vla-get-Layers adoc) next-lay)
		) ;end of setq
	) ;end of while
	(if (= next-lay c-lay) ;;; Если вычисленнвй слой совпадает с текущим, т.е слой всего один, или все остальные слои заморожены, отключены или заблокированы,
		(princ "\nНет других включенных, размороженных и разблокированных слоев.") ;;; сообщаем об этом и завершаем работу программы.
		(progn ;;; Если не совпадает,
			(setvar "CLAYER" next-lay) ;;; то назначаем активным вычисленный слой,
			(princ  (strcat "\nАктивирован слой \"" next-lay "\". "))  ;;; посылаем отчет в командную строку.
		) ;end of progn
	) ;end of if
	(princ) ;;; "Тихо" выходим.
);end of defun (lay-switch)

Согласен с Алексеем в его комментарии к своему коду:
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
P.P.S. Код не учитывает фильтры слоев, так что в качестве рабочего использоваться не может.
От себя добавлю, что код также не учитывает сортировку слоев в диспетчере свойств слоев. Если в диспетчере слои отсортированы по имени, то переключение будет идти по порядку, если же они отсортированы как-то иначе (по цвету, например), то переключение будет происходить хаотично. Напомню, что на панели Слои выпадающий список слоев отсортирован по алфавиту, т.е. в нем порядок переключения будет правильным. Если кто подскажет, как выяснить программно способ сортировки слоев в диспетчере свойств слоев, то смогу подправить.

Последний раз редактировалось skkkk, 09.09.2014 в 10:42. Причина: Добавил обработку слоя "Defpoints"
skkkk вне форума  
 
Непрочитано 09.09.2014, 05:08
#93
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Цитата:
Сообщение от skkkk Посмотреть сообщение
но вот пост #9 меня удивил.
Jonas, как так-то?
Да, было дело. В то время работал главным и занимался только моделированием ну и как то не прижилось, вот и забыл.
Последние годы делаю всё, от А до Я, поэтому востребовано а про код Кулик Алексей aka kpblc забыл.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн
Jonas вне форума  
 
Непрочитано 09.09.2014, 05:42
#94
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Ничего страшного. Зато я позанимался . Было интересно. Скажу больше: я готов, с разрешения Алексея, и при подсказках и помощи других форумчан, попробовать разобраться и с фильтрами слоев, да и вообще, развить данную программку, исправить все найденные недоработки и ошибки. Сам я ее себе тоже на вооружение взял, повесил на мышку и переключение слоев. Удобно, если заблокировать не используемые в данный момент слои и переключаться между двумя-тремя используемыми. Гонял весь день вчера, работает четко.
Возникла мысль, может, стоит добавить обработку предварительно выбранных объектов? То есть, если объекты выбраны, то они будут переноситься на следующий/предыдущий слой? Жду предложений.

Уважаемые модераторы, перенесите, пожалуйста тему в раздел "Программирование".
skkkk вне форума  
 
Непрочитано 09.09.2014, 08:47
#95
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Спасибо, работает нормально.
Цитата:
Сообщение от skkkk Посмотреть сообщение
То есть, если объекты выбраны, то они будут переноситься на следующий/предыдущий слой?
На следующий может и не нужно а вот если при выбранных объектах можно листать слои и остановившись на нужном подтвердить перенос, было бы актуально.
Кстати, я тоже поставил на кнопку грызуна шифт+N - следующий а контр+кнопка (шифт+N) - назад.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн
Jonas вне форума  
 
Непрочитано 09.09.2014, 08:53
#96
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
я готов, с разрешения Алексея
Не понял, а я-то тут каким боком?

----- добавлено через ~11 мин. -----
Объединены три темы по переключению слоев с помощью клавиш. Тема перенесена из "AutoCAD" в "Программирование"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.09.2014, 12:04
#97
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Хочу еще напомнить, что когда-то была востребована ф-ция отключения/включения слоев по фильтру layer-filters-status-change

Цитата:
Сообщение от skkkk Посмотреть сообщение
и при подсказках и помощи других форумчан, попробовать разобраться и с фильтрами слоев
Парочку ссылок
Make a layer filter... yes i said MAKE
Exporter/importer des filtres de calque
Can I create frequently used layer filters in LISP?
Я когда-то начинал разбираться с фильтрами слоев. Даже написал что-то наподобие библиотеки. По памяти - по моему не получилось из лиспа устанавливать текущим тот или иной фильтр. Могу ошибаться. Библиотека во вложении
Вложения
Тип файла: lsp layfilter-VVA.LSP (32.8 Кб, 42 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 09.09.2014, 12:12
#98
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Не понял, а я-то тут каким боком?
Как это?
Во-первых, я могу вдруг остро зануждаться в
Цитата:
Сообщение от skkkk Посмотреть сообщение
подсказках и помощи
а во-вторых, ты ж, как-никак первоотец идеи и ее воплощения, - за тобой и право приоритетного голоса.
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Объединены три темы по переключению слоев с помощью клавиш. Тема перенесена из "AutoCAD" в "Программирование"
Вот это правильно, спасибо, Алексей. Большое спасибо!
Цитата:
Сообщение от Jonas Посмотреть сообщение
листать слои и остановившись на нужном подтвердить перенос
А каким образом подтвердить, если у нас команды (да и функция) активируют слой и завершаются? После каждого переключения выдавать запрос "Да/Нет"? Или через один? Думаю, это может лишить смысла всю затею.
Я предлагаю пойти по Автокадовскому принципу работы со слоями: если надо переключить текущий слой, объекты должны быть НЕ выделенными, а если нужно назначить объектам свойство "Слой", они должны быть ПРЕДВАРИТЕЛЬНО выделены. Выделение после сбрасывается Ecs, либо объекты подвергаются действию следующей команды. Так и надо: пока объекты выделены, мы по кругу меняем им слой - вверх/вниз по списку, и смотрим в ком.строку, где все оглашается; затем нажали Esc - и уже меняем по кругу активный слой. Максимум, можно только в начале спросить что-то вроде: "Сбросить выделение [Да/Нет]". Я так думаю.
skkkk вне форума  
 
Непрочитано 09.09.2014, 12:15
#99
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Наверно возможно. Пишите, будем пробовать.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн
Jonas вне форума  
 
Непрочитано 07.12.2017, 08:41
#100
Gefest1


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


Прочитав тему я так понял, что способ не придумали?
У меня сейчас такое ТЗ для программы:
-переключение слоёв должно происходить внутри действующего фильтра слоёв.
-команда задается сочетанием клавиш на клавиатуре
-выбор слоя осуществляется колесом мышки (либо, по желанию пользователя, по началу названия слоя набираемого с клавы), название слоя отображается возле курсора
-подтверждение выбора слоя осуществляется по нажатию ЛКМ (либо ПКМ, либо колесика)
-после этого выбранный слой становится текущим, а если был выбран объект - то объект переносится на выбранный слой.
По моему, получится удобно (ели фильтр настроен грамотно)
Если слои назвать например 1,2,3,.. то получаем результат, который хотел ТС.
Получится такое сделать?
Gefest1 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Переключение слоёв в AutoCAD с помощью клавиш.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
Работа со старыми чертежами с помощью AutoCAD и Photoshop Shoorup AutoCAD 9 10.05.2007 23:41
Комбинации клавиш для команд в AutoCAD 2006 Artiznov AutoCAD 3 03.03.2006 15:23
AUTOCAD 2006 Aragorn AutoCAD 14 01.04.2005 00:55
Что нового в AutoCAD 2005 ilka_t AutoCAD 40 19.05.2004 16:48