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

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

VBA: Как выбрать рамкой объекты

Ответ
Поиск в этой теме
Непрочитано 16.03.2020, 16:27 #1
VBA: Как выбрать рамкой объекты
fasadel
 
Регистрация: 17.03.2009
Сообщений: 316

Друзья. Простой, казалось бы, вопрос. Как запросить выделение объектов рамкой и получить соответствующую коллекцию?

Есть GetEntity, но тыкает только в точку, а не выделяет объект(ы) рамкой.

Обратился к SelectionSets. Но там целая история, надо создать именованный набор, добавлять есть в коллекцию наборов, если такой набор уже был создан, то вылезает ошибка... А мне надо просто получить коллекцию на один раз, что называется. Неужели нельзя как-то просто?
Просмотров: 5471
 
Непрочитано 16.03.2020, 16:47
#2
Boxa

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


Код:
[Выделить все]
Sub Example_SelectOnScreen()
    ' This example adds objects to a selection set by prompting the user
    ' to select ones to add.
    
    AppActivate ThisDrawing.Application.Caption
    
    ' Create the selection set
    Dim ssetObj As AcadSelectionSet
    Set ssetObj = ThisDrawing.SelectionSets.Add("TEST_SSET")
    
    ' Add objects to a selection set by prompting user to select on the screen
    ssetObj.SelectOnScreen
    
End Sub
Если что, это код из справки. и это и есть просто, просто за собой убирать нужно, т.е. удалять не нужное.

Порылся по форуму, тут посмотрите: https://forum.dwg.ru/showpost.php?p=...7&postcount=10
Boxa вне форума  
 
Автор темы   Непрочитано 16.03.2020, 16:53
#3
fasadel


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


Спасибо. Я это прочёл первым делом. Этот код создаёт именнованный SelectionSet который остаётся в коллекции всего селекшен-сетов. Если попробовать запустить
тот код повторно, то он вызовет ошибку, т.к. будет попытка создать селекшен-сет с уже существующем именем. Я же и пишу, что приходится проверять, существует ли он, удалять, если надо:

Код:
[Выделить все]
[VBA]
    Dim sset As AcadSelectionSet
    On Error Resume Next
    ThisDrawing.SelectionSets.Item("Frame").Delete
    On Error GoTo 0
    Set sset = ThisDrawing.SelectionSets.Add("Frame")
    sset.SelectOnScreen
[/VBA]
Меня интересует, нет ли способа проще? Без вот этой ё... с плясками.

_______

UPD: Всё ладно, если одной команды нет, то создам отдельную функцию под это дело, буду пользоваться.

Последний раз редактировалось fasadel, 16.03.2020 в 17:02.
fasadel вне форума  
 
Непрочитано 16.03.2020, 17:06
#4
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от fasadel Посмотреть сообщение
нет ли способа проще?
Какие пляски.. перед добавлением набора удалить его.
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 16.03.2020, 17:16
#5
Сергей812


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


Цитата:
Сообщение от fasadel Посмотреть сообщение
если одной команды нет, то создам отдельную функцию под это дело, буду пользоваться.
в том же .Net тоже будет не одна строка, так как первоначально только набор ObjectId получаешь встроенными функциями выборки, а лишь потом сами объекты из БД чертежа. А вы хотите в VBA одной строчкой встроенными функциями обойтись)
Сергей812 вне форума  
 
Автор темы   Непрочитано 16.03.2020, 17:22
#6
fasadel


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
А вы хотите в VBA одной строчкой встроенными функциями обойтись
После Javascript это конечно кажется дико. Но вот надо немного в Автокаде пошаманить. Начинаю подозревать, что VBA — это боль.
fasadel вне форума  
 
Непрочитано 16.03.2020, 18:01
1 | #7
nickname2019


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


Цитата:
Сообщение от fasadel Посмотреть сообщение
После Javascript это конечно кажется дико. Но вот надо немного в Автокаде пошаманить. Начинаю подозревать, что VBA — это боль.
VBA - это вселенские тормоза.
А если по-делу, мне кажется, что в коде удалить селекшн сет забыли после использования.
nickname2019 на форуме  
 
Непрочитано 16.03.2020, 18:41
#8
Сергей812


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


Цитата:
Сообщение от fasadel Посмотреть сообщение
Начинаю подозревать, что VBA — это боль.
просто сторонняя среда разработки, не обновлявшаяся уже много-много лет) Все остальное лишь следствие приделывания этого артефакта сбоку к программной модели акада..
Сергей812 вне форума  
 
Непрочитано 16.03.2020, 19:01
#9
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Тем не менее это пожалуй единственное, что скомпилированное один раз (Vb6) работает не взирая на версии и разрядность автокада)))
Ни дотнет ни арх этим похвастать не могут
Скажем так достоинство от недостатка)
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 16.03.2020, 19:01
#10
trir


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


для этой задачи - не важно на чём писать, везде криво
trir вне форума  
 
Непрочитано 16.03.2020, 19:26
#11
Сергей812


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


Offtop:
Цитата:
Сообщение от doctorraz Посмотреть сообщение
Тем не менее это пожалуй единственное, что скомпилированное один раз (Vb6) работает не взирая на версии и разрядность автокада)))
Ни дотнет ни арх этим похвастать не могут
внешнее COM-приложение (которое можно и на том же .Net с поздним связыванием написать): события ку-ку, контролы в контексте акада ку-ку и т.д... меня улыбают сказки про зависимость .Net от версии и разрядности акада - прямо такой супертруд в бесплатной студии убить ссылки на "старые" библиотеки и вставив новые, установить нужную версию Фреймворка и нажать пересобрать. Ведь у каждого второго представлена вся линейка версий акада на рабочих местах, что просто нереально поддерживать работоспособность надстроек)
Сергей812 вне форума  
 
Непрочитано 16.03.2020, 19:35
#12
trir


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


при желании можно собирать сразу под все версии и даже не только AutoCAD'а
trir вне форума  
 
Непрочитано 16.03.2020, 19:40
#13
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от trir Посмотреть сообщение
при желании можно собирать сразу под все версии и даже не только AutoCAD'а
Если не затруднит с этого места пожалуйста поподробнее, ну или хотя бы направление
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 16.03.2020, 19:58
1 | #14
trir


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


http://bushman-andrey.blogspot.com/2...t-autocad.html
trir вне форума  
 
Непрочитано 20.04.2020, 08:00
#15
Vov4ik86-2


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


Помогите разобраться!
В пространстве модели есть динамические блоки с атрибутами, сразу после вставки блока в модель у меня получается посмотреть его атрибуты при помощи:

Код:
[Выделить все]
Private Sub ()
Dim sset As AcadSelectionSet
Dim varAtts As Variant 
Dim objEnt As AcadBlockReference
On Error Resume Next
ThisDrawing.SelectionSets.Item("test").Delete
Set sset = ThisDrawing.SelectionSets.Add("test")
sset.SelectOnScreen
  
     For Each objEnt In sset
        Set objBRef = objEnt
        If objBRef.Name = "ОтводсПикетом2.0" Then
        varAttribs = objBRef.GetAttributes            
        MsgBox varAttribs(1).TextString  
        End If
  Next objEnt
End Sub
Как только я меняю его динамические свойства, блок становится невидим для этой операции, что происходит?

Последний раз редактировалось Кулик Алексей aka kpblc, 20.04.2020 в 08:48.
Vov4ik86-2 вне форума  
 
Непрочитано 20.04.2020, 08:14
#16
Boxa

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


Что происходит... при изменение дин. параметров, автокад создает новое анонимное определение блока с другим именем вида "*DXX", "*UXX"где Х - цифры, соответственно вот эта проверка не проходит
Цитата:
Сообщение от Vov4ik86-2 Посмотреть сообщение
If objBRef.Name = "ОтводсПикетом2.0" Then
Нужно сравнивать с эффективным именем блока.

Последний раз редактировалось Boxa, 20.04.2020 в 08:53.
Boxa вне форума  
 
Непрочитано 20.04.2020, 08:21
#17
Vov4ik86-2


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


Что-то гугл мне не помог, что значит с эффективным именем?
Vov4ik86-2 вне форума  
 
Непрочитано 20.04.2020, 08:49
#18
Кулик Алексей aka kpblc
Moderator

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


Замени
Код:
на
Код:
[Выделить все]
objBRef.EffectiveName
Boxa, *D - это блоки размеров. Дин.блоки получают имена *U
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.04.2020, 08:53
#19
Boxa

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Boxa, *D - это блоки размеров. Дин.блоки получают имена *U
Да, попутал...
Boxa вне форума  
 
Непрочитано 20.04.2020, 09:04
#20
Vov4ik86-2


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


Спасибо!
Теперь блок видно, а атрибуты типа "varAttribs(0).TextString" непонятно куда делись
Нажмите на изображение для увеличения
Название: кусок.jpg
Просмотров: 19
Размер:	45.9 Кб
ID:	225201
Vov4ik86-2 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA: Как выбрать рамкой объекты

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Разорвать объекты в точках пересечения. BreakObjects. VVA Готовые программы 110 25.02.2022 07:33
Как определить стоимость проектных работ, если не известна стоимость строительства? dextron3 Поиск литературы, чертежей, моделей и прочих материалов 37 27.08.2014 18:32
Autocad 2011 не выделяет объекты Tecka AutoCAD 6 21.11.2011 12:08
Группировка. Не выделяет объекты в линию. DiF AutoCAD 9 05.10.2010 16:29
пропали объекты с разных слоёв chili-9 AutoCAD 14 19.11.2009 17:14