Добрый вечер, очередная проблема:
1. В листах нахожу блоки и взрываю их
2. Нахожу количество объектов до взрыва и после взрыва.
3. Количество объектов после взрыва показывает неверно. Вернее показывает так, словно копирование блоков прошло, а сами блоки не взорваны. По завершению процедуры количество объектов значительно отличается от того, что показывает AutoCAD.
Попробую еще проще объяснить:
1. Открываем чертеж
2. Создаем лист
3. В листе создаем прямоугольник и внутри прямоугольника 100 любых объектов (линии, круги и т.п.)
4. Превращаем все эти объекты в блок
5. Удаляем все посторонние объекты, затем в этот же лист вставляем блок (внутри блока 101 объект)
6. Если выделить все объекты листа, то в свойствах можно увидеть, что объект лишь 1!
7. Затем выполняем процедуру, которая написана в коде
8. В результате количество объектов до взрыва будет 2 (туда, видимо спрятался скрытый видовой экран), а после взрыва покажет 3 объекта!
9. Теперь выделяем все объекты на экране и что мы видим? 102 объекта!
И как теперь быть?
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Interop
Imports Autodesk.AutoCAD.Interop.Common
<CommandMethod("GALAUTODESKENTITIESSHOW", CommandFlags.Session)> _
Public Sub SPDS_Autodesk_Entities()
Dim acApp As IAcadApplication = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication
Dim acDoc As IAcadDocument = acApp.ActiveDocument
For Each acLayout As IAcadLayout In acDoc.Layouts
acDoc.ActiveLayout = acLayout
acApp.ZoomExtents()
Select Case Strings.Trim(acLayout.Name)
Case "Model", "Модель", "Элементы оформления"
Case Else
Dim acSelSet As IAcadSelectionSet = acDoc.SelectionSets.Add("SS" & acLayout.Name)
acSelSet.SelectOnScreen()
MsgBox("Before: " & acDoc.ActiveLayout.Block.Count) ' Здесь есть подвох (какой? не понятно!)
acDoc.SendCommand("_ctab" & vbCr & acLayout.Name & vbCr)
For Each acEntity As IAcadObject In acSelSet
Select Case acEntity.ObjectName
Case "AcDbBlockReference"
Dim acEntityCopy As IAcadEntity = acEntity.Copy
acEntityCopy.Layer = "Exploded_Entities"
acDoc.SendCommand("_explode" & vbCr & "(handent """ & acEntityCopy.Handle & """)" & vbCr & vbCr)
End Select
Next
MsgBox("After: " & acDoc.ActiveLayout.Block.Count) ' Объектная модель видимо не обновилась!
End Select
Next
End Sub