Тема: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

Здравствуйте!
Можно ли сделать так:
1. Сформировать некоторый SelectionSet (например рамкой выделить часть объектов)
2. Все другие объекты из чертежа удалить.
Т.е. нет ли какой-нибудь функции проверки примитива на принадлежность SelectionSet?
Заранее спасибо

Re: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

Фнкция будет если ты ее сам напишешь.

Re: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

я с удовольствием, но как?

Re: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

Перебором, как еще то. ИМХО
Сравнивать по хендлам или ID.
Где-то здесь была уже подобная тема.

Re: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

спрошу по другому - есть ли возможность определить принадлежность примитива к определенному набору?

Re: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

> wl2000
Сначала создай набор где выбирается ВСЕ
Затем набор, где ты выбираешь рамкой
Затем циклом по второму набору из первого набора удаляешь объекты
входящие во второй набор
(См. метод RemoveItems в Help)
Затем методом Erase удаляешь все объекты
которые остались в первом наборе
~'J'~

Re: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

Я не знаю как записать условие (и возможно ли это):
Для каждого Объекта из "НабораВсехПримитивов"
     Если Объект не входит в "НаборРамкой" То
          Объект.Удалить
     Конец Если
Следующий объект

Re: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

Наоборот, если объект входит в набор-выделенных, то уаляем его из общего набора, а потом удаляем все объеты в общем наборе, как Фиксо прописал, так быстрее получится.

   Dim objItemEntity As AcadEntity
   Dim objItemEntity2 As AcadEntity
   Dim selSetAll As AcadSelectionSet
   Dim selSetSelected As AcadSelectionSet
   Dim objRemove(0) As AcadEntity
   'удаляем из общего набора элементы входящие в набор-выделенных
   For Each objItemEntity In selSetSelected
      For Each objItemEntity2 In selSetAll
         If objItemEntity.Handle = objItemEntity2.Handle Then
            Set objRemove(0) = objItemEntity2
            selSetAll.RemoveItems objRemove
            Exit For
         End If
      Next
   Next
   selSetAll.Erase

Вроде правильно,

Re: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

Вот, я оформил, но дает ошибку в третьей снизу строке. Что я написал не так?

Sub SS()
   Dim objItemEntity As AcadEntity
   Dim objItemEntity2 As AcadEntity
   Dim selSetAll As AcadSelectionSet
   Dim selSetSelected As AcadSelectionSet
   Dim objRemove(0) As AcadEntity
   Dim varPnt1 As Variant, varPnt2 As Variant
    With ThisDrawing.SelectionSets
    While .Count > 0
          .Item(0).Delete
    Wend
        Set selSetSelected = .Add("$frame$")
        Set selSetAll = .Add("$all$")
    End With
With ThisDrawing.Utility
   .InitializeUserInput 1
    varPnt1 = .GetPoint(, vbCr & "Pick the first corner: ")
    varPnt2 = .GetCorner(varPnt1, vbCr & "Pick other corner: ")
    selSetSelected.Select acSelectionSetWindow, varPnt1, varPnt2
    selSetAll.Select acSelectionSetAll
   For Each objItemEntity In selSetSelected
      For Each objItemEntity2 In selSetAll
         If objItemEntity.Handle = objItemEntity2.Handle Then
            Set objRemove(0) = objItemEntity2
            selSetAll.RemoveItems objRemove
            Exit For
         End If
      Next
   Next
   selSetAll.Erase'<-- Здесь дает ошибку Invalid Entity Name
End With
End Sub

Re: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

Может у тебя на чертеже есть объекты не подходящие под AcadEntity, пробуй AcadObject.
Может кто другой объяснит.

Re: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

Будем разбираться. Спасибо большое. Про сравнение по Handle не подумал.

Re: Можно ли удалить объект из чертежа, который не принадлежит некоторому набору

> wl2000
После того как создан набор, объект в него входящий никак не изменяется, не создается никаких на нем меток. Образно говоря, он не знает, что стал членом набора.
Мне кажется, что именно это тебя интересовало.