Событие выбора

Автор Тема: Событие выбора  (Прочитано 6575 раз)

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

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Событие выбора
« : 23-03-2024, 18:53:05 »
Всех приветствую.
Есть вот такой код

Код - C# [Выбрать]
  1. Application.DocumentManager.MdiActiveDocument.Editor.SelectionAdded += OnSelectionAdded;
  2.  
  3. void OnSelectionAdded(object sender, SelectionAddedEventArgs e)
  4. {
  5.     Document doc = Application.DocumentManager.MdiActiveDocument;
  6.     ObjectId[] addedIds = e.AddedObjects.GetObjectIds();
  7.     ObjectId[] selectionSet = e.Selection.GetObjectIds();
  8.     doc.Editor.WriteMessage("\n");
  9.     doc.Editor.WriteMessage($"Добавлено : {addedIds.Length} Выделено : {selectionSet.Length}\n");
  10. }
И результат во вложении.
Может кто-то знает, почему эвент вызывается несколько раз и так странно добавляет объекты к выделению?

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Событие выбора
« Ответ #1 : 25-03-2024, 01:44:45 »
Может кто-то знает, почему эвент вызывается несколько раз
Код выложен не полный, и это лишь догадка.
Вероятно, у тебя каждый раз при запуске команды добавляется подписка на событие.
Application.DocumentManager.MdiActiveDocument.Editor.SelectionAdded += OnSelectionAdded;


и так странно добавляет объекты к выделению
Скорее всего при выделении рамкой при каждом попадании в рамку объекта вызывается данное событие.

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Событие выбора
« Ответ #2 : 25-03-2024, 08:03:15 »
Может кто-то знает, почему эвент вызывается несколько раз
Код выложен не полный, и это лишь догадка.
Вероятно, у тебя каждый раз при запуске команды добавляется подписка на событие.
Application.DocumentManager.MdiActiveDocument.Editor.SelectionAdded += OnSelectionAdded;
Подписка на событие происходит, когда инициализируется плагин.

и так странно добавляет объекты к выделению
Скорее всего при выделении рамкой при каждом попадании в рамку объекта вызывается данное событие.
Не важно как выделять, метод вызывается 6 раз при любом выделении.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Событие выбора
« Ответ #3 : 25-03-2024, 10:00:50 »
Не важно как выделять, метод вызывается 6 раз при любом выделении.
1.
https://www.theswamp.org/index.php?topic=31864.0
Протестируй их вариант, внутри команды подписа и отписка от события.
ed.SelectionAdded += onSelectionAdded;
PromptSelectionResult psr = ed.GetSelection(opt);
ed.SelectionAdded -= onSelectionAdded;

2. Попробуй сравнить выделение рамкой и через выделить все Ctrl+A, то же будет 6 событий?

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Событие выбора
« Ответ #4 : 25-03-2024, 20:56:26 »
Не важно как выделять, метод вызывается 6 раз при любом выделении.
1.
https://www.theswamp.org/index.php?topic=31864.0
Протестируй их вариант, внутри команды подписа и отписка от события.
ed.SelectionAdded += onSelectionAdded;
PromptSelectionResult psr = ed.GetSelection(opt);
ed.SelectionAdded -= onSelectionAdded;

2. Попробуй сравнить выделение рамкой и через выделить все Ctrl+A, то же будет 6 событий?
1. Мне нужно без команды, а только знать, что человек выбрал
2. Если нажать CTRL+A то вообще 11 раз вызывается.

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 95
  • Карма: 11
Re: Событие выбора
« Ответ #5 : 26-03-2024, 08:04:23 »
А в каждом событии из 6/11 одни и те же ObjectId или разные? Может тут как-то распределено по группам объектов на каждую группу свое событие.

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Событие выбора
« Ответ #6 : 29-03-2024, 08:01:54 »
А в каждом событии из 6/11 одни и те же ObjectId или разные? Может тут как-то распределено по группам объектов на каждую группу свое событие.
ID одинаковые. Лично я никаких групп не видел. Как их можно определить?

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 95
  • Карма: 11
Re: Событие выбора
« Ответ #7 : 29-03-2024, 08:21:20 »
Та это было в форме предположения, может быть при выделении каких то объектов на разные типы срабатывали свои события, то есть выделил 100 объектов, 10 линий 5 таблиц 30 блоков и эти 100 объектов разошлись на твои 6 событий, но если одинаковые то хз.

В общем покрутил немного, имхо тут  только создавать списки, где будут храниться выбранные объекты и сравнивать при выборе, что бы обработчик прекращал работу если объекты выбора не изменились.
« Последнее редактирование: 29-03-2024, 09:58:15 от alz »

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Событие выбора
« Ответ #8 : 29-03-2024, 13:16:14 »
Та это было в форме предположения, может быть при выделении каких то объектов на разные типы срабатывали свои события, то есть выделил 100 объектов, 10 линий 5 таблиц 30 блоков и эти 100 объектов разошлись на твои 6 событий, но если одинаковые то хз.

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