Тема: Как добавить в набор только блоки?
Сделал программу по составлению спецификации в EXCEL. Обрабатываю файлы DWG. Учитываются блоки с атрибутами.
Делаю так:
... ' работаем с открытым в фоновом режиме файлом DWG из Excel'я Set elem = ACADApp For Each elem In ACADApp.ActiveDocument.ModelSpace With elem If .EntityName = "AcDbBlockReference" Then .... End If End With Next elem
Работает ужасно долго, т.к. перебирает все элементы чертежа.
В другой своей программе использую код, который нашел на просторах этого форума:
Public elem As Object ... Sub ОбработкаТекущегоЛистаACAD(i As Integer) Set elem = ACADApp Dim objSelSet Dim objSelCol Dim intType(0) As Integer Dim varData(0) As Variant ... BlockName = "Штамп" Set objSelCol = ACADApp.ActiveDocument.SelectionSets For Each objSelSet In objSelCol If objSelSet.Name = "BlockSelect" Then objSelSet.Delete Exit For End If Next Set objSelSet = objSelCol.add("BlockSelect") intType(0) = 2 varData(0) = BlockName objSelSet.Select 5, filtertype:=intType, filterdata:=varData For Each elem In objSelSet If elem.EntityName = "AcDbBlockReference" Then 'проверяем на всякий случай '(а вдруг что не так?) With elem ... End With End If Next elem
Код работает только с блоками с именем "Штамп". Естественно, что этот код намного быстрее.
Попытался изменить свой первый код, но без указания конкретного имени блока, т.к. нужны все блоки (ну почти все, но отбраковка идет уже потом).
Пробовал убирать из строки формирования выборки упоминание об имени блока, но не пошло:
Было
objSelSet.Select 5, filtertype:=intType, filterdata:=varData
Делал так:
objSelSet.Select 5, filtertype:=intType
Подскажите - как правильно сделать выборку из блоков?