Как в автокаде выделить все блоки одним нажатием?
Помогите с командой/макросом/лиспом в автокаде «выделить все блоки» и «выделить все штриховки» ? Постоянно нужно выделять, через команду быстрый выбор теряется много времени, а команда выбрать подобные работает только на одинаковые объекты, находящиеся только в одном слое
Просмотров: 4243
Регистрация: 24.09.2013
Ingushetiya
Сообщений: 392
Сообщение от 815wsw
Помогите с командой/макросом/лиспом в автокаде «выделить все блоки» и «выделить все штриховки» ?
1) Скорее всего вы пользуетесь командой «выбрать подобные» предварительно выбрав требуемые объекты. Попробуйте, не выделив никаких объектов, запустить эту команду _SelectSimilar, затем через командную строку зайдите в настройки (этой команды). Там снимите все галочки — теперь при использовании он должен выделять все блоки, попробуйте. Эта настройка данной команды сохранится, пока не измените.
2)В команде Фильтр создать именованный фильтр. Кроме того, последний фильтр сохранится. Но этот способ несущественно быстрее, чем через Быстрый выбор.
Регистрация: 06.11.2019
Сообщений: 3
спасибо, про настройки команды выбрать подобные не знал. проблема в том, что приходится искать объект для подобия, а если на большом чертеже остается всего пару блоков, то их просто не найдешь. через команду фильтр тоже хороший вариант, но хотелось бы уйти вообще в одно нажатие, чтобы экономить время
Регистрация: 11.05.2005
Сообщений: 6,991
ObjectARX. SelSim — выбор по образцу Очень мощный и простой инструмент для выбора
__________________
Как использовать код на Лиспе читаем здесь
Регистрация: 18.12.2010
Сообщений: 5,047
Регистрация: 20.03.2008
Сообщений: 2,653
(if (setq ss (ssget "_X" '((0 . "INSERT"))))(sssetfirst nil ss))
(if (setq ss (ssget "_X" '((0 . "HATCH"))))(sssetfirst nil ss))
Поиск и вставка имени блока
С помощью функции поиска можно найти и вставить любое определение блока, уже имеющееся в чертеже.
- Выполните одно из действий при запросе:
- Введите блок. (Не нажимайте клавишу Enter.) Список вариантов командной строки разворачивается для включения категории блока.
- Введите целиком или частично имя блока, который требуется вставить. (Не нажимайте клавишу Enter.) Блок, имя которого соответствует введенным буквам, отображается в нижней части списка.
- Если необходимо, разверните раскрывающийся список, чтобы отобразить больше доступных блоков. Наведите указатель на элементы в списке, чтобы увидеть миниатюру.
- Выберите блок для вставки.
- Следуйте подсказкам для вставки блоков.
Понятия, связанные с данным
Задачи, связанные с данной
- Работа со списком вариантов командной строки
- Работа с поиском содержимого
САПР для инженера
Можно ли создать макрокоманды по «быстрому выбору», в частности по выбору тех или иных блоков? Например есть блоки с именем двери, стулья, столы. Нажал кнопочку и «выбрались» все блоки с именем «столы»..
Спасибо за отличный вопрос. Отвечаю.
К сожалению, в AutoCAD с помощью команды Быстрый выбор такого сделать нельзя, поскольку она закрыта и до ее параметров не достучаться программными средствами. Однако, задача легко решаема с помощью одной строчки кода на AutoLISP.
Создаем команду выбора
Пишем строку кода на AutoLISP
(sssetfirst nil (ssget «_x» ‘((0 . «INSERT»)(2 . «Имя блока»))))
Функция sssetfirst в данном случае, выражаясь не программистским языком, позволяет выделить все объекты из списка, функция ssget — создает список из всех блоков с именем «Имя блока», которые есть в текущем чертеже.
Т.е. если вы хотите выбрать все блоки с именем «Стол», то запись будет выглядеть
(sssetfirst nil (ssget «_x» ‘((0 . «INSERT»)(2 . «Стол»))))
Можете протестировать работу — скопируйте запись в командную строку и нажмите Enter, должны выбраться все блоки с именем «Стол»
Создаем инструментальную панель с кнопками выбора блоков
Добавить кнопку на панель или ленту нет никакой сложности. Например, создадим панель Выбор блоков и добавим на нее кнопки
1. Запускаем команду Пользовательский интерфейс на ленте Управление или вводим команду НПИ (_CUI)
2. Создаем новую команду — нажимаем кнопку Создание новой команды
3. Описываем свойства команды. Задаем Имя, например Блоки Стол, вводим Описание и пр.
В поле макрос вводим созданную ранее строку кода
^C^C(sssetfirst nil (ssget «_x» ‘((0 . «INSERT»)(2 . «Стол»))))
^C^C — это двойное нажатие Cancel, нужно для выхода из текущей команды перед запуском команды выбора, хотя это совершенно необязательно.
Также можно выбрать значок для команды или создать свой.
Не забываем нажимать Применить.
4. По аналогии создаем команды для выбора других блоков
5. Создаем новую инструментальную панель, например, Выбор блоков
6. Добавляем созданные команды на новую панель. Просто перетаскиваем их на нужную панель (можно выбрать группу команд)
Выходим из окна.
7. Отображаем панель в рабочем пространстве. Пишем в командной строке
-ПАНЕЛЬ «Выбор блоков»
8. Наслаждаемся.
С остальными приемами работы и настройки в AutoCAD можно познакомиться на странице блога.
С уважением, Андрей.
Если вы получили ответ на свой вопрос и хотите поддержать проект материально — внизу страницы для этого есть специальная форма.
Список блоков в чертеже
Господа!
Есть ли в AutoCAD инструмент, посредством которого можно получить список использованных БЛОКОВ и ВНЕШНИХ ССЫЛОК в файле *.dwg? И, если есть, транслирует ли этот инструмент результат анализа в, к примеру, текстовый файл?
#2 Ответ от Lenich 12 мая 2004г. 14:25:15
Re: Список блоков в чертеже
В акаде, в командной строке пишешь -block.
на первое приглашение Набираешь «?»., а на второе приглашение Вводишь «*» и вот список перед глазами. Выделяешь мышкой, копируешь что нужно в буфер и затем вставляешь.
Также и с «-xref».
#3 Ответ от Mitja 12 мая 2004г. 16:58:28
Re: Список блоков в чертеже
Но мне хотелось бы узнать список блоков перед командой INSERT по вставке файла *.dwg, чтобы избежать дальнейших хлопот с обновлением блоков.
#4 Ответ от Lenich 12 мая 2004г. 18:00:57
Re: Список блоков в чертеже
Если ты хочешь посмотреть какие использовались блоки в файле1 перед вставкой их в файл2 (Если ты это имел ввиду) то воспользуйся Tools->AutoCad DesignedCenter ?Ctrl+2? (начиная с версии 2002 акада по-моему). А там как в проводнике, выбираешь файл1 и вот они: блоки, стили текста, размеры, ссылки. Их можно посмотреть и вставить в открытый файл2. При этом не обязательно вставлять файл1 целиком.
Попробуй, хорошая стандартная утилита.
#5 Ответ от BigBrother 12 мая 2004г. 22:50:30
Re: Список блоков в чертеже
eattext, там все увидишь.
#6 Ответ от Mity 13 мая 2004г. 10:13:14
Re: Список блоков в чертеже
> BigBrother
> Lenich
Попробую, все-таки, объяснить.
В файле 1.dwg — 152658 блоков. В файле 2.dwg — 2659871 блоков. Каким образом 2.dwg -> 1.dwg да так, чтобы не переопределить ни одного блока в 1.dwg.
Наша косноязычность гарантирует совпадение имен блоков.
Имея списки блоков в этих файлах я очень легко найду общие имена и переименую кого-то из «комплиментарной пары».
С уважением к обоим, Дмитрий.
#7 Ответ от Геннадий aka PG 13 мая 2004г. 11:56:38
- Геннадий aka PG
- Восстановленный участник
- На форуме с 4 апреля 2002г.
- Сообщений: 1,348
- Спасибо: 0
Re: Список блоков в чертеже
#8 Ответ от serezha_pu 13 мая 2004г. 15:49:10
Re: Список блоков в чертеже
а это можно сделать. В 2004 автокаде есть специальная опция показывающая все блоки в рисунке, но с помощью нее нельзя извлекать в текстовый файл. Для извлечения я использовал Visual Basic и переносил все данные о блоке в файл Excel, ну естественно можно и в текстовый, можно извлекать блоки с помощью Lisp или написать программульку ARX. Выбирай сам, что удобней. Я С++ не знаю поэтому использоал VB. Надеюсь ответил на твой вопрос. Если что пиши.
#9 Ответ от Sluggard 14 мая 2004г. 00:15:51
Re: Список блоков в чертеже
Команда _eattext
И будет тебе счастье в том числе и с экспортом в файлы
#10 Ответ от Lenich 14 мая 2004г. 12:10:28
Re: Список блоков в чертеже
Я думая надо написАть лиспину или на VBA прогу которая бы все твои имена блоков в одном файле переименовывала (напр. добавляла к каждому названию «1_» тебе ведь все равно как они будут называться) и потом без боязни втавишь один файл в другой. Переименовать можно программными стредствами.
Да ещё посмотри «rename».
#11 Ответ от Mity 14 мая 2004г. 12:27:19
Re: Список блоков в чертеже
> Lenich
В этом случае наступаетт бесконечный цикл. Ведь в следующий раз вновь придется все переименовывать.
#12 Ответ от Lenich 14 мая 2004г. 15:45:59
Re: Список блоков в чертеже
Чесно, я не знаю как ты часто такие большие объемы вставляешь.
Но можно новое уникальное имя присвоить. Например 20040519_000001 и т.д. и они никогда не повторяться.
И ни какого цикла, сегодня один номер, завтра другой, можно еще и время добавить.
#13 Ответ от BigBrother 15 мая 2004г. 17:52:41
Re: Список блоков в чертеже
(defun get-all-blockname ( / bl blist) (setq blist (list(cdr(assoc 2(tblnext "block" t))))) (while (setq bl (tblnext "block")) (setq blist (cons(cdr(assoc 2 bl)) blist)) ) ) (defun put-blks-2bb ( / ) (VL-BB-SET 'allblkname (ACAD_STRLSORT (get-all-blockname))) ) (defun check-unique-blname ( / concurrence currblks otherblks) (setq otherblks (VL-BB-REF 'allblkname) currblks (ACAD_STRLSORT (get-all-blockname)) concurr (list) ) (foreach blk otherblks (if (member blk currblks) (setq concurrence (append concurr (list blk))) ;;; Здесь можно вставить процедуру переименования имени блока ;;; с диалогом или без. ) ) concurrence )
Вот заготовка, правда без проверок значений и пр. оптимизации.
Оба файла должны быть открыты в одном сеансе.
Функции соотв. тоже загружены.
В 1-м выполняешь put-blks-2bb, во 2-м check-unique-blname.
put-blks-2bb — помещает список имен блоков в чертеже в «blackboard namespace»
get-all-blockname — получить список имен блоков
check-unique-blname — возвращает список совпадений имен блоков.
#14 Ответ от wepp 17 октября 2023г. 10:17:29
Re: Список блоков в чертеже
BigBrother пишет:
Вот заготовка, правда без проверок значений и пр. оптимизации.
Некропостинг, конечно, но хочу использовать функцию для своих задач. Для теста взял пустой чертёж, вставил в него 4 блока из контрольного, но при проверке совпадений возвращает только первое имя блока.
#15 Ответ от Alex_Shaton 19 ноября 2023г. 21:24:55
Re: Список блоков в чертеже
wepp пишет:
BigBrother пишет:
Вот заготовка, правда без проверок значений и пр. оптимизации.
Некропостинг, конечно, но хочу использовать функцию для своих задач. Для теста взял пустой чертёж, вставил в него 4 блока из контрольного, но при проверке совпадений возвращает только первое имя блока.
Попробуй вот это.http://www.lee-mac.com/blockcounter.html
Сообщения 15
Тему читают: 1 гость
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум работает на PunBB , при поддержке Informer Technologies, Inc