|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
27.02.2008, 23:59 | #1 | |
VBA SelectionSet
Highway Design
Tver
Регистрация: 16.09.2007
Сообщений: 27
|
||
Просмотров: 11585
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
А почему бы не сделать сам набор, а потом через For Each не проходить по нему и не выполнять нужные действия?
Возможно, в самой постановке задачи неверно что-то определено.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Highway Design Регистрация: 16.09.2007
Tver
Сообщений: 27
|
>>Кулик Алексей aka kpblc
То, что ты предлагаешь, я подразумевал под вариантом №3. Количество объектов порядка 100 000, количество отдельных фильтров около 100. Работать будет очень медленно. С помощью FilterType, FilterData выбор в разы быстрее. |
|||
|
||||
Highway Design Регистрация: 16.09.2007
Tver
Сообщений: 27
|
>>C1
Убрал, чего "не хватает" и "0:" в самом конце. У меня работает. Sub f2() Dim Selection As AcadSelectionSet Dim FilterType(0) As Integer Dim FilterData(0) As Variant On Error Resume Next ThisDrawing.SelectionSets.Item("ms").Delete Set Selection = ThisDrawing.SelectionSets.Add("ms") On Error GoTo 0 FilterType(0) = 0 FilterData(0) = "Circle" Selection.Select acSelectionSetAll, , , FilterType, FilterData MsgBox Selection.Count End Sub Но смысл не в этом. Завтра выложу подробный код, чтобы было понятнее, чего хочу добиться. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
Я вообще-то имел в виду следующее (при контроле, например, цвета примитива):
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
Только фильтровать по хендлам, ИМХО - безнадега полная.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Highway Design Регистрация: 16.09.2007
Tver
Сообщений: 27
|
>>C1
Цитата:
>>Кулик Алексей aka kpblc Цитата:
1.Выбираем объекты на экране и запоминаем их хендлы 2.Формируем требуемый фильтр, добавляем в него фильтр по хендлам и выбираем все элементы чертежа: Selection.Select acSelectionSetAll, , , FilterType, FilterData 3.Считаем то, что нам нужно Result = Fun(Selection) и опять шаг 2 пока не закончатся строки в таблице Проблема в том, что фильтр с кодом 5 не работает. >> Вот схема того, что я хочу получить (картинкой не получилось, см. вложения) A это рабочий вариант кода: Код:
'Selection.SelectOnScreen 'Думаю, что свою конкретную задачу я все-таки решу с помощью цикла, что-то вроде этого '(работать будет медленно, но верно): Код:
'Как применить встроенный механизм фильтрации (FilterType, FilterData) к уже существующему набору. |
|||
|
||||
Регистрация: 13.06.2005
Сообщений: 314
|
Ну если работают все фильтры кроме по handle - можно же после фильтра по всем признакам кроме handle проверить по handle в обычном цикле. Или если объектов все равно останется много проверить по свойствам каждый объект отобранный через HandleToObject тоже в цикле.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
что за таблица? Откуда она берется и заполняется?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Highway Design Регистрация: 16.09.2007
Tver
Сообщений: 27
|
>>C1
Цитата:
>>Кулик Алексей aka kpblc Приложение будет предназначено для определения объемов работ при строительстве линейных объектов (например установка бортовых камней, дорожных ограждений, перильных ограждений, дорожная разметка, трубопроводы и т.п.) Таблица заполняется пользователем (или загружается из файла, если была создана ранее) и имеет следующие поля №: Наименование: просто строка Имя слоя: имя слоя выбранное из списка слоев документа Тип линии: также выбирается из списка ... Результат: в простейшем случае просто длина линий, находящихся в слое и имеющих определенный тип линии. В более общем случае результатом будут объемы работ. Причем Объем = Fun(Длина линии) |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
Я бы организовывал вложенные циклы - наружний по набору; внутренний - по критериям отбора (он-то всяко короче будет). Мелькнула мысль насчет использования Collection, но я в них особо не секу
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Highway Design Регистрация: 16.09.2007
Tver
Сообщений: 27
|
Кулик Алексей aka kpblc
Цитата:
В итоге думаю поступить так: 1.Выбираем объекты на экране Selection.SelectOnScreen (Так как меня интересуют только длины, то тут же применим фильтр на выбор только линейных объектов), запоминаем их Handle. 2.Формируем фильтр F(i) для строки 3.Выбираем все элементы чертежа по данному фильтру Selection.Select acSelectionSetAll, , , FilterType, FilterData 4.В цикле сверяем Handle объекта, с теми, что запомнили в п.1: Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
DXF Reference
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Пароль к VBA | karp_b | Программирование | 24 | 29.08.2013 12:43 |
ActiveX Automation из VBA | karp_b | Программирование | 5 | 14.09.2007 18:05 |
VBA vs LISP | Kosenko Sasha | LISP | 23 | 06.03.2007 02:56 |
VBA пароль при открытии | Dima_kr | Программирование | 3 | 05.02.2007 16:52 |
Не могу найти коды DXF для selectionset в VBA... | ssn | Программирование | 4 | 06.12.2003 17:19 |