|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Переключение слоёв в AutoCAD с помощью клавиш.
Машиностроение
Tallinn
Регистрация: 27.11.2007
Сообщений: 30
|
||
Просмотров: 67029
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
(defun c:l1()
(command "_.-layer" "_m" "Слой который 1" "") ) Ну и тому подобное засовывается в автозагрузку ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Один из возможных вариантов: http://www.cadtutor.net/forum/showthread.php?t=18428
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
_-layer <Enter> _set <enter> ИмяСлоя <enter>
Или писать программу, выполняющую автоматический переход на нужный слой и возвращающая обратно настройки (может, хватит и макроса).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 02.10.2008
Сообщений: 198
|
Ммм..так бы и сказали, что проще мышкой
![]() З.ы. хотя, создал кнопку на первые 2 команды, остаётся только понять как назначить этой кнопке корячую клавишу в 2008 каде (чего ищу уже давно). Потом тока название слоя вводить. Спасибо Последний раз редактировалось rain_day, 02.10.2008 в 08:56. |
|||
![]() |
|
||||
Регистрация: 02.10.2008
Сообщений: 198
|
Затянуло меня совсем в эту тему, начал по мере возможности изучать и применять макросы. Но не могу справится с такой задачей:
^C^C_-layer;_set;основные;^C^C Этот у меня переключает слой на "основные" сочитанием клавиш. Но как написать такой макрос, который не просто переключался на этот слой, но и в режиме редактирования (при выбранном объекте) перекинет этот выбранный объект на заданный в макросе слой (а не скинет выделение и переключится на слой). В общем, сделать хочу аналог действия, когда мышкой выбираю слой из выпадающего списка. Подскажите пожалуйста |
|||
![]() |
|
||||
Инженер-строитель Регистрация: 15.08.2007
Киров
Сообщений: 2,204
|
Цитата:
Код:
|
|||
![]() |
|
||||
Регистрация: 02.10.2008
Сообщений: 198
|
Неизвестная команда change.
Действительно, там много различных команд, но какую из них применить в макрос и в каком порядке, с каким оператором - это проблема. _laycur, возможно? Макрос ^C^C_-layer;_set;основные;^C^C меняет текущий слой, и вот если бы дальше продлить каманду типа ^C^C_-layer;_set;основные;_laycur;^C^C. Но он _laycur как продолжение команды _-layer воспринимает и не понимает чего от него хотят. А если ^C^C_-layer;_set;основные;;_laycur;^C^C, то после смены текущего слоя он скидывает выделение с обьекта и пользуется команда _laycur, отдельно, и т.к. выделенных объектов уже нет, ничего не происходит... бррр! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
laycur -> Layer Current
Попробуй заменить ^C^C_-layer;_set;основные;_laycur;^C^C на Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-строитель Регистрация: 15.08.2007
Киров
Сообщений: 2,204
|
Offtop: Да уж, было время - школа, девки, Автокад R12...
![]() Добавлено: Вот так день начался. Чего, с утра пораньше все решили надо мной поприкалываться? acid, мы с тобой вообще на втором курсе в университете рисовали какие-то фрагменты плана города ещё в 10-м Автокаде Последний раз редактировалось Makswell, 10.10.2008 в 08:56. |
|||
![]() |
|
||||
Регистрация: 02.10.2008
Сообщений: 198
|
Цитата:
Автокад 2008 |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
rain_day, у тебя явно что-то "не то" с AutoCAD'ом. То он не понимает _.change, то _p...
Кстати, а точно был предыдущий выбор, перед запуском макроса?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 02.10.2008
Сообщений: 198
|
о команде _.change речи не шло. Но действительно, теперь и без точки _change;_P;_LA;основные;; успешно переносит выделенный объект в заданный слой. Но зато без выбранного объекта ничего не переключает
![]() Последний раз редактировалось rain_day, 10.10.2008 в 09:43. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Ага, только я в свой код пытался подставить в качестве _p _Previous (предыдущий набор).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 02.10.2008
Сообщений: 198
|
_change;_P;_LA;основные;;^C^C_-layer;_set;основные;^C^C
Не даёт результатов, что для МЕНЯ совершенно не понятно. Вроде всё логично выглядит, после первой части (попытки перенести объект в заданный слой) два энтера, потом вообще два эскейпа, а он всё равно без выбранного объекта зависает где-то тут _change;_P;_LA;основные;; и просит выбрать объект. При чем если в командной строке проделывать всё в той же последовательности, всё получается. вот: Команда: _change Выберите объекты: _P найдено: 1 Выберите объекты: _LA найдено: 1, всего: 2 Выберите объекты: основные *Неверный выбор* Требуется точка или Рамка/Последний/Секрамка/БОКС/Все/Линия/РМн-угол/СМн-угол/Группа/Добавить/Исключ ить/Несколько/Текущий/Отменить/Авто/Единственный Ну и чего ему надо еще? Дальше по макросу два ентера и ескейпа, почему остановился? Последний раз редактировалось rain_day, 10.10.2008 в 14:34. |
|||
![]() |
|
||||
Регистрация: 02.10.2008
Сообщений: 198
|
При чем _p здесь работает именно как сказал крыс. Выбирает предыдущий выбор, никакие это не пропертис. НО только для случая без выбранного объекта. Хотя почему тогда _p является опцией _change? Нет команды которая бы просто выбрала предыдуйщий выбранный объект?
Последний раз редактировалось rain_day, 10.10.2008 в 14:37. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Потому что
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 02.10.2008
Сообщений: 198
|
Всмысле вместо "_change" "_Select"? Долго ломал голову что за команда \_change
![]() Уважаемые, а где можно подглядеть такую занимательную информацию, из которой можно было бы познакомиться с такими простыми командами как _change и их опциями? Я вот в подпись крыса смотрю, "библиотека DwgRuLispLib" эт пока сильно для меня. Мне бы просто какой-нибудь справочник что ли. Представляю его себе в виде дерева такого _change - бла бла бла.... _p - пропертис, бла бла бла _la - слои бла бла бла Ибо даже познакомившись с командой (случайно, интуитивно, из форума), не всегда кад подсказывает её опции, как например этот _change. В отличии, скажем, от _-layer (тут уж он в ком. строке всё расписывает) Последний раз редактировалось rain_day, 10.10.2008 в 20:25. |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Change устаревшая команда, ее помнят старожилы. Как и Leader, Attedit, а теперь и Qleader (основы ведь рубят!)). Но раз узнал - из форума (на то он и существует) то расследуй. В командную строку заглядывал? Не говоря о Help. Там есть вся инфа про команду.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
rain_day, в добавление к #27: посмотри и установи на время исследования системные переменные cmdecho -> 1; nomutt -> 0. Весьма пользительно
![]() P.S. ИМХО, как всегда ![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Кого-кого грызть??
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 02.10.2008
Сообщений: 198
|
Короче соврал я че-то вам, не получилось ни чего у меня тогда, щас время освободилось о5 вернулся к этой проблеме. Я чувствую решение где-то рядом
![]() На данный момент вожусь с этим: "свойства;слой;основные;;^C^C_-layer;_set;основные;^C^C" В результате имею, что если объект выбран, то всё проходит удачно - меняется слой объекта на "основные" и затем меняется текущий слой. Но если объект не выбран(а это значит что я просто хочу сменить текущий слой), то: "свойства;слой;(ВОТ ЗДЕСЬ КАД ЦИКЛИТСЯ И ДАЛЬШЕ НЕ ХОЧЕТ ЧИТАТЬ МАКРОС)основные;;^C^C_-layer;_set;основные;^C^C" Я искал по форуму, не нашел ничего мне подходящего. А именно, я думаю, возможно туда надо вставить какой-то оператор что бы он, в случае когда объект не выбран, после того как бесуспешно выполняет команду "слой;" не тупил а продолжал дальше читать следующую безнадёжную команду "основные;" и, наконец, переходил к смене текущего слоя. Подскажите пожалуйста, мозг кипит уже ![]() Задача - создать макро, который бы переключал текущий слой на заданный в макро и заодно, ЕСЛИ выбран объект, менял бы и его слой тоже |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Если ты работаешь со строительными чертежами, а не с механическими, и не с КМ, то делаешь большую ошибку. назвав слой по типу линии. Странно, все бросились помогать, не углядев имя слоя. Гораздо продуктивнее давать имена слоев по технологии, по типу объектов и др, но только не по типу линих, не по цвету и не по весу. Про мех. черт молчу, чтобы не заклевали, так как не спец. и не смогу отбиться. Но кто так делает, не знает слоевых инструментов.
|
|||
![]() |
|
||||
инженер-строитель Регистрация: 17.05.2005
E-burg
Сообщений: 696
![]() |
Цитата:
Как вариант - повесить на мышь команду "объекты по образцу" (видел здесь в даунлоаде) и использовать уже начерченные линии. |
|||
![]() |
|
||||
Регистрация: 02.10.2008
Сообщений: 198
|
Не совсем со строительными я работаю. Занимаюсь обследованием сооружений и, в основном, работа в каде заключается в начертании карт дефектов с их частичным описанием на чертеже. С ними невозможно поступать так, как говорит Vova - это ни к чему, слоевые инструменты задействовать особо не где (блокировать и отключить - все необходимые инструменты) и получится гора этих слоёв в каждом по 5 линий. Хотя мож я чего не так понял. Так что насчет моего вопроса, нинаете?
Haos, с переключением по сочитанию разобрался уж давно. Новая проблема вытекла ![]() Последний раз редактировалось Кулик Алексей aka kpblc, 13.01.2009 в 16:44. |
|||
![]() |
|
||||
студент-бакалавр Регистрация: 06.01.2010
Penza
Сообщений: 3
|
Здравствуйте, уважаемые форумчане.
Я всегда пользуюсь стандартным набором слоев: "1- Основные 2 - Стены 3 - Размерные 4 - Текстовые" и т.д., их всего 9 и для ускорения рабочего процесса назначаю на часто используемые команды горячие клавиши, и мне хотелось бы узнать, как можно на клавишу к примеру Alt+1 назначить выбор слоя "1- Основные", заменив тыканье мышкой в слоях. При этом 1) если объект не выбран, то слой просто заменяется на выбранный 2) если объект выбран, то слой объекта заменяется на выбранный, и слой на панели возвращается в предыдущий. Данный вопрос был поднят тут http://forum.dwg.ru/showthread.php?t=25232&page=2 , но решение с помощью Lisp-ика так и не было найдено. Заранее спасибо. |
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 308
|
Может как-то так:
Код:
Может ли кто-нибудь подсказать как избавиться от этого лишнего энтера? Но условие: нельзя использовать vla-функции, поскольку программа создана для ZWCAD2008i и не все vla там работают. Перерыл все справочники и форумы, решения не нашел. Надеялся что есть системная переменная, которая отмечает есть ли выбранные объекты в данный момент, но тоже ничего не сыскалось. |
|||
![]() |
|
||||
студент-бакалавр Регистрация: 06.01.2010
Penza
Сообщений: 3
|
|
|||
![]() |
|
||||
Регистрация: 19.03.2004
Калининград
Сообщений: 1,842
|
А что мешает сделать несколько кнопок с макросами?
Например ^C^C_-layer;_s;Основная;; Кроме того там можно вначале создавать слой, присваивать ему цвет, тип линии, а потом делать его активным. ^C^C_-layer;_m;Основная;_c;3;;_l;continuous;;_s;;; |
|||
![]() |
|
||||
конструктор машиностроитель Регистрация: 14.05.2007
Новосибирск
Сообщений: 893
|
Вооше идея интересная но если привязываться к конкретным названиям слоев то получается сугубо индивидуальная.
А вот если бы сделать последовательное переключение (вверх или вниз списка) то можно бысто переключать клавишей. Конечно если сотни слоев то не эффективно. Например я на кнопку мыши (что на колесике) установил "Следующий документ" и быстро перебираю открытые файлы - очень удобно. Вот так бы и следующий слой. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Вешай на клавиши соответствующие команды (правда, лисп придется загрузить):
Код:
P.P.S. Код не учитывает фильтры слоев, так что в качестве рабочего использоваться не может.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Сообщений: n/a
|
Цитата:
А можно ли через Lisp активировать панель управления Слои, чтобы она выпала списком (я говорю не про Диспетчер слоев), а потом в ней выбрать с помощью курсора нужный слой. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
По-моему, такое средствами lisp'a нереализуемо. Либо писать свой диалог...
Примерно так (в качестве примера) Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-конструктор Регистрация: 25.02.2008
Москва
Сообщений: 142
|
Не знаю как на лиспе, но можно по-простому.
Создать новую команду со следующим макросом: Код:
Работает данная команда следующим образом. Если объектов до вызова команды выбрано не было, то команда просто делает активным слой "Основной" с внесенными в макрос параметрами цвета и толщины линий (если слоя такого в чертеже нет - создает его, если слой "Основной" есть но с отличными от заданных в макросе цветом и толщиной линии, то команда меняет цвет и толщину в соответствии с введенными в макросе). Если до перед вводом команды были выбраны объекты то они будут помещены на слой "Основной". Небольшие ограничений команды: если до выполнения команды слой "Основной" в чертеже существовал и был выключен или заморожен, то после выполнения команды этот слой будет включен и разморожен (то есть не вылетит предупреждения "N объектов будут перемещены на выключенный слой" или что-то вроде этого) Вот еще вариант команды с выбором помещаемых в слой объектов после ввода команды: Код:
|
|||
![]() |
|
||||
Архитектор Регистрация: 03.09.2007
Казахстан
Сообщений: 9
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
http://dwg.ru/pub/9 посмотри.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
По-моему, чертеж в котором всего 9 куцых слоев должен быть простейшим как амеба. А когда вижу имя слоя типа Основные, Пунктирные и подобное то представляется что автора не учили автокаду на курсах и он никогда не пользовался командами работы со слоями, начинающимися со слова _Lay... Ибо если-бы воспользовался то догадался бы и без курсов что слои надо называть по принципу возможности выделения определенного набора, дающего возможность либо включить только то что надо либо отключить что не надо. У нас в файлах может быть и тысяча слоев, в том числя и сотня созданных автором.
|
|||
![]() |
|
||||
Конструктор по сути (машиностроитель) Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391
|
Автокад знаю очень хорошо, но слои именно так и называются. У нас у машиностроителей не бывает сотня слоев. Только по типам выполняемых линий. Соответственно командами работы со слоями нет необходимости пользоваться. Так что обобщать не надо.
__________________
Век живи, век учись - ... |
|||
![]() |
|
||||
конструктор машиностроитель Регистрация: 14.05.2007
Новосибирск
Сообщений: 893
|
Если речь идет о LT то может и так.
При моделировании, а это я считаю основной работой конструктора, количество слоев зависит от числа сборок или даже деталей. Правда и слои не решают все нужды, приходиться пользоваться еще и группами. Переключение слоев - а почему не использовать команду _Laymcur, для ускорения можно ее и на клавишу, останется только щелкнуть по нужному объекту. Правде если слой не выключен.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн |
|||
![]() |
|
||||
конструктор машиностроитель Регистрация: 14.05.2007
Новосибирск
Сообщений: 893
|
Цитата:
Я редко отключаю слой, обычно использую блокирование при небольшой подсветке, очень удобно.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн Последний раз редактировалось Jonas, 04.07.2013 в 07:12. |
|||
![]() |
|
||||
Архитектор Регистрация: 03.09.2007
Казахстан
Сообщений: 9
|
Спасибо, вцелом понятно, но понятно только как скопировать этот код сохранить и вставить
а вот как именно настраивать его под свои кнопки.. извините за тупость, разбираться некогда.. работы вал может кто по доброте душевной тыкнет пальцем как именно этот код включить чтоб shift z и shift x - переключать слои вверх и вниз.. |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Вместо того чтобы подставлять нужный слой под одиночную линию бывает проще начертить ее в текущем слое и мазануть по ней кисточкой с аналогичной, сделанний раньше.
Но если хочешь автоматизации, а количество слоев ограничено, скажем, десятком то она есть и без лиспа. Нарисуй короткий отрезок в слое 1, затем в слое 2 и т.д. Открой новую палету (Ctrl+3). Скопируй отрезок 1 через клипборд на палету и правой кнопкой переименуй команду в 1. Повтори для всех других отрезков Получишь десяток кнопок команд и каждая будет рисовать на выбор 8 разных объектов - отрезок, полилиние, кружок и т. д. в заданном слое Кстати, вместо безликих цифровых имен слоев можешь задать им более технологичные, отражающие суть На другой палете можно хранить блоки, также рассортированные по слоям |
|||
![]() |
|
||||
Регистрация: 28.01.2013
Минск
Сообщений: 375
|
Цитата:
Я в работе прибегнул к комбинированному методу, на мой взгляд очень удобно.. вот суть: 1) Создал палитру со всеми использующимися типами линий, размерами, текстами.. и тд, а также блок в котором каждый элемент прорисован 1 раз, но при вставке он вставляется в непечатаемый слой. 2) В работе использую собственные кнопки с собственной панели инструментов с простыми и легкими макросами, в которых нет проверки возможного отсутствия определенного слоя или стиля. Тк все эти элементы нам создает вышеописанный блок и они наверняка на чертеже имеются. + на самые частые команды назначены горячие клавиши. 3) Поработав в файле удаляю сам блок и прочие невостребованные элементы командой _pugre. |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Цитата:
Рисуем несколько линий-образцов в нужных слоях и типах в сторонке. Запоминаем вид. Делаем кнопку, которая: 1. Запоминает текущий вид, где в текущих параметрах нарисован объект требующий изменения свойств по образцу 2. подставляет запомненный вид с образцами на середину экрана 2. Подставляет под мышку кисточку 3. Макаем кисточку в нужный образец 4. Возвращаемся к первому виду (вероятно, другой кнопкой) 5 Мажем кисточкой по объекту На первый взгляд должно получиться даже макросом, А лиспом вероятно все с одной кнопки |
|||
![]() |
|
||||
Геодезист Регистрация: 23.05.2012
Ухта
Сообщений: 1,377
|
EL'DAR, попробуйте эту программу: http://forum.dwg.ru/showthread.php?t=35875
__________________
Как-то так. |
|||
![]() |
|
||||
Архитектор Регистрация: 03.09.2007
Казахстан
Сообщений: 9
|
Цитата:
Умные люди, ну плиз, растолкуйте, не могу разобраться. |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Offtop: Интересно, что термин СЛОЙ вряд-ли отражает действительное положение объектов в пространстве автокада. Ведь слово СЛОЙ как бы отражает их единый уровень, а это совсем не так, ибо объекты имеющие одинаковый слой могут быть частично и под и над объектами другого слоя. В этом отношении англ. термин Layer ближе к действительному положению вещей. Ибо один из вариантов перевода это Наслоение прослоек. Странно что переводчики локализаторов автокада не придумали другого термина, тогда как поправить авторов автокада они горазды. Например, Previous они перевели как Текущий, считая его более правильным чем Предыдущий (имеется в виду опция выбора объектов, селектированных предыдущей командой)
|
|||
![]() |
|
||||
Регистрация: 30.01.2013
Сообщений: 32
|
Здравствуйте, а подскажите пожалуйста, где можно почитать о этих кодах, это я так понимаю Макросы? Хотелось бы по-подробнее разобраться и начать оптимизировать свой рабочий процесс. Кстати, еще удобно пользоваться функцией копирования свойств слоя, и перекидывать его на тот. который нужно изменить, только перед этим задать эту команду в горячие клавиши, у меня напрмиер это "Shift+R". Или использовать сокращенную команду "кпс". |
|||
![]() |
|
||||
Инженер дорожник Регистрация: 22.10.2007
Израиль
Сообщений: 1,859
|
Цитата:
А по поводу переключения слоёв удобно пользоваться Лиспом "Быстрое рисование " http://forum.dwg.ru/showthread.php?t=35875 Выбыраешь объект к примеру линия и сразу рисуешь линию на слое на котром размещена линия. |
|||
![]() |
|
||||
Инженер дорожник Регистрация: 22.10.2007
Израиль
Сообщений: 1,859
|
Цитата:
^C^C_-Linetype;_Load;"CENTER" "acad.lin";;^C^C_-layer New SBG_CL; ^C^C_-layer Color 3 SBG_CL; ^C^C_-layer Ltype CENTER SBG_CL;C^C(if (not C:SBG_CL) (LOAD "DP.lsp")) SBG_CL В макросе определена загрузка типа лиии, создание слоя для сентральной лиии и присовении этих свойств слоя выбраной лини. Я в своей работе практически не переключаюсь между слоями. От осевой через _offset я строю край проезжей части и соответственно аналогичной кнопкой присваиваю им соответствующий слой, линия асфальта или бортовой камень. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Палитры инструментов исключаются из рассмотрения напрочь?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Такие вопросы в другом разделе форума.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Это сделать можно, даже довольно легко. Надо только уточнить пожелания пользователей. Как надо? Чтоб одно сочетание меняло слои по списку вниз, а другое (может, то же +Shift) - вверх? Или первое нажатие вниз, а второе - обратно вверх? В общем, хотелось бы как можно более полного описания желаемого процесса с максимальным продумыванием всех возможных деталей, неявных на первый взгляд. Ну например, что делать, если слой, на который мы переключились отключен или заморожен? Вывести предупреждение? Предложить разблокировать? Ну и так далее... Думаю, это будет две команды, одна переключит на следующий по списку слой, вторая - на предыдущий. На каждую из них вешаем горячие клавиши - и всего делов. Не уверен, можно ли переназначить в Автокаде именно Ctrl+Tab (да и надо ли?) - нет возможности сейчас проверить, но любое другое из доступных сочетаний - не вопрос.
Правда сделать я это смогу только на лиспе, поэтому нужно будет попросить модераторов перенести тему в Программирование, тем более, предложенные решения - уже на программной основе. |
|||
![]() |
|
||||
Инженер дорожник Регистрация: 22.10.2007
Израиль
Сообщений: 1,859
|
Цитата:
А функция _Laymcur установить слой по объекту совсем не катит, посади её на клавишу если так хочется. ![]() |
|||
![]() |
|
||||
конструктор машиностроитель Регистрация: 14.05.2007
Новосибирск
Сообщений: 893
|
Цитата:
Цитата:
Да и вообще, жалко что ли?
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн |
|||
![]() |
|
||||
Инженер дорожник Регистрация: 22.10.2007
Израиль
Сообщений: 1,859
|
А смысл тогда всей затеии?
Тогда клавишей и переключать нечего. Вообще если смыл вей работы что бы переключать слоя то есть смыл и можно даже зациклить, утром пришёл на работу включил вером уходя выключил, а можно и не выключать...... Но вообще за включением и переключением должено стоять последующее действием. Исходя из этого нужно и формировать решение. К примеру макрос для вставки блока содаёт слой активизирует его и блок вставляется на соответсвующий слой. У автора правда восемь слоёв, Но при восьми слоях заморачиваться с клавишей, ну сделалбы восемь кнопок нажал и установился нужный слой. ^C^C_-layer New 1; ^C^C_-layer Color 11 1;^C^C_-layer Set 1; Примерно так. |
|||
![]() |
|
||||
конструктор машиностроитель Регистрация: 14.05.2007
Новосибирск
Сообщений: 893
|
Конечно писать.
Требования простые: - переключение вверх и вниз, - на замороженное, изолированное, блокированное и пр. состояние слоев не обращать внимание. Заранее спасибо.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Ну-ну, попробуйте переключиться на замороженный слой
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
конструктор машиностроитель Регистрация: 14.05.2007
Новосибирск
Сообщений: 893
|
Да и бог с ним, пойдем далее (всего лишь лишний щелчек).
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Это как понять? Не обращать внимания, что слой отключен, заблокирован, и все равно активировать его, или не обращать внимания и пропускать, активируя следующий включенный и разблокированный?
|
|||
![]() |
|
||||
конструктор машиностроитель Регистрация: 14.05.2007
Новосибирск
Сообщений: 893
|
Думаю что да.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Когда уже большую часть кода написал, нашел вот эту тему...
Думаю, ладно, есть решение и есть, я все равно, в академических целях за это взялся, даже интересно было посмотреть, как решил эту задачу Алексей Кулик в #7 (после объединения тем #52), но вот пост #9 (ныне #54) меня удивил. Jonas, как так-то? ![]() Раз уж написал, выложу его тут: Код:
Согласен с Алексеем в его комментарии к своему коду: От себя добавлю, что код также не учитывает сортировку слоев в диспетчере свойств слоев. Если в диспетчере слои отсортированы по имени, то переключение будет идти по порядку, если же они отсортированы как-то иначе (по цвету, например), то переключение будет происходить хаотично. Напомню, что на панели Слои выпадающий список слоев отсортирован по алфавиту, т.е. в нем порядок переключения будет правильным. Если кто подскажет, как выяснить программно способ сортировки слоев в диспетчере свойств слоев, то смогу подправить. Последний раз редактировалось skkkk, 09.09.2014 в 10:42. Причина: Добавил обработку слоя "Defpoints" |
|||
![]() |
|
||||
конструктор машиностроитель Регистрация: 14.05.2007
Новосибирск
Сообщений: 893
|
Да, было дело. В то время работал главным и занимался только моделированием ну и как то не прижилось, вот и забыл.
Последние годы делаю всё, от А до Я, поэтому востребовано а про код Кулик Алексей aka kpblc забыл.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Ничего страшного. Зато я позанимался
![]() Возникла мысль, может, стоит добавить обработку предварительно выбранных объектов? То есть, если объекты выбраны, то они будут переноситься на следующий/предыдущий слой? Жду предложений. Уважаемые модераторы, перенесите, пожалуйста тему в раздел "Программирование". |
|||
![]() |
|
||||
конструктор машиностроитель Регистрация: 14.05.2007
Новосибирск
Сообщений: 893
|
Спасибо, работает нормально.
Цитата:
Кстати, я тоже поставил на кнопку грызуна шифт+N - следующий а контр+кнопка (шифт+N) - назад.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Не понял, а я-то тут каким боком?
![]() ----- добавлено через ~11 мин. ----- Объединены три темы по переключению слоев с помощью клавиш. Тема перенесена из "AutoCAD" в "Программирование"
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Хочу еще напомнить, что когда-то была востребована ф-ция отключения/включения слоев по фильтру layer-filters-status-change
Цитата:
Make a layer filter... yes i said MAKE Exporter/importer des filtres de calque Can I create frequently used layer filters in LISP? Я когда-то начинал разбираться с фильтрами слоев. Даже написал что-то наподобие библиотеки. По памяти - по моему не получилось из лиспа устанавливать текущим тот или иной фильтр. Могу ошибаться. Библиотека во вложении
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Как это?
![]() Во-первых, я могу вдруг остро зануждаться в а во-вторых, ты ж, как-никак первоотец идеи и ее воплощения, - за тобой и право приоритетного голоса ![]() Цитата:
А каким образом подтвердить, если у нас команды (да и функция) активируют слой и завершаются? После каждого переключения выдавать запрос "Да/Нет"? Или через один? ![]() Я предлагаю пойти по Автокадовскому принципу работы со слоями: если надо переключить текущий слой, объекты должны быть НЕ выделенными, а если нужно назначить объектам свойство "Слой", они должны быть ПРЕДВАРИТЕЛЬНО выделены. Выделение после сбрасывается Ecs, либо объекты подвергаются действию следующей команды. Так и надо: пока объекты выделены, мы по кругу меняем им слой - вверх/вниз по списку, и смотрим в ком.строку, где все оглашается; затем нажали Esc - и уже меняем по кругу активный слой. Максимум, можно только в начале спросить что-то вроде: "Сбросить выделение [Да/Нет]". Я так думаю. |
|||
![]() |
|
||||
Регистрация: 20.03.2013
Сообщений: 54
|
Прочитав тему я так понял, что способ не придумали?
У меня сейчас такое ТЗ для программы: -переключение слоёв должно происходить внутри действующего фильтра слоёв. -команда задается сочетанием клавиш на клавиатуре -выбор слоя осуществляется колесом мышки (либо, по желанию пользователя, по началу названия слоя набираемого с клавы), название слоя отображается возле курсора -подтверждение выбора слоя осуществляется по нажатию ЛКМ (либо ПКМ, либо колесика) -после этого выбранный слой становится текущим, а если был выбран объект - то объект переносится на выбранный слой. По моему, получится удобно (ели фильтр настроен грамотно) Если слои назвать например 1,2,3,.. то получаем результат, который хотел ТС. Получится такое сделать? |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Цитата:
ЗЫ. Я со стороны C# смотрю. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Offtop: Boxa, вот зря ты это написал
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2013
Сообщений: 54
|
Ок, уточню: есть ли энтузиасты, недавно изучившие как писать программы для автокада, жаждущие попрактиковаться и получить творческое удовольствие, и создать полезную для людей программу?
Если есть - сделайте пожалуйста, и если всё будет хорошо - похвалим и вам будет приятно, если нет - узнаете что надо повысить квалификацию) В другой раз для вас тоже что-нибудь хорошее сделают. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
А разве так работать не будет:
Код:
Перебираете подшивку, получаете листы в цикле. Из листа получаете имя привязанного файла *.dwg, проверяете - нет ли такого уже файла во вспомогательном списке имен файлов. Если нет - добавляете. Если используется древовидную структуру листов в подшивке, то будут еще субнаборы (в .Net это AcSmSubset) листов. Обрабатываете листы в этих субнаборах с помощью рекурсии. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Тут на форуме есть все, как в Греции) За правильность не ручаюсь - лень вчитываться)
|
|||
![]() |
|
||||
Регистрация: 07.12.2010
Уфа
Сообщений: 427
![]() |
Заклинание непинания: "Я не программист! Я делаю свою работу удобнее и быстрее!"
Для чего эта программа? Если надо отправить на печать (на плоттер или в пдф) документ с подписями и печатями, то данная программа включает слой "Печать_подписи" (у меня именно в этом слое находятся подписи и печати) во всех листах подшивки. Если надо этот слой выключить, то по месту (1) см.код вместо True надо поставить False. Вот что получилось: Код:
У меня некоторые листы подшивки ссылаются на один и тот же файл. Прога каждый раз открывает файл листа подшивки делает своё дело и закрывает его. Ускорить работу данного кода можно открыв все файлы листов подшивки, потом по очереди менять значение plotable и закрывать файлы. Для этого надо сделать проверку "если файл уже открыт, то не открывать его". Допустим у меня есть подшивка, в которой десять листов ссылаются на один файл. Вот так вот. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Если Вы все равно используете On Error Resume Next, то зачем вот это:
Код:
Код:
Хотя я бы конструцию On Error Resume Next и условия не использовал, а обошелся бы конструкцией Код:
В .NET проще, там можно напрямую спросить, есть ли слой с заданным именем.... |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Общие замечания и рекомендации:
1. В начале программы вставить запрос - включить и выключить слой через функцию GetKeyword. 2. Использовать логирование в комстроку акада, закрывать каждый раз MsgBox - не совсем френдли интерфейс. 3. Сначала перебрать все подшивки, собрать оттуда имена файлов, а потом уже обрабатывать файлы. Попробуйте для создания списка уникальных имен файлов использовать Scripting.Dictionary с поздним связыванием (если админы не отключили скрипты, конечно). 4. Выводить имена обрабатываемых файлов в комстроку акада и статус обработки типа: ОК, не удалось открыть, не найден слой. 5. Сделайте счетчики для разных состояний статуса обработки и выводите в комстроке в конце суммарную информацию: всего файлов, из них успешно и т.д. |
|||
![]() |
|
|||||
Регистрация: 07.12.2010
Уфа
Сообщений: 427
![]() |
Цитата:
Цитата:
Цитата:
Цитата:
Надо заморочиться на это. |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
Цитата:
это внутри кода VBA создаваемый объект, просто в отличие от встроенных в сам VBA коллекций более гибкий инструмент. |
|||
![]() |
|
||||
Регистрация: 01.02.2020
Сообщений: 3
|
В адаптации назначаете горячую клавишу и в ней пишите макрос
^C^C(setvar "CLAYER" "ИМЯСЛОЯ") Можете и в контекстное меню поставить и горячие клавиши назначить Последний раз редактировалось Кулик Алексей aka kpblc, 19.02.2021 в 07:43. |
|||
![]() |
|
||||
Регистрация: 01.10.2012
Сообщений: 27
|
Добрый день. Некоторые слои вызываются клавишами. Но иногда когда много слоев появляется необходимость возврата к предыдущему слою , может кто разбирался, возможно ли на сочетание клавиш повесить выбор предыдущего слоя по кругу. Например есть 5 слоев, 1,2,3,4,5. произвольно выбрали 3 потом 4, и был бы выбор 3,4,3,4 и т.д.
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Ну что-то типа такого
Код:
командой SetSecondLayer задается второй текущий слой команда LayerSwitcher - переключает текущий слой по кругу. по нормальному, конечно надо проверять слои - не заблокирован ли, не скрыт: прежде чем делать его активным. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
запуск программы из 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 |