Аналог быстрого выбора

Автор Тема: Аналог быстрого выбора  (Прочитано 16148 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн serzh82saratovАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
Аналог быстрого выбора
« : 06-02-2017, 18:36:59 »
Всем добра!
Хочется узнать у бывалых, как под ActiveX / VBA воспроизвести аналог выбора (естественно без появления окна быстрого выбора).
Применить > Ко всему чертежу, Тип объектов > Несколько, Свойства > Цвет, Оператор > = Равно, Значение > Зеленый

И заодно узнать: после выбора, в ком. строке появляется кол-во выбранных объектов, как это самое кол-во извлечь?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог быстрого выбора
« Ответ #1 : 06-02-2017, 18:41:30 »
Метод SelectionSet.Select ... (с фильтром того, что тебе нужно выбрать)
Ну а количество выбранных даёт SelectionSet.Count
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн serzh82saratovАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
Re: Аналог быстрого выбора
« Ответ #2 : 06-02-2017, 18:56:15 »
Спасибо за ответ!
Под AutoCAD впервые что то пишу, про SelectionSet.Select читал но не понял что да как. Если это не слишком сложно, можете написать пример рабочего кода (строки с фильтром), думаю на примере пойму что к чему в справке.
SelectionSet.Count пробовал после выбора через окно, не работает. Очевидно что это применимо только для объекта через который я этот выбор сделал?

Попутно ещё вопрос, как узнать это количество если пользователь что то выбрал (выделил), или не количество а вообще узнать есть ли выделенные объекты? Надо выполнить _.erase, но если выделенного нет, то надо делать отмену команды, иначе просит выбрать объекты самому.
И до кучи: как получить текст журнала командной строки.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог быстрого выбора
« Ответ #3 : 06-02-2017, 19:12:27 »
И до кучи: как получить текст журнала командной строки.
Один вопрос - одна тема. Так что "до кучи" не получится.

Под AutoCAD впервые что то пишу, про SelectionSet.Select читал но не понял что да как. Если это не слишком сложно, можете написать пример рабочего кода (строки с фильтром), думаю на примере пойму что к чему в справке.
В справке есть пример готового кода:
Код - Visual Basic [Выбрать]
  1. Sub Example_Select()
  2.     ' This example adds members to a selection set, first by crossing and
  3.    ' then by filtering for circles.
  4.    
  5.     ' Create the selection set
  6.    Dim ssetObj As AcadSelectionSet
  7.     Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")
  8.    
  9.     ' Add all object to the selection set that lie within a crossing of (28,17,0) and
  10.    ' (-3.3, -3.6,0)
  11.    Dim mode As Integer
  12.     Dim corner1(0 To 2) As Double
  13.     Dim corner2(0 To 2) As Double
  14.    
  15.     mode = acSelectionSetCrossing
  16.     corner1(0) = 28: corner1(1) = 17: corner1(2) = 0
  17.     corner2(0) = -3.3: corner2(1) = -3.6: corner2(2) = 0
  18.     ssetObj.Select mode, corner1, corner2
  19.    
  20.     ' Add all the Circles to the selection set that lie within the crossing of (28,17,0) and
  21.    ' (-3.3, -3.6,0) by filtering from the current drawing
  22.    Dim gpCode(0) As Integer
  23.     Dim dataValue(0) As Variant
  24.     gpCode(0) = 0
  25.     dataValue(0) = "Circle"
  26.    
  27.     Dim groupCode As Variant, dataCode As Variant
  28.     groupCode = gpCode
  29.     dataCode = dataValue
  30.    
  31.     ssetObj.Select mode, corner1, corner2, groupCode, dataCode
  32.    
  33. End Sub

Если нужно выбирать из всего чертежа, то mode нужно присвоить acSelectionSetAll



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн serzh82saratovАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
Re: Аналог быстрого выбора
« Ответ #4 : 06-02-2017, 19:24:25 »
Цитировать
Mode
Access: Input-only

Type: AcSelect enum

acSelectionSetWindow
acSelectionSetCrossing
acSelectionSetPrevious
acSelectionSetLast
acSelectionSetAll
Type: enum - не могли объяснить? Это должен быть индекс в списке = 5?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог быстрого выбора
« Ответ #5 : 06-02-2017, 19:26:38 »
Кстати с набором предварительного выбора у VBA плохо. Получить его можно, а установить средствами VBA - нет. Так что рекомендую сразу перейти к AutoCAD .NET API и желательно C#, как самый распространённый и с максимальным количеством примеров.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог быстрого выбора
« Ответ #6 : 06-02-2017, 19:28:03 »
Это должен быть индекс в списке = 5?
Да.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн serzh82saratovАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
Re: Аналог быстрого выбора
« Ответ #7 : 06-02-2017, 19:31:47 »
Тут дело хуже, я даже не с VBA а на другом скриптовом языке, и к нему привязан, перейти не смогу. Но если есть костыли, то вполне.
То есть воспроизвести с помощью SelectionSet.Select аналогичные манипуляции как в окне, всё таки под VBA не получится?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог быстрого выбора
« Ответ #8 : 06-02-2017, 19:51:51 »
То есть воспроизвести с помощью SelectionSet.Select аналогичные манипуляции как в окне, всё таки под VBA не получится?
Объясни сначала что тебе нужно. То что ты написал - это не постановка задачи. Ведь зачем-то нужно выбирать примитивы? И наверное есть какая-то логика в этом выборе?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн serzh82saratovАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
Re: Аналог быстрого выбора
« Ответ #9 : 07-02-2017, 00:38:23 »
Не знаю, человеку надо удалить все зеленые "рамки" в чертеже.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог быстрого выбора
« Ответ #10 : 07-02-2017, 00:57:10 »
В AutoCAD'е нет примитива "рамка". Нужно знать что это такое. Это может быть полилиния, набор отрезков, вставка блока с рамкой, ещё чего-нибудь.
« Последнее редактирование: 17-05-2018, 14:02:08 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн serzh82saratovАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
Re: Аналог быстрого выбора
« Ответ #11 : 07-02-2017, 00:59:31 »
Цитировать
Применить > Ко всему чертежу, Тип объектов > Несколько, Свойства > Цвет, Оператор > = Равно, Значение > Зеленый
То есть из этого не льзя сделать вывод какие объекты выраны?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог быстрого выбора
« Ответ #12 : 07-02-2017, 01:03:19 »
То есть из этого не льзя сделать вывод какие объекты выраны?
Нужно потом будет анализировать все примитивы, которые попали в набор. В данный набор могли попасть еще и круги, тексты, дуги, лучи и т.д., которые явно к рамке отношения не имеют.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн serzh82saratovАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
Re: Аналог быстрого выбора
« Ответ #13 : 07-02-2017, 01:10:30 »
Скорее всего ответ уже был, а набор как получить?

Оффлайн serzh82saratovАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
Re: Аналог быстрого выбора
« Ответ #14 : 07-02-2017, 01:19:55 »
А ну да, в моём случае это PickfirstSelectionSet.