Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Lemieux от 23-03-2024, 18:53:05

Название: Событие выбора
Отправлено: Lemieux от 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. }
И результат во вложении.
Может кто-то знает, почему эвент вызывается несколько раз и так странно добавляет объекты к выделению?
Название: Re: Событие выбора
Отправлено: Привалов Дмитрий от 25-03-2024, 01:44:45
Может кто-то знает, почему эвент вызывается несколько раз
Код выложен не полный, и это лишь догадка.
Вероятно, у тебя каждый раз при запуске команды добавляется подписка на событие.
Application.DocumentManager.MdiActiveDocument.Editor.SelectionAdded += OnSelectionAdded;


и так странно добавляет объекты к выделению
Скорее всего при выделении рамкой при каждом попадании в рамку объекта вызывается данное событие.
Название: Re: Событие выбора
Отправлено: Lemieux от 25-03-2024, 08:03:15
Может кто-то знает, почему эвент вызывается несколько раз
Код выложен не полный, и это лишь догадка.
Вероятно, у тебя каждый раз при запуске команды добавляется подписка на событие.
Application.DocumentManager.MdiActiveDocument.Editor.SelectionAdded += OnSelectionAdded;
Подписка на событие происходит, когда инициализируется плагин.

и так странно добавляет объекты к выделению
Скорее всего при выделении рамкой при каждом попадании в рамку объекта вызывается данное событие.
Не важно как выделять, метод вызывается 6 раз при любом выделении.
Название: Re: Событие выбора
Отправлено: Привалов Дмитрий от 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 событий?
Название: Re: Событие выбора
Отправлено: Lemieux от 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 раз вызывается.
Название: Re: Событие выбора
Отправлено: alz от 26-03-2024, 08:04:23
А в каждом событии из 6/11 одни и те же ObjectId или разные? Может тут как-то распределено по группам объектов на каждую группу свое событие.
Название: Re: Событие выбора
Отправлено: Lemieux от 29-03-2024, 08:01:54
А в каждом событии из 6/11 одни и те же ObjectId или разные? Может тут как-то распределено по группам объектов на каждую группу свое событие.
ID одинаковые. Лично я никаких групп не видел. Как их можно определить?
Название: Re: Событие выбора
Отправлено: alz от 29-03-2024, 08:21:20
Та это было в форме предположения, может быть при выделении каких то объектов на разные типы срабатывали свои события, то есть выделил 100 объектов, 10 линий 5 таблиц 30 блоков и эти 100 объектов разошлись на твои 6 событий, но если одинаковые то хз.

В общем покрутил немного, имхо тут  только создавать списки, где будут храниться выбранные объекты и сравнивать при выборе, что бы обработчик прекращал работу если объекты выбора не изменились.
Название: Re: Событие выбора
Отправлено: Lemieux от 29-03-2024, 13:16:14
Та это было в форме предположения, может быть при выделении каких то объектов на разные типы срабатывали свои события, то есть выделил 100 объектов, 10 линий 5 таблиц 30 блоков и эти 100 объектов разошлись на твои 6 событий, но если одинаковые то хз.

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