Тема: Команда ERASE и SelectOnScreen

Всем Доброго Времени Суток!
Есть задумка чтоб при вызове команды ERASE выбранные пользователем объекты попадали в selection set обрабатывались по определенному алгоритму и после удалялись.
Написал следующий код:

Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
Dim mySelSet As AcadSelectionSet
Dim mySetCol As AcadSelectionSets
Set mySetCol = ThisDrawing.SelectionSets
    For Each mySelSet In mySetCol
        If mySelSet.Name = "SelObj" Then mySelSet.Delete
        Exit For
    Next
If CommandName = "ERASE" Then
    Set mySelSet = ThisDrawing.SelectionSets.Add("SelObj")
    mySelSet.SelectOnScreen
End If
End Sub

Но в случае его использования объекты приходится выбирать дважды. Насколько я первый раз они выбираются методом SelectOnScreen, а второй раз непосредственно средствами команды ERASE.
Подскажите как то можно использовать набор формируемый самой команды ERASE. Или же как передавать команде ERASE набор созданный SelectOnScreen.

Re: Команда ERASE и SelectOnScreen

https://www.caduser.ru/forum/topic27405.html
https://www.caduser.ru/forum/topic22906.html
https://www.caduser.ru/forum/topic12661.html

Re: Команда ERASE и SelectOnScreen

> kpblc
можно ли использовать набор объектов, который создается при использовании команды ERASE и если да то как к нему добраться.

Re: Команда ERASE и SelectOnScreen

Так это либо активный SelectionSet, либо PickFirstSelectionSet, насколько я понимаю. Вот к ним и обращаться, наверное, надо. Я в VBA не очень...

Re: Команда ERASE и SelectOnScreen

Может быть вот так? Во всяком случае, ничего более остроумного не смог придумать...

Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
    If (CommandName = "ERASE") Then
       Call EntityDelete
       SendKeys "{Esc}"
       Exit Sub
    End If
End Sub
Private Sub EntityDelete()
    Dim sset As AcadSelectionSet
    Dim vEntity As AcadEntity
    Set sset = ThisDrawing.PickfirstSelectionSet
        If (sset.Count = 0) Then
            MsgBox "First of all select objects on the screen!" & vbCrLf & "Try again."
            Exit Sub
        ElseIf (sset.Count > 0) Then
            For Each vEntity In sset
                MsgBox vEntity.Handle
                vEntity.Delete
             Next vEntity
        End If
End Sub

Re: Команда ERASE и SelectOnScreen

> LeonidSN
Спасибо такую структуру я и использовал.

Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
If CommandName = "ERASE" Then
    Module1.Del_Element
End If
End Sub

Кто может подсказать что заносится в ActiveSelectionSet?
Заглянул в него через отладчик там вообще находится объект который даже не выбран :(

Re: Команда ERASE и SelectOnScreen

Этот объект был выбран...

Re: Команда ERASE и SelectOnScreen

> Dmi3i4
Посмотри на > kpblc (2006-10-23 15:39:32) - может, причина именно в другом наборе?

Re: Команда ERASE и SelectOnScreen

> Dmi3i4
ActiveSelectionSet, является read-only  -объектом. Перезаписывается, только когда происходит следующее выделение.
Этот объект, о котором Вы говорите, скорее всего был выбран раньше.

Re: Команда ERASE и SelectOnScreen

> Сидор Лютый
Спасибо за разъяснения
Всем спасибо за помощь !!!

Re: Команда ERASE и SelectOnScreen

> Dmi3i4

> Dmi3i4
Если проблема решена - прекрасно.
Но все-таки, предложенное мной решение отличается от вашего тем. что прерывается выполнение команды ERASE:

SendKeys "{Esc}"

Судя по вашему коду выполнение команды продолжается. И одновременно исполняется процедура: Module1.Del_Element.
То есть вы порождаете два независимых процесса и создаете тем самым неуправляемую ситуацию.
Или, возможно, вы чего-то не договариваете?...

Re: Команда ERASE и SelectOnScreen

> LeonidSN
Дело в том что моя процедура Module1.Del_Element не удаляет элементы она лишь обрабатывает информацию, которая находится в атрибутах, удаляемых блоков. Удаление выполняется командой ERASE.

Re: Команда ERASE и SelectOnScreen

> Dmi3i4
А что будет, если Пользователь сначала вызовет команду ERASE а потом начнет выбор примитивов на экране?

Re: Команда ERASE и SelectOnScreen

> LeonidSN
Да действительно необходимо использовать
SendKeys "{Esc}", чтоб исключить подобную ситуацию.