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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как добавить объекты в текущий набор выделенных объектов на чертеже на VBA?

Как добавить объекты в текущий набор выделенных объектов на чертеже на VBA?

Ответ
Поиск в этой теме
Непрочитано 09.02.2021, 12:45 #1
Как добавить объекты в текущий набор выделенных объектов на чертеже на VBA?
МишаИнженер
 
Регистрация: 14.12.2008
Сообщений: 1,079

Подскажите пожалуйста код на VBA для добавления объектов в текущий набор выделенных объектов на чертеже.
Просмотров: 14113
 
Непрочитано 10.02.2021, 09:36
1 | #2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Код:
[Выделить все]
AcadSelectionSet.AddItems
Сергей812 вне форума  
 
Непрочитано 19.02.2021, 11:45
#3
Vadim_EC


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


Не уверен, но скорее всего надо связываться с LISP.
Vadim_EC вне форума  
 
Автор темы   Непрочитано 01.03.2021, 11:02
#4
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Сергей,
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
AcadSelectionSet.AddItems
Чтобы воспользоваться возможностями этого метода надо создать набор выделенных на текущий момент объектов чертежа.
А как это сделать на VBA? Как создать набор выделенных объектов на чертеже (подсвеченных синими квадратиками) на VBA?
МишаИнженер вне форума  
 
Непрочитано 01.03.2021, 11:29
#5
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


http://entercad.ru/acadauto.en/
trir вне форума  
 
Непрочитано 01.03.2021, 11:32
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Если имеются в виду выделенные пользователем примитивы - то ActiveSelectionSet, насколько помню.
Сергей812 вне форума  
 
Автор темы   Непрочитано 01.03.2021, 12:38
#7
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Начертил 5 линий и 3 из них выделил.
Затем запустил функцию:
Код:
[Выделить все]
Public Sub ДобавитьОбъектыКВыделеннымОбъектам()
'Функция добавляет объекты к выделенным объектам
Dim objПриложениеAutoCAD As AcadApplication, objAcadDoc As AcadDocument
Dim objТекВыдОбъекты As AcadSelectionSet, objSelection As AcadSelectionSet
Dim mОбъекты() As AcadEntity
Dim I As Long, J As Long, K As Long, L As Long
On Error GoTo ОбработкаОшибок
'Получить объекты Excell и AutoCAD
   Call ПолучитьОбъектыExcellИAutoCAD(objПриложениеAutoCAD, objAcadDoc)

'Получим список выделенных объектов на чертеже
   Set objТекВыдОбъекты = objAcadDoc.ActiveSelectionSet
   objТекВыдОбъекты.Highlight True
   I = objТекВыдОбъекты.count
'Получим список объектов чертежа
   Call ПоказатьAutoCAD(objAcadDoc)
   If ПризнакНаличияЭлементаВКоллекции("ВыделенныеОбъекты", objAcadDoc.SelectionSets, 2) Then
      objAcadDoc.SelectionSets("ВыделенныеОбъекты").Delete
   End If
   Set objSelection = objAcadDoc.SelectionSets.Add("ВыделенныеОбъекты")
      
On Error Resume Next
ВыделитьОбъекты:
   Call ПоказатьAutoCAD(objAcadDoc)
   objSelection.SelectOnScreen
   J = objSelection.count
   ReDim mОбъекты(0 To I + J - 1) As AcadEntity
   For L = 0 To I - 1
      Set mОбъекты(L) = objТекВыдОбъекты(L)
   Next L
   For L = 0 To J - 1
      Set mОбъекты(I + L) = objSelection(L)
   Next L
On Error GoTo ОбработкаОшибок

'Добавим выделенные объекты в текущий набор объектов
   objAcadDoc.ActiveSelectionSet.AddItems mОбъекты
   K = objAcadDoc.ActiveSelectionSet.count
   objAcadDoc.ActiveSelectionSet.Highlight True
   
'Выведем сообщение о выполненной работе
   objAcadDoc.Utility.Prompt "К текущему набору из " & I & " объектов было добавлено " & J & " выделенных объектов" & vbCrLf & _
   "Всего в текущем наборе объектов " & K & " объектов" & vbCrLf
   
   Exit Sub
ОбработкаОшибок:
   glngОтвет = MsgBox("При добавлении выделенных объектов произошла ошибка:" & vbLf & _
         "номер = " & Err.Number & vbLf & _
         "с описанием: " & Err.Description & vbLf & vbLf & _
         "Продолжать выполнение программы?", vbYesNo, gsНазваниеПрограммы)
   If glngОтвет = vbNo Then Exit Sub
   Resume Next
End Sub
и выделил ещё 2 линии.
Почему моя функция выдает отчет что текущий набор объектов состоит из 2 линий? А должен состоять из 5 линий.
Заметил такую особенность: выделяю 3 линии и запускаю мою функцию, и функция выделяет в качестве текущих выделенных линий только 2 линии, которые я добавлял в набор текущих выделенных линий при предыдущем запуске функции. Получается АвтоКАД запомнил прошлые 2 линии в качестве текущих, а новые выделенные линии на экране не стал считать текущим набором выделенных линий. Появляется вопрос: после какого действия выделенные объекты попадают в текущий набор выделенных объектов?
Попробуйте сами запустить мою программу.
АвтоКАД не хочет записывать выделенные объекты в текущий набор выделенных объектов без дополнительного действия.
Если функция не запускается, настройте библиотеки для вышей версии АутоКАД (Tools->References)
Вложения
Тип файла: zip Добавление объектов.zip (79.4 Кб, 8 просмотров)

Последний раз редактировалось МишаИнженер, 01.03.2021 в 13:00. Причина: Добавление файла
МишаИнженер вне форума  
 
Непрочитано 01.03.2021, 12:56
| 1 #8
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


МишаИнженер, от Вашего кода кровь из глаз пошла, все совсем плохо и с кодом и с пониманием базовых механизмов языка.
И хотя, я не совсем понимаю что Вы хотите сделать, но мне кажется, что Вам следует гуглить фразу "autocad vba pickfirstselectionset"
ну или посмотреть сайт который Вам ранее уже указывали: http://entercad.ru/acadauto.en/ex_pi...lectionset.htm
Boxa вне форума  
 
Автор темы   Непрочитано 01.03.2021, 13:03
#9
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Цитата:
Сообщение от Boxa Посмотреть сообщение
все совсем плохо и с кодом и с пониманием базовых механизмов языка
У меня все работает. Не понимаю что вас не устраивает. Скачайте файл Excel из сообщения #7 и запустите функцию сами.
Добавил метод "PickfirstSelectionSet"
Жалко что этот метод "только для чтения"
PickfirstSelectionSet
SelectionSet object; read only
В итоге функция не выполняет требуемых действий: не добавляет выделенные объекты к текущему набору выделенных объектов
К настроить работу функции, чтобы она выполняла свою задачу? (Запустите функцию из файла Excel из прикрепленного файла)
Вложения
Тип файла: zip Добавление объектов (v2).zip (79.5 Кб, 6 просмотров)

Последний раз редактировалось МишаИнженер, 01.03.2021 в 13:17.
МишаИнженер вне форума  
 
Непрочитано 01.03.2021, 13:13
#10
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
У меня все работает. Не понимаю что вас не устраивает.
Господь с Вами, меня все устраивает, мне с этим не работать, хвала Дионису, я так мимо пробегая посмотрел, этого хватило.
Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
В итоге функция не выполняет требуемых действий: не добавляет выделенные объекты к текущему набору выделенных объектов
Может стоит создать свой набор, куда добавлять выбранные заранее объекты?
Boxa вне форума  
 
Автор темы   Непрочитано 01.03.2021, 13:19
#11
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Вроде так и делаю. Однако в этот набор добавляются объекты выделенные при работе функции. А объекты выделенные до работы функции почему-то не выделяются после завершения работы функции.
Почему так происходит?
Модернизировал функцию. Теперь выделенные "до" и "вовремя" объекты просто выделяются (подсвечиваются) на экране как буд-то выбранные.
Однако многие программисты на VBA знают что "подсвеченный" и "выбранный" объекты это совсем разные вещи.
"Подсвеченные" объекты это просто мистика и мишура, их нельзя дальше использовать ни в каких действиях.
В этом можно убедиться если попробовать запустить функцию "Создать блок" и попытаться выбрать объекты из чертежа с ключом "т" ("текущий" набор объектов)
При этом выделятся последние выбранные объекты полученные при работе функции. А выбранные объекты до работы функции забываются и не выделяются.
Как сделать чтобы выбранные объекты до работы функции попали в текущий набор выделенных объектов?
Где хранится текущий набор выделенных объектов? В каком словаре?
Вложения
Тип файла: zip Добавление объектов (v3).zip (79.7 Кб, 2 просмотров)

Последний раз редактировалось МишаИнженер, 01.03.2021 в 13:40.
МишаИнженер вне форума  
 
Непрочитано 01.03.2021, 16:15
#12
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


в VBA вроде нет встроенного выделения примитивов на чертеже, через костыли на том же лиспе
Сергей812 вне форума  
 
Непрочитано 01.03.2021, 18:13
1 | #13
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


МишаИнженер, Вас в гугле забанили? Первые же ссылки по фразе Autocad VBA add to PickfirstSelectionSet
Приводят на форум, где это решено: https://forums.augi.com/showthread.p...-active-in-GUI
Boxa вне форума  
 
Непрочитано 01.03.2021, 18:27
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Насколько понимаю, ему надо сделать набор выделенных примитивов - чтобы потом в диалоге создания блока снова не выбирать.
Сергей812 вне форума  
 
Непрочитано 01.03.2021, 18:42
#15
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Ну фиг знает... название темы: Как добавить объекты в текущий набор выделенных объектов на чертеже на VBA?
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
чтобы потом в диалоге создания блока снова не выбирать.
А почему сразу блок не сделать? Зачем его делать в диалоговом окне?
Boxa вне форума  
 
Автор темы   Непрочитано 02.03.2021, 04:41
#16
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Часто приходится выделять множество объектов очень труднодоступных и в большом количестве. Поэтому нужен инструмент позволяющий выделять объекты с помощью фильтров по слою, по цвету и весу линий. Спасибо Вохе за интересную ссылку. Там есть очень интересные решения!
МишаИнженер вне форума  
 
Непрочитано 02.03.2021, 08:09
#17
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
Поэтому нужен инструмент позволяющий выделять объекты с помощью фильтров по слою, по цвету и весу линий.
В автокаде же есть не только быстрый выбор, но и команда выбора с фильтром (FILTER)... хотя Вам лучше знать.
Boxa вне форума  
 
Автор темы   Непрочитано 02.03.2021, 10:53
#18
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Добавил в программу метод использования групп, но команда
Код:
[Выделить все]
"Select" & vbCr & "g" & vbCr & "TEMPGROUP"
не работает.
Какая команда является аналогом в русском АвтоКАДе, чтобы можно было попросить выделить группы и указать имя группы в ответ на запрос выделить объекты?
Вложения
Тип файла: zip Добавление объектов (v4).zip (80.3 Кб, 2 просмотров)
МишаИнженер вне форума  
 
Непрочитано 02.03.2021, 12:48
#19
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


"_.Select" & vbCr & "g" & vbCr & "TEMPGROUP"
Boxa вне форума  
 
Непрочитано 02.03.2021, 17:10
#20
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,767


_g
engngr вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как добавить объекты в текущий набор выделенных объектов на чертеже на VBA?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятно как добавить в макрос выбор всех объектов 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