VBA Как передать в макрос вбранные объекты
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

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

VBA Как передать в макрос вбранные объекты

Ответ
Поиск в этой теме
Непрочитано 21.03.2011, 21:49 #1
VBA Как передать в макрос вбранные объекты
gizmo_zx
 
Проектировщик ЭО,ЭМ, ЭОС
 
Нижний Новгород
Регистрация: 18.07.2007
Сообщений: 257

Добрый день.
Есть программа для поиска блока по "имени, названию тега, содержимому тега".
Найденные объекты остаются подсвеченные.
Т.е. остается именованный SelectionSets "$Attribs$"

Код:
[Выделить все]
         With ThisDrawing.SelectionSets
               While .Count > 0
                    .Item(0).Delete
               Wend
          Set nSset = .Add("$Attribs$")
          End With
Вопрос как повторно запуская макрос передать ему уже обработанные SelectionSets "$Attribs$", а не выбирать в экрана.

Вложения
Тип файла: zip US.zip (27.1 Кб, 150 просмотров)

Просмотров: 4665
 
Непрочитано 21.03.2011, 22:42
#2
Кулик Алексей aka kpblc
Moderator

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


Попробуй использовать нечто типа ImpliedSelection или PreviousSelection. К сожалению, VBA уже очень давно не пользовался, даже справки - и той на машине нет
P.S. Не уверен, но может сработать acSelectionSetPrevious
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 21.03.2011 в 22:53.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.03.2011, 23:01
#3
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Можно еще сохранить в словаре
key:=oEnt.Handle, value:=oEnt.ObjectId

Потом можно достать их оттуда:

Код:
[Выделить все]
Set oEnt=Thisdrawing.HandleToObject(item.Key)
Или
Код:
[Выделить все]
Set oEnt=Thisdrawing.ObjectIdToObject (item.Value)
Первое что пришло в голову...
Олег (jr.) вне форума  
 
Непрочитано 21.03.2011, 23:04
#4
Кулик Алексей aka kpblc
Moderator

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


А не проще в таком случае будет вообще хранить хендлы объектов как массив строк? Ну или вообще создать пользовательский тип данных и уже из него делать массив?
Или это будет слишком затратное решение?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.03.2011, 23:07
#5
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Согласен, проще создать копию:
Код:
[Выделить все]
      Dim oSset As AcadSelectionSet
          With ThisDrawing.SelectionSets
               While .Count > 0
                    .Item(0).Delete
               Wend
          Set oSset = .Add("NewOne")
          End With
oSset.SelectOnScreen

Dim newSset As AcadSelectionSet
Set newSset = oSset
Олег (jr.) вне форума  
 
Непрочитано 21.03.2011, 23:21
#6
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Плохо понял суть, но попробую посоветовать )

1. Получать объекты из ранее созданного набора.
- Нет гарантии, что он еще будет, т.к. другие макросы могут почистить наборы (я так всегда делаю ).
- Нет гарантии, что объекты еще будут находится на чертеже (пользователь, между запусками макроса, может удалить объекты на чертеже). Что, приведет к ошибке.
- Работает только в одном сеансе. Т.е. наборы не сохраняются между сеансами акада.

2. Сохранять список объектов самому. Записывать id или handle, и по ним находить объекты в базе.
- более правильно, по-моему.

Возможно, есть еще решения, и более эффективные.

Опс, облажался, не обновил ленту. Сорри.
Vildar вне форума  
 
Автор темы   Непрочитано 22.03.2011, 08:47
#7
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Между сеансами сохранение не требуется.
Просто хотел фильтровать из общей массы по одному параметру, а потом уточнять по другому в уже найденом.

Только не понял как передать уже именованый массив, в место oSset.SelectOnScreen?
Хотя наверно это делать лучше не перезапуском макроса?

т.е. задача организовать повторное применение "фильтра" к уже найденному...
gizmo_zx вне форума  
 
Непрочитано 22.03.2011, 09:03
#8
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
Просто хотел фильтровать из общей массы по одному параметру, а потом уточнять по другому в уже найденом.
Перебирай объекты в наборе и заноси в новый набор или в массив/коллекцию.
Vildar вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA Как передать в макрос вбранные объекты



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить стоимость проектных работ, если не известна стоимость строительства? dextron3 Поиск литературы, чертежей, моделей и прочих материалов 37 27.08.2014 18:32
перестал работать VBA макрос kvv0476 Программирование 15 13.01.2011 16:08
"Расчет ведомости отправочного элемента. Макрос VBA Excel." Вопросы и ответы по програмке. Brain Murder Программирование 4 13.12.2010 18:42
нарисовать полилинию и запустить макрос VBA gizmo_zx Программирование 8 24.12.2008 08:47
Измнение через ексель (через макрос в VBA) аттрибутов динамического блока VitaminC Программирование 4 20.10.2007 14:52