|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как добавить объекты в текущий набор выделенных объектов на чертеже на VBA?
Регистрация: 14.12.2008
Сообщений: 1,134
|
||
Просмотров: 17390
|
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
|
|||
![]() |
|
||||
Регистрация: 18.12.2010
Сообщений: 5,107
|
|
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
Начертил 5 линий и 3 из них выделил.
Затем запустил функцию: Код:
Почему моя функция выдает отчет что текущий набор объектов состоит из 2 линий? А должен состоять из 5 линий. Заметил такую особенность: выделяю 3 линии и запускаю мою функцию, и функция выделяет в качестве текущих выделенных линий только 2 линии, которые я добавлял в набор текущих выделенных линий при предыдущем запуске функции. Получается АвтоКАД запомнил прошлые 2 линии в качестве текущих, а новые выделенные линии на экране не стал считать текущим набором выделенных линий. Появляется вопрос: после какого действия выделенные объекты попадают в текущий набор выделенных объектов? Попробуйте сами запустить мою программу. АвтоКАД не хочет записывать выделенные объекты в текущий набор выделенных объектов без дополнительного действия. Если функция не запускается, настройте библиотеки для вышей версии АутоКАД (Tools->References) Последний раз редактировалось МишаИнженер, 01.03.2021 в 13:00. Причина: Добавление файла |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
МишаИнженер, от Вашего кода кровь из глаз пошла, все совсем плохо и с кодом и с пониманием базовых механизмов языка.
И хотя, я не совсем понимаю что Вы хотите сделать, но мне кажется, что Вам следует гуглить фразу "autocad vba pickfirstselectionset" ну или посмотреть сайт который Вам ранее уже указывали: http://entercad.ru/acadauto.en/ex_pi...lectionset.htm |
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
У меня все работает. Не понимаю что вас не устраивает. Скачайте файл Excel из сообщения #7 и запустите функцию сами.
Добавил метод "PickfirstSelectionSet" Жалко что этот метод "только для чтения" PickfirstSelectionSet SelectionSet object; read only В итоге функция не выполняет требуемых действий: не добавляет выделенные объекты к текущему набору выделенных объектов К настроить работу функции, чтобы она выполняла свою задачу? (Запустите функцию из файла Excel из прикрепленного файла) Последний раз редактировалось МишаИнженер, 01.03.2021 в 13:17. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Господь с Вами, меня все устраивает, мне с этим не работать, хвала Дионису, я так мимо пробегая посмотрел, этого хватило.
Может стоит создать свой набор, куда добавлять выбранные заранее объекты? |
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
Вроде так и делаю. Однако в этот набор добавляются объекты выделенные при работе функции. А объекты выделенные до работы функции почему-то не выделяются после завершения работы функции.
Почему так происходит? Модернизировал функцию. Теперь выделенные "до" и "вовремя" объекты просто выделяются (подсвечиваются) на экране как буд-то выбранные. Однако многие программисты на VBA знают что "подсвеченный" и "выбранный" объекты это совсем разные вещи. "Подсвеченные" объекты это просто мистика и мишура, их нельзя дальше использовать ни в каких действиях. В этом можно убедиться если попробовать запустить функцию "Создать блок" и попытаться выбрать объекты из чертежа с ключом "т" ("текущий" набор объектов) При этом выделятся последние выбранные объекты полученные при работе функции. А выбранные объекты до работы функции забываются и не выделяются. Как сделать чтобы выбранные объекты до работы функции попали в текущий набор выделенных объектов? Где хранится текущий набор выделенных объектов? В каком словаре? Последний раз редактировалось МишаИнженер, 01.03.2021 в 13:40. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
МишаИнженер, Вас в гугле забанили? Первые же ссылки по фразе Autocad VBA add to PickfirstSelectionSet
Приводят на форум, где это решено: https://forums.augi.com/showthread.p...-active-in-GUI |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
|
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
Часто приходится выделять множество объектов очень труднодоступных и в большом количестве. Поэтому нужен инструмент позволяющий выделять объекты с помощью фильтров по слою, по цвету и весу линий. Спасибо Вохе за интересную ссылку. Там есть очень интересные решения!
|
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
|
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
Ни одну команду АвтоКАД не понимает:
Команда: "_.Select" Неизвестная команда "SELECT"". Для вызова справки нажмите F1. Команда: & Неизвестная команда "&". Для вызова справки нажмите F1. Команда: vbCr Неизвестная команда "VBCR". Для вызова справки нажмите F1. Команда: & Неизвестная команда "&". Для вызова справки нажмите F1. Команда: "_g" Неизвестная команда ""_G"". Для вызова справки нажмите F1. Команда: & Неизвестная команда "&". Для вызова справки нажмите F1. Команда: vbCr Неизвестная команда "VBCR". Для вызова справки нажмите F1. Команда: & Неизвестная команда "&". Для вызова справки нажмите F1. Команда: "TEMPGROUP" Неизвестная команда ""TEMPGROUP"". Для вызова справки нажмите F1. Что-то поменялось в новом АвтоКАДе. Наверное есть другая команда, заменяющая SELECT, но как называется эта команда? |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
такие нынче "инженеры") Даже готовое решение в пределах того же форума не способны найти неделями...
|
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
Спасибо Сергей812!
Функция заработала! Однако есть маленький недочет: При вызове функции SelectOnScreen снимается выделение с ранее выделенных объектов и на экране не видно какие объекты были выделены ранее и какие сейчас выделять не надо Как одновременно подсветить объекты и попросить пользователя выбрать новые? Может для этого есть специальные функции Лисп? Скачайте пожалуйста файл Excel и проверьте как работает функция и помогите исправить недочет! |
|||
![]() |
|
||||
Цитата:
Что мешает заказать юзеру новый выбор в тотжэж селсет и еще раз подсветить этот набор с новыми объектами? ----- добавлено через ~5 мин. ----- Зачем мучить юзера множественными выборами.. Не проще сделать селсет с кодом 4 и выбрать все что нужно за один раз?
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
хотя это делается элементарно с использованием Collection и хэндла как ключ. |
|||
![]() |
|
||||
Цитата:
Ломаю голову зачем выбирать несколько раз, если можно за один))
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
фиг его знает - как он писал
вполне возможно, что некий инструмент для коллекционирования вместе нескольких разных выборок пытается сваять |
|||
![]() |
|
||||
Цитата:
Секретчики млин.. все боятся идею супер проги запалить, шоб идею не украли)))
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Offtop: А ТС не реагирует...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
это если известны все условия выборки изначально. А может последовательно выбирается - что-то выбрал, потом посмотрел - какие то элементы не попали, дополнительный выбор с добавлением к предыдущему или наоборот, исключением из результирующего набора.. И т.д. в интерактивном режиме. Но шифруется ТС)
|
|||
![]() |
|
||||
Цитата:
Сильно шифруется. Даже представить такую задачу не могу, где требуется такой интерактив.
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
Придет ТС - может, приоткроет завесу тайны, зачем это все нужно) |
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
При армировании ЖБ конструкций сетками на проекциях сечений надо часто рисовать проекции сеток. Эти проекции я делаю в виде блоков. Круглешочки я рисую блоками в названии которых видно какой это диаметр (это удобная фишечка). И вот чтобы эти точки не выделять по одной (чтобы их все добавить в блок) мне нужен инструмент "добавить объекты к выделенным объектам" и ещё у меня есть код (и инструмент такой есть) "Выделить блоки из выделенных объектов". Я просто выделяю область чертежа, потом выделяю блок (например точку арматуры или блок обозначения хомута) и мне тут-же подсвечиваются эти боки на экране и выдается сообщение: "было выделено N объектов среди них найдено M блоков с названием ..." И я сразу записываю в спецификацию число хомутов стягивающих две сетки по смежным плоскостям блока. А теперь я могу выделять с помощью таких фильтров сразу множество одинаковых блоков, например точки стержней на проекциях сеток, и добавлять потом все выделенные объекты в блок: "СеткаС5_Спереди", "СеткаС5_Сбоку", "СеткаС5_План" и т.д. А далее можно крутить эти блоки проекции и прилаживать их к другим проекциям и проверять правильность вычерчивания сетки и настраивать шаг между стержнями чтобы стержни разных сеток не пересекались. Вот для чего мне нужна эта функция!
Если вы мне подскажите как обозначить ранее выделенные объекты в процессе выделения новых объектов я вам покажу все эти инструменты на одном листе и вы сможете оценить их работу. А сейчас времени пока нет надо чертежи армировать. Подумайте как это сделать. Мне кажется что придется красным цветом выделять ранее выделенные объекты, а после добавления новых объектов к ранее выделенным цвет надо будет заменить на старые цвета которые были до выделения. Это можно сделать и с весом линий. А какие у вас будут предложения? Может для этого есть специальная функция ЛИСП? Вопрос модератору: как включить интерактивную проверку грамматики и орфографии в сообщениях? Последний раз редактировалось МишаИнженер, 04.03.2021 в 05:04. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
типа тут на форуме каждый второй КЖ/КМ - чтобы воспринять этот поток сознания без каких либо иллюстраций) Только если будете править цвет примитивов - имхо, добавляйте им в расширенные данные исходный цвет, чтобы в случае сбоя приложения можно было восстановить исходное состояние одной командой.
|
|||
![]() |
|
||||
Регистрация: 24.01.2025
Сообщений: 3
|
Цитата:
'Вызовем команду выделения группы "Подсветка" objAcadDoc.SendCommand "(progn(defun ss-gripset (/ SS SR SSN I)(vl-load-com)(setq SS(vla-get-selectionsets(vla-get-activedocument (vlax-get-acad-object))) SSN(vla-item SS ""Подсветка"") SR(ssadd))(vlax-for I SSN (ssadd(vlax-vla-object->ename I)SR))(sssetfirst nil SR)(princ))(ss-gripset))\n " Почему-то короткое сообщение не ушло и цитаты не выделяются (Модератору). Это - гениально. Программа пошла. Не знаю Lisp (конечно нельзя гордиться этим, но ...). В знак благодарности могу поделиться набором функций по вычислению триангуляции ----- добавлено через ~3 мин. ----- Вот код построеня тела с помощью команды _LOFT Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 25.01.2025 в 16:25. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Потому что ушло на премодерацию.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Савелий Пак, у вас внутри кода одновременно и позднее связывание
Цитата:
Также интересное объявление инициализации массивов это вы вообще на каком языке программирования пишете то? |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Непонятно как добавить в макрос выбор всех объектов | NemoSUN | Программирование | 10 | 29.09.2020 10:28 |
Скрипт для получения Oject ID объекта и поиска объектов по Object ID на чертеже | modest-bp | AutoCAD | 2 | 19.04.2020 14:39 |
Количество объектов на чертеже | Protreck | AutoCAD | 15 | 03.07.2019 13:02 |
Какой командой можно взорвать все прокси объекты на чертеже | akot404 | AutoCAD | 1 | 25.06.2016 10:20 |
Autolisp. Как добавить в набор динамические блоки с определенными именем? | vladimirr_b | LISP | 10 | 23.02.2016 13:53 |