Тема: Очистка блока (удаление содержимого)

Здравствуйте, уважаемые коллеги! Такая вот проблема у меня: надо удалить все объекты из блока...
my_block.Delete  вылетает Err <> 0. Могу предположить, это из-за того, что на чертеже есть такой блок.
Вычитала на этом замечательном форуме ещё такой способ:
ThisDrawing.SendCommand ("_purge" & vbCr & "b" & vbCr & "hatch_in_table" & vbCr & "y" & vbCr & "y" & vbCr)
Эффект следующий: команда делает вид, что срабатывает (в смысле, Err = 0), однако прежнее содержимое блока никуда не девается.
В справке ничего утешительного найти не удалось.
Ну, и вечный вопрос: Что делать? Буду очень рада любой помощи.

Re: Очистка блока (удаление содержимого)

Ой, неправильно написала... Если в SendCommand написать "-purge" (с минусом), то тогда ничего не происходит, а если написать "_purge" , то вылезают 2 какиих-то окошка, в первом из которых - список блоков для удаления (моего блока нет в этом списке), а во втором - создание блока. Что делать с этими окошками? Как сделать, чтоб блок очищался программно без всяких окошек?

Re: Очистка блока (удаление содержимого)

> masha
Маша молодец! Хорошую тему подняла. Ну что, монстры VBA, почему молчим?

Re: Очистка блока (удаление содержимого)

Я не монстр VBA, но, думаю, по работе с блоками я чего-то могу :)
1.

надо удалить все объекты из блока

Примерно так, наверное:

Sub EraseBlockContents(sBlockName As String)
Dim BlockDef As AcadBlock
Dim lEntity As AcadEntity
Dim lEntCounter As Long
  On Error GoTo lErrHandle
  Set BlockDef = ThisDrawing.Blocks.Item(sBlockName)
  For Each lEntity In BlockDef
    lEntity.Erase
  Next lEntity
  Exit Sub
lErrHandle:
  MsgBox Err.Description, vbOKOnly + vbCritical + vbApplicationModal
  Exit Sub
End Sub

Если надо удалять все вхождения блока (гарантированно), то надо выполнять нечто типа ThisDrawing.SelectionSet.Add("BLOCKS") и заполнять его по принципу fiType = "INSERT", <ИмяБлока> и filData = 0, 2
Только такой вариант не удалит блоки, входящие в другие. Поэтому я б попробовать пройтись по всей коллекции блоков и проверять там имя "удаляемого". Если есть, то ему либо .Explode и последующее .Delete, либо сразу .Delete. А уже потом ThisDrawing.PurgeAll.
---
ИМХО

Re: Очистка блока (удаление содержимого)

Спасибо!  Правда, я вышла из положения несколько другим способом - у меня блок должен быть в одном экземпляре на каждом Layout-e. Поскольку при шаманстве с одним Layout-ом остальные никуда не девались, то блок не хотел удаляться. Я просто сделала отдельный блок для каждого Layout-a (в смысле, имя уникальное) - теперь, вроде, пашет. А Алексею отдельное спасибо - чего-то я про lEntity.Erase не подумала... :)

Re: Очистка блока (удаление содержимого)

Стоп! Код удаляет СОСТАВ блока. А не его вхождения! Это две большие разницы!

Re: Очистка блока (удаление содержимого)

В моём случае вхождение удалялось само при удалении и вновь создании соответствующего Layout-a, так что очиста состава блока тоже в тему...